《电子课程设计报告(完结).doc》由会员分享,可在线阅读,更多相关《电子课程设计报告(完结).doc(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 信 息 科 学 与 技 术 学 院本 科 二 年 级电子技术课程设计报告 专 业: 自动化(交通信息工程及工程)班 级: 二班 姓 名: 刘帅 赵银辉 王晓斌学 号: 指导教师: 缪英武 实习时间:2014 年 7 月10 日2014 年7 月23 日一、背景社会的不断发展,使得安全问题日显重要,安全的锁能使人们感到安心。随着人们对锁的要求越来越高,既要求安全可靠的防盗,又要使用方便。子弹锁由于结构上的局限,已难以满足当前社会管理和防盗要求。特别是在人员需要经常变动的场所,如办公室、宾馆等地方。电子锁在安全技术防范领域,具有防盗报警功能的电子密码锁代替传统的机械式密码锁,克服了机械式密码锁密
2、码减少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大高一步。本课题要求设计一个用verilog语言编写的数字电子密码锁系统,利用EDA技术和verilog语言完成系统设计描述,经过编译、综合和下载,给出了仿真测试结果,选定元器件、安装、调试硬件电路。本文采用先进的EDA技术,和verilog语言,设计了一种新型的智能密码锁。该锁有密码设置、修改密码和错误报警等功能,用一片FPGA芯片实现,从而大大的简化了系统的结构,降低了成本,提高了系统的保密性和可靠性,采用这种器件开发的数字系统,其升级和改进极其方便。二、数字密码锁设计1、设计任务:用FPGA设计并制作一个数字密码锁控制电路2、
3、设计要求:(1)基本功能电路具有初始密码,密码为4为十进制数。开锁时,先按“开锁“键,然后输入数字,当按下“确定”键时,如果与预先设定的密码相符,则给出开锁指示信息;当密码不符是,给出不开锁指示信息。用户需要修改密码锁,应先开锁,再按“设密码”键,然后通过键盘输入新的密码,最后按“确定”键完成。(2)扩展功能如果输入的面貌不符次数达到3次,则给出报警指示(例如声光报警),持续一段时间过后停止报警。(3)也可以自行设计其他扩展功能。3、方案设计: FPGA主要实现以下功能:分频处理、输入数字译码、密码比较。移位处理、密码设置、显示状态输出、报警等控制功能,本设计共三个模块,包括:分频模块、输入处
4、理控制模块、显示模块、共有15个按键,包括0到9,10个数字输入键和5个功能键(分别为开锁常识check、回删back键、状态消零close键、密码设置sdt键、电源键)。按动电源键可使密码锁进入或退出可输入状态,进入可输入状态后,每按一次数字键就可输入以为数字,并可左移显示在数码管中,按back键可对输入的数字进行回删。输入四位数字后按check键可使输入数字与初始密码进行比较,若比较正确给出开锁成功信号(绿色发光二极管亮),若不正确则给出开锁失败信号(红色发光二极管亮)。当在开锁成功的状态下,输入任意数字并按set键即可使当前输入显示的数字设置成为新的密码,再按close键即可关锁。而当连
5、续输入三次错误密码,蜂鸣器就会发出警报声,只有按电源键才可使警报声停止,当电源再次开启是,蜂鸣器仍会继续报警,提示主人密码锁被别人多次尝试打开,以提高主人的警惕。密码锁内置有一万能密码,防止多次修改密码后忘记新的密码后不得开锁。万能密码固定在芯片程序中,对芯片重新修改也可修改万能密码。键入FPGA报警密码修改译码显示三、程序设计 整体程序的RTL级图如下,自左到右分别为密码设置模块、比较模块,输入输出模块、分频模块、显示模块。整体可生成如下器件:以下是各个小模块:1、 分频模块:FPGA内有自带的50MHZ的时钟信号,引脚好为P17。对它进行分频,本模块分出了isge频率可供挑选使用,发现时钟
6、clk_d4可分为符合按键输入及显示和报警使用。输入端ce作为使能端,可控制分频模块是否工作,若进行工作则输输出端t为高电平,t接信号灯(黄色发光二极管)显示ce的状态。如下图:2输入输出模块:接受分频模块送来的时钟信号,同时可接受来自数字键的输入,并进行译码处理,转化为输出变量outdata提供给显示模块再进行译码显示。主控模块还实现了数字回删,密码比较,设置密码,错误计数,蜂鸣报警等功能,并给出相应的状态信号输出,可从下图对端口的命名看粗其功能。如下图:3、 密码设置模块4、 显示模块:主要功能是接收主控模块送来的outdata数据,进行译码显示,本模块需要的时钟是clk_d2.。如下图:
7、5、 比较模块对以上各模块,可以参看入炉的verilog代码对应解读,即可了解其实现的机制本代码思路较为清晰易懂。下面是密码锁的流程图:接通电源上锁?Y上锁状态START?输入密码Check?YN出错指示Set输入新密码并保存确定?NNYNNYY待锁状态NN正确?计数=3报警四、电路设计1、FPGA介绍 FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可用编程器件的基础上进一步发展的产物。踏实作为专用集成电路(ASIC)领域中的一种半定制电路而实现的,既解决了定制电路的不足,又客服了原有可编程器件门电路数有优先的缺点。
8、实验室的FPGA核心板采用的是Altera公司的Cyclone 2系列芯片EP2C8T144C8N,该芯片功耗低,容量大,性价比高,有多达8k个逻辑单元。由于FPGA供电电路和现在,配置电路较为复杂,所以核心板讲这部分电路集成了,从而降低了使用FPGA的难度,课程设计中如需使用FPGA,可将FPGA核心板当做一颗芯片来使用。FPGA核心板在元件库lanfengdi.schib中已经封装成一颗芯片,名字为EP2,lanfengdi.schib库中应有相应的封装,可直接调用。 核心板上有两排插针,引出了大部分可用IO口和电源,插针的数字编号即使对应的IO口编号,其他编号(名字)的插针是特殊功能的。
9、GND地线。至少有一个GND脚要与主板相连,建议3个都连上。VP核心板电源输入口(+6V+12V,推荐使用+9V),核心板上圆孔空心插座的中心触底与VP是连到一起的,3.3V、+5V辅助电源输出,可分别对外提供不超过100mA的直流电源,使用小电流时刻由此引出。P2(nCSO)P76(nCEO)是多功能引脚,且P2只能在Passive Serial 配置模式下能作为普通IO使用,建议跳过不用。如果要将P76作为普通IO使用,设置方法为“Assignments”-”Ssttings”-”Device and Pin Options”-”Dual-Purpose Pins”-”Value”核心板内
10、建了一个50MHZ的标准时钟,并且固定连接在P17,可将之作为系统时钟。JTAG,使用后缀名为.sof的文件。AS插座是对配置芯片的变成接口。JTAG方式下对FPGA芯片编程,芯片掉电后数据丢失,所以核心板上集成配置芯片,如果配置里写入FPGA进行配置,使用Quartus软件的Programmer工具与USB blaster下载线可以对配置芯片进行烧写(编程),使用后缀名为.pof的文件。烧写前需将Programmer工具软件的模式设置成AS。2、 开关电路本次设计采用的开关是弹簧式的开关,按了一下按键会马上自动恢复原状,开关的连通的一端接3.3V电压,另一端同时杰一个10K电阻和FPGA引脚
11、。电路如图:3、显示电路电路采用4为数码管显示信息。为了得到较高亮度以适应室外使用条件,采用静态显示。数码管内部发光原件LED,LED是非线性原件,FPGA的输出为电压型,所以务须要串联电阻以限制通过LED的电流(限制流出FPGA引脚的电流),FPGA的每个IO最大可驱动15mA的电流。FPGA输出高电平电压VOH为3.3V,数码管内部LED导通电压VR约为2V,取数码管每段电流为5mA。可算得限流电阻R=(3.3V-2)/5=0.26k欧,取标称值270欧的电阻,电流为(3.3-2)/270=4.8mA15mA。1个限流电阻上的功率P=(3.3-2)/270=0.006W0.05W(最小功率
12、电阻的允许耗散功率),所以可以不考虑电阻法人问题,a,b,c,d,e,f,g端各接一个510欧的电阻,位选端分别接三极集电极端,而三极管基极端接一个510欧的电阻,射极接地。如图:4、 指示信号电路蜂鸣器报警电路的正极端极FPGA引脚,另一端接地:指示灯高电平端接510欧的电阻,另一端接地,如图:五、PCB设计PCB的设计主要考虑的问题是,在规定的板子大小上设计电路图。实验室给的班子是15*10,在Altera Designer软件上新建一个PCB工程文件,在新建一个后缀为Sch.Doc的文件,并在里面画密码锁的原理图,编译通过之后,由该编译成功的原理图在经过Update生成PCB文件,这使得
13、PCB文件里面的连线分布很乱,需要我们进行修改引脚才能使每一根线不交叉,即避免红色的飞线产生,然后进行交互式布线,最后将布线好的PCB打印出来。如下图:此外在画原理图时,要注意各个元件的封装,是否能与实验室所给元件相匹配。配元件是贴片型还是直插型,根据我们实验的要求,所有的器件都要求为直插型的,而三极管的选择,最好是悬着空间距离大的,以便于在焊接的时候方便些。虽然布线位置可以任意,但是,为了方便,美观起见,要尽量将各个器件布得有规律些,晶体管最好对着按钮位置。PCB制作流程如下:激光打印到热转印纸上转印到敷铜板上放入腐蚀液中腐蚀钻孔清洗清除漆皮,清洁铜面涂上酒精松香助焊剂六、总装、调试将制作好
14、的PCB与芯片插锁、电阻三极管、蜂鸣器、发光二极管、数码管、按键根据需要焊接在一起,插上芯片、然后用AS模式将编写成功的程序烧写进入FPGA芯片中,这样总装成功。下面是总装后,密码锁各项功能验证的展示:1、 使能开启状态2、 密码正确状态3、 密码错误状态七、总结本次实习我们学习了设计一个产品的完整过程。实现了把理论知识转化为动手能力的过程。同时,小组的分工合作,锻炼了我们的沟通能力和与人合作完成项目的能力,这让我们在项目中相互合作,相互帮助,相互学习。以后工作当中需要我们处理的问题日渐复杂,多人分工完成项目是以后发展的趋势,而多人分工,如果分的太开,相互之间不知道工作的进度和原理,不方便相互
15、之间工作的衔接。如果分的太紧相互影响太多又影响效率,我们需要在分工中找一个合适的点。这项能力在以后我们的工作中非常重要。面对不断增大的社会压力,只有不断地学习和与人合作才能不断的成长,面对更高的挑战和更高的要求。在课程设计中也遇到了很多问题。比如,在代码的编写中有些没有赋值的变量默认并不为零,但我们却想当然的以为它为零,在老师的指点下,把模块的代码减到只有核心功能,在逐渐往模块里面加入逻辑语句,通过一句一句的往里面添加代码,最后终于找出了问题所在。同样的,在开发板和在电路上默认的未被分配到引脚的输入的默认值不同,我们通过逐步排查的方法,找出了问题。在焊接的时候,因为我们焊接的水平有限,部分焊点
16、没有焊牢,导致了LED灯不亮等问题,这种时候我们用万用表从按键到芯片再到输出电路,逐个焊点检测电压的变化,一一排查出了电路中出了问题的焊点。总的来说,设计电路最重要的是跟着流程图走,而设计好了之后最重要的就是查错,而查错的时候只要思路清晰配合正确的方法,一定能够查出问题所在。总的来说,这次任务完成的还是比较成功。在这次课程设计中,我们的分工既体现了个人的创意,有体现了集体的力量。对芯片的编写和电路的设计让我们对理论知识的认识上升到了一个新的高度。八、附录1.分频模块(1)module div_div1(clk,clk_d);input clk;output reg clk_d;reg19:0
17、t;always (posedge clk)beginif(t9d762)begin clk_d=0;t=9d762&t9d1525)begin clk_d=1b1;t=9d1525)begin clk_d=1b0;t=9d0;endendendmodule2分频模块(2)module div_div(clk,clk_d,clk_clock);input clk;output reg clk_d;output reg clk_clock;reg9:0 t;always (posedge clk)beginif(t9d50)begin clk_d=0;t=9d50&t9d100)begin cl
18、k_d=1b1;t=9d100)begin clk_d=1b0;t=9d0;endif(t9d100)begin clk_clock=0;t=9d100&t9d200)begin clk_clock=1b1;t=9d200)begin clk_clock=1b0;t=9d0;endendendmodule3.控制,消抖与编译模块module decode(num0,num1,num2,num3,num4,num5,num6,num7,num8,num9,clk,clr,start,ok,set,close,set_state,data_out,data_state,lock_state,Qse
19、t,dep_start,lock,locksta,z);input num0,num1,num2,num3,num4,num5,num6,num7,num8,num9;input clk,clr,start,ok,set,close,lock_state,Qset ;reg i=0;reg j=0;reg k=0;reg l=0;output lock;output z;reg z=0;reg lock;output reg15:0 data_out;output reg data_state,set_state,dep_start;output locksta;reg locksta;reg
20、 clk_lock;reg3:0num,counter1;reg9:0 counter0;reg2:0 state,Q;parameter locked_state=0,start_state=1,opened_state=2,Qset_state=3,close_state=4;always (posedge clk)beginif(clr) data_out=0; /清零else beginif(num0|num1|num2|num3|num4|num5|num6|num7|num8|num9) /如果有数字按键输入就进行译码if(clk_lock)beginif(num0)num=4b0
21、000;else if(num1)num=4b0001;else if(num2)num=4b0010;else if(num3)num=4b0011;else if(num4)num=4b0100;else if(num5)num=4b0101;else if(num6)num=4b0110;else if(num7)num=4b0111;else if(num8)num=4b1000;else if(num9)num=4b1001;clk_lock=1;data_out15:0=data_out15:010d400) /延时消抖 hhhhhhbegincounter0=0;clk_lock
22、=0;end/end/always(posedge clk)/begincase(state) /状态转换locked_state:begin /上锁状?lock = 0; set_state = 0;locksta = 1;data_state = 0;if(start)begin i=1;lock = 0;data_state = 0;endif(i=1) begin state=start_state;dep_start=1;endendstart_state:begin data_state = 0;if(ok)begin z=1;data_state = 1;lock = 1;loc
23、ksta = 0;dep_start=0;/if(Qset=1)set_state=0;/weiiyunxing/else set_state=1;endif(lock_state)begin state=opened_state;data_state = 0;endelse if(lock_state = 0) begin state=start_state;endendopened_state:beginif(set) j=1;if(j=1)begin data_state=0;/state=Qset;if(ok)beginset_state=1;endif(close) begin da
24、ta_state = 1;j=0;data_out=16b00000;set_state=0;j=0;lock = 0;state = locked_state;i=0;z=0; endendendQset_state: begin if(ok)begin set_state=1;state =locked_state;end /设置密码状态endendcaseendendmodule4.密码设置模块module TT(set_state,clk,PASSWORD,data_in);input set_state;input clk;input15:0 data_in;output15:0 P
25、ASSWORD;reg15:0 PASSWORD;reg k=0;always (posedge clk)beginif(set_state = 1) begin PASSWORD = data_in;k=1;endelse if(k=0) PASSWORD = 16b10001;/endendendmodule5.显示模块module xianshi(data_in1,data_in,codeout,clk,dig);input15:0 data_in;input15:0 data_in1;input clk;output6:0 codeout;reg6:0 codeout;output r
26、eg7:0 dig;reg2:0counter;reg3:0bcode;always (posedge clk)begin counter = counter+1;endalways (counter)begincase(counter) 3b000:begindig=8b;bcode=data_in3:0;end 3b001:begindig=8b;bcode=data_in7:4; end 3b010:begindig=8b;bcode=data_in11:8;end 3b011:begindig=8b;bcode=data_in15:12;end 3b100:begindig=8b;bc
27、ode=data_in13:0;end 3b101:begindig=8b;bcode=data_in17:4; end 3b110:begindig=8b;bcode=data_in111:8;end 3b111:begindig=8b;bcode=data_in115:12;endendcaseendalways (bcode) /输入显示begin case(bcode)4b0000:codeout = 7b;4b0001:codeout = 7b;4b0010:codeout = 7b;4b0011:codeout = 7b;4b0100:codeout = 7b;4b0101:cod
28、eout = 7b;4b0110:codeout = 7b;4b0111:codeout = 7b;4b1000:codeout = 7b;4b1001:codeout = 7b;default:codeout=7b;endcaseendendmodule6.比较输出模块module compare(data_in,PASSWORD,clk,dep_g,dep_r,alarm,lock_state,data_state,z,k,clk_clock);input z;input15:0 PASSWORD;input15:0 data_in;input data_state,clk;input c
29、lk_clock;reg r=0;reg g=0;reg l=0;output reg dep_g,dep_r,alarm,lock_state;output k;reg k=0;reg1:0 count;reg10:0 counter0;always (posedge data_state)begin begin dep_g=0;dep_r=0;end; if(data_state)beginif(PASSWORD = data_in)begin g=1;r=0;end/dep_r=0;dep_g=1;lock_state=1;endelse begin r=1;g=0;end/dep_r=1;dep_g=0;lock_state=0;count = count+1;endendif(z = 0)begin g=0;r=0;lock_state = 0; endif(g = 1)begin dep_r=0;dep_g=1;lock_state=1;endif(r = 1)begin dep_r=1;dep_g=0;lock_state=0;count = 2b11)beginalarm=alarm;counter010d400) begincounter0=0;/count=0; end end else alarm=0;endendmodule