
课程设计-基于CPLD的数字锁设计.doc
22页1湖南工程学院课 程 设 计 任 务 书课程名称: 嵌入式系统 题 目:基于 CPLD的数字锁专业班级:电子信息 0781 学生姓名: 指导老师: 审 批: 任务书下达日期 2011 年 01 月 02 日设 计 完成日期 2011 年 01 月 21 日2设计内容与设计要求CPLD 为复杂可编程逻辑器件,通过 EDA 技术对其进行编程,可将一个较复杂的数字系统集成于一个芯片中,制成专用集成电路芯片,并可随时在系统修改其逻辑功能有关知识可参见相关教材或参考书一.设计内容设计一个二位十进制数字锁,并验证其操作具体要求如下:(1) 开锁代码为二位十进制数,当输入代码的位数和位值与锁内给定的密码一致,且按规定程序开锁时,方可开锁,并点亮开锁指示灯 LT否则,系统进入“错误”状态,并发出报警信号2) 开锁程序由设计者确定,并要求锁内给定的密码是可调的,且预置方便,保密性好3) 并行数字锁的报警方式是点亮指示灯 LF,并使喇叭鸣叫来报警,直到按下复位开关,报警才停止此时,数字锁又自动进入等待下一次开锁的状态。
二、设计要求:1、 设计思路清晰,给出整体设计框图;2、 在 MAX+PLUSⅡ中设计各单元电路,完成其功能仿真和编译并生成低层模块;3、 在 MAX+PLUSⅡ中完成顶层设计并编译通过;4、 在 MAX+PLUSⅡ中完成设计下载并调试电路;5、 写出设计报告;3主要设计条件1. 提供 EDA 实验室;2. 提供 EL 实验箱和 CPLD 芯片;3. 提供 ALTERA 公司的 MAX+PLUS10.1 设计软件说明书格式1. 课程设计封面;2. 任务书;3. 说明书目录;4. 设计总体思路,基本原理和框图(顶层电路图) ;5. 单元电路设计(各次级模块电路图) ;6. 设计仿真;7. 编程下载;8. 总结与体会;9. 附录;10. 参考文献4进度安排星期一、二:下达设计任务书,介绍课题内容与要求;介绍 MAX+plusⅡ软件的使用;查找资料,确定总体设计方案和单元电路设计;星期三~第二周星期一:单元电路设计与仿真,硬件下载;第二周星期二、三:硬件下载;第二星期四、五:书写设计报告,打印相关图纸;答辩参考文献1. 康华光主编.电子技术基础(数字部分) ,高等教育出版社2. 阎石主编. 电子技术基础(数字部分) ,清华大学出版社。
3. 陈大钦主编,电子技术基础实验,高等教育出版社4. 彭介华主编,电子技术课程设计指导,高等教育出版社5. 张 原编著,可编程逻辑器件设计及应用,机械工业出版社6.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社7. MAX+PLUSⅡ入门8.刘洪喜,陆颖编著. VHDL 电路设计实用教程 清华大学出版社 5目 录一.设计总体思路........................................61.1 基本原理 ...........................................61.2 总设计框图 .........................................6二.单元电路设计及模块仿真..............................72.1 消除抖动模块 .......................................72.2 键盘扫描模块 .......................................92.3 七段数码显示电路模块 ..............................102.4 译码电路模块 ......................................122.5 密码控制电路模块..................................152.6 总电路............................................17三. 编程下载...........................................18四.总结与体会.........................................21五.参考文献...........................................226一、总体设计思路1.1 基本原理:本次设计我把逻辑功能划分为两个大的模块:控制部分和处理部分。
控制模块是整个系统的控制核心 ,负责接收其模块传来的输入信号 ,再根据系统的功能产生相应的控制信号送到相关的模块具体操作如下:密码预先存入寄存器中,开锁时,输入密码存入另一寄存器中,当按下“确定”键时,启动比较器,比较两个寄存器中的内容,当结果相同时 M=1 ,LT 绿灯亮,并开锁;当结果不同时 M=0,LF 红灯亮,不开锁用户需要修改密码时,先开锁,再按“设定密码” ,清除预先存入的密码,通过键盘输入新的 2 位十进制数,然后再按下确定键完成操作1.2 总设计框图如下:键盘译码开锁LED 显示输入密码寄存器键盘消抖密码预存寄存器绿灯亮键盘扫描红灯亮报警M=1消除密码输入两位十进制数密码修改YN7二、单元模块设计2.1 消除抖动模块我们使用的按键通常都是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通 ,在断开时也不会一下子断开因而在闭合及断开的瞬间均伴随有一连串的抖动(如下图所示)然而,抖动时间的长短由按键的机械特性决定,一般为 5ms~10ms这是一个很重要的时间参数,在很多场合都要用到在这里,我们用软件去除抖动当检测到键闭合时,执行一个延时程序产生数毫秒的延时,让前沿弹跳消失后再检测闭合;当发现键松开后,也给数毫秒的延时,当后沿弹跳消失后,再检测下一个键的输入。
或者当前沿弹跳消失后,将检测到的信号所存,然后再输出,这样就不需要后沿延时了消除抖动的电路封装图如下:8程序如下:LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_arith.ALL; USE ieee.std_logic_unsigned.ALL; LIBRARY altera; --抖动 USE altera.maxplus2.ALL; ENTITY lwdou IS PORT ( CLK,lwin : IN STD_LOGIC; lwout : OUT STD_LOGIC ); END ; ARCHITECTURE a OF lwdou IS signal Vcc, INV_B : std_logic ; signal A0, A1 : std_logic ; signal B0, B1 : std_logic ; BEGIN Vcc Vcc , q => A0 , clk => CLK, prn => Vcc, clrn => INV_B ); dff2 : dff PORT MAP (d =>Vcc , q => A1 , clk => CLK, prn => Vcc, clrn => INV_B ); process (CLK) begin if CLK'EVENT and CLK='1' thenB0 BTBT NULL;END CASE;END PROCESS;PROCESS(CLK)BEGIN IF CLK'EVENT AND CLK='1'THENNEEEEEEEEEELWCOLWCOEFFFFFFFFFFE<="0000";E1<=E;LWD(6 downto 0)<="";END CASE;END IF;END PROCESS;END;译码电路的仿真波形图如下:2.5 密码控制电路模块密码控制电路是本次课题设计的核心部分,我们通过密码控制来断定数字15锁的开或关。
当密码输入时,按下确定键,输入数字和所存的密码进行比较,若相同则进入开锁状态若输入密码不正确则立刻进入报警状态,然后按下清零键,重新输入密码密码控制封装图如下:密码控制程序如下:LIBRARY IEEE;--控制模块USE IEEE.STD_LOGIC_1164.ALL;ENTITY LWCZ ISPORT(LW_IN:IN STD_LOGIC_VECTOR(3 DOWNTO 0);LL_IN:IN STD_LOGIC_VECTOR(3 DOWNTO 0);WW_IN:IN STD_LOGIC_VECTOR(3 DOWNTO 0); A,B:OUT STD_LOGIC);END ;ARCHITECTURE luoji OF LWCZ IS SIGNAL G,H:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL S,EN,EN1: STD_LOGIC;SIGNAL COUNT1,COUNT2: STD_LOGIC:='0';SIGNAL CO: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(WW_IN)beginIF WW_IN="1011"THEN EN1<='1';ELSIF WW_IN="1010"THENEN<='0';EN1<='0';END IF;if(S='1')and(en='1')and(count1='0') thenG(3 downto 0)<=LW_IN(3 downto 0);H(3 downto 0)<=LL_IN(3 downto 0);count1<=not(count1);16end if;if(en1='1')and(count2='0') thenif(LW_IN(3 downto 0)= G(3 downto 0) and LL_IN(3 downto 0)=H(3 downto 0)) thenA<='1';EN<='1';s<='1';elseA<='0';B<='1';end if;count2<=not(count2);ELSif(en='0')and(en1='0') thencount1<='0';count2<='0';A<='0';s<='0';B<='0';end if;END PROCESS ;END;2.6 总匡图如下:173、编程下载MAX+PLUS Ⅱ支持 Altera 公司的FLEX10K,FLEX10KA,FLEX8000,MAX9000,MAX7000,Classic 等系列可编程逻辑器件。
4.1 选择器件 应参照设计电路的规模,所需工作速度等诸多因素对器件进行选择这里以将上述电路下载到 FLEX10K 系列器件中的 EPF10K10LC84 为例进行说明 (1)返回到编辑窗口 (2)在主菜单 Assign 中选择 Device 项,打开器件选择对话框(3)单击 Device Family 区的下拉列表,选择 FLEX10K 系列(4)在 Devices 的下拉列表中选择 EPF10K10LC84 (5)选择 OK 对话框关闭即完成器件选择 4.2 管脚锁定 管脚锁定即是将所设计的原理图的输入、输出信号定义到实际器件某个具体的管脚,此项工作可以由编译器自动分配,也可以由设计者根据设计要求进行人工分配若进18行人工分配,具体操作步骤如下: (1)在原理图编辑窗中用鼠标右键单击输入或输出信号 (2)在出现的下拉菜单中选择 Assign—Pin/Location/Chip ,出现Pin/Location/Chip 对话框 (3)在 Node Name 项中显示的应是待锁定管脚的输入或输出信号,在 Pin 项中键入想要锁定的管脚号码 。
