数字逻辑实验报告Verilog时序逻辑设计Word格式.docx
《数字逻辑实验报告Verilog时序逻辑设计Word格式.docx》由会员分享,可在线阅读,更多相关《数字逻辑实验报告Verilog时序逻辑设计Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
74x163逻辑电路图
上图的设计可以采用门级描述,也可以采用教材《数字设计—原理与实践》(第4版)第525页的表8-20中的行为描述
五、实验器材(设备、元器件):
PC机、WindowsXP、Anvyl或Nexys3开发板、XilinxISE14.7开发工具、DigilentAdept下载工具。
六、实验步骤:
实验步骤包括:
建立新工程,设计代码与输入,设计测试文件,设置仿真,查看波形,约束与实现、生成流代码与下载调试。
七、关键源代码及波形图:
1.D触发器的Verilog代码
源码如下
modulevr74x74(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,CLR_L,w3,D);
nand(Q,PR_L,w2,QN);
nand(QN,Q,w3,CLR_L);
endmodule
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;
modulevr74x74_tb;
//Inputs
regCLK;
regD;
regPR_L;
regCLR_L;
//Outputs
wireQ;
wireQN;
//InstantiatetheUnitUnderTest(UUT)
vr74x74uut(
.CLK(CLK),
.D(D),
.PR_L(PR_L),
.CLR_L(CLR_L),
.Q(Q),
.QN(QN)
);
仿真结果如下图所示
检查输入输出关系,设计无误。
2.4位通用移位寄存器74x194
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;
wireCLR_L_D;
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;
buf(CLK_D,CLK);
buf(CLR_L_D,CLR_L);
not(m1,S1);
not(m0,S0);
and(n1,S0,m1,RIN);
and(n2,S0,S1,A);
and(n3,m0,m1,QA);
and(n4,m0,S1,QB);
and(n5,S0,m1,QA);
and(n6,S0,S1,B);
and(n7,m0,m1,QB);
and(n8,m0,S1,QC);
and(n9,S0,m1,QB);
and(n10,S0,S1,C);
and(n11,m0,m1,QC);
and(n12,m0,S1,QD);
and(n13,S0,m1,QC);
and(n14,S0,S1,D);
and(n15,m0,m1,QD);
and(n16,m0,S1,LIN);
or(p1,n1,n2,n3,n4);
or(p2,n5,n6,n7,n8);
or(p3,n9,n10,n11,n12);
or(p4,n13,n14,n15,n16);
vr74x74q1(CLK_D,p1,1'
b1,CLR_L_D,QA,QAN);
vr74x74q2(CLK_D,p2,1'
b1,CLR_L_D,QB,QBN);
vr74x74q3(CLK_D,p3,1'
b1,CLR_L_D,QC,QCN);
vr74x74q4(CLK_D,p4,1'
b1,CLR_L_D,QD,QDN);
源码如下:
S1=0;
S0=0;
A=0;
B=0;
C=0;
D=0;
//Wait100nsforglobalresettofinish
#100;
//Addstimulushere
S1=0;
S0=0;
#100;
S0=1;
RIN=1;
S1=1;
A=0;
B=0;
C=0;
LIN=1;
#100;
A=1;
B=1;
C=1;
D=1;
End
alwaysbegin
测试文件:
modulevr74x194_tb;
regLIN;
regRIN;
regS1;
regS0;
regA;
regB;
regC;
wireQA;
wireQB;
wireQC;
wireQD;
//InstantiatetheUnitUnderTest(UUT)
Vr74x194uut(
.LIN(LIN),
.RIN(RIN),
.S1(S1),
.S0(S0),
.A(A),
.B(B),
.C(C),
.QA(QA),
.QB(QB),
.QC(QC),
.QD(QD)
initialbegin
//InitializeInputs
CLK=0;
CLR_L=0;
LIN=0;
RIN=0;
检验输入输出结果正常,设计无误。
3.3位LFSR计数器
moduleLFSR(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'
.A(1'
.B(1'
b0),
.C(1'
.D(1'
b0),
.QA(X2),
.QB(X1),
.QC(X0)
);
xor(w3,X1,X0);
nor(w1,X2,X1);
xor(w6,w1,w3);
moduleLFSR_tb;
regRESET;
wireX2;
wireX1;
wireX0;
LFSRuut(
.RESET(RESET),
.X2(X2),
.X1(X1),
.X0(X0)
CLK=0;
RESET=1;
//Addstimulushere
RESET=0;
4.74x163计数器
and(w21,w20,w25);
not(w26,ENT);
nor(w1,LD_L,CLR);
nor(w2,w1,CLR);
xor(w4,w25,~QN[0]);
xor(w10,w9,~QN[1]);
xor(w16,w15,~QN[2]);
xor(w22,w21,~QN[3]);
and(w3,w1,A);
and(w5,w2,w4);
and(w7,w1,B);
and(w11,w2,w10);
and(w13,w1,C);
and(w17,w2,w16);
and(w19,w1,D);
and(w23,w2,w22);
or(w6,w3,w5);
or(w12,w7,w11);
or(w18,w13,w17);
or(w24,w19,w23);
vr74x74U1(D[0],CLK,1,CLR_L,Q[0],QN[0]);
vr74x74U2(D[1],CLK,1,CLR_L,