eda课程设计密码锁.docx
- 文档编号:8653239
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:18
- 大小:175.28KB
eda课程设计密码锁.docx
《eda课程设计密码锁.docx》由会员分享,可在线阅读,更多相关《eda课程设计密码锁.docx(18页珍藏版)》请在冰豆网上搜索。
eda课程设计密码锁
EDA设计报告
课程名称在系统编程技术
任课教师某某某
设计题目密码锁
班级06电子一班
姓名某某某
学号
日期2008年11月29日
目录
1.题目分析3
1.1要求分析3
1.2整体框图3
1.3技术指标和功能要求3
2.方案选择4
2.1密码锁的输入平台4
2.2核心模块4
2.3主控模块5
3.细化框图5
4.编写应用程序并进行仿真7
5.结论9
6.课程总结10
7.参考文献目录11
8.附录(原程序)11
8.1编码器11
8.2主控12
8.3选择器一14
8.4选择器二14
8.5计数器一15
8.6计数器二16
1.题目分析:
1.1要求分析:
在日常的生活和工作中,住宅与部门的安全防范、单位的文件档案、财务报表以及一些个人资料的保存多以加锁的办法来解决。
若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。
随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。
为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。
密码锁具有安全性高、成本低、功耗低、易操作等优点。
我的这个课程设计是采用先进的EDA(电子设计自动化)技术,利用QuartusⅡ6.0工作平台和VHDL(超高速集成电路硬件描述语言),设计了一种简易但实用的电子密码锁。
用CPLD芯片实现。
由于充分利用了CPLD芯片密度大、功耗低、可重复编程和具有嵌入式阵列块的结构特点,因而该密码锁体积小、功耗低、价格低、安全可靠、具有、维护和升级方便。
由于采用VHDL进行设计,用软件实现硬件电路,具有良好的可移植性,可随时在线更改逻辑设计及有关数,充分体现CPLD的优越性,具有一定的实用性。
1.2整体框图:
核心模块:
密码正确与否的判断,并将判断的结果返回给主控模块。
主控模块:
用来对密码锁的各部分功能进行扩展,如密码锁的开关报警等功能。
密码锁的输入平台:
一般上面会定义0~9这是个按钮。
1.3技术指标和功能要求:
(1)设计的总体要求:
用自顶向下的设计思路设计一个简易的数字密码锁,该锁应在收到3位与规定码相符的十进制数码时打开,使相应的指示灯点亮;若收到的代码与规定的不符或者开锁程序有误,表示错误的只是灯点亮。
由于我所设计的这个密码锁密码位数较少,所以必须给输密者严格的次数限制(两次),若两次之类没有输对则表示输密者不是该锁的使用者。
此时报警铃长响(只有锁的使用者才能关闭)。
(2)系统功能描述:
(2.1)系统接通电源后,首先按动START键后方投入运行。
运行时标志开门的指示灯和报警灯、铃皆不工作,系统处于安锁状态。
(2.2)开锁代码是3位十进制数,可以通过系统预先设定。
开锁时输入代码不足三位或超过三位均不能开锁。
(2.3)开锁程序由设计者确定,用户必须严格执行所规定的程序,方可开锁。
(2.4)开锁代码和程序正确,表示数字锁打开的指示灯亮。
(2.5)允许用户在开锁过程中有1次错误(输入代码错误或开锁程序错误),只要出错,表示错误的指示灯必定点亮。
如果有2次错误,则报警器——喇叭名叫,以示情况异常。
(3)操作的具体步骤:
Step1:
按启动键(start)启动开锁程序,此时系统内部分处于初始状态。
Step2:
依次键入十进制码。
Step3:
按开门键(open)准备开门。
若按上述程序执行且拨号正确,则开门并且绿灯亮;若密码输入错误或未按上述程序执行,则按动开门键(open)后报警灯亮-——红灯亮。
Step4:
开锁事务处理完毕后,应将门关上,按set键,使系统重新进入安锁状态。
Step5:
若第一次红灯亮时,应按下start键重新输入密码,输入完毕后再次按下open1键。
Step6:
若又输错了,则红灯亮并且报警器响。
(若在报警,按set或start均不起作用,应另用一内部的I_setup键才能使系统进入安锁状态)。
注:
若按错号码,可在按open1键之前按setup键重新使密码锁复位。
若还要开锁重新执行上面的步骤。
2.方案选择:
2.1密码锁的输入平台:
对一般的密码锁而言,一个正规的密码输入系统是该密码锁能够正常使用的有力保证。
对本文所设计的密码锁而言,密码输入按键上会定义0~9这十个键。
如果要保证在按上某个键的同时会有相应的信号输入,初步计划使用0~9的编码器来实现。
对编码器的要求有,按键不置锁即琴键(按下是有效,松手时复原)。
每输入一个数字时送给核心模块的是一个单位脉冲。
2.2核心模块:
核心模块的功能是对所输入的密码有一个识别的作用。
这是任何一个密码锁必须具备的功能。
因为器件对密码的识别分为两个部分,一是判断密码输入是否正确;二是判断密码的位数是否与系统内部所设置的一样。
如果想实现密码识别的第一个部分就需要一个数字比较器,对每输入的一个脉冲进行判别。
而对于第二个部分,则需要一个三进制的计数器(0~2)当输入的三个密码全部正确时,进位端口就会输出一个一。
(注:
这里所说的选择器与计数器都是自己用VHDL语言定义的,可能与实际存在的某些逻辑器件功能不太相同)
2.3主控模块:
主控模块用于对密码锁各种功能的扩展。
在本文的密码锁设置中,主控模块包括开门启动键(START),开门键(OPEN),复位键(SETUP),内部复位键(I_SETUP)。
除了这些手动按键外,还有两个时钟脉冲输入接口。
(CLK)时状态变化信号(后面会有说明),
(CLK512)是所接报警器声音的频率,当你选择多少频率的输入脉冲时,扬声器就会产生多大频率的声音效果。
由于主控模块中包括各种各样的状态和情况,而各种状态与状态之间又是因为按上某键触发而成的。
所以对于这个主控部分的设计,可初步定为使用状态机的设计思路。
一旦使用状态机的设计方法,就需要一个状态转换脉冲(“CLK”就是起着状态转换的作用)。
3.细化框图:
主控模块和密码输入平台可以直接用一个单一的vhdl语言描述器件来制作,主控模块是一自定义的状态机,输入平台是一个自定义的编码器。
核心模块又分为四个小模块:
两个计数器,两个选择器。
这四个器件均用vhdl自定义其功能。
选择器2
选择器1
计数器2
计数器1
核心模块
编码器
状态机
顶层文件:
(用逻辑图连接)
各个器件在逻辑原理图当中的符号和作用:
编码器(bmq):
s0~s9为十个信号输入端,为用户提供输入端平台。
主控器件(icontrol):
对密码锁有一个全局的控制,是对其功能的扩展。
选择器一(mbjq):
判定所输入的密码的正确性,它与计数器二(cnt3)搭配使用。
选择器二(yc):
用来消除编码器与选择器一直坚信号传递的延迟。
计数器一(cnt31):
用来确定所输入的正确密码的个数,当三个密码输入全部正确的时候,co端给主控返回1。
计数器二(cnt3):
当在输入端每输入一个数字的时候,计数加一并以此来改变选择器一对所输入的数字的选择。
总体来说,它是与两个选择器搭配来使用的。
注:
具体的源程序见文章最后的附录。
4.编写应用程序并进行仿真:
把编写好的各个程序再quartus6.0的环境下进行编译,并对各个模块的结果进行仿真看其是否是自己想要的器件。
当确定是自己需要的器件时,对该器件进行封装以便好被顶层文件调用。
当各个模块的器件完成编译仿真时,按照框图制作顶层文件。
为了看上去能够一目了然,本次设计的顶层文件采用逻辑图连接的方式进行制作(“细化框图”里已经给出)。
顶层文件制作完毕后,需要进行软件上的仿真,具体的方针结果如下:
(1)密码第一次输对的情况:
(密码是:
416)
(2)密码第一次输错的情况:
(3)密码第一次输错但第二次输对的情况:
(4)密码两次都输错的情况:
(5)密码两次都输错之后需要复位的情况:
5.结论:
在进行过仿真之后,需要对其在硬件上进行实现。
由于gw48(模式3)试验平台上按键的限制,并基于所给cpld的型号为EP1C3T144C8。
本次设计在硬件上的引脚接入方式为:
4—〉pin1
1—〉pin2
6—〉pin3clk—〉pin93(16hz)
2—〉pin4clk—〉pin16(1mhz)
Setup—〉pin5red—〉pin11
I_setup—〉pin6gree—〉pin32
Start—〉pin7kaimen—〉pin33
Open1—〉pin10jbao—〉pin129
硬件测试过程:
(1)按start后直接输入416,并按open1键。
绿灯亮,开门亮。
(2)按start后输入412,并按open1键。
红灯亮。
(3)按start后输入412,并按open1键。
红灯亮。
在按下start键,红灯灭。
再输入416并按open1键,绿灯亮,开门亮。
(4)按start后输入412,并按open1键。
红灯亮。
在按下start键,红灯灭。
再输入614并按open1键,红灯亮,警报响1mhz的声音。
(5)在(4)的情况下按其它键均没有效果,只有按i_setup键才会使警报解除。
(6)无意输错一个号码,在按下open1前,按setup键,并执行
(1)过程。
绿灯亮,开门亮。
密码锁的大体总结:
就通过软件仿真和硬件测试的结果来看,完全符合了设计前的想法。
因此该密码锁的设计也就算基本完成了。
但就市场需求而言,该密码锁的设计还是缺乏某些面向客户的功能。
在我看来,他的主要缺陷有以下几点:
(1)没有外观的密码设置功能。
对于该锁的设计,密码设置是在程序里面,而对使用的客户而言修改锁内的程序是不太可能的。
(2)密码较短。
如果密码较短的话,会增加按中密码的概率,这样一来会对锁的安全性造成一定的影响。
(3)显示功能。
如果没有显示功能的话,会导致用户在设置密码时存在一定的盲目性。
6.课程总结:
经过了六周的理论课讲解和七周的实验课实践,eda这门课程于本周结束了。
纵观这门课程它的主要目的是通过本课程的学习,使我们了解EDA技术的发展概况;能正确运用quartus6.0软件绘制电原理图;能借助于quartus6.0软件对电子电路进行模拟仿真;使我们具备能够看懂简单数字系统的能力以及培养我们自学能力、分析问题能力和解决问题能力。
对我而言让我受益最大的无非是对vhdl语言有了一个大致的了解,结合上个学年的数电课程,我才发现数字电路的奥妙所在。
VHDL是一种用形式化方法描述数字电路和系统的硬件描述语言。
利用VHDL,可以完成数字电路系统的描述、仿真验证。
总体来说VHDL具有以下的几个特点:
(1)VHDL具有更强的行为描述能力;
(2)VHDL丰富的仿真语句和库函数,使得在设计的早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟;
(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能;
(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表
(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
当然,对于这门课程的学习我也有很多的不足之处。
这主要都集中于前面六周的理论课程。
现在我会做的只是对vhdl语言的简单应用,而有关cpld/fpga的有关结构和基本构造则不是十分的了解。
除此之外,数字电路的有关知识的缺乏在这门课程的学习中体现得比较明显。
这些不足之处我只有在这门课结束之后进行单方面的自补,这样做也是为我们的后续专业课做好准备。
7.参考文献目录:
《EDA技术实用教程》潘松黄继业编著
《VHDL与数字电路设计》卢毅编著
《数字电路与逻辑设计基础》曹汉方编著
8.附录(原程序):
8.1编码器:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitybmqis
port(en,s0,s1,s2,s3,s4,s5,s6,s7,s8,s9:
instd_logic;
sor:
outstd_logic;
d0:
outstd_logic_vector(3downto0));
end;
architecturebmqxofbmqis
signald:
std_logic_vector(3downto0);
begin
process(en,s0,s1,s2,s3,s4,s5,s6,s7,s8,s9)
begin
ifen='1'then
ifs0='1'then
d<="0000";sor<='1';
elsifs1='1'then
d<="0001";sor<='1';
elsifs2='1'then
d<="0010";sor<='1';
elsifs3='1'then
d<="0011";sor<='1';
elsifs4='1'then
d<="0100";sor<='1';
elsifs5='1'then
d<="0101";sor<='1';
elsifs6='1'then
d<="0110";sor<='1';
elsifs7='1'then
d<="0111";sor<='1';
elsifs8='1'then
d<="1000";sor<='1';
elsifs9='1'then
d<="1001";sor<='1';
elsed<="0000";sor<='0';
endif;
endif;
endprocess;
d0<=d;
endbmqx;
8.2主控:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityicontrolis
port(i_setup,setup,start,open1,result,clk512,clk:
instd_logic;
en,gree,red,jbao,kaimen:
outstd_logic);
endicontrol;
architecturemmtrol1oficontrolis
typestatsis(s0,s1,s2,s3,s4,s5,s6);
signalcurrent_state,next_state:
stats;
begin
reg:
process(clk)
begin
if(clk'eventandclk='1')then
current_state<=next_state;
endif;
endprocessreg;
com:
process(current_state,result,open1,setup,start,i_setup)
begin
casecurrent_stateis
whens0=>en<='0';gree<='0';red<='0';jbao<='0';kaimen<='0';
ifstart='1'thennext_state<=s1;
elsenext_state<=s0;
endif;
whens1=>en<='1';gree<='0';red<='0';jbao<='0';kaimen<='0';
ifsetup='1'thennext_state<=s0;
elsifresult='1'thennext_state<=s2;
elsifopen1='1'thennext_state<=s4;
elsenext_state<=s1;
endif;
whens2=>en<='1';gree<='0';red<='0';jbao<='0';kaimen<='0';
ifsetup='1'thennext_state<=s0;
elsifopen1='1'thennext_state<=s3;
elsenext_state<=s2;
endif;
whens3=>en<='1';gree<='1';red<='0';jbao<='0';kaimen<='1';
ifsetup='1'thennext_state<=s0;
elsenext_state<=s3;
endif;
whens4=>en<='0';gree<='0';red<='1';jbao<='0';kaimen<='0';
ifstart='1'thennext_state<=s6;
elsenext_state<=s4;
endif;
whens6=>en<='1';gree<='0';red<='0';jbao<='0';kaimen<='0';
ifresult='1'thennext_state<=s2;
elsifresult='0'andopen1='1'thennext_state<=s5;
elsenext_state<=s6;
endif;
whens5=>en<='1';gree<='0';red<='1';kaimen<='0';
jbao<=clk512;
ifi_setup='1'thennext_state<=s0;
elsenext_state<=s5;
endif;
endcase;
endprocesscom;
endmmtrol1;
8.3选择器一:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitymbjqis
port(d:
instd_logic_vector(3downto0);
sel:
instd_logic_vector(1downto0);
result:
outstd_logic);
endmbjq;
architecturebehavofmbjqis
begin
process(sel)
begin
if(sel="01"andd="0100")then
result<='1';
elsif(sel="10"andd="0001")then
result<='1';
elsif(sel="11"andd="0110")then
result<='1';
else
result<='0';
endif;
endprocess;
endbehav;
8.4选择器二:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityycis
port(d0:
instd_logic_vector(3downto0);
sel:
instd_logic_vector(1downto0);
result:
outstd_logic_vector(3downto0));
endyc;
architecturebehavofycis
begin
process(sel)
begin
if(sel="01"andd0="0100")thenresult<=d0;
elsif(sel="10"andd0="0001")thenresult<=d0;
elsif(sel="11"andd0="0110")thenresult<=d0;
elseresult<="0000";
endif;
endprocess;
endbehav;
8.5计数器一:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycnt31is
port(clk,en:
instd_logic;
co:
outstd_logic;
q:
bufferstd_logic_vector(1downto0));
endcnt31;
architecturebehavofcnt31is
begin
process(en,clk)
begin
if(en='0')then
q<="00";co<='0';
elsif(clk'eventandclk='1')then
ifq="10"thenq<="00";co<='1';
ELSE
q<=q+1;co<='0';
endif;
endif;
endprocess;
endbehav;
8.6计数器二:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycnt3is
port(clk,en:
instd_logic;
q:
bufferstd_logic_vector(1downto0));
endcnt3;
architecturebehavofcnt3is
begin
process(en,clk)
begin
if(clk'eventandclk='1')then
if(en='1')then
ifq="11"thenq<="01";
ELSE
q<=q+1;
endif;
endif;
endif;
endprocess;
endbehav;
注:
将各个模块连接起来的顶层文件在“细化框图”中已给出。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- eda 课程设计 密码锁
![提示](https://static.bdocx.com/images/bang_tan.gif)