基于libero的数字逻辑设计仿真及验证实验实验报告实验4到8.docx

上传人:b****6 文档编号:5943233 上传时间:2023-01-02 格式:DOCX 页数:28 大小:500.64KB
下载 相关 举报
基于libero的数字逻辑设计仿真及验证实验实验报告实验4到8.docx_第1页
第1页 / 共28页
基于libero的数字逻辑设计仿真及验证实验实验报告实验4到8.docx_第2页
第2页 / 共28页
基于libero的数字逻辑设计仿真及验证实验实验报告实验4到8.docx_第3页
第3页 / 共28页
基于libero的数字逻辑设计仿真及验证实验实验报告实验4到8.docx_第4页
第4页 / 共28页
基于libero的数字逻辑设计仿真及验证实验实验报告实验4到8.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

基于libero的数字逻辑设计仿真及验证实验实验报告实验4到8.docx

《基于libero的数字逻辑设计仿真及验证实验实验报告实验4到8.docx》由会员分享,可在线阅读,更多相关《基于libero的数字逻辑设计仿真及验证实验实验报告实验4到8.docx(28页珍藏版)》请在冰豆网上搜索。

基于libero的数字逻辑设计仿真及验证实验实验报告实验4到8.docx

基于libero的数字逻辑设计仿真及验证实验实验报告实验4到8

___计算机__学院______________专业_____班________组、学号______

姓名______________协作者______________教师评定_________________

实验题目_________基于Libero的数字逻辑设计仿真及验证实验_________

1、熟悉EDA工具的使用;仿真基本门电路。

2、仿真组合逻辑电路。

3、仿真时序逻辑电路。

4、基本门电路、组合电路和时序电路的程序烧录及验证。

5、数字逻辑综合设计仿真及验证。

实验报告

1、基本门电路

一、实验目的

1、了解基于Verilog的基本门电路的设计及其验证。

2、熟悉利用EDA工具进行设计及仿真的流程。

3、学习针对实际门电路芯片74HC00、74HC02、74HC04、74HC08、74HC32、74HC86进行VerilogHDL设计的方法。

二、实验环境

Libero仿真软件。

三、实验内容

1、掌握Libero软件的使用方法。

2、进行针对74系列基本门电路的设计,并完成相应的仿真实验。

3、参考教材中相应章节的设计代码、测试平台代码(可自行编程),完成74HC00、74HC02、74HC04、74HC08、74HC32、74HC86相应的设计、综合及仿真。

4、提交针对74HC00、74HC02、74HC04、74HC08、74HC32、74HC86(任选一个)的综合结果,以及相应的仿真结果。

四、实验结果和数据处理

1、所有模块及测试平台代码清单

//74HC00代码-与非

//74HC00.v

moduleHC00(A,B,Y);

input[4:

1]A,B;

output[4:

1]Y;

assignY=~(A&B);

endmodule

//74HC00测试平台代码

//testbench.v

`timescale1ns/1ns

moduletestbench();

reg[4:

1]a,b;

wire[4:

1]y;

HC00u1(a,b,y);

initial

begin

a=4'b0000;b=4'b0001;

#10b=b<<1;

#10b=b<<1;

#10b=b<<1;

a=4'b1111;b=4'b0001;

#10b=b<<1;

#10b=b<<1;

#10b=b<<1;

end

endmodule

//74HC02代码-或非

//74HC02.v

moduleHC02(A,B,Y);

input[4:

1]A,B;

output[4:

1]Y;

assignY=~(A|B);

endmodule

//74HC02测试平台代码

//testbench.v

`timescale1ns/1ns

moduletestbench();

reg[4:

1]a,b;

wire[4:

1]y;

HC02u1(a,b,y);

initial

begin

a=4'b0000;b=4'b0001;

#10b=b<<1;

#10b=b<<1;

#10b=b<<1;

a=4'b1111;b=4'b0001;

#10b=b<<1;

#10b=b<<1;

#10b=b<<1;

end

endmodule

 

//74HC04代码-非

//74HC04.v

moduleHC04(A,Y);

input[4:

1]A;

output[4:

1]Y;

assignY=~A;

endmodule

//74HC04测试平台代码

//testbench.v

`timescale1ns/1ns

moduletestbench();

reg[2:

1]a;

wire[2:

1]y;

HC04u4(a,y);

initial

begin

a=2'b01;

#10a=2'b10;

#10a=2'b11;

#10a=2'b00;

end

endmodule

//74HC08代码-与

moduleHC08(A,B,Y);

input[4:

1]A,B;

output[4:

1]Y;

assignY=A&B;//与

endmodule

//74HC08测试平台代码

`timescale1ns/1ns

moduletest08();

reg[4:

1]a,b;

wire[4:

1]y;

HC08u8(a,b,y);

initial

begin

a=4'b0000;b=4'b0001;

#10b=b<<1;

#10b=b<<1;

#10b=b<<1;

#10

a=4'b1111;b=4'b0001;

#10b=b<<1;

#10b=b<<1;

#10b=b<<1;

end

endmodule

//74HC32代码-或

moduleHC32(A,B,Y);

input[4:

1]A,B;

output[4:

1]Y;

assignY=A|B;//或

endmodule

//74HC32测试平台代码

`timescale1ns/1ns

moduletest32();

reg[4:

1]a,b;

wire[4:

1]y;

HC32u32(a,b,y);

initial

begin

a=4'b0000;b=4'b0001;

#10b=b<<1;

#10b=b<<1;

#10b=b<<1;

#10

a=4'b1111;b=4'b0001;

#10b=b<<1;

#10b=b<<1;

#10b=b<<1;

end

endmodule

//74HC86代码-异或

moduleHC86(A,B,Y);

input[4:

1]A,B;

output[4:

1]Y;

assignY=A&(~B)|(~A&B);//异或

endmodule

//74HC86测试平台代码

`timescale1ns/1ns

moduletest86();

reg[4:

1]a,b;

wire[4:

1]y;

HC86u86(a,b,y);

initial

begin

a=4'b0000;b=4'b0001;

#10b=b<<1;

#10b=b<<1;

#10b=b<<1;

#10

a=4'b1111;b=4'b0001;

#10b=b<<1;

#10b=b<<1;

#10b=b<<1;

end

endmodule

2、第一次仿真结果(任选一个门,请注明,插入截图,下同)。

(将波形窗口背景设为白色,调整窗口至合适大小,使波形能完整显示,对窗口截图。

后面实验中的仿真使用相同方法处理)

3、综合结果(截图)。

(将相关窗口调至合适大小,使RTL图能完整显示,对窗口截图,后面实验中的综合使用相同方法处理)

4、第二次仿真结果(综合后)(截图)。

回答输出信号是否有延迟,延迟时间约为多少?

有延迟300ps

5、第三次仿真结果(布局布线后)(截图)。

回答输出信号是否有延迟,延迟时间约为多少?

分析是否有出现竞争冒险。

延迟约4000PS

有竞争冒险

2、组合逻辑电路

一、实验目的

1、了解基于Verilog的组合逻辑电路的设计及其验证。

2、熟悉利用EDA工具进行设计及仿真的流程。

3、学习针对实际组合逻辑电路芯片74HC148、74HC138、74HC153、74HC85、74HC283、74HC4511进行VerilogHDL设计的方法。

二、实验环境

Libero仿真软件。

三、实验内容

1、掌握Libero软件的使用方法。

2、进行针对74系列基本组合逻辑电路的设计,并完成相应的仿真实验。

3、参考教材中相应章节的设计代码、测试平台代码(可自行编程),完成74HC148、74HC138、74HC153、74HC85、74HC283、74HC4511相应的设计、综合及仿真。

4、74HC85测试平台的测试数据要求:

进行比较的A、B两数,分别为本人学号的末两位,如“89”,则A数为“1000”,B数为“1001”。

若两数相等,需考虑级联输入(级联输入的各种取值情况均需包括);若两数不等,则需增加一对取值情况,验证A、B相等时的比较结果。

5、74HC4511设计成扩展型的,即能显示数字0~9、字母a~f。

6、提交针对74HC148、74HC138、74HC153、74HC85、74HC283、74HC4511(任选一个)的综合结果,以及相应的仿真结果。

 

四、实验结果和数据处理

1、所有模块及测试平台代码清单

//74HC148代码

//HC148.v

moduleencoder8_3_1(DataIn,EO,Dataout,EI,GS);

input[7:

0]DataIn;

inputEI;

outputEO;

output[2:

0]Dataout;

outputGS;

reg[2:

0]Dataout;

regEO;

regGS;

integerI;

always@(DataInorEI)

begin

if(EI)

begin

Dataout=7;

EO=1;

GS=1;

end

elseif(DataIn==8'b11111111)

begin

Dataout=7;

EO=0;

GS=1;

end

else

for(I=0;I<8;I=I+1)

begin

if(~DataIn[I])

begin

Dataout=-1;

EO=1;

GS=0;

end

end

end

endmodule

//74HC148测试平台代码

`timescale1ns/1ns

moduletestbench;

reg[7:

0]in;

regEI;

wireGS;

wire[2:

0]out;

wireEO;

initial

begin

EI=0;

in='b00000001;

repeat(9)

#20in=in<<1;

//每循环1次,in左移1位,如0000001将移动为0000010

end

encoder8_3_1testbench_8_3encoder(in,EO,out,EI,GS);

endmodule

//74HC138代码

//74HC138测试平台代码

 

//74HC153代码

//74HC153测试平台代码

 

//74HC85代码

//74HC85测试平台代码

 

//74HC283代码

//74HC283测试平台代码

 

//74HC4511代码

//74HC4511.v

moduleHC4511(A,Seg,LT_N,BI_N,LE,DIG4);

inputLT_N,BI_N,LE;

input[3:

0]A;

output[7:

0]Seg;

outputDIG4;

reg[7:

0]SM_8S;

assignSeg=SM_8S;

assignDIG4=0;

always@(AorLT_NorBI_NorLE)

begin

if(!

LT_N)SM_8S=8'b11111111;//根据4511真值表写出

elseif(!

BI_N)SM_8S=8'b00000000;

elseif(LE)SM_8S=SM_8S;

else

case(A)

4'd0:

SM_8S=8'b00111111;//3f

4'd1:

SM_8S=8'b00000110;//06

4'd2:

SM_8S=8'b01011011;//5b

4'd3:

SM_8S=8'b01001111;//4f

4'd4:

SM_8S=8'b01100110;//66

4'd5:

SM_8S=8'b01101101;//6d

4'd6:

SM_8S=8'b01111101;//7d

4'd7:

SM_8S=8'b00000111;//07

4'd8:

SM_8S=8'b01111111;//7f

4'd9:

SM_8S=8'b01101111;//6f

4'd10:

SM_8S=8'b01110111;//77

4'd11:

SM_8S=8'b01111100;//7c

4'd12:

SM_8S=8'b00111001;//39

4'd13:

SM_8S=8'b01011110;//5e

4'd14:

SM_8S=8'b01111001;//79

4'd15:

SM_8S=8'b01110001;//71

default:

;

endcase

end

endmodule

//74HC4511测试平台代码

`timescale1ns/10ps

moduletestbench;

rega,b,c;

reg[3:

0]in;

reg[7:

0]out;

HC4511decoder(LT_N,BI_N,LE,A,Seg);

initial

begin

in=0;

repeat(14)

#20in=$random;

end

initial

begin

a=0;b=0;c=0;

#40c=1;

#40b=1;

#40c=0;

#40a=1;

#40b=0;

#40c=1;

#40b=1;

end

endmodule

 

2、第一次仿真结果(任选一个模块,请注明)

74HC148

3、综合结果

4、第二次仿真结果(综合后)。

回答输出信号是否有延迟,延迟时间约为多少?

延迟为500ps

5、第三次仿真结果(布局布线后)。

回答输出信号是否有延迟,延迟时间约为多少?

分析是否有出现竞争冒险。

延迟为7700ps

有竞争冒险

3、时序逻辑电路

一、实验目的

1、了解基于Verilog的时序逻辑电路的设计及其验证。

2、熟悉利用EDA工具进行设计及仿真的流程。

3、学习针对实际时序逻辑电路芯片74HC74、74HC112、74HC194、74HC161进行VerilogHDL设计的方法。

二、实验环境

Libero仿真软件。

三、实验内容

1、熟练掌握Libero软件的使用方法。

2、进行针对74系列时序逻辑电路的设计,并完成相应的仿真实验。

3、参考教材中相应章节的设计代码、测试平台代码(可自行编程),完成74HC74、74HC112、74HC161、74HC194相应的设计、综合及仿真。

4、提交针对74HC74、74HC112、74HC161、74HC194(任选一个)的综合结果,以及相应的仿真结果。

四、实验结果和数据处理

1、所有模块及测试平台代码清单

四、实验结果和数据处理

1、所有模块及测试平台代码清单

//74HC74代码

moduleHC74(Q1,Q2,D1,D2,Clk1,Clk2,Rst1,Rst2,Set1,Set2);

inputD1,D2,Clk1,Clk2,Rst1,Rst2,Set1,Set2;

outputQ1,Q2;

regQ1,Q2;

always@(posedgeClk1ornegedgeRst1ornegedgeSet1)

begin

if(!

Rst1&&Set1)

Q1<=0;

elseif(Set1&&Rst1)

Q1<=D1;

elseQ1<=1;

end

always@(posedgeClk2ornegedgeRst2ornegedgeSet2)

begin

if(!

Rst2&&Set2)

Q2<=0;

elseif(Set2&&Rst2)

Q2<=D2;

elseQ2<=1;

end

endmodule

//74HC74测试平台代码

`timescale1ns/1ns

moduletestHC74;

regD1,D2,Clk1,Clk2,Rst1,Rst2,Set1,Set2;

wireQ1,Q2;

HC74u74(Q1,Q2,D1,D2,Clk1,Clk2,Rst1,Rst2,Set1,Set2);

parameterclock_period=20;

always#(clock_period/2)Clk1=~Clk1;

always#(clock_period/2)Clk2=~Clk2;

initial

begin

D1=0;

D2=0;

Clk1=0;

Clk2=1;

repeat(20)

begin

#20;

D1=$random;

D2=$random;

end

end

initial

begin

Rst1=0;

Rst2=0;

Set2=0;

Set1=0;

repeat(20)

begin

#20;

Rst1=$random;

Rst2=$random;

Set1=$random;

Set2=$random;

end

end

endmodule

//74HC112代码

moduleHC112(SD,RD,CLK,J,K,Q,NQ);

inputSD,RD,CLK,J,K;

outputQ,NQ;

regQ;

assignNQ=~Q;

always@(SDorRDorJorK)

if(~SD&&RD)

Q=1;

elseif(SD&&~RD)

Q=0;

elseif(~SD&&~RD)

Q=1;

always@(negedgeCLK)

if(SD&&RD)

if(~J&&~K)

Q=Q;

elseif(~J&&K)

Q=0;

elseif(J&&~K)

Q=1;

else

Q=~Q;

endmodule

//74HC112测试平台代码

`timescale1ns/1ns

moduletest74HC112;

regSD,RD,CLK,J,K;

wireQ,NQ;

parameterclock=20;

HC112(SD,RD,CLK,J,K,Q,NQ);

initial

begin

CLK=0;

#400$finish;

end

always#(clock/2)CLK=~CLK;

initial

begin

SD<=0;RD<=1;J<=0;K<=0;

#10SD<=1;RD<=0;J<=1;

#10SD<=0;RD<=0;K<=1;

#10SD<=1;RD<=1;J<=0;K<=0;

#10K<=1;

#10J<=1;

#10K<=0;

end

endmodule

//74HC161代码

moduleHC161(CP,CEP,CET,MRN,PEN,Dn,Qn,TC);

inputCP;

inputCEP,CET;

output[3:

0]Qn;

inputMRN,PEN;

input[3:

0]Dn;

outputTC;

reg[3:

0]qaux;

regTC;

always@(posedgeCP)

begin

if(!

MRN)

qaux<=4'b0000;

elseif(!

PEN)

qaux<=Dn;

elseif(CEP&CET)

qaux<=qaux+1;

else

qaux<=qaux;

end

always@(posedgeCP)

begin

if(qaux==4'b1111)

TC=1'b1;

else

TC=1'b0;

end

assignQn=qaux;

endmodule

//74HC161测试平台代码

`timescale1ns/10ps

moduletest74HC161;

regcp,cep,cet,mr,pe;

reg[3:

0]dn;

wire[3:

0]qn;

wiretc;

parameterclock=20;

always#(clock/2)cp=~cp;

HC161u1(cp,cep,cet,mr,pe,dn,qn,tc);

initial

begin

cp<=0;

mr<=0;

pe<=0;

cet<=1;

cep<=1;

#10mr=1;

#10dn=$random;

#20pe=1;

repeat(3)

#10dn=$random;

#10cet=0;

repeat

(2)

#10dn=$random;

#5cet=1;

#5cep=0;

repeat

(2)

#10dn=$random;

end

initial

#400$finish;

endmodule

//74HC194代码

moduleHC194(MR,S1,S0,CP,DSR,DSL,D,Q);

inputMR,S1,S0,CP,DSR,DSL;

input[3:

0]D;

output[3:

0]Q;

reg[3:

0]Qaux;

always@(MR)

if(~MR)Qaux=0;

always@(S1orS0)

if(~S1&&~S0)Qaux=Q;

always@(posedgeCP)

if(~S1&&S0)Qaux={Qaux[2:

0],DSR};

elseif(S1&&~S0)Qaux={DSL,Qaux[3:

1]};

elseif(S1&&S0)Qaux=D;

assignQ=Qaux;

endmodule

//74HC194测试平台代码

`timescale1ns/1ns

moduletest74HC194;

regMR,S1,S0,CP,DSR,DSL;

reg[3:

0]D;

wire[3:

0]Q;

parameterclock=20;

HC194u(MR,S1,S0,CP,DSR,DSL,D,Q);

initial

begin

CP=0;

#400$finish;

end

always#(clock/2)

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

当前位置:首页 > 自然科学

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

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