• 数码管的静态显示(二)


    1.原理

    要按照上图的顺序传递位选和段选的数据。

    因为q0是最高位,共阳极数码管结构是dp....a,所以应该先传入低位a,而a在上图中的8段2进制编码中是seg[7],所以段选信号的顺序是seg[0],...seg[7]。

    因为输出信号是两个时钟,所以要进行分频,因为不能太高。因为是4分频,所以计数的最大值是3。

    (FPGA使用的晶振太高了, 74hc595 在50MHz的频率下没法正常工作, 所以选一个较为低一点的时钟频率作为触发)

    为了让时钟信号能正确采集到数据,所以时钟信号的上升沿应该对准数据的稳定状态,也就是数据的中间。

    2.代码

    2.1 hc595_ctrl.v

    1. module hc595_ctrl(
    2. input wire sys_clk ,
    3. input wire sys_rst_n ,
    4. input wire [5:0] sel ,
    5. input wire [7:0] seg ,
    6. output reg ds ,
    7. output reg shcp ,
    8. output reg stcp ,
    9. output wire oe
    10. );
    11. wire [13:0] data;
    12. reg [1:0] cnt;
    13. reg [3:0] cnt_bit;
    14. assign oe=1'b0;
    15. assign data={seg[0],seg[1],seg[2],seg[3],seg[4],seg[5],seg[6],seg[7],sel[5],sel[4],sel[3],sel[2],sel[1],sel[0]};
    16. always@(posedge sys_clk or negedge sys_rst_n)
    17. if(sys_rst_n==1'b0)
    18. cnt<=2'd0;
    19. else if(cnt==2'd3)
    20. cnt<=2'd0;
    21. else
    22. cnt<=cnt+1'b1;
    23. always@(posedge sys_clk or negedge sys_rst_n)
    24. if(sys_rst_n==1'b0)
    25. cnt_bit<=4'd0;
    26. else if((cnt==2'd3)&&(cnt_bit==4'd13))
    27. cnt_bit<=4'd0;
    28. else if(cnt==2'd3)
    29. cnt_bit<=cnt_bit+1'b1;
    30. else
    31. cnt_bit<=cnt_bit;
    32. always@(posedge sys_clk or negedge sys_rst_n)
    33. if(sys_rst_n==1'b0)
    34. ds<=1'd0;
    35. else if(cnt==2'd0)
    36. ds<=data[cnt_bit];
    37. else
    38. ds<=ds;
    39. always@(posedge sys_clk or negedge sys_rst_n)
    40. if(sys_rst_n==1'b0)
    41. shcp<=1'b0;
    42. else if(cnt==2'd2)
    43. shcp<=1'b1;
    44. else if(cnt==2'd0)
    45. shcp<=1'b0;
    46. else
    47. shcp<=shcp;
    48. always@(posedge sys_clk or negedge sys_rst_n)
    49. if(sys_rst_n==1'b0)
    50. stcp<=1'b0;
    51. else if((cnt==2'b0)&&(cnt_bit<=4'b0))
    52. stcp<=1'b1;
    53. else if((cnt==2'd2)&&(cnt_bit==4'b0))
    54. stcp<=1'b0;
    55. else
    56. stcp<=stcp;
    57. endmodule

    2.2 seg_595_static.v

    1. module seg_595_static
    2. (
    3. input wire sys_clk ,
    4. input wire sys_rst_n ,
    5. output reg ds ,
    6. output reg shcp ,
    7. output reg stcp ,
    8. output reg oe
    9. );
    10. wire [5:0]sel;
    11. wire [7:0]seg;
    12. seg_static #(
    13. .CNT_MAX (25'd24)
    14. )
    15. seg_static_inst(
    16. .sys_clk (sys_clk) ,
    17. .sys_rst_n (sys_rst_n) ,
    18. .sel (sel) ,
    19. .seg (seg)
    20. );
    21. hc595_ctrl hc595_ctrl_inst(
    22. .sys_clk (sys_clk ) ,
    23. .sys_rst_n (sys_rst_n ),
    24. .sel (sel ) ,
    25. .seg (seg ) ,
    26. .ds (ds ),
    27. .shcp (shcp ),
    28. .stcp (stcp ),
    29. .oe (oe )
    30. );
    31. endmodule

    2.3 tb_seg_595_ctrl.v

    1. `timescale 1ns/1ns
    2. module tb_seg_595_ctrl();
    3. reg sys_clk;
    4. reg sys_rst_n;
    5. wire ds ;
    6. wire shcp ;
    7. wire stcp ;
    8. wire oe ;
    9. initial
    10. begin
    11. sys_clk=1'b1;
    12. sys_rst_n<=1'b0;
    13. #20
    14. sys_rst_n<=1'b1;
    15. end
    16. always#10 sys_clk=~sys_clk;
    17. seg_595_static seg_595_static_inst
    18. (
    19. .sys_clk (sys_clk ) ,
    20. .sys_rst_n (sys_rst_n) ,
    21. .ds (ds ) ,
    22. .shcp (shcp ) ,
    23. .stcp (stcp ) ,
    24. .oe (oe )
    25. );
    26. endmodule

    2.4 tb_seg_595_static.v

    1. `timescale 1ns/1ns
    2. module tb_seg_595_static();
    3. reg sys_clk;
    4. reg sys_rst_n;
    5. initial
    6. begin
    7. sys_clk=1'b1;
    8. sys_rst_n<=1'b0;
    9. #20
    10. sys_rst_n<=1'b1;
    11. end
    12. always#10 sys_clk=~sys_clk;
    13. seg_static #(
    14. .CNT_MAX (25'd24)
    15. )
    16. seg_static_inst(
    17. .sys_clk (sys_clk) ,
    18. .sys_rst_n (sys_rst_n) ,
    19. .sel (sel) ,
    20. .seg (seg)
    21. );
    22. endmodule

  • 相关阅读:
    关于随机森林randomforest对结果进行分类的原则的个人理解
    20220719_Filter_Listener_AJAX_Axios的用法
    科研中常用的搜索引擎推荐:Base
    基于 QUIC 协议的 HTTP/3 正式发布!
    SSM学习——Rest风格与案例(12)
    灵性图书馆:好书推荐-《内在的探索》
    uniapp 使用定时器和取消定时器
    Java SpringBoot VI
    [modern c++] 函数式编程与 std::ref
    既然测试也要求写代码,那干脆让开发兼任测试不就好了吗?
  • 原文地址:https://blog.csdn.net/m0_51133942/article/details/136547161