数字逻辑电路实验--基于有限状态机的密码锁

合集下载

数电实验全过程,保密锁,数字逻辑,组合逻辑

数电实验全过程,保密锁,数字逻辑,组合逻辑

保密锁载入步骤一、编写代码1、File——New project Wizard——Next——注意项目不要建立在altera默认位置,最好建立在U盘上,以免重启时丢失(e:\myproject ——LED_BLINK——LED_BLINK)——Filename空,选next——选择器件(EP2C35F672C6)——Finish2、File——new——Block diagram/schematic——OK3、File——save as(不要做任何改动)4、在图纸上双击鼠标(pin或logic文件夹选元件),先放一个输入按键,选OK——双击管脚,把pin_name修改为input………………然后连线(最后得出如实验指导书62页图3—11所示)5、逻辑图二、编译主窗口“Processing”菜单的“Start Compilation”命令,或者在主窗口上直接用鼠标左键点击“开始编译”命令按钮三、分配管脚Assignmaent——pin planner——A0选择管脚PIN_N25,A1选择管脚PIN_N26,A2选择管脚PIN_P26,F选择管脚PIN_AE22,G选择管脚PIN_AE23四、再编译一次五、仿真1、File——new——V ector Waveform File——把文件名改成与project 名字一致2、导入仿真的信号量:右键——Insert——Node or Bus——Node Finder——List——将两个信号量导入右边——OK——OK——Edit ——Endtime——选择时间长度为1秒——设定input输入的波形,选择波形仿真按钮,得出报告六、下载设计完成后,将计算机并口连接并口延长线,并口延长线连接ByteBlasterll Cable的一端,ByteBlasterll Cable的另一端通过10pin小电缆连接开发板的JTAG口,开发板上电……在Quartusll IDE里面选择tools——programmer——mode栏里选择JTAG,在应文件的program config打勾——点击start开始下载,下载完毕后提示框提示成功,这时按SW0,LEDR0发光,说明程序运行了。

数字逻辑电路-电子密码锁

数字逻辑电路-电子密码锁

电子密码锁【用途和摘要】本文的电子密码锁利用数字逻辑电路,实现对门的电子控制,并且有各种附加电路保证电路能够安全工作,具有极高的安全系数。

【本文关键词】电子密码锁、电压比较器、555单稳态电路、计数器、JK触发器、UPS电源。

一、历史背景随着社会的发展,人们越来越重视安全的问题,如学校,公司,企事业单位等,需要保密的文件越来越多,而传统的锁而又无法提供可靠有效的保证,而电子密码锁则正好满足了人们这一需要,即将成为未来的主流选择。

二、总体方案设计1、设计思路本设计共设了9个用户输入键,其中只有4个是有效的密码按键,其它的都是干扰按键,若按下干扰键,键盘输入电路自动清零,原先输入的密码无效,需要重新输入;如果用户输入密码的时间超过40秒(一般情况下,用户不会超过40秒,若用户觉得不便,还可以修改)电路将报警80秒,若电路连续报警三次,电路将锁定键盘5分钟,防止他人的非法操作。

2、总体方框图三、设计原理分析电路由两大部分组成:密码锁电路和备用电源(UPS),其中设置UPS电源是为了防止因为停电造成的密码锁电路失效,使用户免遭麻烦。

密码锁电路包含:键盘输入、密码修改、密码检测、开锁电路、执行电路、报警电路、键盘输....次数锁定电路。

1、键盘输入、密码修改、密码检测、开锁及执行电路 .其电路如下图3-1-1所示:图3-1-1 键盘输入、密码修改、密码检测、开锁、执行电路开关K1~K9是用户的输入密码的键盘,用户可以通过开关输入密码,开关两端的电容是为了提高开关速度,电路先自动将IC1~IC4清零,由报警电路送来的清零信号经C25送到T11基极,使T11导通,其集电极输出低电平,送往IC1~IC4,实现清零。

密码修改电路由双刀双掷开关S1~S4组成(如图3-1-2所示), 它是利用开关切换的原理实现密码的修改。

例如要设定密码为1458,可以拨动开关S1向左,S2向右,S3向左,S4向右,即可实现密码的修改,由于输入的密码要经过S1~S4的选择,也就实现了密码的校验。

数字逻辑电路课程设计-电子密码锁

数字逻辑电路课程设计-电子密码锁

数字逻辑电路课程计课题:电子密码锁姓名:班级:学号:成绩:指导教师:开课时间:2014-2015学年第2学期2007年 6 月 20日电子密码锁摘要:采用逻辑门电路设计电子密码锁,阐述了其工作原理,给出了具体的电路原理图。

该密码锁具有密码预置功能,保密性强,误码报警,并且报警时间可以设定,同时用数码管显示出报警时间。

密码正确时驱动继电器控制开锁指示灯,误码时报警信号由蜂鸣器发出,声音为间歇式鸣笛。

采用自行设计的5V稳压电源供电,具有耗电省等特点。

当密码正确时密码锁可以被打开,绿色二极管亮代表密码正确,锁可以打开。

密码不正确时,红色二极管被点亮,同时蜂鸣器鸣笛5秒,数码管显示5秒计时;计时结束时,20秒计时开始。

关键词:电子密码锁;数字电路;预置密码;误码报警Using logic gate design of electronic combination lock, this paper expounds its working principle, gives the specific circuit principle diagram of the combination lock with password preset function, strong confidentiality, error alarm, and alarm time can be set, at the same time using digital tube display the alarm time. Password correctly drive relay control lamp, when the error alarm signal by a buzzer, voice for intermittent ing self-designed 5 v regulated power supply, has the characteristics of power saving electricity. When the correct password combination lock can be opened, the green led light on behalf of the correct password, the lock can be opened. Password is not correct, the red leds lit up, at the same time a buzzer honking 5 seconds, the digital tube display 5 seconds time, at the end of the timing, 20 seconds timer starts.Keywords: electronic password ,combination lock,digital circuit preset ,Error alarm目录1、设计背景 (4)2、设计方案 (5)2.1原理框图 (5)2.2总体思想 (5)3、方案实施 (7)3.1.1密码输入 (7)3.1.2密码存储 (8)3.1.3比较电路 (8)3.1.4 5秒计时器 (9)3.1.5 20秒计时器 (10)3.2电路仿真 (11)4、结果与结论 (12)5、收获与致谢 (14)6、参考文献 (15)1、设计背景1.1背景及其发展前景随着人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。

利用数字电路实现的电子密码锁

利用数字电路实现的电子密码锁

3 密码检测与修改电路
3 . 1 元器件 介绍 7 4 L S 8 5 D 一一 数值 比较器 7 4 LS 8 5 D为4 位数 值 比较器 ,共 有5 4 / 7 4 8 5 、5 4 / 7 4 S 8 5 、 5 4 / 7 4 L S 8 5 _  ̄种线路结构形式 。 7 4 L S 8 5 D 可进行二进制码和B C D 码 的比较,对两个4 位字的比 较的结果由三个输 出端 ( F A > B,F A = B , F A < B)输 出 将若干个数 值 比较器级联就可比较较长的字,此时低级位的F A > B , F ቤተ መጻሕፍቲ ባይዱ = B , F A < B 连接到高级位相应的输入A > B 、A = B 、A < B , 并使低级位的A = B 为高 电平 。由密码输入 电路和密码设定 电路输出的信号 ,分别输入 到 A、B 两组管脚中,在7 4 L S 8 5 D中实现信号的 比较 ,选择O A E QB 管 脚输出,当A、B 两组输入完全相 同时,输 出1 ,否则为0 ,从而对 密码进行比较并输出开关控制及输出电路,进行处理。
2 _ 2 原 理
0 引言
传统 的机械 锁安全性能较低, 电子密码锁不仅保密 性好,其 安全指数 远超机械锁 。此文 以键 盘式 电子密 码锁为例 来分析利 用数字 电路实现的密码锁 。
1 设计原理总图
本 电路经过7 4 L S 8 5 D验证密码后进 入后续计 数器当 中开 始 计数 。7 4 L S 1 6 0 是十 进制 加法计数器 ,7 4 L S 1 6 1 是十六进 制加 法 计数器 ,他们 的C P 控端接 外来时钟脉冲C P ,进位输 出C,在 做 两个芯片级联 时,进位 输出C 接高位的7 4 L S 1 6 0 的工作状 态控 制 端C E P 和C E T ,当C E P 和C E T 端 同为 高电平 时,高位 计数器才可 以计数 。但一般人为输入密码 时间为1 5 s ,为 了防止他人 的非法 操作 ,设计 限时电路可 以在 1 5 s 以后开始报警并将其 电路 锁定 , 这样就使得密码锁 的安全系数大大提高。 密码 错误信 号发出后不经 过限时 电路 直接进入报 警锁定 电 路,而输入密码时间超过 1 5 s ,就算密码正确也会进入报警锁定 电 路。5 5 5 定时器作为脉冲源使得两个计数器正常工作,可 以使得输 入时间控制在1 5 s 以内,这样限时电路的功能就体现出来了。

数电实验报告电子密码锁设计

数电实验报告电子密码锁设计

数电实验报告电子密码锁设计
实验报告
实验十四电子密码锁设计与实现
3.4.1 实验目的与设计要求
目的:(1)学习4位数值比较器CC14585和74LS85的功能。

(2)掌握电子密码锁的工作原理及综合实验技能。

要求:(1)电路可以由主持人预置16种不同的开锁密码,并能够更换。

(2)当输入和预置开锁密码相同时,发出开锁信号(LED 显示)。

(3)如果连续三次输入错误密码即产生报警信号。

报警信号用声光报警电路指示(蜂鸣器等)。

(4)具备能够取消报警状态的功能。

3.4.2 实验仪器与器件
直流稳压电源一台;数字实验箱一个;计算机一台。

74LS75锁存器、74LS00、74LS10、74LS20、4位数值比较器CC14585或74LS85。

3.4.3 实验原理框图
设计思路:用74LS194四位寄存器作锁存电路,74LS75四位锁密




入锁存电路密码比较电路密码锁存装置计数器确认按钮
报警电路开锁电路确认按钮
密码输入
存器作密码锁存装置,4位数值比较器4585作密码比较电路,74LS160作计数器。

当连续三次输入错误密码即产生报警信号同时锁住,此时再输入正确密码不产生开锁信号。

仿真图如下:。

数电实验—密码锁报告

数电实验—密码锁报告

电子密码锁实验报告姜岳松一、实验目的1.了解电子密码锁的原理,学会用硬件描述语言来建立电子密码锁的模块。

2.利用该软件进行可编程逻辑器件设计,完成电子密码锁的逻辑仿真功能。

3.使用编译器将设计实现,下载到JDEE—10实验箱上进行调试和验证所设计的电子密码锁的功能。

二、实验器材1.Pentium—Ⅲ计算机一台;2.JDEE—10实验箱一只;三、实验要求设计一个电子密码锁,实现以下的功能:用8个拨码开关分别代表预设的密码和输入待验证的密码。

一个微动开关做为触发判断。

判断结果通过点阵和蜂鸣器表示。

正确的话,所有点阵的绿色灯点亮,同时蜂鸣发出“di”声。

否则,点阵显示红色,同时蜂鸣“do”音。

四、实验方案及设计过程1.第一部是实验电子密码锁的基本功能,该程序的主体是一个密码判断程序:首先是将输入的预设的密码和待验证密码用数组储存起来进行比较,比较结果通过IF语句,相同则触动绿色点阵和蜂鸣器的一个频率,不同则触动红色点阵和蜂鸣器的另一个频率2.开始丰富附肢程序:两种不同的响声需要两个计数器来产生不同的频率;要有一个上升沿保证颜色显示程序和密码判断程序以一个高频率运行,需要一个计数器;一个密码验证开关,由微动开关实现,在密码验证开关触动后能够保持一个高电位,这样则需要一个由D触发器构成的锁存器来锁定高电平。

3.点阵的显示:点阵的显示控制,由于显示OK的原代码之前已经练习过,然后设计好NO的字符,可以直接完成拓展之一。

此部分不需要详述。

五、拓展功能设计拓展主要是为了实现八位密码,这样所有的拨码开关都要用上,所以还需要两个微动开关来确定密码设定和输入。

同时,微动开关启动后,能够将拨码开关的密码储存到数组A[7..0]和B[7..0]中,待判断开关启动后调用,所以要用寄存器储存起来,所以声明一个串进串出的寄存器。

同时对主程序的判断器的输入变量进行修改。

六、顶层文件和源程序文本文件顶层文件文本:SUBDESIGN ECLOCK ( a[7..0],b[7..0]:input;key: input;freq1,freq2: input;red: output;green: output;spk: output;)begindefaultsred=gnd; green=gnd;spk=gnd;end defaults;if key thenif a[]==b[] then red=vcc;spk=freq1;else green=vcc;spk=freq2;end if;end if;end;点阵显示文本:subdesign leddiaplay( green,red: input;clk[2..0]: input;row[8..1],colred[16..1],colgreen[16..1]: output; )begindefaultscolred[]=h"ffff";colgreen[]=h"ffff";end defaults;if green thentableclk[2..0]=>row[8..1],colgreen[16..1];H"0" =>H"1", H"DBC3"; %1101 1011 1100 0011% H"1" =>H"2", H"EBDB";H"2" =>H"4", H"EBDB";H"3" =>H"8", H"F3DB";H"4" =>H"10", H"F3DB";H"5" =>H"20", H"EBDB";H"6" =>H"40", H"EBDB";H"7" =>H"80", H"DBC3";end table;end if;if red thentableclk[2..0]=>row[8..1],colred[16..1];h"0" =>h"1", h"C3DB";h"1" =>h"2", h"DBD3";h"2" =>h"4", h"DBD3";h"3" =>h"8", h"DBC3";h"4" =>h"10", h"DBCB";h"5" =>h"20", h"DBCB";h"6" =>h"40", h"DBCB";h"7" =>h"80", h"C3DB";end table;end if;end;寄存器文本:SUBDESIGN register(clk,load,d[7..0] :input;q[7..0] :OUTPUT;)VARIABLEff[7..0] :DFFE;BEGINff[].clk=clk;ff[].ena=load;ff[].d=d[];q[]=ff[].q;end;七、试验中遇到的问题1、设计八位密码的时候,需要将八位的密码输进判断器,起初采取的不是寄存器的手段,而是自己定义了一个使能开关,当微动开关高电平就允许密码通过使能开关到达a[7..0]或者b[7..0],但是实验发现这样密码并不能被储存起来,后来想明白应该是由于并没有变量储存的机制,所以要想将变量储存必须有寄存器才行,根据教材定义寄存器后,该问题得到解决。

数字密码锁的控制电路实验报告

数字密码锁的控制电路实验报告

数字密码锁的控制电路实验报告摘要:本实验旨在设计和实现一个数字密码锁的控制电路。

通过使用数字集成电路和逻辑门电路,我们成功地实现了一个简单而有效的数字密码锁系统。

实验结果表明,该控制电路能够准确地识别输入的密码,并控制锁的开关状态。

本实验为数字密码锁的设计和应用提供了有益的参考。

引言:数字密码锁是一种常见的安全措施,广泛应用于各种场合,如家庭、办公室和酒店等。

它通过输入正确的数字密码来控制锁的开关状态。

本实验旨在设计和实现一个数字密码锁的控制电路,以便更好地理解数字密码锁的工作原理和应用。

材料与方法:1. 数字集成电路(例如74LS47、74LS74)2. 逻辑门电路(例如74LS08、74LS32)3. 七段数码管4. 按钮开关5. 电源和电线6. 面包板和连接线实验步骤:1. 将数字集成电路和逻辑门电路按照电路图连接在面包板上。

2. 将七段数码管和按钮开关连接到电路中相应的引脚上。

3. 将电源和电线连接到电路中,确保电路正常工作。

4. 设计一个四位数字密码,并将其编程到电路中。

5. 测试电路的功能,尝试输入正确的密码并观察锁的开关状态。

结果与讨论:经过实验,我们成功地设计和实现了一个数字密码锁的控制电路。

该电路能够准确地识别输入的密码,并根据密码的正确与否控制锁的开关状态。

当输入正确的密码时,锁会打开;当输入错误的密码时,锁会保持关闭状态。

通过实验,我们发现数字集成电路和逻辑门电路在数字密码锁的控制中起到了关键作用。

数字集成电路负责将输入的密码转换为七段数码管上的数字显示,而逻辑门电路则负责判断输入的密码是否正确,并控制锁的开关状态。

此外,我们还发现,设计一个安全可靠的数字密码锁需要考虑以下几个因素:1. 密码的复杂性:密码应该足够复杂,以防止被他人轻易猜测或破解。

2. 锁的安全性:锁的机械结构应该坚固可靠,以防止被非法开启。

3. 电路的稳定性:电路应该能够稳定地工作,并能够抵抗外界的干扰。

数字密码锁实验报告

数字密码锁实验报告

数字密码锁实验报告⼀、主要要求及指标:1.设置三个正确的密码键,实现按密码顺序输⼊的电路。

密码键只有按顺序输⼊后才能输出密码正确信号。

2.设置若⼲个伪键,任何伪键按下后,密码锁都⽆法打开。

3.每次只能接受四个按键信号,且第四个键只能是“确认”键,其他⽆效。

4.能显⽰已输⼊键的个数(例如显⽰* 号)。

5.第⼀次密码输错后,可以输⼊第⼆次。

但若连续三次输⼊错码,密码锁将被锁住,必须系统操作员解除(复位)。

⼆、设计⽅案1.⽅案原理图:输⼊控制伪码键密码键确认键按键个数计数74LS164复位返回键复位键值锁存密码顺序判别亮灯显⽰输出控制亮灯报警密码正确2. 基本原理:输⼊按键,当密码键按正确循序按下,密码信号输⼊D触发器构成的移位寄存器,输⼊正确时信号从Q1移到Q3 ,Q3为“1”时输出密码正确信号,亮绿灯显⽰正确,否则信号传递失败,灯不亮。

按键同时⽤74164记录按键个数,⽆论密码键还是伪键,每次按键都产⽣⼀个脉冲,输出⼀个按键信号使⼀盏灯亮。

当最后位按键(第四位)不是“确认键”时,亮起红灯提⽰,重新按键。

扩展部分:当连续三次输⼊错码,74164计数电路输出错误信号,亮起红灯报警,同时使⽤与门控制使密码锁被锁住,此时必须系统操作员解除(复位)。

3.设计⽅案⽐较:按键个数计数电路我们考虑了两个⽅案。

⼀是:74164记录按键个数,⼆是由D触发器构成移位寄存器计数。

D触发器计数需使⽤更多元件,且增加电路复杂程度,使安全性稳定性⼤⼤降低,故我们最终选择了74164移位寄存器记录按键个数。

三、单元电路设计计算1、本电路主要包含四部分,分别是密码电路、按键个数计数电路、错误输⼊计数电路和防抖电路。

2、密码电路(硬件固化密码)1)⼯作原理当密码键按正确顺序按下,密码正确信号从Q1移到Q3,Q3为‘1’时表⽰密码正确输⼊。

2)D触发器7474N⼯作原理真值表:时序图:3)电路图本部分由4个D触发器和6个开关构成。

其中前三个D触发器分别代表密码的三位,第四个D触发器是确认键。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数电实验三报告姓名:xxx班级:xxx 学号:xxxx实验:基于有限状态机的密码锁一、实验目的学习如何通过Verilog HDL 编程,利用Basys3板上的开关控制七段数码管实现四位密码锁。

二、实验要求使用有限状态机设计一个 4 位密码锁。

利用 Basys3 板上的滑动开关 sw[0]到sw[9]分别代表 0‐9 十个数字,依次输入 4 位不重复的密码。

如果密码输入顺序与设计设置的一致,则显示大写字母P,否则显示大写字母F。

注意,即使密码输入错误,也必须在输入完整的 4 位密码输入,才能显示大写字母 F。

三、实验设计及内容1.基础版实验代码module doorlock(input CLK,input clr,input [9:0] sw,output reg [10:0] display_out);reg[3:0] present_state,next_state;parameter S0=4'b0000,S1=4'b0001,S2=4'b0010,S3=4'b0011,S4=4'b0100,E1=4'b0101,E2=4'b0110,E3=4'b0111,E4=4'b1000;reg [29:0] count;reg [9:0] keys=0;always @(posedge CLK or posedge clr)beginif (clr) count<=0;else count<=count+1;endassign clk_3=count[24];// ~3Hzalways @(posedge clk_3 or posedge clr) // STATE TRANSITIONbeginif (keys!=sw) keys <= sw;if (clr) present_state <= S0;else present_state <= next_state;end// Demo for Finite State Machine// the correct password is 0->1->2->3 (Switch sw[0]->sw[1]->sw[2]->sw[3] in order. always @(*)begincase (present_state)S0: beginif (~|keys[9:0]) next_state <=S0; // no key pressedelse if (keys[2]) next_state <=S1; // first valid key pressedelse next_state <=E1; // first invalid key pressedendS1: beginif (~|keys[9:3]&&~|keys[1:0]) next_state <=S1; // no key pressedelse if (keys[1]) next_state <=S2;// second valid key pressedelse next_state <=E2;// second invalid key pressedendS2: beginif (~|keys[9:3]&&~|keys[0]) next_state <=S2; // no key pressedelse if (keys[7]) next_state <=S3; // third valid key pressedelse next_state <=E3;// third invalid key pressedendS3: beginif (~|keys[9:8]&&~|keys[6:3]&&~|keys[0]) next_state <=S3; // no key pressedelse if (keys[3]) next_state <=S4;// fourth vaild key pressedelse next_state <=E4;// fourth invalid key pressedendS4: beginif (~|keys[9:8]&&~|keys[6:4]&&~|keys[0]) next_state <=S4; // no keypressedelse next_state <=E1; // fifth key pressed, but ignored *** endE1:beginif (keys!=sw) next_state <=E2; // second invalid key pressedelse next_state <=E1; // no key pressedendE2:beginif (keys!=sw) next_state <=E3; // third invalid key pressedelse next_state <=E2; // no key pressedendE3:beginif (keys!=sw) next_state <=E4; // fourth invalid key pressedelse next_state <=E3; // no key pressedendE4: next_state <=E4; // the additional keys are ALL ignored ***default: next_state <=S0;endcaseendalways @(*) // indicate the number of inputs and display the tag begincase(present_state)S4: display_out<=11'b0111_0011000;// P in left-most segmentE4: display_out<=11'b1110_0111000;// F in right-most segmentS0: display_out<=11'b1001_0011100;// oo in the middle segmentsS1,E1: display_out<=11'b1001_0111111;// confirm first inputS2,E2: display_out<=11'b1001_0011111;// confirm second inputS3,E3: display_out<=11'b1001_0011110;// confirm third inputdefault:display_out<=11'b1111_1111111; // no displayendcaseendendmodule2.进阶版实验代码module doorlock2(input CLK,input clr,input [9:0] sw,output reg [10:0] display_out);reg[3:0] present_state,next_state;reg [19:0]count1=0;reg [2:0] sel=0;parameter S0= 4'b0000,S1=4'b0001,S2=4'b0010,S3=4'b0011,S4=4'b0100, S01=4'b1001,S02=4'b1010,S03=4'b1011,E1=4'b0101,E2=4'b0110,E3=4'b0111,E4=4'b1000;parameter T1MS=50000,T2MS=20000_0000;reg [29:0] count;reg [32:0] count2=0;reg [9:0] keys=0;reg flag;always @(posedge CLK or posedge clr)beginif (clr)begincount<=0;endelse count<=count+1;endwire clk_3;assign clk_3=count[24];// ~3Hzalways @(posedge clk_3 or posedge clr) // STATE TRANSITIONbeginif (keys!=sw) keys <= sw;if (clr) present_state <= S0;else present_state <= next_state;endalways@(posedge CLK or posedge clr)beginif(present_state == S4)beginif(count2<T2MS)begincount2<=count2+1;flag<=1'b0;endelsebeginflag<=1'b1;endendif(clr) count2<=0;end// Demo for Finite State Machine// the correct password is 0->1->2->3 (Switch sw[0]->sw[1]->sw[2]->sw[3] in order. always @(*)begincase (present_state)S0: beginif (~|keys[9:0]) next_state <=S0; // no key pressedelse if (keys[2]) next_state <=S1; // first valid key pressedelse next_state <=E1; // first invalid key pressedendS1: beginif (~|keys[9:3]&&~|keys[1:0]) next_state <=S1; // no key pressed//else if (!sw) next_state <=S01;// second valid key pressedelse if(keys[1]&&keys[2]) next_state<=S2;else next_state <=E2;// second invalid key pressedendS01:beginif(!sw) next_state<=S01;else if(sw[2]) next_state<=S2;else next_state<=E2;endS2: beginif (~|keys[9:3]&&~|keys[0]) next_state <=S2; // no key pressed//else if (!sw) next_state <=S02; // third valid key pressedelse if (keys[2]&&keys[1]&&keys[3]) next_state <=S3;else next_state<=E3;// third invalid key pressedendS02: beginif(!sw) next_state<=S02;else if(sw[1]) next_state<=S3;else next_state<=E3;endS3: beginif (keys[1]&&keys[2]&&keys[3]) next_state <=S3; // no key pressed else if (!sw[3]) next_state <=S03;// fourth vaild key pressedelse next_state <=E4;// fourth invalid key pressedendS03:beginif(~|keys[9:3]&&~|keys[0]) next_state<=S03;else if(keys[3]) next_state<=S4;else next_state<=E4;endS4: beginif (~|keys[9:4]&&~|keys[0]) next_state <=S4; // no key pressedelse next_state <=E1; // fifth key pressed, but ignored *** endE1:beginif (keys!=sw) next_state <=E2; // second invalid key pressedelse next_state <=E1; // no key pressedendE2:beginif (keys!=sw) next_state <=E3; // third invalid key pressedelse next_state <=E2; // no key pressedendE3:beginif (keys!=sw) next_state <=E4; // fourth invalid key pressedelse next_state <=E3; // no key pressedendE4: next_state <=E4; // the additional keys are ALL ignored ***default: next_state <=S0;endcaseendalways@(posedge CLK)begincount1<=count1+1;if(count1==T1MS)begincount1<=0;sel<=sel+1;if(sel==4)sel<=0;endendalways @(posedge CLK) // indicate the number of inputs and display the tagbegincase(present_state)S0: begincase(sel)0:display_out<=11'b0111_0101000;1:display_out<=11'b1011_0110000;2:display_out<=11'b1101_1000100;3:display_out<=11'b1110_0110110;default:display_out<=11'b1111_1111111;endcaseendS1: begincase(sel)0:display_out<=11'b0111_0010010;1:display_out<=11'b1011_1110111;2:display_out<=11'b1101_1110111;3:display_out<=11'b1110_1110111;default:display_out<=11'b1111_1111111;endcaseend // confirm first inputS2: begincase(sel)0:display_out<=11'b0111_0010010;1:display_out<=11'b1011_1001111;2:display_out<=11'b1101_1110111;3:display_out<=11'b1110_1110111;default:display_out<=11'b1111_1111111;endcaseend // confirm second inputS3: begincase(sel)0:display_out<=11'b0111_0010010;1:display_out<=11'b1011_1001111;2:display_out<=11'b1101_0000110;3:display_out<=11'b1110_1110111;default:display_out<=11'b1111_1111111;endcaseend // confirm third inputS4: beginif(!flag)begincase(sel)0:display_out<=11'b0111_0010010;1:display_out<=11'b1011_1001111;2:display_out<=11'b1101_0000110;3:display_out<=11'b1110_0000110;default:display_out<=11'b1111_1111111;endcaseendelse display_out<= 11'b0111_0011000 ;end // P in left-most segmentS01:begincase(sel)0:display_out<=11'b0111_0010010;1:display_out<=11'b1011_1110111;2:display_out<=11'b1101_1110111;3:display_out<=11'b1110_1110111;default:display_out<=11'b1111_1111111;endcaseendS02:begincase(sel)0:display_out<=11'b0111_0010010;1:display_out<=11'b1011_1001111;2:display_out<=11'b1101_1110111;3:display_out<=11'b1110_1110111; default:display_out<=11'b1111_1111111;endcaseendS03: begincase(sel)0:display_out<=11'b0111_0010010;1:display_out<=11'b1011_1001111;2:display_out<=11'b1101_0000110;3:display_out<=11'b1110_1110111;default:display_out<=11'b1111_1111111;endcaseendE1: display_out<=11'b0111_0111000;E2: display_out<=11'b1011_0111000;E3: display_out<=11'b1101_0111000;E4: display_out<=11'b1110_0111000;// F in right-most segment default:display_out<=11'b1111_1111111; // no displayendcaseendendmodule约束文件代码:## Clock signalset_property PACKAGE_PIN W5 [get_ports CLK]set_property IOSTANDARD LVCMOS33 [get_ports CLK]## Switchesset_property PACKAGE_PIN V17 [get_ports {sw[0]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[0]}]set_property PACKAGE_PIN V16 [get_ports {sw[1]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[1]}]set_property PACKAGE_PIN W16 [get_ports {sw[2]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[2]}]set_property PACKAGE_PIN W17 [get_ports {sw[3]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[3]}]set_property PACKAGE_PIN W15 [get_ports {sw[4]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[4]}]set_property PACKAGE_PIN V15 [get_ports {sw[5]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[5]}]set_property PACKAGE_PIN W14 [get_ports {sw[6]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[6]}]set_property PACKAGE_PIN W13 [get_ports {sw[7]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[7]}]set_property PACKAGE_PIN V2 [get_ports {sw[8]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[8]}]set_property PACKAGE_PIN T3 [get_ports {sw[9]}] set_property IOSTANDARD LVCMOS33 [get_ports {sw[9]}]## sw[15]set_property PACKAGE_PIN R2 [get_ports {clr}]set_property IOSTANDARD LVCMOS33 [get_ports {clr}]## 7-seg displayset_property PACKAGE_PIN W4 [get_ports {display_out[10]}]set_property PACKAGE_PIN V4 [get_ports {display_out[9]}]set_property PACKAGE_PIN U4 [get_ports {display_out[8]}]set_property PACKAGE_PIN U2 [get_ports {display_out[7]}]set_property PACKAGE_PIN W7 [get_ports {display_out[6]}]set_property PACKAGE_PIN W6 [get_ports {display_out[5]}]set_property PACKAGE_PIN U8 [get_ports {display_out[4]}]set_property PACKAGE_PIN V8 [get_ports {display_out[3]}]set_property PACKAGE_PIN U5 [get_ports {display_out[2]}]set_property PACKAGE_PIN V5 [get_ports {display_out[1]}]set_property PACKAGE_PIN U7 [get_ports {display_out[0]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[9]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[8]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[7]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[6]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[5]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[4]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[1]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[2]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[0]}]set_property IOSTANDARD LVCMOS33 [get_ports {display_out[10]}]四、实验结果1基础结果图2.进阶结果图进阶实验成品效果说明:进阶视频演示:正确示范:密码输入错误示范:五、实验总结1.通过本次实验了解了时钟信号的作用原理以及对时序电路的控制机理。

相关文档
最新文档