《南京工业大学-EDA课程设计报告》由会员分享,可在线阅读,更多相关《南京工业大学-EDA课程设计报告(17页珍藏版)》请在金锄头文库上搜索。
1、南京工业大学电子与信息工程学院电子与信息工程学院EDA 课程设计报告( 2011 2012 学年 第 二 学期)班 级: 学 号: 姓 名: 指导教师: 2011 年 9 月课课 程程 设设 计计 报报 告告- 1 -一:实验目的:一:实验目的:1.掌握 VHDL 语言的使用,学会用 VHDL 语言来编程解决实际问题;2.学会使用 EDA 开发软件设计小型综合电路,掌握仿真的技巧;3.3.学会应用开发系统实现硬件电路,检验电路的功能。二:实验要求:二:实验要求:用 VHDL 语言设计一个密码锁,用波形仿真验证其功能后,实现到GW48 实验系统。三:功能描述:功能描述:用于模仿密码锁的工作过程。
2、完成密码锁的核心控制功能。四:功能要求:功能要求:设计一个密码锁,平时处于等待状态。管理员可以设置或更改密码。如果不预置密码,密码缺省为“11111” 。用户如果需要开锁,按相应的按键进入输入密码状态,输入 5 位密码,按下确定键后,若密码正确,锁打开;若密码错误,将提示密码错误,要求重新输入,三次输入都错误,将发出报警信号。报警后,只有管理员作相应的处理才能停止报警。用户输入密码时,若输入错误,在按下确定键之前,可以通过按取消键重新输入。正确开锁后,用户处理完毕后,按下确定键,系统回到等待状态。系统操作过程中,只要密码锁没有打开,如果 60 秒没有对系统操作,系统回到等待状态。要求密码在输入
3、过程中被依次显示,即先输入的为密码的第一位,总是显示在最左边。用两个发光二极管模拟显示,其中一个显示当前的工作模式,灭表示用户模式,亮表示管理员模式;另外一个指示锁的状态,灭表示锁处于锁定,亮表示锁被开启。课课 程程 设设 计计 报报 告告- 2 -五:功能描述:五:功能描述:初始状态:初次使用密码锁时,要先用 Reset 键初始化。初始状态下,用户密码为“11111” ,管理员密码为“00000” 。用户开锁:默认情况下,密码锁处于用户使用状态。如果当前为管理员状态,则按下 user 键回到用户状态。用户开锁时,输入四位数用户密码,可以从 out_code5 的输出状态确定密码输入状态。如输
4、入错误则按下clear 清除前一位输入。输入完毕后按 enter,如果密码正确,则开锁,否则重新输入密码。开锁后再次按下 enter 键则关锁,回到等待状态。三次密码输入错误,警报器 alarming 为 1。要管理员输入管理员密码解除警报。此时哪怕用户再输对密码也没用。管理员解除警报:当用户三次密码输入错误的时候,alarming 为 1,此时,只要管理员密码输入正确后,按下 clear 键,alarming 为 0,报警取消。管理员修改密码:在非警报和为开锁状态下,任何时候按 admin 键进入管理员状态。按 chgcode 选择修改密码,先选择修改的是用户密码还是管理员密码。修改用户密码
5、则按 user 键,修改管理员密码则按 admin 键。然后分别输入旧密码,新密码,新密码要输入两次。旧密码与所要修改的密码对应。如旧密码输入错误,则无法修改;当验证不成功即两次新密码不相同时,修改密码失败。返回等待状态。成功后也返回等待状态。定时返回:用户在未开锁状态下,60s 没有按键输入,则返回等待状态,但不包括 alarming 状态。只要是 alarming,则只有管理输入管理员密码才能解锁并按下 clear 消除警报。课课 程程 设设 计计 报报 告告- 3 -六:设计思路:六:设计思路:设计密码锁时,采用自顶向下的设计方法。将整个系统分成几个子模块:输入输出模块,控制模块,按键设
6、置模块和 60s 计时器模块。 控制模块是整个程序的主要部分,采用状态循环的办法,以用户每按下一次按键为计量单位,划分状态,以实现各种功能。60s 计时器模块是完成 60s 没有按键则返回等待状态这一功能的主要模块。这个模块的核心思想是一个变量 numtime 计数。变量 numtime 的初始值为 0,在无报警为开锁的情况下,时钟每秒发出一个上升沿信号,计数一次,如有按键则 numtime 清零,否则计数到 60 即“111100”则返回信号 back 变为 1,返回等待状态。按键设置模块是将各种功能按键用高低电平赋值,便于调用。课课 程程 设设 计计 报报 告告- 4 -七:实验过程:七:
7、实验过程:1:源程序:输入输出模块:输入输出模块: ENTITY E_lock ISPORT(clk,user,admin,clear,enter,chgcode,res:IN STD_LOGIC;num:IN STD_LOGIC_VECTOR(1 DOWNTO 0);openlock:buffer std_logic;alarming,o_ua,o_chgcode,chgcode_ua:OUT STD_LOGIC;out_code6:out std_logic_vector(4 downto 0);END E_lock; ARCHITECTURE behave OF E_lock IS TY
8、PE STATES IS (ss,sw,s0,s1,s2,s3,s4,s5,s6,s7,s8); SIGNAL state:STATES; SIGNAL one_key,code0,code1,code2,code3,code4:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL user_code,admin_code:STD_LOGIC_VECTOR(19 DOWNTO 0); SIGNAL temp_code,old_code:STD_LOGIC_VECTOR(19 DOWNTO 0); SIGNAL new_ctime:STD_LOGIC_VECTOR(1 DOW
9、NTO 0); SIGNAL key:std_logic_vector(6 downto 0); SIGNAL alarm,inkey,ifnum,s_ua,chg_c,c_ua,back:std_logic; SIGNAL out_code:std_logic_vector(4 downto 0); SIGNAL numtime:std_logic_vector(5 downto 0); 状态控制模块:状态控制模块:BEGINtemp_codestate -S0 等待输入第 1 个密码时if back=1 thenstateif back=1 thenstateif back=1 thens
10、tateif back=1 thenstateif back=1 thenstateif back=1 thenstateif (s_ua=0 and temp_code=user_code) thenopenlockif back=1 thenstatem:=“00“;if back=1 thenstatealarmone_keyone_keyone_keyone_keyone_keyone_keyone_keyone_key=“1111“;END CASE;end if; END PROCESS INPUT; 60s60s 计时模块:计时模块:PROCESS(inkey,res,clk,a
11、larm,openlock) variable numtime:std_logic_vector(5 downto 0):=“000000“; BEGIN if(res=1) thennumtime:=“000000“;back=0; elsif (openlock=1 or inkey=1)or alarm=1) thenback=0;numtime:=“000000“; elsif (clkevent and clk=1)and inkey=0 and alarm=0 and openlock=0)thennumtime:=numtime+1;if numtime=“111100“ the
12、nback=1;numtime:=“000000“;课课 程程 设设 计计 报报 告告- 11 -end if; end if; end process ; END behave; 八:实验结果八:实验结果1 1:用户输入密码正确,锁打开用户输入密码正确,锁打开。TBTB 文件文件: clk=not clk after 5 ns;tb : PROCESSBEGIN res=1 after 6 ns, 0 after 9 ns; user=1 after 10 ns, 0 after 20 ns ; num(0)=0; num(1)=1 after 30 ns, 0 after 40 ns,1
13、after 50 ns, 0 after 60 ns,1 after 70 ns, 0 after 80 ns,1 after 90 ns, 0 after 100 ns,1 after 110 ns, 0 after 120 ns; enter=1 after 120 ns, 0 after 130 ns,1 after 140 ns,0 after 150 ns; wait; END PROCESS; 仿真图:仿真图:课课 程程 设设 计计 报报 告告- 12 -2:用户输入密码错误,按用户输入密码错误,按 clearclear 键可以取消上一个密码输入,再输入正键可以取消上一个密码输入,
14、再输入正确密码。确密码。TB:clk=not clk after 5 ns;tb : PROCESSBEGINres=1 after 6 ns, 0 after 9 ns; user=1 after 10 ns, 0 after 20 ns ; num(0)=0,1 after 110 ns, 0 after 120 ns; num(1)=1 after 30 ns, 0 after 40 ns,1 after 50 ns, 0 after 60 ns,1 after 70 ns, 0 after 80 ns,1 after 90 ns, 0 after 100 ns,1 after 150
15、ns, 0 after 160 ns; clear=0,1 after 130 ns, 0 after 140 ns; enter=1 after 170 ns, 0 after 180 ns,1 after 190 ns,0 after 200 ns; wait; END PROCESS; 仿真图:课课 程程 设设 计计 报报 告告- 13 -3 3:当用户三次密码输入错误的时候,当用户三次密码输入错误的时候,alaralarmingming 为为 1 1,此时,只,此时,只要管理员要管理员密码输入正确密码输入正确后后,按下,按下 clearclear 键键,alarmalarminging 为为 0 0,报警取消。,报警取消。TBTB:clk=not clk after 5 ns;tb : PROCESSBEGINres=1 after 6 ns, 0 after 9 ns;user=1 after 10 ns, 0 after 20 ns ;num(0)=0,1 after 110 ns, 0 after 120 ns,1 after 230 ns, 0 after 240 ns,1 after 35