Verilog时序逻辑设计2.docx
- 文档编号:26225412
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:20
- 大小:346.32KB
Verilog时序逻辑设计2.docx
《Verilog时序逻辑设计2.docx》由会员分享,可在线阅读,更多相关《Verilog时序逻辑设计2.docx(20页珍藏版)》请在冰豆网上搜索。
Verilog时序逻辑设计2
Verilog时序逻辑设计2
电子科技大学
实验报告
学生姓名:
ZYZ学号:
2014060103026指导教师:
DJ
一、实验项目名称:
Verilog时序逻辑设计
二、实验目的:
掌握边沿D触发器74x74、同步计数器74x163、4位通用移位寄存器74x194,的工作原理。
采用移位寄存器74x194设计3位最大序列长度线性反馈移位寄存器(LFSR:
LinearFeedbackShiftRegister)计数器。
采用同步计数器74x163设计频率为1Hz的数字信号。
采用ISE软件进行Verilog设计和仿真,并下载到FPGA开发板进行实际调试。
三、实验内容:
1.根据边沿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为中间信号名称。
图2 4位通用移位寄存器74x194的逻辑图
图3是3位LFSR计数器的电路图。
注意图3与教材《数字设计—原理与实践》(第4版)第535页的图8-52有一些不同,在图3中采用右移工作方式,输出QA接高位Q2,输出QC接低位Q0,输入ABCD接1000。
这样修改的目的是与教材第535页的图8-51、表8-26以及表8-27一致。
图3 3位LFSR计数器
图4 同步计数器74x163的原理图
在图3中,输入为1Hz的数字信号。
在Nexys3开发板上自带100MHz时钟,为了便于将图3的设计下载到FPGA开发板,需要设计1Hz的数字信号发生器。
设输入为100MHz,输出为1Hz,则计数器的模为100M。
采用十六进制计数方式,有效状态选0-5F5E0FF,所以需要7片74x163。
采用清零法,在状态5F5E0FF时产生LD_L信号,LD_L=(Q[26]Q[24]RCO[5]Q[18]Q[16]Q[15]Q[14]Q[13]RCO[1]RCO[0])’。
输出选Q[26],Q[26]的周期为1秒,占空比约33%。
图4中的输入ABCD也可改为D[0]、D[1]、D[2]、D[3],输出QAQBQCQD可改为Q[0]、Q[1]、Q[2]、Q[3],图4的设计可以采用门级描述,也可以采用教材《数字设计—原理与实践》(第4版)第525页的表8-20中的行为描述。
五、实验器材(设备、元器件):
PC机、WindowsXP、Anvyl或Nexys3开发板、XilinxISE14.7开发工具、DigilentAdept下载工具。
六、实验步骤:
实验步骤包括:
建立新工程、设计代码与输入、约束与实现、生成流代码与下载调试。
七、关键源代码:
1.D触发器的Verilog代码
moduled_ff(CLK,D,PR_L,CLR_L,
Q,QN
);
inputCLK,D,PR_L,CLR_L;
outputQ,QN;
wirew1,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);
endmodule
2.仿真测试代码
initialbegin
CLK=0;
PR_L=1;
CLR_L=1;
D=0;
#4D=1;
#2D=0;
#8D=0;
#2D=1;
#13CLR_L=0;
#10CLR_L=1;
#10PR_L=0;
#5D=0;
#10PR_L=1;
end
alwaysbegin
#5CLK=~CLK;
end
仿真结果如下图所示。
图5D触发器的仿真结果
3.D触发器在Nexys3开发板上的UCF文件
NETCLKLOC=V10;
#Switch
NETCLR_LLOC=T10;#SW0
NETPR_LLOC=T9;#SW1
NETDLOC=V9;#SW2
#Led
NETQNLOC=U16;#LD0
NETQLOC=V16;#LD1
4.4位通用移位寄存器74x194的Verilog代码
moduleVr74x194(CLK,CLR_L,LIN,RIN,S1,S0,A,B,C,D,
QA,QB,QC,QD
);
inputCLK,CLR_L,LIN,RIN,S1,S0,A,B,C,D;
outputQA,QB,QC,QD;
wireCLK_D;
wireCLK_D_L;
wireCLR_L_D;
wireCLR_L_L;
wireS1_L,S1_H;
wireS0_L,S0_H;
wireQAN,QBN,QCN,QDN;
wirew1,w2,w3,w4,w5,w6,w7,w8,w9,w10;
wirew11,w12,w13,w14,w15,w16,w17,w18,w19,w20;
wirew21,w22,w23,w24,w25,w26,w27,w28;
wirew29,w30,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,S0_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,B,S1_H,S0_H);
and(w14,QA,S1_L,S0_H);
or(w15,w11,w12,w13,w14);
and(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,w21,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(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_D,w36);
nand(w36,w35,CLR_L_D,w20);
nand(QA,w34,QAN);
nand(QAN,QA,w35,CLR_L_D);
endmodule
5.74x194寄存器的仿真测试代码
initialbegin
//InitializeInputs
CLK=0;
CLR_L=0;
LIN=0;
RIN=0;
S1=0;
S0=0;
A=0;
B=0;
C=0;
D=0;
//Wait100nsforglobalresettofinish
#100;
//Addstimulushere
CLR_L=1;
S1=0;
S0=0;
#100;
S1=0;
S0=1;
RIN=1;
#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;
end
alwaysbegin
#5CLK=~CLK;
end
仿真结果如下图所示。
图674x194移位寄存器仿真结果
6.3位LFSR计数器的Verilog代码
moduleLFSR_8(CLK,RESET,X2,X1,X0
);
inputCLK,RESET;
outputX2,X1,X0;
wirew1,w3,w6;
Vr74x194U1(.CLK(CLK),
.CLR_L(1'b1),
.RIN(w6),
.S1(RESET),
.S0(1'b1),
.A(1'b1),
.B(1'b0),
.C(1'b0),
.D(1'b0),
.QA(X2),
.QB(X1),
.QC(X0));
xor(w3,X1,X0);
nor(w1,X2,X1);
xor(w6,w1,w3);
endmodule
7.3位LFSR计数器的的仿真测试代码
initialbegin
//InitializeInputs
CLK=0;
RESET=1;
//Wait100nsforglobalresettofinish
#100;
//Addstimulushere
RESET=0;
end
alwaysbegin
#5CLK=~CLK;
end
仿真结果如下图所示。
图73位LFSR计数器的仿真结果
8.74x163计数器的Verilog代码
moduleVr74x163(CLK,CLR_L,LD_L,ENP,ENT,D,Q,RCO);
inputCLK,CLR_L,LD_L,ENP,ENT;
input[3:
0]D;
output[3:
0]Q;
outputRCO;
wirew1,w2,w3,w4,w5,w6,w7,w8,w9,w10;
wirew11,w12,w13,w14,w15,w16,w17,w18,w19,w20;
wirew21,w22,w23,w24,w25,w26;
wireCK;
wireCLR;
wire[3:
0]QN;
wireQAN_L,QBN_L,QCN_L,QDN_L;
wireCK;
wireCLR;
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,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_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);
endmodule
9.74x163的仿真测试代码
//Addstimulushere
CLR_L=0;
LD_L=1'bx;
ENT=1'bx;
ENP=1'bx;
#20;
CLR_L=1;
LD_L=0;
ENT=1'bx;
ENP=1'bx;
D=4'b1111;
#20;
CLR_L=1;
LD_L=1;
ENT=0;
ENP=1'bx;
#20;
CLR_L=1;
LD_L=1;
ENT=1'bx;
ENP=0;
#20;
CLR_L=1;
LD_L=1;
ENT=1;
ENP=1;
end
alwaysbegin
#5CLK=~CLK;
end
仿真结果如下图所示。
图874x163计数器的仿真结果
10.1Hz数字信号发生器的Verilog代码
modulecounter_100M(
inputCLK_100MHz,
outputCLK_1Hz
);
wireCLR_L;
wire[27:
0]Q;
wire[6:
0]RCO;
//CLK,CLR_L,LD_L,ENP,ENT,D,Q,RCO);
Vr74x163u0(CLK_100MHz,CLR_L,1'b1,1'b1,1'b1,4'b0000,Q[3:
0],RCO[0]);
Vr74x163u1(CLK_100MHz,CLR_L,1'b1,1'b1,RCO[0],4'b0000,Q[7:
4],RCO[1]);
Vr74x163u6(CLK_100MHz,CLR_L,1'b1,1'b1,RCO[5],4'b0000,Q[27:
24],RCO[6]);
//100*1000*1000(dec)-1=5F5E0FF(hex)
nand(CLR_L,Q[26],Q[24],RCO[5],Q[18],Q[16],Q[15],Q[14],Q[13],RCO[1],RCO[0]);
assignCLK_1Hz=Q[26];
endmodule
11.可下载的3位LFSR计数器顶层设计模块
modulelfsr_8_main(
inputCLK,
inputRESET,
outputLED2,LED1,LED0
);
wireCLK_1Hz;
counter_100Mu1(CLK,CLK_1Hz);
LFSR_8u2(CLK_1Hz,RESET,LED2,LED1,LED0);
endmodule
12.3位LFSR计数器在Nexys3开发板上的UCF文件
NETCLKLOC=V10;
#Switch
NETRESETLOC=T10;#SW0
#Led
NETLED0LOC=U16;
NETLED1LOC=V16;
NETLED2LOC=U15;
八、实验结论:
基本掌握了D触发器、同步计数器74x163、移位寄存器74x194的工作原理。
九、总结及心得体会:
根据原理图,写出各个部分的逻辑关系,要面面俱到。
十、对本实验过程及方法、手段的改进建议:
需了解一些Verilog的高级编程语言,简化代码。
报告评分:
指导教师签字:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Verilog 时序 逻辑设计