本文使用 SystemVerilog 语言在 Basys3 开发板上实现了带时钟、倒计时、闹钟、秒表、日期、日期/时间设定功能的数字钟。
整体思路上,为避免除法器的使用,每个数位设置一个寄存器。有五套并行的(类)计时系统,分别存放时钟、倒计时、闹钟、秒表、日期的信息。
- 控制模块 接受分频后的时钟信号,把输入引脚的信息译码。
- 主逻辑 接受原始时钟信号。
- 处理时钟自增、倒计时自减、秒表自增、日期自增
- 处理时钟、倒计时、日期的设定
- 显示模块 解释分频后的显示时钟信号。
日期自增这块,考虑到进位比较复杂,于是设置了日、月、年三个进位信号,即可在三个时钟周期分开处理年月日的操作。注意避开乘法器的使用。
一句话总结一下,整个系统只要想清楚操控逻辑,代码实现还是比较简单的。建议首先考虑、完成时钟和设时这两个功能,这决定了程序的框架。完成了这部分以后其他的都是水到渠成了。
然后就是,一定要上板子调试。我是全程就没动 simulation,直接在板子上调试。一是方便,二是很多错(特别是牵扯到异步,不知道什么时候会出错)只有上了板子才知道。