课程设计(论文)-基于FPGA的智能密码锁设计.doc_第1页
课程设计(论文)-基于FPGA的智能密码锁设计.doc_第2页
课程设计(论文)-基于FPGA的智能密码锁设计.doc_第3页
课程设计(论文)-基于FPGA的智能密码锁设计.doc_第4页
课程设计(论文)-基于FPGA的智能密码锁设计.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于fpga语言的智能密码锁设计 摘 要本文简述了vhdl语言的功能及其特点,介绍一种用eda技术和vhdl语言,在quartus 环境下,设计一种新型的智能密码锁,该密码锁具有密码预置和误码报警等功能,用一片fpga(field programmable gate array)现场可编程门阵列芯片实现,从而大大简化了系统结构,降低成本,提高了系统的保密性和可靠性。它体积小,功耗低,价格便宜,安全可靠,维护和升级都十分方便,具有较好的应用前景。关键词:智能密码锁、硬件描述语言、电子设计自动化、quartus iiabstract the paper introduces the function and characteristic of vhdl language. a new type intelligent digital password lock is designed using vhdl language. an fpga (field programmable gate array) chips is adopted in this design, thus greatly simplifying the system structure, reduce cost and improve the system of confidentiality and reliability .this new digital intelligent has better application prospect based on its small volume, low power, security and easy maintenance and upgrade.keywords: intelligent lock、vhdl、 eda、quartus ii目 录引言31 vhdl语言特点32 智能密码锁的设计要求43 智能密码锁的电路组成43.1密码锁输入电路43.2密码锁控制电路43.3 密码锁输出显示电路44 密码锁输入电路的设计54.1 时序电路54.2 键盘扫描电路84.3 键盘消抖电路94.4 键盘译码电路104.5 按键存储电路134.6 智能密码锁控制电路145 结论23谢 辞24参考文献25引言随着社会物质财富的日益增长,安全防盗已成为全社会问题。人们对锁的要求越来越高,既要安全可靠的防盗,又要使用方便,因此具有防盗报警等功能的电子密码锁代替密码量少,安全性差的机械密码锁已是必然趋势。目前设计密码锁的方法很多,例如用传统的pcb(printed circuit board, 印刷电路板)设计或者用单片机设计。但是使用的电子密码锁大部分是采用单片机进行设计,其成本较高及可靠性得不到保证,电路比较复杂,性能不够灵活。而用vhdl(vhsic hardware description language)可以更加快速、灵活地设计出符合各种要求的密码锁,优于其他设计方法,使设计过程达到高度自动化。本文采用先进的eda(即 electronic design automation)技术,利用quartus工作平台和vhdl 语言,设计了一种新型的智能密码锁。该密码锁具有密码预置和误码报警等功能,用一片fpga芯片实现,从而大大简化了系统结构,降低成本,提高了系统的保密性和可靠性1。采用这种器件开发的数字系统,其升级与改进极其方便。1 vhdl语言特点电子设计自动化eda的关键技术之一就是可以用硬件描述语言hdl(hardware description language)来描述硬件电路。vhdl是用来描述从抽象到具体级别的工业标准语言,它是由美国国防部在20世纪80年代开发的hdl,现在已成为ieee承认的标准硬件描述语言。vhdl支持硬件的设计、验证、综合和测试,以及硬件设计数据的交换、维护、修改和硬件的实现,具有描述能力强、生命周期长、支持大规模设计的分解和已有设计的再利用等优点2。vhdl 主要用于描述数字系统的结构、行为和功能,其程序结构特点是将一个电路模块或一个系统分成端口和内部功能算法实现两部分。对于一个电路模块或者数字系统而言,定义了外部端口调用该电路模块或数字系统,而不必知道其内部结构和算法。vhdl 的特点使得电子系统新的设计方法-“自顶向下”设计方法更加容易实现。可以先对整个系统进行方案设计,按功能划分成若干单元模块,然后对每个单元模块进一步细分,直到简单实现的单元电路。其优点:用软件的方式设计硬件;用软件方法设计的系统到硬件系统的转换是由有关的开发软件自动完成;设计过程中可用有关软件进行各种仿真等3。2 智能密码锁的设计要求该密码锁的密码由六位十进制数字组成,初始设定“000000”。可由用户任意设置密码。密码输入正确时开锁,连续三次输入错误密码时系统报警。3 智能密码锁的电路组成为达到以上功能,可将电子密码锁分为以下几个模块:3.1密码锁输入电路键盘接口电路、键盘矩阵、键盘扫描、键盘消抖、键盘译码及按键存储电路。3.2密码锁控制电路数字按键输入、存储及清除。功能按键设计。密码清除、修改与存储。数字密码锁的激活与解除。3.3 密码锁输出显示电路bcd译码、动态扫描电路。4 密码锁输入电路的设计4.1 时序电路图1是电子密码锁的输入电路框图,由键盘扫描电路、键盘消抖电路、键盘译码电路、按键数据缓存器,加上外接的一个34矩阵式键盘组成。 矩阵式键盘是一种常见的输入装置,在日常的生活中,矩阵式键盘在计算机、电话、手机、微波炉等各式电子产品上已经被广泛应用。其中数字09作为密码锁数字输入按键,*作为“上锁”功能按键,#作为“解除清除”功能按键。键盘上的每一个按键其实就是一个开关电路,当某键被按下时。该按键的接点会呈现0的状态,反之,未被按下时则呈现逻辑1的状态。 在一个系统的设计中,往往需要多种时钟信号,最为方便的方法是利用一个自由计数器来产生各种需要的频率。时序电路中使用了三种不同频率的工作脉冲波形:系统时钟脉冲、消除抖动取样信号、键盘扫描信号。本电路需要:系统主时钟、消抖取样时钟和动态扫描时钟。当一个系统中需使用多种操作频率的脉冲波形时,其方法就是利用一个自由计数器来产生各种需要的频率。也就是先建立一个n位计数器,n的大小根据电路的需求决定,n的值越大,电路可以分频的次数就越多,这样就可以获得更大的频率变化,以便提供多种不同频率的时钟信号。若输入时钟为clk,n位计数器的输出为qn1.0,则q(0)为clk的2分频脉冲信号,q(1)为clk的4分频脉冲信号q(5 downto 4)取得的是一个脉冲波形序列,其值依000110110001周期性变化,其变化频率为32分频4。图1 34键盘矩阵图 时序产生电路的vhdl程序:library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity fee_counter isport(clk : in std_logic; clk_a : out std_logic; clk_b : out std_logic_vector(1 downto 0);end fee_counter;architecture a of fee_counter issignal q : std_logic_vector(6 downto 0);beginprocess (clk)beginif clkevent and clk = 1 thenq = q + 1;end if;end process;clk_a = q(1);clk_b = q(4 downto 3);end architecture;分析: 首选信号q建立一个7位自由计数器,对输入主时钟进行降频处理; 使用clk_a = q(1)语句,取得一个脉冲波形,对主时钟进行4分频; 使用clk_b = q(4 downto 3) 语句,取得一个脉冲序列; library ieee是表示库文件; use ieee.all打开库中地程序包,是表示实体中描述器件的输入、输出或者数据类型;实体声明部分的语句格式: entity 实体名 is port端口表;- std_logic表示逻辑型端口,std_logic_vector(1 downto 0)为标准型逻辑位矢量且矢量长度为2。 end 实体名; 结构体的语句格式为:architecture a of 实体名is 信号声明语句;-为内部型号名称及类型声明 begin功能描述语句end 结构体名;process (clk)-是进程名,用来描述clk的行为if clkevent and clk = 1 thenq = q + 1;-当时钟信号clk = 1时,则q = q + 1,否则clk = 0时,保持原状态。信号用= 来赋值if 语句的格式为:if 条件语句 then顺序语句; end if;-其中条件语句必须由boolean表达式构成仿真波形图: 该图是时序电路的仿真波形图,从其结果可以看出程序对时钟信号进行了降频处理,得到了两个不同的时钟脉冲序列。图2时序电路仿真波形图4.2 键盘扫描电路扫描电路的作用是用来提供键盘扫描信号的,扫描信号变化的顺序依次为11101101101101111110依序地周而复始。每扫描一排按键就检查一次是否有按键被按下,如果这排没有按键被按下就忽略,反之,如果出现被按下的键则立刻进行按键编码的动作,且将编码的结果存储于寄存器中。键盘扫描电路的vhdl程序:library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity scan isport(clk : in std_logic; clk_scan : out std_logic_vector(3 downto 0);end scan;architecture a of scan issignal s : std_logic_vector(1 downto 0);signal q : std_logic_vector(3 downto 0);beginprocess (clk)beginif clkevent and clk = 1 thenq = q + 1;s = q (3 downto 2);end if;end process;clk_scan= 1110 when s=0 else 1101 when s=1 else 1011 when s=2 else 0111 when s=3 else 1111;end architecture;分析: 程序中,s信号是用来产生行扫描信号的四个状态,q是为了对输入主时钟进行降频处理。仿真波形图:图3键盘扫描仿真波形图通过波形图可以看出s信号的四个状态:00、01、10、11。而q 是一个四位计数器对输入主时钟进行降频处理。证明了该程序提供键盘扫描信号的功能。4.3 键盘消抖电路智能密码锁的原理是利用数的比较原理,事先在锁内设定一个数,然后将输入的密码与设定的数进行比较。如果一致,锁将会打开;否则将会报警。功能的实现必须要有输入数字的过程,而人们在实行的操作过程中,由于每个人的习惯不一样且按键大多是机械式开关,所以该功能必定包含去除抖动电路。如果调整取样频率,可以发现抖动现象得到了改善。消抖电路所使用的脉冲信号的频率必须比其他电路使用的脉冲信号的频率更高;通常将扫描电路的工作频率定在24hz左右,而将消抖电路的工作频率定在128hz左右,其工作频率通常是前者的4倍或者更高5。键盘消抖电路的vhdl程序:library ieee;use ieee.std_logic_1164.all;library altera;use altera.maxplus2.all;entity debouncing isport(d_in,clk : in std_logic; dd1,dd0,qq1,qq0 : out std_logic; d_out,d_out1 : out std_logic);end debouncing;architecture a of debouncing issignal vcc, inv_d : std_logic;signal q0,q1 : std_logic;signal d0,d1 : std_logic;beginvcc = 1;inv_d vcc, q = q0,clk = clk,clrn = inv_d,prn = vcc);dff2 : dff port map (d = vcc, q = q1,clk = clk,clrn = q0,prn = vcc);process (clk)begin if clkevent and clk=1 thend0 = not q1;d1 = d0;end if;end process;dd0 = d0;dd1 = d1;qq1 = q1;qq0 = q0;d_out = not (d1 and not d0);d_out1 = not q1;end a;仿真波形图:图4键盘消抖电路仿真波形图 此图显示键盘的输入信号d_in作为电路的输入信号,clk是电路的时钟脉冲信号,也就是取样信号。从仿真图的结果来看,可以发现键盘消抖现象获得了改善。4.4 键盘译码电路从前面所述的键盘扫描电路的输出可以看出,扫描得到的信号规律性不强。键盘中的按键可分为数字按键和文字按键,每一个按键可能负责不同的功能。如数字键主要用来输入数字,但是键盘所产生的输出,也就是扫描回复信号,是无法拿来直接使用,必须对其进行译码才能使用。 键盘译码电路主要负责的工作是:首先判别是否有键按下;若被按下的是数字键,则解码成相对应的bcd码,若被按下的是功能键,则解码成六位数的码字,由密码锁控制电路做相对应的动作。 表1 键盘参数表扫描位置 键盘输出 相对应的 键盘译码 按键功能ky3ky0 kx2kx0 键盘按键 电路输出1110 011 1 f=0001 数码输入1110 101 2 f=0010 数码输入1110 110 3 f=0011 数码输入1101 011 4 f=0100 数码输入1101 101 5 f=0101 数码输入1101 110 6 f=0110 数码输入1011 011 7 f=0111 数码输入1011 101 8 f=1000 数码输入1011 110 9 f=1001 数码输入0111 011 * t=0100 激活密码锁0111 101 0 f=0000 数码输入0111 110 # t=0001 清除/解除密码锁使用case.when 或者whenelse语句,便可完成其键盘译码电路的设计6。 键盘译码电路的vhdl程序:library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity keyboard_dec1 isport(clk : in std_logic; clk_keyboard : in std_logic_vector(1 downto 0); c : in std_logic_vector(2 downto 0); out_numb : out std_logic_vector(3 downto 0); out_func : out std_logic_vector(3 downto 0); flag_numb : out std_logic; flag_func : out std_logic);end entity keyboard_dec1;architecture a of keyboard_dec1 issignal ff : std_logic;signal fn : std_logic;signal z : std_logic_vector(4 downto 0);signal f : std_logic_vector(3 downto 0);signal n : std_logic_vector(3 downto 0);beginprocess (clk)beginz n n n n n n n n n n n f f f = 1000;end case;end if;end process;fn = not ( n(3) and n(2) and n(1) and n(0);产生数字信号的标志值ff = (not f(3) and f(2) and not f(1) and not f(0) or (not f(3) and not f(2) and not f(1) and f(0);产生功能信号的标志值flag_numb = fn;flag_func = ff;out_numb = n;out_func 顺序语句; when 选择值 = 顺序语句; when others = 顺序语句; end case;-当执行case语句时,首先计算表达式的值,然后执行在条件语句中找到的选择值与其值相同时的顺序语句。当所有的条件语句的选择值与表达式的值不同时,则执行others后的顺序语句。条件语句中的=只相当于then 的作用。其仿真结果为:图5键盘译码电路仿真波形图 从仿真图上可以看出,智能密码锁的键盘译码电路程序是正确的。4.5 按键存储电路因为每次按键都会产生新的数据,可能会覆盖前面的数据,所以需要一个按键存储电路,将键盘扫描译码后的结果记录下来。 这一功能可以用移位寄存器来实现。本设计将采用串行输入/串行输出移位寄存器硬件作为按键存储电路。所谓的串行输入/串行输出移位寄存器,即数据一个接着一个依序进来,输出时采用先进先出的顺序,同样是一个接着一个依序输出。 其vhdl的源程序:library ieee; use ieee.std_logic_1164.all;entity siso isport(data_in : in std_logic; clk : in std_logic; data_out : out std_logic);end siso;architecture a of siso issignal q : std_logic_vector(5 downto 0);beginprocess (clk)beginif clkevent and clk=1 thenq(0) = data_in;for i in 1 to 5 loopq(i) = q(i-1);end loop;end if;end process;data_out = q(5);end a;仿真结果图:图6按键存储电路仿真波形图 从图可以看出按键存储电路是用移位寄存器的串行输入/串行输出。4.6 智能密码锁控制电路智能密码锁控制电路是整个电路的控制中心,主要完成以下功能:数字按键输入部分如果输入数字键,第一个数字会从显示器的最右端开始显示,此后每新按下一个数字时,显示器上的数字必须往左移动一位。若想要更改输入的数字,可按退格键来清除前一个输入的数字,或者按清除键清除输入的所有的数字,再重新输入六位数字。既然设计的是六位智能密码锁,当输入的数字键超过六位时,电路不应理会。功能键的输入部分 退格键:只清除前一个输入的数字。 清除键:清除所有的输入。 密码核对:在密码更改,开锁之前必须先核对密码。 密码更改:按下此键将目前输入的数字键设定为新的密码。 激活电锁:上锁,上锁之前必须先设定密码才能上锁。 解除电锁:检查输入的密码是否正确,正确才能开锁程序清单:六位智能密码锁library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;library altera;use altera.maxplus2.all;entity elec_lock isport(clk_4m : in std_logic; -系统原始时钟脉冲4m clk_scan : out std_logic_vector(3 downto 0); -仿真时用的键盘扫描序列 key_in : in std_logic_vector(2 downto 0); -按键输入 flag_numb : out std_logic; -数字输出标志 flag_func : out std_logic; -功能输出标志 led_com : out std_logic; clear : out std_logic; -清零功能 enlock: out std_logic; -上锁、开锁功能 numb_cnt : out std_logic_vector(4 downto 0); bcd_code : out std_logic_vector(23 downto 0); selout : out std_logic_vector(1 downto 0);segout : out std_logic_vector(6 downto 0) -数码管7段显示器的输出端); end elec_lock;architecture a of elec_lock iscomponent debouncing -元件例化语句port(d_in : in std_logic; clk : in std_logic; d_out : out std_logic);end component;signal clk : std_logic; -电路工作时钟脉冲signal clk_keyboard : std_logic_vector(1 downto 0); -键盘扫描信号寄存器signal clk_debounce : std_logic; -消抖电路工作时钟脉冲信号signal clk_display : std_logic_vector(1 downto 0); -显示器时钟信号signal c : std_logic_vector(2 downto 0); -键盘输入消抖后寄存器signal n : std_logic_vector(3 downto 0); -数字按键译码值的寄存器signal f : std_logic_vector(3 downto 0); -功能按键译码值的寄存器signal fn : std_logic; -数字按键标志值数字signal ff : std_logic; -功能按键标志值数字signal sel : std_logic_vector(5 downto 0);signal out_numb : std_logic_vector(3 downto 0); -数字输出signal out_func : std_logic_vector(3 downto 0); -功能输出signal acc : std_logic_vector(23 downto 0); -用于暂存键盘输入的信息signal reg : std_logic_vector(23 downto 0); -用于存储输入的密码signal rr2 : std_logic; -清零信号signal qa,qb,bb : std_logic; signal nc : std_logic_vector(4 downto 0); -输入密码的移位寄存器signal db : std_logic_vector(3 downto 0); -数字显示器signal seg : std_logic_vector(6 downto 0);begin -进行内部连接out_numb = n; out_func = f;flag_numb = fn;flag_func = ff;clk_debounce = clk;numb_cnt = nc;segout(6 downto 0) = seg;selout = clk_display;led_com = 1;counter : blocksignal q : std_logic_vector(22 downto 0);signal s : std_logic_vector(1 downto 0); -键盘扫描信号大约是15hzsignal sel : std_logic_vector(3 downto 0);beginprocess (clk_4m)beginif clk_4mevent and clk_4m = 1 thenq = q + 1;end if;end process;clk = q(0);clk_keyboard = q(5 downto 4); -消抖时钟信号大约是2mclk_display = q(5 downto 4); -对键盘时钟信号进行32分频sel = 1110 when clk_keyboard = 0 else -键盘扫描信号发生器产生的序列 1101 when clk_keyboard = 1 else 1011 when clk_keyboard = 2 else 0111 when clk_keyboard = 3 else 1111 ;clk_scan key_in(0), d_out = c(0), clk = clk );u2 : debouncing port map( d_in = key_in(1), d_out = c(1), clk = clk );u3 : debouncing port map( d_in = key_in(2), d_out = c(2), clk = cl k);end block debounuing; -键盘译码模块key_decoder : blocksignal z : std_logic_vector(4 downto 0); -按键译码存储signal r1,r0 : std_logic ;beginprocess (clk)beginz n n n n n n n n n n n f f f = 1000;end case;end if;end process;fn = not ( n(3) and n(2) and n(1) and n(0); -产生数字按键的标志值ff = (not f(3) and f(2) and not f(1) and not f(0) or (not f(3) and not f(2) and not f(1) and f(0); -产生功能按键的标志值process (clk) -寄存器清零信号的产生进程beginif clkevent and clk=1 thenr1 = r0;r0 = ff;end if;rr2 = r1 and not r0 ;clear = rr2;end process;end block key_decoder; keyin_process : block -按键输入数据的存储,数字输入时的寄存器控制signal rst,d0,d1 : std_logic ;begin process(clk,fn,rst)beginif rst = 1 thenacc = 000000000000000000000000; -输入清零nc = 00000; -输入的密码个数也重新计算else if fnevent and fn=1 then if nc 6 thenacc = acc(19 downto 0) & n ;bb = 0;nc = nc + 1 ;elsebb = 1 ;end if ;end if;end if;end process;rst = rr2;end block keyin_process;lock_process : block -上锁、开锁的进程beginprocess(clk,f)beginif clkevent and clk=1 thenif nc = 6 thenif f(2) = 1 then -按*键上锁控制信号有效reg = acc; -密码存储qa = 1 ; qb = 0;elsif f(0) = 1 then -按#键开锁控制信号有效if reg = acc then -密码进行核对qb = 1 ; qa = 0;end if; elsif acc = 001001001001000000110101 then -设置的万用密码249035qb = 1 ; qa = 0;end if;end if;end if;end process;end block lock_process;enlock = qa an

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论