版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 数字电路与逻辑设计实验-4位简易密码锁 姓名:王云深学号:10210889班级:2011211209软件简介:Quartus II 是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。
2、Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了
3、广泛的应用。目前Altera已经停止了对Maxplus II 的更新支持,Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在Quartus II 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。实验目的: 设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。实验要求:基本要求:1、密码设置:通过键盘进行4 位数字密码设定输入,在数码管上显
4、示所输入数字。通过密码设置确定键(BTN 键)进行锁定。2、开锁:在闭锁状态下,可以输入密码开锁,且每输入一位密码,在数码管上显示“-”,提示已输入密码的位数。输入四位核对密码后,按“开锁”键,若密码正确则系统开锁,若密码错误系统仍然处于闭锁状态,并用蜂鸣器或led 闪烁报警。3、在开锁状态下,可以通过密码复位键(BTN 键)来清除密码,恢复初始密码“0000”。闭锁状态下不能清除密码。4、 用点阵显示开锁和闭锁状态。提高要求:1、输入密码数字由右向左依次显示,即:每输入一数字显示在最右边的数码管上,同时将先前输入的所有数字向左移动一位。2、 密码锁的密码位数(46 位)可调。3、自拟其它功能
5、。 实验代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Lock ISPORT(clk_in:IN STD_LOGIC;rst :IN STD_LOGIC;keyboard_input:IN STD_LOGIC_VECTOR(3 DOWNTO 0);btn_input: IN STD_LOGIC;relock_input :IN STD_LOGIC;state_out: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);number_shape : OUT STD_LOGIC_VECTOR(7 downto 0);numbe
6、r_location : OUT STD_LOGIC_VECTOR(5 downto 0);square_row : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);square_colG : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);square_colR : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);beep:OUT STD_LOGIC);END Lock;ARCHITECTURE a OF Lock ISsignal cnt_dis : integer range 0 to 100000;signal clk_tmp_di
7、s : std_logic;signal clk_out_dis : std_logic;signal cnt_dis2 : integer range 0 to 750001;signal clk_tmp_dis2 : std_logic;signal clk_out_dis2 : std_logic;signal disp_cnt : integer range 0 to 9;signal square_cnt: integer range 0 to 9;signal keyboard_state : integer range 0 to 9;signal btn_state :std_l
8、ogic;signal relock_state : std_logic;signal disp_num0 : integer range 0 to 11;signal disp_num1 : integer range 0 to 11;signal disp_num2 : integer range 0 to 11;signal disp_num3 : integer range 0 to 11;signal real_pwd0 : integer range 0 to 9;signal real_pwd1 : integer range 0 to 9;signal real_pwd2 :
9、integer range 0 to 9;signal real_pwd3 : integer range 0 to 9;signal test_pwd0 : integer range 0 to 9;signal test_pwd1 : integer range 0 to 9;signal test_pwd2 : integer range 0 to 9;signal test_pwd3 : integer range 0 to 9;signal current_state : std_logic_vector(3 downto 0);signal next_state : std_log
10、ic_vector(3 downto 0);signal beep_buf : std_logic;signal is_locked : std_logic;signal is_beep : std_logic;BEGINPROCESS(clk_in,clk_tmp_dis)BEGINIF(clk_in'event and clk_in='1') THENIF cnt_dis= 35000 THEN -71429cnt_dis<=0;clk_tmp_dis<= NOT clk_tmp_dis;-beep_buf <= NOT beep_buf;ELSE
11、 cnt_dis<=cnt_dis+1;END IF;clk_out_dis <= clk_tmp_dis;END IF;END PROCESS;PROCESS(clk_out_dis,clk_tmp_dis2)BEGINIF(clk_out_dis'event and clk_out_dis='1') THENIF cnt_dis2= 75 THEN -250000cnt_dis2<=0;clk_tmp_dis2<= NOT clk_tmp_dis2;ELSE cnt_dis2<=cnt_dis2+1;END IF;clk_out_dis
12、2 <= clk_tmp_dis2;END IF;END PROCESS;PROCESS(clk_out_dis,disp_cnt)-number dispBEGINIF (clk_out_dis'event and clk_out_dis='1') THENCASE disp_cnt ISWHEN 0 =>CASE disp_num3 ISWHEN 0 => number_shape <= "11111100"WHEN 1 => number_shape <= "01100000"WHEN 2
13、 => number_shape <= "11011010"WHEN 3 => number_shape <= "11110010"WHEN 4 => number_shape <= "01100110"WHEN 5 => number_shape <= "10110110"WHEN 6 => number_shape <= "10111110"WHEN 7 => number_shape <= "11100000
14、"WHEN 8 => number_shape <= "11111110"WHEN 9 => number_shape <= "11110110"WHEN 10=> number_shape <= "00000010"WHEN OTHERS => number_shape <= "00000000"END CASE;number_location <= "110111"WHEN 1 =>CASE disp_num2 ISWHE
15、N 0 => number_shape <= "11111100"WHEN 1 => number_shape <= "01100000"WHEN 2 => number_shape <= "11011010"WHEN 3 => number_shape <= "11110010"WHEN 4 => number_shape <= "01100110"WHEN 5 => number_shape <= "10110
16、110"WHEN 6 => number_shape <= "10111110"WHEN 7 => number_shape <= "11100000"WHEN 8 => number_shape <= "11111110"WHEN 9 => number_shape <= "11110110"WHEN 10=> number_shape <= "00000010"WHEN OTHERS => number_shape
17、<= "00000000"END CASE;number_location <= "111011"WHEN 2 =>CASE disp_num1 ISWHEN 0 => number_shape <= "11111100"WHEN 1 => number_shape <= "01100000"WHEN 2 => number_shape <= "11011010"WHEN 3 => number_shape <= "11
18、110010"WHEN 4 => number_shape <= "01100110"WHEN 5 => number_shape <= "10110110"WHEN 6 => number_shape <= "10111110"WHEN 7 => number_shape <= "11100000"WHEN 8 => number_shape <= "11111110"WHEN 9 => number_shape &l
19、t;= "11110110"WHEN 10=> number_shape <= "00000010"WHEN OTHERS => number_shape <= "00000000"END CASE;number_location <= "111101"WHEN 3 =>CASE disp_num0 ISWHEN 0 => number_shape <= "11111100"WHEN 1 => number_shape <= "
20、;01100000"WHEN 2 => number_shape <= "11011010"WHEN 3 => number_shape <= "11110010"WHEN 4 => number_shape <= "01100110"WHEN 5 => number_shape <= "10110110"WHEN 6 => number_shape <= "10111110"WHEN 7 => number_shape
21、 <= "11100000"WHEN 8 => number_shape <= "11111110"WHEN 9 => number_shape <= "11110110"WHEN 10=> number_shape <= "00000010"WHEN OTHERS => number_shape <= "00000000"END CASE;number_location <= "111110"WHEN OTHERS
22、 =>number_shape <= "00000000"number_location <= "111111"END CASE;disp_cnt <= disp_cnt + 1;IF (disp_cnt = 3) THENdisp_cnt <= 0;END IF;END IF;END PROCESS;PROCESS(clk_out_dis2)-input scanBEGINIF (clk_out_dis2'event and clk_out_dis2='1') THENbtn_state <=
23、 btn_input;relock_state <= relock_input;CASE keyboard_input ISWHEN "0000" => keyboard_state <= 0;WHEN "0001" => keyboard_state <= 1;WHEN "0010" => keyboard_state <= 2;WHEN "0011" => keyboard_state <= 3;WHEN "0100" => key
24、board_state <= 4;WHEN "0101" => keyboard_state <= 5;WHEN "0110" => keyboard_state <= 6;WHEN "0111" => keyboard_state <= 7;WHEN "1000" => keyboard_state <= 8;WHEN "1001" => keyboard_state <= 9;WHEN OTHERS => keyboar
25、d_state <= 0;END CASE;END IF;END PROCESS;PROCESS(clk_out_dis2,rst)-state controlBEGINIF rst = '1' THENcurrent_state <= "0000"ELSIF clk_out_dis2 = '1' AND clk_out_dis2'event THENcurrent_state <= next_state;END IF;END PROCESS;PROCESS(current_state,next_state,btn_
26、state,keyboard_state,clk_out_dis) -state logic controlBEGINIF clk_out_dis'event AND clk_out_dis = '1' THENCASE current_state ISWHEN "0000" =>-0: Init/Resetreal_pwd3 <= 0;real_pwd2 <= 0;real_pwd1 <= 0;real_pwd0 <= 0;test_pwd3 <= 0;test_pwd2 <= 0;test_pwd1 &l
27、t;= 0;test_pwd0 <= 0;disp_num3 <= 0;disp_num2 <= 0;disp_num1 <= 0;disp_num0 <= 0;next_state <= "0001"is_locked <= '0'is_beep <= '0'WHEN "0001" => -1: Input real pwd X123disp_num3 <= keyboard_state;real_pwd3 <= keyboard_state;IF btn
28、_state = '1' THENnext_state <= "0010"ELSEnext_state <= "0001"END IF;WHEN "0010" => -2: Input real pwd 0X23disp_num2 <= keyboard_state;real_pwd2 <= keyboard_state;IF btn_state = '1' THENnext_state <= "0011"ELSEnext_state <=
29、"0010"END IF;WHEN "0011" => -3: Input real pwd 01X3disp_num1 <= keyboard_state;real_pwd1 <= keyboard_state;IF btn_state = '1' THENnext_state <= "0100"ELSEnext_state <= "0011"END IF;WHEN "0100" => -4: Input real pwd 012Xdisp_
30、num0 <= keyboard_state;real_pwd0 <= keyboard_state;IF btn_state = '1' THENnext_state <= "0101"ELSEnext_state <= "0100"END IF;WHEN "0101" =>-5: It is lockedis_beep <= '0'is_locked <= '1'disp_num3 <= 11;disp_num2 <= 11;di
31、sp_num1 <= 11;disp_num0 <= 11;next_state <= "0110"WHEN "0110" =>-6: Input test pwd X123disp_num3 <= 10;test_pwd3 <= keyboard_state;IF btn_state = '1' THENnext_state <= "0111"ELSEnext_state <= "0110"END IF;WHEN "0111" =
32、>-7: Input test pwd 0X23disp_num2 <= 10;test_pwd2 <= keyboard_state;IF btn_state = '1' THENnext_state <= "1000"ELSEnext_state <= "0111"END IF;WHEN "1000" =>-8: Input test pwd 01X3disp_num1 <= 10;test_pwd1 <= keyboard_state;IF btn_state =
33、'1' THENnext_state <= "1001"ELSEnext_state <= "1000"END IF;WHEN "1001" =>-9: Input test pwd 012Xdisp_num0 <= 10;test_pwd0 <= keyboard_state;IF btn_state = '1' THENnext_state <= "1010"ELSEnext_state <= "1001"END IF
34、;WHEN "1010" =>-10:Determine whether test pwd is the real pwdIF real_pwd3 = test_pwd3 AND real_pwd2 = test_pwd2 AND real_pwd1 = test_pwd1 AND real_pwd0 = test_pwd0 THENnext_state <= "1011"is_locked <= '0'ELSEis_beep <= '1'next_state <= "0101&qu
35、ot;END IF;WHEN "1011" =>IF btn_state = '1' THENnext_state <= "0000"ELSIF relock_state = '1' THENnext_state <= "0101"END IF;WHEN OTHERS => next_state <= "0000"END CASE;END IF;END PROCESS;PROCESS(current_state)BEGINstate_out <=
36、current_state;END PROCESS;PROCESS(clk_out_dis,is_beep)BEGINIF is_beep = '1' THENbeep <= clk_out_dis;ELSEbeep <= '0'END IF;END PROCESS;PROCESS(clk_out_dis,is_locked,square_cnt)BEGINIF (clk_out_dis'event and clk_out_dis='1') THENIF is_locked = '1' THENCASE squ
37、are_cnt ISWHEN 0 => square_colR <= "01111110"square_row <= "11111110"square_colG <= "00000000"WHEN 1 => square_colR <= "01111110"square_row <= "11111101"square_colG <= "00000000"WHEN 2 => square_colR <= "0
38、1111110"square_row <= "11111011"square_colG <= "00000000"WHEN 3 => square_colR <= "01111110"square_row <= "11110111"square_colG <= "00000000"WHEN 4 => square_colR <= "00100100"square_row <= "11101111&quo
39、t;square_colG <= "00000000"WHEN 5 => square_colR <= "00100100"square_row <= "11011111"square_colG <= "00000000"WHEN 6 => square_colR <= "00011000"square_row <= "10111111"square_colG <= "00000000"WHEN 7 => square_colR <= "00000000"square_row <= "01111111"square_colG <= "00000000"WHEN OTHERS => square_row <= "11111111"square_colR <= "00000000"square_colG <= "
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 施工现场施工防台风灾害威胁制度
- 数字化时代下的客户分析与销售策略
- 现代办公技术与应用实践培训
- 数学图形在儿童智力开发中的作用
- 科学实验教学对小学生综合素质的培养策略
- 项目突发环境事件应急预案
- 二手车批发合作合同协议
- 个人向个人临时借款合同模板
- 上海市租赁合同模板及示例
- 不锈钢期货电子交易合同
- 典范英语2b课文电子书
- 大数据与会计论文
- 17~18世纪意大利歌剧探析
- 微课制作技术与技巧要点
- β内酰胺类抗生素与合理用药
- 何以中国:公元前2000年的中原图景
- 第一章:公共政策理论模型
- 中药审核处方的内容(二)
- GB/T 4513.7-2017不定形耐火材料第7部分:预制件的测定
- GB/T 10205-2009磷酸一铵、磷酸二铵
- 公司财务制度及流程
评论
0/150
提交评论