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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

密码锁22.docx

1、密码锁22电子与信息工程学院课程设计报告( 2011 2012 学年 第 一 学期) 课程名称: EDA课程设计与实现 班 级:_ 学 号:_ 姓 名:_ 指导教师: _20101年 10 月课程设计题目: EDA课程设计与实现 实验目的:1.掌握VHDL语言的使用,学会用VHDL语言来编程解决实际问题;2.学会使用EDA开发软件设计小型综合电路,掌握仿真的技巧;3.学会应用开发系统实现硬件电路,检验电路的功能。实验要求:用VHDL语言设计一个密码锁,用波形仿真验证其功能后,实现到GW48实验系统。功能描述:用于模仿密码锁的工作过程。完成密码锁的核心控制功能。功能要求:设计一个密码锁,平时处于

2、等待状态。管理员可以设置或更改密码。如果不预置密码,密码缺省为“1234”。用户如果需要开锁,按相应的按键进入输入密码状态,输入4位密码,按下确定键后,若密码正确,锁打开;若密码错误,将提示密码错误,要求重新输入,三次输入都错误,将发出报警信号。报警后,只有管理员作相应的处理才能停止报警。用户输入密码时,若输入错误,在按下确定键之前,可以通过按取消键重新输入。正确开锁后,用户处理完毕后,按下确定键,系统回到等待状态。系统操作过程中,只要密码锁没有打开,如果60秒没有对系统操作,系统回到等待状态。要求密码在输入过程中被依次显示,即先输入的为密码的第一位,总是显示在最左边。用两个发光二极管模拟显示

3、,其中一个显示当前的工作模式,灭表示用户模式,亮表示管理员模式;另外一个指示锁的状态,灭表示锁处于锁定,亮表示锁被开启。用两个按键实现密码输入,Key1选择输入的是第几位,Key2输入密码数字。功能描述:初始状态:初次使用密码锁时,要先用Reset键初始化。初始状态下,用户密码为“1234”,管理员密码为“0000”。用户开锁:默认情况下,密码锁处于用户使用状态。如果当前为管理员状态,则按下user键回到用户状态。用户开锁时,输入四位数用户密码,可以从out_code6的输出状态确定密码输入状态。如输入错误则按下clear清除前一位输入。输入完毕后按enter,如果密码正确,则开锁,否则重新输

4、入密码。开锁后再次按下enter键则关锁,回到等待状态。三次密码输入错误,警报器alarming为1。要管理员输入管理员密码解除警报。此时哪怕用户再输对密码也没用。管理员解除警报:当用户三次密码输入错误的时候,alarming为1,此时,只要管理员密码输入正确后,按下clear键,alarming为0,报警取消。管理员修改密码:在非警报和为开锁状态下,任何时候按admin键进入管理员状态。按chgcode选择修改密码,先选择修改的是用户密码还是管理员密码。修改用户密码则按user键,修改管理员密码则按admin键。然后分别输入旧密码,新密码,新密码要输入两次。旧密码与所要修改的密码对应。如旧密

5、码输入错误,则无法修改;当验证不成功即两次新密码不相同时,修改密码失败。返回等待状态。成功后也返回等待状态。定时返回:用户在未开锁状态下,60s没有按键输入,则返回等待状态,但不包括alarming状态。只要是alarming,则只有管理输入管理员密码才能解锁并按下clear消除警报。 Verilog程序源代码:module mimasuo(clk,reset,user,admin,clear,chgcode,enter,key1,key2,led1,led2,alarming); input clk,reset,user,admin,chgcode,enter,clear; input ke

6、y1,key2; output led1,led2,alarming; wire clk,reset,user,sdmin,chgcode,enter; wire key1,key2; reg3:0 count1,count2; reg led1,led2,alarming; reg15:0ram_user; reg15:0new_ram_user1,new_ram_user2; reg15:0ram_admin,new_ram_admin1,new_ram_admin2; reg2:0try_count,try_count2; parameter2:0 user_state=3b000, a

7、dmin_state=3b001, wait_state=3b010, alarming_state=3b011, unclock_state=3b100, clock_state=3b101; reg 15:0user_mima,admin_mima; reg 15:0current_state,next_state,sub_current_state,sub_next_state; reg 5:0numtime; reg back; always(negedge reset) begin if(reset) admin_mima=16b0; user_mima=16b00010010001

8、10100; alarming=1b0; end always(*) begin if(user=1b1) current_state=user_state; if(admin=1b1) current_state=admin_state; end always(*) 状态转换 begin case(current_state) user_state:begin led1=1b0; if(admin=1b1) next_state=admin_state; if(admin=1b0) next_state=user_state; if(ram_user=user_mima&enter=1b1)

9、 next_state=clock_state; if(ram_user!=user_mima|enter!=1b1) next_state=unclock_state; else next_state=user_state; end admin_state:begin led1=1b1; if(user=1b1) next_state=user_state; if(new_ram_user1=new_ram_user2 & enter=1b1) next_state=wait_state; if(ram_user!=user_mima & enter=1b1)| (new_ram_user1

10、!=new_ram_user2 & enter=1b1) next_state=wait_state; if(new_ram_admin1=new_ram_admin2) & enter=1b1) next_state=wait_state; if(ram_admin!=admin_mima& enter=1b1)|(new_ram_admin1!=new_ram_admin2 & enter=1b1) next_state=wait_state; else next_state=admin_state; end alarming_state:begin alarming=1b1; if(ad

11、min_mima=ram_admin & enter=1b1 & clear=1b1) alarming=1b0; next_state=admin_state; if(admin_mima!=ram_admin & enter=1b1)| clear!=1b1) alarming=1b1; next_state=alarming_state; end unclock_state:begin if(back=1b1) next_state=wait_state; else if(back=1b0) next_state=unclock_state; end clock_state:begin

12、if(enter=1b1) led2=1b0; next_state=wait_state; if(admin=1b1|enter!=1b1) next_state=admin_state; end wait_state:begin led2=1b0; end default: begin next_state=user_state; end endcase end always(posedge clk or negedge reset) begin if(reset) current_state=user_state; else current_state=next_state; end p

13、arameter 2:0 one=3b0, two=3b1, three=3b10, four=3b011, finish=3b100; always(*) /put in user_mima begin if(current_state=user_state|current_state=admin_state) case(sub_current_state) one:begin if(clear=1b1) sub_next_state=one; else sub_next_state=two; end two:begin if(clear=1b1) sub_next_state=two; e

14、lse sub_next_state=three; end three:begin if(clear=1b1) sub_next_state=three; else sub_next_state=four; end four: begin if(clear=1b1) sub_next_state=four; else sub_next_state=finish; end finish:begin sub_next_state=finish; end default: sub_next_state=sub_current_state; endcase end always(posedge clk

15、 or negedge reset) begin if(reset) sub_current_state=one; else sub_current_state=next_state; end always(posedge enter) begin if(reset) try_count=2b0; else if(current_state=user_state) begin if(user_mima!=ram_user & enter=1b1) try_count=try_count+1b1; else if(current_state=alarming_state) try_count=2

16、b0; else try_count=try_count; end else try_count=2b0; end always(posedge enter or negedge reset) /错误密码计数 begin if(reset) alarming=1b0; else if(try_count=2b10 & try_count2=2b10) alarming=1b1; next_state=alarming_state; end always( negedge reset) /输入用户密码 begin if(reset) ram_user=16b0001001000110100; e

17、lse if(sub_current_state=one) if(count1=4b0&user=1b1) ram_user15:12=count2; else if(count1=4b1&user=1b1) ram_user11:8=count2; else if(count1=4b10&user=1b1) ram_user7:4=count2; else if(count1=4b100&user=1b1) ram_user3:0=count2; end always( negedge reset) /输入管理员密码 begin if(reset) ram_admin=16b0; else

18、if(count1=4b1&admin=1b1) ram_admin15:12=count2; else if(count1=4b10&admin=1b1) ram_admin11:8=count2; else if(count1=4b10&admin=1b1) ram_admin7:4=count2; else if(count1=4b11&admin=1b1) ram_admin3:0=count2; end always(posedge clk or negedge reset) /计时模块 begin if(reset) numtime=6b0; else if(numtime=6b1

19、11100) numtime=6b0; else if(numtime6b111100) numtime=numtime+1b1; end always(posedge clk or negedge reset) begin if(reset|numtime6b111100) back=1b0; else back=1b1; end always(*) begin if(reset) led2=1b0; else if(current_state=user_state|current_state=admin_state) if(ram_user=user_mima&enter=1b1)|(ra

20、m_admin=admin_mima&enter=1b1) led2=1b1; else led2=1b0; end always(*) begin if(current_state=admin_state) if(chgcode=1b1) led2=1b0; /修改密码 if(user=1b1) if(user_mima=ram_user) if(count1=4b0) new_ram_user115:12=count2; else if(count1=4b1) new_ram_user111:8=count2; else if(count1=4b10) new_ram_user17:4=c

21、ount2; else if(count1=4b11) new_ram_user13:0=count2; if(count1=4b0) new_ram_user215:12=count2; else if(count1=4b1) new_ram_user211:8=count2; else if(count1=4b10) new_ram_user27:4=count2; else if(count1=4b11) new_ram_user23:0=count2; if(new_ram_user1=new_ram_user2 & enter=1b1) ram_user=new_ram_user2;

22、 led2=1b0; if(ram_user!=user_mima& enter=1b1)|(new_ram_user1!=new_ram_user2 & enter=1b1) ram_user=ram_user; if(admin=1b1) if(admin_mima=ram_admin) if(count1=4b0) new_ram_admin115:12=count2; else if(count1=4b1) new_ram_admin111:8=count2; else if(count1=4b10) new_ram_admin17:4=count2; else if(count1=4

23、b11) new_ram_admin13:0=count2; if(count1=4b0) new_ram_admin215:12=count2; else if(count1=4b1) new_ram_admin211:8=count2; else if(count1=4b10) new_ram_admin27:4=count2; else if(count1=4b1) new_ram_admin23:0=count2; if(new_ram_admin1=new_ram_admin2) ram_admin=new_ram_admin2; if(ram_admin!=admin_mima|n

24、ew_ram_admin1!=new_ram_admin2) ram_admin=ram_admin; end always(posedge key1 or negedge reset) 设置Key1,Key2的按键模式beginif(reset) count1=4b0;else if(count1=4b11) count1=4b0; else if(count14b11&key1=1b1) count1=count1+1b1; end always(posedge key2 or negedge reset) begin if(reset) count2=4b0; else if(key2=

25、4b1) count2=count2+1b1; end always(posedge enter or negedge reset)beginif(reset)try_count2=1b0;else if(try_count2=2b10) try_count2=2b0; else if(try_count22b10 & enter=1b1) try_count2=try_count2+1b1; end endmodule Tb测试文件程序:timescale 1ns/1ps module tbmimasuo; reg reset,clk,user,admin,chgcode,enter,cle

26、ar;reg key1,key2; wire led1,led2,alarming;always #100 clk=clk;initial begin clk=1b1; user=1b0; key1=4b0; key2=4b0; admin=1b0; clear=1b0; chgcode=1b0; enter=1b0; reset=1b0;#50 reset=1b1; admin=1b1; chgcode=1b1; admin=1b1; #50 key1=1b1;#10 key1=1b0; key2=1b0;#150 key1=1b1;#10 key1=1b0;#50 key1=1b1;#10

27、 key1=1b0; key2=1b1; #10 key2=1b0; #50 key1=1b1;#10 key1=1b0; key2=1b0; #50 key1=1b1;#10 key1=1b0;#50 key1=1b1;#10 key1=1b0;#100 key1=1b1;#10 key1=1b0; key2=1b0;#50 key1=1b1;#10 key1=1b0;#50 key1=1b1;#10 key1=1b0;#50 key1=1b1;#10 key1=1b0; key2=1b0;#10 enter=1b1;#150 enter=1b0; #50 key1=1b1;#10 key1

28、=1b0; key2=1b1;#10 key2=1b0; #150 key1=1b1;#10 key1=1b0;#50 key1=1b1;#10 key1=1b0; key2=1b1;#10 key2=1b0; #50 key1=1b1;#10 key1=1b0;#50 key1=1b1;#10 key1=1b0; #50 key1=1b1;#10 key1=1b0;#50 key2=1b1;#10 key2=1b0;#100 key1=1b1;#10 key1=1b0; key1=1b1;#10 key1=1b0; #50 key1=1b1;#10 key1=1b0;#50 key1=1b1;#10 key1=1b0;#50 key1=1b1;#10 key1=1b0;#50 key2=1b1;#10 key2

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2