收藏 分销(赏)

基于Verilog-HDL密码锁设计.doc

上传人:丰**** 文档编号:3929551 上传时间:2024-07-23 格式:DOC 页数:8 大小:31.04KB 下载积分:6 金币
下载 相关 举报
基于Verilog-HDL密码锁设计.doc_第1页
第1页 / 共8页
基于Verilog-HDL密码锁设计.doc_第2页
第2页 / 共8页


点击查看更多>>
资源描述
基于Verilog HDL密码锁设计 摘 要 随着科技的发展数字电路的各种产品广泛应用,传统的机械锁由于其构造的简单,安全性不高,电子密码锁其保密性高,使用灵活性好,安全系数高,使用方便,将会是未来使用的趋势.本设计使用EDA设计使设计过程廷到高度自动化,其具有强大的设计功能、测试、仿真分析、管理等功能。使用EDA环境完成电路的系统综合设计和仿真。用VHDL可以更加快速、灵活地设计出符合各种要求的密码锁. 本设计基于Verilog HDL语言来设计密码锁,先介绍设计要求和整体设计思想,随后对所使用各模块分别为蜂鸣器模块、显示模块、控制模块、顶层模块进行了介绍,给出各个模块的主要代码,在对各个模块的功能进行仿真。 关键字 密码锁 Verilog HDL Quartus II 总体设计 密码锁分为四个模块:①顶层模块、②显示模块、③蜂鸣器模块、④控制模块。其中由顶层模块调其他分模块来实现密码锁功能. 密码锁功能: 1。由12个拨码开关设置三位密码(0—9) 2。再输入密码开锁,密码正确,指示灯亮开锁成功. 3。密码输入错误,蜂鸣器响五秒,表示开锁失败. 设计思路: 本设计以007为万能密码在忘记密码时开锁使用。开始时密码锁处于关闭的状态,输入万能密码将锁打开。在锁处于打开的状态时设计密码,此时指示灯处于亮的状态,说明锁处于开的状态。设置好密码后按关闭拨码使锁关闭,指示灯处于灭的状态。再输入三位数字进行开琐,如果输入的密码正确则指示灯亮,表示开琐成功,否则蜂鸣器发出响声,并持续五秒钟,表示开锁失败。 总体框图 调用部分 顶层模块 显示部分 七段数码管 报警部分 蜂鸣器 密码设置 12个拨码开关 图1。0 总体框图 模块功能其及主要代码 1. 顶层模块 实现几个模块的配合工作,它能实现对密码的设置和显示,同时在密码正确时时灯亮,在密码错误时蜂鸣器发出五秒钟的响声。 程序如下: 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; output[6:0] Q; reg lock,alarm; reg ss0,ss1; reg[6:0] Q; wire[3:0] X1,X2,X3; wire X4,X5; 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(Q[6:0]),.ss1(ss1),.ss0(ss0)); speaker u3(。ENA(X4),。CLK2(clk3),。COUT(alarm)); endmodule 2。蜂鸣器模块 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用各类电子产品中作发声器件.如图为其原理图: COUT ENA CLK2K@ 图 1。1 蜂鸣器原理图结构 蜂鸣器功能实现: 程序共有两个输入信号分别为ENA和CLK2,,一个输出信号COUT。当从信号输入模块检测到有开关输入时,信号ENA已置1,CLK2上升沿到来时,有程序使COUT为1,蜂鸣器发出报警信号,并且进入一个5秒钟的循环,时间到达时,跳出循环,蜂鸣器停止报警。 程序如下: module speaker(ENA,CLK2,COUT);//ENA为使能信号,CLK为时钟信号规定工作频率 input ENA,CLK2; output COUT; reg COUT; reg[3:0] Q1; always@(posedge CLK2)//CLK2为敏感信号 begin if(ENA&&Q1<6)//当ENA为1并且Q1小于6时执行下面的语句 Q1=Q1+1; if(~ENA)//ENA为0时,执行下面的语句 Q1=0; end always begin if(Q1==6||Q1==0) COUT=’b0; else COUT=’b1; end Endmodule 3。显示模块 数码管常用于电子产品的显示部分,原理简单易于实现,将BCD码经译码后显示成十进制的数字 显示模块功能实现: 模块共有四个输入信号A、B、C、CLK,三个输出信号分别为Q、SS1、SS2。SS1、SS2可对三个数码管进行片选,使它们分别亮。A、B、C接段选,以控制数码管显示什么数字. 程序如下: module show(A,B,C,clk,Q,ss1,ss0); input[3:0] A,B,C; input clk; output[6:0] Q; output ss1,ss0; reg[1:0] M; reg ss0,ss1; reg[6:0] Q; always@(posedge clk) begin M=M+1; if(M==’b11) M〈='b00; end always@(posedge clk) begin if(M=='b00) begin ss1<=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; endcase end if(M==’b01) begin ss1〈=0; ss0〈=1; case(B) 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; endcase end if(M=='b10) begin ss1〈=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; endcase end end Endmodule 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,n2,n3,n4,n5,n6,n7,n8,n9,set,close); input n0,n1,n2,n3,n4,n5,n6,n7,n8,n9,set,close,clk; output[3:0]num1,num2,num3; output lock,warning; reg lock,warning; reg[3:0]num1,num2,num3,temp; reg[11:0]code; always@(posedge clk) begin if({n0,n1,n2,n3,n4,n5,n6,n7,n8,n9}!=10'b0000000000) begin case({n9,n8,n7,n6,n5,n4,n3,n2,n1,n0}) 10’b0000000001:temp=1’d0; 10'b0000000010:temp=1’d1; 10'b0000000100:temp=1'd2; 10’b0000001000:temp=1’d3; 10’b0000010000:temp=1’d4; 10’b0000100000:temp=1’d5; 10’b0001000000:temp=1'd6; 10'b0010000000:temp=1’d7; 10’b0100000000:temp=1'd8; 10’b1000000000:temp=1’d9; endcase num3〈=num2; num2〈=num1; num1〈=temp; end if(close) begin num1<=0; num2〈=0; num3<=0; end end always@(posedge clk) begin if(lock==0&&set) begin if(code=={num3,num2,num1}) lock〈=1; else if({num3,num2,num1}==16’b000000000111) lock〈=1; else warning〈=1; end if(lock==1&&close) lock〈=0; if(close) warning〈=0; end always@(posedge clk) begin if(lock==1&&set) code〈={num3,num2,num1}; end Endmodule 各个模块功能仿真波形 1。顶层模块时序仿真: 图1.2 万能密码开锁的波形 图1。3 设置密码的波形 图1.4 开锁失败的波形 2. 蜂鸣器时序仿真 图1。5:当ENA为1时且CLK2上升沿到来时,COUT被置1,即蜂鸣器开始发出响声 图1。5 蜂鸣器功能波形 3. 显示模块时序仿真: 图1。6:SS0、SS1不断的进行片选使三个数码管分别显示所输入的密码, 以实现对密码的动态显示 图1.6 显示模块功能波形 4. 控制模块时序仿真 图1.7:输入万能密码007,并使set置1,运行程序后lock被置1。说明开锁成功。 图1.7 输入万能密码后的波形 图1.8:锁开的状态下设置密码123,并使close置1,使锁关闭,再set使置1,此时lock置0,表示锁关闭。实现设置密码的功能。 图1。8 设置密码波形 图1.9:输入密码123即正确的密码进行解锁。因为输入的密码正确所以使lock置1,表示开锁成功。 图1.9 成功开锁波形 图2。0:输入错误密码234时,warning被置1,表示开锁失败. 图2.0 开锁失败的波形 总结 通过本设计可以学的到很多的东西,同时不仅可以巩固所学过的知识,而且学到了很多在书本上所没有学到过的知识.通过这次设计,进一步加深了对EDA的了解,.每一个子模块编写调试,都需要非常用心。编写过程中遇到了不少问题,通过查找相关资料,并且细心的检查,找出了错误和警告,并且排除在波形仿真时,设定输入的时钟信号,找到比较合适的输入数值,仿真时长等。 通过这次设计使我懂得了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,用于实践,提高自己的实际动手能力和独立思考的能力。在设计的过程难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。需要耐心,信心去完成。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服