Verilog时序逻辑设计2.docx

上传人:b****9 文档编号:26225412 上传时间:2023-06-17 格式:DOCX 页数:20 大小:346.32KB
下载 相关 举报
Verilog时序逻辑设计2.docx_第1页
第1页 / 共20页
Verilog时序逻辑设计2.docx_第2页
第2页 / 共20页
Verilog时序逻辑设计2.docx_第3页
第3页 / 共20页
Verilog时序逻辑设计2.docx_第4页
第4页 / 共20页
Verilog时序逻辑设计2.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

Verilog时序逻辑设计2.docx

《Verilog时序逻辑设计2.docx》由会员分享,可在线阅读,更多相关《Verilog时序逻辑设计2.docx(20页珍藏版)》请在冰豆网上搜索。

Verilog时序逻辑设计2.docx

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的高级编程语言,简化代码。

报告评分:

指导教师签字:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1