电子密码锁 eda 课程设计
东 北 石 油 大 学
课 程 设 计
课 程 EDA技术课程设计
题 目 电子密码锁
院 系 电子科学学院
专业班级 电子信息工程
学生姓名
学生学号
指导教师
2011年 3 月11日
1
东北石油大学课程设计任务书
课程 EDA技术课程设计
题目 电子密码锁
专业 电子信息工程 姓名 学号
主要
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
、基本要求、主要参考资料等
主要内容:
设计一个密码锁的控制电路,第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,当输入正确代码时,输出开锁信号以推动执行机构工作。
基本要求:
1、设计一个密码锁的控制电路,当输入正确代码时,输出开锁信号以推动执行机构工作,用红灯亮、绿灯熄灭
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示关锁,用绿灯亮、红灯熄灭表示开锁;
2、在锁的控制电路中储存一个可以修改的4位代码,当开锁按钮开关(设置成8位,其中实际有效为4位,其余为虚设)的输入代码等于储存代码时,开锁;
3、从第一个按钮触动后的5秒内若未将锁打开,则电路自动复位并进入自锁状态,使之无法再打开,并由扬声器发出持续20秒的报警信号,并输出一个信号推动LED不断闪烁。
主要参考资料:
[1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.
[2] 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006.
[3] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.
完成期限 2010.3.11
指导教师
专业负责人
2
2010年 3月7日
一、 总体设计思想:
本课程设计主要是基于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
00 00 00 01 01 01 10 10 10 11 11 11 扫描位置CSR
【1…0】
4
0011 0101 0110 0011 0101 0110 0011 0101 0110 0011 0101 0110 键盘输出信号SEL
【3…0】
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<="1110" WHEN C_SR=0 ELSE
"1101" WHEN C_SR=1 ELSE
"1011" WHEN C_SR=2 ELSE
"0111" WHEN C_SR=3 ELSE
"1111";
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"11101"=>N<="0000";
WHEN"00011"=>N<="0001";
WHEN"00101"=>N<="0010";
WHEN"00110"=>N<="0011";
WHEN"01011"=>N<="0100";
WHEN"01101"=>N<="0101";
WHEN"01110"=>N<="0110";
WHEN"10011"=>N<="0111";
WHEN"10101"=>N<="1000";
WHEN"10110"=>N<="1001";
WHEN OTHERS=>N<="1111";
END CASE;
END IF;
IF C_QD'EVENT AND C_QD='1' THEN
CASE Z IS
WHEN"11011"=>F<="0100";
WHEN"11110"=>F<="0001";
WHEN OTHERS=>F<="1000";
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;
SEL~[5..3]Add0Equal2Q[5..0]A[5..0]1' h0 --PREA[2..0]SELB[5..0]DQ+B[2..0]6' h01 --=3' h1 --DATAAOUT0ENAKSEL[3..0]ADDER3' h7 --DATABCLK_1KEQUALCLRSEL~[2..1]CSR[1..0]Equal11' h0 --A[2..0]MUX21SELB[2..0]=3' h2 --DATAADATA_F[3..0]OUT0DATA_N[3..0]2' h3 --DATABEQUALEqual01' h0 --A[2..0]MUX21B[2..0]0=3' h3 --11EQUALSEL~0N[3..0]Equal31' h0 --PREA[2..0]DQFN~2B[2..0]=3' h0 --FLAG_NEQUALMux0ENACLRSEL[4..0]KEY_IN[2..0]OUT32' hDFF79797 --F[3..0]DATA[31..0]FF~0PREDQFLAG_FMUX1' h0 --Mux1
ENASEL[4..0]OUTCLR32' hDF9FFF97 --DATA[31..0]
MUXMux2
SEL[4..0]OUT32' hDF9FD7F7 --DATA[31..0]
MUXMux3
SEL[4..0]OUT32' hDFDFB7DF --DATA[31..0]
MUXMux4
SEL[4..0]OUT32' hB7FFFFFF --DATA[31..0]
MUXMux5
SEL[4..0]OUT32' h08000000 --DATA[31..0]
MUXMux6
SEL[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="0100") THEN
ACC<="1111111111111111";
MIMAIN<='0'; SETIN<='0'; OLD<='0';
ELSIF(DATA_F="0001") THEN
IF(MIMAIN='0' AND SETIN='0') THEN
CASE ACC(7 DOWNTO 0) IS
WHEN"00010001"=>ENLOCK<='1';
WHEN"10011001"=>MIMAIN<='1'; ACC<="1111111111111111";
WHEN"01010101"=>SETIN<='1'; ACC<="1111111111111111";
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<"1001100110011001") THEN
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]SELDATAAACC[15..0]LessThan0SELPREA[15..0]OUT0DATAADATA_N[3..0]DATABOUT0DQB[15..0]DATABACC~[15..0]ACC~[31..16]<16' h9999 --ACC_OUT0ACC~[47..32]SETIN~reg0ENA00000LESS_THANPRESELSELMUX21MUX21011CLR0SELREG~[47..32]REG~[63..48]DQ11SETINREG~[95..80]Equal2DATAADATAA00REG~[79..64]REG~[111..96]REG~[31..16]Mux17_OUTOUT0DATAA116' hFFFF --SETIN~1A[15..0]SETIN~3SETIN~reg0_OUT0DATABOUT0101SETIN~2SETIN~4Mux16_OUTSETIN~6DATABSELSELPREREG~[15..0]B[15..0]ENASETIN~5SETIN~7=SELSELMux15_OUTDQDATAADATAAENLOCK~reg0SELSELDATAAOUT0OUT0CLRDATAAREG[15..0]Mux14_OUTOUT0DATABDATAB000MUX21DATAAOUT0DATAASELPREDATABMUX21OUT0DATABOUT00EQUALMux8ENADQDATAA11DATABDATAB00OLD~reg0OUT01DATABCLR11PRESETIN~0ENLOCK~1MUX21MUX21ENLOCK~3DQENLOCK~2ENLOCK~4ENAMUX210MUX21SEL[7..0]MUX21MUX21MIMAIN~reg0OLD~reg0_OUT0Mux1CLR01MUX21OUT0PREOLD~4ENADATAB0DQ1' h1 --0OUTCLR01MIMAIN~reg0_OUT0DATA[255..0]SEL[7..0]01ENLOCK~00MIMAIN~2ENA1' h1 --00OUT1DATA[255..0]1' h1 --CLR1MIMAIN~1MIMAIN~0MUXENLOCKMUXMIMAINMux7Mux0SEL[7..0]MUX21SEL[7..0]1' h1 --OUTOUTDATA[255..0]DATA[255..0]1' h1 --1' h1 --MUXMUXMux6DATA_BCD[15..0]SEL[7..0]1' h1 --OUTDATA[255..0]1' h1 --MUXMux5SEL[7..0]1' h1 --OUTDATA[255..0]1' h1 --MUXMux4SEL[7..0]1' h1 --OUTDATA[255..0]1' h1 --MUXMux3SEL[7..0]1' h1 --OUTDATA[255..0]1' h1 --MUXMux2SEL[7..0]1' h1 --OUTDATA[255..0]1' h1 --MUXDATA_F[3..0]Equal1A[3..0]B[3..0]=Equal04' h1 --EQUALA[3..0]B[3..0]process_0~0_OUT0=4' h4 --OLD~1_OUT0EQUALMux19_OUT00OLD~211OLD~3Mux13_OUTOLDMux12_OUTMux11_OUTMux10_OUTMux9_OUTCQDMux18_OUTFLAG_F
密码锁译码模块
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"0000"=>DOUT7<="0111111";
WHEN"0001"=>DOUT7<="0000110";
11
WHEN"0010"=>DOUT7<="1011011";
WHEN"0011"=>DOUT7<="1001111";
WHEN"0100"=>DOUT7<="1100110";
WHEN"0101"=>DOUT7<="1101101";
WHEN"0110"=>DOUT7<="1111101";
WHEN"0111"=>DOUT7<="0000111";
WHEN"1000"=>DOUT7<="1111111";
WHEN"1001"=>DOUT7<="1101111";
WHEN OTHERS=>DOUT7<="0000000";
END CASE;
END PROCESS;
END ARCHITECTURE ONE;
12
process_0~0process_0~0_OUT0MIMAIN~reg0_OUT0SETIN~reg0_OUT00OLD~reg0_OUT0001OLD~1_OUT01OLD~0OLD~1Mux19SEL[7..0]OUTMux19_OUT1' h1 --DATA[255..0]
MUXMux18SEL[7..0]OUTMux18_OUT1' h1 --DATA[255..0]
MUXMux17SEL[7..0]1' h1 --OUTMux17_OUTDATA[255..0]1' h1 --
MUXMux16SEL[7..0]1' h1 --OUTMux16_OUTDATA[255..0]1' h1 --
MUXMux15SEL[7..0]1' h1 --OUTMux15_OUTDATA[255..0]1' h1 --
MUXMux14SEL[7..0]1' h1 --OUTMux14_OUTDATA[255..0]1' h1 --
MUXMux13SEL[7..0]1' h1 --OUTMux13_OUTDATA[255..0]1' h1 --
MUXMux12SEL[7..0]1' h1 --OUTMux12_OUTDATA[255..0]1' h1 --
MUXMux11SEL[7..0]
1' h1 --OUTMux11_OUTDATA[255..0]1' h1 --
MUXMux10SEL[7..0]
1' h1 --OUTMux10_OUTDATA[255..0]1' h1 --
MUXMux9
SEL[7..0]ACC_OUT0
1' h1 --OUTMux9_OUTDATA[255..0]1' h1 --
MUX
13
主要参考资料:
[1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.
[2] 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006.
[3] 阎石主编.数字电子技术基础. 北京:高教出版社,2003.
14
东北石油大学课程设计成绩评价表
课程名称 EDA技术课程设计
题目名称 电子密码锁
指导教 学生姓名 学号 职称 师姓名 序号 评价项目 指 标 满分 评分
按期圆满的完成了
规定
关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定
的任务,难易程度和工作
工作量、工作态
1 20 量符合教学要求,工作努力,遵守纪律,出勤率
度和出勤率
高,工作作风严谨,善于与他人合作。
课程设计选题合理,计算过程简练准确,分析问2 45 课程设计质量 题思路清晰,结构严谨,文理通顺,撰写规范,
图表完备正确。
工作中有创新意识,对前人工作有一些改进或有3 5 创新
一定应用价值。
4 30
答辩
答辩ppt下载中国建筑转正答辩ppt下载民事答辩状范文下载毕业答辩毕业答辩模板
能正确回答指导教师所提出的问题。
总分
评语:
指导教师: 2011年 3 月 11 日
15
16