电子自动化EDA课程设计.docx
《电子自动化EDA课程设计.docx》由会员分享,可在线阅读,更多相关《电子自动化EDA课程设计.docx(14页珍藏版)》请在冰豆网上搜索。
![电子自动化EDA课程设计.docx](https://file1.bdocx.com/fileroot1/2023-1/27/22e19b29-4114-4d01-85a3-649d2071d259/22e19b29-4114-4d01-85a3-649d2071d2591.gif)
电子自动化EDA课程设计
能力拓展训练任务书
学生姓名:
专业班级:
指导教师:
工作单位:
自动化学院
题目:
电子密码锁设计
初始条件:
计算机、Max+plusⅡ、EDA实验箱。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
设计一个电子密码锁,在锁开的状态下输入密码,设置的密码共4位,用数据开关K1~K10分别代表数字1,2,…,9,0,输入的密码用数码管显示,最后输入的密码显示在最右边的数码管上,即每输入一位数,密码在数码管上的显示左移一位。
可删除输入的数字,删除的是最后输入的数字,每删除一位,密码在数码管的显示右移一位,并在左边空出的位上补充“0”。
用一位输出电平的状态代表锁的开闭状态。
提高部分:
为保证密码锁主人能打开密码锁,设置一个万能密码,在主人忘记密码时使用。
任务安排:
(1)设计任务及要求分析
(2)方案比较及认证说明
(3)系统原理阐述,写出设计方案结构图
(4)软件设计课题需要说明:
软件思想,流程图,源程序及程序注释
(5)调试记录及结果分析
(6)总结
(7)参考资料5篇以上
(8)附录:
程序清单
时间安排:
8月31日:
设计任务
9月1日:
收集资料,方案选择
9月2日:
程序设计
9月3日:
实验室内调试程序并演示
9月4日:
报告撰写
9月11日:
交设计报告
主要参考资料:
[1]谭会生,张昌凡.EDA技术及应用.西安:
西安电子科技大学出版社.2004
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
本次EDA能力拓展训练的开展,是为了将所学的知识更深入的扩展,提高自己的动手实践能力。
本次训练的内容是一个简单的电子密码锁,要求完成电子密码锁的基本功能设计,并得出仿真运行结果。
本次训练可以训练学生的电路设计能力,提高学生的硬件编程能力以及为学生打下良好的电子设计知识基础使得考研和找工作的同学在以后的工作学习中不至于太吃力。
另外,本次训练还锻炼学生严谨的学习态度,提高学生作为一个设计人员所应具有的素质,严谨认真的工作精神。
关键词:
密码锁译码按键输入仿真运行
目录
1设计内容1
2设计原理1
2.1按键输入环节2
2.2密码锁控制环节2
2.3译码显示环节3
2.4总电路设计4
3实验程序设计流程5
3.1按键输入环节程序5
3.2密码锁控制环节程序6
3.3译码显示环节程序10
4实验结果分析12
小结与体会14
参考文献15
电子密码锁程序设计
1设计内容
设计一个简单的数字电子密码锁,密码为4位。
用数据开关K1~K10分别代表数字1,2,3……9,0。
输入的密码用数码显示,最后输入的密码显示在右边,即每输入一位数,密码在数码管显示左移一位。
同时可删除输入的数字,删除的是最后输入的数字,每删除一位,密码在数码管的显示右移一位,并在左边空出的为上补充“0”。
用一位输出电平的状态代表所得开闭状态。
为保证密码的主人能打开密码锁,设置一个万能密码。
2设计原理
实验中采用VHDL语言编程。
通过文本编辑方式建立模块,通过原理图方式将生成的图形符号连接,然后再进行仿真。
本次设计中主要使用的VHDL语言中的常用语句,大致包括IF语句、IF-ELSE语句、IF-THEN语句、CASE-WHEN语句、进程语句等,基本语句格式分别如下。
IF条件表达式THEN
语句方块
ENDIF;
PROCESS(CLK)
BEGIN
IFCLK’eventANDCLK=’1’THEN
语句方块
ENDIF;
ENDPROCESS;
CASE选择信号XIS
WHEN信号值1=>
语句方块1
…
WHENOTHERS=>
语句方块N
ENDCASE
<进程名称>:
PROCESS<敏感信号表>
进程说明区:
说明用于该进程的常数,变量和子程序。
BEGIN
变量和信号赋值语句
顺序语句
ENDPROCESS<进程名称>;
为达到密码锁设计要求,完成密码锁的以上功能,可将电子密码锁分为以下几个模块进行设计。
2.1按键输入环节
密码锁的密码设置是通过10个对应按键完成的,故设置10个按键输入端口,分别对应10个按键用来录入密码。
每完成一个输入,将按键对应的编号转为数据量送给控制环节以供使用。
分配的按键1…9、0分别对应编号0000000000000001、0000000000000010…0000001000000000。
按键输入电路图如图1所示,其中N[9..0]为按键输入端口,SOUT[3..0]为输出端口。
按键输入编码由按键输入高低电平完成,每按一个键通过编码显示对应的数字。
图1按键输入环节
2.2密码锁控制环节
密码锁控制环节设计要求完成密码的设置、删除、修改,并进行加锁,故输入信号中设计设置信号SET、删除信号BACK、检验信号CHECK、关锁信号CLOSE;输出信号中设计16位数字输出端口、关锁控制信号LOCK。
设置初始超级密码为1234。
在此电路中每输一位数,密码在数码管上左移一位,每按下一次back,删除最后输入的数字,左边空处补0。
当四位密码输入完毕,按下set,设置的密码被存储。
其中关锁控制信号,lock=0表示锁未开,lock=1表示锁开,而按下关锁信号close,则锁关闭。
在lock=0下从数据开关输入四位开锁数字,按下check,若数据等于设置的密码或万能密码,则lock=1。
设计时需要注意的一点是,在重设密码时,一定要保证密码锁出于开的状况,即LOCK无效,否则密码设计即失去意义。
密码锁控制电路图如图2所示,其中set为密码设置端口,check为密码检验端口,close为关锁端口,back为删除密码端口,clk时钟输入端口,dn[3..]为数字输入端口,sout[15..0]为16位输出端口,lock密码锁状态显示端口。
图2密码锁控制环节
2.3译码显示环节
此环节的作用在于将控制环节输出的16位数字信号译码,转为1,2,3…9,0的显示方式并使之显示在LED管上,同时完成片选功能,每四个数据一组,显示在相应的数码屏上。
设计输入端口有16位数据接收总线端,CLK信号接收端;输出端口有7位LED管显示信号端及片选信号输出端。
译码显示电路图如图3所示。
图3译码环节
2.4总电路设计
完成以上3个环节的设计后,用相应端口、数据线、总线将之连接起来,得到密码锁设计总电路图如图4所示。
图4全电路设计图
3实验程序设计流程
此部分将各个环节程序设计流程及思路作大致说明如下。
3.1按键输入环节程序
图5输入环节流程图
此部分程序的设计较明确和简单,要留意的就是为输入的位置码留下足够的数据位。
输入环节程序流程图如图5所示。
libraryieee;--定义实体
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityshuruis
port(n:
instd_logic_vector(9downto0);--定义按键输入端口
sout:
outstd_logic_vector(3downto0));--定义编码输入端口
endshuru;
architectureruofshuruis--定义结构体
signaltemp:
std_logic_vector(3downto0);
begin
process(n)
begin
casenis--输入键编码
when"0000000001"=>temp<="0001";--位置码改为数字码
when"0000000010"=>temp<="0010";
when"0000000100"=>temp<="0011";
when"0000001000"=>temp<="0100";
when"0000010000"=>temp<="0101";
when"0000100000"=>temp<="0110";
when"0001000000"=>temp<="0111";
when"0010000000"=>temp<="1000";
when"0100000000"=>temp<="1001";
when"1000000000"=>temp<="0000";
whenothers=>temp<="1111";
endcase;
endprocess;
sout<=temp;
endru;
3.2密码锁控制环节程序
此部分的程序设计是整个设计的难点,关键是处理好各个功能按键间的逻辑关系,不至使它们之间产生冲突。
特别是用于鉴别锁关闭状态的LOCK信号,与CLOSE信号、SET信号及CHECK信号间的相互关系一定要留意,否则就会出现它们相互冲突导致死锁状态;还有就是在之前提及的逻辑上的合理性。
密码锁控制环节程序流程图如图6所示。
图6控制环节流程图
libraryieee;--定义实体useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitykongzhiis
port(set,check,close,back,clk:
instd_logic;
din:
instd_logic_vector(3downto0);
--set密码设置信号,check密码检验信号,close关锁信号back密码删除信号,clk时钟信号
sout:
outstd_logic_vector(15downto0);--定义16位输入信号
lock:
outstd_logic);--定义密码锁状态信号
endkongzhi;
architecturekongofkongzhiis--定义结构体
signalju:
std_logic;
begin
process(clk,din)--定义进程变量
variablelock_1:
std_logic;
variableabc:
std_logic_vector(15downto0);
variabletemp1,temp2,temp3,temp4:
std_logic_vector(3downto0);
begin
ju<=not(din(0)anddin
(1)anddin
(2)anddin(3));
--设置按键输入接收信号,只要有范围内输入,ju一概赋值1
ifclk'eventandclk='1'then
ifju='1'then--密码左移显示
temp4:
=temp3;
temp3:
=temp2;
temp2:
=temp1;
temp1:
=din;
endif;
ifcheck='1'then--密码校验(加上万能密码设置,默认为1234)
ifabc=temp4&temp3&temp2&temp1thenlock_1:
='1';
elseiftemp4="0001"andtemp3="0010"andtemp2="0011"andtemp1="0100"then
lock_1:
='1';--输入符合则LOCK置1
endif;
endif;
endif;
ifback='1'then--密码删除右移显示
temp1:
=temp2;
temp2:
=temp3;
temp3:
=temp4;
temp4:
="0000";
endif;
ifset='1'andlock_1='1'then--密码设置(加上上锁限制)
abc:
=temp4&temp3&temp2&temp1;
endif;
ifclose='1'then
lock_1:
='0';--密码锁的关闭
temp1:
="0000";
temp2:
="0000";
temp3:
="0000";
temp4:
="0000";
endif;
sout<=temp4&temp3&temp2&temp1;
lock<=lock_1;
endprocess;
endkong;
3.3译码显示环节程序
图7译码环节流程图
此部分的设计思路也较明确,片选确定后由供电信号向相应LED管供电,并将数字码译出即可。
译码显示环节程序流程图如图7所示。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityyimais--定义实体
port(din:
instd_logic_vector(15downto0);--16输入信号
clk:
instd_logic;--时钟信号
dian:
bufferstd_logic_vector(1downto0);--片选供电信号
led7:
outstd_logic_vector(6downto0);--七段数码管输入信号
sn:
outstd_logic_vector(2downto0));--数码管七段译码信号
endyima;
architectureyiofyimais--定义结构体
signaldb:
std_logic_vector(3downto0);
begin
process(clk,din)
begin
ifclk'eventandclk='1'then
dian<=dian+1;--数码管的片选计数
endif;
if(dian="00")then--片选为0,0~3位显示
db<=din(3downto0);
sn<="000";
elsif(dian="01")then--片选为1,4~7位显示
db<=din(7downto4);
sn<="001";
elsif(dian="10")then--片选为2,8~11位显示
db<=din(11downto8);
sn<="010";
elsif(dian="11")then--片选为3,12~15位显示
db<=din(15downto12);
sn<="011";
endif;
casedbis--数码管的译码
when"0000"=>led7<="0111111";--数字码转LED管信号
when"0001"=>led7<="0000110";
when"0010"=>led7<="1011011";
when"0011"=>led7<="1001111";
when"0100"=>led7<="1100110";
when"0101"=>led7<="1101101";
when"0110"=>led7<="1111101";
when"0111"=>led7<="0000111";
when"1000"=>led7<="1111111";
when"1001"=>led7<="1101111";
whenothers=>led7<="0000000";
endcase;
endprocess;
endyi;
4实验结果分析
在N[9..0]处的数据是十六进制数据表示的结果,其展开后的二进制数码中的‘1’对应着10个输入按键的位置。
如图所示,当SET信号与LOCK信号均为‘1’时,按键输入进行密码设置有效,接收4个值为密码。
当CLOSE信号为‘1’时,密码锁关闭,LOCK信号为‘0’。
此时接收的按键输入全作为检验信号。
当CHECK信号有效时,取最近的4个输入为有效信号进行比对,若对,LOCK信号置‘1’,密码锁开启。
仿真波形实现了以上功能。
仿真运行结果如图8所示。
图8仿真运行结果图
小结与体会
通过本次能力拓展训练,我更深入的了解了EDA这门电子设计技术,学会了很多课堂上没有涉及的知识,锻炼了我多方面的能力,以下是我本次设计的具体体会。
(1)、通过理论联系实际的真实设计,我更加深入的了解了电子设计自动化技术的基本工作原理,基本掌握了电路设计的基本方法。
(2)、通过本次设计的程序调试运行,我更加全面的了解了VHDL语言的基本工作原理,知道了硬件描述语言的程序编写结构,其对于语法要求更加自由化,对于硬件功能描述更加方便。
同时,通过本次程序的运行分析以及调试纠错,我复习了计算机语言的基本调试方法,强化了我的计算机编程能力。
(3)、通过对程序执行仿真结果分析,我大致了解了EDA设计的仿真方法,学会自己检查设计电路的正确性。
(4)、我还通过本次设计锻炼了我独立思考和动手解决实际问题的能力。
面对一个新问题,该如何去思考,如何去解决,这都是我所收获的。
参考文献
[1]孙晓明,EDA实验指导书.武汉理工大学
[2]卢杰,赖毅编著,VHDL与数字系统设计.科学出版社,2001
[3]潘松,王国栋编著,VHDL实用教程.电子科技大学出版社,2000
[4]侯伯亨,顾新编著,VHDL硬件描述语言与数字逻辑电路设计.西安电子科技大学出版社,1999
[5]李国丽,朱维勇编著,EDA与数字系统设计.机械工业出版社,2007
本科生课程设计成绩评定表
姓名
性别
专业、班级
课程设计题目:
课程设计答辩或质疑记录:
成绩评定依据:
最终评定成绩(以优、良、中、及格、不及格评定)
指导教师签字:
年月日