EDA技术Verilog密码锁Word版.doc

上传人:rrsccc 文档编号:9419350 上传时间:2021-02-24 格式:DOC 页数:15 大小:709KB
返回 下载 相关 举报
EDA技术Verilog密码锁Word版.doc_第1页
第1页 / 共15页
EDA技术Verilog密码锁Word版.doc_第2页
第2页 / 共15页
EDA技术Verilog密码锁Word版.doc_第3页
第3页 / 共15页
EDA技术Verilog密码锁Word版.doc_第4页
第4页 / 共15页
EDA技术Verilog密码锁Word版.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《EDA技术Verilog密码锁Word版.doc》由会员分享,可在线阅读,更多相关《EDA技术Verilog密码锁Word版.doc(15页珍藏版)》请在三一文库上搜索。

1、传播优秀Word版文档 ,希望对您有帮助,可双击去除!电 子 科 技 大 学实 验 报 告学生姓名:吴成峰 学 号:2014070906016 指导教师:黄志奇一、实验室名称: 主楼C2-514二、实验项目名称:密码锁三、实验原理:利用FPGA开发班上的3个按钮开关btn2:0来输入4位数字的密码。例如,输入“2-0-1-2”打开门锁。将用拨位开关sw7:0来设置密码,通过按钮开关btn2:0来输入密码。其中,btn0、btn1和btn2分别对应的有效输入为“00”(十进制0)、“01”(十进制1)和“10”(十进制2),sw7:6、sw5:4、sw3:2和sw1:0 分别对应密码的1、2、3

2、、4位。用sw7:0设置密码的同时,通过7段数码管复用电路,将其显示到7段数码管上。注意:需将8位输入扩展成16位,即,x15:0=2b00,sw7:6, 2b00,sw5:4, 2b00,sw3:2, 2b00,sw1:0输入4位数字后,才能知道所输入的密码是否正确。如果密码是正确的,led1亮起;如果密码错误,led0将亮起。传播优秀Word版文档 ,希望对您有帮助,可双击去除!图1给出了设计的顶层模块。当按下btn0、btn1、btn2中任何一个按钮时,将会产生一个时钟脉冲。当分别按下按钮btn0、btn1、btn2时,锁模块对应的2位输入bn1:0为“00”、“01”和“10”。输入的

3、密码与拨位开关上设置的密码相比较,产生图2所示的状态转移图。注意:即使密码输入错误,也必须完成完整的4位密码输入,才能进入“fail”状态E4。图1. 门锁电路的顶层模块传播优秀Word版文档 ,希望对您有帮助,可双击去除!图2. 门锁电路的状态转移图四、实验目的:熟悉利用HDL代码输入方式进行组合逻辑电路的设计和仿真的流程,掌握Verilog语言的基本语法。并通过一个密码锁的设计把握利用EDA软件(Xilinx ISE 10.1)进行HDL代码输入方式的电子线路设计与仿真的详细流程,熟悉摩尔状态机。五、实验内容:1) 利用HDL代码输入方式在Xilinx ISE 10.1平台上实现一个密码锁

4、设计,可以设定密码并显示,输入密码以解锁;2) 设计密码锁的顶层模块,使用模块实例语句连接前面所设计的密码锁模块;3) 生成比特流文件下载到开发板上进行验证。六、实验器材(设备、元器件):传播优秀Word版文档 ,希望对您有帮助,可双击去除!1) 计算机(安装Xilinx ISE 10.1软件平台);2) BASYS2 FPGA开发板一套(带USB-MIniUSB下载线)。七、实验步骤:1、在Xilinx ISE 10.1平台中,新建一个工程lock。我们选用的BASYS2 FPGA开发板采用的是Spartan3E XA3S100E芯片和CPG132封装,设置好器件属性,如图3所示。图3. 设

5、置器件属性2、在工程管理区任意位置单击鼠标右键,在弹出的快捷菜单中选择“New Source”命令,弹出新建源代码对话框,这里我们选择“Verilog Module”类型,输入Verilog文件名“lock”。ISE会自动创建一个Verilog的模板,并在源代码编辑区打开,接下来的工作就是将代码编写完整。完整代码如下:传播优秀Word版文档 ,希望对您有帮助,可双击去除!module lock( input clk, input clr, input 7:0 sw, input 1:0 bn, output reg pass, output reg fail ); reg 3:0 pre_s,

6、nex_s; parameter S0=4b0000,S1=4b0001,S2=4b0010,S3=4b0011,S4=4b0100, E1=4b0101,E2=4b0110,E3=4b0111,E4=4b1000; /state registers always(posedge clk or posedge clr)beginif(clr=1)pre_s=S0;elsepre_s=nex_s;end /C1 always(*)begincase(pre_s)S0:if(bn=sw7:6)nex_s=S1;elsenex_s=E1;S1:if(bn=sw5:4)nex_s=S2;elsenex

7、_s=E2;S2:if(bn=sw3:2)nex_s=S3;elsenex_s=E3;S3:if(bn=sw1:0)nex_s=S4;elsenex_s=E4;S4:if(bn=sw7:6)nex_s=S1;elsenex_s=E1;E1:nex_s=E2;E2:nex_s=E3;E3:nex_s=E4;E4:if(bn=sw7:6)nex_s=S1;elsenex_s=E1;default:nex_s=S0;endcaseend /C2 always(*)beginif(pre_s=S4)pass=1;elsepass=0;if(pre_s=E4)传播优秀Word版文档 ,希望对您有帮助,可

8、双击去除!fail=1;elsefail=0;endendmodule3、建立分频模块“clkdiv”,过程如上,代码如下:module clkdiv(input mclk,input clr,output clk190 ); reg 24:0 q; always(posedge mclk or posedge clr)beginif(clr=1)q=0;elseq=q+1;endassign clk190=q17;/190Hzendmodule4、建立时钟脉冲模块“clock_pulse”,代码如下:module clock_pulse( input inp, input cclk, inp

9、ut clr, output outp ); reg delay1; reg delay2; reg delay3; always(posedge clr or posedge cclk)beginif(clr=1)begindelay1=0;delay2=0;delay3=0;endelsebegindelay1=inp;delay2=delay1;delay3=delay2;endendassign outp=delay1&delay2&delay3;endmodule5、建立七段数码管复用模块“hex7seg”,代码如下:module hex7seg(input 15:0 x,input

10、 clk,input clr,output reg 6:0 a_to_g,output reg 3:0 an,output dp);wire 1:0 s;传播优秀Word版文档 ,希望对您有帮助,可双击去除!reg 3:0 digit;wire 3:0 aen;reg 19:0 clkdiv;assign dp=1;assign s=clkdiv19:18;assign aen3=1;assign aen2=1;assign aen1=1;assign aen0=1;/四位四选一always(*)case(s)0:digit=x3:0;1:digit=x7:4;2:digit=x11:8;3:

11、digit=x15:12;default:digit=x3:0;endcase/数码管显示always(*)case(digit)0:a_to_g=7b0000001;1:a_to_g=7b1001111;2:a_to_g=7b0010010;3:a_to_g=7b0000110;4:a_to_g=7b1001100;5:a_to_g=7b0100100;6:a_to_g=7b0100000;7:a_to_g=7b0001111;8:a_to_g=7b0000000;9:a_to_g=7b0000100;hA:a_to_g=7b0001000;hB:a_to_g=7b1100000;hC:a_

12、to_g=7b0110001;hD:a_to_g=7b1000010;hE:a_to_g=7b0110000;hF:a_to_g=7b0111000;default:a_to_g=7b0000001;endcase/digit selectalways(*)begin an=4b1111;if(aens=1) ans=0;end/时钟分频器always(posedge clk or posedge clr)begin if(clr=1) clkdiv=0; else clkdiv=clkdiv+1;endendmodule6、顶层模块lock_top设计。代码如下:module lock_to

13、p( input mclk,传播优秀Word版文档 ,希望对您有帮助,可双击去除! input 7:0 sw, input 3:0 btn, output 1:0 led, output 6:0 seg, output 3:0 an, output dp );wire clr,clk190,clkp,btn012;wire 1:0 bn;wire 15:0 x;assign x=2b00,sw7:6,2b00,sw5:4,2b00,sw3:2,2b00,sw1:0;assign clr=btn3;assign btn012=btn0|btn1|btn2;assign bn1=btn2;assi

14、gn bn0=btn1;clkdiv U1 (.mclk(mclk),.clr(clr),.clk190(clk190);clock_pulse U2 (.inp(btn012),.cclk(clk190),.clr(clr),.outp(clkp);lock U3 (.clk(clkp),.clr(clr),.sw(sw),.bn(bn),.pass(led1),.fail(led0);hex7seg U4 (.x(x),.clk(mclk),.clr(btn3),.a_to_g(seg),.an(an),.dp(dp);Endmodule 7、将工程编译、综合与实现。在工程管理区的“Sou

15、rce for”中选取“Implementation”选项,然后在进程管理区双击“Synthesize-XST”进行综合,如图4所示。传播优秀Word版文档 ,希望对您有帮助,可双击去除!图4. 综合进程与源程序结构综合完成以后是实现,实现主要分为三个步骤:翻译逻辑网表、映射到器件单元和布局布线,如图4所示。注意的是,在实现前还必须为模块中的输入/输出信号添加引脚约束,即添加UCF文件。开发板BASYS2的UCF文件可以在其网站上上下载,当然也可以自己编辑UCF文件。实验所用的UCF文件如图5所示。传播优秀Word版文档 ,希望对您有帮助,可双击去除!图5. BASYS2开发板所需的UCF文件

16、6、器件配置。首先生成可以下载到硬件中的二进制比特文件。双击图10中的“Generate Programming File”的选线,ISE就会为设计生成相应的二进制比特文件。BASYS2开发板提供了非常方便的JTAG配置方案,使用USB-miniUSB线缆结合Digilent Adept软件实现FPGA的配置,配置界面如图6所示。这里我们对FPGA进行配置,配置成功状态栏会显示“Programming Successful”信息,如图6所示。然后可在器件上验证设计。传播优秀Word版文档 ,希望对您有帮助,可双击去除!图6. Digilent Adept 界面与配置八、实验数据及结果分析:图7

17、.设定密码为2012传播优秀Word版文档 ,希望对您有帮助,可双击去除!图8.输入密码0000,led0亮,输入错误图8.输入密码2012,led1亮,输入正确九、实验结论:由上面实验结果可得,实验仿真结果证明了设计的正确性,该设计是合理的,能够满足实验所需的,完成了题设要求。传播优秀Word版文档 ,希望对您有帮助,可双击去除!十、总结及心得体会:此次实验结合了前几次的学习的成果,将七段数码管复用的部分结合进来,并通过分频电路和时钟脉冲电路来实现通过按键对时序系统的输入,而密码锁本身即是时序电路摩尔机的利用。至此,我们完整的梳理了一遍这个学期的所学,组合电路设计,时序电路设计合为一体,更能深刻的理解Verilog语言和EDA,收获良多。 报告评分: 指导教师签字:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1