基于CPLD的数字锁.docx

上传人:b****2 文档编号:2310289 上传时间:2022-10-28 格式:DOCX 页数:13 大小:535.12KB
下载 相关 举报
基于CPLD的数字锁.docx_第1页
第1页 / 共13页
基于CPLD的数字锁.docx_第2页
第2页 / 共13页
基于CPLD的数字锁.docx_第3页
第3页 / 共13页
基于CPLD的数字锁.docx_第4页
第4页 / 共13页
基于CPLD的数字锁.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

基于CPLD的数字锁.docx

《基于CPLD的数字锁.docx》由会员分享,可在线阅读,更多相关《基于CPLD的数字锁.docx(13页珍藏版)》请在冰豆网上搜索。

基于CPLD的数字锁.docx

基于CPLD的数字锁

 

第1章系统概述

1.1总体思路

本次课程设计主要是设计一个电子数字锁。

思路如下:

(1)数字锁通过键入(电平)输入密码(两位十进制)。

(2)数字锁分上锁和解锁两个状态。

(3)可以通过程序预置密码。

(4)密码可以显示出来。

(5)解锁成功、失败都有信号显示。

1.2设计内容及设计要求

1.2.1设计内容

本次课程设计是使用EDA实验箱,基于EP1C3T144C8N芯片的设计方案。

具体功能及其硬件如下:

(1)通过七位电平开关输入密码。

(如1101110表示十进制数0)

(2)通过一位电平开关控制数码管的位码(分为0的时输入第一位数码管的值;1时输入第二位数码管的值)。

(3)通过一位电平开关控制上锁和开锁两个状态(分别为1和0)。

(4)通过两位数码管显示输入的密码。

(5)通过两个LED灯显示开锁成功和失败两种情况(LED1和LED2分别为10时成功,01时失败)。

1.2.2设计要求

(1)设计思路清晰,给出整体设计框图;

(2)设计各单元电路,完成其功能仿真和编译并生成低层模块;

(3)完成顶层设计并编译通过;

(4)完成设计下载并调试电路;

(5)写出设计报告;

第2章总体设计方案

2.1设计流程图

图2.1流程图

2.2设计程序原理图

 

图2.2程序原理图

第3章子模块程序设计

3.1译码模块

图3.1译码模块

3.1.1程序解析

本模块主要是对输入的信号进行编码以及译码,由输入信号X(三位),Y(四位)组成一个七位的间接码,比如X输入110,Y输入1110组成1101110一个七位码并且转换为四位的间接码0000,通过输入信号XT来控制译码显示哪一位数码管。

具体程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYkeycodeIS

PORT(X:

INSTD_LOGIC_VECTOR(2DOWNTO0);输入变量1

Y:

INSTD_LOGIC_VECTOR(3DOWNTO0);输入变量2

XT:

INSTD_LOGIC;控制位选变量

C,D:

OUTSTD_LOGIC_VECTOR(6DOWNTO0):

="0111111";输出译码变量

e,f,CO:

OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDkeycode;输出间接码

ARCHITECTUREyimaOFkeycodeIS

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";--0

WHEN"1101101"=>E<="0001";C(6downto0)<="0000110";--1

WHEN"1101011"=>E<="0010";C(6downto0)<="1011011";--2

WHEN"1100111"=>E<="0011";C(6downto0)<="1001111";--3

WHEN"1011110"=>E<="0100";C(6downto0)<="1100110";--4

WHEN"1011101"=>E<="0101";C(6downto0)<="1101101";--5

WHEN"1011011"=>E<="0110";C(6downto0)<="1111100";--6

WHEN"1010111"=>E<="0111";C(6downto0)<="0000111";--7

WHEN"0111110"=>E<="1000";C(6downto0)<="1111111";--8

WHEN"0111101"=>E<="1001";C(6downto0)<="1100111";--9

--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;

3.1.2仿真解析

图3.2译码模块仿真图

如上图所示输入信号X为011,Y为1101输入0111101也就是间接值为1001(十进制数9),XT为1时输到第一个数码管E,当XT为0,并且X为101,Y为1110组成1011110也就是输入间接值0100(十进制数4)到第二位数码管上(F为4)。

3.2显示模块

图3.3显示模块元件图

3.2.1程序解析

本模块是将译码模块译码好的段码信号输入到数码管中,并且通过BT控制位码显示在两个数码管中的一个上。

具体程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYSCAN_LEDIS

PORT(A:

INSTD_LOGIC_VECTOR(6DOWNTO0);输入信号A

B:

INSTD_LOGIC_VECTOR(6DOWNTO0);输入信号B

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;

3.2.2仿真解析

图3.4显示模块仿真图

如上图所示输入信号A为1111111(十进制数8的段码),B为1100111(十进制数9的段码),当E为01时输出E=A,当E=10时输出E=B。

3.3控制模块

图3.5控制模块元件图

3.3.1程序解析

本模块作为密码控制程序,由译码模块输入的间接值E,F,通过输入状态控制信号co=1来控制上锁(E和F存入寄存器G和H中),co=0来控制开锁(判断输入的E,F是否分别等于寄存器存好的G和H),如果开锁成功LED1亮,LED2灭;如果开锁失败LED1和LED2都亮。

具体程序如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitytaxiis

port(e,f:

INSTD_LOGIC_vector(3downto0);输入的密码

co:

INSTD_LOGIC;状态开关(上锁、解锁)

led1,LED2:

OUTSTD_LOGIC结果显示(成功、失败)

);

endentitytaxi;

architectureoneoftaxiis

signalG,H:

STD_LOGIC_vector(3downto0);

begin

PROCESS(e,f,co)

begin

ifco='1'then–上锁

g<=e;

h<=f;

led1<='0';led2<='0';

else--解锁

ifg=eandh=fthenled1<='1';led2<='0';

elseled1<='0';led2<='1';

endif;

endif;

endprocess;

endarchitecture;

3.3.2仿真解析

图3.6控制模块仿真图

如图所示当控制信号co=1时(上锁),E=5和F=5将存入锁存器中(即密码),当控制信号co=0时(解锁),输入信号E=0,F=5并不是密码,所以LED1和LED2都为1,当输入信号为(E=5,F=5)时,密码正确,LED1为1,LED2为0。

第4章调试与结果

1、打开quartus2软件,找到工程文件,并打开vhd程序文件,选定cyclone中EP1C3T144C8芯片,在assignments下拉框中选中pins,按规定选好管脚。

2、打开实验箱,按管脚图接好线。

将实验箱连接到电脑上,打开实验箱电源。

3、在quartus2中选定tools下拉框中的Programmer项,进入程序下载界面,点击Start按钮运行sof文件。

看到右上方的Progress到达100%时运行完毕。

图4.1实物图

如上图所示,在右下角电平开关中输入密码,状态开关为解锁状态,输入的密码为21,但是并不是密码,所以数码管上面的两个LED灯都亮了。

总结

通过本次课程设计,我深刻的了解到自己的不足。

EDA这门课程是上学期学的,因为课程比较紧,当时在VHDL语言上下的功夫很少,就造成了我这次课程设计的囧态。

刚开始拿到课题,看到课题的设计内容和要求,感觉不是很难,但是一开始做就遇到问题—程序的编写,那时候学的时候根本就是模仿的编写的,现在要自己动手编,感觉无从下手,语言规则什么的都不是很明确,就是照着书上编一段小的模块,那错就是十几个,排错误没有经验也只能请教高手和网络了,慢慢的一步

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1