




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、华南师大学实验报告学生 : 小澎学 号 : 20103100202_专 业 : 通信工程 年级班级 : 11 级电通 6C 课程名称 : 可编程数字系统 实验项目 : VHDL 设计一密码锁试验时间 : 2013 年 05 月 1指导老师 : 寿廷、课程设计目的熟悉 EDA工具,掌握用 VHDL语言进行数字系统设计的基本方法和流程,提高工程 设计实践能力。二、设计任务设计一密码锁,用 VHDL语言描述,用 QuartusII 工具编译和综合,并在实验板上 实现,撰写实验报告。数字锁即电子密码锁,锁有预置密码,如果输入代码与锁密码一致,锁被打开;否 则,应封闭开锁电路,若多次输入错误密码,应发出
2、报警信号。三、功能要求与技术指标本设计设计一个 4 位数字锁,并验证其操作。1、基本功能:(1 )开锁密码为 4 位十进制数,通过按钮输入密码,输入的密码在 4 个数码管 上显示,若与锁预置的密码一致,输出开锁信号(以点亮一个LED灯表示开锁)。(2)按钮开关输入须消抖处理。2、扩展功能:( 1)用户可以设置锁的密码;( 2)若输入密码三次不正确,输出报警信号,报警信号可以通过闪烁LED或某个数码管上小数点指示。(3)设置一个复位按键,忘记密码后可通过该复位按键恢复出厂原始密码,如原 始密码为“ 1234”;(4)其它实用功能。动态扫描模按键消抖模密码设置模块数码管移位模块数码管显示模四、设计
3、原理在数字电路设计中, 自顶向下设计方法的主要思想是对数字系统进行划分, 将复杂的设 计原理简化为相对简单的模块设计, 不同的模块用来完成数字系统中某一部分的具体功 能。此密码锁的设计可以分为以下几个模块:分 频 模 块时 钟 模 块数码管计数模块密码锁原理框图五、系统分析1、根据原理框图:系统大致可分为时钟模块,显示模块,控制模块。时钟模块:密码锁的工作时钟由外部晶振提供,时钟频率为50Mhz。对 CLK进行分频输出三路时钟 CLK1Khz,CLK1,CLK2,频率分别为 1Khz,5hz,1hz。由此,时钟分频 模块原理框图如下:CLK1KhzCLK时钟CLK1模块CLK2显示模块:数码管
4、动态扫描模块以及数码管显示模块的时钟频率分别由 CLK1Khz和 CLK提供。 数码管动态扫描模块的原理是利用人体的视觉暂留特性,只要每秒扫描次数大于 25 次,就感觉数码管一直在亮。数码管显示模块由四个数码管分别显示四位十 进制密码。四个数码管为共阳极连接,其中一段输入低电平则点亮,否则不亮;且由各 自位选信号控制,被选通数码管则显示数据,其余关闭。控制模块:根据密码锁的功能可划分为以下五个模块。按键消抖模块:消抖是为了避免在按键按下或是抬起时电平剧烈抖动带来的影响。 一般来说,软件消抖的方法是不断检测按键值,直到按键值稳定。实现方法:假设未按 键时输入 1,按键后输入为 0,抖动时不定。可
5、以做以下检测:检测到按键输入为0 之后,开始计数,延时 10ms,再次检测,如果按键还为 0,那么就认为有按键输入。延时 的 10ms恰好避开了抖动期。数码管移位模块:当 CLK时钟上升沿到来时,设置按键 S3 对数码管进行移位控制。 通过闪烁的方式显示当前其控制的数码管位置。数码管计数模块:当 CLK时钟上升沿到来时,设置按键 S2 对数码管进行加数控制。密码检验模块:该模块的作用是将输入的密码跟程序中预置的密码进行对比,如果 一样,则密码锁开锁。在这里值得注意的是设“ 1111”为初始密码,如果修改密码后但 是又忘记了密码,重新下载或者按复位键( rst )之后只要输入的密码为“ 1111
6、”则都 可通过密码锁。 此模块是整个设计的核心 , 它实现密码锁的逻辑功能。 在任何时候按动 密码初始化按键密码设置为程序初始化密码值“1111”代码为 4 位二进制数 , 当输入代码的位数和位值与锁给定的密码一致 , 且按规定程序开锁时 , 方可开锁 , 并点亮开 锁指示灯且数码管显示“ PASS”字样 。否则 , 系统进入 “错误”状态 , 并闪烁 LED发 出报警信号,且数码管显示“ FFFF”字样。密码设置模块: 为防止任意进行密码修改 , 必须在正确输入密码后 , 才能重新设置 密码。输入正确密码后 , 锁打开 , 同时 , 密码修改控制信号 M置高电平 , 就可直接进行 修改密码的
7、操作。 修改密码实质就是用输入的新密码去取代原来的旧密码, 按确定键 , 存储新密码。 此功能设置方便 , 性好 。六、程序设计LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;entity mimasuo isport(clk:in std_logic;start,num,keyr,set,rst:in std_logic; display:out std_logic_vector(7 downto 0); seg:out std_logi
8、c_vector(3 downto 0); led:out std_logic);end mimasuo;architecture lock of mimasuo issignalt2:integer range 0 to 50000;signalt3:integer range 1 to 10000000:=1;signalt4:integer range 1 to 50000000:=1;signal clk1khz:std_logic;signal clk1,clk2:std_logic;signal k:integer range 0 to 3:=0;signal m:integer
9、range 0 to 1;signal count1:integer range 0 to 1:=0;signal count2:integer range 0 to 3;signal count3:integer range 0 to 100:=0;signal count4:integer range 0 to 1:=0;signal numcnt,keyrcnt,startcnt,setcnt,rstcnt:integer range 0 to 50000000;signal numfilt,keyrfilt,startfilt,setfilt,rstfilt:std_logic;sig
10、nal a,b,c,d:integer range 0 to 9;signal a1,b1,c1,d1:integer range 0 to 9:=1;begin 分频模块process(clk)beginif rising_edge(clk) thenift2=50000 thent2=0;clk1khz=1;elset2=cnt2+1;clk1khz=0;end if;end if;end process;process(clk)beginif rising_edge(clk)then产生周期为 0.2s 的时钟ift3=10000000 then t3=1; elset3=cnt3+1;
11、 end if;ift35000000 thenclk1=1;else clk1=0; end if;end if;end process; 产生周期为 1s 的时钟process(clk)beginif rising_edge(clk)thenift4=50000000 then t4=1; elset4=cnt4+1; end if;ift425000000 then clk2=1;else clk2=0; end if;end if;end process; 动态扫描process(clk1khz)beginif rising_edge(clk1khz) then if k=3 then
12、 k=0;elseksegsegsegsegsegsegsegsegcase k iswhen 0=if clk2=1then seg=1111;elsesegsegsegsegcase k iswhen 1=if clk2=1then seg=1111;elsesegsegsegsegcase k iswhen 2=if clk2=1then seg=1111;elsesegsegsegsegcase k iswhen 3=if clk2=1then seg=1111;elsesegsegsegseg=0111; -3end case;end case;end if;end if;end p
13、rocess; 移位process (clk, keyrfilt) beginif rising_edge(clk) thenif (keyrfilt = 1) thenif count2 = 3 thencount2 = 0;elsecount2 = count2+ 1;end if;end if;end if;end process;计数process(clk,numfilt)beginif rising_edge(clk) thenif numfilt=1 thenif count2=0 thenif a=9 thena=0;else a=a+1;end if;end if;if cou
14、nt2=1 thenif b=9 thenb=0;else b=b+1;end if;end if;if count2=2 thenif c=9 thenc=0;else c=c+1;end if;end if;if count2=3 thenif d=9 thend=0;else d display display display = 10011001; - 4if count1=1 thenif k=0 thendisplay=10001100;end if;if k=1 thendisplay=10001000;end if;if k=2 thendisplay=10010010;end
15、 if;if k=3 then display display display display displaywhen 7 = displaywhen 8 = displaywhen 9 = display end case;end if;if k=1 thencase b iswhen 0 = displaywhen 1 = displaywhen 2 = displaywhen 3 = displaywhen 4 = displaywhen 5 = displaywhen 6 = displaywhen 7 = displaywhen 8 = displaywhen 9 = display
16、 end case;end if;if k=2 thencase c iswhen 0 = displaywhen 1 = displaywhen 2 = displaywhen 3 = displaywhen 4 = display= 10000010; - 6= 11111000; - 7= 10000000; - 8= 10010000; - 9-hgfedcba= 11000000; - 0= 11111001; - 1= 10100100; - 2= 10110000; - 3= 10011001; - 4= 10010010; - 5= 10000010; - 6= 1111100
17、0; - 7= 10000000; - 8= 10010000; - 9-hgfedcba= 11000000; - 0= 11111001; - 1= 10100100; - 2= 10110000; - 3 display display display display display display display display display display display display display display display = 10010000; - 9 end case;end if;end if;else if m=0 and count3=3 then 连续错误三
18、次,则显示FFFFif k=0 then display=10001110;end if;if k=1 thendisplay=10001110;end if;if k=2 thendisplay=10001110; end if;if k=3 then display display display display display display display display display display display display display display display display display display displaywhen 8 = displaywhen
19、9 = display end case;end if;if k=2 thencase c iswhen 0 = displaywhen 1 = displaywhen 2 = displaywhen 3 = displaywhen 4 = displaywhen 5 = displaywhen 6 = displaywhen 7 = displaywhen 8 = displaywhen 9 = display end case;end if;if k=3 thencase d iswhen 0 = displaywhen 1 = displaywhen 2 = displaywhen 3
20、= display= 11111000; - 7= 10000000; - 8= 10010000; - 9-hgfedcba= 11000000; - 0= 11111001; - 1= 10100100; - 2= 10110000; - 3= 10011001; - 4= 10010010; - 5= 10000010; - 6= 11111000; - 7= 10000000; - 8= 10010000; - 9-hgfedcba= 11000000; - 0= 11111001; - 1= 10100100; - 2= 10110000; - 3= 10011001; - 4 di
21、splaywhen 5 = displaywhen 6 = display display display display = 10010000; - 9 end case;end if;end if;end if;end process; 设置密码process(clk,setfilt)beginif rising_edge(clk)thenif m=1 then- 密码正确前提下,才可按下 set ,修改密码if setfilt=1 thena1=a;b1=b;c1=c;d1=d;end if;end if;if rstfilt=1 then 按下 rst ,恢复出厂密码“ 1111”a1
22、=1;b1=1;c1=1;d1=1;end if;end if;end process;码校验process(clk,startfilt)beginif rising_edge(clk) thenif startfilt = 1 then 输入密码“ abcd ”后,按下 start ,与设置的密码 “ a1b1c1d1”比较if(a=a1 and b=b1 and c=c1 and d=d1)thenled=1; 若密码正确, 则点亮 ledcount3=0;m=1;if count1=1 thencount1=0;else count1=count1+1;end if;else count
23、3=count3+1; 否则, led 不led=0;m2 and m=0) thenled=clk1; - 若连续错误三次, 则发出 led 闪烁警 报 end if;end process;end if;键消抖process (num)constant N :integer := 5000000;beginif clkevent and clk = 1 thenif num = 0 thenif numcnt /= N thennumcnt = numcnt + 1;end if;if numcnt = N-1 thennumfilt = 1;elsenumfilt = 0; end if
24、;elsenumcnt = 0;end if;end if;end process;process (keyr)constant N :integer := 5000000; beginif clkevent and clk = 1 thenif keyr = 0 thenif keyrcnt /= N thenkeyrcnt = keyrcnt + 1;if keyrcnt = N-1 then keyrfilt = 1;elsekeyrfilt = 0; end if;elsekeyrcnt = 0;end if;end if;end process;process (start)cons
25、tant N :integer := 5000000;beginif clkevent and clk = 1 thenif start = 0 thenif startcnt /= N thenstartcnt = startcnt + 1;end if;if startcnt = N-1 thenstartfilt = 1;elsestartfilt = 0; end if;elsestartcnt = 0;end if;end if;process (set)constant N :integer := 5000000;beginif clkevent and clk = 1 theni
26、f set = 0 thenif setcnt /= N thensetcnt = setcnt + 1;end if;if setcnt = N-1 thensetfilt = 1;elsesetfilt = 0; end if;elsesetcnt = 0;end if;end if;end process;process (rst)constant N :integer := 5000000;beginif clkevent and clk = 1 thenif rst = 0 thenif rstcnt /= N thenrstcnt = rstcnt + 1; end if;if r
27、stcnt = N-1 thenrstfilt = 1;elserstfilt = 0;end if;elserstcnt = 0;end if;end if;end process;end lock;七、仿真 / 实验结果软件仿真 :编译成功后进行仿真。首先建立波形文件。波形文件 lock. scf 建好并存盘后 , 选择菜单 “new” “Vector Waveform File ”, 启动仿真操 作 , 结束后观察仿真波形。 本设计中 , 仿真波形如图所示。 当给初始密码输入信 号 LC 一个低电平时 , 就将程序预先设定的密码 ( “ 0000” ) 装入 lock 中 。 按下 reset 后, 系统复位 , 处于输入密码状态。输入的开锁密码串行顺序装 入 , 。密码输入完毕后 , 比较输入的密码 是否等于预先设定的密码 ,若相等 , 锁开启。如图所示实验结果: 在不断调试并改正错误之后得到能正确运行的程序, 运行密码初始状态密码正确状态密码错误三次 报警状态设置密码状态八、结论和分析1、四位十进制数字密码锁设计基于 VHDL语言,首先得弄懂设计原理,再通过对 VHDL 语言的学习之后编程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园幼小衔接教学计划
- 多元化班级评价体系建设计划
- 轮训模式下的艺术教师发展计划
- 共享服务模式下的会计管理计划
- 高效会议管理的总结与方法计划
- 打造水务行业的智能未来计划
- 彩铃呼叫流程
- 《长方体正方体的认识》(教学设计)-2023-2024学年五年级上册数学西师大版
- 残疾人托养服务投标方案(技术方案)
- 《猴子的烦恼》教学设计-2024-2025学年三年级下册数学北师大版
- 2025年辽宁省盘锦市大洼区招聘招商人员30人高频重点模拟试卷提升(共500题附带答案详解)
- 2025年安徽粮食工程职业学院单招综合素质考试题库完整
- 常见意外伤害的处理课件
- 第八章运动和力单元试卷 (含答案) 2024-2025学年人教版物理八年级下
- 2025年中央一号文件高频重点考试题库150题(含答案解析)
- 风电项目电网接入系统可行性研究报告编制服务方案投标文件(技术方案)
- 2024人教版新教材初中地理七年级下册内容解读课件(深度)
- 2025年辽宁医药职业学院高职单招职业适应性测试近5年常考版参考题库含答案解析
- 2023-2028年中国油画行业市场发展现状及投资规划建议报告
- 100以内加减法练习100题(50套)-可直接打印
- 2024年09月2024兴业银行总行岗测评笔试历年参考题库附带答案详解
评论
0/150
提交评论