基于FPGA 的数字系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《基于FPGA的数字系统设计》项目设计项目名称: 电子密码锁
姓名:蒋流洲
院系:应用技术学院
专业: 09电子信息工程(应电应本)
学号: 200915254137
指导教师:徐正坤
完成时间: 2011年6月 30日
目录
1 项目名称、内容与要求………………………………………… 1页1.1 设计内容……………………………………………………… 1页
1.2 具体要求……………………………………………………… 1页
2 系统整体架构(Architecture Description)…………………1页2.1 设计思路……………………………………………………… 1页2.2 系统原理(包含:框图等阐述)与设计说明等内容…………2页
2.3 创新点与原创性内容………………………………………… 3页
3 系统设计 (含HDL 或原理图输入设计)……………………… 3页注:此部分包含主要逻辑单元、模块、源代码等内容
3.1 HDL 代码……………………………………………………… 3页
3.2 系统整体电路图(或RTL 级电路图)……………………… 11页
4 系统仿真(Simulation Waveform)……………………………12页
5 FPGA 实现(FPGA Implementation)………………………… 12页注:此处应包含硬件验证、操作过程、结果等说明
6 总结(Closing)……………………………………………… 15页参考书目(Reference):………………………………………… 16页
1项目名称、内容与要求
1.1 设计内容
实验板上有10个按键k1~k10,其中k1~k10作为密码输入按键,k10作为复位按键,一便重新开始输入的密码。当然,这个电子密码锁与实际的电子密码锁的设计有一些不一样,也许实际的电子密码锁并不设置复位按键,而是当密码输入错误后,延长很长一段时间才接受新密码的输入。
假设电子密码锁的密码为四位数3216。利用实验板上的一个数码管显示输入密码次数,当输入密码正确时,在数码管上显示字符“H”;当输入密码不正确时,在数码管上显示字符“E”。
1.2 具体要求
1﹞.具有密码输入功能。
2﹞.设置复位按键,以便重新输入新的密码。
3﹞.在数码管上显示输入密码次数。
4﹞.拒绝接受超过规定次数的密码输入信号。
5﹞.当密码输入正确时,在数码管上显示字符“H”;当密码输入不正确时,在数码管上显示字符“E”;
2 系统整体架构
2.1 设计思路
电子密码锁在生活中十分常见,在这我将设计一个具有较低成本的电子密码锁,本文讲述了我整个设计过程及收获。讲述了电子密码锁的的工作原理以及各个模块的功能,并讲述了所有部分的设计思
路,对各部分电路方案的选择、元器件的筛选、以及对它们的调试、对波形图的分析,到最后的总体图的分析。
2.2 系统原理(包含:框图等阐述)与设计说明等内容
用VHDL编写程序实现电子密码锁,其原理框图如图所示,程序中的时终信号clk为石英(32 768Hz)分频后的8Hz标准信号,作为产生0.5s信号的输入信号。七中k1k9为按键输入信号,k10作为复位按键。当没有按键按下时连接到CPLD或FPGA的信号k1k10都为高电平信号;当有按键按下时,k1~k10的一个信号为低电平。
电子密码锁采用状态机和对按键输入次数相结合的方法,保证只有输入正确的密码,状态机才能转换到最后正确的状态,显示开锁字符。程序由7个进程组成,进程P1和P2将8Hz标准信号分频后,产
生0.5s脉冲信号(carry),与按键输入信号配合,消除按键输入的抖动,并作为状态转换进程P4的时终输入信号。
进程P3锁存按键输入信号,为状态机提供一个稳定的按键输入信号。进程P4将下一个状态(next_state)转换为当前状态(state)。进程P5产生次态信号(next_state),只有当有按键输入和状态转移控制信号en为逻辑“1”时才能够产生次态信号。进程P4和进程P5是电子密码锁的核心,密码的设置也是编写状态机时确定的。
进程P6对按键输入次数计数,并且为显示按键输入次数的7段译码器BCD码数据。进程P7判断按键输入次数是否已经输入3次,如果输入密码的次数小于等于3,状态转移控制信号en为逻辑“1”,否则为逻辑“0”。当仍然有密码输入时,禁止状态发生变化,因此如果输入密码过程中,只要输入一个错误密码,就不可能转换到最后正确的状态。BCD码-7段译码器显示按键输入次数和输入密码正确或者错误
2.3 创新点与原创性内容
新增显示正确与错误功能
3 系统设计 (含HDL 或原理图输入设计)
3.1 HDL 代码
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_arith.all;
Use ieee.std_logic_unsigned.all;
Entity elock is
Port(clk,k1,k2,k3,k4,k5:in std_logic;
k6,k7,k8,k9,k10:in std_logic;
row:out std_logic_vector(2 downto 0);
led:out std_logic_vector(7 downto 0));
end elock;
architecture behavioral of elock is
signal count:std_logic_vector(1 downto 0);
signal count1:std_logic_vector(3 downto 0);
type states is(s4,s3,s2,s1,s0);
signal state:states:=s0;
signal next_state:states:=s0;
signal en,carry,op,k11,k22,k33,k44,k55:std_logic; signal k66,k77,k88,k99,k100:std_logic;
signal row1:std_logic_vector(2 downto 0);
begin
p1:process(clk)
begin
if rising_edge(clk) then
count<=count+'1';
end if;