EDA综合课程设计电子密码锁的设计.docx

上传人:b****4 文档编号:5063019 上传时间:2022-12-12 格式:DOCX 页数:20 大小:623.78KB
下载 相关 举报
EDA综合课程设计电子密码锁的设计.docx_第1页
第1页 / 共20页
EDA综合课程设计电子密码锁的设计.docx_第2页
第2页 / 共20页
EDA综合课程设计电子密码锁的设计.docx_第3页
第3页 / 共20页
EDA综合课程设计电子密码锁的设计.docx_第4页
第4页 / 共20页
EDA综合课程设计电子密码锁的设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

EDA综合课程设计电子密码锁的设计.docx

《EDA综合课程设计电子密码锁的设计.docx》由会员分享,可在线阅读,更多相关《EDA综合课程设计电子密码锁的设计.docx(20页珍藏版)》请在冰豆网上搜索。

EDA综合课程设计电子密码锁的设计.docx

EDA综合课程设计电子密码锁的设计

 

SOPC/EDA综合课程设计报告

 

设计题目:

电子密码锁的设计

设计者:

学号:

班级:

指导老师:

完成时间:

设计报告

综合测试

 

总评

格式

(10)

内容

(40)

图表

(10)

答辩

(20)

平时

(20)

 

目录

目录1

第一章设计目的及要求2

1.1设计要求2

第二章原理与模块介绍4

2.1原理介绍4

2.2模块介绍4

第三章模块设计5

3.1输入模块5

3.1.1输入模块程序5

3.2控制模块8

3.2.1控制模块程序8

3.3显示模块11

3.3.1显示模块程序11

3.4顶层模块12

第四章模块元件及其仿真16

4.1输入模块元件及其仿真16

4.1.1输入模块元件16

4.1.2输入模块仿真16

图4.1.217

4.2控制模块元件及其仿真17

4.2.1控制模块元件17

图4.2.117

4.2.2控制模块仿真18

图4.2.218

4.3显示模块元件及其仿真18

4.3.1显示模块元件18

图4.3.118

4.3.2显示模块仿真19

图4.3.219

第五章总程序设计20

5.1整体组装设计原理图20

5.1全局模块连接图20

5.2整体组合元件20

图5.2整体模块20

5.3顶层模块仿真21

第六章结论和问题讨论22

6.1完成实验程度22

6.2遇到的问题。

22

6.3存在的不足和改进思路22

6.4心得体会22

参考文献24

第一章设计目的及要求

1.1设计要求

设计一个具有较高安全性和较低成本的通用电子密码锁,其具体功能要求如下:

(1)数码输入:

每按下一个数字键,就输入一个数值,并在显示器上的最右方显示出该数值,同时将先前输入的数据依序左移一个数字位置。

(2)数码清除:

按下此键可清除前面所有的输入值,清除成为“0000”。

(3)密码更改:

按下此键时会将目前的数字设定成新的密码。

(4)激活电锁:

按下此键可将密码锁上锁。

(5)解除电锁:

按下此键会检查输入的密码是否正确,密码正确即开锁。

 

图1.1设计方框图

 

第二章原理与模块介绍

2.1原理介绍

根据设计要求,可以确定所需要的功能,可以分为三个方面,一是输入方面,二是控制方面,三是显示方面的需求。

所以初步决定利用三个模块完成相关功能。

同时,模块化的编程方式利于后期调试。

2.2模块介绍

输入模块:

根据设计要求,使用到时序产生电路,弹跳消除电路,及键盘扫描电路来共同组成。

控制模块:

包括按键数据的缓冲存储,密码的清除、更改、存储、激活电锁电路(产生寄存器清除信号),密码核对(数值比较),解锁电路(开/关门锁)等几个功能。

显示模块:

主要是实现七段数码管显示电路,将待显示数据的BCD码转换成数码器的七段显示驱动编码。

 

第三章模块设计

3.1输入模块

1.时序产生电路

本时序产生电路中使用了三种不同频率的工作脉冲波形:

系统时钟脉冲(它是系统内部所有时钟脉冲的源头,且其频率最高)、键盘扫描信号。

2.键盘扫描电路

扫描电路的作用是用来提供键盘扫描信号(表4.1中的KY3~KY0)的,扫描信号变化的顺序依次为1110-1101-1011-0111-1110......依序地周而复始。

3.1.1输入模块程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYSRIS

PORT(CLK_1K:

INSTD_LOGIC;

KEY_IN:

INSTD_LOGIC_VECTOR(2DOWNTO0);

DATA_N:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

DATA_F:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

DATA_M:

OUTSTD_LOGIC;

DATA_B:

OUTSTD_LOGIC;

CQD:

OUTSTD_LOGIC;

KSEL:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

CSR:

OUTSTD_LOGIC_VECTOR(1DOWNTO0));

ENDENTITYSR;

ARCHITECTUREARTOFSRIS

SIGNALC_QD:

STD_LOGIC;

SIGNALC_SR:

STD_LOGIC_VECTOR(1DOWNTO0);

SIGNALN,F:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALFN,FF:

STD_LOGIC;

SIGNALSEL:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALQ:

STD_LOGIC_VECTOR(5DOWNTO0);

SIGNALC:

STD_LOGIC_VECTOR(2DOWNTO0);

BEGIN

DATA_N<=N;

DATA_F<=F;

DATA_M<=FN;

DATA_B<=FF;

CQD<=C_QD;

CSR<=C_SR;

KSEL<=SEL;

C(0)<=KEY_IN(0);

C

(1)<=KEY_IN

(1);

C

(2)<=KEY_IN

(2);

COUNTIER:

BLOCKIS

BEGIN

PROCESS(CLK_1K)IS

BEGIN

IF(CLK_1K'EVENTANDCLK_1K='1')THEN

Q<=Q+1;

ENDIF;

C_QD<=Q(3);

C_SR<=Q(5DOWNTO4);

ENDPROCESS;

SEL<="1110"WHENC_SR=0ELSE

"1101"WHENC_SR=1ELSE

"1011"WHENC_SR=2ELSE

"0111"WHENC_SR=3ELSE

"1111";

ENDBLOCKCOUNTIER;

KEY_DECODER:

BLOCK

SIGNALZ:

STD_LOGIC_VECTOR(4DOWNTO0);

BEGIN

PROCESS(C_QD)

BEGIN

Z<=C_SR&C;

IF(C_QD'EVENTANDC_QD='1')THEN

CASEZIS

WHEN"11101"=>N<="0000";--0

WHEN"00101"=>N<="0001";--1

WHEN"00100"=>N<="0010";--2

WHEN"00110"=>N<="0011";--3

WHEN"01011"=>N<="0100";--4

WHEN"01101"=>N<="0101";--5

WHEN"01110"=>N<="0110";--6

WHEN"10011"=>N<="0111";--7

WHEN"10101"=>N<="1000";--8

WHEN"10110"=>N<="1001";--9

WHENOTHERS=>N<="1111";--F

ENDCASE;

ENDIF;

IFC_QD'EVENTANDC_QD='1'THEN

CASEZIS

WHEN"11011"=>F<="0100";

WHEN"11110"=>F<="0001";

WHENOTHERS=>F<="1000";

ENDCASE;

ENDIF;

ENDPROCESS;

FN<=NOT(N(3)ANDN

(2)ANDN

(1)ANDN(0));

FF<=F

(2)ORF(0);

ENDBLOCKKEY_DECODER;

ENDARCHITECTURE;

3.2控制模块

密码锁的控制模块是其整个设计的核心部分,依靠其进行密码锁的基本功能。

如,设置密码,重置密码,开锁,上锁等等。

1.数字按键输入的响应控制

(1)如果按下数字键,第一个数字会从显示器的最右端开始显示,此后每新按一个数字时,显示器上的数字必须左移一格,以便将新的数字显示出来。

(2)假如要更改输入的数字,可以按倒退按键来清除前一个输入的数字,或者按清除键清除所有输入的数字,再重新输入四位数。

(3)由于这里设计的是一个四位的电子密码锁,所以当输入的数字键超过四个时,电路不予理会,而且不再显示第四个以后的数字。

2.功能按键输入的响应控制

(1)清除键:

清除所有的输入数字,即做归零动作。

(2)激活电锁键:

按下此键时可将密码锁的门上锁。

(上锁前必须预先设定一个四位的数字密码。

(3)解除电锁键:

按下此键会检查输入的密码是否正确,若密码正确无误则开门。

3.2.1控制模块程序

密码锁控制电路的VHDL源程序

--CTRL.VHD

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCTRLIS

PORT(DATA_N:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DATA_F:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DATA_M:

INSTD_LOGIC;

DATA_B:

INSTD_LOGIC;

MIMAIN:

BUFFERSTD_LOGIC;

SETIN:

BUFFERSTD_LOGIC;

OLD:

BUFFERSTD_LOGIC;

CQD:

INSTD_LOGIC;

ENLOCK:

OUTSTD_LOGIC;

DATA_BCD:

OUTSTD_LOGIC_VECTOR(15DOWNTO0));

ENDENTITYCTRL;

ARCHITECTUREARTOFCTRLIS

SIGNALACC,REG:

STD_LOGIC_VECTOR(15DOWNTO0);

BEGIN

PROCESS(CQD,DATA_M)IS

BEGIN

IFCQD'EVENTANDCQD='0'THEN

IFDATA_M='1'THEN

IF(DATA_F="0100")THEN

ACC<="1111111111111111";

MIMAIN<='0';SETIN<='0';OLD<='0';

ELSIF(DATA_F="0001")THEN

IF(MIMAIN='0'ANDSETIN='0')THEN

CASEACC(7DOWNTO0)IS

WHEN"00010001"=>ENLOCK<='1';

WHEN"10011001"=>MIMAIN<='1';

ACC<="1111111111111111";

WHEN"01010101"=>SETIN<='1';

ACC<="1111111111111111";

OLD<='1';

WHENOTHERS=>NULL;

ENDCASE;

ELSIF(MIMAIN='1')THEN

IFACC=REGTHEN

ENLOCK<='0';

MIMAIN<='0';

ELSE

MIMAIN<='0';

ENDIF;

ELSIF(SETIN='1')THEN

IF(OLD='1')THEN

IF(ACC=REG)THEN

OLD<='0';

ELSE

SETIN<='0';

OLD<='0';

ENDIF;

ELSE

IF(ACC<"1001100110011001")THEN

REG<=ACC;

SETIN<='0';

ENDIF;

ENDIF;

ENDIF;

ENDIF;

ELSIFDATA_B='1'THEN

ACC<=ACC(11DOWNTO0)&DATA_N;

ENDIF;

ENDIF;

ENDPROCESS;

ENDARCHITECTURE;

3.3显示模块

密码显示电路主要将显示数据的BCD码转换成相对应的编码。

这里直接采用四个4-7译码器来实现。

3.3.1显示模块程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYYMIS

PORT(DATA_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DOUT7:

OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDYM;

ARCHITECTUREARTOFYMIS

BEGIN

PROCESS(DATA_BCD)

BEGIN

CASEDATA_BCDIS

WHEN"0000"=>DOUT7<="0111111";--0

WHEN"0001"=>DOUT7<="0000110";--1

WHEN"0010"=>DOUT7<="1011011";--2

WHEN"0011"=>DOUT7<="1001111";--3

WHEN"0100"=>DOUT7<="1100110";--4

WHEN"0101"=>DOUT7<="1101101";--5

WHEN"0110"=>DOUT7<="1111101";--6

WHEN"0111"=>DOUT7<="0000111";--7

WHEN"1000"=>DOUT7<="1111111";--8

WHEN"1001"=>DOUT7<="1101111";--9

WHENOTHERS=>DOUT7<="0000000";--EMPTY

ENDCASE;

ENDPROCESS;

ENDARCHITECTUREART;

3.4顶层模块

LIBRARYieee;

USEieee.std_logic_1164.all;

LIBRARYwork;

ENTITYstringIS

PORT

(CLK:

INSTD_LOGIC;

KEY:

INSTD_LOGIC_VECTOR(2DOWNTO0);

MIMAIN:

OUTSTD_LOGIC;

SETIN:

OUTSTD_LOGIC;

OLD:

OUTSTD_LOGIC;

ENLOCK:

OUTSTD_LOGIC;

CRS:

OUTSTD_LOGIC_VECTOR(1DOWNTO0);

SEG_SM1:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

SEG_SM2:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

SEG_SM3:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

SEG_SM4:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

SEL:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDstring;

ARCHITECTUREbdf_typeOFstringIS

COMPONENTym

PORT(DATA_BCD:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DOUT7:

OUTSTD_LOGIC_VECTOR(6DOWNTO0)

);

ENDCOMPONENT;

COMPONENTsr

PORT(CLK_1K:

INSTD_LOGIC;

KEY_IN:

INSTD_LOGIC_VECTOR(2DOWNTO0);

DATA_M:

OUTSTD_LOGIC;

DATA_B:

OUTSTD_LOGIC;

CQD:

OUTSTD_LOGIC;

CSR:

OUTSTD_LOGIC_VECTOR(1DOWNTO0);

DATA_F:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

DATA_N:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

KSEL:

OUTSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDCOMPONENT;

COMPONENTctrl

PORT(DATA_M:

INSTD_LOGIC;

DATA_B:

INSTD_LOGIC;

CQD:

INSTD_LOGIC;

DATA_F:

INSTD_LOGIC_VECTOR(3DOWNTO0);

DATA_N:

INSTD_LOGIC_VECTOR(3DOWNTO0);

MIMAIN:

OUTSTD_LOGIC;

SETIN:

OUTSTD_LOGIC;

OLD:

OUTSTD_LOGIC;

ENLOCK:

OUTSTD_LOGIC;

DATA_BCD:

OUTSTD_LOGIC_VECTOR(15DOWNTO0)

);

ENDCOMPONENT;

SIGNALDATA_BCD:

STD_LOGIC_VECTOR(15DOWNTO0);

SIGNALSYNTHESIZED_WIRE_0:

STD_LOGIC;

SIGNALSYNTHESIZED_WIRE_1:

STD_LOGIC;

SIGNALSYNTHESIZED_WIRE_2:

STD_LOGIC;

SIGNALSYNTHESIZED_WIRE_3:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALSYNTHESIZED_WIRE_4:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

b2v_inst1:

ym

PORTMAP(DATA_BCD=>DATA_BCD(3DOWNTO0),

DOUT7=>SEG_SM1);

b2v_inst2:

sr

PORTMAP(CLK_1K=>CLK,

KEY_IN=>KEY,

DATA_M=>SYNTHESIZED_WIRE_0,

DATA_B=>SYNTHESIZED_WIRE_1,

CQD=>SYNTHESIZED_WIRE_2,

CSR=>CRS,

DATA_F=>SYNTHESIZED_WIRE_3,

DATA_N=>SYNTHESIZED_WIRE_4,

KSEL=>SEL);

b2v_inst3:

ctrl

PORTMAP(DATA_M=>SYNTHESIZED_WIRE_0,

DATA_B=>SYNTHESIZED_WIRE_1,

CQD=>SYNTHESIZED_WIRE_2,

DATA_F=>SYNTHESIZED_WIRE_3,

DATA_N=>SYNTHESIZED_WIRE_4,

MIMAIN=>MIMAIN,

SETIN=>SETIN,

OLD=>OLD,

ENLOCK=>ENLOCK,

DATA_BCD=>DATA_BCD);

b2v_inst4:

ym

PORTMAP(DATA_BCD=>DATA_BCD(15DOWNTO12),

DOUT7=>SEG_SM4);

b2v_inst5:

ym

PORTMAP(DATA_BCD=>DATA_BCD(11DOWNTO8),

DOUT7=>SEG_SM3);

b2v_inst6:

ym

PORTMAP(DATA_BCD=>DATA_BCD(7DOWNTO4),

DOUT7=>SEG_SM2);

ENDbdf_type;

 

第四章模块元件及其仿真

4.1输入模块元件及其仿真

4.1.1输入模块元件

图4.1.1

4.1.2输入模块仿真

图4.1.2

分析:

图4.2CLK是在下降沿有效,当KRY有信号输入时,在下降沿有五个信号输出作为下一个元件的输入信号,其中有两个将直接输出。

4.2控制模块元件及其仿真

4.2.1控制模块元件

图4.2.1

4.2.2控制模块仿真

图4.2.2

分析:

以输入模块的输出信号作为输入信号实现控制功能。

4.3显示模块元件及其仿真

4.3.1显示模块元件

图4.3.1

4.3.2显示模块仿真

图4.3.2

分析:

输入“0110”时,输出"1111101",即数码管显示数字6。

当输入“1010”(即大于9)时,数码管无显示。

模块工作正常。

 

第五章总程序设计

5.1整体组装设计原理图

5.1全局模块连接图

5.2整体组合元件

图5.2整体模块

5.3顶层模块仿真

仿真说明:

此组合模块基本实现了密码锁的设计要求,具有数码输入、数码显示、数码存储、密码锁定、密码重设和密码清除的功能。

基本达到了最初要达到的要求。

 

第六章结论和问题讨论

6.1完成实验程度

本次试验基本达到预期目标,完成了密码锁的基本功能。

6.2遇到的问题。

本次课程设计,遇到了很多问题,首先是自己对软件方面的不熟悉,造成了很多的误操作,修改这些误操作引起的错误耗费了大量时间和精力。

其次,基础知识掌握的不够牢靠,很多好的设想,没办法在自己手中一一加入本次课程设计,颇为遗憾。

在往后,当对这样的课程设计了解更深入以后,我会重新再做一次,将自己的设想一一加入,不再以只是为了做一个简单的密码锁为目标,要做一个真正具有使用价值的密码锁。

最后印象最深的就是关于开发系统版本不同所造成的问题了,由于本人经常往返于不同计算机,各台计算机的Quarters版本不尽相同,有的时候无法运行已经通过编译的程序。

6.3存在的不足和改进思路

本次课程设计做的锁,有几点不是很满意。

一是没有设计报警系统,譬如输错三次自己报警。

或者语音提示,提示错误,或者密码设置相关的语音等等。

用扬声器,计数器等等经过调试就可以实现。

6.4心得体会

经过这两个星期系统的学习,初步了解了EDA工程设计的步骤,初步了解了QuartusII软件的应用。

经过这次课程设计,我充分的了解到了自主学习的重要性,进一步加深了对于所学知识对于在实际工作中的重要作用。

实际动手操作起来,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 兵器核科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1