资源描述
___计算机__学院计科专业2班________组、学号3115004949
姓名 朱远鹏 协作者______________ 教师评定_________________
实验题目_________基于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
module HC00(A,B,Y);
input [4:1] A,B;
output [4:1] Y;
assign Y = ~(A&B);
endmodule
//74HC00测试平台代码
//test_00.v
`timescale 1ns/1ns
module testbench();
reg [4:1] a,b;
wire [4:1] y;
HC00 ul(a,b,y);
initial
begin
a=4'b0000; b=4'b0001;
#10 b=b<<1;
#10 b=b<<1;
#10 b=b<<1;
a=4'b1111; b=4'b0001;
#10 b=b<<1;
#10 b=b<<1;
#10 b=b<<1;
end
endmodule
//74HC02代码-或非
//74HC02.v
module HC02(A,B,Y);
input [3:0] A,B;
output [3:0] Y;
assign Y = ~(A|B);
endmodule
//74HC02测试平台代码
// test_02.v
`timescale 1ns/1ns
module test_02;
reg [3:0] a,b,c;
wire [3:0] y;
HC02 u(a, b, y);
initial
begin
a = 4'b1111;c = 4'b0001;
b = ~c;c = c<<1;
#10 b = ~c;c = c<<1;
#10 b = ~c;c = c<<1;
#10 b = ~c;
a = 4'b0000;c = 4'b0001;
b = ~c;c = c<<1;
#10 b = ~c;c = c<<1;
#10 b = ~c;c = c<<1;
#10 b = ~c;
end
endmodule
//74HC04代码-非
// 74HC04.v
module HC04(A, Y);
input [3:0] A;
output [3:0]Y;
assign Y = ~A;
endmodule
//74HC04测试平台代码
// test_04.v
`timescale 1ns/1ns
module test_04;
reg [3:0] a;
wire [3:0] y;
HC04 u (a, y);
initial
begin
a = 4'b0001;
#10 a = a<<1;
#10 a = a<<1;
#10 a = a<<1;
end
endmodule
//74HC08代码-与
// 74HC08.v
module HC08(A, B, Y);
input [3:0] A, B;
output [3:0]Y;
assign Y = A&B;
endmodule
//74HC08测试平台代码
// test_08.v
`timescale 1ns/1ns module test_08;
reg [3:0] a,b;
wire [3:0] y;
HC00 u(a, b, y);
initial
begin
a = 4'b0000;b = 4'b0001;
#10 b = b<<1;
#10 b = b<<1;
#10 b = b<<1;
a = 4'b1111;b = 4'b0001;
#10 b = b<<1;
#10 b = b<<1;
#10 b = b<<1;
end
endmodule
//74HC32代码-或
//74HC32.v
module HC32(A, B, Y);
input [3:0] A, B;
output [3:0]Y;
assign Y = A|B;
endmodule
//74HC32测试平台代码
// test_32.v
`timescale 1ns/1ns
module test_32;
reg [3:0] a,b,c;
wire [3:0] y;
HC02 u(a, b, y);
initial
begin
a = 4'b1111;c = 4'b0001; b = ~c;
c = c<<1;
#10 b = ~c;c = c<<1;
#10 b = ~c;c = c<<1;
#10 b = ~c;
a = 4'b0000;c = 4'b0001;b = ~c;
c = c<<1;
#10 b = ~c;c = c<<1;
#10 b = ~c;c = c<<1;
#10 b = ~c;
end
endmodule
//74HC86代码-异或
//74HC86.v
module HC86(A, B, Y);
input [3:0] A, B;
output [3:0]Y;
assign Y = A^B;
endmodule
//74HC86测试平台代码
// test_86.v
`timescale 1ns/1ns
module test_86;
reg [3:0] a, b;
wire [3:0] y;
HC86 u (a, b, y);
initial
begin
a = 4'b0000;b = 4'b0001;
#10 b = b<<1;
#10 b = b<<1;
#10 b = b<<1;
#10 a = 4'b1111;b = 4'b0001;
#10 b = b<<1;
#10 b = b<<1;
#10 b = b<<1;
end
endmodule
实验数据:74HC00
2、第一次仿真结果
3、 综合结果
4、 第二次仿真结果(综合后)。回答输出信号是否有延迟,延迟时间约为多少?
输出信号有延时,延时约为300ps
5、第三次仿真结果(布局布线后)。回答输出信号是否有延迟,延迟时间约为多少?分析是否有出现竞争冒险。
延时约为3200ps,存在竞争冒险
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(EI,I,A,GS,EO);
input EI;
input [7:0]I;
output [2:0]A;
output GS,EO;
reg [2:0]A;
reg GS,EO;
integer j;
always @ (EI,I)
begin
if(EI)
begin
{A,GS,EO}=5'b11111;
end
else if(I==8'b11111111)
begin
{A,GS,EO}=5'b11110;
end
else
for(j=0;j<8;j=j+1)
begin
if(~I[j])
begin
A=~j;
GS=0;
EO=1;
end
end
end
endmodule
//74HC148测试平台代码
`timescale 1ns/1ns
module test_HC148;
reg ei;
reg [7:0]i;
wire [2:0]a;
wire gs,eo;
HC148 u1(ei,i,a,gs,eo);
initial
begin
ei=1;
#20 ei=0; i=8'b11111111;
#20 i=8'b11111110;
#20 i=8'b11111101;
#20 i=8'b11111011;
#20 i=8'b11110111;
#20 i=8'b11101111;
#20 i=8'b11011111;
#20 i=8'b10111111;
#20 i=8'b01111111;
end endmodule
//74HC138代码
module HC138(E1,E2,E3,A,Y);
input E1,E2,E3;
input [2:0] A;
output [7:0] Y;
reg [7:0] Y;
integer I;
always@(E1,E2,E3,A)
begin
if(E1==1||E2==1||E3==0)
Y=8'b11111111;
else
Y=1'b1<<A;
end
endmodule
//74HC138测试平台代码
module test_HC138;
reg e1,e2,e3;
reg [2:0]a;
wire [7:0]y;
HC138 u2(e1,e2,e3,a,y);
initial
begin
a=0;
repeat(20)
#20 a=$random;
end
initial
begin
e1=1;
#10 e2=1;
#10 e3=0;
#10 e1=0;
#10 e2=0;
#10 e3=1;
end
endmodule
//74HC153代码
module HC153(S,I1,I2,E1,E2,Y1,Y2);
input [1:0] S;
input [3:0] I1;
input [3:0] I2;
input E1,E2;
output Y1,Y2;
reg Y1,Y2;
always@(S,I1,I2,E1,E2)
begin
if(E1) Y1=0;
else Y1=I1[S];
if(E2) Y2=0;
else Y2=I2[S];
end endmodule
//74HC153测试平台代码
module test_HC153;
reg [1:0] s;
reg[3:0] i1;
reg[3:0] i2;
reg e1,e2;
wire y1,y2;
HC153 u3(s,i1,i2,e1,e2,y1,y2);
initial
begin
e1=1;
e2=1;
#15 e1=0;e2=0;
end
initial
begin
s=0; i1=0; i2=0;
#10 i1=4'b1001; i2=4'b1100;
#10 s=1;
#10 s=2;
#10 s=3;
end
endmodule
//74HC85代码
module HC85(A,B,I,Q);
input [3:0] A,B;
input [2:0] I;
output [2:0] Q;
reg [2:0] Q;
always@(A,B)
begin
if(A>B)
Q=3'b100;
else if(A<B)
Q=3'b001;
else if(I[1]==1)
Q=3'b010;
else if(I==3'b101)
Q=3'b000;
else if(I==0)
Q=3'b101;
else
Q=I;
end
endmodule
//74HC85测试平台代码
module test_HC85;
reg [3:0]a,b;
reg [2:0]i;
wire [2:0]q;
HC85 u4(a,b,i,q);
initial
begin
i=0;
repeat(4)
#10 i=$random;
end
initial
begin
a=3;b=1;
#10 a=1;b=4;
#10 a=0;b=0;
#10 a=6;b=1;
#10 a=5;b=9;
end
endmodule
//74HC283代码
module HC283(CIN,A,B,COUT,S);
input CIN;
input [3:0] A,B;
output COUT;
output [3:0] S;
reg COUT;
reg [3:0] S;
always@(CIN,A,B)
begin
{COUT,S}=CIN+A+B;
end
endmodule
//74HC283测试平台代码
module test_HC283;
reg cin;
reg [3:0] a,b;
wire cout;
wire [3:0] s;
HC283 u5(cin,a,b,cout,s);
initial
begin
cin=0;
repeat(20)
#15 cin=$random;
end
initial
begin
a=0;
repeat(20)
#10 a=$random;
end
initial
begin
b=0;
repeat(20)
#10 b=$random;
end
endmodule
//74HC4511代码
module HC4511(LE,BI,LT,A,Y);
input LE,BI,LT;
input [3:0] A;
output [6:0] Y;
reg [6:0] Y;
always@(LE,BI,LT,A)
begin
if(!LT)
Y=7'b1111111;
else if(!BI)
Y=0;
else if(LE)
Y=Y;
else
case (A)
4'd0:Y=7'b1111110;//数字按abcdefg顺序
4'd1:Y=7'b0110000;
4'd2:Y=7'b1101101;
4'd3:Y=7'b1111001;
4'd4:Y=7'b0110011;
4'd5:Y=7'b1011011;
4'd6:Y=7'b1011111;
4'd7:Y=7'b1110000;
4'd8:Y=7'b1111111;
4'd9:Y=7'b1111011;
4'd10:Y=7'b1110111;
4'd11:Y=7'b0011111;
4'd12:Y=7'b1001110;
4'd13:Y=7'b0111101;
4'd14:Y=7'b1001111;
4'd15:Y=7'b1000111;
default:;
sendcase
end
endmodule
//74HC4511测试平台代码
module test_HC4511;
reg le,bi,lt;
reg [3:0] a;
wire [6:0] y;
HC4511 u6(le,bi,lt,a,y);
initial
begin
lt=0;
#10 lt=1; bi=0;
#10 bi=1; le=1;
#10 le=0;
end
initial
begin
a=0;
repeat(30)
#20 a=$random;
end
endmodule
2、 第一次仿真结果(74HC148)
3、 综合结果
4、第二次仿真结果(综合后)。回答输出信号是否有延迟,延迟时间约为多少?
有延迟,延迟时间约为300秒
5、第三次仿真结果(布局布线后)。回答输出信号是否有延迟,延迟时间约为多少?分析是否有出现竞争冒险。
有延迟,延迟时间约为4000ps,有竞争冒险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、所有模块及测试平台代码清单
//74HC74代码
module HC74(S1,S2,R1,R2,CLK1,CLK2,D1,D2,Q1,QF1,Q2,QF2);
input S1,S2,R1,R2,CLK1,CLK2,D1,D2;
output Q1,QF1,Q2,QF2;
reg Q1,QF1,Q2,QF2;
always@(posedge CLK1)
begin
if(!S1&&R1)
begin
Q1<=1;QF1<=0;
end
else if(S1&&!R1)
begin
Q1<=0;QF1<=1;
end
else if(!S1&&!R1)
begin
Q1<=1;QF1<=1;
end
else
begin
Q1<=D1;QF1<=!D1;
end
end
always@(posedge CLK2)
begin
if(!S2&&R2)
begin
Q2<=1;QF2<=0;
end
else if(S1&&!R1)
begin
Q2<=0;QF2<=1;
end
else if(!S1&&!R1)
begin
Q2<=1;QF2<=1;
end
else
begin
Q2<=D2;QF2<=!D2;
end
end
endmodule
//74HC74测试平台代码
`timescale 1ns/1ns module test_HC74;
reg s1,s2,r1,r2,clk1,clk2,d1,d2;
wire q1,qf1,q2,qf2;
HC74 u1(s1,s2,r1,r2,clk1,clk2,d1,d2,q1,qf1,q2,qf2);
initial
begin
clk1=0;
#400 $finish;
end
always
#10 clk1=~clk1;
initial
begin
clk2=0;
end
always
#10 clk2=~clk2;
initial
begin
s1=0;
repeat(20)
#20 s1=$random;
end
initial
begin
s2=0;
repeat(20)
#20 s2=$random;
end
initial
begin
r1=1;
repeat(20)
#20 r1=$random;
end
initial
begin
r2=1;
repeat(20)
#20 r2=$random;
end
initial
begin
d1=0;
repeat(20)
#20 d1=$random;
end
initial
begin
d2=0;
repeat(20)
#20 d2=$random;
end
endmodule
//74HC112代码
module HC112(S1,S2,,R1,R2,CLK1,CLK2,J1,J2,K1,K2,Q1,QF1,Q2,QF2);
input S1,S2,R1,R2,CLK1,CLK2,J1,J2,K1,K2;
output Q1,QF1,Q2,QF2;
reg Q1,Q2;
assign QF1=~Q1;
assign QF2=~Q2;
always@(negedge CLK1,negedge S1,negedge R1)
begin
if(!S1&&R1)
Q1<=1;
else if(S1&&!R1)
Q1<=0;
else if(!S1&&!R1)
Q1<=1;
else
case({J1,K1})
2'b00:Q1<=Q1;
2'b01:Q1<=0;
2'b10:Q1<=1;
2'b11:Q1<=~Q1;
endcase
end
always@(negedge CLK2,negedge S2,negedge R2)
begin
if(!S2&&R2)
Q2<=1;
else if(S2&&!R2)
Q2<=0;
else if(!S2&&!R2)
Q2<=1;
else
case({J2,K2})
2'b00:Q2<=Q2;
2'b01:Q2<=0;
2'b10:Q2<=1;
2'b11:Q2<=~Q2;
endcase
end
endmodule
//74HC112测试平台代码
`timescale 1ns/1ns module test_HC112;
reg s1,s2,r1,r2,clk1,clk2,j1,j2,k1,k2;
wire q1,qf1,q2,qf2;
HC112 u1(s1,s2,r1,r2,clk1,clk2,j1,j2,k1,k2,q1,qf1,q2,qf2);
initial
begin
clk1=0;
end
always
#10 clk1=~clk1;
initial
begin
s1=0;
repeat(20)
#20 s1=$random;
end
initial
begin
r1=0;
repeat(20)
#20 r1=$random;
end
initial
begin
j1=0;
repeat(20)
#20 j1=$random;
end
initial
begin
k1=0;
repeat(20)
#20 k1=$random;
end
initial
begin
clk2=0;
end
always
#10 clk2=~clk2;
initial
begin
s2=0;
repeat(20)
s2=$random;
end
initial
begin
r2=0;
repeat(20)
#20 r2=$random;
end
initial
begin
j2=0;
repeat(20)
#20 j2=$
展开阅读全文