名稱:電子密碼鎖Verilog代碼Quartus仿真
軟件:Quartus
語(yǔ)言:Verilog
代碼功能:
電子密碼鎖
1、密碼為4位;
2、內(nèi)置默認(rèn)密碼,可以修改密碼;
3、密碼輸入錯(cuò)誤3次報(bào)警。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設(shè)計(jì)文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. RTL圖
5. Testbench
6. 仿真圖
整體仿真圖
下降沿檢測(cè)模塊
密碼輸入模塊
控制模塊
顯示模塊
蜂鳴器模塊
重置密碼模塊
整體設(shè)計(jì)功能及整體仿真圖分析如下:
默認(rèn)密碼1234,下圖輸入1234后按下確認(rèn)鍵后開(kāi)鎖,led_open高電平表示開(kāi)鎖,此時(shí)按下modify按鍵進(jìn)行密碼修改,輸入新密碼后,按下確認(rèn)鍵,將密碼修改為2537。
修改完密碼按下lock_up鍵,鎖定,此時(shí)led_open變?yōu)榈碗娖?/p>
輸入原密碼1234無(wú)法打開(kāi),連續(xù)輸入三次密碼錯(cuò)誤后報(bào)警,alarm信號(hào)拉高
按下reset信號(hào)關(guān)閉報(bào)警,才能再次密碼,關(guān)閉報(bào)警后輸入新密碼2537,將鎖打開(kāi)。
注:按鍵按下均為低電平。
部分代碼展示:
//密碼輸入模塊 module?mima_input( input?clk, input?key_0, input?key_1, input?key_2, input?key_3, input?key_4, input?key_5, input?key_6, input?key_7, input?key_8, input?key_9, input?[2:0]?current_state,//密碼鎖當(dāng)前狀態(tài) output?[15:0]?password//輸入密碼 ); reg?key_0_buf1=0; reg?key_1_buf1=0; reg?key_2_buf1=0; reg?key_3_buf1=0; reg?key_4_buf1=0; reg?key_5_buf1=0; reg?key_6_buf1=0; reg?key_7_buf1=0; reg?key_8_buf1=0; reg?key_9_buf1=0; reg?key_0_buf2=0; reg?key_1_buf2=0; reg?key_2_buf2=0; reg?key_3_buf2=0; reg?key_4_buf2=0; reg?key_5_buf2=0; reg?key_6_buf2=0; reg?key_7_buf2=0; reg?key_8_buf2=0; reg?key_9_buf2=0; wire?key_0_rise; wire?key_1_rise; wire?key_2_rise; wire?key_3_rise; wire?key_4_rise; wire?key_5_rise; wire?key_6_rise; wire?key_7_rise; wire?key_8_rise; wire?key_9_rise; always@(posedge?clk) begin key_0_buf1<=key_0; key_1_buf1<=key_1; key_2_buf1<=key_2; key_3_buf1<=key_3; key_4_buf1<=key_4; key_5_buf1<=key_5; key_6_buf1<=key_6; key_7_buf1<=key_7; key_8_buf1<=key_8; key_9_buf1<=key_9; key_0_buf2<=key_0_buf1; key_1_buf2<=key_1_buf1; key_2_buf2<=key_2_buf1; key_3_buf2<=key_3_buf1; key_4_buf2<=key_4_buf1; key_5_buf2<=key_5_buf1; key_6_buf2<=key_6_buf1; key_7_buf2<=key_7_buf1; key_8_buf2<=key_8_buf1; key_9_buf2<=key_9_buf1; end //assign?key_0_rise=key_0_buf1?&?~key_0_buf2;//數(shù)字按鍵輸入上升沿 //assign?key_1_rise=key_1_buf1?&?~key_1_buf2;//數(shù)字按鍵輸入上升沿 //assign?key_2_rise=key_2_buf1?&?~key_2_buf2;//數(shù)字按鍵輸入上升沿 //assign?key_3_rise=key_3_buf1?&?~key_3_buf2;//數(shù)字按鍵輸入上升沿 //assign?key_4_rise=key_4_buf1?&?~key_4_buf2;//數(shù)字按鍵輸入上升沿 //assign?key_5_rise=key_5_buf1?&?~key_5_buf2;//數(shù)字按鍵輸入上升沿 //assign?key_6_rise=key_6_buf1?&?~key_6_buf2;//數(shù)字按鍵輸入上升沿 //assign?key_7_rise=key_7_buf1?&?~key_7_buf2;//數(shù)字按鍵輸入上升沿 //assign?key_8_rise=key_8_buf1?&?~key_8_buf2;//數(shù)字按鍵輸入上升沿 //assign?key_9_rise=key_9_buf1?&?~key_9_buf2;//數(shù)字按鍵輸入上升沿 key_jitter?key_jitter_k0( ?????.?clkin(clk), ?????.?key_in(key_0_buf2),//輸入 ??.?key_posedge(key_0_rise),//消抖后按鍵上升沿 ??.?key_negedge(),//消抖后按鍵下降沿 ?????.?key_value()//消抖后按鍵 ); key_jitter?key_jitter_k1( ?????.?clkin(clk), ?????.?key_in(key_1_buf2),//輸入 ??.?key_posedge(key_1_rise),//消抖后按鍵上升沿 ??.?key_negedge(),//消抖后按鍵下降沿 ?????.?key_value()//消抖后按鍵 ); key_jitter?key_jitter_k2( ?????.?clkin(clk), ?????.?key_in(key_2_buf2),//輸入 ??.?key_posedge(key_2_rise),//消抖后按鍵上升沿 ??.?key_negedge(),//消抖后按鍵下降沿 ?????.?key_value()//消抖后按鍵 ); key_jitter?key_jitter_k3( ?????.?clkin(clk), ?????.?key_in(key_3_buf2),//輸入 ??.?key_posedge(key_3_rise),//消抖后按鍵上升沿 ??.?key_negedge(),//消抖后按鍵下降沿 ?????.?key_value()//消抖后按鍵 ); key_jitter?key_jitter_k4( ?????.?clkin(clk), ?????.?key_in(key_4_buf2),//輸入 ??.?key_posedge(key_4_rise),//消抖后按鍵上升沿 ??.?key_negedge(),//消抖后按鍵下降沿 ?????.?key_value()//消抖后按鍵 ); key_jitter?key_jitter_k5( ?????.?clkin(clk), ?????.?key_in(key_5_buf2),//輸入 ??.?key_posedge(key_5_rise),//消抖后按鍵上升沿 ??.?key_negedge(),//消抖后按鍵下降沿 ?????.?key_value()//消抖后按鍵 ); key_jitter?key_jitter_k6( ?????.?clkin(clk), ?????.?key_in(key_6_buf2),//輸入 ??.?key_posedge(key_6_rise),//消抖后按鍵上升沿 ??.?key_negedge(),//消抖后按鍵下降沿 ?????.?key_value()//消抖后按鍵 ); key_jitter?key_jitter_k7( ?????.?clkin(clk), ?????.?key_in(key_7_buf2),//輸入 ??.?key_posedge(key_7_rise),//消抖后按鍵上升沿 ??.?key_negedge(),//消抖后按鍵下降沿 ?????.?key_value()//消抖后按鍵 ); key_jitter?key_jitter_k8( ?????.?clkin(clk), ?????.?key_in(key_8_buf2),//輸入 ??.?key_posedge(key_8_rise),//消抖后按鍵上升沿 ??.?key_negedge(),//消抖后按鍵下降沿 ?????.?key_value()//消抖后按鍵 ); key_jitter?key_jitter_k9( ?????.?clkin(clk), ?????.?key_in(key_9_buf2),//輸入 ??.?key_posedge(key_9_rise),//消抖后按鍵上升沿 ??.?key_negedge(),//消抖后按鍵下降沿 ?????.?key_value()//消抖后按鍵 ); reg?[15:0]?password_buf=16'd0;//pass,alarm--clear always@(posedge?clk) if(current_state==3'd2?||?current_state==3'd5) password_buf<=16'h0; else if(key_0_rise==1) password_buf<={password_buf[11:0],4'd0};//數(shù)字按鍵0輸入 else?if(key_1_rise==1) password_buf<={password_buf[11:0],4'd1};//數(shù)字按鍵1輸入 else?if(key_2_rise==1) password_buf<={password_buf[11:0],4'd2};//數(shù)字按鍵2輸入 else?if(key_3_rise==1) password_buf<={password_buf[11:0],4'd3};//數(shù)字按鍵3輸入 else?if(key_4_rise==1) password_buf<={password_buf[11:0],4'd4};//數(shù)字按鍵4輸入 else?if(key_5_rise==1) password_buf<={password_buf[11:0],4'd5};//數(shù)字按鍵5輸入 else?if(key_6_rise==1) password_buf<={password_buf[11:0],4'd6};//數(shù)字按鍵6輸入 else?if(key_7_rise==1) password_buf<={password_buf[11:0],4'd7};//數(shù)字按鍵7輸入 else?if(key_8_rise==1) password_buf<={password_buf[11:0],4'd8};//數(shù)字按鍵8輸入 else?if(key_9_rise==1) password_buf<={password_buf[11:0],4'd9};//數(shù)字按鍵9輸入 else password_buf<=password_buf; assign?password=password_buf; endmodule
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=498