摘要:设计理念通过拨动开关输入由四位二进制表示的密码,然后按键确认输入并校验。如果校验失败,则数码不亮,全亮,启动报警,直到输入正确密码并再次确认校验成功后,灭,数码显示提示开锁。
1.设计理念
通过拨动开关输入由四位二进制表示的密码,然后按键确认输入并校验。
如果校验通过,则led不亮,数码led显示0提示开锁。
如果校验失败,则数码led不亮,led全亮,启动报警,直到输入正确密码并再次确认校验成功后,led灭,数码led显示0提示开锁。
安全性:
视频见附件。
2.代码
(1) my_codelock.v
module my_codelock(seg_led, //数码 led_state,key_confirm,sw_input, //led,开关,按键 clk,rst //消抖需要的输入 ); input key_confirm; //按键=确认 input [3:0] sw_input; //拨动开关=输入密码 output [7:0] led_state; reg [7:0] led_state; //led表示状态 reg [8:0] seg_led; output [8:0] seg_led; //数码管提示正确打开 input clk,rst; always@(*)begin seg_led=9"h00; if (key_confirm==0)begin //当按下确认开始校对 if (sw_input==4"b0101) begin led_state=8"b1111_1111; //如果密码正确,那就不亮led亮数码板 seg_led=9"h3f; end else begin led_state=8"b0000_0000; end end end debounce u1 ( .clk (clk), .rst (rst), .key (key_confirm), .key_pulse () ); endmodule
(1) debounce.v
module debounce (clk,rst,key,key_pulse); parameter N = 1; //要消除的按键的数量 input clk; input rst; input [N-1:0] key; //输入的按键 output [N-1:0] key_pulse; //按键动作产生的脉冲 reg [N-1:0] key_rst_pre; //定义一个寄存器型变量存储上一个触发时的按键值 reg [N-1:0] key_rst; //定义一个寄存器变量储存储当前时刻触发的按键值 wire [N-1:0] key_edge; //检测到按键由高到低变化是产生一个高脉冲 //利用非阻塞赋值特点,将两个时钟触发时按键状态存储在两个寄存器变量中 always @(posedge clk or negedge rst) begin if (!rst) begin key_rst <= {N{1"b1}}; //初始化时给key_rst赋值全为1,{}中表示N个1 key_rst_pre <= {N{1"b1}}; end else begin key_rst <= key; //第一个时钟上升沿触发之后key的值赋给key_rst,同时key_rst的值赋给key_rst_pre key_rst_pre <= key_rst; //非阻塞赋值。相当于经过两个时钟触发,key_rst存储的是当前时刻key的值,key_rst_pre存储的是前一个时钟的key的值 end end assign key_edge = key_rst_pre & (~key_rst);//脉冲边沿检测。当key检测到下降沿时,key_edge产生一个时钟周期的高电平 reg [17:0] cnt; //产生延时所用的计数器,系统时钟12MHz,要延时20ms左右时间,至少需要18位计数器 //产生20ms延时,当检测到key_edge有效是计数器清零开始计数 always @(posedge clk or negedge rst) begin if(!rst) cnt <= 18"h0; else if(key_edge) cnt <= 18"h0; else cnt <= cnt + 1"h1; end reg [N-1:0] key_sec_pre; //延时后检测电平寄存器变量 reg [N-1:0] key_sec; //延时后检测key,如果按键状态变低产生一个时钟的高脉冲。如果按键状态是高的话说明按键无效 always @(posedge clk or negedge rst) begin if (!rst) key_sec <= {N{1"b1}}; else if (cnt==18"h3ffff) key_sec <= key; end always @(posedge clk or negedge rst) begin if (!rst) key_sec_pre <= {N{1"b1}}; else key_sec_pre <= key_sec; end assign key_pulse = key_sec_pre & (~key_sec); endmodule
3.RTL电路
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/121775.html
摘要:区块链是软件开源运动所结出的果子。原因是区块链创造的信任是基于代码产生的。 上一讲中,我们深入探讨了区块链对一些基本问题的答案,包括对时间的答案、对空间的答案以及对能量的答案。在这一篇文章中,我们将从区块链作为基本工具的工具论方面切入。这个方面包括了它是怎样看待这个世界的:它使用了哪些工具,以及它使用了哪些方法?构造了哪些全新的博弈环境并形成了哪些新的博弈均衡态?这些方法也许和人们过去...
摘要:秘猿科技法务总监钱靖受邀参加北京大学数字金融研究中心举办的数字金融第十讲,作为主讲嘉宾就区块链正在重塑法律做了主题演讲。而区块链在很大程度上可以帮助解决这些问题。第三个方面涉及到区块链对每个部门法的影响。 showImg(https://segmentfault.com/img/bVboMSK?w=1280&h=543); 秘猿科技法务总监钱靖受邀参加北京大学数字金融研究中心举办的数字...
摘要:安全透明轻量的蚂蚁区块链摩斯安全计算基础设施蚂蚁摩斯依托蚂蚁金融科技平台,结合区块链技术,将复杂的隐私保护与密码学算法透明化产品化,提供安全发布安全模型安全统计安全查询安全脚本等核心功能。 摘要: 蚂蚁区块链摩斯安全计算平台针对数据安全信任、个人隐私保护以及数据基础设施不足等痛点,秉持数据可用不可见和将计算移动到数据端的原则,借助区块链、密码学、隐私保护、安全多方计算、可信计算等前沿...
摘要:第二步微信开发工具你可以下微信的,了解小程序的前端和后端的开发结构。第三步微信的后台处理购买主机建站会获得一个可用的无备案的域名。 小程序制作和部署从本质上是和其他的网站是一样的,需要域名、服务器空间和数据库。域名就是你们家的地址,服务器空间就是你们家房子,数据库就是你们家的保险柜。 但是小程序和网站又有不同,小程序的前端部分是需要通过微信开发工具上传到微信的服务器上,就是说你们家的...
阅读 981·2021-11-22 13:52
阅读 1425·2021-11-19 09:40
阅读 3053·2021-11-16 11:44
阅读 1220·2021-11-15 11:39
阅读 3837·2021-10-08 10:04
阅读 5263·2021-09-22 14:57
阅读 3082·2021-09-10 10:50
阅读 3149·2021-08-17 10:13