Verilog时序逻辑设计2Word格式文档下载.docx
- 文档编号:4408430
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:20
- 大小:358.89KB
Verilog时序逻辑设计2Word格式文档下载.docx
《Verilog时序逻辑设计2Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Verilog时序逻辑设计2Word格式文档下载.docx(20页珍藏版)》请在冰点文库上搜索。
图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;
仿真结果如下图所示。
图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);
5.74x194寄存器的仿真测试代码
//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
S1=0;
S0=0;
#100;
S0=1;
RIN=1;
S1=1;
A=0;
B=0;
C=0;
LIN=1;
A=1;
B=1;
C=1;
D=1;
图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'
.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);
7.3位LFSR计数器的的仿真测试代码
RESET=1;
//Addstimulushere
RESET=0;
图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;
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);
9.74x163的仿真测试代码
CLR_L=0;
LD_L=1'
bx;
ENT=1'
ENP=1'
#20;
LD_L=0;
D=4'
b1111;
LD_L=1;
ENT=0;
ENP=0;
ENT=1;
ENP=1;
end
图874x163计数器的仿真结果
10.1Hz数字信号发生器的Verilog代码
modulecounter_100M(
inputCLK_100MHz,
outputCLK_1Hz
);
wireCLR_L;
wire[27:
wire[6:
0]RCO;
//CLK,CLR_L,LD_L,ENP,ENT,D,Q,RCO);
Vr74x163u0(CLK_100MHz,CLR_L,1'
b1,1'
b1,4'
b0000,Q[3:
0],RCO[0]);
Vr74x163u1(CLK_100MHz,CLR_L,1'
b1,RCO[0],4'
b0000,Q[7:
4],RCO[1]);
Vr74x163u6(CLK_100MHz,CLR_L,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];
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);
12.3位LFSR计数器在Nexys3开发板上的UCF文件
NETRESETLOC=T10;
NETLED0LOC=U16;
NETLED1LOC=V16;
NETLED2LOC=U15;
八、实验结论:
基本掌握了D触发器、同步计数器74x163、移位寄存器74x194的工作原理。
九、总结及心得体会:
根据原理图,写出各个部分的逻辑关系,要面面俱到。
十、对本实验过程及方法、手段的改进建议:
需了解一些Verilog的高级编程语言,简化代码。
报告评分:
指导教师签字:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Verilog 时序 逻辑设计