实验原理

定义:

4位密码输入代码分别为Q、U、N、B,开箱时,钥匙插入钥匙孔右旋使D=1,如果输入密码(如:QUNB=0101)与设置的代码相同,则保险箱被打开,即输出端G=1,否则箱体发出报警。

逻辑表达式:

G=DQUNBG=D\overline{Q}U\overline{N}B

W=DGW=D\overline{G}

真值表:

真值表

逻辑电路

理论逻辑电路
逻辑电路
Quartus软件生成RTL电路
逻辑电路

Verilog HDL建模描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
实验名称:四位密码锁
实验设备:小脚丫STEP-MAX10-08SAM FPGA核心板
实验要求:4位密码输入代码分别为Q、U、N、B,开箱时,钥匙插入钥匙孔右旋使D=1,
如果输入密码(如:QUNB=0101)与设置的代码相同,则保险箱被打开,即输出端G
=1,否则箱体发出报警。
实验说明:d信号为1 模拟钥匙插入右转
q,u,n,b模拟四位密码
led1亮=led1=0=模拟锁打开
led2亮=led2=0=模拟报警即未正确输入密码
*/

module codelock
(
input wire q,u,n,b, //四位开关作为密码输入
input wire d, //一位按键作为开锁使能信号
output wire led1, //保险箱打开信号对应的led输出
output wire led2 //报警信号对应led输出
);

wire [3:0] code;//四位变量存储密码
reg open;//保险箱开箱信号
reg alarm;//报警信号
assign code={q,u,n,b};

always@(d or code)
/*使能,开始判断密码(即,钥匙插入保险箱右转)
【注:】本来这里不应该取反的,但是考虑到实际设备中的轻触按键KEY1,
默认是弹起的,电平默认为高电平,
也就是用默认按键弹起的状态来模拟未插入钥匙或者钥匙插入没有右转的情况更为合适
即高电平=按键弹起=未插入钥匙或钥匙未右转的情况,故此处取反*/
if(d==~1'b1)
begin
if(code==4'b0101)//正确输入密码
begin
open=1'b1;//开锁
alarm=1'b0;//未报警
end
else//输错密码的情况
begin
open=1'b0;//未开锁
alarm=1'b1;//报警
end
end
else//钥匙未插入保险箱或者插入后未右转的情况下
begin
open=1'b0;//未开锁
alarm=1'b0;//未报警
end
assign led1=~open; //led亮表示密码锁打开
assign led2=~alarm;//led亮表示报警信号

endmodule

管脚分配

管脚分配图
管脚分配图

实验现象

略(注:现象描述见程序代码的注释)

工程文件下载