可编程器件及数字系统设计实习报告.docx

上传人:b****6 文档编号:16677876 上传时间:2023-07-16 格式:DOCX 页数:12 大小:76.88KB
下载 相关 举报
可编程器件及数字系统设计实习报告.docx_第1页
第1页 / 共12页
可编程器件及数字系统设计实习报告.docx_第2页
第2页 / 共12页
可编程器件及数字系统设计实习报告.docx_第3页
第3页 / 共12页
可编程器件及数字系统设计实习报告.docx_第4页
第4页 / 共12页
可编程器件及数字系统设计实习报告.docx_第5页
第5页 / 共12页
可编程器件及数字系统设计实习报告.docx_第6页
第6页 / 共12页
可编程器件及数字系统设计实习报告.docx_第7页
第7页 / 共12页
可编程器件及数字系统设计实习报告.docx_第8页
第8页 / 共12页
可编程器件及数字系统设计实习报告.docx_第9页
第9页 / 共12页
可编程器件及数字系统设计实习报告.docx_第10页
第10页 / 共12页
可编程器件及数字系统设计实习报告.docx_第11页
第11页 / 共12页
可编程器件及数字系统设计实习报告.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

可编程器件及数字系统设计实习报告.docx

《可编程器件及数字系统设计实习报告.docx》由会员分享,可在线阅读,更多相关《可编程器件及数字系统设计实习报告.docx(12页珍藏版)》请在冰点文库上搜索。

可编程器件及数字系统设计实习报告.docx

可编程器件及数字系统设计实习报告

可编程器件及数字系统设计

基于VHDL的数字密码锁设计

 

学号:

65120437姓名:

孙喆

日期:

2013-9-5

目录

一、设计目的与任务3

1、设计目的3

2、设计任务:

 设计一个6位串行数字锁。

3

二、设计方案3

三、设计实现5

1、密码锁的显示模块5

2、密码锁控制模块5

2.1输入密码5

2.2修改密码6

四、实验结果及分析6

五、实习总结6

六、附录(程序或电路图)7

 

一、设计目的与任务

1、设计目的

.学习层次化设计方法。

.初步学会分析设计较为复杂的的数字逻辑。

2、设计任务:

 设计一个6位串行数字锁。

 

(1)开锁代码为6位二进制,当输入代码的位数与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮绿色的指示灯。

否则进入“错误”状态,并点亮红色指示灯。

 

(2)锁内的密码可调,当开锁后方可修改密码。

修改功能为:

 输入旧密码,在输入新密码确认。

二、设计方案

电子密码锁,主要由三部分组成:

密码输入电路、密码锁控制电路和密码锁显示电路。

作为电子密码锁的输入电路,可选用的方案有拨码与按键来控制输入和触摸式键盘输入等多种。

拨码与按键和触摸式2*4键盘相比简单方便而且成本低,构成的电路简单,本设计中采用拨码与按键来作为该设计的输入设备。

数字电子密码锁的显示信息电路可采用LED数码显示管和液晶屏显示两种。

液晶显示具有高速显示、可靠性高、易于扩展和升级的特点,但是普通的液晶存在亮度低、对复杂环境适应能力差的特点,但是在本设计中任意使用LED数码管。

根据以上选定的输入设备与与显示器件,并考虑到现实各项密码锁功能的具体要求,与系统的设计要求,系统设计采用自顶向下的设计方案。

整个密码锁系统的总体总体框图如图1.1所示。

输入模块

寄存器与清零信号发生电路

数值比较器

LED灯

扫描电路

六选一选择器

开/关锁电路

控制模块

 

显示模块

图1.1电子密码锁系统总体框图

三、设计实现

1、密码锁的显示模块

七段数码管是电子开发过程中常用的输出显示设备。

在本设计中使用的是8个四位一体、共阳极型七段数码管。

 

由于七段数码管公共端连接到GND(共阴极型),当数码管的中的一个段被输入高电平,则相应的这一段被点亮。

反之则不亮。

共阳极性的数码管与之相反。

四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。

八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。

 

 2、密码锁控制模块 

该模块的作用是将输入的密码(暂时寄存于 ACC中)跟已经存储的密码(REG中的密码信息)进行对比,如果一样,则密码锁开锁。

而在通过密码验证后可以按按键设定密码。

在这里值得注意的是有一个密码“000000”为开始密码,如果改名密码了但是又忘记了密码,重新下载之后的初始密码只要输入的密码为“000000”则都可通过密码锁。

“当输入代码的位数和位值与锁内给定的密码一致 ,且按规定程序开锁时 ,方可开锁 ,并点亮开锁指示灯(緑灯)亮。

否则 ,系统进入 “错误”状态 ,并发出报警信号。

串行数字锁的报警方式是点亮指示灯(红灯)。

该6位串行电子密码锁设置6位二进制密码 ,要求锁内给定的密码是可调的 ,且设置方便 ,保密性好。

其具体操作分为输入密码和修改密码两部分。

2.1输入密码 

密码输入值的比较主要有两部分 ,密码位数和内容 ,任何一个条件不满足 都不能打开锁。

若锁内密码为 “000000” , key2和key1置低电平 ,分别表示输入 “1” 和 “0” 。

输入密码时按着从密码最低位到最高位的顺序依次正确输入000000,会在数码管逐一显示。

经检验 ,输入的密码等于锁内预先设置的密码密码锁开启信号,锁开启。

同时,密码修改控制信号ctrl置低电平。

若在输入密码的过程中 ,6位二进制密码出现输入错误 ,那么锁不能开启 ,同时 ,指示灯红灯亮 。

 

2.2修改密码 

为防止任意进行密码修改 ,必须在正确输入密码后 ,才能重新设置密码。

输入正确密码后 ,锁打开 ,同时 ,密码修改控制信号按键ctrl置低电平 ,就可直接进行修改密码的操作。

修改密码实质就是用输入的新密码去取代原来的旧密码,按确定按键ok存储新密码。

四、实验结果及分析

这次密码锁的设计过程表明,用VHDL可以快速、灵活地设计出符合要求的密码锁控制器,而且操作简单。

可以实现密码输入、密码校验、密码设置和更改等功能。

设计过程能够在设计完成后在QuartusⅡ环境下进行电路的模拟仿真,反馈结果可以验证程序设计的可行性与可靠性。

 

本密码锁控制器设置的是6位密码,在系统复位后,输入一个完整的密码串,输入完后,系统会进行比对,如果发现密码吻合,则开门,否则要求用户继续输入,如果输入的密码串都是错误的,则系统报警,直到输入正确的密码,报警停止。

这样的设计可以很好的满足人们的日常需求。

同时,密码锁还具有密码修改功能,方便操作,使得密码锁的使用更加安全、便捷。

五、实习总结

 历时四周的可编程逻辑器件及数字系统设计终于结束。

实习过程中,无论在电路板焊接、软硬件设计还是仿真过程中我都遇到不少问题。

其中经常遇到的问题就是VHDL编程问题,有时候经过几天呕心沥血编出来的程序依然会出现各种各样的阻碍,无论如何修改编译都无法通过,搞得自己连续几天都特别失落。

当然如果修改成功还是会特别的高兴。

可以说,四周的实习是苦远远大于甜。

其实归根结底都是我对VHDL语言的掌握不够扎实,才导致每次编译都不能顺利通过。

以后我会在这方面多花一些时间。

在这段时间里我所获得的成功除了自己思考设计取得之外,与同学的同心协力的合作与讨论是分不开的。

相互的探讨使得我们的思路更加开阔,解决问题的办法也更多。

总之,此次实习让我收益良多,同时因为有了实践操作,对《数字电路与逻辑设计》课程所学内容也有了更深的记忆和理解,对EDA技术能够更好的掌握和应用,也让我及时发现了自身的不足。

从中懂得了理论知识与实践有机结合的重要性,谢谢学院为我们提供这样珍贵的实习机会!

六、附录(程序或电路图)

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entitymimais

port(clk,clr,sure,ctrl:

instd_logic;

fmq:

outstd_logic;

green,red:

bufferstd_logic;

seg:

outstd_logic_vector(6downto0);

com:

outstd_logic_vector(5downto0);

keyl:

instd_logic_vector(3downto0);

keyh:

bufferstd_logic_vector(1downto0));

endmima;

architectureasofmimais

typestateis(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11);

signals:

state;

signaln:

std_logic_vector(3downto0);

signalclk1:

std_logic;

signalq:

integerrange0to1;

signalq1:

integerrange0to5;

signalq2:

integerrange0to20480;

signalw0,w1,w2,w3,w4,w5,z0,z1,z2,z3,z4,z5,b,c:

std_logic_vector(5downto0);

begin

b<=keyh&keyl;

process(clk)

begin

if(clk'eventandclk='1')then

q1<=q1+1;

ifq2<20480then

q2<=q2+1;else

q2<=0;

endif;

endif;

endprocess;

clk1<='1'whenq2=0else

'0';

process(clk1)

begin

ifclk1'eventandclk1='1'then

casesis

whens0=>if(m<"1111")thens<=s1;elses<=s0;endif;

whens1=>if(m<"1111")thens<=s2;elses<=s0;endif;

whens2=>if(m<"1111")thens<=s3;elses<=s0;endif;

whens3=>if(m<"1111")thens<=s4;elses<=s0;endif;

whens4=>if(m<"1111")thens<=s5;elses<=s0;endif;

whens5=>if(m<"1111")thens<=s6;elses<=s0;endif;

whens6=>if(m<"1111")thens<=s7;elses<=s0;endif;

whens7=>if(m<"1111")thens<=s8;elses<=s0;endif;

whens8=>if(m<"1111")thens<=s9;elses<=s0;endif;

whens9=>if(m<"1111")thens<=s10;elses<=s0;endif;

whens10=>if(m<"1111")thens<=s11;elses<=s0;endif;

whens11=>if(m<"1111")thens<=s11;elses<=s0;endif;

whenothers=>s<=s0;

endcase;

endif;

endprocess;

n<=mwhens=s11else

"1111";

process(clk)

begin

ifclk'eventandclk='1'then

ifkeyl<"1111"then

q<=q;else

q<=q+1;

endif;

endif;

endprocess;

keyh<="01"whenq=0else

"10";

process(clk1)

begin

ifclk1'eventandclk1='1'then

ifclr='1'then

if(s=s10andb="010111")or(s=s10andb="011011")or(s=s10andb="011101")

or(s=s10andb="011110")or(s=s10andb="100111")or(s=s10andb="101011")

or(s=s10andb="101101")or(s=s10andb="101110")then

ifctrl='1'then

w0<=b;w1<=w0;w2<=w1;w3<=w2;w4<=w3;w5<=w4;

elsifctrl='0'then

z0<=b;z1<=z0;z2<=z1;z3<=z2;z4<=z3;z5<=z4;

endif;

endif;

else

z0<="000000";z1<="000000";z2<="000000";z3<="000000";z4<="000000";z5<="000000";

endif;

endif;

endprocess;

withq1select

com<="100000"when0,

"010000"when1,

"001000"when2,

"000100"when3,

"000010"when4,

"000001"when5,

"000000"whenothers;

c<=w0whenq1=5andctrl='1'else

w1whenq1=4andctrl='1'else

w2whenq1=3andctrl='1'else

w3whenq1=2andctrl='1'else

w4whenq1=1andctrl='1'else

w5whenq1=0andctrl='1'else

z0whenq1=5andctrl='0'else

z1whenq1=4andctrl='0'else

z2whenq1=3andctrl='0'else

z3whenq1=2andctrl='0'else

z4whenq1=1andctrl='0'else

z5whenq1=0andctrl='0'else

c;

seg<="1111001"whenc="010111"else

"0100100"whenc="011011"else

"0110000"whenc="011101"else

"0011001"whenc="011110"else

"0010010"whenc="100111"else

"0000010"whenc="101011"else

"1111000"whenc="101101"else

"0000000"whenc="101110"else

"1000000";

green<='1'when(z0=w0andz1=w1andz2=w2andz3=w3andz4=w4and

z5=w5andctrl='0'andsure='0')else

'0';

red<='1'whengreen='0'andsure='0'else

'0';

fmq<='1'whengreen='0'andsure='0'else

'0';

endas;

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2