1、1电 子 科 技 大 学实 验 报 告学生姓名:ZYZ 学 号:2014060103026 指导教师:DJ一、实验项目名称: Verilog 时序逻辑设计二、实验目的:掌握边沿 D 触发器 74x74、同步计数器 74x163、4 位通用移位寄存器74x194,的工作原理。采用移位寄存器 74x194 设计 3 位最大序列长度线性反馈移位寄存器(LFSR:Linear Feedback Shift Register)计数器。采用同步计数器 74x163 设计频率为 1Hz 的数字信号。采用 ISE 软件进行 Verilog 设计和仿真,并下载到 FPGA 开发板进行实际调试。三、实验内容:1根
2、据边沿 D 触发器 74x74 的原理图编写设计和仿真模块。2根据通用移位寄存器 74x194 的原理图编写设计和仿真模块。3采用 1 片 74x194 和其它小规模逻辑门设计 3 位 LFSR 计数器,编写设计和仿真模块。4根据 4 位同步计数器 74x163 的原理图编写设计和仿真模块。5输入为 100MHz 的系统时钟,采用 7 片 74x163 和其它小规模逻辑门设计1Hz 的数字信号。6在 FPGA 开发板上调试 3 位 LFSR 计数器。四、实验原理:图 1 所示为带有置位和清零端的边沿 D 触发器的逻辑图,本实验中用Verilog 语句来描述。图 1 中的 w1-w4 为中间信号
3、名称。2w 1w 2w 3w 4图 1 边沿 D 触发器的逻辑图图 2 为 4 位通用移位寄存器 74x194,本实验中用 Verilog 语句来描述。注意图 2 与教材数字设计原理与实践 (第 4 版)第 528 页的图 8-41 有一点不同,在图 2 中采用上升沿 D 触发器,所以输入 CLK 后面改为接缓冲器。3C L K _ DC L R _ L _ DS 1 _ LS 1 _ HS 0 _ LS 0 _ Hw 1w 2w 3w 4w 5w 6w 7w 8w 9w 1 0w 1 1w 1 2w 1 3w 1 4w 1 5w 1 6w 1 7w 1 8w 1 9w 2 0图 2 4 位通
4、用移位寄存器 74x194 的逻辑图图 3 是 3 位 LFSR 计数器的电路图。注意图 3 与教材数字设计原理与实践 (第 4 版)第 535 页的图 8-52 有一些不同,在图 3 中采用右移工作方式,输出 QA 接高位 Q2,输出 QC 接低位 Q0,输入 ABCD 接 1000。这样修改的目的是与教材第 535 页的图 8-51、表 8-26 以及表 8-27 一致。4图 3 3 位 LFSR 计数器C L Rw 1w 2w 3w 4w 5w 6w 7w 8w 9w 1 0w 1 1w 1 2w 1 3w 1 4w 1 5w 1 6w 1 7w 1 8w 1 9w 2 0w 2 1w
5、2 2w 2 3w 2 4w 2 5w 2 6图 4 同步计数器 74x163 的原理图5在图 3 中,输入为 1Hz 的数字信号。在 Nexys3 开发板上自带 100MHz 时钟,为了便于将图 3 的设计下载到 FPGA 开发板,需要设计 1Hz 的数字信号发生器。设输入为 100MHz,输出为 1Hz,则计数器的模为 100M。采用十六进制计数方式,有效状态选 0-5F5E0FF,所以需要 7 片 74x163。采用清零法,在状态5F5E0FF 时产生 LD_L 信号,LD_L = ( Q26 Q24 RCO5 Q18 Q16 Q15 Q14 Q13 RCO1 RCO0 )。输出选 Q2
6、6, Q26的周期为 1 秒,占空比约 33%。图 4 中的输入 ABCD 也可改为 D0、D1、D2、D3,输出 QA QB QC QD可改为 Q0、Q1、Q2、Q3,图 4 的设计可以采用门级描述,也可以采用教材数字设计原理与实践 (第 4 版)第 525 页的表 8-20 中的行为描述。五、实验器材(设备、元器件):PC 机、Windows XP、Anvyl 或 Nexys3 开发板、Xilinx ISE 14.7 开发工具、Digilent Adept 下载工具。六、实验步骤:实验步骤包括:建立新工程、设计代码与输入、约束与实现、生成流代码与下载调试。七、关键源代码:1D 触发器的 V
7、erilog 代码module d_ff( CLK , D , PR_L , CLR_L ,Q , QN );input CLK , D , PR_L , CLR_L ;output Q , QN ;wire w1 , w2 , w3 , w4 ;nand ( w1 , PR_L , w2 , w4 ) ;nand ( w2 , CLR_L , w1 , CLK ) ;nand ( w3 , w2 , CLK , w4 ) ;nand ( w4 , w3 , CLR_L , D ) ;nand ( Q , PR_L , w2 , QN );nand ( QN , Q , w3 , CLR_L
8、) ;endmodule2仿真测试代码6initial beginCLK = 0 ;PR_L = 1 ;CLR_L = 1 ;D = 0 ;#4 D = 1 ;#2 D = 0 ;#8 D = 0 ;#2 D = 1 ;#13 CLR_L = 0 ;#10 CLR_L = 1 ;#10 PR_L = 0 ;#5 D = 0 ;#10 PR_L = 1 ;endalways begin#5 CLK = CLK ;end仿真结果如下图所示。7图 5 D 触发器的仿真结果3 D 触发器在 Nexys3 开发板上的 UCF 文件NET CLK LOC=V10;#SwitchNET CLR_L LOC=
9、 T10; #SW0NET PR_L LOC= T9; #SW1NET D LOC= V9; #SW2#LedNET QN LOC=U16; #LD0NET Q LOC=V16; #LD144 位通用移位寄存器 74x194 的 Verilog 代码8module Vr74x194(CLK , CLR_L , LIN , RIN , S1 , S0 , A , B , C , D ,QA , QB , QC , QD );input CLK , CLR_L , LIN , RIN , S1 , S0 , A , B , C , D ;output QA , QB , QC , QD ;wire
10、 CLK_D ;wire CLK_D_L ;wire CLR_L_D ;wire CLR_L_L ;wire S1_L , S1_H ;wire S0_L , S0_H ;wire QAN , QBN , QCN , QDN ;wire w1 , w2 , w3 , w4 , w5 , w6 , w7 , w8 , w9 , w10 ;wire w11 , w12 , w13 , w14 , w15 , w16 , w17 , w18 , w19 , w20 ;wire w21 , w22 , w23 , w24 , w25 , w26 , w27 , w28;wire w29 , w30 ,
11、 w31 , w32 , w33 , w34 , w35 , w36;not ( CLK_D_L , CLK) ;not ( CLK_D , CLK_D_L ) ;not ( CLR_L_L , CLR_L ) ;not ( CLR_L_D , CLR_L_L ) ;not ( S1_L , S1 ) ;not ( S1_H , S1_L ) ;not ( S0_L , S0 ) ;not ( S0_H , S0_L ) ;and ( w1 , LIN , S1_H , S0_L ) ;and ( w2 , QD , S1_L , S0_L ) ;and ( w3 , D , S1_H , S
12、0_H ) ;and ( w4 , QC , S1_L , S0_H ) ;or ( w5 , w1 , w2 , w3 , w4 ) ;and ( w6 , QD , S1_H , S0_L ) ;and ( w7 , QC , S1_L , S0_L ) ;and ( w8 , C , S1_H , S0_H ) ;and ( w9 , QB , S1_L , S0_H ) ;or ( w10 , w6 , w7 , w8 , w9 ) ;and ( w11 , QC , S1_H , S0_L ) ;and ( w12 , QB , S1_L , S0_L ) ;and ( w13 ,
13、B , S1_H , S0_H ) ;and ( w14 , QA , S1_L , S0_H ) ;or ( w15 , w11 , w12 , w13 , w14 ) ;9and ( w16 , QB , S1_H , S0_L ) ;and ( w17 , QA , S1_L , S0_L ) ;and ( w18 , A , S1_H , S0_H ) ;and ( w19 , RIN , S1_L , S0_H ) ;or ( w20 , w16 , w17 , w18 , w19 ) ;nand ( w21 , w22 , w24 ) ;nand ( w22 , CLR_L , w
14、21 , CLK ) ;nand ( w23 , w22 , CLK_D , w24 ) ;nand ( w24 , w23 , CLR_L_D , w5 ) ;nand ( QD , w22 , QDN );nand ( QDN , QD , w23 , CLR_L_D ) ;nand ( w25 , w26 , w28 ) ;nand ( w26 , CLR_L , w25 , CLK ) ;nand ( w27 , w26 , CLK_D , w28 ) ;nand ( w28 , w27 , CLR_L_D , w10 ) ;nand ( QC , w26 , QCN );nand (
15、 QCN , QC , w27 , CLR_L_D ) ;nand ( w29 , w30 , w32 ) ;nand ( w30 , CLR_L , w29 , CLK ) ;nand ( w31 , w30 , CLK_D , w32 ) ;nand ( w32 , w31 , CLR_L_D , w15 ) ;nand ( QB , w30 , QBN );nand ( QBN , QB , w31 , CLR_L_D ) ;nand ( w33 , w34 , w36 ) ;nand ( w34 , CLR_L , w33 , CLK ) ;nand ( w35 , w34 , CLK
16、_D , w36 ) ;nand ( w36 , w35 , CLR_L_D , w20 ) ;nand ( QA , w34 , QAN );nand ( QAN , QA , w35 , CLR_L_D ) ;endmodule574x194 寄存器的仿真测试代码10initial begin/ Initialize InputsCLK = 0;CLR_L = 0;LIN = 0;RIN = 0;S1 = 0;S0 = 0;A = 0;B = 0;C = 0;D = 0;/ Wait 100 ns for global reset to finish#100;/ Add stimulus
17、hereCLR_L = 1 ;S1 = 0 ;S0 = 0 ;#100 ;S1 = 0 ;S0 = 1 ;RIN = 1 ;11#100 ;S1 = 1 ;S0 = 1 ;A = 0 ;B = 0 ;C = 0 ;D = 0 ;#100 ;S1 = 1 ;S0 = 0 ;LIN = 1 ;#100 ;S1 = 1 ;S0 = 1 ;A = 1 ;B = 1 ;C = 1 ;D = 1 ;endalways begin#5 CLK = CLK ;end仿真结果如下图所示。12图 6 74x194 移位寄存器仿真结果63 位 LFSR 计数器的 Verilog 代码13module LFSR_8(
18、 CLK , RESET , X2 , X1 , X0 );input CLK , RESET ;output X2 , X1 , X0 ;wire w1 , w3 , w6 ;Vr74x194 U1( .CLK(CLK) , .CLR_L(1b1) , .RIN(w6) , .S1(RESET) , .S0(1b1) , .A(1b1) , .B(1b0) , .C(1b0) , .D(1b0) ,.QA(X2) , .QB(X1) , .QC(X0) ) ;xor ( w3 , X1 , X0 ) ;nor ( w1 , X2 , X1 ) ;xor ( w6 , w1 , w3 ) ;e
19、ndmodule73 位 LFSR 计数器的的仿真测试代码initial begin/ Initialize InputsCLK = 0;RESET = 1;/ Wait 100 ns for global reset to finish#100;/ Add stimulus hereRESET = 0 ;endalways begin#5 CLK = CLK ;end仿真结果如下图所示。14图 7 3 位 LFSR 计数器的仿真结果8 74x163 计数器的 Verilog 代码module Vr74x163( CLK , CLR_L , LD_L , ENP , ENT , D , Q ,
20、 RCO );input CLK , CLR_L , LD_L , ENP , ENT ;input 3:0 D ;output 3:0 Q ;output RCO ;wire w1 , w2 , w3 , w4 , w5 , w6 , w7 , w8 , w9 , w10 ;wire w11 , w12 , w13 , w14 , w15 , w16 , w17 , w18 , w19 , w20 ;wire w21 , w22 , w23 , w24 , w25 , w26 ;wire CK ;wire CLR ;wire 3:0 QN ;wire QAN_L , QBN_L , QCN_
21、L , QDN_L ;15wire CK ;wire CLR ;wire 3:0 QN ;not ( QAN_L , QAN );not ( QBN_L , QBN );not ( QCN_L , QCN );not ( QDN_L , QDN );not ( CLR , CLR_L );nor ( w1 , CLR , LD_L );nor ( w2 , w1 , CLR );and ( w3 , w1 , A );xor ( w4 , w25 , QAN_L );and ( w5 , w2 , w4 );or ( w6 , w3 , w5 );and ( w7 , B );not ( w8
22、 , QAN_L );and ( w9 , w8 , w25 );xor ( w10 , w9 , QBN_L );and ( w11 , w2 , w10 );or ( w12 , w7 , w11 );and ( w13 , w1 , C );nor ( w14 , QAN_L , QBN_L );and ( w15 , w14 , w25 );xor ( w16 , w15 , QCN_L );and ( w17 , w2 , w16 );or ( w18 , w13 , w17 );and ( w19 , w1 , D );nor ( w20 , QAN_L , QBN_L , QCN
23、_L );and ( w21 , w20 , w25 );xor ( w22 , QDN_L );and ( w23 , w2 , w22 );or ( w24 , w19 , w23 );and ( w25 , ENP , ENT );not ( w26 , ENT );nor ( RCO , QAN_L , QBN_L , QCN_L , w26 );endmodule16974x163 的仿真测试代码/ Add stimulus hereCLR_L = 0 ;LD_L = 1bx ;ENT = 1bx ;ENP = 1bx ;#20 ;CLR_L = 1 ;LD_L = 0;ENT =
24、1bx ;ENP = 1bx ;D = 4b1111 ;#20 ;CLR_L = 1 ;LD_L = 1;ENT = 0 ;ENP = 1bx ;#20 ;CLR_L = 1 ;LD_L = 1;ENT = 1bx ;ENP = 0 ;#20 ;CLR_L = 1 ;LD_L = 1;ENT = 1 ;ENP = 1 ;endalways begin#5 CLK = CLK ;end仿真结果如下图所示。17图 8 74x163 计数器的仿真结果101Hz 数字信号发生器的 Verilog 代码module counter_100M(input CLK_100MHz ,output CLK_1H
25、z );wire CLR_L ;wire 27:0 Q ;wire 6:0 RCO ;/ CLK , CLR_L , LD_L , ENP , ENT , D , Q , RCO );Vr74x163 u0( CLK_100MHz , CLR_L , 1b1 , 1b1 , 1b1 , 4b0000 , Q3:0 , RCO0 );Vr74x163 u1( CLK_100MHz , CLR_L , 1b1 , 1b1 , RCO0 , 4b0000 , Q7:4 , RCO1 );Vr74x163 u6( CLK_100MHz , CLR_L , 1b1 , 1b1 , RCO5 , 4b00
26、00 , Q27:24 , RCO6 );/ 100*1000*1000 ( dec ) - 1 = 5F5E0FF (hex)nand ( CLR_L , Q26 , Q24 , RCO5 , Q18 , Q16 , Q15 , Q14 , Q13 , RCO1 , RCO0 ) ;assign CLK_1Hz = Q26 ;endmodule11可下载的 3 位 LFSR 计数器顶层设计模块18module lfsr_8_main(input CLK ,input RESET ,output LED2 , LED1 , LED0 );wire CLK_1Hz ; counter_100M
27、u1( CLK , CLK_1Hz ) ;LFSR_8 u2(CLK_1Hz , RESET , LED2 , LED1 , LED0 ); endmodule123 位 LFSR 计数器在 Nexys3 开发板上的 UCF 文件NET CLK LOC=V10;#SwitchNET RESET LOC= T10; #SW0#LedNET LED0 LOC=U16;NET LED1 LOC=V16;NET LED2 LOC=U15;八、实验结论:基本掌握了 D 触发器、同步计数器 74x163、移位寄存器 74x194 的工作原理。九、总结及心得体会:根据原理图,写出各个部分的逻辑关系,要面面俱到。十、对本实验过程及方法、手段的改进建议:需了解一些 Verilog 的高级编程语言,简化代码。报告评分:指导教师签字: