广工数字逻辑实验七.docx
- 文档编号:29850624
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:26
- 大小:100.69KB
广工数字逻辑实验七.docx
《广工数字逻辑实验七.docx》由会员分享,可在线阅读,更多相关《广工数字逻辑实验七.docx(26页珍藏版)》请在冰豆网上搜索。
广工数字逻辑实验七
__计算机__学院__软件工程__专业__班__组、学号__
姓名________协作者______________教师评定_________________
实验题目__第七次实验——基于Libero的数字逻辑设计仿真及验证实验__
1、熟悉SmartDesign工具的使用
2、组合逻辑电路综合实验的设计、仿真、程序烧录及验证
3、时序电路的设计、仿真、程序烧录及验证
实验报告
一、实验目的
1、了解基于Verilog的组合逻辑电路的设计及其验证。
2、熟悉利用EDA工具(特别是SmartDesign)进行设计及仿真的流程。
3、学习利用SmartDesign对全加器进行VerilogHDL设计的方法。
4、熟悉实验箱的使用和程序下载(烧录)及测试的方法。
二、实验环境
1、Libero仿真软件。
2、DIGILOGIC-2011数字逻辑及系统实验箱。
3、ActelProasic3A3P030FPGA核心板及FlashPro4烧录器。
三、实验内容
1、掌握Libero软件的使用方法。
2、参考教材中5.7.1中相应内容,使用半加器构造全加器,并完成相应的仿真实验。
3、提交相应的仿真结果并完成程序烧录及实验箱验证。
4、编码器扩展实验(利用SmartDesign来完成)
设计一个电路:
当按下小于等于9的按键后,显示数码管显示数字,当按下大于9的按键后,显示数码管不显示数字。
若同时按下几个按键,优先级别的顺序是9到0。
本实验需要两个编码器74HC148、一个数码显示译码器74HC4511、一个共阴极8段显示数码管LN3461Ax和一个数值比较器74HC85。
5、参考教材中相应章节的设计代码、测试平台代码(可自行编程),完成74HC74、74HC112、74HC161、74HC194相应的设计、综合及仿真。
提交针对74HC74、74HC112、74HC161、74HC194(任选一个)的综合结果,以及相应的仿真结果。
四、实验结果和数据处理
(一)全加器
1、SmartDesign连线效果截图
2、模块及测试平台代码
//halfAdder.v
modulehalfAdder(A,B,Y,Cout);
inputA,B;
outputY,Cout;
assignY=A^B;
assignCout=A&B;
endmodule
//fullAdder.v
modulefullAdder(Cin,A,B,Y,Cout);
inputCin;
inputA;
inputB;
outputY;
outputCout;
wirehalfAdder_0_Cout,halfAdder_1_Cout,halfAdder_1_Y,GND_net,
VCC_net;
OR2OR2_0(.A(halfAdder_1_Cout),.B(halfAdder_0_Cout),.Y(Cout));
VCCVCC(.Y(VCC_net));
halfAdderhalfAdder_0(.A(halfAdder_1_Y),.B(B),.Y(Y),.Cout(
halfAdder_0_Cout));
GNDGND(.Y(GND_net));
halfAdderhalfAdder_1(.A(Cin),.B(A),.Y(halfAdder_1_Y),.Cout(
halfAdder_1_Cout));
endmodule
//testbench.v
`timescale1ns/1ns
moduletestbench;
regA,B,Cin;
wireY,Cout;
addersu1(.DataA(A),.DataB(B),.Cin(Cin),.Y(Y),.Cout(Cout));
initial
begin
A=0;
B=0;
Cin=0;
#5Cin=1;
#5B=1;
#5Cin=0;
#5A=1;
#5Cin=1;
#5B=0;
#5Cin=0;
#5$finish;
end
endmodule
3、第一次仿真结果
4、综合结果
5、第二次仿真结果(综合后)。
回答输出信号是否有延迟,延迟时间约为多少?
延迟:
300ps
6、第三次仿真结果(布局布线后)。
回答输出信号是否有延迟,延迟时间约为多少?
分析是否有出现竞争冒险。
延迟:
4900ps。
有竞争冒险。
7、引脚分配表
(二)编码器扩展实验
1、SmartDesign的连线图
2、功能仿真波形图
3、综合结果RTL图
4、引脚分配I/OAttributeEditor截图
5、记录实测结果
编码器扩展实验结果记录表
74HC148
(1)输入
74HC148(0)输入
74HC4511
显示
字形
I7
I6
I5
I4
I3
I2
I1
I0
I7
I6
I5
I4
I3
I2
I1
I0
abcdefg
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1111110
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1111110
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1100000
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1101101
2
1
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1111001
3
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
0110011
4
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1011011
5
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1011111
6
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1110000
7
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1111111
8
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1111011
9
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
0000000
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
0000000
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
0000000
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
0000000
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0000000
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0000000
(三)时序电路
1、所有模块及测试平台代码清单
//74HC74代码
moduleHC74(D1,D2,CP1,CP2,RD1N,RD2N,SD1N,SD2N,Q1,Q2,Q1N,Q2N);
inputD1,D2;
inputRD1N,SD1N,CP1;
inputRD2N,SD2N,CP2;
outputQ1,Q1N,Q2,Q2N;
regQ1,Q2;
assignQ1N=~Q1;
assignQ2N=~Q2;
always@(posedgeCP1)
begin
if(!
RD1N)Q1<=0;
elseif(!
SD1N)Q1<=1;
elseQ1<=D1;
end
always@(posedgeCP2)
begin
if(!
RD2N)Q2<=0;
elseif(!
SD2N)Q2<=1;
elseQ2<=D2;
end
endmodule
//74HC74测试平台代码
`timescale1ns/1ns
moduletestbench;
regD1,D2,RD1N,RD2N,CP1,CP2,SD1N,SD2N;
wireQ1,Q2,Q1N,Q2N;
initial
begin
CP1=0;
end
parameterclock_period=20;
always#(clock_period/2)CP1=~CP1;
initial
begin
CP2=0;
end
always#(clock_period/2)CP2=~CP2;
initial
begin
D1=0;
repeat(20)
#20D1=$random;
end
initial
begin
D2=0;
repeat(20)
#20D2=$random;
end
initial
begin
RD1N=0;
repeat(20)
#20RD1N=$random;
end
initial
begin
RD2N=0;
repeat(20)
#20RD2N=$random;
end
initial
begin
SD1N=0;
repeat(20)
#20SD1N=$random;
end
initial
begin
SD2N=0;
repeat(20)
#20SD2N=$random;
end
HC74u74(.CP1(CP1),.CP2(CP2),.D1(D1),.D2(D2),
.RD1N(RD1N),.RD2N(RD2N),.SD1N(SD1N),.SD2N(SD2N),.Q1(Q1),.Q1N(Q1N),.Q2(Q2),.Q2N(Q2N));
endmodule
//74HC112代码
moduleHC112(J1,J2,K1,K2,CPN1,CPN2,RD1N,RD2N,SD1N,SD2N,Q1,Q2,Q1N,Q2N);
inputJ1,J2,K1,K2;
inputRD1N,SD1N,CPN1;
inputRD2N,SD2N,CPN2;
outputQ1,Q2,Q1N,Q2N;
regQ1,Q2;
assignQ1N=~Q1;
assignQ2N=~Q2;
always@(posedgeCPN1)
begin
if(!
RD1N)Q1<=0;
elseif(!
SD1N)Q1<=1;
else
case({J1,K1})
2'b00:
Q1<=Q1;
2'b01:
Q1<=1'b0;
2'b10:
Q1<=1'b1;
2'b11:
Q1<=~Q1;
default:
Q1<=1'bx;
endcase
end
always@(posedgeCPN2)
begin
if(!
RD2N)Q2<=0;
elseif(!
SD2N)Q2<=1;
else
case({J2,K2})
2'b00:
Q2<=Q2;
2'b01:
Q2<=1'b0;
2'b10:
Q2<=1'b1;
2'b11:
Q2<=~Q2;
default:
Q2<=1'bx;
endcase
end
endmodule
//74HC112测试平台代码
`timescale1ns/1ns
moduletestbench;
regJ1,J2,K1,K2,RD1N,RD2N,CPN1,CPN2,SD1N,SD2N;
wireQ1,Q2,Q1N,Q2N;
initial
begin
CPN1=0;
end
parameterclock_period=20;
always#(clock_period/2)CPN1=~CPN2;
initial
begin
CPN2=0;
end
always#(clock_period/2)CPN2=~CPN2;
initial
begin
J1=0;
repeat(20)
#20J1=$random;
end
initial
begin
K1=0;
repeat(20)
#20K1=$random;
end
initial
begin
J2=0;
repeat(20)
#20J2=$random;
end
initial
begin
K2=0;
repeat(20)
#20K2=$random;
end
initial
begin
RD1N=0;
repeat(20)
#20RD1N=$random;
end
initial
begin
RD2N=0;
repeat(20)
#20RD2N=$random;
end
initial
begin
SD1N=0;
repeat(20)
#20SD1N=$random;
end
initial
begin
SD2N=0;
repeat(20)
#20SD2N=$random;
end
HC112u112(.CPN1(CPN1),.CPN2(CPN2),.J1(J1),.K1(K1),.J2(J2),.K2(K2),.RD1N(RD1N),
.RD2N(RD2N),.SD1N(SD1N),.SD2N(SD2N),.Q1(Q1),.Q1N(Q1N),.Q2(Q2),.Q2N(Q2N));
endmodule
//74HC161代码
//HC161.v
moduleHC161(CP,CEP,CET,MRN,PEN,Dn,Qn,TC);
inputCP;
inputCEP,CET;
output[3:
0]Qn;
inputMRN;
inputPEN;
input[3:
0]Dn;
outputregTC;
reg[3:
0]qaux;
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;
elseTC=1'b0;
end
assignQn=qaux;
endmodule
//74HC161测试平台代码
`timescale1ns/1ns
moduletest161;
regCP,CEP,CET,MRN,PEN;
reg[3:
0]Dn;
wire[3:
0]Qn;
wireTC;
initial
begin
CP=0;
end
parameterDELY=20;
always#(DELY/2)CP=~CP;
initial
begin
CEP=0;
repeat(20)
#20CEP=1;
end
initial
begin
CET=0;
repeat(20)
#20CET=1;
end
initial
begin
MRN=0;
repeat(20)
#20MRN=1;
end
initial
begin
PEN=0;
repeat(20)
#20PEN=1;
end
initial
begin
Dn=0;
repeat(20)
#20Dn=$random;
end
HC161u161(.CP(CP),.CEP(CEP),.CET(CET),.MRN(MRN),.PEN(PEN),.Dn(Dn),.Qn(Qn),.TC(TC));
endmodule
//74HC194代码
moduleHC194(D0,D1,D2,D3,S0,S1,DSR,DSL,MRN,CP,Q0,Q1,Q2,Q3);
inputD0,D1,D2,D3;
inputS0,S1;
inputDSR,DSL;
inputMRN;
inputCP;
outputQ0,Q1,Q2,Q3;
reg[3:
0]Qaux;
wire[3:
0]Data;
assignData[0]=D0;
assignData[1]=D1;
assignData[2]=D2;
assignData[3]=D3;
always@(posedgeCP)
begin
if(!
MRN)
Qaux=0;
elseif(S1&S0)
Qaux=Data;
elseif(S1&!
S0)
Qaux={Qaux[2:
0],DSL};
elseif(!
S1&S0)
Qaux={DSR,Qaux[2:
0]};
elseif(!
S1&S0)
Qaux=Qaux;
end
assignQ0=Qaux[0];
assignQ1=Qaux[1];
assignQ2=Qaux[2];
assignQ3=Qaux[3];
endmodule
//74HC194测试平台代码
`timescale1ns/1ns
moduletest194;
regD0,D1,D2,D3,S0,S1,DSR,DSL,MRN,CP;
wireQ0,Q1,Q2,Q3;
initial
begin
CP=0;
end
parameterclock_period=20;
always#(clock_period/2)CP=~CP;
initial
begin
D0=0;
repeat(20)
#20D0=$random;
end
initial
begin
D1=0;
repeat(20)
#20D1=$random;
end
initial
begin
D2=0;
repeat(20)
#20D2=$random;
end
initial
begin
D3=0;
repeat(20)
#20D3=$random;
end
initial
begin
S0=0;
repeat(20)
#20S0=$random;
end
initial
begin
S1=0;
repeat(20)
#20S1=$random;
end
initial
begin
MRN=0;
repeat(20)
#20MRN=$random;
end
initial
begin
DSR=0;
repeat(20)
#20DSR=$random;
end
initial
begin
DSL=0;
repeat(20)
#20DSL=$random;
end
HC194u194(.CP(CP),.D0(D0),.D1(D1),.D2(D2),.D3(D3),.S1(S1),.S0(S0),.DSR(DSR),.DSL(DSL),.MRN(MRN),.Q0(Q0),.Q1(Q1),.Q2(Q2),.Q3(Q3));
endmodule
2、第一次仿真结果(任选一个模块,请注明)
模块:
74HC74
3、综合结果
4、第二次仿真结果(综合后)
5、第三次仿真结果(布局布线后)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 逻辑 实验