• FPGA序列脉冲波形发生器


    开发环境:Quartus Prime 18.0

    设备:小脚丫开发板,搭载AlteraMAX10 10M02SCM153C8G

    语言:verilog HDL

    程序效果:

            基本功能完成情况

                    (1)实现了2bit目标脉冲波形的输出

                    (2)实现了清零的功能

            扩展功能完成情况

                    (1)实现了目标序列脉冲的反相输出,以及暂停保持的功能

                    (2)采用两颗RGB LED展示状态信息

    主程序代码:

    1. /*************************************************************
    2. * Module: Pulses Generator
    3. * Date : 2024-6-15
    4. * Function:
    5. * LED1 | LED2 : Display 2-bit pulses
    6. *
    7. * RGB_LED1:
    8. * Green Light : Normal working
    9. * Blue Light : Reverse working
    10. *
    11. * RGB_LED2:
    12. * Green Light : Normal working
    13. * Yellow Light: Hold status
    14. * Red Light : Reset status
    15. *
    16. * SW1 : Control reset
    17. * SW2 : Control normal and reverse status
    18. * Key1 : Control hold status
    19. *************************************************************/
    20. module pulses(
    21. input clk,rst,hold,reverse, //PCLK, SW1, Key1, SW2
    22. output reg[2:0] led, //RGB_LED2: normal or hold or rst
    23. output reg[2:0] led1, //RGB_LED1: normal or reverse
    24. output reg[1:0] z, //LED1 | LED2
    25. output [17:0] seg
    26. );
    27. //define light color
    28. parameter GREEN =3'b101,
    29. BLUE =3'b110,
    30. RED =3'b011,
    31. YELLOW=3'b001;
    32. //divider: pluse of 1s
    33. reg VDD;
    34. initial VDD=1;
    35. divider #(.N(6000000),.WIDTH(24))divider1(
    36. .clk(clk),
    37. .rst(VDD),
    38. .clk_out(clk1)
    39. );
    40. //segment: show group No.: 30
    41. reg [7:0]group_num;
    42. segment7 high(.A(group_num[7:4]),.g_to_a(seg[17:9]));
    43. segment7 low(.A(group_num[3:0]),.g_to_a(seg[8:0]));
    44. //pulses generator
    45. wire [1:0]zp; //POSITIVE
    46. wire [1:0]zn; //NEGATIVE
    47. reg [2:0]state;
    48. parameter S0=3'b000,
    49. S1=3'b010,
    50. S2=3'b111,
    51. S3=3'b110;
    52. always@(posedge clk1,negedge rst, negedge hold)
    53. begin
    54. group_num<=8'b0011_0000; //BCD code: group No.30
    55. //reset
    56. if(!rst) begin state<=S0;led<=RED; end
    57. //hold
    58. else if(!hold) begin state<=state;led<=YELLOW; end
    59. //normal working
    60. else
    61. begin
    62. led<=GREEN;
    63. case(state)
    64. S0: state<=S1;
    65. S1: state<=S2;
    66. S2: state<=S3;
    67. S3: state<=S0;
    68. endcase
    69. end
    70. end
    71. assign zp=~state[1:0];
    72. assign zn=state[1:0];
    73. //selector: zp or zn
    74. always @(reverse)
    75. begin
    76. if(!reverse) begin z=zn;led1=BLUE; end
    77. else begin z=zp;led1=GREEN; end
    78. end
    79. endmodule

    子模块 1:分频器

    1. module divider(
    2. inout clk,
    3. input rst,
    4. output reg clk_out
    5. );
    6. parameter N=6000000,WIDTH=24;
    7. reg [WIDTH-1:0] cnt;
    8. always @(posedge(clk),posedge(rst))
    9. begin
    10. if(rst==1'b1)
    11. cnt<=24'b0;
    12. else if(cnt==N-1)
    13. cnt<=24'b0;
    14. else
    15. cnt<=cnt+1;
    16. end
    17. always @(posedge(clk),posedge(rst))
    18. begin
    19. if(rst==1'b1)
    20. clk_out<=1'b0;
    21. else if(cnt==N-1)
    22. clk_out<=~clk_out;
    23. else
    24. clk_out<=clk_out;
    25. end
    26. endmodule

     子模块2:数码管

    1. module segment7(
    2. input wire [3:0] A,
    3. output wire [8:0] g_to_a
    4. );
    5. reg [8:0] seg[15:0];
    6. initial
    7. begin
    8. seg[4'b0000]=9'h3f;
    9. seg[4'b0001]=9'h06;
    10. seg[4'b0010]=9'h5b;
    11. seg[4'b0011]=9'h4f;
    12. seg[4'b0100]=9'h66;
    13. seg[4'b0101]=9'h6d;
    14. seg[4'b0110]=9'h7d;
    15. seg[4'b0111]=9'h07;
    16. seg[4'b1000]=9'h7f;
    17. seg[4'b1001]=9'h6f;
    18. seg[4'b1010]=9'h77;
    19. seg[4'b1011]=9'h7c;
    20. seg[4'b1100]=9'h39;
    21. seg[4'b1101]=9'h5e;
    22. seg[4'b1110]=9'h79;
    23. seg[4'b1111]=9'h71;
    24. end
    25. assign g_to_a = seg[A];
    26. endmodule

    管脚分配:

    Analysis&Synthesis成功:

    Compile Design成功:

    programmer成功:

    视频展示:

    FPGA序列脉冲波形发生器

  • 相关阅读:
    视觉语言模型详解
    ABC分析做法、步骤、Pareto图制作方法解说
    近源渗透学习
    Django ORM 事务和查询优化
    java-对数据结构的简单认识
    python 变量引用,值变量
    关于SYSTICK延时函数的两个小疑问
    OpenResty中如何实现,按QPS、时间范围、来源IP进行限流
    波动数列(蓝桥杯)
    【人工智能学习之图像操作(四)】
  • 原文地址:https://blog.csdn.net/qq_72616157/article/details/139717322