基于VerilogHDL的数字跑表详细(西科大)

文章目录

  • 一、题目解析
  • 二、代码模块化分析
    • 1.分频模块(divider_module)
    • 2.计数器模块(实现毫秒,秒,分钟的计数实现)
    • 3.动态数码管显示模块(数码管段选和位选)
  • 三、总结

一、题目解析

 题目要求使用VerilogHDL设计一个数字跑表,需要具有CLR,PAUSE以及六位数码管的计时跑表,并编写测试代码实现其仿真验证。

题目任务分析 :
输入端口:
1 )复位信号 CLR ,当 CLR=1 ,输出全部置 0 ,当 CLR=0 ,系统正常工作。
2 )暂停信号 PAUSE ,当 PAUSE=1 ,暂停计数,当 PAUSE=0,正常计数。
3 )系统时钟 CLK CLK=50MHz。
输出端口:
数码管驱动 ----DATA1 ,位宽 14 位,其中, DATA1[7 0] 是数码管显示值(即段选),DATA1[14 8] 是数码管控制端口(即位选)。

二、代码模块化分析

       从题目的任务分析我们可以看出:首先我们需要一个百分秒时钟,以实现最低位的时钟需求;其次需要计数器模块,将百分秒的计数输出信号转化给秒,分钟;然后需要将百分秒,秒,分钟的数据结果显示到动态数码管中,因此需要设计一个动态数码管显示以及数据转化的模块;最后利用top层将各模块相连接,实现题目要求。

1.分频模块:

通过公式计算出10ms对应的计数值,在always语句中设置计数累加,判断值达到后计数count清零,CLK取高电平,实现每10ms一次上升沿信号的分频模块。(注:一般的FPGA板内部晶振时钟为50MHz)

2.计数器模块

代码如下:

将分频模块中的输出时钟(即10ms时钟)作为计数模块的输入,在百分秒计数满100后,实现百分秒的清零,并给出一个高电平信号(即cn1==1),达到第二个always语句的触发条件,在接收60次cn1的触发之后(即秒位计数60秒),实现秒位的清零,并同理给出cn2==1的触发信号,实现分钟位的计数。 

3.动态数码管显示模块

在实现动态数码管显示模块之前,我们需要了解的是,动态数码管是通过段选和位选实现,因此每次只能显示一个数码管上的值,但是在较快的刷新频率下使肉眼不能产生余晖效应,无法捕捉到数码管的变化(即用较快的速度骗过人们的眼睛),即可实现几位数码管同时显示的效果。

由于实验板的数码管是共阴,因此在位选信号时应该给予低信号驱动,段选时则应该使用高电平信号。

代码如下:

代码中的function用于实现计数器模块输出的sum值转化为数码管的段选值;选择合适的刷新频率完成简易的分频,实现位选信号的循环(即第一个always语句块);最后将所有的6位位选信号和8位段选信号统一赋值给DATA1,实现此模块的功能。


三、总结

我将最终整合的top层代码放到了总结处:

  • 7
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不会洛必达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值