EDA4位密码锁的课程设计
更新时间:2023-07-29 10:21:02 阅读量: 实用文档 文档下载
完整版的EDA课程设计
信息技术学院
综合设计报告书
姓 名: 景显冬 班 级: B1106 学 号: 04 时 间: 2013.12.31 指导教师: 李海成
《可编程逻辑器件原理及应用》课程
完整版的EDA课程设计
设计密码锁设计
题目数据输入:每按一个数字键,就输入一个数值,并在显示器上的最右方显示出该 数值,并将先前已经输入的数据依序左移一个数字位置。 数码清除:按下此键可清除前面所有的输入值,清除成为“0000” 。 密码更改:按下此键时将目前的数字设定成新的密码。 激活电锁:按下此键可将密码锁上锁。 解除电锁:按下此键会检查输入的密码是否正确,密码正确即开锁。
设 计 要 求 和 任 务
完整版的EDA课程设计
设计方案本系统采用模块化的设计, 整个系统分为数字按键输入、 时钟输入、 功能按键输入、数字译码块、功能译码模块、核心处理模块、输出处理 模块、显示译码电路八个模块。整体电路如图1.1所示。数 字 按 键 输 入 时 钟 模 块 功 能 按 键 输 入
设
数 字 译 码 模 块 功 能 译 码 模 块
核 心 处 理 模 块
输 出 处 理 模 块
显 示 译 码 电 路
计
过
图1.1 数字密码锁总方框图
程
硬件电路的设计4 位数字密码锁包括五个基本逻辑模块,分别为:数字按键输入模 块(numinput) 、功能按键输入模块(funcinput) 、核心处理模块(core) 、 输出处理模块(allout) 、七段译码器模块(dataout) 。
数字按键输入--numinput说明: 读取数字键 0~9。 按键为矩阵形式, 高电平表示按键未按下, 低电平表示按键按下。 经数字按键输入模块处理后输出 4 位二进制代码, “0000”~“1001”分别表示 0~9,用“1010”表示其他无效输入。如 表 2.1 所示。
完整版的EDA课程设计
表 2.1 数字按键输入模块(numinput)的数据输入输出 按键数字 0 1 2 3 4 5 按键扫描输出 11011110 01111101 01111110 10110111 10111011 10111101 10111110 11010111 11011011 11011101 其他 Numinput 二进制输出 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 对应十进制数字 0 1 2 3 4 5 6 7 8 9 10
设
6 7 8 9
计
其他按键
(1)numinput--数字按键输入模块程序: library ieee; use ieee.std_logic_1164.all;
过
entity numinput is port(numin numstate,clk numout :IN std_logic_vector(7 downto 0); :IN std_logic; :OUT std_logic_vector(3 downto 0));
程
end numinput; architecture one of numinput is signal state signal mem begin process(clk) begin if clk'event and clk='1' then :std_logic; :std_logic_vector(7 downto 0);
完整版的EDA课程设计
if state/=numstate then if mem/=numin then case numin is when "11011110" => numout<="0000";---"0" when "01111101" => numout<="0001";---"1" when "01111110" => numout<="0010";---"2" when "10110111" => numout<="0011";---"3" when "10111011" => numout<="0100";---"4"
设
when "10111101" => numout<="0101";---"5" when "10111110" => numout<="0110";---"
6" when "11010111" => numout<="0111";---"7" when "11011011" => numout<="1000";---"8"
计
when "11011101" => numout<="1001";---"9" when others => numout<="1010"; end case; state<=numstate;
过end if;
else numout<="1010";
mem<=numin; end if;
程
end if; end process; end one; (2)数字按键输入模块仿真图:
完整版的EDA课程设计
设图 2.1 数字按键输入模块仿真图
由 图 可 知 , 当 数 字 按 键 输 入 模 块 的 输 入 依 次 为 "11011110" 、
计
"01111101" 、 "01111110" 、 "10110111" 、 "10111011" 、 "10111101" 、 "10111110"、"11010111"、"11011011"、"11011101"时,numout 输出依次 输出 “0000” 、 “0001” 、 “0010” 、 “0011” 、 “0100” 、 “0101” 、 “0110” 、 “0111” 、 “1000”“1001” 、 ;当为其他按键输入时,numout 输出均为“1010” 。
过(3)数字按键输入--numinput 符号文件:
程
图 2.2 数字按键输入--numinput 符号文件
功能按键输入模块 -- funcinput读取矩阵按键区控制功能按键 -— 清除键、改密键、上锁键、解锁键。 高电平表示按键未按下,低电平表示按键按下。按照“清除,改
完整版的EDA课程设计
密,上锁,解锁”顺序读取按键时,只能输出一位控制信号。输出 的信号为 3 位二进制代码, “001”~“100” ,依次表示“清除按键、改 密按键、上锁,解锁” ,用“000”表示输入不为功能按键信号。表 2.2 控制功能按键输入模块(funcinput)的输出输入数据 功能按键 功能按键扫描输出 Funcinput 二进制输 出 清除键 改密键 对应十进制数字
11100111 11101101 11101110 11101011其他
001 010 011 100 000
1 2 3 4 0
设
上锁键 解锁键 其他按键
计
(1)Funcinput--功能按键输入模块程序: library ieee; use ieee.std_logic_1164.all; entity funcinput is
过
port( funcin: constate,clk:
IN std_logic_vector(7 downto 0); IN std_logic;
conout:OUT std_logic_vector(2 downto 0)); end funcinput;
程
architecture one of funcinput is signal state: signal mem: begin process(clk) begin if clk'event and clk='1' then if constate/=state then state<=constate; std_logic; std_logic_vector(7 downto 0);
完整版的EDA课程设计
if mem/=funcin then with funcin select when "11100111" , --清除键 when "11101101",--改密键 when "11101110", --上锁键 when "11101011" , --解锁键 when others;
conout<="001" "010" "011" "100" "000" mem<=funcin;
设
else conout<="000"; end if; end if; end if;
计
end process; end one; (2)功能按键输入模块仿真图:
过
程图 2.3 功能按键输入模块仿真图
由图可知:当功能按键输入模块的输入依次为“11100111”、 “ 11101101”、“ 11101110”、“ 11101011”时,conout 输出依次为 “001”、“010”、“011”、“100”, 当为其他按键输入时,conout 输出均为“000”。 (3)功能按键输入模块--funcinput 符号文件:
完整版的EDA课程设计
图 2.4 功能按键输入模块 --funcinput 符号文件
核
心处理模块--core 设核心处理模块将根据输入(数字按键输入以及功能按键输入)来改变存储器 状态、数码管显示以及LED灯显示(红灯亮为上锁,绿灯亮为解锁) 。
(1)Core--核心处理程序: library ieee;
计
use ieee.std_logic_1164.all; entity core is port( numin: conin: in std_logic_vector(3 downto 0); in std_logic_vector(2 downto 0); in std_logic; out std_logic_vector(3 downto 0); out std_logic);
过
clk:
dataa,datab,datac,datad: ledr,ledg,numout,conout: end entity;
程
architecture one of core is type lockstate is (unlock,locked); signal numa,numb,numc,numd,codea,codeb,codec,coded:std_logic_vector(3 downto 0); signal numstate,constate: signal locksta: begin process(clk,numin,conin) std_logic; lockstate;
完整版的EDA课程设计
if clk'event and clk='1' then--上升沿 if numin/="1010" then--当不是其他键时 numd<=numc; numc<=numb; numb<=numa; numa<=numin;---移位 end if; if conin/="000" then
设
if conin="001" then--清除键按下 numa<="0000";--全部清零 numb<="0000"; numc<="0000";
计
numd<="0000"; elsif conin="010" then --改密键按下 if locksta/=locked then--锁并不是上锁状态 codea<=numa;
过
codeb<=numb; codec<=numc; coded<=numd; end if;
程
elsif conin="011" then
--上锁键按下
if locksta/=locked then numa<="0000"; numb<="0000"; numc<="0000"; numd<="0000"; locksta<=locked; end if; elsif conin="100" then --解锁键按下 --锁定密码锁
完整版的EDA课程设计
if locksta=locked then if numa=codea and numb=codeb then 码 if numc=codec and numd=coded then locksta<=unlock; --锁开 end if; end if; end if; --输入正确密
设
end if; end if; if locksta=locked then ledr<='1'; --若锁锁定 --led 等高电平,红灯闪烁
计else
ledg<='0';
ledr<='0'; ledg<='1';
过
end if; dataa<=numa; datab<=numb; datac<=numc;
程
datad<=numd; if numstate='1' then numstate<='0'; else numstate<='1'; end if; if constate='1' then constate<='0'; else constate<='1'; end if; numout<=numstate; conout<=constate;
完整版的EDA课程设计
end if; end process; end one;
(2)核心处理模块仿真图: 当数字按键输入为有效输入(即输入的按键为数字按键 0~9 时) , 此时虽输入 9 位数字,但只有前四位有效,所以密码应为“1234” 若 。 conin 输入为“011” (即按下上锁键) ,此时可以看到 ledr 为高电平,所
设
以此时红灯闪烁一次,表示密码锁已上锁。仿真波形图如下:
计
过图 2.5 核心处理模块仿真图(一)
程
图 2.6 核心处理模块仿真图(二)
由图可知:若 conin 输入为“100”时(解锁时) ,当再次输入密码 “1234” 并此时 ledg 输出为低电平 , (绿灯亮) Dataa 输出密码 。 “1234” , 则表示此时密码锁已解锁。 (3)核心处理模块--core 符号文件:
完整版的EDA课程设计
图 2.7 处理核心模块--core 符号文件
设
输出处理模块—allout对处理核心模块—core 输出的数据进行刷新,使数码管及时显示刷 新的
数字。
计
(1)Allout--输出处理程序: library ieee; use ieee.std_logic_1164.all; entity allout is
过
port( dataa,datab,datac,datad: clk: dataout: 0);
in std_logic_vector(3 downto 0); in std_logic; out std_logic_vector(3 downto
程end allout; architecture one of allout is signal timer: begin process(clk) begin
outsel: 0));
out std_logic_vector(1 downto
std_logic_vector(1 downto 0);
if clk'event and clk='1' then--上升沿
完整版的EDA课程设计
if timer="00" then dataout<=dataa; outsel<="00"; timer<="01"; elsif timer="01" then dataout<=datab; outsel<="01"; timer<="10";
设
elsif timer="10" then dataout<=datac; outsel<="10"; timer<="11";
计
else ataout<=datad; outsel<="11"; timer<="00";
过end process; end one;
end if; end if;
程
(2)输出处理模块仿真图:
图 2.8 输出处理模块仿真图
完整版的EDA课程设计
当输出密码为“0123”时,经过输出处理模块的处理后,能刷新输 出密码“0123”对应的二进制“0000” “0001” “0010” “0011” 、 、 、 ,当 密码改为 “5678” 该模块也能对应刷新出新密码对应二进制 时, “0101” 、 “0110”“0111”“1000”。 、 、
(3)输出处理模块—allout 符号文件:
设
计
图 2.9 输出处理模块—allout 符号文件
七段译码器模块—dataout把 4 位 2 进制数翻译成数码管代码,使输入的密码或修改的密码能
过
及时显示在数码管上。 (1)Dataout--七段译码器模块程序: library ieee; use ieee.std_logic_1164.all;
程
entity dataout is port( datain:IN std_logic_vector(3 downto 0); dataout:OUT std_logic_vector(6 downto 0)); end dataout; architecture one of dataout is begin process(datain) begin case datain is
完整版的EDA课程设计
when "0000" => dataout<="1111110"; --数码管显示 0 when "0001" => dataout<="0110000"; --数码管显示 1 when "0010" => dataout<="1101101"; --数码管显示 2 when "0011" => dataout<="1111001"; --数码管显示 3 when "0100" => dataout<="0110011"; --数码管显示 4 when "0101" => dataout<="1011011"; --数码管显示 5 when "0110" => dataout<="1011111"; --数码管显示 6 when "0111" => dataout<="1110000"; --数码管显示 7
设
when "1000" => dataout<="1111111"; --数码管显示 8 when "1001" => dataout<="1111011"; --数码管显示 9 when others => dataout<="0000000"; --不显示 end case;
计
end process; end one; (2)Dataout--七段译码器模块仿真图:
过
程图 2.10 七段译码器模块仿真图
由图可知: 当七段译码器的输入信号 (datain) “0000”“0001” 为 、 、 “0010”、 “0011”、 “0100”、 “0101”、 “0110”、 “0111”、 “1000”、 “1001” 输出信号 , (dataout) 依次为: 1111110” 0110000” 1101101” “ 、 “ 、 “ 、 “ 1111001”、“ 0110011”、“ 1011011”、“ 1011111”、“ 1110000”、 “1111111”、“ 1111011”,当 conin 输入信号为其他时,译码输出为 “0000000”。表 2.3 七段译码器的输入及译码对
照表
完整版的EDA课程设计
二进制译 码输入 0000 0001 0010 0011 0100 0101
二进制译码输出
数码管显示数字
1111110 0110000 1101101 1111001 0110011 1011011 1011111 1110000 1111111 1111011 0000000
0 1 2 3 4 5 6 7 8 9 无显示
设
0110 0111 1000
计
1001 其他输入
(3)输出处理模块—Dataout 符号文件:
过
程
图 2.11 输出处理模块—allout 符号文件
软件设计四位密码锁的电路设计原理图如下:
完整版的EDA课程设计
设
计
图3.1 四位密码锁的电路设计原理图
过
系统仿真该四位数字密码锁的设计是一个实时的系统,对于每一个按键的操 作都是在时钟的上升沿完成的,是一个动态的逻辑关系;而系统输出为
程
数码管显示的实时输出,不便于分析该系统电路的功能,且系统电路中 存在自动刷新的功能模块,因而电路仿真时不能较好地观察输出结果, 为了解决这一问题,故修改电路的原理图如下:
完整版的EDA课程设计
设图4.1 便于观察输出结果的原理图
计
过
程图4.2 系统仿真图(一)
正在阅读:
EDA4位密码锁的课程设计07-29
青蓝工程结对帮扶个人计划江礼朝09-19
当前基础教育政策研究的热点问题探讨10-12
安全防护专项方案05-12
自动化焊接机器人05-21
特岗考试教育心理学考试试卷11-26
2019年中国水泥行业现状研究分析及市场前景预测报告目录08-25
姥姥对我的爱作文500字06-27
四级作文技巧05-19
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 密码锁
- 课程
- 设计
- EDA4
- 《大学物理简明教程》答案_赵近芳
- 湘教版气温和降水说课稿
- 2014年联考言语理解主旨概括题主体排除技巧分析
- 2013江苏小高考生物试卷
- 基于城市道路功能划分的交叉口指路标志信息分级体系(1)
- 可调谐激光吸收光谱法与气相色谱法监测甲烷的对比研究
- 华中科技大学标准C语言程序设计及应用习题答案
- 论文关键词:少数民族音乐 兴趣
- 日媒称歼-20堪比零式战机 若东海空战美日必胜
- 十一. 实验:把电流表改装为电压表
- 一年级《原地左右手拍球》教学设计及反思
- SYB完整饭店创业计划书
- 小学六年级数学毕业会考模拟试卷及答案
- 对智障儿童数学教学过程的游戏化导引——智障儿童生本数学教学探索之一
- 二年级备课组总结
- ch01信息系统和管理
- 南宁市亭子冲清淤和改造工程施工组织设计
- 昭阳区便民服务中心政府窗口服务部门的服务调查问卷
- 碳酸钙中钙含量的测定
- Ishow2018中级班文本2.0