ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:276.29KB ,
资源ID:8745947      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8745947.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VHDL密码锁6位串行输入.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

VHDL密码锁6位串行输入.docx

1、VHDL密码锁6位串行输入VHDL密码锁(6位串行输入)电子设计自动化课程设计题目: 数字密码锁电路 (1.1) 院(系) 信息科学与工程学院 专 业 15通信工程 届 别 班 级 学 号 姓 名 任课老师 数字密码锁电路,难度系数1.1 实验要求设计一个密码锁,有6位十进制数字密码,串行输入;能设置密码;有开锁和错误指示(LED);如果连续输错三次,则一刻钟内不能再开锁。本设计的各个模块由相应的VHDL程序具体实现,并在Quartus9.0环境下进行了整体电路的模拟仿真,最终实现“密码锁设计”的要求。实验设计要求6位串行输入,并且由于实验板输入键位的有限,还同时增加了输入密码与设置密码键位的

2、重叠,使密码锁电路输入输出形成一个反馈,通过对输出的判断,让电路自动识别输入的数字是设置的密码还是输入的密码。在程序初始载入实验板时,还要让密码锁的初始设置密码和输入密码相同,从而达到能够初始设置密码的逻辑要求。同时因为实验板输出的LED灯有限,还要求设计的密码锁电路的显示能够在输入密码、设置密码和倒计时之间灵活智能选择,从而达到满足使用的要求。密码锁在输入三次错误密码后需要开始一个一刻钟即900秒的倒计时,则需要设计一个逻辑电路使电路能够在输入和错误倒计时之间自由变化。此为本实验设计的主要难点和创新。 1.系统设计 .42.单元电路设计 .73.软件设计 .124.系统测试 .235.结论

3、.246.参考文献 .247.附录 .258.其他 .26 系统设计设计要求:设计一个密码锁,有6位十进制数字密码,串行输入;能设置密码;有开锁和错误指示(LED);如果连续输错三次,则一刻钟内不能再开锁。系统设计方案:先设计1.0难度的密码锁,此时不需要一刻钟计时模块。该电路首先需要一个输入模块,由于实验板的限制,安排两个键位作为输入,分别实现6个密码位的选择和对确定位密码的输入,所以在输入模块之前,还需要通过计数器来分别得到两个输入;之后设计一个密码合成及选择模块,将得到的6个4位的密码相加得到一个24位的密码,方便之后的比较,同时需要在输入模块添加一个选择,分别确定此时的输入信息是设置密

4、码还是输入密码;将得到的24位设置密码和输入密码分别放到一个确认模块,起到输入确认并且使初始信息清零的作用;最后将两个24位数据放入比较模块,确定密码锁的状态,状态的显示由LED灯实现;输出显示LED模块从输入模块之前接出,显示当前电路的输入;同时,在计数器之前需要加入消抖模块,使实验板能够稳定输入;在LED模块之前需要添加译码器,以输出正确显示。下图为1.0密码锁各个模块及接线。 完成1.0难度密码锁之后设计一个计数器,通过对密码输入确认和输出状态的计数,当输入错误达到三次时,开始一个一刻钟的计时,由另外一个计数器完成。该计数器的输入还需要一个50m分频模块,得到一个稳定的每秒输出一个电平跳

5、变的输入;为了将900秒的计时显示到LED上,需要用除法器将计时的各个位拆分出来,再通过译码器显示到LED上。最后还需要一个输出选择模块,通过对3计数器的数据识别,选择当前LED输出的是900秒计时还是当前输入数据。下图为1.1难度密码锁最终的各个模块及接线。 其他方案:除上述方法外,还可以将比较器放在输出选择模块之前,这样能够让程序在开发板上仿真时,位选之后不会将上一位的输入连带到本位;如果去掉输入选择模块,可以增加一个输入为设置密码输入,即将输入密码和设置密码的输入分开;倒计时模块采用的是从900倒计时到0,即“1110000110”到“0000000000”,然后输出cout为1;该程序

6、也可以从“0000000000”累加到“1110000110”计数;单元电路设计消抖模块:消除按键难以避免的抖动,以得到稳定的输入;计数器:本实验分别用到了3进制、6进制和10进制的计数器,每计数到一定量时计数器清零并输出一个高电平; 密码合成及选择模块:将得到的6个4位的密码合成一个24位的密码并输出,方便之后的密码比较,密码合成通过&完成,通过对输出状态反馈(开锁输出1,锁存输出0)的识别,判断当前输入的数据是设置密码还是输入密码,作两个输出;确认模块:将得到的输入密码和设置密码确认输出到比较器,同时在程序载入实验板时,还未有输入的情况下,能够默认输入密码和设置密码都是24位0,使两者初始

7、值相等(此时比较器输出为1,反馈到该模块,输入的数据为设置密码),达到能设置密码的状态;比较模块:对得到的输入密码和设置密码进行比较,输出显示当前密码锁是锁存0还是开锁状态1;译码器:将得到的数据读取,使其输出的数据能够显示到LED上;LED:将6位密码显示在LED上;50m分频:每秒稳定输出一个电平跳变;输出选择:通过对3进制计数器的数据读取(输入错误三次输出cout为1,否则为0),选择输出是当前密码输入、设置密码输入还是900秒计时;除法器:将900秒计时的百位、十位和个位拆分出来,使其能通过译码器显示到LED上。(该模块主要通过lpm_divide和lpm_constant实现,900

8、秒的计时数据分别除常数100和10,再通过对商的后四位数据的读取得到各个位的大小)下图为除法器各模块及接线: LED第二位显示默认为0模块:将实验没有用到的led第二位显示输出默认为不显示;LED输出选择模块:选择led是显示倒计时还是此时输入密码软件设计软件:Quartus9.0(Cyclone EP2C5T144C8);硬件:对应的FPGA开发板程序清单1.消抖模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY xiaodou IS PORT( K_IN,CLK:IN STD_L

9、OGIC; K_OUT:OUT STD_LOGIC);END;ARCHITECTURE one OF xiaodou ISSIGNAL K_PRE:STD_LOGIC;SIGNAL COUNT:INTEGER RANGE 0 TO 3999999;BEGIN PROCESS(CLK,K_IN) BEGIN IF CLKEVENT AND CLK=1 THEN IF K_IN=K_PRE THEN IF COUNT3999999 THEN COUNT=COUNT+1; ELSE COUNT=3999999; END IF; ELSE COUNT=0; END IF; K_PRE=K_IN; EN

10、D IF; IF COUNT=3999999 THEN K_OUT0) ; -计数器异步复位 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿 IF EN = 1 THEN -检测是否允许计数(同步使能) IF CQI 0); -大于9,计数值清零 END IF; END IF; END IF; IF CQI = 9 THEN COUT = 1; -计数大于9,输出进位信号 ELSE COUT = 0; END IF; CQ 0) ; -计数器异步复位 ELSIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿 IF EN = 1 THEN -检测

11、是否允许计数(同步使能) IF CQI 0); -大于9,计数值清零 END IF; END IF; END IF; IF CQI = 5 THEN COUT = 1; -计数大于9,输出进位信号 ELSE COUT = 0; END IF; CQ 0) ; ELSIF CLKEVENT AND CLK=0 THEN IF b 0); END IF; END IF; IF b = 3 THEN y = 1; ELSE y = 0; END IF; END PROCESS; end one;5.输入模块LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTI

12、TY zongxuan IS PORT( D: IN STD_LOGIC_VECTOR(3 DOWNTO 0); B: IN STD_LOGIC_VECTOR(3 DOWNTO 0); code0,code1,code2,code3,code4,code5:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END ENTITY zongxuan;ARCHITECTURE behav OF zongxuan IS BEGIN PROCESS(B) BEGIN IF B=0000 THEN code0=D; ELSIF B=0001 THEN code1=D; ELSIF B=00

13、10 THEN code2=D; ELSIF B=0011 THEN code3=D; ELSIF B=0100 THEN code4=D; ELSE code5=D; END IF;END PROCESS; END behav; 6.密码合成及选择模块LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY jicun IS PORT( P0,P1,P2,P3,P4,P5:IN STD_LOGIC_VECTOR(3 DOWNTO 0); CHANGE:IN STD_LOGIC; RCO

14、DE,ICODE:OUT STD_LOGIC_VECTOR(23 DOWNTO 0); END jicun; ARCHITECTURE bhv OF jicun IS SIGNAL CODE:STD_LOGIC_VECTOR(23 DOWNTO 0); BEGIN PROCESS(CHANGE) BEGIN CODE=p0&p1&p2&p3&p4&p5; IF CHANGE=1 THEN RCODE = CODE; ELSE ICODE = CODE; END IF;END PROCESS; END bhv;7.输出确认模块LIBRARY IEEE; USE IEEE.STD_LOGIC_11

15、64.All; ENTITY queren IS PORT( INCODE:IN STD_LOGIC_VECTOR(23 DOWNTO 0); OUTCODE:OUT STD_LOGIC_VECTOR(23 DOWNTO 0); K:IN STD_LOGIC); end queren;ARCHITECTURE bhv OF queren IS BEGIN PROCESS (k) BEGIN IF k=0 THEN OUTCODE = INCODE ; END IF; END PROCESS; END bhv;8.比较模块LIBRARY IEEE; USE IEEE.STD_LOGIC_1164

16、.All; ENTITY bijiao IS PORT( RCODE,ICODE:IN STD_LOGIC_VECTOR(23 DOWNTO 0); L:OUT STD_LOGIC); end bijiao;ARCHITECTURE bhv OF bijiao IS BEGIN PROCESS (RCODE,ICODE) BEGIN IF ICODE /= RCODE THEN L = 0; ELSE L = 1; END IF; END PROCESS; END bhv;9.译码器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY yimaqi I

17、S PORT( A :IN STD_LOGIC_VECTOR(3 DOWNTO 0); Y :OUT STD_LOGIC_VECTOR(6 DOWNTO 0);END ENTITY yimaqi;ARCHITECTURE one OF yimaqi ISBEGIN Y =1000000 WHEN A= 0000 ELSE 1111001 WHEN A= 0001 ELSE 0100100 WHEN A= 0010 ELSE 0110000 WHEN A= 0011 ELSE 0011001 WHEN A= 0100 ELSE 0010010 WHEN A= 0101 ELSE 0000010

18、WHEN A= 0110 ELSE 1111000 WHEN A= 0111 ELSE 0000000 WHEN A= 1000 ELSE 0010000 WHEN A= 1001 ELSE 0001000 WHEN A= 1010 ELSE 0000011 WHEN A= 1011 ELSE 1000110 WHEN A= 1100 ELSE 0100001 WHEN A= 1101 ELSE 0000110 WHEN A= 1110 ELSE 0001110 WHEN A= 1111 ELSE NULL;END ARCHITECTURE one;10.900秒计时library ieee;

19、use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity daojishi is port ( clk,en :in std_logic; led0 : out std_logic_vector(9 downto 0); cout: out std_logic); end daojishi;architecture behav of daojishi isbegin process(clk,en) variable led:std_logic_vector(9 downto 0); begin if en=0 then

20、 led:=1110000100;led0=1110000100; elsif clkevent and clk=1 then led:=led-1; end if; if led=0000000000 then cout=1;else cout=0;end if; led0=led; end process;end behav;11.计时除100得商取后四位library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jiusi is port( a:in std_logic_vector(9

21、downto 0); b:out std_logic_vector(3 downto 0); end jiusi;architecture one of jiusi is begin process(a) begin b=a(3 downto 0); end process; end;12.计时除100得余数再除10得商取后四位library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity qisi is port(a:in std_logic_vector(6 downto 0); b:out s

22、td_logic_vector(3 downto 0); end qisi;architecture one of qisi is begin process(a) begin b=a(3 downto 0); end process; end;13.50m分频library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt50M is port(clk:in std_logic; cout:out std_logic); end cnt50M; architecture one of cnt

23、50M is begin process(clk) variable c:integer range 0 to 49999999; begin if clkevent and clk=1 then if c=49999999 then cout=1; c:=0; else c:=c+1; cout=0; end if; end if; end process;end;14.选择是否读取输出状态LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY xuan IS PORT ( A: IN STD_LOGIC; B:IN STD_LOGIC; Y : OUT STD_LOGIC);END ENTITY xuan;ARCHITECTURE one OF xuan ISBEGIN PROCESS (B,A) BEGIN IF B=0 THEN Y = A ; ELSE Y=1; end if; END PROCESS;END ARCHITECTURE one ;15.输出选择模块

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1