最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

EDA课程设计(基于VHDL语言的8位数字密码锁设计)

IT圈 admin 28浏览 0评论

2024年5月21日发(作者:富察孤晴)

东华理工大学机械与电子工程学院

基于VHDL语言的8位数字密码锁设计

一、摘要:

数字控制的电子密码锁已经广泛应用在办公室、公司、宾馆、

小区住宅等场所。

EDA技术的应用引起了电子产品系统开发的革命性变革。利用先

进的EDA工具,基于硬件描述语言,可以进行系统级数字逻辑电路的

设计。本文简述了VHDL语言的功能及其特点,并以8位串行数字锁

设计为例,介绍了在QUARTUS II 6.0开发软件下,利用VHDL硬件描

述语言设计数字逻辑电路的过程和方法。

关键词: QUARTUS II 6.0 EDA 电子密码锁(电子设计自动化)

VHDL语言 语言设计 串行 密码锁 硬件描述语言 数字逻辑电路

Based on VHDL language 8 digits combination lock design

Digital control of electronic locks has widely used in

office, companies, hotels, residential area and etc.

EDA technology application caused a electronic product

development system of the revolutionary transformation. Using

advanced EDA tools, hardware based description language, can

undertake system in digital logic circuit design. This paper

describes the function and characteristics of VHDL language,

and eight serial number lock design as an example, this paper

introduces QUARTUS II 6.0 software development in of VHDL

1

hardware design of digital logic circuit process and method.

Keywords: QUARTUS II 6.0, EDA (electronic design

automation), electronic locks and VHDL language, language

design, serial, locks and hardware description language,

digital logic circuit

二、引言:

电子密码锁系统主要由电子锁体、电子密匙等部分组成,一把电

子密匙里能存放多组开锁密码,用户在使用过程中能够随时修改开锁

密码,更新或配制钥匙里开锁密码。一把电子锁可配制多把钥匙。语

音方面的广泛应用,使得具有语音播放的电子密码锁使用起来更加方

便。语音密码锁的体积小、保密性能好、使用方便,是用在保险箱、

电话或是房门上不可少的部分。

数字集成技术和电子设计自动化(E1ectronic Design

Automation,EDA)技术的发展迅速,数字系统设计的理论和方法也在

相应地变化和发展着。应用可编程逻辑器件(Programmable Logic

Device,PLD)实现数字系统的设计,是目前利用EDA技术设计数字系

统的潮流。利用基于EDA技术的设计方法,设计者只需对系统功能进

行描述,就可在EDA工具的帮助下完成系统设计。这种设计方法以数

字系统设计软件为工具,将测试码或测试序列测试验证后,将系统实

现在PLD芯片或专业集成电路上,这样最大程度地缩短了设计和开发

时间,降低了成本,提高了系统的可靠性。本文详细介绍了基于EDA

技术数字密码锁的设计过程。

2

三、密码锁系统的设计

1、设计要求:

数字密码锁的密码为8位十进制数字,密码可以设置和修改;开

锁时间定为30秒;可用七段显示器显示开锁倒计时时间值;开锁计

时时间30秒到,锁没开则用蜂鸣器报警,开锁时允许修改输入错误

的密码数字。具体要求如下:

(1)分析功能要求,设计系统构成模块,画出方框图。

(2)编写模块的Verilog HDL语言的设计程序

(3)在Quartus II 软件或其他EDA软件上完成设计和仿真

(4)根据实验装置上的CPLD/FPGA芯片,在是配时选择相应的

芯片,将设计生成配置文件或JEDEC文件,然后将配置文件或JEDEC

文件下载到实验装置上运行,操作实验装置上设定设定的功能开关,

验证设计功能。

2、设计分析

此系统可以分为密码输入删除控制模块、寄存模块、比较并延时

模块、扫描显示模块几部分。数字密码锁系统框图如图所示。

密码输入与删除控制模块设计考虑:

1)编码器:对数据开关K1...K10的电平信号,分别代表数字

1...9,采用热码方式编码。

2)设置与删除密码操作及显示按设计要求处理。

3)信号设置

Set密码确认信号——当8位密码输入完成,按set键则密

3

送锁存器锁存,比较模块得数据A、密码显示电路清零。

Back:数字删除按键——每按一次删除最后输入的数字。

Lock:密码锁状态显示信号——lock=0(LED灯灭)表示锁未开

lock=1(LED灯亮)表示锁已开。

Close:关锁信号——当密码送寄存器锁存后,按下close

则密码锁lock=0,锁被锁上。

Check:密码检验信号——在lock=0状态下,从数据开关输

8位开锁密码后按下check,则开锁密码送寄存模块锁存为B。如果

A=B,则D 触发器置“1”,锁被打开,否则lock保持为0.

万能密码:可以预设一个8位十进制数,如:“00000007”。

数字密码锁系统框图:

1 LOCK

1D

C1

Close

Sd

开锁延时

A = B

比较模块

Set

A B

Check

寄存模块

示模

扫描显

密码输入

/删除

Back

控制模块

K1 k2 ..............k10

4

四、软件设计

按设计要求,下面给出Verilog HDL语言编写的数字密码锁参考

程序。

/*signal define

n0,n1,n2,n3,n4,n5,n6,n7,n8,n9: data swiching signal;

back: delete signal;

cheak: verify code signal;

set: code ok;

close: turn off lock;

lock: state display;

warn: warning signal;

count: counter signal

a1,a2,a3,a4,a5,a6,a7,a8: coding output display; */

module

lockcode(n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,back,cheak,set,close,lock,

warn,a1,a2,a3,a4,a5,a6,a7,a8,m1,m2,m3,m4,m5,m6,m7,m8,

a,b,c,d,e,f,g,clk);

parameter N=10;

input n0,n1,n2,n3,n4,n5,n6,n7,n8,n9;

input back,cheak,set,close,clk;

output lock,warn,a,b,c,d,e,f,g,m1,m2,m3,m4,m5,m6,m7,m8;

reg lock,warn,a,b,c,d,e,f,g,m1,m2,m3,m4,m5,m6,m7,m8;

output[3:0] a1,a2,a3,a4,a5,a6,a7,a8;

reg[3:0] a1,a2,a3,a4,a5,a6,a7,a8,temp,count;

reg[2:0] flag,cnt;

reg[31:0] code;

always @(posedge clk)

begin //密码输入显示控制

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b)

begin

case({n9,n8,n7,n6,n5,n4,n3,n2,n1,n0})

10'b: temp=4'd0;

10'b: temp=4'd1;

10'b: temp=4'd2;

10'b: temp=4'd3;

10'b: temp=4'd4;

10'b: temp=4'd5;

10'b: temp=4'd6;

10'b: temp=4'd7;

5

10'b: temp=4'd8;

10'b1000000000: temp=4'd9;

endcase

a8<=a7; a7<=a6; a6<=a5; a5<=a4; //输入密码时逐位左移

a4<=a3; a3<=a2; a2<=a1; a1<=temp;

end

else if(back) //密码删除控制

begin

a1<=a2; a2<=a3; a3<=a4; a4<=a5; //右移

a5<=a6; a6<=a7; a7<=a8; a8<=4'b0;

end

end

always @(posedge clk)

begin

{m1,m2,m3,m4,m5,m6,m7,m8}<=8'b0; //产生8位片选信号

flag<=flag+1;

case(flag)

0: begin

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b) m1<=1;

end

1: begin

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b) m2<=1;

end

2: begin

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b) m3<=1;

end

3: begin

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b) m4<=1;

end

4: begin

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b) m5<=1;

end

5: begin

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b) m6<=1;

end

6: begin

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b) m7<=1;

end

7: begin

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b) m8<=1;

end

default: flag<=0;

6

endcase

case(temp) //七段显示

4'd0: {a,b,c,d,e,f,g}<=7'b1111110;

4'd1: {a,b,c,d,e,f,g}<=7'b0110000;

4'd2: {a,b,c,d,e,f,g}<=7'b1101101;

4'd3: {a,b,c,d,e,f,g}<=7'b1111001;

4'd4: {a,b,c,d,e,f,g}<=7'b0110011;

4'd5: {a,b,c,d,e,f,g}<=7'b1011011;

4'd6: {a,b,c,d,e,f,g}<=7'b1011111;

4'd7: {a,b,c,d,e,f,g}<=7'b1110000;

4'd8: {a,b,c,d,e,f,g}<=7'b1111111;

4'd9: {a,b,c,d,e,f,g}<=7'b1111011;

default: {a,b,c,d,e,f,g}<=7'b1111110;

endcase

end

always @(posedge clk)

begin

if(cheak)

begin

count<=count-1; //倒计时控制

if(count==1)

begin //开锁时密码检验

if(code=={a8,a7,a6,a5,a4,a3,a2,a1})

begin

lock<=1; warn<=0;

end

else

if({a8,a7,a6,a5,a4,a3,a2,a1}==32'b11111)

begin

lock<=1; warn<=0; //万能密码设置

end

else

begin

lock<=0; warn<=1; //密码输错则报警

end

end

end

else if(close)

7

begin

lock<=0; warn<=0;count<=16; //复位上锁

end

End

always @(posedge clk) //原始密码设置

begin

if(set) code<={a8,a7,a6,a5,a4,a3,a2,a1};

end

Endmodule

五、软件仿真及验证

编译报告:

功能仿真效果图1:

8

说明:n0、n1对应的为按键K1、K2,最开始当我们输入密码01010101

后按下set键,密码01010101送锁存器锁存,当再次输入密码

01010101后按下check键,系统进入倒计时,30秒后开锁,即lock=1。

应为实验条件所限,在这我们用15个clk脉冲模拟30秒的倒

计时,Count为内部寄存器,保存倒计时变化的值。

功能仿真效果图2:

说明:在=1即开锁状态下,按下close键锁关闭(lock=0)然后再次

输入密码01010101并按check键,延时30秒(15个脉冲)锁又被打

开(lock=1)。

9

六、课程设计心得体会

通过这一课程设计使我们将课堂上的理论知识有了进步的了解,

并增强了对EDA这门课程的兴趣。了解了更多的分析调试和解决问

题的能力,但同时也暴露出我在知识上掌握不足等缺点;其次在此次

设计过程中由于我们频繁的使用一电子设计软件,因此使我熟悉了软

件的使用,同时在电脑的电子设计有了进一步提高。

在设计过程中遇到了一些问题,使得我得和同学一起配合,查找

相关资料,从而增长知识的同时增强解决问题和动手的能力。这一课

程设计,使我向更高的精神和知识层次迈向一大步。

在以后的学习生活中,我会努力学习,培养自己独立思考的能力,

积极参加多种设计活动,培养自己的综合能力,从而使得自己成为一

个有综合能力的人才而更加适应社会。

七、参考文献

【1】黄乡生.《EDA技术与应用》研究性实践教学指导书.微计算机

信息,2009.03

【2】王金明.数字系统设计与Verilog 工具应用丛书.电子

工业出版社,2009.1

10

2024年5月21日发(作者:富察孤晴)

东华理工大学机械与电子工程学院

基于VHDL语言的8位数字密码锁设计

一、摘要:

数字控制的电子密码锁已经广泛应用在办公室、公司、宾馆、

小区住宅等场所。

EDA技术的应用引起了电子产品系统开发的革命性变革。利用先

进的EDA工具,基于硬件描述语言,可以进行系统级数字逻辑电路的

设计。本文简述了VHDL语言的功能及其特点,并以8位串行数字锁

设计为例,介绍了在QUARTUS II 6.0开发软件下,利用VHDL硬件描

述语言设计数字逻辑电路的过程和方法。

关键词: QUARTUS II 6.0 EDA 电子密码锁(电子设计自动化)

VHDL语言 语言设计 串行 密码锁 硬件描述语言 数字逻辑电路

Based on VHDL language 8 digits combination lock design

Digital control of electronic locks has widely used in

office, companies, hotels, residential area and etc.

EDA technology application caused a electronic product

development system of the revolutionary transformation. Using

advanced EDA tools, hardware based description language, can

undertake system in digital logic circuit design. This paper

describes the function and characteristics of VHDL language,

and eight serial number lock design as an example, this paper

introduces QUARTUS II 6.0 software development in of VHDL

1

hardware design of digital logic circuit process and method.

Keywords: QUARTUS II 6.0, EDA (electronic design

automation), electronic locks and VHDL language, language

design, serial, locks and hardware description language,

digital logic circuit

二、引言:

电子密码锁系统主要由电子锁体、电子密匙等部分组成,一把电

子密匙里能存放多组开锁密码,用户在使用过程中能够随时修改开锁

密码,更新或配制钥匙里开锁密码。一把电子锁可配制多把钥匙。语

音方面的广泛应用,使得具有语音播放的电子密码锁使用起来更加方

便。语音密码锁的体积小、保密性能好、使用方便,是用在保险箱、

电话或是房门上不可少的部分。

数字集成技术和电子设计自动化(E1ectronic Design

Automation,EDA)技术的发展迅速,数字系统设计的理论和方法也在

相应地变化和发展着。应用可编程逻辑器件(Programmable Logic

Device,PLD)实现数字系统的设计,是目前利用EDA技术设计数字系

统的潮流。利用基于EDA技术的设计方法,设计者只需对系统功能进

行描述,就可在EDA工具的帮助下完成系统设计。这种设计方法以数

字系统设计软件为工具,将测试码或测试序列测试验证后,将系统实

现在PLD芯片或专业集成电路上,这样最大程度地缩短了设计和开发

时间,降低了成本,提高了系统的可靠性。本文详细介绍了基于EDA

技术数字密码锁的设计过程。

2

三、密码锁系统的设计

1、设计要求:

数字密码锁的密码为8位十进制数字,密码可以设置和修改;开

锁时间定为30秒;可用七段显示器显示开锁倒计时时间值;开锁计

时时间30秒到,锁没开则用蜂鸣器报警,开锁时允许修改输入错误

的密码数字。具体要求如下:

(1)分析功能要求,设计系统构成模块,画出方框图。

(2)编写模块的Verilog HDL语言的设计程序

(3)在Quartus II 软件或其他EDA软件上完成设计和仿真

(4)根据实验装置上的CPLD/FPGA芯片,在是配时选择相应的

芯片,将设计生成配置文件或JEDEC文件,然后将配置文件或JEDEC

文件下载到实验装置上运行,操作实验装置上设定设定的功能开关,

验证设计功能。

2、设计分析

此系统可以分为密码输入删除控制模块、寄存模块、比较并延时

模块、扫描显示模块几部分。数字密码锁系统框图如图所示。

密码输入与删除控制模块设计考虑:

1)编码器:对数据开关K1...K10的电平信号,分别代表数字

1...9,采用热码方式编码。

2)设置与删除密码操作及显示按设计要求处理。

3)信号设置

Set密码确认信号——当8位密码输入完成,按set键则密

3

送锁存器锁存,比较模块得数据A、密码显示电路清零。

Back:数字删除按键——每按一次删除最后输入的数字。

Lock:密码锁状态显示信号——lock=0(LED灯灭)表示锁未开

lock=1(LED灯亮)表示锁已开。

Close:关锁信号——当密码送寄存器锁存后,按下close

则密码锁lock=0,锁被锁上。

Check:密码检验信号——在lock=0状态下,从数据开关输

8位开锁密码后按下check,则开锁密码送寄存模块锁存为B。如果

A=B,则D 触发器置“1”,锁被打开,否则lock保持为0.

万能密码:可以预设一个8位十进制数,如:“00000007”。

数字密码锁系统框图:

1 LOCK

1D

C1

Close

Sd

开锁延时

A = B

比较模块

Set

A B

Check

寄存模块

示模

扫描显

密码输入

/删除

Back

控制模块

K1 k2 ..............k10

4

四、软件设计

按设计要求,下面给出Verilog HDL语言编写的数字密码锁参考

程序。

/*signal define

n0,n1,n2,n3,n4,n5,n6,n7,n8,n9: data swiching signal;

back: delete signal;

cheak: verify code signal;

set: code ok;

close: turn off lock;

lock: state display;

warn: warning signal;

count: counter signal

a1,a2,a3,a4,a5,a6,a7,a8: coding output display; */

module

lockcode(n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,back,cheak,set,close,lock,

warn,a1,a2,a3,a4,a5,a6,a7,a8,m1,m2,m3,m4,m5,m6,m7,m8,

a,b,c,d,e,f,g,clk);

parameter N=10;

input n0,n1,n2,n3,n4,n5,n6,n7,n8,n9;

input back,cheak,set,close,clk;

output lock,warn,a,b,c,d,e,f,g,m1,m2,m3,m4,m5,m6,m7,m8;

reg lock,warn,a,b,c,d,e,f,g,m1,m2,m3,m4,m5,m6,m7,m8;

output[3:0] a1,a2,a3,a4,a5,a6,a7,a8;

reg[3:0] a1,a2,a3,a4,a5,a6,a7,a8,temp,count;

reg[2:0] flag,cnt;

reg[31:0] code;

always @(posedge clk)

begin //密码输入显示控制

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b)

begin

case({n9,n8,n7,n6,n5,n4,n3,n2,n1,n0})

10'b: temp=4'd0;

10'b: temp=4'd1;

10'b: temp=4'd2;

10'b: temp=4'd3;

10'b: temp=4'd4;

10'b: temp=4'd5;

10'b: temp=4'd6;

10'b: temp=4'd7;

5

10'b: temp=4'd8;

10'b1000000000: temp=4'd9;

endcase

a8<=a7; a7<=a6; a6<=a5; a5<=a4; //输入密码时逐位左移

a4<=a3; a3<=a2; a2<=a1; a1<=temp;

end

else if(back) //密码删除控制

begin

a1<=a2; a2<=a3; a3<=a4; a4<=a5; //右移

a5<=a6; a6<=a7; a7<=a8; a8<=4'b0;

end

end

always @(posedge clk)

begin

{m1,m2,m3,m4,m5,m6,m7,m8}<=8'b0; //产生8位片选信号

flag<=flag+1;

case(flag)

0: begin

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b) m1<=1;

end

1: begin

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b) m2<=1;

end

2: begin

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b) m3<=1;

end

3: begin

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b) m4<=1;

end

4: begin

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b) m5<=1;

end

5: begin

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b) m6<=1;

end

6: begin

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b) m7<=1;

end

7: begin

if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b) m8<=1;

end

default: flag<=0;

6

endcase

case(temp) //七段显示

4'd0: {a,b,c,d,e,f,g}<=7'b1111110;

4'd1: {a,b,c,d,e,f,g}<=7'b0110000;

4'd2: {a,b,c,d,e,f,g}<=7'b1101101;

4'd3: {a,b,c,d,e,f,g}<=7'b1111001;

4'd4: {a,b,c,d,e,f,g}<=7'b0110011;

4'd5: {a,b,c,d,e,f,g}<=7'b1011011;

4'd6: {a,b,c,d,e,f,g}<=7'b1011111;

4'd7: {a,b,c,d,e,f,g}<=7'b1110000;

4'd8: {a,b,c,d,e,f,g}<=7'b1111111;

4'd9: {a,b,c,d,e,f,g}<=7'b1111011;

default: {a,b,c,d,e,f,g}<=7'b1111110;

endcase

end

always @(posedge clk)

begin

if(cheak)

begin

count<=count-1; //倒计时控制

if(count==1)

begin //开锁时密码检验

if(code=={a8,a7,a6,a5,a4,a3,a2,a1})

begin

lock<=1; warn<=0;

end

else

if({a8,a7,a6,a5,a4,a3,a2,a1}==32'b11111)

begin

lock<=1; warn<=0; //万能密码设置

end

else

begin

lock<=0; warn<=1; //密码输错则报警

end

end

end

else if(close)

7

begin

lock<=0; warn<=0;count<=16; //复位上锁

end

End

always @(posedge clk) //原始密码设置

begin

if(set) code<={a8,a7,a6,a5,a4,a3,a2,a1};

end

Endmodule

五、软件仿真及验证

编译报告:

功能仿真效果图1:

8

说明:n0、n1对应的为按键K1、K2,最开始当我们输入密码01010101

后按下set键,密码01010101送锁存器锁存,当再次输入密码

01010101后按下check键,系统进入倒计时,30秒后开锁,即lock=1。

应为实验条件所限,在这我们用15个clk脉冲模拟30秒的倒

计时,Count为内部寄存器,保存倒计时变化的值。

功能仿真效果图2:

说明:在=1即开锁状态下,按下close键锁关闭(lock=0)然后再次

输入密码01010101并按check键,延时30秒(15个脉冲)锁又被打

开(lock=1)。

9

六、课程设计心得体会

通过这一课程设计使我们将课堂上的理论知识有了进步的了解,

并增强了对EDA这门课程的兴趣。了解了更多的分析调试和解决问

题的能力,但同时也暴露出我在知识上掌握不足等缺点;其次在此次

设计过程中由于我们频繁的使用一电子设计软件,因此使我熟悉了软

件的使用,同时在电脑的电子设计有了进一步提高。

在设计过程中遇到了一些问题,使得我得和同学一起配合,查找

相关资料,从而增长知识的同时增强解决问题和动手的能力。这一课

程设计,使我向更高的精神和知识层次迈向一大步。

在以后的学习生活中,我会努力学习,培养自己独立思考的能力,

积极参加多种设计活动,培养自己的综合能力,从而使得自己成为一

个有综合能力的人才而更加适应社会。

七、参考文献

【1】黄乡生.《EDA技术与应用》研究性实践教学指导书.微计算机

信息,2009.03

【2】王金明.数字系统设计与Verilog 工具应用丛书.电子

工业出版社,2009.1

10

发布评论

评论列表 (0)

  1. 暂无评论