《根据CPLD的数字锁.doc》由会员分享,可在线阅读,更多相关《根据CPLD的数字锁.doc(21页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、. .目 录第1章 系统概述11.1总体思路11.2设计内容及设计要求11.2.1设计内容11.2.2 设计要求1第2章 总体设计方案22.1设计流程图22.2设计程序原理图3第3章 子模块程序设计43.1译码模块43.1.1程序解析43.1.2 仿真解析73.2显示模块83.2.1程序解析83.2.2 仿真解析93.3.1程序解析103.3.2 仿真解析11第4章 调试与结果12总结13附录15第1章 系统概述1.1总体思路 本次课程设计主要是设计一个电子数字锁。思路如下:(1) 数字锁通过键入(电平)输入密码(两位十进制)。(2) 数字锁分上锁和解锁两个状态。(3) 可以通过程序预置密码。
2、(4) 密码可以显示出来。(5) 解锁成功、失败都有信号显示。1.2设计内容及设计要求 1.2.1设计内容本次课程设计是使用EDA实验箱,基于EP1C3T144C8N芯片的设计方案。具体功能及其硬件如下:(1) 通过七位电平开关输入密码。(如110 1110表示十进制数0)(2) 通过一位电平开关控制数码管的位码(分为0的时输入第一位数码管的值;1时输入第二位数码管的值)。(3) 通过一位电平开关控制上锁和开锁两个状态(分别为1和0)。(4) 通过两位数码管显示输入的密码。(5) 通过两个LED灯显示开锁成功和失败两种情况(LED1和LED2分别为10时成功,01时失败)。1.2.2 设计要求
3、(1)设计思路清晰,给出整体设计框图;(2)设计各单元电路,完成其功能仿真和编译并生成低层模块;(3)完成顶层设计并编译通过;(4)完成设计下载并调试电路;(5)写出设计报告;第2章 总体设计方案2.1设计流程图开始结束密码输入输入状态数码管显示密码密码存入寄存器上锁判断解锁LED1亮LED2灭LED1亮LED2亮图2.1 流程图2.2设计程序原理图图2.2 程序原理图第3章 子模块程序设计3.1译码模块图3.1 译码模块3.1.1程序解析 本模块主要是对输入的信号进行编码以及译码,由输入信号X(三位),Y(四位)组成一个七位的间接码,比如X输入110,Y输入1110组成110 1110一个七
4、位码并且转换为四位的间接码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):=0111111; 输出译码变量 e,f,CO:OUT STD_LOGIC_VECTOR(3 D
5、OWNTO 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 downto 0)E=0011;C(6 downto 0)E=0100;C(6 downto 0
6、)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 downto 0)F=0111;D(6 downto 0)F=1000;D(6 down
7、to 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时输出E=B。3.3控制模块图3.5 控制模块元件图3.3.1程序解析 本模块作为密码控制程序,
8、由译码模块输入的间接值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 0);输入的密码 co : IN STD_LOGIC;状态开关(上锁、解锁) led1,
9、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 clk, A = SYNTHESIZED_WIRE_0, B = SYNTHESIZED_WIRE_1, BT = bt, E = e);b2v_inst1 : keycodePORT MAP(XT = xt, X = x, Y = y, C = SYNTHESIZED_WIRE_0, CO = co, D = SYNTHESIZED_WIRE_1, e = SYNTHESIZED_WIRE_3, f = SYNTHESIZED_WIRE_2);b2v_inst2 : taxiPORT MAP(co = co_in, e = SYNTHESIZED_WIRE_2, f = SYNTHESIZED_WIRE_3, led1 = k, LED2 = m);END bdf_type;