1、基于CPLD的数字锁第1章 系统概述1.1总体思路本次课程设计主要是设计一个电子数字锁。思路如下:(1)数字锁通过键入(电平)输入密码(两位十进制)。(2)数字锁分上锁和解锁两个状态。(3)可以通过程序预置密码。(4)密码可以显示出来。(5)解锁成功、失败都有信号显示。1.2设计内容及设计要求1.2.1设计内容本次课程设计是使用EDA实验箱,基于EP1C3T144C8N芯片的设计方案。具体功能及其硬件如下:(1)通过七位电平开关输入密码。(如110 1110表示十进制数0)(2)通过一位电平开关控制数码管的位码(分为0的时输入第一位数码管的值;1时输入第二位数码管的值)。(3)通过一位电平开关
2、控制上锁和开锁两个状态(分别为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(三位),
3、Y(四位)组成一个七位的间接码,比如X输入110,Y输入1110组成110 1110一个七位码并且转换为四位的间接码0000,通过输入信号XT来控制译码显示哪一位数码管。具体程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY keycode ISPORT(X:IN STD_LOGIC_VECTOR(2 DOWNTO 0);输入变量1 Y:IN STD_LOGIC_VECTOR(3 DOWNTO 0);输入变量2 XT:IN STD_LOGIC; 控制位选变量 C,D:OUT STD_LOGIC_VECTOR(6 DOWNTO 0):=01
4、11111; 输出译码变量 e,f,CO:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END keycode;输出间接码ARCHITECTURE yima OF keycode IS SIGNAL S,EN,EN1: STD_LOGIC; BEGIN PROCESS(X,Y) VARIABLE xy: STD_LOGIC_VECTOR(6 DOWNTO 0); BEGIN xy:=(X&Y); IF XT=1THEN CASE xy IS WHEN1101110=E=0000;C(6 downto 0)E=0001;C(6 downto 0)E=0010;C(6 dow
5、nto 0)E=0011;C(6 downto 0)E=0100;C(6 downto 0)E=0101;C(6 downto 0)E=0110;C(6 downto 0)E=0111;C(6 downto 0)E=1000;C(6 downto 0)E=1001;C(6 downto 0)COCOE=0000;C(6 downto 0)F=0000;D(6 downto 0)F=0001;D(6 downto 0)F=0010;D(6 downto 0)F=0011;D(6 downto 0)F=0100;D(6 downto 0)F=0101;D(6 downto 0)F=0110;D(6
6、 downto 0)F=0111;D(6 downto 0)F=1000;D(6 downto 0)F=1001;D(6 downto 0)E=0000;D(6 downto 0)BT=01;EBT=10;E NULL; END CASE;END PROCESS;PROCESS(CLK) BEGIN IF CLKEVENT AND CLK=1THEN N=N+1; END IF;END PROCESS;END;3.2.2 仿真解析图 3.4 显示模块仿真图如上图所示输入信号A为111 1111(十进制数8的段码),B为1100111(十进制数9的段码),当E为01时输出E=A,当E=10时输出
7、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都亮。具体程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity taxi is port ( e,f: IN STD_LOGIC_vector(3 downto
8、0);输入的密码 co : IN STD_LOGIC;状态开关(上锁、解锁) led1,LED2 : OUT STD_LOGIC结果显示(成功、失败) );end entity taxi;architecture one of taxi is signal G,H:STD_LOGIC_vector(3 downto 0); begin PROCESS(e,f,co) begin if co=1 then 上锁 g = e; h = f; led1=0;led2=0; else -解锁 if g=e and h=f then led1=1;led2=0; else led1 =0;led2 =
9、1; end if; end if ; end process; end architecture;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、打开实验箱,
10、按管脚图接好线。将实验箱连接到电脑上,打开实验箱电源。3、在quartus2中选定tools下拉框中的Programmer项,进入程序下载界面,点击Start按钮运行sof文件。看到右上方的Progress到达100%时运行完毕。图4.1 实物图 如上图所示,在右下角电平开关中输入密码,状态开关为解锁状态,输入的密码为21,但是并不是密码,所以数码管上面的两个LED灯都亮了。总结通过本次课程设计,我深刻的了解到自己的不足。EDA这门课程是上学期学的,因为课程比较紧,当时在VHDL语言上下的功夫很少,就造成了我这次课程设计的囧态。 刚开始拿到课题,看到课题的设计内容和要求,感觉不是很难,但是一开始做就遇到问题程序的编写,那时候学的时候根本就是模仿的编写的,现在要自己动手编,感觉无从下手,语言规则什么的都不是很明确,就是照着书上编一段小的模块,那错就是十几个,排错误没有经验也只能请教高手和网络了,慢慢的一步
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1