1 / 13
文档名称:

EDA技术Verilog密码锁.doc

格式:doc   大小:701KB   页数:13页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

EDA技术Verilog密码锁.doc

上传人:小果冻 2024/5/11 文件大小:701 KB

下载得到文件列表

EDA技术Verilog密码锁.doc

相关文档

文档介绍

文档介绍:该【EDA技术Verilog密码锁 】是由【小果冻】上传分享,文档一共【13】页,该文档可以免费在线阅读,需要了解更多关于【EDA技术Verilog密码锁 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。电子科技大学实验报告学生姓名:吴成峰学号:2024070906016指导教师:黄志奇一、实验室名称:主楼C2-514二、实验工程名称:密码锁三、实验原理:利用FPGA开发班上的3个按钮开关btn[2:0]来输入4位数字的密码。例如,输入“2-0-1-2〞翻开门锁。将用拨位开关sw[7:0]来设置密码,通过按钮开关btn[2:0]来输入密码。其中,btn[0]、btn[1]和btn[2]分别对应的有效输入为“00〞〔十进制0〕、“01〞〔十进制1〕和“10〞〔十进制2〕,sw[7:6]、sw[5:4]、sw[3:2]和sw[1:0]分别对应密码的1、2、3、4位。用sw[7:0]设置密码的同时,通过7段数码管复用电路,将其显示到7段数码管上。注意:需将8位输入扩展成16位,即,x[15:0]={2’b00,sw[7:6],2’b00,sw[5:4],2’b00,sw[3:2],2’b00,sw[1:0]} 输入4位数字后,才能知道所输入的密码是否正确。如果密码是正确的,led[1]亮起;如果密码错误,led[0]将亮起。 图1给出了设计的顶层模块。当按下btn[0]、btn[1]、btn[2]中任何一个按钮时,将会产生一个时钟脉冲。当分别按下按钮btn[0]、btn[1]、btn[2]时,锁模块对应的2位输入bn[1:0]为“00〞、“01〞和“10〞。输入的密码与拨位开关上设置的密码相比较,产生图2所示的状态转移图。注意:即使密码输入错误,也必须完成完整的4位密码输入,才能进入“fail〞状态E4。、实验目的:熟悉利用HDL代码输入方式进行组合逻辑电路的设计和仿真的流程,掌握Verilog语言的根本语法。并通过一个密码锁的设计把握利用EDA软件〔〕进行HDL代码输入方式的电子线路设计与仿真的详细流程,熟悉摩尔状态机。五、实验内容:,可以设定密码并显示,输入密码以解锁;设计密码锁的顶层模块,使用模块实例语句连接前面所设计的密码锁模块;生成比特流文件下载到开发板上进行验证。六、实验器材〔设备、元器件〕:计算机〔〕;BASYS2FPGA开发板一套〔带USB-MIniUSB下载线〕。七、实验步骤:1、,新建一个工程lock。我们选用的BASYS2FPGA开发板采用的是Spartan3EXA3S100E芯片和CPG132封装,设置好器件属性,如图3所示。 2、在工程管理区任意位置单击鼠标右键,在弹出的快捷菜单中选择“NewSource〞命令,弹出新建源代码对话框,这里我们选择“VerilogModule〞类型,输入Verilog文件名“lock〞。ISE会自动创立一个Verilog的模板,并在源代码编辑区翻开,接下来的工作就是将代码编写完整。完整代码如下:modulelock(inputclk,inputclr,input[7:0]sw,input[1:0]bn,outputregpass,outputregfail); reg[3:0]pre_s,nex_s; parameterS0=4'b0000,S1=4'b0001,S2=4'b0010,S3=4'b0011,S4=4'b0100, E1=4'b0101,E2=4'b0110,E3=4'b0111,E4=4'b1000; //stateregisters always@(posedgeclkorposedgeclr) begin if(clr==1) pre_s<=S0; else pre_s<=nex_s; end //C1 always@(*) begin case(pre_s) S0:if(bn==sw[7:6]) nex_s<=S1; else nex_s<=E1; S1:if(bn==sw[5:4]) nex_s<=S2; else nex_s<=E2; S2:if(bn==sw[3:2]) nex_s<=S3; else nex_s<=E3; S3:if(bn==sw[1:0]) nex_s<=S4; else nex_s<=E4; S4:if(bn==sw[7:6]) nex_s<=S1; else nex_s<=E1; E1:nex_s<=E2; E2:nex_s<=E3; E3:nex_s<=E4; E4:if(bn==sw[7:6]) nex_s<=S1; else nex_s<=E1; default:nex_s<=S0; endcase end //C2 always@(*) begin if(pre_s==S4) pass=1; else pass=0; if(pre_s==E4) fail=1; else fail=0; end endmodule3、建立分频模块“clkdiv〞,过程如上,代码如下:moduleclkdiv( inputmclk, inputclr, outputclk190); reg[24:0]q; always@(posedgemclkorposedgeclr) begin if(clr==1) q<=0; else q<=q+1; end assignclk190=q[17];//190Hzendmodule4、建立时钟脉冲模块“clock_pulse〞,代码如下:moduleclock_pulse(inputinp,lk,inputclr,outputoutp); regdelay1; regdelay2; regdelay3; always@(lk) begin if(clr==1) begin delay1<=0; delay2<=0; delay3<=0; end else begin delay1<=inp; delay2<=delay1; delay3<=delay2; end end assignoutp=delay1&delay2&~delay3;endmodule5、建立七段数码管复用模块“hex7seg〞,代码如下:modulehex7seg( input[15:0]x, inputclk, inputclr, outputreg[6:0]a_to_g, outputreg[3:0]an, outputdp ); wire[1:0]s; reg[3:0]digit; wire[3:0]aen; reg[19:0]clkdiv; assigndp=1; assigns=clkdiv[19:18]; assignaen[3]=1; assignaen[2]=1; assignaen[1]=1; assignaen[0]=1; //四位四选一always@(*) case(s) 0:digit=x[3:0]; 1:digit=x[7:4]; 2:digit=x[11:8]; 3:digit=x[15:12]; default:digit=x[3:0];endcase//数码管显示always@(*)case(digit) 0:a_to_g=7'b0000001; 1:a_to_g=7'b1001111; 2:a_to_g=7'b0010010; 3:a_to_g=7'b0000110; 4:a_to_g=7'b1001100; 5:a_to_g=7'b0100100; 6:a_to_g=7'b0100000; 7:a_to_g=7'b0001111; 8:a_to_g=7'b0000000; 9:a_to_g=7'b0000100; 'hA:a_to_g=7'b0001000; 'hB:a_to_g=7'b1100000; 'hC:a_to_g=7'b0110001; 'hD:a_to_g=7'b1000010; 'hE:a_to_g=7'b0110000; 'hF:a_to_g=7'b0111000; default:a_to_g=7'b0000001;endcase//digitselectalways@(*)beginan=4'b1111; if(aen[s]==1) an[s]=0;end//时钟分频器always@(posedgeclkorposedgeclr)beginif(clr==1)clkdiv<=0;elseclkdiv<=clkdiv+1;endendmodule6、顶层模块lock_top设计。代码如下:modulelock_top(inputmclk,input[7:0]sw,input[3:0]btn,output[1:0]led, output[6:0]seg, output[3:0]an, outputdp); wireclr,clk190,clkp,btn012; wire[1:0]bn; wire[15:0]x; assignx={2'b00,sw[7:6],2'b00,sw[5:4],2'b00,sw[3:2],2'b00,sw[1:0]}; assignclr=btn[3]; assignbtn012=btn[0]|btn[1]|btn[2]; assignbn[1]=btn[2]; assignbn[0]=btn[1]; clkdivU1(.mclk(mclk), .clr(clr), .clk190(clk190) ); clock_pulseU2(.inp(btn012), .cclk(clk190), .clr(clr), .outp(clkp) ); lockU3(.clk(clkp), .clr(clr), .sw(sw), .bn(bn), .pass(led[1]), .fail(led[0]) ); hex7segU4(.x(x), .clk(mclk), .clr(btn[3]), .a_to_g(seg), .an(an), .dp(dp) );Endmodule7、将工程编译、综合与实现。在工程管理区的“Sourcefor〞中选取“Implementation〞选项,然后在进程管理区双击“Synthesize-XST〞进行综合,如图4所示。 综合完成以后是实现,实现主要分为三个步骤:翻译逻辑网表、映射到器件单元和布局布线,如图4所示。注意的是,在实现前还必须为模块中的输入/输出信号添加引脚约束,即添加UCF文件。开发板BASYS2的UCF文件可以在其网站上,当然也可以自己编辑UCF文件。实验所用的UCF文件如图5所示。、器件配置。首先生成可以下载到硬件中的二进制比特文件。双击图10中的“GenerateProgrammingFile〞的选线,ISE就会为设计生成相应的二进制比特文件。BASYS2开发板提供了非常方便的JTAG配置方案,使用USB-miniUSB线缆结合DigilentAdept软件实现FPGA的配置,配置界面如图6所示。这里我们对FPGA进行配置,配置成功状态栏会显示“essful〞信息,如图6所示。然后可在器件上验证设计。

最近更新

2024年霸气誓师大会口号8篇 22页

2024年霸气励志的口号简短精炼 5页

2024年霜降的特点和风俗 3页

领导上台致辞语精辟6篇 8页

集镇路改街项目开工典礼致辞5篇 8页

门面买卖合同 46页

钳工焊接课程总结优秀 13页

2024年雪周记400字小学四年级(精选22篇) 21页

2024年雨雪天气安全应急预案 35页

2024年“物业管理及公共服务”等知识考试题库.. 39页

2024年《日常生活突发事故急救知识及处理方法.. 33页

2024年临床执业医师考试真题含完整答案(考点.. 29页

车位租赁协议书合同大全 35页

足球赛开幕式领导致辞3篇 4页

2024年公务员考试《言语理解与表达》题库(突.. 174页

2024年兵团直属校园招聘考试笔试试题附完整答.. 245页

2024年吉林延边州直部分事业单位招聘急需人才.. 162页

2024年吉林省人力资源和社会保障厅及直属参公.. 165页

七年级诗词大会题库及一套完整答案 8页

公务员考试《判断推理题》题库附参考答案【研.. 175页

河南省高校教师岗前培训《高等教育学》题目10.. 23页

2024年雇佣合同样本 29页

2024年雇佣劳务合同 31页

2024年“物业管理及公共服务”等知识考试题库.. 39页

肇庆裹蒸粽行业报告 28页

云南省市政基础设施工程施工质量验收统一规程.. 82页

绘画心理学 2页

2021年歌颂祖国的三句半台词 8页

机械设备投标书范本1 37页

少先队六知六会 1页