• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

電子密碼鎖Verilog代碼Quartus仿真

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

2-2401051030403U.doc

共1個(gè)文件

名稱:電子密碼鎖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

  • 2-2401051030403U.doc
    下載

相關(guān)推薦