电子密码锁EDA技术课程设计

更新时间:2024-06-12 10:15:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课 程 设 计

课 程 EDA 技术课程设计 题 目 电子密码锁 院 系 电子科学学院 专业班级 电子信息工程 学生姓名 学生学号 指导教师

2011年 3 月11日

1

课程设计任务书

课程 EDA技术课程设计 题目 电子密码锁 专业

电子信息工程 姓名 学号

主要内容、基本要求、主要参考资料等 主要内容:

设计一个密码锁的控制电路,第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,当输入正确代码时,输出开锁信号以推动执行机构工作。

基本要求:

1、设计一个密码锁的控制电路,当输入正确代码时,输出开锁信号以推动执行机构工作,用红灯亮、绿灯熄灭表示关锁,用绿灯亮、红灯熄灭表示开锁;

2、在锁的控制电路中储存一个可以修改的4位代码,当开锁按钮开关(设置成8位,其中实际有效为4位,其余为虚设)的输入代码等于储存代码时,开锁;

3、从第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并由扬声器发出持续20秒的报警信号,并输出一个信号推动LED不断闪烁。

主要参考资料:

[1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005. [2] 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006. [3] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.

完成期限 2010.3.11 指导教师 专业负责人

2010年 3月7日

2

一、 总体设计思想:

本课程设计主要是基于

VHDL文本输入法设计电子密码锁,随着社会物

质财富的日益增长,安全防盗已成为全社会关注的问题。基于EDA技术设计的电子密码锁,以其价格便宜、安全可靠、使用方便,受到了人们的普遍关注。而以现场可编程逻辑器件(FPGA)为设计载体,以硬件描述语言(VHDE)为主要表达方式,以QuartusⅡ开发软件和GW48EDA开发系统为设计工具设计的电子密码锁,由于其能够实现数码输入、数码清除、密码解除、密码更改、密码上锁和密码解除等功能,因此,能够满足社会对安全防盗的要求。

1.系统设计实现的基本功能

(1) 密码输入:每按下一个数字键,就输入一个数值,并在显示器上显示出

该数值。同时将先前输入的数据依次左移一个数字位置。

(2) 密码清除:按下清除键可清除前面所有的输入值,清除成为“0000”。 (3) 密码更改:按下更改键可将目前数据设定为新的密码。 (4) 密码上锁:按下上锁键可将密码锁上锁。

(5) 密码解除:按下解除键首先检查输入的密码是否正确,密码正确即解锁。

2. 电子密码锁的结构原理

根据系统设计要求,系统设计采用自顶向下的设计方法。 2.1 电子密码锁的整体结构 (1)密码锁输入模块

密码锁的输入模块由时序产生电路、键盘扫描电路、键盘译码电路和按键存储电路组成。如下图示:

3

键盘扫描电路 时序产生电路 按键数据缓存器 键盘 弹跳消除电路 键盘译码电路

图1

a. 时序产生电路

产生电路中使用的三种不同频率的工作脉冲波形,即系统时钟脉冲、弹跳消除取样信号和键盘扫描信号。 b. 键盘扫描电路

扫描电路的作用是提供键盘扫描信号,扫描信号变化顺序依次是1110—1101—1011—0111—1110.-----依序地周而复始。 c.键盘译码电路

上述键盘中的按键分为数字按键和文字按键,每一个按键可能负责不同的功能,例如清除键、上锁键和解锁键等。数字按键主要是用来输入数字的,但是键盘所产生的输出是无法直接拿来用作密码锁控制电路的输入的;另外,不同的按键具有不同的功能,所以必须由键盘译码电路来规划每个按键的输出形式,以便执行相应的动作。 d. 按键存储电路

因为每一次扫描会产生新的按键数据,可能会覆盖前面的数据,所以需要一个按键存储电路。将整个键盘扫描完毕后的结果记录下来。

按键位置与数码关系(表)图2

扫描位置【1…0】 CSR00 00 00 01 01 01 10 10 10 11 11 11 4

键盘输出信号SEL【3…0】 按键号 0011 0101 0110 0011 0101 0110 0011 0101 0110 0011 0101 0110 1 2 3 4 5 6 7 8 9 * 0 # 图3所示是密码锁输入模块的仿真波形

二、设计步骤和调试过程

密码锁的控制电路是整个电路的控制中心,主要完成对数字按键输入和功能按键输入的响应控制。 a.数字按键输入的响应控制

如果按下数字键,第一个数字会从显示器的最右端开始显示,此后每新按下一个数字时,显示器上的数字必须左移一位,一边将新的数字显示出来。 假如要更改输入的数字,可以按倒退按键来清除前一个输入的数字,或者按清除键清除所有输入的数字,再重新输入四位数。

由于这里设计的是一个四位的电子密码锁,所以当输入的数字键超过四个时,电路不予理会,而且不再显示第四个以后的数字。 b.功能按键输入响应控制

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

上锁键:按下此键时可将密码锁的门上锁(上锁前必须先设定一个四位的电

5

子密码)。

解除键:按下此建辉检查输入的密码是否正确,若密码正确无误则解锁。 图4所示是密码锁控制模块的仿真波形

(3)密码锁译码模块:

本电子密码锁的显示模块比较简单,其作用是将控制模块的BCD码输出转换为7段显示编码,然后驱动数码管,其仿真波形如图5所示。

电子密码锁的整合和验证

要完成电子密码锁的设计,还必须将上述三个功能模块进行整合。

三、结论及心得体会

此次的设计是参考了《EDA技术实验与课程设计》里的程序,不过由于程序里面出现了不少的语法错误,使得在编译时出现了20多个错误,不过在看过书后,细心地检查过程序后方能纠正过来。在纠正的过程中获益良多。 在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机

6

自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。感觉EDA还是很有研究价值的,能大大的减少设计者的工作量。

从编写程序到完成此次课程设计,亲自操作软件起来从生硬到熟练,现在能较娴熟的运用QuartusⅡ。 附:VHDL源程序 密码锁输入模块

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SR IS

PORT(CLK_1K: IN STD_LOGIC;

KEY_IN: IN STD_LOGIC_VECTOR(2 DOWNTO 0); DATA_N: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); DATA_F: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); FLAG_N: OUT STD_LOGIC; FLAG_F: OUT STD_LOGIC; CQD: OUT STD_LOGIC;

KSEL: OUT STD_LOGIC_VECTOR(3 DOWNTO 0); CSR: OUT STD_LOGIC_VECTOR(1 DOWNTO 0)); END SR;

ARCHITECTURE ONE OF SR IS SIGNAL C_QD: STD_LOGIC;

SIGNAL C_SR: STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL N,F: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL FN,FF: STD_LOGIC;

SIGNAL SEL: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL Q: STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL C: STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN

DATA_N<=N; DATA_F<=F; FLAG_N<=FN; FLAG_F<=FF; CQD<=C_QD; CSR<=C_SR; KSEL<=SEL;

7

C(0)<=KEY_IN(0); C(1)<=KEY_IN(1); C(2)<=KEY_IN(2); COUNTER: BLOCK IS BEGIN

PROCESS(CLK_1K)IS BEGIN

IF(CLK_1K'EVENT AND CLK_1K='1')THEN Q<=Q+1; END IF;

C_QD<=Q(3);

C_SR<=Q(5 DOWNTO 4); END PROCESS;

SEL<=\ \ \ \ \

END BLOCK COUNTER; KEY_DECODER: BLOCK

SIGNAL Z: STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN

PROCESS(C_QD) BEGIN

Z<=C_SR&C;

IF(C_QD'EVENT AND C_QD='1') THEN CASE Z IS

WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN OTHERS=>N<=\ END CASE; END IF;

IF C_QD'EVENT AND C_QD='1' THEN CASE Z IS

WHEN\ WHEN\ WHEN OTHERS=>F<=\ END CASE;

8

END IF;

END PROCESS;

FN<=NOT(N(3)AND N(2)AND N(1)AND N(0)); FF<=F(2) OR F(0);

END BLOCK KEY_DECODER; END ARCHITECTURE ONE;

Add0Q[5..0]A[5..0]PRE1' h0 --Equal2SEL~[5..3]A[2..0]B[5..0]6' h01 --+DQSELB[2..0]3' h1 --=DATAAOUT0CLK_1KADDERENA3' h7 --DATABKSEL[3..0]CLREQUAL1' h0 --Equal1SEL~[2..1]CSR[1..0]A[2..0]SELMUX21B[2..0]3' h2 --=DATAAOUT0DATA_F[3..0]2' h3 --DATABDATA_N[3..0]EQUAL1' h0 --Equal0A[2..0]MUX21B[2..0]3' h3 --=011EQUALSEL~01' h0 --Equal3N[3..0]A[2..0]PREDQB[2..0]FN~23' h0 --=FLAG_NEQUALMux0ENACLRKEY_IN[2..0]SEL[4..0]OUT32' hDFF79797 --DATA[31..0]F[3..0]PREFF~0DQMUXFLAG_FMux11' h0 --ENASEL[4..0]OUTCLR32' hDF9FFF97 --DATA[31..0]MUXMux2SEL[4..0]OUT32' hDF9FD7F7 --DATA[31..0]MUXMux3SEL[4..0]OUT32' hDFDFB7DF --DATA[31..0]MUXMux4SEL[4..0]OUT32' hB7FFFFFF --DATA[31..0]MUXMux5SEL[4..0]OUT32' h08000000 --DATA[31..0]MUXMux6SEL[4..0]OUT32' h40000000 --DATA[31..0]MUXCQD密码锁控制模块

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CTRL IS

9

PORT (DATA_N: IN STD_LOGIC_VECTOR(3 DOWNTO 0); DATA_F: IN STD_LOGIC_VECTOR(3 DOWNTO 0); FLAG_N: IN STD_LOGIC; FLAG_F: IN STD_LOGIC;

MIMAIN: BUFFER STD_LOGIC; SETIN: BUFFER STD_LOGIC; OLD: BUFFER STD_LOGIC; CQD: IN STD_LOGIC;

ENLOCK: OUT STD_LOGIC;

DATA_BCD: OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END ENTITY CTRL;

ARCHITECTURE ONE OF CTRL IS

SIGNAL ACC,REG: STD_LOGIC_VECTOR(15 DOWNTO 0); BEGIN

PROCESS(CQD,FLAG_F) IS BEGIN

IF CQD'EVENT AND CQD='0' THEN IF FLAG_F='1' THEN

IF(DATA_F=\ ACC<=\

MIMAIN<='0'; SETIN<='0'; OLD<='0'; ELSIF(DATA_F=\

IF(MIMAIN='0' AND SETIN='0') THEN CASE ACC(7 DOWNTO 0) IS

WHEN\

WHEN\ WHEN\ OLD<='1'; WHEN OTHERS=>NULL; END CASE;

ELSIF(MIMAIN='1') THEN IF ACC=REG THEN ENLOCK<='0'; MIMAIN<='0'; ELSE

MIMAIN<='0'; END IF;

ELSIF(SETIN='1') THEN IF(OLD='1') THEN IF(ACC=REG) THEN OLD<='0'; ELSE

SETIN<='0'; OLD<='0'; END IF; ELSE

10

IF(ACC<\ REG<=ACC; SETIN<='0'; END IF; END IF; END IF; END IF;

ELSIF FLAG_N='1' THEN

ACC<=ACC(11 DOWNTO 0)&DATA_N; END IF; END IF;

END PROCESS; DATA_BCD<=ACC;

END ARCHITECTURE ONE;

FLAG_NACC~[63..48]ACC~[79..64]SELDATAADATA_N[3..0]SELOUT0DATAAACC[15..0]PREOUT0DQ16' h9999 --ENAA[15..0]B[15..0]LessThan0DATABACC~[15..0]SELACC~[31..16]SELDATAADATABOUT016' hFFFF --ACC~[47..32]SELDATAADATABOUT0DATAB

LIBRARY IEEE ;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY YM IS

PORT(DATA_BCD: IN STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT7: OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END YM;

ARCHITECTURE ONE OF YM IS BEGIN

PROCESS(DATA_BCD) BEGIN

CASE DATA_BCD IS

WHEN\ WHEN\

11

WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN\ WHEN OTHERS=>DOUT7<=\ END CASE; END PROCESS;

END ARCHITECTURE ONE;

12

process_0~0MIMAIN~reg0_OUT0process_0~0_OUT0SETIN~reg0_OUT0OLD~reg0_OUT000011OLD~1_OUT0OLD~0OLD~1Mux19SEL[7..0]1' h1 --OUTDATA[255..0]Mux19_OUTMUXMux18SEL[7..0]1' h1 --OUTDATA[255..0]Mux18_OUTMUXMux17SEL[7..0]1' h1 --OUTDATA[255..0]Mux17_OUT1' h1 --MUXMux16SEL[7..0]1' h1 --OUTDATA[255..0]Mux16_OUT1' h1 --MUXMux15SEL[7..0]1' h1 --OUTDATA[255..0]Mux15_OUT1' h1 --MUXMux14SEL[7..0]1' h1 --OUTDATA[255..0]Mux14_OUT1' h1 --MUXMux13SEL[7..0]1' h1 --OUTDATA[255..0]Mux13_OUT1' h1 --MUXMux12SEL[7..0]1' h1 --OUTDATA[255..0]Mux12_OUT1' h1 --MUXMux11SEL[7..0]1' h1 --OUTDATA[255..0]Mux11_OUT1' h1 --MUXMux10SEL[7..0]1' h1 --OUTDATA[255..0]Mux10_OUT1' h1 --MUXMux9ACC_OUT0SEL[7..0]1' h1 --OUTDATA[255..0]Mux9_OUT1' h1 --MUX13

主要参考资料:

[1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005. [2] 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006. [3] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.

14

东北石油大学课程设计成绩评价表

课程名称 EDA技术课程设计 题目名称 电子密码锁 学生姓名 序号 评价项目 工作量、工作态度和出勤率 学号 指导教 师姓名 指 标 按期圆满的完成了规定的任务,难易程度和工作量符合教学要求,工作努力,遵守纪律,出勤率高,工作作风严谨,善于与他人合作。 课程设计选题合理,计算过程简练准确,分析问2 课程设计质量 题思路清晰,结构严谨,文理通顺,撰写规范,图表完备正确。 3 4 总分 评语: 创新 答辩 工作中有创新意识,对前人工作有一些改进或有一定应用价值。 能正确回答指导教师所提出的问题。 5 30 45 20 职称 满分 评分 1 指导教师: 2011年 3 月 11 日

15

本文来源:https://www.bwwdw.com/article/nzg6.html

Top