1、如果密码错误,led0将亮起。图 1 给出了设计的顶层模块。当按下 btn0、 btn1、 btn2中任何一个按钮时,将会产生一个时钟脉冲。当分别按下按钮btn0、btn1、btn2时,锁模块对应的 2 位输入 bn1:0为 “00”、btn0 btnl btn2: “ 01”和“ 10”。输入的密码与拨位开关上设置的密码相比较, 产生图2所示的状态转移图。即使密码输入错误,也必须 完成完整的4位密码输入,才能进入“ fail”状态E4。图1门锁电路的顶层模块图2门锁电路的状态转移图四、 实验目的:熟悉利用HDL代码输入方式进行组合逻辑电路的设计和仿真的流程,掌握 Verilog语言的基本语法
2、。并通过一个密码锁的 设计把握利用EDA软件(Xilinx ISE 10.1)进行HDL代码输入 方式的电子线路设计与仿真的详细流程,熟悉摩尔状态机。五、 实验内容:1) 利用HDL代码输入方式在Xilinx ISE 10.1平台上实现一个 密码锁设计,可以设定密码并显示,输入密码以解锁;2) 设计密码锁的顶层模块,使用模块实例语句连接前面所设 计的密码锁模块;3) 生成比特流文件下载到开发板上进行验证。六、实验器材(设备、元器件):1) 计算机(安装Xilinx ISE 10.1软件平台);2) BASYS2 FPGA 开发板一套(带 USB-MlniUSB 下载线)。七、实验步骤:1、在X
3、ilinx ISE 10.1平台中,新建一个工程lock。我们选用 的BASYS2 FPGA 开发板采用的是 Spartan3E XA3S100E芯片和 CPG132封装,设置好器件属性,如图 3所示。 M目:,Project Wizard ” Os, ce hoa凸诧百Select the devi and dgsi flow for the proj ectProperty laaeVLueProduct CategoryAllFamilyAutoffl&tiV* Sparlan3EDeviceXA3S100E TF acka.geCFG132 Speed7 sTop-Level Sour
4、ce TypeHDLSynthesis TodXJT (VU)L/yrilo) SimulatorISE SimLitor (YHDUVerily) 寸Preferred LanguageVerilog 寸Enabls Enhanced De-si gn Summtry 疋Enable Filt曹arixi哲Display Incr em ent al2More Info Cui cel图3.设置器件属性2、在工程管理区任意位置单击鼠标右键, 在弹出的快捷菜单中选择“New Source”命令,弹出新建源代码对话框,这里我们选择“Verilog Module”类型,输入 Verilog 文件名
5、“ lock”。ISE会自动创建一个Verilog的模板,并在源代码编辑区打开,接下来的工作就是将代码编写完整。完整代码如下: 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,nex_s;parameter S0=4b0000,S1=4b0001,S2=4b0010,S3=4b0011,S4=4b0100, E1=4b0101,E2=4b0110,E3=4b0111,E4=4b1000;/state registers
6、always(posedge clk or posedge clr) beginif(clr=1) pre_s=S0;else pre_s=nex_s;end/C1 always(*) begin case(pre_s)S0:if(bn=sw7:6)nex_s=S1; else=E1; S1:if(bn=sw5:4)=S2;=E2; S2:if(bn=sw3:2)=S3;=E3; S3:if(bn=sw1:0)=S4;=E4; S4:E1:E2:E3: E4:6) nex_selse default:endcase/C2 always(*) begin if(pre_s=S4) pass=1;
7、else pass=0;if(pre_s=E4) fail=1;fail=0;endmodule3、建立分频模块“ clkdiv ”,过程如上,代码如下:module clkdiv(input mclk,input clr, output clk190 );reg 24:0 q;always(posedge mclk or posedge clr) beginif(clr=1)q=0;=q+1;assign clk190=q17;/190Hz4、 建立时钟脉冲模块“ clock_pulse”,代码如下:module clock_pulse(input inp,input cclk,input
8、clr, output outp );reg delay1;reg delay2;reg delay3; always(posedge clr or posedge cclk) beginbegindelay1delay2delay3end elsebegin delay1=inp; delay2=delay1; delay3=delay2;assign outp=delay1&delay2&delay3;5、 建立七段数码管复用模块“ hex7seg,代码如下:module hex7seg(input 15:0 x,input clk,input clr,output reg 6:0 a_t
9、o_g,output reg 3:0 an,output dp);wire 1:0 s;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:digit=x15:12;endcase /数码管显示case(digit)a_to_g=7b0000001;b1001111;b0
10、010010;b0000110;4:b1001100;5:b0100100;6:b0100000;7:b0001111;8:b0000000;9:b0000100;hA:b0001000;hB:b1100000;hC:b0110001;hD:b1000010;hE:b0110000;hF:b0111000;default: endcase /digit select always(*) begin an=4b1111;if(aens=1) ans=0;end /时钟分频器 always(posedge clk or posedge clr) beginif(clr=1) clkdivclkdi
11、v User Coiistraints【t Synthesi re XST-&丄环1 ement Dsi gn-J jGentrate Progra/Mriin Filefi Configure Target Device图4.综合进程与源程序结构综合完成以后是实现,实现主要分为三个步骤:翻译逻辑网表、 映射到器件单元和布局布线,如图4所示。注意的是,在实现前还必 须为模块中的输入/输出信号添加引脚约束,即添加 UCF文件。开发 板BASYS2的UCF文件可以在其网站上 上下载,当 然也可以自己编辑UCF文件。实验所用的UCF文件如图5所示。图5. BASYS2开发板所需的UCF文件6、器件配
12、置。首先生成可以下载到硬件中的二进制比特文件。双 击图10中的“ Gen erate Programmi ng File ”的选线,ISE就会为设计 生成相应的二进制比特文件。BASYS2开发板提供了非常方便的JTAG配置方案,使用 USB-miniUSB线缆结合Digilent Adept软件实现FPGA的配置,配置 界面如图6所示。这里我们对FPGA进行配置,配置成功状态栏会显 示“Programming Successful信息,如图6所示。然后可在器件上验 证设计。图6. Digilent Adept 界面与配置八、实验数据及结果分析:CT图7.设定密码为2012BASYS abeyo
13、nd theoryE抵Lfe 齟 S谡1严IGiLENT icjooco& :侬图8.输入密码0000, led0亮,输入错误j&TiOOrtHlc:UCLK Q Q Q GrtXfiSSrJr a,Iu-m-bvWs1 DIGILENT icdooo J2THEOIg p 艰雜1脸怎Jte鼬口 I !图8.输入密码2012, led1亮,输入正确九、实验结论:由上面实验结果可得,实验仿真结果证明了设计的正确性, 该设计是合理的,能够满足实验所需的,完成了题设要求。十、总结及心得体会:此次实验结合了前几次的学习的成果,将七段数码管复用的部分 结合进来,并通过分频电路和时钟脉冲电路来实现通过按键对时序系 统的输入,而密码锁本身即是时序电路摩尔机的利用。至此,我们完 整的梳理了一遍这个学期的所学, 组合电路设计,时序电路设计合为 一体,更能深刻的理解 Verilog语言和EDA,收获良多。报告评分:指导教师签字: