Verilog實(shí)現(xiàn)密碼箱實(shí)驗(yàn)報(bào)告_第1頁(yè)
Verilog實(shí)現(xiàn)密碼箱實(shí)驗(yàn)報(bào)告_第2頁(yè)
Verilog實(shí)現(xiàn)密碼箱實(shí)驗(yàn)報(bào)告_第3頁(yè)
Verilog實(shí)現(xiàn)密碼箱實(shí)驗(yàn)報(bào)告_第4頁(yè)
Verilog實(shí)現(xiàn)密碼箱實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Verilog實(shí)現(xiàn)密碼箱1.功能概述小腳丫開(kāi)發(fā)板的有4位撥碼開(kāi)關(guān),可以表示數(shù)字0-9,有兩個(gè)七段數(shù)碼管,所以密碼設(shè)為兩位(00—99),初始密碼00,利用四位撥碼開(kāi)關(guān)(sw)輸入密碼,,按下個(gè)位確認(rèn)按鍵(low),在數(shù)碼管上顯示個(gè)位數(shù)字;再次輸入密碼,按下十位確認(rèn)按鍵(high),在數(shù)碼管上顯示十位數(shù)字。按下確認(rèn)按鍵(enter),比較密碼正誤,若正確,實(shí)現(xiàn)開(kāi)鎖功能,用led8燈亮表示;錯(cuò)誤,實(shí)現(xiàn)報(bào)錯(cuò)功能,用led1燈亮表示;連續(xù)錯(cuò)三次,實(shí)現(xiàn)警報(bào)功能,用8個(gè)燈全亮表示,此時(shí)只有重置(rst)才能重新輸入密碼。初始密碼為21。為保證安全性,只有在開(kāi)鎖狀態(tài)下,才可修改密碼,修改撥碼開(kāi)關(guān)數(shù)值,按下個(gè)位確認(rèn)按鍵(low),設(shè)置新密碼個(gè)位,再次修改撥碼開(kāi)關(guān)數(shù)值,按下個(gè)位確認(rèn)按鍵(high),設(shè)置新密碼十位(實(shí)際上兩個(gè)位密碼修改與輸入順序不影響)。再按下重置鍵(rst),即可重新輸入密碼。同時(shí)在使用按鍵時(shí),注意到了消抖。2.效果展示密碼錯(cuò)誤密碼正確修改后密碼正確視頻展示(雙擊播放)3.代碼分析一、密碼顯示在數(shù)碼管上always@(*)//數(shù)碼管顯示控制模塊begin case(code_low) 4'd0:seg_led1=9'b000111111;//數(shù)碼管1顯示0 4'd1:seg_led1=9'b000000110;//1 4'd2:seg_led1=9'b001011011;//2 4'd3:seg_led1=9'b001001111;//3 4'd4:seg_led1=9'b001100110;//4 4'd5:seg_led1=9'b001101101;//5 4'd6:seg_led1=9'b001111101;//6 4'd7:seg_led1=9'b000000111;//7 4'd8:seg_led1=9'b001111111;//8 4'd9:seg_led1=9'b001101111;//9 default:seg_led1=9'b100111111;//0 endcase case(code_high) 4'd0:seg_led2=9'b000111111;//數(shù)碼管2顯示0 4'd1:seg_led2=9'b000000110;//1 4'd2:seg_led2=9'b001011011;//2 4'd3:seg_led2=9'b001001111;//3 4'd4:seg_led2=9'b001100110;//4 4'd5:seg_led2=9'b001101101;//5 4'd6:seg_led2=9'b001111101;//6 4'd7:seg_led2=9'b000000111;//7 4'd8:seg_led2=9'b001111111;//8 4'd9:seg_led2=9'b001101111;//9 default:seg_led2=9'b100111111;//0 endcaseend二、密碼比對(duì)判斷always@(posedgeclk)//密碼判斷begin if(!rst) begin wrong_cnt<=2'b00;//初始錯(cuò)誤次數(shù)為0 code_low<=4'b0000; code_high<=4'b0000; led<=8'b11111111; end elseif(low_d) begin code_low<=sw; end elseif(high_d) begin code_high<=sw; end elseif(enter_d) begin if(wrong_cnt!=2'd2) begin if((code_low==Y&&code_high==X)||(code_low==newcode_low&&code_high==newcode_high)) begin led<=8'b01111111;//密碼正確,led8亮 wrong_cnt<=2'd0; end else begin led<=8'b11111110;//密碼錯(cuò)誤,led1亮錯(cuò)誤次數(shù)加一 wrong_cnt<=wrong_cnt+1; end end else led<=8'b00000000;//密碼輸錯(cuò)三次,報(bào)警 endend三、密碼修改實(shí)現(xiàn)//修改控制模塊always@(posedgeclk) begin if(!rst) change<=0; elseif(led<=8'b01111111) change<=1; if(change==1&&high_d) begin newcode_high<=sw; end elseif(change==1&&low_d) begin newcode_low<=sw; end endendmodule四、按鍵消抖實(shí)現(xiàn)//按鍵消抖模塊moduledebounce(clk,rst,key,key_pulse);parameterN=2;//要消除的按鍵的數(shù)量 inputclk;inputrst;input [N-1:0]key;//輸入的按鍵 output[N-1:0]key_pulse;//按鍵動(dòng)作產(chǎn)生的脈沖 reg[N-1:0]key_rst_pre;//定義一個(gè)寄存器型變量存儲(chǔ)上一個(gè)觸發(fā)時(shí)的按鍵值reg[N-1:0]key_rst;//定義一個(gè)寄存器變量?jī)?chǔ)存儲(chǔ)當(dāng)前時(shí)刻觸發(fā)的按鍵值wire[N-1:0]key_edge;//檢測(cè)到按鍵由高到低變化是產(chǎn)生一個(gè)高脈沖//利用非阻塞賦值特點(diǎn),將兩個(gè)時(shí)鐘觸發(fā)時(shí)按鍵狀態(tài)存儲(chǔ)在兩個(gè)寄存器變量中always@(posedgeclkornegedgerst)begin if(!rst) begin key_rst<={N{1'b1}};//初始化時(shí)給key_rst賦值全為1,{}中表示N個(gè)1key_rst_pre<={N{1'b1}};endelse begin key_rst<=key;//第一個(gè)時(shí)鐘上升沿觸發(fā)之后key的值賦給key_rst,同時(shí)key_rst的值賦給key_rst_pre key_rst_pre<=key_rst;//非阻塞賦值。相當(dāng)于經(jīng)過(guò)兩個(gè)時(shí)鐘觸發(fā),key_rst存儲(chǔ)的是當(dāng)前時(shí)刻key的值,key_rst_pre存儲(chǔ)的是前一個(gè)時(shí)鐘的key的值endendassignkey_edge=key_rst_pre&(~key_rst);//脈沖邊沿檢測(cè)。當(dāng)key檢測(cè)到下降沿時(shí),key_edge產(chǎn)生一個(gè)時(shí)鐘周期的高電平 reg [17:0] cnt;//產(chǎn)生延時(shí)所用的計(jì)數(shù)器,系統(tǒng)時(shí)鐘12MHz,要延時(shí)20ms左右時(shí)間,至少需要18位計(jì)數(shù)器//產(chǎn)生20ms延時(shí),當(dāng)檢測(cè)到key_edge有效是計(jì)數(shù)器清零開(kāi)始計(jì)數(shù)always@(posedgeclkornegedgerst) begin if(!rst) cnt<=18'h0;elseif(key_edge)cnt<=18'h0;elsecnt<=cnt+1'h1;endreg[N-1:0]key_sec_pre;//延時(shí)后檢測(cè)電平寄存器變量reg[N-1:0]key_sec;//延時(shí)后檢測(cè)key,如果按鍵狀態(tài)變低產(chǎn)生一個(gè)時(shí)鐘的高脈沖。如果按鍵狀態(tài)是高的話說(shuō)明按鍵無(wú)效always@(posedgeclkornegedgerst) begin if(!rst) key_sec<={N{1'b1}};elseif(cnt==18'h3ffff)key_sec<=key;endalways@(posedgeclkornegedgerst) begin if(!rst) key_sec_pre<={N{1'b1}};elsekey_sec_pre<=key_sec;endassignkey_pulse=key_sec_pre&(~key_sec);endmodule4.附錄,源碼圖以及源碼//頂層模塊modulesafebox_plus( inputclk, input[3:0]sw,//四位撥碼開(kāi)關(guān),用作十進(jìn)制密碼 inputrst,//復(fù)位鍵 inputenter,//密碼確認(rèn)鍵 inputhigh,//十位輸入鍵 inputlow,//個(gè)位輸入鍵 outputreg[7:0]led,//八位報(bào)警燈,led8為正確提示燈,led1為錯(cuò)誤提示燈 outputreg[8:0]seg_led1,//數(shù)碼管1顯示個(gè)位密碼 outputreg[8:0]seg_led2//數(shù)碼管2顯示十位密碼);parameterX=4'd0;//用作初始密碼parameterY=4'd0;wireenter_d;//key[3]確認(rèn)密碼輸入wirelow_d;//key[1]個(gè)位確認(rèn)wirehigh_d;//key[2]十位確認(rèn)reg[1:0]wrong_cnt;//統(tǒng)計(jì)錯(cuò)誤次數(shù)reg[3:0]code_low;//個(gè)位密碼reg[3:0]code_high;//十位密碼regchange;//可修改密碼狀態(tài)reg[3:0]newcode_low;//更新密碼個(gè)位reg[3:0]newcode_high;//更新密碼十位//例化調(diào)用消抖模塊debounce#(.N(3))u1( .clk(clk), .rst(rst), .key({enter,low,high}), .key_pulse({enter_d,low_d,high_d}));always@(*)//數(shù)碼管顯示控制模塊begin case(code_low) 4'd0:seg_led1=9'b000111111;//數(shù)碼管1顯示0 4'd1:seg_led1=9'b000000110;//1 4'd2:seg_led1=9'b001011011;//2 4'd3:seg_led1=9'b001001111;//3 4'd4:seg_led1=9'b001100110;//4 4'd5:seg_led1=9'b001101101;//5 4'd6:seg_led1=9'b001111101;//6 4'd7:seg_led1=9'b000000111;//7 4'd8:seg_led1=9'b001111111;//8 4'd9:seg_led1=9'b001101111;//9 default:seg_led1=9'b100111111;//0 endcase case(code_high) 4'd0:seg_led2=9'b000111111;//數(shù)碼管2顯示0 4'd1:seg_led2=9'b000000110;//1 4'd2:seg_led2=9'b001011011;//2 4'd3:seg_led2=9'b001001111;//3 4'd4:seg_led2=9'b001100110;//4 4'd5:seg_led2=9'b001101101;//5 4'd6:seg_led2=9'b001111101;//6 4'd7:seg_led2=9'b000000111;//7 4'd8:seg_led2=9'b001111111;//8 4'd9:seg_led2=9'b001101111;//9 default:seg_led2=9'b100111111;//0 endcaseendalways@(posedgeclk)//密碼判斷begin if(!rst) begin wrong_cnt<=2'b00;//初始錯(cuò)誤次數(shù)為0 code_low<=4'b0000; code_high<=4'b0000; led<=8'b11111111; end elseif(low_d) begin code_low<=sw; end elseif(high_d) begin code_high<=sw; end elseif(enter_d) begin if(wrong_cnt!=2'd2) begin if((code_low==Y&&code_high==X)||(code_low==newcode_low&&code_high==newcode_high)) begin led<=8'b01111111; wrong_cnt<=2'd0; end else begin led<=8'b11111110; wrong_cnt<=wrong_cnt+1; end end else led<=8'b00000000; endend//修改控制模塊always@(posedgeclk) begin if(!rst) change<=0; elseif(led<=8'b01111111) change<=1; if(change==1&&high_d) begin newcode_high<=sw; end elseif(change==1&&low_d) begin newcode_low<=sw; end endendmodule//按鍵消抖模塊moduledebounce(clk,rst,key,key_pulse);parameterN=2;//要消除的按鍵的數(shù)量 inputclk;inputrst;input [N-1:0]key;//輸入的按鍵 output[N-1:0]key_pulse;//按鍵動(dòng)作產(chǎn)生的脈沖 reg[N-1:0]key_rst_pre;//定義一個(gè)寄存器型變量存儲(chǔ)上一個(gè)觸發(fā)時(shí)的按鍵值reg[N-1:0]key_rst;//定義一個(gè)寄存器變量?jī)?chǔ)存儲(chǔ)當(dāng)前時(shí)刻觸發(fā)的按鍵值wire[N-1:0]key_edge;//檢測(cè)到按鍵由高到低變化是產(chǎn)生一個(gè)高脈沖//利用非阻塞賦值特點(diǎn),將兩個(gè)時(shí)鐘觸發(fā)時(shí)按鍵狀態(tài)存儲(chǔ)在兩個(gè)寄存器變量中always@(posedgeclkornegedgerst)begin if(!rst) begin key_rst<={N{1'b1}};//初始化時(shí)給key_rst賦值全為1,{}中表示N個(gè)1key_rst_pre<={N{1'b1}};endelse begin key_rst<=key;//第一個(gè)時(shí)鐘上升沿觸發(fā)之后key的值賦給key_rst,同時(shí)key_rst的值賦給key_rst_pre key_rst_pre<=key_rst;//非阻塞賦值。相當(dāng)于經(jīng)過(guò)兩個(gè)時(shí)鐘觸發(fā),key_rst存儲(chǔ)的是當(dāng)前時(shí)刻key的值,key_rst_pre存儲(chǔ)的是前一個(gè)時(shí)鐘的key的值endendassignkey_edge=key_rst_pre&(~key_rst);//脈沖邊沿檢測(cè)。當(dāng)key檢測(cè)到下降沿時(shí),key_edge產(chǎn)生一個(gè)時(shí)鐘周期的高電平 reg [17:0] cnt;//產(chǎn)生延時(shí)所用的計(jì)數(shù)器,系統(tǒng)時(shí)鐘12MHz,要延時(shí)20ms左右時(shí)間,至少需要18

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論