1、FPGA课程设计数字密码锁学院: 专业班级:姓名: 学号: FPGA基于 Verilog HDL密码锁设计1. 摘 要 32. 题目来源: 33. 理论分析 . 44. 实现过程 . 44.1 顶层模块 44.2 蜂鸣器模块 .54.3 显示模块 64.4 控制模块 95. 实验结果 .115.1 顶层模块时序仿真: 115.2 蜂鸣器时序仿真 .135.3 显示模块时序仿真: 145.4 控制模块时序仿真 .156. 总结 . 187. 参考文献 .191. 摘 要随 着 科 技 的 发 展 数 字 电 路 的 各 种 产 品 广 泛 应 用 , 传 统 的 机 械 锁 由 于 其 构 造
2、的 简单 , 安 全 性 不 高 , 电 子 密 码 锁 其 保 密 性 高 , 使 用 灵 活 性 好 , 安 全 系 数 高 , 使 用 方 便 ,将 会 是 未 来 使 用 的 趋 势 。 本 设 计 使 用 FPGA设 计 使 设 计 过 程 廷 到 高 度 自 动 化 , 其 具 有强 大 的 设 计 功 能 、 测 试 、 仿 真 分 析 、 管 理 等 功 能 。 用 Verilog HDL可 以 更 加 快 速 、 灵活 地 设 计 出 符 合 各 种 要 求 的 密 码 锁 。本 设 计 基 于 Verilog HDL语 言 来 设 计 密 码 锁 , 先 介 绍 设 计 要
3、 求 和 整 体 设 计 思 想 ,随 后 对 所 使 用 各 模 块 分 别 为 蜂 鸣 器 模 块 、 显 示 模 块 、 控 制 模 块 、 顶 层 模 块 进 行 了 介绍 , 给 出 各 个 模 块 的 主 要 代 码 , 在 对 各 个 模 块 的 功 能 进 行 仿 真 。随着现代科技的日益发展,智能化,自动化技术的成熟将会代替以往的人工手动控制。密码锁不仅可以有效地提高人们的生活效率,节约生活资源,而且十分安全可靠。电子密码锁运用电子电路控制机械部分,使两者紧密结合,从而避免了因为机械部分被破坏而导致开锁功能失常.大大增加了密码锁得防盗功能。同时因为电子密码锁不需要携带钥匙,弥
4、补了钥匙极易丢失和仿造的缺陷,方便了锁具的使用。关键字:密码锁 Verilog HDL Quartus II2. 题目来源:本 设 计 以 007为 万 能 密 码 在 忘 记 密 码 时 开 锁 使 用 。 开 始 时 密 码 锁 处 于 关 闭 的 状态 , 输 入 万 能 密 码 将 锁 打 开 。 在 锁 处 于 打 开 的 状 态 时 设 计 密 码 , 此 时 指 示 灯 处 于 亮的 状 态 , 说 明 锁 处 于 开 的 状 态 。 设 置 好 密 码 后 按 关 闭 拨 码 使 锁 关 闭 , 指 示 灯 处 于 灭的 状 态 。 再 输 入 三 位 数 字 进 行 开 琐
5、, 如 果 输 入 的 密 码 正 确 则 指 示 灯 亮 , 表 示 开 琐 成功 , 否 则 蜂 鸣 器 发 出 响 声 , 并 持 续 五 秒 钟 , 表 示 开 锁 失 败 。通 过 学 习 FPGA技 术 , 应 用 于 实 践 当 中 , 掌 握 FPGA数 字 电 路 系 统 的 开 发 流 程 , 并且 在 自 己 的 实 践 设 计 中 熟 练 这 门 技 术 , 同 时 排 除 和 解 决 开 发 中 遇 到 的 问 题 , 用Verilog语 言 编 写 设 计 所 需 要 的 实 现 的 功 能 。3. 理论分析密 码 锁 分 为 四 个 模 块 : 顶 层 模 块 、
6、 显 示 模 块 、 蜂 鸣 器 模 块 、 控 制 模 块 。 其 中由 顶 层 模 块 调 其 他 分 模 块 来 实 现 密 码 锁 功 能 。密 码 锁 功 能 :a.由 12个 拨 码 开 关 设 置 三 位 密 码 ( 0-9)b.再 输 入 密 码 开 锁 , 密 码 正 确 , 指 示 灯 亮 开 锁 成 功 。c.密 码 输 入 错 误 , 蜂 鸣 器 响 五 秒 , 表 示 开 锁 失 败 。总体框图图 1.0 总体框图4. 实现过程4.1顶层模块实现几个模块的配合工作,它能实现对密码的设置和显示,同时在密码正确时时灯亮,在密码错误时蜂鸣器发出五秒钟的响声。程序如下:调用部
7、分顶层模块报警部分蜂鸣器密码设置12个拨码开关显示部分七段数码管module dingceng(n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,set,close,clk1,clk2,clk3,lock,alarm,Q,ss1,ss0);input n0,n1,n2,n3,n4,n5,n6,n7,n8,n9;input set,close;input clk1,clk2,clk3;output lock,alarm,ss1,ss0;output6:0 Q;reg lock,alarm;reg ss0,ss1;reg6:0 Q;wire3:0 X1,X2,X3;wire X4,X5;
8、code u1(.lock(lock),.warning(X4),.num1(X1),.num2(X2),.num3(X3),.clk(clk1),.n0(n0),.n1(n1),.n2(n2),.n3(n3),.n4(n4),.n5(n5),.n6(n6),.n7(n7),.n8(n8),.n9(n9),.set(set),.close(close);show u2(.A(X1),.B(X2),.C(X3),.clk(clk2),.Q(Q6:0),.ss1(ss1),.ss0(ss0);speaker u3(.ENA(X4),.CLK2(clk3),.COUT(alarm);endmodul
9、e4.2蜂鸣器模块蜂 鸣 器 是 一 种 一 体 化 结 构 的 电 子 讯 响 器 , 采 用 直 流 电 压 供 电 , 广 泛 应 用 各 类 电 子 产品 中 作 发 声 器 件 。 如 图 为 其 原 理 图 :图 1.1 蜂 鸣 器 原 理 图 结 构蜂 鸣 器 功 能 实 现 :程 序 共 有 两 个 输 入 信 号 分 别 为 ENA和 CLK2, , 一 个 输 出 信 号 COUT。 当 从 信 号 输 入 模 块检 测 到 有 开 关 输 入 时 , 信 号 ENA已 置 1, CLK2上 升 沿 到 来 时 , 有 程 序 使 COUT为 1, 蜂鸣 器 发 出 报 警
10、 信 号 , 并 且 进 入 一 个 5秒 钟 的 循 环 , 时 间 到 达 时 , 跳 出 循 环 , 蜂 鸣 器停 止 报 警 。程 序 如 下 :module speaker(ENA,CLK2,COUT); /ENA为 使 能 信 号 , CLK为 时 钟 信 号 规 定 工 作 频ENACLK2KCOUT率input ENA,CLK2;output COUT;reg COUT;reg3:0 Q1;always(posedge CLK2) /CLK2为 敏 感 信 号begin if(ENAif(ENA) /ENA为 0时 , 执 行 下 面 的 语 句Q1=0;endalwaysbe
11、ginif(Q1=6|Q1=0)COUT=b0;elseCOUT=b1;endEndmodule4.3显示模块数码管常用于电子产品的显示部分,原理简单易于实现,将 BCD码经译码后显示成十进制的数字显示模块功能实现:模块共有四个输入信号 A、B、C、CLK,三个输出信号分别为Q、SS1、SS2。SS1、SS2 可对三个数码管进行片选,使它们分别亮。A、B、C 接段选,以控制数码管显示什么数字。程序如下:module show(A,B,C,clk,Q,ss1,ss0);input3:0 A,B,C;input clk;output6:0 Q;output ss1,ss0;reg1:0 M;reg
12、 ss0,ss1;reg6:0 Q;always(posedge clk)beginM=M+1;if(M=b11)M=b00;endalways(posedge clk)beginif(M=b00)beginss1=0;ss0=0;case(A)0:Q=b0111111;1:Q=b0000110;2:Q=b1011011;3:Q=b1001111;4:Q=b1100110;5:Q=b1101101;6:Q=b1111101;7:Q=b0000111;8:Q=b1111111;9:Q=b1101111;endcaseendif(M=b01)beginss1=0;ss0=1;case(B)0:Q=
13、b0111111;1:Q=b0000110;2:Q=b1011011;3:Q=b1001111;4:Q=b1100110;5:Q=b1101101;6:Q=b1111101;7:Q=b0000111;8:Q=b1111111;9:Q=b1101111;endcaseendif(M=b10)beginss1=1;ss0=0;case(C)0:Q=b0111111;1:Q=b0000110;2:Q=b1011011;3:Q=b1001111;4:Q=b1100110;5:Q=b1101101;6:Q=b1111101;7:Q=b0000111;8:Q=b1111111;9:Q=b1101111;e
14、ndcaseendendEndmodule4.4控制模块控制模块用于密码的设置控制模块功能实现:模块可以通过程序的执行实现对密码进行设置和进行开琐,开始时锁处于关闭的状态,即为 1,输入事先设置的万能密码开琐,在锁开的状态时设置密码,然后将锁关闭,再输入三位数字进行开锁,正确时为 1既灯亮,否则为 0为 1,即蜂鸣器响。 控制模块程序如下:/*clk:时钟信号n0,n1,n2,n3,n4,n5,n6,n7,n8,n9:密码输入信号lock:状态显示信号close:关信号set:密码确认信号*/module code(lock,warning,num1,num2,num3,clk,n0,n1,n
15、2,n3,n4,n5,n6,n7,n8,n9,set,close);input n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,set,close,clk;output3:0num1,num2,num3;output lock,warning;reg lock,warning;reg3:0num1,num2,num3,temp;reg11:0code;always(posedge clk)beginif(n0,n1,n2,n3,n4,n5,n6,n7,n8,n9!=10b0000000000)begin case(n9,n8,n7,n6,n5,n4,n3,n2,n1,n0)10b0
16、000000001:temp=1d0;10b0000000010:temp=1d1;10b0000000100:temp=1d2;10b0000001000:temp=1d3;10b0000010000:temp=1d4;10b0000100000:temp=1d5;10b0001000000:temp=1d6;10b0010000000:temp=1d7;10b0100000000:temp=1d8;10b1000000000:temp=1d9;endcasenum3=num2;num2=num1;num1=temp;endif(close)beginnum1=0;num2=0;num3=0
17、;endendalways(posedge clk)beginif(lock=0else if(num3,num2,num1=16b000000000111)lock=1;else warning=1;endif(lock=1if(close)warning=0;endalways(posedge clk)beginif(lock=1endEndmodule5. 实验结果5.1顶层模块时序仿真:图 1.2 万能密码开锁的波形图 1.3 设置密码的波形图 1.4 开锁失败的波形5.2蜂鸣器时序仿真图 1.5: 当 ENA为 1时 且 CLK2上 升 沿 到 来 时 , COUT被 置 1, 即
18、蜂 鸣 器 开 始 发 出 响 声图 1.5 蜂鸣器功能波形5.3显示模块时序仿真:图 1.6:SS0、SS1 不断的进行片选使三个数码管分别显示所输入的密码,以实现对密码的动态显示图 1.6 显示模块功能波形5.4控制模块时序仿真图 1.7:输入万能密码 007,并使 set置 1,运行程序后 lock被置。说明开锁成功。图 1.7 输入万能密码后的波形图 1.8:锁开的状态下设置密码 123,并使 close置 1,使锁关闭,再 set使置1,此时 lock置 0,表示锁关闭。实现设置密码的功能。图 1.8 设置密码波形图 1.9:输入密码 123即正确的密码进行解锁。因为输入的密码正确所
19、以使lock置 1,表示开锁成功。图 1.9 成功开锁波形图 2.0:输入错误密码 234时,warning 被置 1,表示开锁失败。图 2.0 开锁失败的波形6. 总结通过本设计可以学的到很多的东西,同时不仅可以巩固所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次设计,进一步加深了对EDA的了解, 。每一个子模块编写调试,都需要非常用心。编写过程中遇到了不少问题,通过查找相关资料,并且细心的检查,找出了错误和警告,并且排除在波形仿真时,设定输入的时钟信号,找到比较合适的输入数值,仿真时长等。通过这次设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的
20、理论知识与实践相结合起来,从理论中得出结论,用于实践,提高自己的实际动手能力和独立思考的能力。在设计的过程难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。需要耐心,信心去完成。7. 参考文献1.夏宇闻.Verilog 数字系统设计教程【M】.北京:北京航空航天大学出版社,2003.2.吴继华,王诚.设计与验证 Verilog HDL【M】.北京:人民邮电出版社,2006.3.Samir Palnitkar.Verilog HDL数字设计与综合【M】.2 版.夏宇闻,胡燕详,刁岚松,等译.北京:电子工业出版社,2004.4.Quartus II Handbook.Version 7.2.【2007-10】.http:.