密码锁的verilog代码Word格式文档下载.docx
《密码锁的verilog代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《密码锁的verilog代码Word格式文档下载.docx(6页珍藏版)》请在冰豆网上搜索。
¨
Ö
Ü
Ú
Ê
±
¼
ä
Ä
Ò
»
°
ë
=#11'
b1;
elseif(cnt==period-1)//É
b0;
=#1'
assignclkout=clkout_r;
endmodule
modulekey_scan(clk,keydrv,rst);
output[3:
0]keydrv;
wire[3:
parameters1=4'
b1110;
parameters2=4'
b1101;
parameters3=4'
b1011;
parameters4=4'
b0111;
reg[3:
0]current_state;
0]next_state;
always@(posedgeclkornegedgerst)
current_state<
=s1;
elsecurrent_state<
=next_state;
always@(current_state)
case(current_state)
s1:
next_state<
=s2;
s2:
=s3;
s3:
=s4;
s4:
=s1;
default:
endcase
assignkeydrv=current_state;
`timescale1ms/1ns
modulemms(enter,clk,
KEYO,KEYI,rst,DIG,Y,right,wrong,change,led_c,clr,led_clr);
inputenter;
outputright;
regright;
outputwrong;
regwrong;
inputchange;
outputled_c;
regled_c;
inputclr;
outputled_clr;
regled_clr;
input[3:
0]KEYO;
//Ó
Ô
-À
í
Í
Â
£
¬
Ç
ü
Å
Ì
³
ö
Ë
¿
¸
ø
FPGA
0]KEYI;
FPGAÊ
¼
wirescanclk;
0]keyvalue;
reg[7:
0]temp_r;
0]scankey_o;
0]scankey_i;
wiredis;
output[7:
0]Y;
0]Y_r;
assignY=~Y_r;
0]DIG;
assigndis=&
KEYO;
regdis_pre;
assignKEYI=keydrv;
scan_clkkey_clk(
.clk(clk),
.clkout(scanclk),
.rst(rst)
);
key_scankey_scan(
.clk(scanclk),
.keydrv(keydrv),
always@(posedgeclkornegedgerst)begin
if(rst==1'
b0)begin
scankey_o<
=4'
b0;
scankey_i<
dis_pre<
=dis;
endelseif(clk==1'
b1)begin
if((dis==1'
b0)&
&
(dis_pre==1'
b1))begin
scankey_o<
=keydrv;
=KEYO;
temp_r<
={scankey_o,scankey_i};
regclkk;
always@(temp_rorrst)begin
b0)begin//Ò
keyvalue=4'
b1111;
clkk<
=1'
else
case(temp_r)
8'
b1110_1110:
begin
keyvalue<
h7;
clkk<
b1110_1101:
h8;
b1110_1011:
h9;
b1101_1110:
h4;
b1101_1101:
h5;
b1101_1011:
h6;
b1011_1110:
h1;
8'
b1011_1101:
h2;
b1011_1011:
h3;
b0111_1101:
h0;
default:
keyvalue<
=4'
reg[2:
always@(negedgerstorposedgeclkk)
beginif(!
rst)begincnt<
=0;
RG<
end
begincnt<
=cnt+1;
={keyvalue,RG[15:
4]};
//output[15:
0]RG;
reg[15:
/*
always@(cnt)
if(!
rst)RG<
case(cnt)
3'
b001:
beginRG[3:
0]<
=keyvalue;
b010:
beginRG[7:
4]<
b011:
beginRG[11:
8]<
b100:
beginRG[15:
12]<
=RG;
*/
reg[1:
0]js;
always@(posedgescanclk)
rst)js<
js<
=js+1;
always@(js)
rst)DIG<
case(js)
2'
b00:
beginDIG<
A<
=RG[3:
0];
b01:
=RG[7:
4];
b10:
=RG[11:
8];
b11:
=RG[15:
12];
0]A;
always@(Aorrst)
b0)//Ò
Y_r<
=8'
b0000_0000;
Y_r=8'
case(A)
//5'
hh:
Y-r=8'
//wuxianshi
4'
h0:
Y_r=8'
b0011_1111;
//0
h1:
b0000_0110;
//1
h2:
b0101_1011;
//2
h3:
b0100_1111;
//3
h4:
b0110_0110;
//4
h5:
b0110_1101;
//5
h6:
b0111_1101;
//6
h7:
b0000_0111;
//7
h8:
b0111_1111;
//8
h9:
b0110_1111;
//9
//4'
b0001:
b1000_0000;
//.
b0100_1001;
0]MM;
always@(enter)
enter)beginright<
wrong<
//MM<
=16'
b0001_0010_0011_0100;
beginif(enter==1'
ba1)
beginif(RG==MM)beginright<
elsebeginright<
always@(changeorclr)
clr)
beginled_clr<
change)led_c<