1582 年以来的置闰规则:
- 普通闰年:公历年份是 4 的倍数,且不是 100 的倍数的,为闰年(如 2004年、2020 年等就是闰年)。
- 世纪闰年:公历年份是整百数的,必须是 400 的倍数才是闰年(如 1900年不是闰年,2000 年是闰年)。
实验目的
学习行为级设计方法,理解自己进行组合逻辑设计与在 Verilog 中设计之间的区别。
实验内容
- 采用行为级设计一个闰年计算器,
输入信号:16 个 SW 拨码开关。
输出信号:16 个 LED 灯与 SW 相对应;
4 个七段数码管显示 SW 的年份数据;
如果为闰年,七段数码管的小数点亮;否则,小数点不亮。 - 采用课件 ppt 上的例题公式,重新做上面的题目。
实验方案
实验分析(assistDesign.sv/Dec7Seg.sv/Basys3_Master.xdc 与实验 2 一致,故略)
实验一(mainDesign1.sv)
module mainDesign1(
input logic CLK100MHZ,
input logic [15:0] SW,
output logic [6:0] a2g,
output logic [3:0] AN,
output logic [15:0] LED,
output logic DP
);
logic [15:0] x;
assign LED = SW;
assign x = SW;
int y;
assign y = 'd1000*x[15:12]+'d100*x[11:8]+'d10*x[7:4]+'d1*x[3:0];
assign DP = !(((y%'d4=='d0&&y%'d100!='d0)||(y%'d400=='d0))&&(y>='d1582));
assistDesign1 X71(.x(x),
.clk(CLK100MHZ),
.a2g(a2g),
.AN(AN),
.dp(DP));
endmodule
- 16 位二进制 x(SW 输入信号)→整型数 y(实际对应年份)
- DP=!置闰(小数点高电平熄灭低电平点亮)
- 置闰=(四年一闰&&百年不闰||四百年又闰)&&(1582 年之后置闰)
实验二(mainDesign2.sv)
module mainDesign2(
input logic CLK100MHZ,
input logic [15:0] SW,
output logic [6:0] a2g,
output logic [3:0] AN,
output logic [15:0] LED,
output logic DP
);
logic [15:0] x;
logic D4;
logic D100;
logic D400;
assign D4=((!SW[4])&&(!SW[1])&&(!SW[0]))||((SW[4])&&(SW[1])&&(!SW[0]));
assign D100=(!SW[7])&&(!SW[6])&&(!SW[5])&&(!SW[4])&&(!SW[3])&&(!SW[2])&&(!SW[1])&&(!SW[0]);
assign D400=D100&&(((!SW[12])&&(!SW[9])&&(!SW[8]))||((SW[12])&&(SW[9])&&(!SW[8])));
assign DP=!((D4&&!D100)||D400);
assign LED = SW;
assign x = SW;
assistDesign2 X72(.x(x),
.clk(CLK100MHZ),
.a2g(a2g),
.AN(AN),
.dp(DP));
endmodule
总结与思考
- 在行为级设计此项目时需要注意拨码开关所表示的为十六进制数,需要添加一个整型变量以将其转换为十进制数
- 组合逻辑分析能够化简电路从而提高工作效率,但是需要注意在化简时的准确性
- 收获:学习了行为级设计方法,理解了自己进行组合逻辑设计与 Verilog 中设计之间的区别