数字电路与逻辑设计实验报告-王云深-10210889.doc_第1页
数字电路与逻辑设计实验报告-王云深-10210889.doc_第2页
数字电路与逻辑设计实验报告-王云深-10210889.doc_第3页
数字电路与逻辑设计实验报告-王云深-10210889.doc_第4页
数字电路与逻辑设计实验报告-王云深-10210889.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字电路与逻辑设计实验-4位简易密码锁 姓名:王云深学号:10210889班级:2011211209软件简介:Quartus II 是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对Maxplus II 的更新支持,Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在Quartus II 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。实验目的: 设计并实现一个数字密码锁,密码锁有四位数字密码和一个确认开锁按键,密码输入正确,密码锁打开,密码输入错误进行警示。实验要求:基本要求:1、密码设置:通过键盘进行4 位数字密码设定输入,在数码管上显示所输入数字。通过密码设置确定键(BTN 键)进行锁定。2、开锁:在闭锁状态下,可以输入密码开锁,且每输入一位密码,在数码管上显示“-”,提示已输入密码的位数。输入四位核对密码后,按“开锁”键,若密码正确则系统开锁,若密码错误系统仍然处于闭锁状态,并用蜂鸣器或led 闪烁报警。3、在开锁状态下,可以通过密码复位键(BTN 键)来清除密码,恢复初始密码“0000”。闭锁状态下不能清除密码。4、 用点阵显示开锁和闭锁状态。提高要求:1、输入密码数字由右向左依次显示,即:每输入一数字显示在最右边的数码管上,同时将先前输入的所有数字向左移动一位。2、 密码锁的密码位数(46 位)可调。3、自拟其它功能。 实验代码: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);number_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_dis : 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_logic;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 : 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_logic_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_inevent 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 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_disevent 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_dis2 CASE disp_num3 ISWHEN 0 = number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape = 00000000;END CASE;number_location CASE disp_num2 ISWHEN 0 = number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape = 00000000;END CASE;number_location CASE disp_num1 ISWHEN 0 = number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape = 00000000;END CASE;number_location CASE disp_num0 ISWHEN 0 = number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape number_shape = 00000000;END CASE;number_location 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_dis2event and clk_out_dis2=1) THENbtn_state = btn_input;relock_state keyboard_state keyboard_state keyboard_state keyboard_state keyboard_state keyboard_state keyboard_state keyboard_state keyboard_state keyboard_state keyboard_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_dis2event THENcurrent_state -0: Init/Resetreal_pwd3 = 0;real_pwd2 = 0;real_pwd1 = 0;real_pwd0 = 0;test_pwd3 = 0;test_pwd2 = 0;test_pwd1 = 0;test_pwd0 = 0;disp_num3 = 0;disp_num2 = 0;disp_num1 = 0;disp_num0 = 0;next_state = 0001;is_locked = 0;is_beep -1: Input real pwd X123disp_num3 = keyboard_state;real_pwd3 = keyboard_state;IF btn_state = 1 THENnext_state = 0010;ELSEnext_state -2: Input real pwd 0X23disp_num2 = keyboard_state;real_pwd2 = keyboard_state;IF btn_state = 1 THENnext_state = 0011;ELSEnext_state -3: Input real pwd 01X3disp_num1 = keyboard_state;real_pwd1 = keyboard_state;IF btn_state = 1 THENnext_state = 0100;ELSEnext_state -4: Input real pwd 012Xdisp_num0 = keyboard_state;real_pwd0 = keyboard_state;IF btn_state = 1 THENnext_state = 0101;ELSEnext_state -5: It is lockedis_beep = 0;is_locked = 1;disp_num3 = 11;disp_num2 = 11;disp_num1 = 11;disp_num0 = 11;next_state -6: Input test pwd X123disp_num3 = 10;test_pwd3 = keyboard_state;IF btn_state = 1 THENnext_state = 0111;ELSEnext_state -7: Input test pwd 0X23disp_num2 = 10;test_pwd2 = keyboard_state;IF btn_state = 1 THENnext_state = 1000;ELSEnext_state -8: Input test pwd 01X3disp_num1 = 10;test_pwd1 = keyboard_state;IF btn_state = 1 THENnext_state = 1001;ELSEnext_state -9: Input test pwd 012Xdisp_num0 = 10;test_pwd0 = keyboard_state;IF btn_state = 1 THENnext_state = 1010;ELSEnext_state -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 IF btn_state = 1 THENnext_state = 0000;ELSIF relock_state = 1 THENnext_state next_state = 0000;END CASE;END IF;END PROCESS;PROCESS(current_state)BEGINstate_out = current_state;END PROCESS;PROCESS(clk_out_dis,is_beep)BEGINIF is_beep = 1 THENbeep = clk_out_dis;ELSEbeep square_colR = 01111110;square_row = 11111110;square_colG square_colR = 01111110;square_row = 11111101;square_colG square_colR = 01111110;square_row = 11111011;square_colG square_colR = 01111110;square_row = 11110111;square_colG square_colR = 00100100;square_row = 11101111;square_colG square_colR = 00100100;square_row = 11011111;square_colG square_colR = 00011000;square_row = 101111

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论