湖南工程学院基于CPLD的数字锁报告书.docx
- 文档编号:12685251
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:17
- 大小:105.48KB
湖南工程学院基于CPLD的数字锁报告书.docx
《湖南工程学院基于CPLD的数字锁报告书.docx》由会员分享,可在线阅读,更多相关《湖南工程学院基于CPLD的数字锁报告书.docx(17页珍藏版)》请在冰豆网上搜索。
湖南工程学院基于CPLD的数字锁报告书
目录
一.设计总体思路1
1.1基本原理1
1.2总设计框图1
二.单元电路设计2
2.1消除抖动模块2
2.2键盘扫描模块4
2.3七段数码显示电路模块5
2.4译码电路模块5
2.5密码控制电路模块8
2.6总电路10
三.设计仿真10
四.编程下载14
五.总结与体会17
六.参考文献18
一、总体设计思路
1.1基本原理:
本次设计我把逻辑功能划分为两个大的模块:
控制部分和处理部分。
控制模块是整个系统的控制核心,负责接收其模块传来的输入信号,再根据系统的功能产生相应的控制信号送到相关的模块。
具体操作如下:
密码预先存入寄存器中,开锁时,输入密码存入另一寄存器中,当按下“确定”键时,启动比较器,比较两个寄存器中的内容,当结果相同时M=1,LT绿灯亮,并开锁;当结果不同时M=0,LF红灯亮,不开锁。
用户需要修改密码时,先开锁,再按“设定密码”,清除预先存入的密码,通过键盘输入新的2位十进制数,然后再按下确定键完成操作。
1.2总设计框图如下:
2、单元电路设计
2.1消除抖动模块
我们使用的按键通常都是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。
因而在闭合及断开的瞬间均伴随有一连串的抖动。
然而,抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。
这是一个很重要的时间参数,在很多场合都要用到。
在这里,我们用软件去除抖动。
当检测到键闭合时,执行一个延时程序产生数毫秒的延时,让前沿弹跳消失后再检测闭合;当发现键松开后,也给数毫秒的延时,当后沿弹跳消失后,再检测下一个键的输入。
或者当前沿弹跳消失后,将检测到的信号所存,然后再输出,这样就不需要后沿延时了。
消除抖动的电路封装图如下:
程序如下:
LIBRARYieee;
USEieee.std_logic_1164.ALL;
USEieee.std_logic_arith.ALL;
USEieee.std_logic_unsigned.ALL;
LIBRARYaltera;
USEaltera.maxplus2.ALL;
ENTITYxiaodouIS
PORT
(CLK,B_IN:
INSTD_LOGIC;
B_OUT:
OUTSTD_LOGIC);
END;
ARCHITECTUREaOFxiaodouIS
signalVcc,INV_B:
std_logic;
signalA0,A1:
std_logic;
signalB0,B1:
std_logic;
BEGIN
Vcc<='1';
INV_B<=notB_IN;
dff1:
dffPORTMAP(d=>Vcc,q=>A0,clk=>CLK,prn=>Vcc,clrn=>INV_B);
dff2:
dffPORTMAP(d=>Vcc,q=>A1,clk=>CLK,prn=>Vcc,clrn=>INV_B);
process(CLK)
begin
ifCLK'EVENTandCLK='1'then
B0<=notA1;
B1<=B0;
endif;
endprocess;
B_OUT<=not(B1andnotB0);
END;
2.2键盘扫描模块
我们在键盘的四列输入口中输入一个低电平时钟扫描,当有按键被打下时,对应的行被键接通也呈现低电平状态,然后将此输入输出信号输出到键盘编码就可以进行键盘按键识别了。
键盘扫描封装图如下:
该模块程序如下:
LIBRARYIEEE;
USEIEEE.std_logic_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSAOMIAOIS
PORT(
CLK:
INSTD_LOGIC;
CLK_SAOMIAO:
OUTSTD_LOGIC_VECTOR(4downto1));
END;
ARCHITECTUREaOFSAOMIAOIS
SignalM:
STD_LOGIC_VECTOR(2DOWNTO1);
SIGNALN:
STD_LOGIC_VECTOR(4DOWNTO1);
Begin
PROCESS(CLK)
Begin
IFCLK'EventANDCLK='1'THEN
N<=N+1;
M<=N(4DOWNTO3);
ENDIF;
ENDPROCESS;
CLK_SAOMIAO<="1110"WHENM=0ELSE
"1101"WHENM=1ELSE
"1011"WHENM=2ELSE
"0111"WHENM=3ELSE
"1111";
END;
2.3七段数码显示电路模块
本模块我们通过串行扫描方式驱动LED数码管,可较少地占用可编程器件资源;并利用MAXPLUSⅡ对动态扫描LED显示电路进行仿真。
显示电路模块封装图如下:
程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSCAN_LEDIS
PORT(A:
INSTD_LOGIC_VECTOR(6DOWNTO0);
B:
INSTD_LOGIC_VECTOR(6DOWNTO0);
CLK:
INSTD_LOGIC;
E:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
BT:
OUTSTD_LOGIC_VECTOR(1DOWNTO0));
END;
ARCHITECTUREONEOFSCAN_LEDIS
SIGNALN:
STD_LOGIC_VECTOR(1DOWNTO0);
BEGIN
PROCESS(N)
BEGIN
CASENIS
WHEN"00"=>BT<="01";E<=A;
WHEN"01"=>BT<="10";E<=B;
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
N<=N+1;
ENDIF;
ENDPROCESS;
END;
2.4译码电路模块
本模块上接键盘扫描模块,下接七段数码显示电路模块。
主要功能是实现键盘的译码。
该模块封装图如下:
具体程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYkeycodeIS
PORT(X:
INSTD_LOGIC_VECTOR(2DOWNTO0);
Y:
INSTD_LOGIC_VECTOR(3DOWNTO0);
XT:
INSTD_LOGIC;
C,D:
OUTSTD_LOGIC_VECTOR(6DOWNTO0):
="0111111";
CO:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDkeycode;
ARCHITECTUREyimaOFkeycodeIS
SIGNALE:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALF:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALS,EN,EN1:
STD_LOGIC;
BEGIN
PROCESS(X,Y)
VARIABLExy:
STD_LOGIC_VECTOR(6DOWNTO0);
BEGIN
xy:
=(X&Y);
IFXT='1'THEN
CASExyIS
WHEN"1101110"=>E<="0000";C(6downto0)<="0111111";
WHEN"1101101"=>E<="0001";C(6downto0)<="0000110";
WHEN"1101011"=>E<="0010";C(6downto0)<="1011011";
WHEN"1100111"=>E<="0011";C(6downto0)<="1001111";
WHEN"1011110"=>E<="0100";C(6downto0)<="1100110";
WHEN"1011101"=>E<="0101";C(6downto0)<="1101101";
WHEN"1011011"=>E<="0110";C(6downto0)<="1111100";
WHEN"1010111"=>E<="0111";C(6downto0)<="0000111";
WHEN"0111110"=>E<="1000";C(6downto0)<="1111111";
WHEN"0111101"=>E<="1001";C(6downto0)<="1100111";
WHEN"0111011"=>CO<="1010";
WHEN"0110111"=>CO<="1011";
WHENOTHERS=>E<="0000";C(6downto0)<="0111111";
ENDCASE;
ELSIFXT='0'THEN
CASExyIS
WHEN"1101110"=>F<="0000";D(6downto0)<="0111111";
WHEN"1101101"=>F<="0001";D(6downto0)<="0000110";
WHEN"1101011"=>F<="0010";D(6downto0)<="1011011";
WHEN"1100111"=>F<="0011";D(6downto0)<="1001111";
WHEN"1011110"=>F<="0100";D(6downto0)<="1100110";
WHEN"1011101"=>F<="0101";D(6downto0)<="1101101";
WHEN"1011011"=>F<="0110";D(6downto0)<="1111100";
WHEN"1010111"=>F<="0111";D(6downto0)<="0000111";
WHEN"0111110"=>F<="1000";D(6downto0)<="1111111";
WHEN"0111101"=>F<="1001";D(6downto0)<="1100111";
WHENOTHERS=>E<="0000";D(6downto0)<="0111111";
ENDCASE;
ENDIF;
ENDPROCESS;
END;
2.5密码控制电路模块
密码控制电路是本次课题设计的核心部分,我们通过密码控制来断定数字锁的开或关。
当密码输入时,按下确定键,输入数字和所存的密码进行比较,若相同则进入开锁状态。
若输入密码不正确则立刻进入报警状态,然后按下清零键,重新输入密码。
密码控制封装图如下:
具体程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYkongzhiIS
PORT(E_IN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
F_IN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
CO_IN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
K,M:
OUTSTD_LOGIC);
END;
ARCHITECTUREluojiOFkongzhiIS
SIGNALG,H:
STD_LOGIC_VECTOR(3DOWNTO0):
=‘0‘;
SIGNALS,EN,EN1:
STD_LOGIC;
SIGNALCOUNT1,COUNT2:
STD_LOGIC:
='0';
SIGNALCO:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(CO_IN)
begin
IFCO_IN="1011"THEN
EN1<='1';
ELSIFCO_IN="1010"THEN
EN<='0';EN1<='0';
ENDIF;
if(S='1')and(en='1')and(count1='0')then
G(3downto0)<=E_IN(3downto0);
H(3downto0)<=F_IN(3downto0);
count1<=not(count1);
endif;
if(en1='1')and(count2='0')then
if(E_IN(3downto0)=G(3downto0)andF_IN(3downto0)=H(3downto0))then
k<='1';EN<='1';s<='1';
else
k<='0';m<='1';
endif;
count2<=not(count2);
ELSif(en='0')and(en1='0')then
count1<='0';count2<='0';k<='0';s<='0';m<='0';
endif;
ENDPROCESS;
END;
2.6总电路图如下:
3、设计仿真
3.1消抖电路的仿真波形图:
3.2键盘扫描模块仿真图:
3.3七段数码显示电路仿真图:
3.4键盘译码电路仿真波形图:
4、编程下载
MAX+PLUSⅡ支持Altera公司的FLEX10K,FLEX10KA,FLEX8000,MAX9000,MAX7000,Classic等系列可编程逻辑器件。
4.1选择器件
应参照设计电路的规模,所需工作速度等诸多因素对器件进行选择。
这里以将上述电路下载到FLEX10K系列器件中的EPF10K10LC84为例进行说明。
(1)返回到编辑窗口
(2)在主菜单Assign中选择Device项,打开器件选择对话框
(3)单击DeviceFamily区的下拉列表,选择FLEX10K系列
(4)在Devices的下拉列表中选择EPF10K10LC84
(5)选择OK。
对话框关闭即完成器件选择
4.2管脚锁定
管脚锁定即是将所设计的原理图的输入、输出信号定义到实际器件某个具体的管脚,此项工
作可以由编译器自动分配,也可以由设计者根据设计要求进行人工分配。
若进行人工分配,具体
操作步骤如下:
(1)在原理图编辑窗中用鼠标右键单击输入或输出信号
(2)在出现的下拉菜单中选择Assign—Pin/Location/Chip,出现Pin/Location/Chip对话框
(3)在NodeName项中显示的应是待锁定管脚的输入或输出信号,在Pin项中键入想要锁
定的管脚号码
(4)选择OK,则管脚号即分配在所选的输入输出信号上
(5)重复上述步骤,将所有输入输出信号的管脚锁定好
总电路图如下:
(6)在主菜单中,选File—Save保存文件
(7)再次编译项目,通过项目编译后即可生成一个.sof文件,此文件用于下载
4.3器件编程/配置
此项工作即是完成将所设计的电路下载到实际器件中,使其具有所设计电路的功能。
在Altera器件中,一类为MAX系列,另一类为FLEX系列。
其中MAX系列为CPLD结构,
编程信息以EEPROM方式保存,故对这类器件的下载称为编程;FLEX系列有些类似于FPGA,其逻辑块LE及内部互连信息都是通过芯片内部的存储器单元阵列完成的,这些存储器单元阵列可由配置程序装入,存储器单元阵列采用SRAM方式,对这类器件的下载称为配置。
因为MAX系列编程信息以EEPROM方式保存,FLEX系列的配置信息采用SRAM方式保存,所以系统掉电后,MAX系列编程信息不会丢失,而FLEX系列的配置信息会丢失,需每次系统上电后重新配置。
使用的器件是EPF10K10LC84,为FLEX系列。
下面对其进行配置。
(1)将下载电缆一端插入LPT1(计算机的并行口,打印机口),另一端插入实验系统板,打
开实验系统的电源。
(2)在主菜单MAX+PLUSⅡ中选择Programmer,出现Programmer对话框。
。
(3)在出现的对话框中单击configure,即可完成配置。
注:
若在软件首次运行时,上述对话框可能皆为灰色,此时可从Options菜单下选择“HardwareSetup”对话框,在“HardwareType”下拉框中选择“ByteBlaster”,单击“OK”即可。
五、心得体会
为期两周的课程设计结束了,刚开始由于对嵌入式系统不熟悉,拿到这个课题时毫无头绪,根本不知道从何处入手,并且在设计过程中遇到了很多的问题,但在陈老师的指导和自己的努力下,终于逐个解决了每一个难题。
在这两周中的学习使我对EDA这门课程有了进一步的了解,使我加强了动手、思考和解决实际问题的能力。
并让我深刻的体会到,嵌入式系统的应用十分广泛,运行硬件描述语言,能很容易地设计出具有严格要求的数字锁。
在做完每一个单元模块后,都要验证它是否能够满足此单元的功能。
有时候就是按照了原理来连接,但就是不能实现预期的功能。
这就需要细心地找问题,是不是哪根线坏了,还是哪块芯片坏了或接触不好,但有时也存在原理上的错误。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
在设计过程中,同时也暴露出了自身的许多不足,如自己自主解决问题的能力有所欠缺,这在以后需要更好的加强。
同时在此设计过程中还用到了MAX+PLUSⅡ等软件,我更熟悉了此软件的使用,这对以后的工作和解决实际问题都有了很好的帮助。
我感觉本次课程设计我的收获还是颇多的!
六、参考文献
1.康华光主编.电子技术基础(数字部分),高等教育出版社。
2.阎石主编.电子技术基础(数字部分),清华大学出版社。
3.陈大钦主编,电子技术基础实验,高等教育出版社。
4.彭介华主编,电子技术课程设计指导,高等教育出版社。
5.张原编著,可编程逻辑器件设计及应用,机械工业出版社。
6.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社。
7.MAX+PLUSⅡ入门
8.刘洪喜,陆颖编著.VHDL电路设计实用教程清华大学出版社
电气与信息工程系课程设计评分表
项目
评价
设计方案的合理性与创造性
硬件制作或软件编程完成情况*
硬件制作测试或软件调试结果*
设计说明书质量
设计图纸质量
答辩汇报的条理性和独特见解
答辩中对所提问题的回答情况
完成任务情况
独立工作能力
组织纪律性(出勤率)
综合评分
指导教师签名:
________________
日期:
________________
注:
表中标*号项目是硬件制作或软件编程类课题必填内容;
此表装订在课程设计说明书的最后一页。
课程设计说明书装订顺序:
封面、任务书、目录、正文、评分表、附件(非16K大小的图纸及程序清单)。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 湖南 工程学院 基于 CPLD 数字 报告书