基于Libero的数字逻辑设计仿真及验证实验报告书.docx
《基于Libero的数字逻辑设计仿真及验证实验报告书.docx》由会员分享,可在线阅读,更多相关《基于Libero的数字逻辑设计仿真及验证实验报告书.docx(73页珍藏版)》请在冰豆网上搜索。
基于Libero的数字逻辑设计仿真及验证实验报告书
实验题目_________基于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;
#10
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测试平台代码
`timescale1ns/1ns
moduletest02();
reg[4:
1]a,b;
wire[4:
1]y;
HC02u2(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
//74HC04代码-非
moduleHC04(A,Y);
input[6:
1]A;
output[6:
1]Y;
assignY=~A;//非
endmodule
//74HC04测试平台代码
`timescale1ns/1ns
moduletest04();
reg[6:
1]a;
wire[6:
1]y;
HC04u4(a,y);
initial
begin
a=6'b000001;
#10b=b<<1;
#10b=b<<1;
#10b=b<<1;
#10b=b<<1;
#10b=b<<1;
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、第一次仿真结果(任选一个门,请注明,插入截图,下同)。
(将波形窗口背景设为白色,调整窗口至合适大小,使波形能完整显示,对窗口截图。
后面实验中的仿真使用相同方法处理)
截图如下:
74HC02的截图如下
3、综合结果(截图)。
(将相关窗口调至合适大小,使RTL图能完整显示,对窗口截图,后面实验中的综合使用相同方法处理)
截图如下:
74HC02的截图如下:
4、第二次仿真结果(综合后)(截图)。
回答输出信号是否有延迟,延迟时间约为多少?
答:
延迟约为0.3ns
截图如下:
延迟时间为300ps。
5、第三次仿真结果(布局布线后)(截图)。
回答输出信号是否有延迟,延迟时间约为多少?
分析是否有出现竞争冒险。
截图如下:
答:
延迟时间为4900ps。
由于信号输出经过或门和与门两个门电路,所以输入信号改变时,会有输出延迟,出现了竞争冒险。
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代码
module HC148(DataIn,EO,Dataout);
input [7:
0] DataIn;
output EO;
output [2:
0] Dataout;
reg [2:
0] Dataout;
reg EO;
integer I;
always @(DataIn)
begin
Dataout=0;
EO=1;
for(I=0;I<8;I=I+1)
begin
if(DataIn[I])
begin
Dataout=I;
EO=0;
end
end
end
endmodule
//74HC148测试平台代码
// test148.v
`timescale 1ns/1ns
module test148;
reg [7:
0] in;
wire [2:
0] out;
wire EO;
initial
begin
in=00000001;
repeat(9)
#20 in=in<<1;
end
HC148 u148(in,EO,out);
endmodule
//74HC138代码
//HC138.v
module HC138(A,B,C,G1,G2AN,G2BN,Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0);
input A,B,C;
input G1,G2AN,G2BN;
output Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0;
wire Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0;
reg [7:
0] Eq;
wire [7:
0] EqN;
wire [2:
0]DataIn;
assign EqN=~Eq;
assign DataIn[0]=A;
assign DataIn[1]=B;
assign DataIn[2]=C;
always @(DataIn or G1 or G2AN or G2BN)
begin
if(!
G1)
Eq=8'b11111111;
else if(!
(G2AN&G2BN)) Eq=8'b11111111;
else
Eq=1'b1<end
assign Y0=EqN[0];
assign Y1=EqN[1];
assign Y2=EqN[2];
assign Y3=EqN[3];
assign Y4=EqN[4];
assign Y5=EqN[5];
assign Y6=EqN[6];
assign Y7=EqN[7];
endmodule
//74HC138测试平台代码
// test138.v
`timescale 1ns/10ps
module test138;
reg A,B,C;
reg G1,G2AN,G2BN;
wire Y0,Y1,Y2,Y3,Y4,Y5,Y6,Y7;
initial
begin
A=0;
repeat(20)
#20 A=$random;
end
initial
begin
B=0;
repeat(20)
#20 B=$random;
end
initial
begin
C=0;
repeat(20)
#20 C=$random;
end
initial
begin
G1=0;
#40 G1=1;
end
initial
begin
G2AN=0;
#25 G2AN=1;
end
initial
begin
G2BN=0;
#45 G2BN=1;
end
HC138 u138
(
.A (A),
.B (B),
.C (C),
.G1 (G1),
.G2AN (G2AN),
.G2BN (G2BN),
.Y0 (Y0),
.Y1 (Y1),
.Y2 (Y2),
.Y3 (Y3),
.Y4 (Y4),
.Y5 (Y5),
.Y6 (Y6),
.Y7 (Y7)
);
endmodule
//74HC153代码
//HC153.v
module HC153(C0,C1,C2,C3,A,B,Y
G);
input C0,C1,C2,C3,A,B,G;
output Y;
reg Y;
always @(C0 or C1 or C2 or C3 or A or B)
begin
if(G) Y=0;
else
case({A,B})
0:
Y=C0;
1:
Y=C1;
2:
Y=C2;
3:
Y=C3;
default:
Y=1'bx;
endcase
end
endmodule
//74HC153测试平台代码
// test153.v
`timescale 1ns/1ns
module test153;
reg C0,C1,C2,C3;
reg A,B,G;
wire Y;
initial
begin
G=1;
repeat(20)
#20 G=0;
end
initial
begin
A=0;
repeat(20)
#20 A=$random;
end
initial
begin
B=0;
repeat(20)
#20 B=$random;
end
initial
begin
C0=0;
repeat(20)
#20 C0=$random;
end
initial
begin
C1=0;
repeat(20)
#20 C1=$random;
end
initial
begin
C2=0;
repeat(20)
#20 C2=$random;
end
initial
begin
C3=0;
repeat(20)
#20 C3=$random;
end
HC153 u153
(
.C0 (C0),
.C1 (C1),
.C2 (C2),
.C3 (C3),
.G (G),
.A (A),
.B (B),
.Y (Y)
);
endmodule
//74HC85代码
//HC85.v
module HC85(A3,A2,A1,A0,B3,B2,B1,B0,QAGB,QASB,QAEB,IAGB,IASB,IAEB);
input A3,A2,A1,A0,B3,B2,B1,B0,IAGB,IASB,IAEB;
output QAGB,QASB,QAEB;
reg QAGB,QASB,QAEB;
wire [3:
0]DataA,DataB;
assign DataA[0]=A0;
assign DataA[1]=A1;
assign DataA[2]=A2;
assign DataA[3]=A3;
assign DataB[0]=B0;
assign DataB[1]=B1;
assign DataB[2]=B2;
assign DataB[3]=B3;
always @(DataA or DataB)
begin
if(DataA>DataB)
begin
QAGB=1;QASB=0;QAEB=0;
end
else if(DataAbegin
QASB=1;QAGB=0;QAEB=0;
end
else if(IAGB&!
IASB&!
IAEB)
begin
QAGB=1;QASB=0;QAEB=0;
end
else if(!
IAGB&IASB&!
IAEB)
begin
QASB=1;QAGB=0;QAEB=0;
end
else if(IAEB)
begin
QAEB=1;QASB=0;QAGB=0;
end
begin
if(DataA==DataB)
if(IAGB&IASB&!
IAEB)
begin QAGB=0;QASB=0;QAEB=0;end
if(!
IAGB&!
IASB&!
IAEB)
begin QAGB=1;QASB=1;QAEB=0;end
end
end
endmodule
//74HC85测试平台代码
// test85.v
`timescale 1ns/1ns
module test85;
reg A3,A2,A1,A0,B3,B2,B1,B0;
reg IAGB,IASB,IAEB;
wire QAGB,QASB,QAEB;
initial
begin
A3=0;
repeat(20)
#20 A3=$random;
end
initial
begin
A2=0;
repeat(20)
#20 A2=$random;
end
initial
begin
A1=0;
repeat(20)
#20 A1=$random;
end
initial
begin
A0=0;
repeat(20)
#20 A0=$random;
end
initial
begin
B3=0;
repeat(20)
#20 B3=$random;
end
initial
begin
B2=0;
repeat(20)
#20 B2=$random;
end
initial
begin
B1=0;
repeat(20)
#20 B1=$random;
end
initial
begin
B0=0;
repeat(20)
#20 B0=$random;
end
initial
begin
IAGB=0;
repeat(10)
#40 IAGB=$random;
end
initial
begin
IASB=0;
repeat(10)
#40 IASB=$random;
end
initial
begin
IAEB=0;
repeat(10)
#40 IAEB=$random;
end
HC85 u85
(
.A3 (A3),
.A2 (A2),
.A1 (A1),
.A0 (A0),
.B3 (B3),
.B2 (B2),
.B1 (B1),
.B0 (B0),
.IAGB (IAGB),
.IASB (IASB),
.IAEB (IAEB),
.QAGB (QAGB),
.QASB (QASB),
.QAEB (QAEB)
);
Endmodule
//74HC283代码
//HC283.v
module HC283(A3,A2,A1,A0,B3,B2,B1,B0,Sigma3,Sigma2,Sigma1,Sigma0,C0,C4);
input A3,A2,A1,A0,B3,B2,B1,B0;
input C0;
output Sigma3,Sigma2,Sigma1,Sigma0;
output C4;
reg C4;
reg[3:
0]Sigma;
wire[3:
0]DataA,DataB;
assign DataA[0]=A0;
assign DataA[1]=A1;
assign DataA[2]=A2;
assign DataA[3]=A3;
assign DataB[0]=B0;
assign DataB[1]=B1;
assign DataB[2]=B2;
assign DataB[3]=B3;
always @(DataA or DataB or C0)
begin
{C4,Sigma}=DataA+DataB+C0;
end
assign Sigma0= Sigma[0];
assign Sigma1= Sigma[1];
assign Sigma2= Sigma[2];
assign Sigma3= Sigma[3];
endmodule
//74HC283测试平台代码
// test283.v
`timescale 1ns/10ps
module test283;
reg A3,A2,A1,A0,B3,B2,B1,B0;
reg C0;
wire Sigma3,Sigma2,Sigma1,Sigma0;
wire C4;
initial
begin
A3=0;
repeat(20)
#20 A3=$random;
end
initial
begin
A2=0;
repeat(20)
#20 A2=$random;
end
initial
begin
A1=0;
repeat(20)
#20 A1=$random;
end
initial
begin
A0=0;
repeat(20)
#20 A0=$random;
end
initial
begin
B3=0;
repeat(20)
#20 B3=$random;
end
initial
begin
B2=0;
repeat(20)
#20 B2=$random;
end
initial
begin
B1=0;
repeat(20)
#20 B1=$random;
end
initial
begin
B0=0;
repeat(20)
#20 B0=$random;
end
initial
begin
C0=0;
repeat(20)
#20 C0=$random;
end
HC283 u283
(
.A3 (A3),
.A2 (A2),
.A1 (A1),
.A0 (A0),
.B3 (B3),
.B2 (B2),
.B1 (B1),
.B0 (B0),
.Sigma3 (Sigma3),
.Sigma2 (S