FPGA根据verilogHDL的密码锁

合集下载

4位数字密码锁毕业设计

4位数字密码锁毕业设计

4位数字密码锁毕业设计华中科技大学文华学院毕业设计(论文)题目:4位数字密码锁设计(密码设置及验证电路)学生姓名:学号:学部(系):信息科学与技术学部专业年级: 08通信工程指导教师:陈超原职称或学位:摘要:本设计利用FPGA作为核心控制板,用Verilog 硬件描述语言进行编程,利用计算机软硬件控制技术,设计一个基于FPGA的数字密码锁,能实现密码设定(如果密码没设定则默认密码为0000),密码输入及验证,当密码输入错误时报警或则指示灯亮;反之,密码输入正确时,另外一个指示灯亮。

将程序下载到Altera公司的Cyclone系列目标芯片EP2C5T144C8上调试通过,并观察实际现象,满足设计要求。

关键词:FPGA Verilog 数字密码锁AbstractThe design using the FPGA as the core of the control panel, Verilog hardware description language for programming, Computer hardware and software control technology, design an FPGA-based digital code lock, Set the password(if the password is not set then the default password is 000000), Password input and verification, Alarm or the light when the password input error; On the contrary, enter the correct password , a light. Program downloaded to the target chip EP2C5T144C8 Altera’s Cyclone series through debugging , and to observe the actual phenomenon , to meet the design requirements.Keywords: FPGA Verilog Digital code lock引言随着人们生活水平的提高,如何实现家庭防盗这一问题也变得尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的青睐,电子密码锁的使用体现了人们消费水平、保安意识和科技水平的提高,而且避免了携带甚至丢失钥匙的麻烦。

基于FPGA的电子密码锁设计

基于FPGA的电子密码锁设计

基于FPGA的电子密码锁设计汪浩;陈学英【摘要】设计并实现了一种基于FPGA的电子密码锁,具有解锁、报警、修改密码、死锁等功能。

利用FPGA器件本身具有的并行性和其逻辑电路的本质,实现了高效、可靠的密码锁设计;采用基础电路加模式控制的设计方法,得到了简单稳定且低冗余的电路结构,节省了逻辑资源;提出了一种冗余编码结合掩码加密的硬件加密方法,使得开锁密码在对外部密码存储器读写的过程中难以被泄露,提高了密码锁的安全性。

结果表明,设计的电子密码锁具有稳定高效、简单可靠、安全性高等优点。

%The electronic password lock based on FPGA was designed and implemented. It possesses the functions of un-locking,alarming,password changing and deadlocking. An efficient and reliable password lock was realized by taking the ad-vantages of parallelism and the logic circuit essence of FPGA. A simple,stable and low redundancy circuit structure was achieved with the design method of basis circuit and mode control,which reduced the consumption of logical resource. A hard-ware encryption method of combining redundant coding with mask encryption is proposed,which makes it much more difficult to leak the password during the process of reading or writing the extern password memory,and makes the security of password lock enhanced. The result shows that the electronic password lock possesses the advantages of high-stability,briefness,high-efficiency, high-reliability and high-security.【期刊名称】《现代电子技术》【年(卷),期】2014(000)019【总页数】3页(P157-159)【关键词】FPGA;电子密码锁;模式控制;冗余编码;掩码加密【作者】汪浩;陈学英【作者单位】电子科技大学,四川成都 610054;电子科技大学,四川成都610054【正文语种】中文【中图分类】TN97-34随着人们生活水平的提高,对密码锁的可靠性和安全性也提出了更高的要求。

彭胜-基于VHDL的电子密码锁设计与实现正文

彭胜-基于VHDL的电子密码锁设计与实现正文

1 引言电子密码锁的使用体现了人们消费水平、保安意识和科技水平的提高,而且避免了携带甚至丢失钥匙的麻烦。

目前设计密码锁的方法很多,例如用传统的PCB 板设计、用PLC 设计或者用单片机设计。

而用V HDL 可以更加快速、灵活地设计出符合各种要求的密码锁,优于其他设计方法,使设计过程达到高度自动化。

本设计在Max + plus Ⅱ的环境中进行,用Al2tera 公司ACEX 1 K系列的EP1 K30 TC14423 来实现。

ACEX 1 K是Altera 公司着眼于通信、音频处理及类似场合的应用而推出的FPGA 器件芯片系列,其典型门数为10 万门,是当今Altera 多种产品中应用前景最好的器件系列之一。

EDA 技术设计电子系统具有用软件的方式设计硬件;设计过程中可用有关软件进行各种仿真,系统可现场编程、在线升级,整个系统可集成在一个芯片上等特点;不但设计周期短、设计成本低,而且将提高产品或设备的性能,缩小产品体积、提高产品的技术含量,提高产品的附加值。

用VHDL设计电子密码锁方案:作为通用电子密码锁,主要由 3 个部分组成:数字密码输入电路、密码锁控制电路和密码锁显示电路,作为电子密码锁的输入电路。

可供选择的方案有数字机械式键盘和触摸式数字键盘等多种。

(1)密码锁输入电路包括时序产生电路、键盘扫描电路、键盘弹跳消除电路、键盘译码电路等几个小的功能电路。

(2)密码锁控制电路包括按键数据的缓冲存储电路,密码的清除、变更、存储、激活电锁电路(寄存器清除信号发生电路),密码核对(数值比较电路),解锁电路(开/关门锁电路)等几个小的功能电路。

(3)七段数码管显示电路主要将待显示数据的BCD码转换成数码器的七段显示驱动编码。

1.1 课题背景随着社会的发展和人们生活水平的提高,人们的安全意识也逐步加强。

传统的机械锁由于其构造的简单,失效的事件屡见不鲜,如何实现保密防盗这一问题变的尤其的突出,密码锁以其安全性高、成本低、功耗低、易操作等优点受到越来越多人的欢迎。

FPGA和Verilog设计中的latch锁存器的问题

FPGA和Verilog设计中的latch锁存器的问题

FPGA和Verilog设计中的latch锁存器的问题一直都知道fpga中有latch这么一回事,但是一直都不太清楚到底什么是锁存器,它是怎么产生的,它到底和寄存器有多少区别,它怎么消除。

为什么说他不好?一,是什么锁存器是一种在异步时序电路系统中,对输入信号电平敏感的单元,用来存储信息。

一个锁存器可以存储1bit的信息,通常,锁存器会多个一起出现,如4位锁存器,8位锁存器。

锁存器在数据未锁存时,输出端的信号随输入信号变化,就像信号通过一个缓冲器,一旦锁存信号有效,则数据被锁存,输入信号不起作用。

因此,锁存器也被称为透明锁存器,指的是不锁存时输出对于输入是透明的。

二锁存器与寄存器的区别:两者都是基本存储单元,单锁存器是电平触发的存储器,触发器是边沿触发的存储器。

本质是,两者的基本功能是一样的,都可以存储数据。

意思是说一个是组合逻辑的,一个是在时序电路中用的,时钟出发的。

三,锁存器的危害:对毛刺敏感,不能异步复位,所以上电以后处于不确定的状态;Latch会使静态时序分析变得非常复杂;在PLD芯片中,基本的单元是由查找表和触发器组成的,若生成锁存器反而需要更多的资源。

第三条也是最基本的原因。

四,产生的原因********ps重重之重上面说了那没多只是觉得网上的没把锁存器说明白。

下面的才是重点。

1,case2,if-------else if3,always@(敏感信号表)五解决1.case——————加default:关于defalut的情况:一是可以default:data=1‘bx;这个x表示未知,在综合时可以避免产生锁存器。

在仿真时是红线表示。

二是default:data=0;这样产生一个默认的情况。

2.if-----------------------一定要有else语句。

3.always---------如是说道:在赋值表达式右边参与赋值的信号都必须在always@(敏感电平列表)中列出。

如果在赋值表达式右端引用了敏感电平列表中没有列出的信号,那么在综合时,将会为该没有列出的信号隐含地产生一个透明锁存器。

fpga加密方法

fpga加密方法

fpga加密方法
FPGA(现场可编程门阵列)的加密方法主要有以下几种:
1. 自带加密功能的FPGA:一些FPGA供应商在其产品中集成了加密功能,如Xilinx的Virtex-2~5系列和ALtera的Stratix II~III系列。

这些FPGA 使用特定的加密算法,如DES或AES,对程序进行加密。

当程序被加载到FPGA内部的SRAM时,会被解密并执行。

这种方法的安全性较高,但需要使用特定系列的FPGA。

2. 在系统中增加可加密的MCU:对于没有自带加密功能的FPGA,可以在系统中增加一个可加密的MCU。

用户可以根据自己的需求编写加密算法,对FPGA程序进行加密。

加密后的程序被下载到Flash中,然后由MCU将其解密并加载到FPGA的SRAM中运行。

这种方法提供了更大的灵活性,但需要编写额外的加密和解密代码。

3. 使用DNA功能:某些FPGA芯片具有DNA功能,即每个芯片都有独特的序列号。

这种功能可以在设计中用于增加安全性,例如通过将序列号用于加密算法中,使得每个芯片的加密密钥都是唯一的。

这种方法可以在一定程度上防止程序被复制或克隆。

需要注意的是,无论采用哪种加密方法,都需要确保加密算法的安全性,并采取适当的措施来保护密钥和敏感数据。

同时,加密和解密操作可能会增加系统复杂性和功耗,因此在设计时应权衡利弊。

FPGA基于verilog HDL的密码锁

FPGA基于verilog HDL的密码锁

EDA课程设计课设名称:密码锁课设日期: 2014。

6。

23——7。

5 姓名:陈飞学号:110250101哈尔滨工业大学(威海)信电学院电子信息工程2014。

6一。

所用软件与硬件介绍1。

1所用软件介绍QuartusII是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

QuartusII可以在XP、Linux以及Unix上使用,除了可以使用TCL脚本完成设计流程外,提供了完善的用户图形界面设计方式。

具有运行速度快,界面统一,功能集中,易学易用等特点.QuartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。

对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。

此外,QuartusII 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。

目前Altera已经停止了对MaxplusII 的更新支持,QuartusII 与之相比不仅仅是支持器件类型的丰富和图形界面的改变.Altera在QuartusII 中包含了许多诸如SignalTapII、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC 和HardCopy设计流程,并且继承了MaxplusII 友好的图形界面及简便的使用方法.1.2所用硬件介绍硬件的总体设计:故由上图,将整个硬件电路部分主要分成五个部分,即:FPGA电路设计,数码管显示驱动电路设计,温度传感器电路设计,报警电路设计,键盘矩阵控制电路设计。

基于fpga的数字密码锁(使用矩阵键盘)

基于fpga的数字密码锁(使用矩阵键盘)

基于FPGA 数字密码锁板子使用的是DE2顶层topmodule lock(reset,clk,row,col,mm0,mm1,mm2,mm3,led1,led2,led3,set_flog); input clk,reset;input [3:0]row;output wire [3:0] col;output wire [6:0] mm0,mm1,mm2,mm3;output reg led1, led2,led3;wire [3:0]key_value;reg [3:0] temp_key;reg [3:0] m0,m1,m2,m3;reg [3:0] m_0,m_1,m_2,m_3;reg [5:0] state;reg [2:0] wei;wire key_valid;reg [1:0]count_wrong;output reg set_flog;parameter valid =6'b000000,set =6'b000001,collection_mm =6'b000010,cmd =6'b000100,collection =6'b001000,wrong =6'b010000,correct =6'b100000,die_lock =6'b000011,lock =6'b000111;always @(posedge clk or negedge reset)beginif(!reset)beginstate<=6'b000000;wei<=0;led3<=0;set_flog<=0;led1<=0;led2<=0;m0<=15;m1<=15;m2<=15;m3<=15;endelse begincase(state)valid :if(key_valid)begintemp_key<=key_value;state<=collection;endelsestate<=valid;collection : beginif(key_value>=0&&key_value<=9)beginif(led1&&(!set_flog))//开启状态不能按数字键state<=valid;else if((!key_valid)&&(wei<5))beginled2<=0;state<=collection_mm;wei<=wei+1'b1;endelsestate<=collection;endelseif(!key_valid)state<=cmd;endcollection_mm: begincase(wei)1:m0<=temp_key;2:m1<=temp_key;3:m2<=temp_key;4:m3<=temp_key;endcasestate<=valid;endcmd : begincase(temp_key)15:if(!led1)beginm0<=15;m1<=15;m2<=15;m3<=15;//*clearstate<= valid;wei<=0;led2<=0;led1<=0;endelsestate<= valid;14:if(led1)state<= valid;else if(wei) //back deletebegincase(wei)1:m0<=15;2:m1<=15;3:m2<=15;4:m3<=15;endcasewei<=wei-1'b1;state<=valid;led2<=0;endelsestate<=valid;13: if(set_flog)//保存密码beginset_flog<=0;led1<=0;m_0<=m0;m_1<=m1;m_2<=m2;m_3<=m3;state<=lock;endelseif((m0==m_0)&&(m1==m_1)&&(m2==m_2)&&(m3==m_3))//comparebeginstate<=correct;m0<=15;m1<=15;m2<=15;m3<=15;endelse beginstate<=wrong;count_wrong<=count_wrong+1;end12: state<=lock;10: if(led1) //setbeginset_flog<=1;wei<=0;m0<=15;m1<=15;m2<=15;m3<=15;state<=valid;enddefault:state<=valid;endcaseendcorrect :begin //openled1<=1;state<=valid;count_wrong<=0;endwrong :beginled2<=1;state<=valid;led1<=0;if(count_wrong==3) //lock diebegincount_wrong<=0;state<=die_lock;endendlock :beginled1<=0;wei<=0;led2<=0;m0<=15;m1<=15;m2<=15;m3<=15;set_flog<=0;state<=valid;enddie_lock:led3<=1;endcaseendendwire [15:0] mm={m3,m2,m1,m0};key key_scan(reset,clk,row,col,key_value,key_valid);display dis_u1(clk,mm,mm3,mm2,mm1,mm0);endmodule键盘扫描模块module key(reset,clk,row,col,key_value,key_flag);input clk,reset;input [3:0] row;//hangoutput reg [3:0] col;//lieoutput reg [3:0] key_value;output reg key_flag;reg [3:0] row_reg;reg [3:0] col_reg;reg [19:0] count;reg [2:0] state;reg clk_500khz;always @(posedge clk or negedge reset)if(!reset) beginclk_500khz<=0;count<=0;endelseif(count>=5000) begin clk_500khz<=~clk_500khz;count<=0;end else count<=count + 1'b1;always @(posedge clk_500khz or negedge reset)beginif(!reset)begin col<=0;state<=0;row_reg<=0;col_reg<=0;end elsebegincase(state)0:begincol<=0;key_flag<=0;if(row[3:0]!=4'b1111)beginstate<=1;col[3:0]<=4'b1110;endelse state<=0;end1: if(row[3:0]!=4'b1111) state<=5;else begin state<=2;col<=4'b1101;end2: if(row[3:0]!=4'b1111) state<=5;else begin state<=3;col<=4'b1011;end3: if(row[3:0]!=4'b1111) state<=5;else begin state<=4;col<=4'b0111;end 4: if(row[3:0]!=4'b1111) state<=5;else state<=0;5: if(row[3:0]!=4'b1111)begincol_reg<=col;row_reg<=row;state<=5;key_flag<=1;endelsestate <=0;endcaseendendalways@(clk or col_reg or row_reg or key_value)beginif(!reset)key_value<=0;else if(key_flag==1'b1)begincase({col_reg,row_reg})8'b1110_1110:key_value<=1;8'b1110_1101:key_value<=2;8'b1110_1011:key_value<=3;8'b1110_0111:key_value<=10;//a8'b1101_1110:key_value<=4;8'b1101_1101:key_value<=5;8'b1101_1011:key_value<=6;8'b1101_0111:key_value<=11;//b8'b1011_1110:key_value<=7;8'b1011_1101:key_value<=8;8'b1011_1011:key_value<=9;8'b1011_0111:key_value<=12;//c8'b0111_1110:key_value<=15;//*8'b0111_1101:key_value<=0;8'b0111_1011:key_value<=14;//#8'b0111_0111:key_value<=13;//d endcaseendendendmodule显示模块module display(clk,mm,wei0,wei1,wei2,wei3); input [15:0]mm;input clk;output reg [6:0] wei0,wei1,wei2,wei3;always @(clk)begincase(mm[3:0])4'b0000:wei0<=7'b 1000000;4'b0001:wei0<=7'b 1111001;4'b0010:wei0<=7'b 0100100;4'b0011:wei0<=7'b 0110000;4'b0100:wei0<=7'b 0011001;4'b0101:wei0<=7'b 0010010;4'b0110:wei0<=7'b 0000010;4'b0111:wei0<=7'b 1111000;4'b1000:wei0<=7'b 0000000;4'b1001:wei0<=7'b 0011000;4'b1010:wei0<=7'b 0001000;4'b1011:wei0<=7'b 0000011;4'b1100:wei0<=7'b 1000110;4'b1101:wei0<=7'b 0100001;4'b1110:wei0<=7'b 0000110;4'b1111:wei0<=~7'b 1000000;//4'b1111:wei0<=7'b 0001110;endcasecase(mm[7:4])4'b0000:wei1<=7'b 1000000;4'b0001:wei1<=7'b 1111001;4'b0010:wei1<=7'b 0100100;4'b0011:wei1<=7'b 0110000;4'b0100:wei1<=7'b 0011001;4'b0101:wei1<=7'b 0010010;4'b0110:wei1<=7'b 0000010;4'b0111:wei1<=7'b 1111000;4'b1000:wei1<=7'b 0000000;4'b1001:wei1<=7'b 0011000;4'b1010:wei1<=7'b 0001000;4'b1011:wei1<=7'b 0000011;4'b1100:wei1<=7'b 1000110; 4'b1101:wei1<=7'b 0100001; 4'b1110:wei1<=7'b 0000110; 4'b1111:wei1<=~7'b 1000000; //4'b1111:wei1<=7'b 0001110; endcasecase(mm[11:8])4'b0000:wei2<=7'b 1000000; 4'b0001:wei2<=7'b 1111001; 4'b0010:wei2<=7'b 0100100; 4'b0011:wei2<=7'b 0110000; 4'b0100:wei2<=7'b 0011001; 4'b0101:wei2<=7'b 0010010; 4'b0110:wei2<=7'b 0000010; 4'b0111:wei2<=7'b 1111000; 4'b1000:wei2<=7'b 0000000; 4'b1001:wei2<=7'b 0011000; 4'b1010:wei2<=7'b 0001000; 4'b1011:wei2<=7'b 0000011; 4'b1100:wei2<=7'b 1000110; 4'b1101:wei2<=7'b 0100001; 4'b1110:wei2<=7'b 0000110; 4'b1111:wei2<=~7'b 1000000; //4'b1111:wei2<=7'b 0001110; endcasecase(mm[15:12])4'b0000:wei3<=7'b 1000000; 4'b0001:wei3<=7'b 1111001; 4'b0010:wei3<=7'b 0100100; 4'b0011:wei3<=7'b 0110000; 4'b0100:wei3<=7'b 0011001; 4'b0101:wei3<=7'b 0010010; 4'b0110:wei3<=7'b 0000010; 4'b0111:wei3<=7'b 1111000; 4'b1000:wei3<=7'b 0000000; 4'b1001:wei3<=7'b 0011000; 4'b1010:wei3<=7'b 0001000; 4'b1011:wei3<=7'b 0000011; 4'b1100:wei3<=7'b 1000110; 4'b1101:wei3<=7'b 0100001; 4'b1110:wei3<=7'b 0000110; 4'b1111:wei3<=~7'b 1000000; //4'b1111:wei3<=7'b 0001110; endcaseend endmodule。

EDA技术及应用—基于FPGA的电子系统设计:基于Verilog hdl的数字电路设计

EDA技术及应用—基于FPGA的电子系统设计:基于Verilog hdl的数字电路设计

10100
1111
15
10101
8421BC 余三码 D码
0000
0011
0001
0100
0010
0101
0011
0110
0100
0111
0101
1000
0110
1001
0111
1010
1000
1011
1001
1100
-
-
-
-
-
-
-
-
-
-
-
-
4位格雷码
0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000
4'b0011:a_to_g=7'b1111001; //显示3
4'b0100:a_to_g=7'b0110011; //显示4
4'b0101:a_to_g=7'b1011011; //显示5
4'b0110:a_to_g=7'b1011111; //显示6
4'b0111:a_to_g=7'b1110000; //显示7
4: y= {d[2:0],d[3]}; // rol
5: y= {d[3],d[3:1]}; // asr
6: y= {d[1:0],d[3:2]}; // ror2
7: y= d;
// noshift
default: y = d;
图6-2 基本门电路仿真结果
综合结果如图6-3所示。
图6-3 基本门电路综合结果
2、 三态逻辑电路

基于FPGA的加密算法设计与实现

基于FPGA的加密算法设计与实现

基于FPGA的加密算法设计与实现近年来,随着社会信息化的不断推进,数据安全性越来越受到广泛关注。

而对于各种形式的数据进行加密便成为了保障数据安全的一种重要手段。

在这种背景下,FPGA基于的加密算法得到了广泛的研究和应用。

本文将着重探讨基于FPGA的加密算法设计与实现。

一、FPGA与加密算法FPGA是可编程逻辑门阵列,它的特点是可重构性强、硬件配置灵活,能够满足各种不同应用的需求。

FPGA在加密算法设计与实现方面具有很大的优势,它不仅能够进行高效的数据加密和解密操作,而且还可以在网络加速、安全路由器等领域得到应用。

二、基于FPGA的加密算法设计1.对称加密算法设计对称加密算法是一种广泛应用的加密算法,在FPGA上进行对称加密算法设计主要包括DES(数据加密标准)、AES(高级加密标准),这两种算法分别在硬件资源利用率和加密速度方面有不同的优势。

2.非对称加密算法设计非对称加密算法设计主要包括RSA算法和椭圆曲线加密算法,这两种算法在FPGA上的资源利用和加密速度等方面都需要进行优化,同时还需要考虑安全性和稳定性等问题。

三、基于FPGA的加密算法实现1.硬件实现硬件实现主要是针对对称算法设计进行优化,采用硬件电路实现数据加密解密操作,具有加密速度快、安全性高等优点。

对于AES加密算法,硬件实现可采用S-box的共享、Pipelining、流水线相关技术等方法进行优化,以达到更高的加密速度和更高的硬件资源利用率。

2.软件实现软件实现主要是针对对称算法和非对称算法进行,采用CPU的软件程序设计实现数据加密解密。

软件实现主要具有灵活、简单等优点,同样可进行优化和加速。

对于RSA算法,软件实现可以采用Montgomery算法等数学优化算法,以达到加速的效果;对于AES算法,采用SIMD指令集等技术进行加速。

四、FPGA加密算法的安全问题在进行FPGA加密算法设计与实现时,也需要注意其安全性问题。

主要有以下几方面:1.密钥保护:FPGA加密算法的设计中,密钥的保护尤为重要,需要采取适当的安全措施,如物理隔离、动态密钥更新、复杂化密钥算法等方式保护密钥安全。

基于Verilog语言的8位数字密码锁设计

基于Verilog语言的8位数字密码锁设计

基于Verilog语言的8位数字密码锁设计本科学生学年论文题目:8位数字密码锁设计学院:电子工程学院年级:2011级专业:电子科学与技术(光电子)姓名: 李思远学号:20112508指导教师:林连东2011年5月28日8位数字密码锁设计摘要本文简述了VHDL语言的功能及其特点,并以8位串行数字锁设计为例,介绍了在QUARTUS II 6. 0开发软件下,利用VHDL硬件描述语言设计数字逻辑电路的过程和方法。

关键词:VHDL语言数字锁QUARTUS II 6.0 硬件描述语言数字逻辑电路AbstractThis paper describes the function and characteristics of VHDL language, and eight serial number lock design as an example, this paper introduces QUARTUS II 6・ 0 software development in of VHDL hardware design of digital logic circuit process and method.Keywords: VHDL language QUARTUS II 6・ 0 hardware description language, digitallogic circuit8位数字密码锁设计第一章前言Abstract第二章密码锁系统的设计2.1设计要求2.2设计分析 (5)第三章软件设计 (6)第四章软件仿真及验证 (10)12参考文献 (13)致谢 (14)第一章前言电子密码锁系统主要由电子锁体、电子密匙等部分组成,一把电子密匙里能存放多组开锁密码,用户在使用过程中能够随时修改开锁密码,更新或配制钥匙里开锁密码。

一把电子锁可配制多把钥匙。

语音方面的广泛应用,使得具有语音播放的电子密码锁使用起来更加方便。

fpga简易四位密码锁的代码

fpga简易四位密码锁的代码

FPGA简易四位密码锁的代码一、概述在现代社会中,密码锁被广泛应用于各种场合,如家庭、商业和工业等。

密码锁的使用方便、安全性高,受到了人们的青睐。

FPGA (Field Programmable Gate Array)作为一种灵活可编程的硬件设备,可以用来实现各种数字逻辑电路,包括密码锁。

本文将介绍如何使用FPGA实现一个简易的四位密码锁,并提供相应的代码。

二、硬件设计1. 需要的硬件- FPGA开发板- 数字键盘- LED数码管2. 硬件连接- 将数字键盘通过连接线连接到FPGA开发板上的GPIO端口,用于输入密码;- 将LED数码管通过连接线连接到FPGA开发板上的GPIO端口,用于显示密码输入状态。

三、软件设计1. Verilog代码设计```verilog// 模块声明module password_lock (input wire clk, // 时钟信号input wire rst, // 复位信号input wire [3:0] key_in, // 数字键盘输入output reg [3:0] led_out // LED数码管输出);// 代码实现reg [3:0] password = 4'b1101; // 设定密码为1101always (posedge clk or posedge rst) beginif (rst) beginled_out <= 4'b1111; // 置LED数码管输出为1111end else beginif (key_in == password) beginled_out <= 4'b0000; // 如果输入密码正确,则LED数码管输出为0000end else beginled_out <= 4'b1111; // 如果输入密码错误,则LED数码管输出为1111endendendendmodule```2. 实现原理说明- 模块声明中指定了模块的输入和输出端口;- 代码实现中首先设定了一个四位的密码,然后在时钟信号的作用下判断输入的密码是否与设定的密码相匹配,如果匹配则将LED数码管输出为0000,表示密码正确;否则输出为1111,表示密码错误。

基于-VerilogHDL的数字密码锁的设计

基于-VerilogHDL的数字密码锁的设计

基于Verilog HDL的数字密码锁设计是一种常见的数字电路设计项目,它可以帮助学生理解数字逻辑电路和Verilog HDL的应用。

下面将详细介绍数字密码锁的设计方案。

一、系统结构设计数字密码锁主要由数字键盘、数码管显示、密码比对模块和控制逻辑组成。

数字键盘用于输入密码,数码管显示用于显示密码输入状态和开锁结果,密码比对模块用于比对输入的密码和预设的密码是否一致,控制逻辑用于控制整个系统的运行。

二、硬件设计1. 数字键盘:数字键盘采用矩阵式键盘,通过扫描按键来获取用户输入的密码。

2. 数码管显示:数码管用于显示密码输入状态,例如显示“请输入密码”、“密码正确”或“密码错误”等信息。

3. 密码比对模块:密码比对模块接收输入的密码和预设的密码,在Verilog HDL中实现密码比对逻辑。

4. 控制逻辑:控制逻辑用于控制密码输入、比对和显示的流程,以及控制门锁的开关。

三、Verilog HDL设计1. 数字键盘输入模块:编写Verilog HDL代码来接收数字键盘输入的密码。

2. 密码比对模块:编写Verilog HDL代码来比对输入的密码和预设的密码,输出比对结果。

3. 数码管控制模块:编写Verilog HDL代码来控制数码管的显示,根据密码比对结果显示相应的信息。

四、系统功能设计1. 密码输入功能:用户通过数字键盘输入密码。

2. 密码比对功能:系统对输入的密码进行比对,判断密码是否正确。

3. 显示功能:数码管显示密码输入状态和开锁结果。

五、仿真与综合完成Verilog HDL代码设计后,进行仿真验证,确保系统能够正常工作。

然后进行综合和布局布线,生成FPGA可编程文件。

六、总结与展望通过数字密码锁的设计,学生可以深入理解数字逻辑电路、Verilog HDL语言的应用,并且掌握数字密码锁系统的设计原理。

未来,可以进一步优化系统功能,增加更多的安全性和便利性功能,提升系统的性能和可靠性。

fpga电子密码锁课程设计

fpga电子密码锁课程设计

fpga电子密码锁课程设计一、课程目标知识目标:1. 学生能理解FPGA的基本原理和电子密码锁的工作机制;2. 学生能掌握使用硬件描述语言(HDL)进行数字电路设计和实现的方法;3. 学生能了解数字电路中常见的加密算法,并运用到电子密码锁的设计中;4. 学生能分析并解决电子密码锁在实际应用中可能遇到的问题。

技能目标:1. 学生能运用所学知识,设计并实现一个基于FPGA的电子密码锁;2. 学生能熟练使用相关硬件描述语言和开发工具,完成电子密码锁的编程与调试;3. 学生能通过实际操作,提高动手能力和团队协作能力;4. 学生能通过课程项目,培养创新思维和问题解决能力。

情感态度价值观目标:1. 学生能够认识到科技对社会和生活的重要性,增强学习科技的兴趣和责任感;2. 学生能够在课程学习中,培养勇于探索、积极进取的精神;3. 学生能够通过团队协作,学会互相尊重、沟通与协作,培养良好的团队精神;4. 学生能够关注电子密码锁在安全领域的应用,提高对国家和社会安全的意识。

二、教学内容1. 数字电路基础:回顾数字电路的基本概念,重点掌握组合逻辑电路和时序逻辑电路的设计原理;教材章节:第一章 数字逻辑基础2. FPGA原理与应用:介绍FPGA的基本结构、工作原理以及编程方法;教材章节:第二章 可编程逻辑器件及其编程技术3. 硬件描述语言(HDL):学习硬件描述语言的基本语法和编程技巧;教材章节:第三章 硬件描述语言VHDL/Verilog基础4. 加密算法:讲解常见的加密算法,如AES、DES等,分析其原理和实现方法;教材章节:第四章 数字信号处理与加密算法5. 电子密码锁设计与实现:结合所学知识,设计并实现一个基于FPGA的电子密码锁;教材章节:第五章 数字系统设计实例分析与综合6. 课程项目与实践:以小组形式进行项目实践,完成电子密码锁的设计、编程、调试和测试;教材章节:第六章 数字系统项目实践教学内容安排和进度:第1周:数字电路基础复习第2周:FPGA原理与应用学习第3-4周:硬件描述语言学习第5周:加密算法学习第6-8周:电子密码锁设计与实现第9-10周:课程项目与实践,成果展示与评价。

基于fpga的数字密码锁设计与实现

基于fpga的数字密码锁设计与实现

一、概述在当今信息技术高度发达的时代,数字密码锁已成为人们生活中常见的安全保障措施之一。

随着FPGA(可编程逻辑门阵列)技术的不断成熟和普及,基于FPGA的数字密码锁设计与实现已经成为一个备受关注的研究方向。

本文将探讨基于FPGA的数字密码锁的设计原理、实现过程以及相关技术细节,为相关领域的研究和应用提供参考。

二、数字密码锁的基本原理1.数字密码锁的基本功能数字密码锁是一种利用密码验证来进行身份识别和门禁控制的设备。

其基本功能包括输入密码、密码验证和门禁控制等。

2.数字密码锁的工作原理数字密码锁通常由键盘、控制单元和执行单元等组成,其工作原理是用户通过键盘输入密码,控制单元接收并验证密码的正确性,然后执行单元根据验证结果控制门禁的开启或关闭。

三、基于FPGA的数字密码锁设计1.基于FPGA的数字密码锁的优势相比传统的基于单片机或嵌入式系统的数字密码锁,基于FPGA的数字密码锁具有更高的灵活性和可扩展性。

FPGA可以根据实际需求进行灵活的硬件逻辑设计,同时兼容多种通信协议和接口,使得其在数字密码锁设计中具有显著的优势。

2.基于FPGA的数字密码锁的设计原理基于FPGA的数字密码锁主要包括密码输入模块、密码验证模块和门禁控制模块。

密码输入模块负责接收用户输入的密码,密码验证模块根据预设的密码进行验证,门禁控制模块根据验证结果控制门禁的开启或关闭。

3.基于FPGA的数字密码锁的设计流程(1)确定需求:明确数字密码锁的功能和性能要求。

(2)硬件设计:设计数字密码锁的硬件逻辑,包括键盘接口、密码验证逻辑和门禁控制逻辑。

(3)软件设计:设计数字密码锁的用户界面和控制逻辑。

(4)综合与实现:将硬件和软件进行综合,实现数字密码锁的功能。

四、基于FPGA的数字密码锁的实现1.硬件设计(1)键盘接口设计:采用矩阵式键盘接口,利用FPGA内部的GPIO 接口进行连接。

(2)密码验证逻辑设计:采用逻辑门设计密码验证逻辑,包括密码存储、密码输入和密码比对等功能。

毕业设计(论文)-基于FPGA的四位电子密码锁

毕业设计(论文)-基于FPGA的四位电子密码锁

基于FPGA的四位电子密码锁摘要随着电子技术的发展,具有防盗报警等功能的电子密码锁代替密码量少、安全性差的机械式密码锁已是必然趋势。

电子密码锁与普通机械锁相比,具有许多独特的优点:保密性好,防盗性强,可以不用钥匙,记住密码即可开锁等。

目前使用的电子密码锁大部分是基于单片机技术,以单片机为主要器件,其编码器与解码器的生成为软件方式。

在实际应用中,由于程序容易跑飞,系统的可靠性能较差。

本文主要阐述了一种基于现场可编程门阵列FPGA器件的电子密码锁的设计方法。

用FPGA器件构造系统,所有算法完全由硬件电路来实现,使得系统的工作可靠性大为提高。

由于FPGA具有现场可编程功能,当设计需要更改时,只需更改FPGA中的控制和接口电路,利用EDA工具将更新后的设计下载到FPGA中即可,无需更改外部电路的设计,大大提高了设计的效率。

因此,采用FPGA开发的数字系统,不仅具有很高的工作可靠性,而且升级也极其方便。

本文采用EDA技术,利用Quartus II工作平台和硬件描述语言,设计了一种电子密码锁,并通过一片FPGA芯片实现。

关键词:电子密码锁;FPGA;硬件描述语言;EDAFour FPGA-based electronic lockABSTRACTWith the development of electronic technology, electronic password lock with burglar alarm and other functions replacing less password and poor security mechanical code lock is an inevitable trend. compared electronic password lock with ordinary mechanical locks, it has many unique advantages :confidentiality, and security in nature, do not use the key, remember password can unlock it etc .Most electronic password locks we used now is based upon SCM technology ,SCM is its mainly device ,and the creating of encoding and decoding devices is the fashion of Software mode. In practical application, the reliability of the system may be worse because of easy running fly of the programme.This paper mainly expatiates a design method of electronic password lockbased upon Field Programmable Gate Array device. We use FPGA devices to construct system , all of the algorithm entirely achieved by the hardware circuit , because of FPGA has the function of ISP , when the design needs to be changed We only need to change the control and interface circuit of FPGA,EDA tools are used to download the updated design to FPGA without changing the design of the external circuit , this greatly enhance the efficiency of the design .Therefore , we use FPGA to empolder the digital system has not only high reliability but also extremely convenient of upgrading and improvement .In this paper ,we use EDA technology , Quartus II platform and hardware description language designing an electronic password lock ,and it achieved through an FPGA chip.Key words:electronic password lock;FPGA;hardware description language;EDA目录摘要 (I)ABSTRACT (Ⅱ)1 绪论 (1)1.1国内外现状及其发展 (1)1.2电子密码锁的系统简介 (2)1.3系统设计要求 (2)1.4本课题的研究目的和意义 (3)2FPGA与VHDL硬件描述语言 (4)2.1FPGA的相关介绍 (4)2.2VHDL硬件描述语言 (6)2.2.1 VHDL语言的基本结构 (6)3电子密码锁的设计与实现 (8)3.1电子密码锁设计要求 (8)3.2总体设计思想 (8)3.3子模块的设计思想及实现 (9)3.3.1输入模块的设计与实现 (9)3.3.2控制电路设计与实现 (13)3.3.3显示模块设计与实现 (17)3.3.4电子密码锁的系统实现 (18)4电子密码锁的时序仿真 (19)4.1电子密码锁的设计流程 (19)4.2系统主要模块的仿真 (19)总结 (23)结束语 (24)参考文献 (25)附录 (26)1 绪论1.1 国内外现状及其发展随着人们生活水平的提高和安全意识的加强,对安全的要求也就越来越高。

课程设计报告-基于fpga的电子密码锁的设计

课程设计报告-基于fpga的电子密码锁的设计

课程设计报告-基于fpga的电子密码锁的设计
一、引言
随着计算机技术的发展,传统的安全锁逐渐淡出人们的视野,取而代之的是一种更加
先进而安全的电子密码锁。

采用FPGA开发的电子密码锁在现代实用锁中变得越来越常见,它能够实现简单易懂、稳定可靠的安全锁功能,从而满足人们对安全问题日益严峻的需求。

本文主要介绍基于FPGA技术设计的电子密码锁的原理及实际应用,旨在为技术研究和产
品设计提供有价值的参考。

二、系统概述
电子密码锁是一种可以根据用户的输入及系统的设置的安全保护锁,它主要由输入接口、控制器、显示屏和锁具电源等组成。

基于FPGA设计的电子密码锁主要分为输入端处
理和控制端处理两部分,其中,输入端利用FPGA控制集成电路(IC)、有源转换器和输入/
输出连接器,实现密码锁的输入模块部分的处理功能;控制端利用FPGA实现温度检测和
按键、加密算法、记录密码信息等功能,满足密码锁的控制要求。

三、工作原理
电子密码锁工作原理主要是建立在输入接口和控制器之间的信息传输上。

当用户通过
输入接口输入密码时,控制器收到输入信号,利用自身中内置的加密算法,将输入的密码
信息和系统设置密码进行比对,如果密码正确,系统会将密码锁打开,从而使得受保护的
物品得到有效的安全保护。

四、总结
基于FPGA技术设计的电子密码锁为现代安全保护提供了一种先进的途径,其安全性
和可靠性得到了极大的提高,使得大多数受保护物品得到有效保护。

电子密码锁以及FPGA 技术的发展正在为我们日常生活与工作提供前所未有的便利,也将带给未来更多安全的思
考与希望。

FPGA和Verilog设计中的latch锁存器的问题讲解

FPGA和Verilog设计中的latch锁存器的问题讲解

FPGA和Verilog设计中的latch锁存器的问题一直都知道fpga中有latch这么一回事,但是一直都不太清楚到底什么是锁存器,它是怎么产生的,它到底和寄存器有多少区别,它怎么消除。

为什么说他不好?一,是什么锁存器是一种在异步时序电路系统中,对输入信号电平敏感的单元,用来存储信息。

一个锁存器可以存储1bit的信息,通常,锁存器会多个一起出现,如4位锁存器,8位锁存器。

锁存器在数据未锁存时,输出端的信号随输入信号变化,就像信号通过一个缓冲器,一旦锁存信号有效,则数据被锁存,输入信号不起作用。

因此,锁存器也被称为透明锁存器,指的是不锁存时输出对于输入是透明的。

二锁存器与寄存器的区别:两者都是基本存储单元,单锁存器是电平触发的存储器,触发器是边沿触发的存储器。

本质是,两者的基本功能是一样的,都可以存储数据。

意思是说一个是组合逻辑的,一个是在时序电路中用的,时钟出发的。

三,锁存器的危害:对毛刺敏感,不能异步复位,所以上电以后处于不确定的状态;Latch会使静态时序分析变得非常复杂;在PLD芯片中,基本的单元是由查找表和触发器组成的,若生成锁存器反而需要更多的资源。

第三条也是最基本的原因。

四,产生的原因********ps重重之重上面说了那没多只是觉得网上的没把锁存器说明白。

下面的才是重点。

1,case2,if-------else if3,always@(敏感信号表)五解决1.case——————加default:关于defalut的情况:一是可以default:data=1‘bx;这个x表示未知,在综合时可以避免产生锁存器。

在仿真时是红线表示。

二是default:data=0;这样产生一个默认的情况。

2.if-----------------------一定要有else语句。

3.always---------如是说道:在赋值表达式右边参与赋值的信号都必须在always@(敏感电平列表)中列出。

如果在赋值表达式右端引用了敏感电平列表中没有列出的信号,那么在综合时,将会为该没有列出的信号隐含地产生一个透明锁存器。

基于FPGA的高性能数据加密与解密系统设计与实现

基于FPGA的高性能数据加密与解密系统设计与实现

基于FPGA的高性能数据加密与解密系统设计与实现随着信息技术的迅猛发展,数据的安全性问题日益突出。

为了保护敏感信息的机密性,数据加密与解密技术成为了当今社会中不可或缺的一部分。

在这篇文章中,我们将探讨基于FPGA(现场可编程门阵列)的高性能数据加密与解密系统的设计与实现。

一、引言数据加密与解密是保护数据安全和隐私的关键技术。

传统的软件实现数据加密与解密在处理大规模数据时会遇到性能瓶颈的问题。

相较于软件实现,FPGA在加密与解密的计算密集型任务上具有显著的优势。

FPGA具备并行计算能力,可以加速加密与解密算法的执行速度。

本文将阐述基于FPGA的高性能数据加密与解密系统设计与实现的方法与步骤。

二、数据加密与解密算法选择在设计数据加密与解密系统之前,我们首先需要选择合适的加密与解密算法。

常见的对称加密算法包括DES(数据加密标准),3DES(Triple DES)和AES(高级加密标准)。

而非对称加密算法包括RSA(Rivest-Shamir-Adleman)和椭圆曲线密码算法等。

对于高性能的加密与解密系统,我们选择了AES算法作为基础。

AES算法使用分组密码,适合在FPGA上进行硬件加速。

其具备较高的安全性和执行速度,因此是许多数据通信和存储系统中使用的主要加密算法。

三、FPGA高性能数据加密与解密系统设计1. 系统架构设计基于FPGA的高性能数据加密与解密系统的设计需要考虑多个模块的协同工作。

该系统的主要模块包括数据缓存模块、加密/解密算法模块、协议控制模块和数据传输接口模块等。

- 数据缓存模块:负责临时存储输入和输出的数据,减少对外部存储器的访问延迟。

- 加密/解密算法模块:实现AES加密/解密算法,包括轮密钥生成、字节代换、行移位、列混淆等操作。

- 协议控制模块:负责控制系统的工作流程,包括输入数据的传输、加密/解密操作的控制和输出数据的传输等。

- 数据传输接口模块:与外部系统进行数据的输入和输出。

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

EDA课程设计课设名称:密码锁课设日期: 2014.6.23——7.5 姓名:陈飞学号:110250101哈尔滨工业大学(威海)信电学院电子信息工程2014.6一. 所用软件与硬件介绍1.1所用软件介绍QuartusII是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

QuartusII可以在XP、Linux以及Unix上使用,除了可以使用TCL脚本完成设计流程外,提供了完善的用户图形界面设计方式。

具有运行速度快,界面统一,功能集中,易学易用等特点。

QuartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。

对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。

此外,QuartusII 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。

目前Altera已经停止了对MaxplusII 的更新支持,QuartusII 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。

Altera在QuartusII 中包含了许多诸如SignalTapII、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了MaxplusII 友好的图形界面及简便的使用方法。

1.2所用硬件介绍硬件的总体设计:故由上图,将整个硬件电路部分主要分成五个部分,即:FPGA电路设计,数码管显示驱动电路设计,温度传感器电路设计,报警电路设计,键盘矩阵控制电路设计。

I.FPGA芯片的介绍在本次课程设计中选用Altera公司Cyclone II系列FPGA器件。

Altera公司2004年推出了新款Cyclone II系列FPGA器件。

Cyclone II FPGA 的成本比第一代Cyclone器件低30%,逻辑容量大了三倍多,可满足低成本大批量应用需求。

随着低复杂度FPGA器件成本的不断下降,具有灵活性和及时面市优势的FPGA与ASIC相比更有竞争性,在数字消费市场上的应用也急剧增加。

第一代Cyclone系列迄今发售了3百多万片,在全球拥有3,000多位客户,对大批量低成本数字消费市场有着巨大的影响,该市场消纳了三分之一的器件。

同时,Cyclone II器件系列也在电信、计算机外设、工业和汽车市场上获得了巨大的进步。

Cyclone II器件包含了许多新的特性,如嵌入存储器、嵌入乘法器、PLL和低成本的封装,这些都为诸如视频显示、数字电视(DTV)、机顶盒(STB)、DVD播放器、DSL调制解调器、家用网关和中低端路由器等批量应用进行了优化。

Cyclone II器件采用TSMC90nm低K绝缘材料工艺技术,这种技术结合Altera 低成本的设计方式,使之能够在更低的成本下制造出更大容量的器件。

这种新的器件比第一代Cyclone产品具有两倍多的I/O引脚,且对可编程逻辑,存储块和其它特性进行了最优的组合,具有许多新的增强特性低成本的配置器件编辑Altera为配置Cyclone II FPGA提供了低成本的串行配置器件。

这些串行配置器件定价为批量应用,成本是相应Cyclone II FPGA的10%。

四个串行配置器件(1Mbit,4Mbit,16Mbit和64Mbit)提供了节省空间的8脚和16脚SOIC封装。

器件中任何不用于配置的存储器可用于一般存储,进一步增强其价值。

IP编辑Altera也为Cylcone II器件客户提供了40多个可定制IP核,Altera和Altera Megafunction伙伴计划(AMPPSM)合作者提供的不同的IP核是专为Cyclone II架构优化的,包括:Nios II嵌入式处理器;DDR SDRAM控制器;FFT/IFFT;PCI编译器;FIR编译器;NCO编译器;POS-PHY编译器;Reed Solomon 编译器;Viterbi编译器等等。

II.数码管显示器液晶显示器按其功能可分为三类,笔段式液晶显示器,字符点阵式液晶显示器和图形点阵式液晶显示器。

前两种可以显示数字,字符,符号等。

而图形点阵式液晶显示器还可以显示汉子和任意图形,达到图文并茂的鲜果。

在本课程设计中,受到试验箱的限制,在这里使用的是基本的数码管显示。

当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。

如:显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。

LED数码管有一般亮和超亮等不同之分,也有0.5寸、1寸等不同的尺寸。

小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成,一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。

发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。

常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。

二.系统设计2.1设计思想2.1.1课题背景众所周知,随着科学技术的发展,以及数字电路的各种产品广泛应用,传统意义上的机械锁应用领域有限,且方便性不高。

由于其构造简单,多数采用物理性结构且多数有常识的人对其构造了如指掌,安全性不高。

相对机械锁,电子密码锁其保密性高,使用灵活性好,安全系数高,可实时改变其密码,使用极其方便,在当今社会得到了极其广泛的应用,也将是未来发展的趋势。

本设计使用EDA设计,使设计过程得到高度自动化,其具有强大的设计、测试、仿真分析、管理等功能。

使用EDA环境完成电路的系统综合设计和仿真。

在数字信息技术高速发展的今天,越来越多的地方需要电子密码锁来进行信息的加密与保密,而这种功能是传统机械锁无法实现的,因此,电子密码锁的设计越来越重要。

其设计直接关系到其使用的安全性,灵活性,实用性,以及用户体验。

所以,在这个背景下,学会和掌握密码锁的设计是尤其重要的,而且要在这个基础上,不断提高其灵活,实用,及用户体验性。

2.1.2设计目的1.以往机械锁使用繁琐,安全性低,灵活性差,应用领域有限。

而密码锁可以应用于各个领域,如电子产品的保密,系统程序的保密等各种数字信息产品的加密保密。

还可通过外接物理系统,取代传统机械锁,应用于日常生活的方方面面,例如最基本的门锁。

可以说电子密码锁功能强大,安全性高,灵活性强,必将是未来发展的趋势。

本设计基于Verilog HDL语言来设计密码锁,可以快速、灵活地设计出符合各种要求的密码锁。

2.掌握FPGA的设计方法与应用。

2.2工作原理及系统框图1、四个键,确认键,开始复位键,解密键,更改密码键。

2、密码长度为5位,设置一个初始密码88888。

3、在系统上电时,输入88888(数码管同步显示),按下确认键即可开锁(密码正确,LED 灯亮)。

4、开锁状态下,按下更改密码键即可通过4*4矩阵键盘输入新密码。

5、新密码数据格式为0~F6、按确认键,新密码生效。

7、按下解密键,输入新密码,按下确认键可解锁。

8、重复上述步骤,输入新密码,即可开锁,且密码正确情况下LED 灯亮若密码不正确,则LED 灯不亮,锁闭,可继续输入密码,当三次输入密码错误时蜂鸣器响予以警告。

9、以上为整个系统的工作原理及状态。

1011 总体框图调用部分顶层模块报警部分蜂鸣器密码设置4*4矩阵键盘 显示部分七段数码管LED 灯指示LED 灯提示电路 蜂鸣器报警电路输入按扭开关输入锁存电路密码存储电路开锁控制电路数码管显示电路 控制模块总原理图:2.3.子模块输入输出和功能密码锁分为六个个模块:①顶层模块、②数码显示模块、③蜂鸣器模块、④控制模块、⑤LED灯指示模块、⑥密码输入模块。

其中由顶层模块调其他分模块来实现密码锁功能。

1.顶层及控制模块实现几个模块的配合工作,它能实现对密码的设置和显示,同时在密码正确时LED 灯亮,错误三次时通过蜂鸣器发出警报。

2. 数码管显示模块数码管常用于电子产品的显示部分,原理简单易于实现,这里为5个密码,需要5个数码管来显示。

6个输入,其中CLK 为时钟信号,segData1--5为每个密码。

两个输出,segCtl[7..0]对数码管片选,segData[7..0]为译码后的段控制信号。

3、蜂鸣器模块蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用各类电子产品中作发声器件。

如图为其原理图:图 1.1 蜂鸣器原理图结构蜂鸣器功能实现:程序共有两个输入信号分别为ENA,clk,输出为COUT,密码输入错误三次,ENA置1,COUT置1,蜂鸣器响,需要注意的是,蜂鸣器模块时钟频率不能过快。

5.LED灯指示模块为了显示明显,用了所有LED,给同一pass_LED信号,低电平有效。

6.键盘输入模块实时动态扫描,输出按键有效值key_value[4..0],及按键标志位key_flag。

三.软件设计3.1程序流程图和状态机程序流程图:状态机:3.2程序清单(1)Dingceng模块moduledingceng(clk,key_GM,key_QR,key_JM,key_RST,key_ready,key_value,M1,M2,M3,M4,M5,filed_alar m,pass_led);input clk;input key_GM,key_QR,key_JM,key_RST,key_ready;input [4:0] key_value;output [3:0] M1;output [3:0] M2;output [3:0] M3;output [3:0] M4;output [3:0] M5;output filed_alarm;output pass_led;reg [3:0] M1;reg [3:0] M2;reg [3:0] M3;reg [3:0] M4;reg [3:0] M5;reg filed_alarm,pass_led;reg JM_flag;reg GM_flag;reg sign;reg [2:0] main_state;reg [3:0] Old1;reg [3:0] Old2;reg [3:0] Old3;reg [3:0] Old4;reg [3:0] Old5; //cun fang yuan shi mi mareg [2:0] Q,QQ;//ji lu mi ms shu ru ci shureg [1:0] try_times;parameter DD=3'b000,RS=3'b001,JM=3'b010,GM=3'b011,QR=3'b100;always@(posedge clk )if(!key_RST) main_state<=RS;elsebegincase(main_state)DD:beginif(!key_JM) main_state<=JM;else if((key_GM==0)&&(JM_flag==1))beginpass_led<=1;GM_flag<=1;filed_alarm<=0;main_state<=GM;endelsemain_state<=DD;endRS:beginM1<=0;M2<=0;M3<=0;M4<=0;M5<=0;Old1<=8;Old2<=8;Old3<=8;Old4<=8;Old5<=8;filed_alarm<=0;JM_flag<=0;try_times<=0;main_state<=DD;pass_led<=1;Q<=0; QQ<=0;sign<=0;endJM:beginif(key_ready==1) sign<=1;elseif(key_ready==0 && sign==1)beginsign<=0;case(Q)0:begin M1<=key_value;Q<=3'b001; main_state<=DD;end1:begin M2<=key_value;Q<=3'b010; main_state<=DD;end2:begin M3<=key_value;Q<=3'b011; main_state<=DD;end3:begin M4<=key_value;Q<=3'b100; main_state<=DD;end4:begin M5<=key_value;Q<=3'b000; main_state<=QR;endendcaseendelsemain_state<=JM;endGM:beginif(key_ready==1) sign<=1;elseif(key_ready==0 && sign==1)beginsign<=0;case(QQ)0:begin M1<=key_value;QQ<=3'b001; main_state<=DD;end1:begin M2<=key_value;QQ<=3'b010;main_state<=DD;end2:begin M3<=key_value;QQ<=3'b011; main_state<=DD;end3:begin M4<=key_value;QQ<=3'b100; main_state<=DD;end4:begin M5<=key_value;QQ<=3'b000; main_state<=QR;endendcaseendelsemain_state<=GM;endQR:if(key_QR==0)beginif(GM_flag==1)beginOld1<=M1;Old2<=M2;Old3<=M3;Old4<=M4;Old5<=M5;GM_flag<=0;main_state<=DD;endelseif((Old1==M1)&&(Old2==M2)&&(Old3==M3)&&(Old4==M4)&&(Old5==M5))beginpass_led<=0;filed_alarm<=0;try_times<=2'b00;JM_flag<=1;M1<=0;M2<=0;M3<=0;M4<=0;M5<=0;main_state<=DD;endelse if(try_times>2'b01)beginfiled_alarm<=1;pass_led<=1;try_times<=2'b00;main_state<=DD;M1<=0;M2<=0;M3<=0;M4<=0;M5<=0;endelsebegintry_times<=try_times+2'b01;pass_led<=1;filed_alarm<=0;main_state<=DD;M1<=0;M2<=0;M3<=0;M4<=0;M5<=0;endendelse main_state<=QR;default:;endcaseendendmodule(2)键盘模块keyboardmodule keyboard(clk,rst,inrow,outcol,//行输入,列读出key_value,//键值key_flag,);input clk,rst; //时钟25mhzinput [3:0] inrow;output [3:0] outcol;output [4:0] key_value;output key_flag;reg clock; //定义25时钟reg key_flag; //按键标志位reg jud_flag; //按键标志位reg [3:0] col; //行输入扫描值reg [3:0] inrow_reg; //寄存扫描列值reg [3:0] outcol_reg; //寄存扫描行值reg [2:0] state; //状态标志-判断是否有按键按下reg [4:0] key_value; //读取按键值reg [19:0] count;reg [7:0] keynum_1; //寄存扫描列值//产生25hz时钟always@(posedge clk)begincount<=count+1;if(count>=20'd50000)beginclock<=~clock;count<=0;endend//////////////////////////////////////////////通过6状态状态机完成对键盘的扫描:总确定是否有按键—>逐行扫描—>统一处理always@(posedge clock)if(rst==1)beginstate<=0; key_flag<=1'b0;endelsebegincase(state)0: //初值0begincol<=4'b0000; //行扫描输入值key_flag<=1'b0;if(inrow!=4'b1111) //有键按下beginstate<=1;col<=4'b1110; //开始扫描endelse state<=0; //总体判断是否有按键按下,确定按键标志位end1:beginif(inrow!=4'b1111)beginstate<=5; //有按键时直接进入状态5endelsebeginstate<=2;col<=4'b1101;endend2:beginif(inrow!=4'b1111)beginstate<=5;endelsebeginstate<=3;col<=4'b1011;endend3:beginif(inrow!=4'b1111)beginstate<=5;endelsebeginstate<=4;col<=4'b0111;endend4:beginif(inrow!=4'b1111)beginstate<=5;endelse state<=0;end5:beginif(inrow!=4'b1111)begininrow_reg<=inrow; //保存扫描行值//读得outcol_reg<=col; //保存扫描列值key_flag<=1'b1; //有键按下为1state<=0; //连续扫描状态5直至无按键按下,从0开始endelse state<=0;endendcaseend/////////////////////////////////////////////////////////always@(clock)beginif (keynum_1 == {outcol_reg,inrow_reg})begin //连续2次检测到的按键值相同,稳定jud_flag<=1;endelsebeginjud_flag<=0;keynum_1<={outcol_reg,inrow_reg};endend//对键盘扫描结果译码得到按键数值always@(posedge key_flag)begin// if(key_flag==1'b1)begincase({outcol_reg,inrow_reg})8'b1110_1110:begin key_value<=0;end8'b1110_1101:begin key_value<=1;end8'b1110_1011:begin key_value<=2;end8'b1110_0111:begin key_value<=3;end8'b1101_1110:begin key_value<=4;end8'b1101_1101:begin key_value<=5;end8'b1101_1011:begin key_value<=6;end8'b1101_0111:begin key_value<=7;end8'b1011_1110:begin key_value<=8;end8'b1011_1101:begin key_value<=9;end8'b1011_1011:begin key_value<=10;end8'b1011_0111:begin key_value<=11;end8'b0111_1110:begin key_value<=12;end8'b0111_1101:begin key_value<=13;end8'b0111_1011:begin key_value<=14;end8'b0111_0111:begin key_value<=15;enddefault: key_value <= 16; //无按键按下或无效按键组合endcaseendendassign outcol=col;endmodule(3)显示模块showmodule show(CLK,segData,segCtl,segData_1,segData_2,segData_3,segData_4,segData_5 );input CLK;output reg [7:0]segData;output reg [4:0]segCtl;input [3:0]segData_1;input [3:0]segData_2;input [3:0]segData_3;input [3:0]segData_4;input [3:0]segData_5;reg [7:0]segDataReg; //段选扫描reg [4:0]segCtlReg; //位选扫描reg [2:0]segState; //状态扫描//////////////////////////////////////////////////////////////////////////// reg [15:0]cnt1ms;reg clk1000Hz;always@(posedge CLK) //1ms beginif(cnt1ms==16'd12500)begincnt1ms<=16'b0;clk1000Hz<=~clk1000Hz;endelsecnt1ms=cnt1ms+16'b1;end/////////////////////////////////////////////////////////////////////////////// always@(posedge clk1000Hz) //状态扫描begincase(segState) //初值为03'b000:beginsegCtlReg<=5'b00001;segState<=segState+3'b001; //扫描下一状态segDataReg<=segData_1; //段选、位选同时传值end3'b001:beginsegCtlReg<=5'b00010;segState<=segState+3'b001;segDataReg<=segData_2;end3'b010:beginsegCtlReg<=5'b00100;segState<=segState+3'b001;segDataReg<=segData_3;end3'b011:beginsegCtlReg<=5'b01000;segState<=segState+3'b001;segDataReg<=segData_4;end3'b100:beginsegCtlReg<=5'b10000;segDataReg<=segData_5;segState<=3'b000;enddefault:;endcaseend////////////////////////////////////////////////////////////////////////////////// always@(posedge CLK)beginsegCtl<=segCtlReg; //位选段选同时赋值、数码管译码case(segDataReg)4'd15:segData<=8'b1000_1110;4'd14:segData<=8'b1000_0110;4'd13:segData<=8'b1010_0001;4'd12:segData<=8'b1100_0110;4'd11:segData<=8'b1000_0011;4'd10:segData<=8'b1010_0000;4'd9:segData<=8'b1001_0000;4'd8:segData<=8'b1000_0000;4'd7:segData<=8'b1111_1000;4'd6:segData<=8'b1000_0010;4'd5:segData<=8'b1001_0010;4'd4:segData<=8'b1001_1001;4'd3:segData<=8'b1011_0000;4'd2:segData<=8'b1010_0100;4'd1:segData<=8'b1111_1001;4'd0:segData<=8'b1100_0000;default:;endcaseendendmodule(4)蜂鸣模块speakermodule speaker(ENA,CLK2,COUT); //ENA为使能信号,CLK为时钟信号规定工作频率input ENA,CLK2;output COUT;reg COUT;reg [20:0] Clk_f;reg f;always@(posedge CLK2)beginif(Clk_f==2500)beginClk_f<=0;f<=~f;endelseClk_f<=Clk_f+1;endalways@(posedge CLK2 ) //CLK2为敏感信号beginif(ENA) //当ENA为1并且Q1小于6时执行下面的语句//ENA为0时,执行下面的语句COUT<=f;elseCOUT<=0;endendmodule四.调试及结果4.1模块仿真输入正确密码由pass_led为0,可知密码输入正确。

相关文档
最新文档