基于Libero的数字逻辑设计仿真及验证实验实验报告.docx

上传人:b****3 文档编号:4086932 上传时间:2022-11-27 格式:DOCX 页数:49 大小:1MB
下载 相关 举报
基于Libero的数字逻辑设计仿真及验证实验实验报告.docx_第1页
第1页 / 共49页
基于Libero的数字逻辑设计仿真及验证实验实验报告.docx_第2页
第2页 / 共49页
基于Libero的数字逻辑设计仿真及验证实验实验报告.docx_第3页
第3页 / 共49页
基于Libero的数字逻辑设计仿真及验证实验实验报告.docx_第4页
第4页 / 共49页
基于Libero的数字逻辑设计仿真及验证实验实验报告.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

基于Libero的数字逻辑设计仿真及验证实验实验报告.docx

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

基于Libero的数字逻辑设计仿真及验证实验实验报告.docx

基于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、提交针对基本门电路的综合结果,以及相应的仿真结果。

四、实验结果和数据处理

1、门电路模块及测试平台代码清单

注:

文件命名要求。

工程(project)名要求:

学号末4位+下划线+BasGate,例如陈静(3212005896)的工程名为“5896_BasGate”。

设计代码文件名1:

要求同上,即“5896_BasGate.v”。

测试平台文件名:

自己定义。

(1)//模块一:

2输入与门、或门、与非、或非、异或门各一,输入信号(1位A,1位B),输出信号(Y1,Y2,Y3,Y4,Y5)

modulegates_1(A,B,Y1,Y2,Y3,Y4,Y5);

inputA,B;

outputY1,Y2,Y3,Y4,Y5;

assignY1=A&B;

assignY2=A|B;

assignY3=~(A&B);

assignY4=~(A|B);

assignY5=A^B;

endmodule

(2)//模块二:

6个非门(同74HC04)

modulegates_2(A,Y);

input[1:

6]A;

output[1:

6]Y;

assignY=~A;

endmodule

(3)测试平台代码

`timescale1ns/1ns

moduletestgates_1();

regA,B;

wireY1,Y2,Y3,Y4,Y5;

gates_1v1(A,B,Y1,Y2,Y3,Y4,Y5);

initial

begin

A=0;B=0;

#10B=1;

#10A=1;

#10B=0;

#10;

end

endmodule

moduletestgates_2();

reg[1:

6]A;

wire[1:

6]Y;

gates_2v2(A,Y);

initial

begin

A=000001;

#10A=A<<1;

#10A=A<<1;

#10A=A<<1;

#10A=A<<1;

#10A=A<<1;

end

endmodule

2、模块一第一次仿真结果(截图)。

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

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

模块二第一次仿真结果(截图)

3、模块一综合结果(截图)。

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

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

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

延迟约为300ps左右。

6、模块一第三次仿真结果(布局布线后)(截图)。

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

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

延迟时间约为4500ps左右,无竞争冒险。

6、模块一布局布线的引脚分配(截图)。

7、烧录(请老师检查)。

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两数,分别依次为本人学号的奇数位和偶数位(例如,当学号为3212005896时,A数依次取学号从左到右的奇数位,即数字3、1、0、5、9,B数依次取学号从左到右的偶数位,即数字2、2、0、8、6),验证A、B的比较结果。

注意:

若两数相等,需考虑级联输入(级联输入的各种取值情况均需包括)。

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

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

7、完成课堂布置实验的Vierilog代码,并实现综合前仿真。

四、实验结果和数据处理

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

注:

文件命名要求。

工程(project)名要求:

学号末4位+下划线+comb,例如陈静(3212005896)芯片的工程名为“5896_comb”。

设计代码文件,要求每个模块对应一个文件,文件名要求:

学号末4位+下划线+芯片名,如74HC148芯片文件命名为“5896_74HC148.v”。

测试平台文件名:

自己定义。

//74HC148代码

moduleHC148(EI,I,A,GS,EO);

inputEI;

input[7:

0]I;

output[2:

0]A;

outputGS,EO;

reg[2:

0]A;

regGS,EO;

integerj;

always@(EI,I)

begin

if(EI)

begin

{A,GS,EO}=5'b11111;

end

elseif(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测试平台代码

`timescale1ns/1ns

moduletest_HC148;

regei;

reg[7:

0]i;

wire[2:

0]a;

wiregs,eo;

HC148u1(ei,i,a,gs,eo);

initial

begin

ei=1;

#20

ei=0;

i=8'b11111111;

#20i=8'b11111110;

#20i=8'b11111101;

#20i=8'b11111011;

#20i=8'b11110111;

#20i=8'b11101111;

#20i=8'b11011111;

#20i=8'b10111111;

#20i=8'b01111111;

end

endmodule

//74HC138代码

moduleHC138(E1,E2,E3,A,Y);

inputE1,E2,E3;

input[2:

0]A;

output[7:

0]Y;

reg[7:

0]Y;

integerI;

always@(E1,E2,E3,A)

begin

if(E1==1||E2==1||E3==0)

Y=8'b11111111;

else

Y=1'b1<

end

endmodule

//74HC138测试平台代码

moduletest_HC138;

rege1,e2,e3;

reg[2:

0]a;

wire[7:

0]y;

HC138u2(e1,e2,e3,a,y);

initial

begin

a=0;

repeat(20)

#20a=$random;

end

initial

begin

e1=1;

#10e2=1;

#10e3=0;

#10e1=0;

#10e2=0;

#10e3=1;

end

endmodule

//74HC153代码

moduleHC153(S,I1,I2,E1,E2,Y1,Y2);

input[1:

0]S;

input[3:

0]I1;

input[3:

0]I2;

inputE1,E2;

outputY1,Y2;

regY1,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测试平台代码

moduletest_HC153;

reg[1:

0]s;

reg[3:

0]i1;

reg[3:

0]i2;

rege1,e2;

wirey1,y2;

HC153u3(s,i1,i2,e1,e2,y1,y2);

initial

begin

e1=1;

e2=1;

#15e1=0;e2=0;

end

initial

begin

s=0;i1=0;i2=0;

#10i1=4'b1001;i2=4'b1100;

#10s=1;

#10s=2;

#10s=3;

end

endmodule

//74HC85代码

moduleHC85(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;

elseif(A

Q=3'b001;

elseif(I[1]==1)

Q=3'b010;

elseif(I==3'b101)

Q=3'b000;

elseif(I==0)

Q=3'b101;

else

Q=I;

end

endmodule

//74HC85测试平台代码

moduletest_HC85;

reg[3:

0]a,b;

reg[2:

0]i;

wire[2:

0]q;

HC85u4(a,b,i,q);

initial

begin

i=0;

repeat(4)

#10i=$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代码

moduleHC283(CIN,A,B,COUT,S);

inputCIN;

input[3:

0]A,B;

outputCOUT;

output[3:

0]S;

regCOUT;

reg[3:

0]S;

always@(CIN,A,B)

begin

{COUT,S}=CIN+A+B;

end

endmodule

//74HC283测试平台代码

moduletest_HC283;

regcin;

reg[3:

0]a,b;

wirecout;

wire[3:

0]s;

HC283u5(cin,a,b,cout,s);

initial

begin

cin=0;

repeat(20)

#15cin=$random;

end

initial

begin

a=0;

repeat(20)

#10a=$random;

end

initial

begin

b=0;

repeat(20)

#10b=$random;

end

endmodule

//74HC4511代码

moduleHC4511(LE,BI,LT,A,Y);

inputLE,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;

elseif(!

BI)

Y=0;

elseif(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:

;

endcase

end

endmodule

//74HC4511测试平台代码

moduletest_HC4511;

regle,bi,lt;

reg[3:

0]a;

wire[6:

0]y;

HC4511u6(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)

#20a=$random;

end

endmodule

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

74HC85:

4、综合结果(截图)

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

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

最大延迟约为700ps

6、布局布线(引脚分配截图)

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

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

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

最大延迟约为11500ps,出现竞争冒险。

8、烧录,给老师检查。

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、74HC112、74HC161、74HC194四个模块及测试平台代码设计。

注:

将以上4个模块及相应测试平台代码均写在一个工程文件中。

工程(project)名要求:

学号末4位+下划线+seq,例如陈静(3212005896)的工程名为“5896_seq”。

设计模块代码文件名要求:

A)4个模块可以写在同一个Verilog文件中,如果这样,文件命名要求同上,即“5896_seq.v”;

B)4个模块分别写在不同的Verilog文件中,如果这样,文件命名要求:

学号末4位+下划线+芯片名,例如“5896_74HC161.v”。

测试平台文件名:

分别为每个模块建立一个测试平台文件,文件命名要求:

test+下划线+芯片名,例如“test_74HC161.v”。

(1)代码清单

//74HC74代码

moduleHC74(S1,S2,R1,R2,CLK1,CLK2,D1,D2,Q1,QF1,Q2,QF2);

inputS1,S2,R1,R2,CLK1,CLK2,D1,D2;

outputQ1,QF1,Q2,QF2;

regQ1,QF1,Q2,QF2;

always@(posedgeCLK1)

begin

if(!

S1&&R1)

begin

Q1<=1;QF1<=0;

end

elseif(S1&&!

R1)

begin

Q1<=0;QF1<=1;

end

elseif(!

S1&&!

R1)

begin

Q1<=1;QF1<=1;

end

else

begin

Q1<=D1;QF1<=!

D1;

end

end

always@(posedgeCLK2)

begin

if(!

S2&&R2)

begin

Q2<=1;QF2<=0;

end

elseif(S1&&!

R1)

begin

Q2<=0;QF2<=1;

end

elseif(!

S1&&!

R1)

begin

Q2<=1;QF2<=1;

end

else

begin

Q2<=D2;QF2<=!

D2;

end

end

endmodule

//74HC74测试平台代码

`timescale1ns/1ns

moduletest_HC74;

regs1,s2,r1,r2,clk1,clk2,d1,d2;

wireq1,qf1,q2,qf2;

HC74u1(s1,s2,r1,r2,clk1,clk2,d1,d2,q1,qf1,q2,qf2);

initial

begin

clk1=0;

#400$finish;

end

always

#10clk1=~clk1;

initial

begin

clk2=0;

end

always

#10clk2=~clk2;

initial

begin

s1=0;

repeat(20)

#20s1=$random;

end

initial

begin

s2=0;

repeat(20)

#20s2=$random;

end

initial

begin

r1=1;

repeat(20)

#20r1=$random;

end

initial

begin

r2=1;

repeat(20)

#20r2=$random;

end

initial

begin

d1=0;

repeat(20)

#20d1=$random;

end

initial

begin

d2=0;

repeat(20)

#20d2=$random;

end

endmodule

//74HC112代码

moduleHC112(S1,S2,,R1,R2,CLK1,CLK2,J1,J2,K1,K2,Q1,QF1,Q2,QF2);

inputS1,S2,R1,R2,CLK1,CLK2,J1,J2,K1,K2;

outputQ1,QF1,Q2,QF2;

regQ1,Q2;

assignQF1=~Q1;

assignQF2=~Q2;

always@(negedgeCLK1,negedgeS1,negedgeR1)

begin

if(!

S1&&R1)

Q1<=1;

elseif(S1&&!

R1)

Q1<=0;

elseif(!

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@(negedgeCLK2,negedgeS2,negedgeR2)

begin

if(!

S2&&R2)

Q2<=1;

elseif(S2&&!

R2)

Q2<=0;

elseif(!

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测试平台代码

`timescale1ns/1ns

moduletest_HC112;

regs1,s2,r1,r2,clk1,clk2,j1,j2,k1,k2;

wireq1,qf1,q2,qf2;

HC112u1(s1,s2,r1,r2,clk1,clk2,j1,j2,k1,k2,q1,qf1,q2,qf2);

initial

begin

clk1=0;

end

always

#10clk1=~clk1;

initial

begin

s1=0;

repeat(20)

#20s1=$random;

end

initial

begin

r1=0;

repeat(20)

#20r1=$random;

end

initial

begin

j1=0;

repeat(20)

#20j1=$random;

end

initial

begin

k1=0;

repeat(20)

#20k1=$random;

end

initial

begin

clk2=0;

end

always

#10clk2=~clk2;

initial

begin

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

当前位置:首页 > 小学教育 > 语文

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

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