规划一款电子表芯片,能够显示年月日,星期,并且实现闰年的自动调整,钟振32768Hz。
要求:增加测试设计,快速覆盖400年周期
目的:
- 掌握Verilog语言对组合逻辑的描述
- 学习testbench的设计方法
- 掌握仿真器(modelsim/Verilog/VCS)的仿真、调试、波形输出等常用技巧
- 掌握DC约束规划方法、综合器使用、结果查看、后仿真等
- 熟悉简单芯片从规划到实现方法
设计思路:
- 400年周期设定为1900年1月1日-2299年12月31日。
- 以天(day)为单位,每七天进位(carry)一星期(week),判断月份,确定每月的天数(number),到每个月最后一天进位月,月满12个月进位年,年到2199进位变为1900。
- 钟振32768Hz,2^15 = 32768,所以 32768Hz 16分频后变为 1 Hz,周期即为1秒。测试时若设置为32768Hz,在一个周期内即可跑32768秒,一般晶振采用32768Hz便于分频。此例以天为单位,测试时1s即可跑32768天,5s即可跑完400年,但这种测试方法过于笨重。本实验不做硬件设计因此不考虑钟振。
- 检测闰年没有找到较好方法,由于本例只有400年周期,因此按如下所示方法进行检测
assign year_4 = (year[1:0]==2'b0);
assign year_100 = (year == 1900)||(year == 2100)||(year == 2200);
assign year_400 = (year == 2000);
if((year_4&&!year_100)||year_400)
number=29;
else
number=28;
文件代码如下:
module calendar(
// 时钟、复位、设置时间
input clk , rst , time_set,
// 设置时间的4个参数
input[11:0] year_set,