0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA学习系列:22. 数字时钟的设计

FPGA学习交流 2018-08-07 13:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

设计背景:

数字时钟的设计,在我们的好多设计中都有过这样那样的设计,这基本属于一个比较精简的一个小项目,可以练习我们学到的好多知识点。

设计原理:

本次的设计主要还是为了结合我们所学到的知识,因为我们学到的知识要经常的用,并不是我们不用,一直在用我们就可以加深我们的想法和思路,这也是一种良好的学习态度。

我设计的数字钟是这样的一种架构,我又3个按键,上电后,我们需要先配置我们的时分秒,我的设计是一个按键来控制我们的时,一个按键来控制我们的分,秒我没有控制,因为我比较懒,大家可以自己取设计控制一下我们的设计,那么然后是这样的,第三个按键来控制我们时钟的运行,也就是说当我们用2个那件配置好了我们的时钟的时候,按下这个开始按键,我们的时钟就开始工作了。

那么我们就在来讨论一下我们的按键模块,我们的按键模块是这样的,因为按键有抖动,我加入按键消抖,和边沿检测电路,这样我们就实现了按键的消抖,用到的也就是我们前面设计的知识。

设计架构图:

image.png


写好一个模块,我们可以任意例化几次都是可以的,目前还不用考虑别的,三个按键就例化了三次我们的按键消抖和边沿检测。

设计代码:

设计模块

0moduletime_seg(clk,rst_n,sel,seg7,key_fen,key_shi,go);

1

2 inputclk;

3 inputrst_n;

4

5 inputkey_fen; //控制分的按键

6 inputkey_shi; //控制时的按键

7 inputgo; //控制时钟运行的按键

8 output[2:0]sel;

9 output[7:0]seg7;

10

11 wire[23:0]data_in;

12

13

14seg seg_dut( //例化我们的数码管模块

15 .clk(clk),

16 .rst_n(rst_n),

17 .sel(sel),

18 .seg7(seg7),

19 .data_in(data_in)

20 );

21 wiref_fen,f_shi,f_go;

22contol countol_dut( //例化我们的控制模块

23 .clk(clk),

24 .rst_n(rst_n),

25 .data(data_in),

26 .key_fen1(f_fen),

27 .key_shi1(f_shi),

28 .go1(f_go)

29 );

30 wirefen_x,shi_x,go_x;

31key_xiaodou shi3( //例化3次消抖

32 .clk(clk),

33 .rst_n(rst_n),

34 .key(key_shi),

35 .key_x(shi_x)

36 );

37key_xiaodou fen3(

38 .clk(clk),

39 .rst_n(rst_n),

40 .key(key_fen),

41 .key_x(fen_x)

42 );

43

44key_xiaodou go3(

45 .clk(clk),

46 .rst_n(rst_n),

47 .key(go),

48 .key_x(go_x)

49 );

50

51edge_jiance shi2( //例化3次边沿检测电路

52 .clk(clk),

53 .rst_n(rst_n),

54 .signle(shi_x),

55 .nege_dge(f_shi),

56 .pose_dge()

57 );

58edge_jiance fen2(

59 .clk(clk),

60 .rst_n(rst_n),

61 .signle(fen_x),

62 .nege_dge(f_fen),

63 .pose_dge()

64 );

65edge_jiance go2(

66 .clk(clk),

67 .rst_n(rst_n),

68 .signle(go_x),

69 .nege_dge(f_go),

70 .pose_dge()

71 );

72

73endmodule

控制模块:

0modulecontol(clk,rst_n,data,key_fen1,key_shi1,go1);

1

2 inputclk;

3 inputrst_n;

4 inputkey_fen1; //输入端口

5 inputkey_shi1;

6 inputgo1;

7

8 outputreg[23:0]data; //输出的端口

9

10

11 reg[26:0]count;

12

13 always@(posedgeclk ornegedgerst_n) //1秒的计数器

14 if(!rst_n)

15 begin

16 count <=26'd0;

17 end

18 else

19 begin

20 if(count ==50_000_000)

21 count <=26'd0;

22 else

23 begin

24 count <=count +1'd1;

25 end

26 end

27

28 wireflag;

29

30 assignflag =(count ==50_000_000)?1'b1:1'b0; //计数到了1S给一个高脉冲

31

32 reg[1:0]state;

33 always@(posedgeclk ornegedgerst_n)

34 if(!rst_n)

35 begin

36 data <=0;

37 state <=0;

38 end

39 else

40 case(state)

41 0:begin

42 if(key_fen1) //调节分

43 begin

44 data[11:8]<=data[11:8]+1;

45 if(data[11:8]==9)

46 begin

47 data[11:8]<=4'd0;

48 data[15:12]<=data[15:12]+1'b1;

49 if(data[15:12]==5)

50 data[15:12]<=0;

51 end

52 end

53 elseif(key_shi1) //调节时

54 begin

55 data[19:16]<=data[19:16]+1;

56 if(data[19:16]==9&&data[23:20]!=1)

57 begin

58 data[19:16]<=4'd0;

59 data[23:20]<=data[23:20]+1'b1;

60 if(data[23:20]==1)

61 data[23:20]<=0;

62 end

63 elseif(data[19:16]==2&&data[23:20]==1)

64 begin

65 data[19:16]<=0;

66 data[23:20]<=0;

67 end

68 end

69 elseif(go1) //让我们的时钟启动

70 begin

71 state <=1;

72 end

73 else

74 state <=0;

75 end

//一层一层的嵌套设计,让我们的秒一个一个的来驱动

76 1:begin

77 if(flag )

78 begin

79 data[3:0]<=data[3:0]+1;

80 if(data[3:0]==9) //秒的个位

81 begin

82 data[3:0]<=4'd0;

83 data[7:4]<=data[7:4]+1'b1;

84 if(data[7:4]==5) //秒的时位

85 begin

86 data[7:4]<=4'd0;

87 data[11:8]<=data[11:8]+1'b1;

88 if(data[11:8]==9) //分的个位

89 begin

90 data[11:8]<=4'd0;

91 data[15:12]<=data[15:12]+1'b1;

92 if(data[15:12]==5) //分的十位

93 begin

94 data[15:12]<=4'd0;

95 data[19:16]<=data[19:16]+1'b1;

96 if(data[19:16]==9&&data[23:20]!=1)//时的计算

97 begin

98 data[23:20]<=4'd0;

99 data[23:20]<=data[23:19]+1'b1;

100 if(data[23:20]==1)

101 data[23:20]<=4'd0;

102 end

103 elseif(data[19:16]==2&&data[23:20]==1)//如果到12小时制

104 begin

105 data[19:16]<=0;

106 data[23:20]<=0;

107 end

108 end

109 end

110 end

111 end

112 end

113 end

114

115 default:;

116 endcase

117

118

19 endmodule

这边我就不给大家仿真了,后续我会给大家发一个完整的工程,建议大家可以自己例化我的设计。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1664

    文章

    22502

    浏览量

    639083
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    IDT ICS664 - 01数字视频时钟源:高清电视数字视频设备的时钟解决方案

    IDT ICS664 - 01数字视频时钟源:高清电视数字视频设备的时钟解决方案 一、引言 在高清电视数字视频设备中,
    的头像 发表于 04-12 14:40 340次阅读

    Xilinx FPGA中的混合模式时钟管理器MMCME2_ADV详解

    FPGA 的浩瀚宇宙中,时钟系统不仅是驱动逻辑运转的“心脏”,更是决定系统稳定性与性能上限的“指挥棒”。对于 Xilinx 7 系列 FPGA 开发者而言,如果仅满足于使用 Clo
    的头像 发表于 04-10 11:20 182次阅读
    Xilinx <b class='flag-5'>FPGA</b>中的混合模式<b class='flag-5'>时钟</b>管理器MMCME2_ADV详解

    浅谈FPGA时钟输入要求

    Virtex-7 FPGA时钟输入主要通过其全局时钟缓冲器(BUFG、BUFH等)和时钟管理模块(MMCM、PLL)来处理。对输入时钟的要
    的头像 发表于 03-25 15:26 901次阅读

    RENESAS ICS664 - 02 PECL数字视频时钟源:高清电视时钟解决方案

    RENESAS ICS664 - 02 PECL数字视频时钟源:高清电视时钟解决方案 在高清电视(HDTV)数字视频设备的设计中,稳定且高质量的时钟
    的头像 发表于 03-13 16:10 246次阅读

    Xilinx FPGA中IDELAYCTRL参考时钟控制模块的使用

    IDELAYCTRL 是 Xilinx FPGA(特别是支持高速 I/O 的系列,如 Virtex-5/6/7、Kintex-7、Artix-7、Spartan-6/7 等)中用于管理和校准输入延迟模块(IDELAYE2/IDELAYE3)的必须存在的参考
    的头像 发表于 02-26 14:41 4668次阅读

    汽车时钟MC - K系列时钟振荡器:设计与应用指南

    汽车时钟MC - K系列时钟振荡器:设计与应用指南 在电子工程领域,尤其是汽车电子设计中,时钟振荡器的性能直接影响着整个系统的稳定性和可靠性。今天,我们将深入探讨KyOCERa AVX
    的头像 发表于 12-30 10:10 356次阅读

    数字IC/FPGA设计中的时序优化方法

    数字IC/FPGA设计的过程中,对PPA的优化是无处不在的,也是芯片设计工程师的使命所在。此节主要将介绍performance性能的优化,如何对时序路径进行优化,提高工作时钟频率。
    的头像 发表于 12-09 10:33 3544次阅读
    <b class='flag-5'>数字</b>IC/<b class='flag-5'>FPGA</b>设计中的时序优化方法

    高云半导体22nm FPGA产品家族亮相ICCAD-Expo 2025

    2025年11月20日, 国内领先的FPGA芯片供应商广东高云半导体科技股份有限公司(以下简称“高云半导体”)隆重出席2025集成电路发展论坛(成渝)暨第31届集成电路设计业展览会(ICCAD 2025)。展会期间,高云半导体全面展示了其布局完善的22nm全
    的头像 发表于 11-27 11:10 2323次阅读
    高云半导体<b class='flag-5'>22</b>nm <b class='flag-5'>FPGA</b>产品家族亮相ICCAD-Expo 2025

    NTP子母钟系统、数字时钟系统、NTP校时

    数字时钟
    西安同步电子科技有限公司
    发布于 :2025年11月12日 17:02:04

    开源RISC-V处理器(蜂鸟E203)学习(二)修改FPGA综合环境(移植到自己的Xilinx FPGA板卡)

    1.简述 首先感谢芯来开源了蜂鸟E203 risc-v处理器,提供了比较完整的工程环境、配套的软硬件。但是配套的FPGA板卡实在太贵,对于自费学习的来说是不小的学习成本,而且我也认为完备环境
    发表于 10-31 08:46

    FPGA在机器学习中的具体应用

    随着机器学习和人工智能技术的迅猛发展,传统的中央处理单元(CPU)和图形处理单元(GPU)已经无法满足高效处理大规模数据和复杂模型的需求。FPGA(现场可编程门阵列)作为一种灵活且高效的硬件加速平台
    的头像 发表于 07-16 15:34 3088次阅读

    Analog Devices Inc. AD9546双通道DPLL 数字化时钟同步器数据手册

    )对准的灵活、可扩展的时钟传输系统。AD9546非常适合用于设计网络设备,其必须符合ITU-T G.8273.2 D类IEEE ^®^ 边界时钟的同步要求。此外,数字化时钟还适合用于需要准确地将频率和相位传输到多个用例端点的应用
    的头像 发表于 07-01 09:53 899次阅读
    Analog Devices Inc. AD9546双通道DPLL <b class='flag-5'>数字化时钟</b>同步器数据手册

    高性能紧凑型 RFSoC FPGA 开发平台 AXW22,重塑射频开发体验

    如果您正在烦恼如何在 有限的物理空间和预算内,依然实现卓越的射频带宽与处理能力 ,ALINX 基于 AMD RFSoC FPGA 开发板 AXW22 正是为您准备的。   (AMD Zynq
    的头像 发表于 06-24 10:24 1134次阅读
    高性能紧凑型 RFSoC <b class='flag-5'>FPGA</b> 开发平台 AXW<b class='flag-5'>22</b>,重塑射频开发体验

    【教程】轻松上手!E22系列模组简单通信教程

    一简介E22-xxxT22系列是全新一代的LoRa无线数传模块,该系列(UART)模块基于SEMTECH高性能射频芯片而研发,其发射功率为:22dBm,具有多种传输方式,工作频段分别在
    的头像 发表于 06-19 19:33 1450次阅读
    【教程】轻松上手!E<b class='flag-5'>22</b><b class='flag-5'>系列</b>模组简单通信教程

    Xilinx Ultrascale系列FPGA时钟资源与架构解析

    Ultrascale是赛灵思开发的支持包含步进功能的增强型FPGA架构,相比7系列的28nm工艺,Ultrascale采用20nm的工艺,主要有2个系列:Kintex和Virtex
    的头像 发表于 04-24 11:29 2910次阅读
    Xilinx Ultrascale<b class='flag-5'>系列</b><b class='flag-5'>FPGA</b>的<b class='flag-5'>时钟</b>资源与架构解析