感谢发烧友爱好者和小眼睛科技公司提供的FPGA测试机会。前面已经完成了3次测试,今天来完成第4个测试。这次的目的是拨码开关SW1- SW4 设置 2 位数密码,每两位设置一位密码,BM[0:1]设置第一位对应 BM1和
BM2,BM[2:3]设置第二位。所以密码是由0,1,2,3 组成的四位数。KEY1-KEY2 作为密码输入,按键按一下数字加 1,数字由数码管显示,数字在 0,1,2,3 中循环。K4 作为确认按键,按下
K4,输入的密码与设置的密码比对,如相同则显示 8888,若不同则显示 7777。 按下 K3 清零,按下后数码管显示 0000,可以重新输密码。在《MES2KG开发板实验指导》中提供了相应的说明,这次我们还是参考相关介绍来介绍demo的工作原理,并做一些补充和修改。
按键控制部分主要完成了以下工作:1、对 4 个按键输入信号均做消抖处理,2、KEY4
和 KEY3 取下降沿输出,3、KEY[2:1]以下降沿来变更各自的输入密码,每次数字加 1(0~3 循环,2bit 即可)
密码验证部分是通过KEY4完成的。KEY4 下降沿触发使能工作; KEY4 下降沿触发所存输入密码,并与拨码开关设置的密码进行比较;输出密码比较结果,提供个数码管显示模块。
`define UD #1
module compare(
input clk,
input [3:0] sw,
input [3:0] ctrl,
input enter_trig,
output com_result
);
//==============================================================================
//锁存当前的输入密码;
reg [3:0] ctrl_1d;
always @(posedge clk)
begin
if(enter_trig)
ctrl_1d <= `UD ctrl;
end
assign com_result = (ctrl_1d == sw);
endmodule
在第3次测试中介绍了显示刷新的原理。官方示例给的显示刷新频率不太合适,会出现闪烁的问题。
仿照上一次测试修改了显示频率部分:
`define UD #1
module div_clk
(
input clk,//40M
output clk_1khz//0.1M
);
reg [8:0]cnt;
always @(posedge clk)
begin
if(cnt == 9'd399)
cnt<= `UD 9'd0;
else
cnt <= `UD cnt + 1'b1;
end
reg flag=1'b0;
always @(posedge clk)
begin
if(cnt == 9'd199)
flag <= `UD 1'b1;
else if(cnt == 9'd399)
flag <= `UD 1'b0;
end
assign clk_1khz = flag;
endmodule
然后重新编译、下载程序即可。
下面的视频就是最终显示的效果。
更多回帖