基于verilog的fpga的电子密码锁的设计内容摘要:

T_R2。 reg clk2。 reg [7:0] passed。 reg [7:0] alarmed。 /*输入与输出的声明部分,其中, clk0 为输入的时钟信号, resetb 为密码舒服的输入信号,key 为输入命令, 需注意的时, key 并不是总在表示密码,也表示密码的间隔,如当输入 4 位密码后需要一个确认“ enter”信号, 当密码输入错误时,需要取消“ cancel”信号,这些信号之间在设计中通过有限状态转换机实现。 */ parameter PASSWORD=1639。 b0001000100010001。 //盛放密码的参数 reg [15:0] password。 //输入数值盛放寄存器 //输入的数字编码 always @( posedge clk1 ) begin //检测线路的下降沿 RXBuf1 = one1。 one = ~(RXBuf1 amp。 ( ~one1 ))。 // RXFall1=RXFall。 end //消除多重按键 always @( posedge clk1 ) begin //检测线路的下降沿 RXBuf0 = zero1。 zero = ~(RXBuf0 amp。 ( ~zero1 ))。 // RXFall1=RXFall。 end //消除多重按键 always @( posedge clk1 ) begin //检测线路的下降沿 RXBuf2 = two1。 two = ~(RXBuf2 amp。 ( ~two1 ))。 // RXFall1=RXFall。 end //消除多重按 always @( posedge clk1 ) begin //检测线路的下降沿 RXBuf3 = three1。 three = ~(RXBuf3 amp。 ( ~three1 ))。 // RXFall1=RXFall。 end //消除多重按键 always @( posedge clk1 ) begin //检测线路的下降沿 RXBuf4 = four1。 four = ~(RXBuf4 amp。 ( ~four1 ))。 // RXFall1=RXFall。 end //消除多重按键 reg [2:0]main_state。 //主状态 reg [2:0]next_state。 //下一个状态 //主有限状态转换机的三个状态: waits、 pass、 alarm parameter waits=339。 b001, pass=339。 b010, alarm=339。 b100。 reg [2:0]sub_state。 reg [2:0]next_sub_state。 //主有限状态转换机的三个状态: first、 second、 third、 fourth、 finish。 parameter first=339。 b000, second=339。 b001, third=339。 b010, fourth=339。 b011, finish=339。 b100。 //通过计时寄存器 reg [7:0]pass_count。 //警报计时寄存器 reg [10:0] alarm_count。 //尝试次数寄存器 reg [1:0]try_count。 //输入状态寄存器: error 和 correct reg error。 reg correct。 //以上为中间状态的一些寄存器和一些所用到的参数 //主机状态机部分 always @(posedge clk0) begin CNT_R2 = CNT_R2 + 139。 b1。 if(CNT_R2 4000000) begin clk1 = 1。 end else begin clk1 = 0。 end end always@(main_state or correct or error) begin case(main_state) waits: if(correct==1) //由 waits 转换到 pass 的条件 next_state=pass。 else if(error==1amp。 amp。 try_count==1) next_state=alarm。 //由 waits 转换到 alarm 的条件 else next_state=waits。 pass: if(pass_count[7]==1)//由 pass 转换到 waits 的条件 next_state=waits。 else next_state=pass。 alarm: if(alarm_count[10]==1)// 由 alarm 转换到 waits 的条件 next_state=waits。 else next_state=alarm。 waits next_state=waits。 endcase end //状态转换 always@(posedge clk1 or negedge resetb) begin if(!resetb) main_state=waits。 else main_state=next_state。 end //输出控制部分 always@(posedge clk1 or negedge resetb) begin if(!reset。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。