基于Libero的数字逻辑设计仿真及验证实验实验报告eda.docx
- 文档编号:5755031
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:40
- 大小:146.13KB
基于Libero的数字逻辑设计仿真及验证实验实验报告eda.docx
《基于Libero的数字逻辑设计仿真及验证实验实验报告eda.docx》由会员分享,可在线阅读,更多相关《基于Libero的数字逻辑设计仿真及验证实验实验报告eda.docx(40页珍藏版)》请在冰豆网上搜索。
基于Libero的数字逻辑设计仿真及验证实验实验报告eda
___计算机__学院_13网络工程___专业__2__班________组、学号3113006452
姓名____陈聪_____协作者______________教师评定_________________
实验题目_________基于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代码-与非
moduleHC00(A,B,Y);
inputA,B;
outputY;
assignY=~(A&&B);
endmodule
//74HC00测试平台代码
`timescale1ns/1ns
moduletestbench;
regA,B;
wireY;
HC00testbench00(A,B,Y);
initial
begin
A=0;B=0;
#10A=1;
#10B=1;
#10A=0;#10;
end
endmodule
//74HC02代码-或非
moduleHC02(A,B,Y);
inputA,B;
outputY;
assignY=~(A||B);
endmodule
//74HC02测试平台代码
`timescale1ns/1ns
moduletestbench;
regA,B;
wireY;
HC02testbench02(A,B,Y);
initial
begin
A=0;B=0;
#10A=1;
#10B=1;
#10A=0;#10;
end
endmodule
//74HC04代码-非
moduleHC04(A,Y);
inputA;
outputY;
assignY=~A;
endmodule
//74HC04测试平台代码
`timescale1ns/1ns
moduletestbench;
regA;
wireY;
HC04testbench04(A,Y);
initial
begin
A=0;#10;
A=1;#10;
end
endmodule
//74HC08代码-与
moduleHC08(A,B,Y);
inputA,B;
outputY;
assignY=A&&B;
endmodule
//74HC08测试平台代码
`timescale1ns/1ns
moduletestbench;
regA,B;
wireY;
HC08testbench08(A,B,Y);
initial
begin
A=0;B=0;
#10A=1;
#10B=1;
#10A=0;#10;
end
endmodule
//74HC32代码-或
moduleHC32(A,B,Y);
inputA,B;
outputY;
assignY=A||B;
endmodule
//74HC32测试平台代码
`timescale1ns/1ns
moduletestbench;
regA,B;
wireY;
HC32testbench32(A,B,Y);
initial
begin
A=0;B=0;
#10A=1;
#10B=1;
#10A=0;#10;
end
endmodule
//74HC86代码-异或
moduleHC86(A,B,Y);
inputA,B;
outputY;
assignY=A^B;
endmodule
//74HC86测试平台代码
`timescale1ns/1ns
moduletestbench;
regA,B;
wireY;
HC86testbench86(A,B,Y);
initial
begin
A=0;B=0;
#10A=1;
#10B=1;
#10A=0;#10;
end
endmodule
2、第一次仿真结果(任选一个门,请注明,插入截图,下同)。
(将波形窗口背景设为白色,调整窗口至合适大小,使波形能完整显示,对窗口截图。
后面实验中的仿真使用相同方法处理)
解:
选择74HC02或非门:
3、综合结果(截图)。
(将相关窗口调至合适大小,使RTL图能完整显示,对窗口截图,后面实验中的综合使用相同方法处理)
4、第二次仿真结果(综合后)(截图)。
回答输出信号是否有延迟,延迟时间约为多少?
有延迟,延迟时间约300ps。
5、第三次仿真结果(布局布线后)(截图)。
回答输出信号是否有延迟,延迟时间约为多少?
分析是否有出现竞争冒险。
有延迟,延迟时间约4100ps。
无竞争冒险。
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代码
moduleHC148(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:
local
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=~I;
EO=1;
GS=0;
end
end
end
endmodule
//74HC148测试平台代码
`timescale1ns/10ps
moduletestbench;
reg[7:
0]in;
regEI;
wire[2:
0]out;
wireEO,GS;
HC148testbench148(in,EO,out,EI,GS);
initial
begin
EI=0;#20;
EI=1;#20;
end
initial
begin
in=`b00000001;
repeat(9)
#20in=in<<1;
end
endmodule
//74HC138代码
moduleHC138(DataIn,E1N,E2N,E3,Eq);
input[2:
0]DataIn;
inputE1N,E2N,E3;
output[7:
0]Eq;
wire[2:
0]DataIn;
IntegerI;
always@(DataIn,E1N,E2N,E3)
begin
if((!
E1N)&&(!
E2N)&&E3)
for(I=0;I<8;I=I+1)
if(DataIn==I)
Eq[I]=1;
elseEq[I]=0;
elseEq=0;
end
endmodule
//74HC138测试平台代码
`timescale1ns/10ps
moduletestbench;
reg[2:
0]in;
regE1N,E2N,E3;
wire[7:
0]eq;
HC138testbench138(in,E1N,E2N,E3,eq);
initial
begin
in=0;
repeat(20)
#20in=$random;
end
initial
begin
E1N=1;#40;
E2N=1;#40;
E3=0;#40;
E1N=0;#40;
E2N=0;#40;
E3=1;#40;
end
endmodule
//74HC153代码
moduleHC153(EN,D0,D1,D2,D3,S0,S1,Y);
inputEN,D0,D1,D2,D3,S0,S1;
outputY;
regY;
always@(EN,D0,D1,D2,D3,S0,S1)
begin
if(!
EN)case({S1,S0})
0:
Y=D0;
1:
Y=D1;
2:
Y=D2;
3:
Y=D3;
default:
Y=1’bx;
endcase
end
endmodule
//74HC153测试平台代码
`timescale1ns/10ps
moduletestbench;
regEN,D0,D1,D2,D3,S0,S1;
wireY;
HC153testbench153(EN,D0,D1,D2,D3,S0,S1,Y);
initial
begin
EN=1;#50;
EN=0;#50;
end
initial
begin
D0=0;D1=0;D2=0;D3=0;S0=0;S1=0;
#100D0=1;D1=0;D2=0;D3=1;
#100S1=0;S0=1;
#100S1=1;S0=0;
#100S1=1;S0=1;
#100;
end
endmodule
//74HC85代码
moduleHC85(DataA,DataB,QAGB,QASB,QAEB,IAGB,IASB,IAEB);
input[3:
0]DataA,DataB;
inputIAGB,IASB,IAEB;
outputQAGB,QASB,QAEB;
regQAGB,QASB,QAEB;
always@(DataA,DataB)
begin
if(DataA>DataB)
begin
QAGB=1;QASB=0;QAEB=0;
end
elseif(DataA begin QAGB=0;QASB=1;QAEB=0; end elseif(IAGB&! IASB&! IAEB) begin QAGB=1;QASB=0;QAEB=0; end elseif(! IAGB&IASB&! IAEB) begin QAGB=0;QASB=1;QAEB=0; end elseif(IAEB) begin QAGB=1;QASB=0;QAEB=0; end elseif(IAGB&IASB&! IAEB) begin QAGB=0;QASB=0;QAEB=0; end elseif(! IAGB&! IASB&! IAEB) begin QAGB=1;QASB=1;QAEB=0; end end endmodule //74HC85测试平台代码 `timescale1ns/10ps moduletestbench; reg[3: 0]DataA,DataB; regIAGB,IASB,IAEB; wireQAGB,QASB,QAEB; integerI; HC85testbench85(DataA,DataB,QAGB,QASB,QAEB,IAGB,IASB,IAEB); initial begin DataA=0; repeat(20) #20DataA=$random; end initial begin DataB=0; repeat(20) #20DataB=$random; end initial begin for((I=0;I<8;I=I+1)) {IAGB,IASB,IAEB}=I; #20; end endmodule //74HC283代码 moduleHC283(DataA,DataB,Cin,Sum,Cout); input[3: 0]DataA,DataB; inputCin; output[3: 0]Sum; reg[3: 0]Sum; outputCout; regCout; always@(DataA,DataB,Cin) begin {Cout,Sum}=DataA+DataB+Cin; end endmodule //74HC283测试平台代码 `timescale1ns/10ps moduletestbench; reg[3: 0]DataA,DataB; regCin; wire[3: 0]Sum; wireCout; HC283testbench283(DataA,DataB,Cin,Sum,Cout); initial begin DataA=0; repeat(20) #20DataA=$random; end initial begin DataB=0; repeat(20) #40DataB=$random; end initial begin Cin=0; #200Cin=1; end endmodule //74HC4511代码 moduleHC4511(A,Seg,LTN,BIN,LE); inputLTN,BIN,LE; input[3: 0]A; output[7: 0]Seg; always@(A,LTN,BIN,LE) begin if(! LTN)Seg=8`b11111111; elseif(! BIN)Seg=8`b00000000; elseif(LE)Seg=Seg; else case(A) 4`d0: Seg=8`b00111111; 4`d1: Seg=8`b00000110; 4`d2: Seg=8`b01011011; 4`d3: Seg=8`b01001111; 4`d4: Seg=8`b01100110; 4`d5: Seg=8`b01101101; 4`d6: Seg=8`b01111101; 4`d7: Seg=8`b00000111; 4`d8: Seg=8`b01111111; 4`d9: Seg=8`b01101111; 4`d10: Seg=8`b01110111; 4`d11: Seg=8`b01111100; 4`d12: Seg=8`b00111001; 4`d13: Seg=8`b01011110; 4`d14: Seg=8`b01111001; 4`d15: Seg=8`b01110001; default; endcase end endmodule //74HC4511测试平台代码 `timescale1ns/10ps moduletestbench; regLTN,BIN,LE; reg[3: 0]A; wire[7: 0]Seg; HC4511testbench4511(A,Seg,LTN,BIN,LE); initial begin A=0; repeat(20) #10A=$random; end initial begin LTN=0;#10 BIN=0;LTN=1;#10 LE=0;BIN=1;#10; end endmodule 2、第一次仿真结果(任选一个模块,请注明) 解: 选择74HC148: 3、综合结果 4、第二次仿真结果(综合后)。 回答输出信号是否有延迟,延迟时间约为多少? 有延迟,延迟时间约为300ps。 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代码 moduleHC74(SDN,RDN,Clk,D,Q,QN); inputSDN,RDN,Clk,D; outputQ,QN; regQ; assignQN=~Q; always@(posedgeClkornegedgeSDNornegedgeRDN) begin if((! SDN)&&RDN)Q<=1; elseif(SDN&&(! RDN))Q<=0; elseif(SDN&&RDN)Q<=D; end endmodule //74HC74测试平台代码 `timescale1ns/1ns moduletestbench; regSDN,RDN,Clk,D; wireQ,QN; HC74testbench1(SDN,RDN,Clk,D,Q,QN); parameterclock_period=20; always#(clock_period/2)Clk=~Clk; initial begin D=0;Clk=0; repeat(20) #20D=$random; end initial begin SDN=0; repeat(20) #20SDN=$random; end initial begin RDN=0; repeat(20) #20RDN=$random; end initial #300$finish; endmodule //74HC112代码 moduleHC112(J,K,Clk,SDN,RDN,Q,Qn); inputJ,K,Clk,SDN,RDN; outputQ,Qn; regQ; assignQn=~Q; always@(negedgeClkornegedgeSDNornegedgeRDN) begin if((! SDN)&&RDN)Q<=1`b1; elseif(SDN&&! RDN))Q<=1`b0; elseif(SDN&&RDN)) case({J,K}) 2`b00: Q<=Q; 2`b01: Q<=1`b0; 2`b10: Q<=1`b1; 2`b11: Q<=~Q; default: Q<=1`bx; endcase end endmodule //74HC112测试平台代码 `timescale1ns/1ns moduletestbench; regJ,K,Clk,SDN,RDN; wireQ,Qn; HC112testbench112(J,K,Clk,SDN,RDN,Q,Qn); parameterclock_period=20; always#(clock_period/2)Clk=~Clk; initial begin J=0;K=0;Clk=1; #10J=1; #10K=1; #10J=0;#10; end initial begin SDN=0;RDN=1; #10RDN=0; #10SDN=1; #10RDN=1;#10; end endmodule //74HC161代码 moduleHC161(CP,CEP,CET,MRN,PEN,Dn,Qn,TC); inputCP,CEP,CET,MRN,PEN; input[3: 0]Dn; output[3: 0]Qn; outputTC; reg[3: 0]Qn; regTC; always@(posedgeCP) begin if(! MRN)Qn<=4`b0000; elseif(! PEN)Qn<=Dn; elseif(CEP&CET)Qn<=Qn+1; elseQn<=Qn; end always@(posedgeCP) begin if(Qn==4`b1110&&CET==1)TC=1`b1; elseTC=1`b0; end endmodule //74HC161测试平台代码 `timescale1ns/1ns moduletestbench; regCP,CEP,CET,MRN,PEN; reg[3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Libero 数字 逻辑设计 仿真 验证 实验 报告 eda