• 10.26数字钟设计,数电第二次实验总结


    实验七 数字钟设计(*****)

        实现一个六十进制数字时钟,秒到 60 则归零重加,同时让分加1,分加到60归零重加,并让小时加 1,小时加到24归零重加。要求用数码管1,0显示秒值,数码管3,2显示分值,小时以十六进制形式显示在led灯上。

    文件结构

    顶层文件 

    1. `timescale 1ns / 1ps
    2. module total(
    3. input clk,//开关,开时复位
    4. input reset,
    5. output[6:0]show,//表示怎么亮
    6. output[3:0]dn0,//表示4个数码管哪个亮
    7. output[7:0] hour//表示下面LED的情况
    8. );//最后输出就是这三个信号
    9. wire[3:0]minh;
    10. wire[3:0]minl;
    11. wire[3:0]sech;
    12. wire[3:0]secl;
    13. pclock pc(clk,reset,minh,minl,sech,secl,hour);
    14. show ps(clk,reset,minh,minl,sech,secl,show,dn0);//将out0~3信号处理为数码管信号
    15. endmodule

    产生时钟信号

    1. `timescale 1ns / 1ps
    2. module pclock(
    3. input clk,
    4. input reset,
    5. output reg[3:0]minh,
    6. output reg[3:0]minl,
    7. output reg[3:0]sech,
    8. output reg[3:0]secl,
    9. output reg[7:0]hour
    10. );//产生时分秒信号
    11. wire hzone;
    12. hz1 u(clk,hzone);
    13. //产生秒的低位
    14. always@(posedge hzone,negedge reset)begin
    15. if(!reset)begin
    16. secl=0;
    17. end
    18. else begin
    19. if(secl==9)
    20. secl<=0;
    21. else
    22. secl<=secl+1'b1;
    23. end
    24. end
    25. //秒的高位
    26. always@(negedge secl[3],negedge reset)begin
    27. if(!reset)
    28. sech=0;
    29. else begin
    30. if(sech==5)
    31. sech<=0;
    32. else
    33. sech<=sech+1'b1;
    34. end
    35. end
    36. //分的低位
    37. always@(negedge sech[2],negedge reset)begin
    38. if(!reset)
    39. minl=0;
    40. else begin
    41. if(minl==9)
    42. minl<=0;
    43. else
    44. minl<=minl+1'b1;
    45. end
    46. end
    47. //分的高位
    48. always@(negedge minl[3],negedge reset)begin
    49. if(!reset)
    50. minh=0;
    51. else begin
    52. if(minh==5)
    53. minh<=0;
    54. else
    55. minh<=minh+1'b1;
    56. end
    57. end
    58. //小时
    59. always@(negedge minh[2],negedge reset)begin
    60. if(!reset)
    61. hour=0;
    62. else
    63. hour<=hour+1'b1;
    64. end
    65. endmodule

    分频器1

    1. `timescale 1ns / 1ps
    2. module hz1(
    3. input clk,
    4. output reg clk_o
    5. );//将系统时钟处理为1HZ信号
    6. reg[31:0]cnt;
    7. parameter n=99999999;
    8. always@(posedge clk)begin
    9. if(cnt==9999999)
    10. cnt=0;
    11. else begin
    12. cnt=cnt+1'b1;
    13. if(cnt<=49999999)
    14. clk_o=1'b1;
    15. else
    16. clk_o=1'b0;
    17. end
    18. end
    19. endmodule

    显示分秒

    1. `timescale 1ns / 1ps
    2. module show(
    3. input clk,
    4. input reset,
    5. input[3:0]minh,
    6. input[3:0]minl,
    7. input[3:0]sech,
    8. input[3:0]secl,
    9. output reg[6:0]show,
    10. output reg [3:0] en
    11. );//显示时分秒信号,选择出一个信号
    12. //将最终选择出的要显示信号转化为数码管信号
    13. wire hzshow;
    14. showhz v(clk,hzshow);
    15. //四位数码管,高位分(6进制,3位)低位分(10进制,4位)高位秒低位秒,共要14位,统一都成四位
    16. reg[3:0]digit;
    17. //确定数码管显示的第几位
    18. reg[1:0]dn;
    19. always@(posedge hzshow,negedge reset)begin
    20. if(!reset)
    21. dn<=0;
    22. else begin
    23. if(dn==3)
    24. dn<=0;
    25. else
    26. dn<=dn+1'b1;
    27. end
    28. end
    29. //确定位上的数字
    30. always@(dn, reset)begin
    31. if(!reset)begin
    32. digit<=0;
    33. en<=4'b0000;
    34. end
    35. else begin
    36. case(dn)
    37. 0: begin en <= 4'b1110; digit<=secl; end
    38. 1: begin en <= 4'b1101; digit<=sech; end
    39. 2: begin en <= 4'b1011; digit<=minl; end
    40. 3: begin en <= 4'b0111; digit<=minh; end
    41. endcase
    42. end
    43. end
    44. //将其转化为数码管信号
    45. always@(digit, reset) begin
    46. if(!reset)
    47. show = 7'b0000001;
    48. else begin
    49. case(digit)
    50. 4'h0: show <= 7'b0000001;
    51. 4'h1: show <= 7'b1001111;
    52. 4'h2: show <= 7'b0010010;
    53. 4'h3: show <= 7'b0000110;
    54. 4'h4: show <= 7'b1001100;
    55. 4'h5: show <= 7'b0100100;
    56. 4'h6: show <= 7'b0100000;
    57. 4'h7: show <= 7'b0001111;
    58. 4'h8: show <= 7'b0000000;
    59. 4'h9: show <= 7'b0000100;
    60. endcase
    61. end
    62. end
    63. endmodule

    分频器2 

    1. `timescale 1ns / 1ps
    2. module showhz(
    3. input clk,
    4. output reg clk_o
    5. );//将系统时钟处理为1HZ信号
    6. reg[31:0]cnt;
    7. always@(posedge clk)begin
    8. if(cnt==99999)
    9. cnt=0;
    10. else begin
    11. cnt=cnt+1'b1;
    12. if(cnt<=49999)
    13. clk_o=1'b1;
    14. else
    15. clk_o=1'b0;
    16. end
    17. end
    18. endmodule

     引脚文件

    1. set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets clk_IBUF]
    2. set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets reset_IBUF]
    3. set_property PACKAGE_PIN R2 [get_ports reset]
    4. set_property IOSTANDARD LVCMOS33 [get_ports reset]
    5. set_property IOSTANDARD LVCMOS33 [get_ports clk]
    6. set_property IOSTANDARD LVCMOS33 [get_ports {show[6]}]
    7. set_property IOSTANDARD LVCMOS33 [get_ports {show[5]}]
    8. set_property IOSTANDARD LVCMOS33 [get_ports {show[4]}]
    9. set_property IOSTANDARD LVCMOS33 [get_ports {show[3]}]
    10. set_property IOSTANDARD LVCMOS33 [get_ports {show[2]}]
    11. set_property IOSTANDARD LVCMOS33 [get_ports {show[1]}]
    12. set_property IOSTANDARD LVCMOS33 [get_ports {show[0]}]
    13. set_property PACKAGE_PIN U7 [get_ports {show[0]}]
    14. set_property PACKAGE_PIN V5 [get_ports {show[1]}]
    15. set_property PACKAGE_PIN U5 [get_ports {show[2]}]
    16. set_property PACKAGE_PIN V8 [get_ports {show[3]}]
    17. set_property PACKAGE_PIN U8 [get_ports {show[4]}]
    18. set_property PACKAGE_PIN W6 [get_ports {show[5]}]
    19. set_property PACKAGE_PIN W7 [get_ports {show[6]}]
    20. set_property PACKAGE_PIN U2 [get_ports {dn0[0]}]
    21. set_property IOSTANDARD LVCMOS33 [get_ports {dn0[3]}]
    22. set_property IOSTANDARD LVCMOS33 [get_ports {dn0[2]}]
    23. set_property IOSTANDARD LVCMOS33 [get_ports {dn0[1]}]
    24. set_property IOSTANDARD LVCMOS33 [get_ports {dn0[0]}]
    25. set_property PACKAGE_PIN U4 [get_ports {dn0[1]}]
    26. set_property PACKAGE_PIN V4 [get_ports {dn0[2]}]
    27. set_property PACKAGE_PIN W4 [get_ports {dn0[3]}]
    28. set_property PACKAGE_PIN W15 [get_ports {hour[7]}]
    29. set_property PACKAGE_PIN W13 [get_ports {hour[6]}]
    30. set_property PACKAGE_PIN W14 [get_ports {hour[5]}]
    31. set_property PACKAGE_PIN U15 [get_ports {hour[4]}]
    32. set_property PACKAGE_PIN U16 [get_ports {hour[3]}]
    33. set_property PACKAGE_PIN V13 [get_ports {hour[2]}]
    34. set_property PACKAGE_PIN V14 [get_ports {hour[1]}]
    35. set_property PACKAGE_PIN U14 [get_ports {hour[0]}]
    36. set_property IOSTANDARD LVCMOS33 [get_ports {hour[7]}]
    37. set_property IOSTANDARD LVCMOS33 [get_ports {hour[6]}]
    38. set_property IOSTANDARD LVCMOS33 [get_ports {hour[5]}]
    39. set_property IOSTANDARD LVCMOS33 [get_ports {hour[4]}]
    40. set_property IOSTANDARD LVCMOS33 [get_ports {hour[3]}]
    41. set_property IOSTANDARD LVCMOS33 [get_ports {hour[2]}]
    42. set_property IOSTANDARD LVCMOS33 [get_ports {hour[1]}]
    43. set_property IOSTANDARD LVCMOS33 [get_ports {hour[0]}]
    44. set_property PACKAGE_PIN W5 [get_ports clk]

  • 相关阅读:
    「深入理解」缓存更新策略及缓存不一致问题解决方案
    数据动态验证的简单应用
    python基础操作笔记
    2、Elasticsearch 基础功能
    JVM学习08——JVM调优
    Windows下点击startup.bat启动tomcat出现乱码
    学习日记(单元测试、反射、注解、动态代理)
    镜像的在节点上的存储结构是怎么样的?
    《中国垒球》:跨界互动·全明星赛
    Spring的AOP介绍和使用
  • 原文地址:https://blog.csdn.net/m0_73553411/article/details/134064236