加减法运算器的设计Word文档下载推荐.docx
《加减法运算器的设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《加减法运算器的设计Word文档下载推荐.docx(13页珍藏版)》请在冰点文库上搜索。
![加减法运算器的设计Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/f9e90735-4e5a-40b1-bcb6-4d833b6e16ee/f9e90735-4e5a-40b1-bcb6-4d833b6e16ee1.gif)
2.四位超前进位的加减法运算器,有溢出和进位标志。
五、设计详细描述
5.1四位行波进位加减法运算器
5.1.1功能描述
带符号位的4位的两数进行加减运算,m进行控制,m=0时进行加法,m=1时进行减法。
S表示输出结果,C表示进位输出,Y标志溢出。
5.1.2封装模块图
5.1.3总电路图
5.1.4组成模块
一位全加器电路图
一位全加器封装图
一位全加器功能仿真波形图
求补电路图
求补电路封装模块图
5.1.5程序设计
modulenum4_wait(
m,
A,
B,
Y,
SS
);
inputwirem;
inputwire[3:
0]A;
0]B;
outputwireY;
outputwire[3:
0]SS;
wire[3:
0]AA;
0]BB;
0]S;
wireSYNTHESIZED_WIRE_0;
wireSYNTHESIZED_WIRE_9;
wireSYNTHESIZED_WIRE_2;
wireSYNTHESIZED_WIRE_3;
wireSYNTHESIZED_WIRE_4;
wireSYNTHESIZED_WIRE_5;
wireSYNTHESIZED_WIRE_6;
wireSYNTHESIZED_WIRE_7;
Add_minusb2v_inst(
.A(SYNTHESIZED_WIRE_0),
.B(BB[3]),
.Ci(SYNTHESIZED_WIRE_9),
.C(SYNTHESIZED_WIRE_7),
.S(S[3]));
Add_minusb2v_inst1(
.A(SYNTHESIZED_WIRE_2),
.B(BB[2]),
.Ci(SYNTHESIZED_WIRE_3),
.C(SYNTHESIZED_WIRE_9),
.S(S[2]));
qiubub2v_inst14(
.a(A),
.aa(AA));
qiubub2v_inst15(
.a(B),
.aa(BB));
qiubub2v_inst16(
.a(S),
.aa(SS));
Add_minusb2v_inst2(
.A(SYNTHESIZED_WIRE_4),
.B(BB[1]),
.Ci(SYNTHESIZED_WIRE_5),
.C(SYNTHESIZED_WIRE_3),
.S(S[1]));
Add_minusb2v_inst3(
.A(SYNTHESIZED_WIRE_6),
.B(BB[0]),
.Ci(m),
.C(SYNTHESIZED_WIRE_5),
.S(S[0]));
assignSYNTHESIZED_WIRE_0=AA[3]^m;
assignSYNTHESIZED_WIRE_2=AA[2]^m;
assignSYNTHESIZED_WIRE_4=AA[1]^m;
assignSYNTHESIZED_WIRE_6=AA[0]^m;
assignY=SYNTHESIZED_WIRE_7^SYNTHESIZED_WIRE_9;
endmodule
5.1.6功能仿真波形图
(二进制波形图)
正常情况Y=0
存在溢出时Y=1
5.2四位超前进位加法运算器
5.2.1功能概述
实现两个四位的数的加法,S输出结果,overflow标志是否溢出,carry_out表示进位。
5.2.2封装模块图
5.2.3程序设计
moduleAdd_minus_num4
(
input[3:
0]a,
0]b,
inputc0,//carry_in
inputclk,
inputcclr,
inputm;
outputregcarry_out,
outputreg[3:
0]sum,
outputregoverflow
wirec1,c2,c3,c4;
wirep0,p1,p2,p3;
wireg0,g1,g2,g3;
wiresum0,sum1,sum2,sum3;
assigng0=a[0]&
b[0];
assigng1=a[1]&
b[1];
assigng2=a[2]&
b[2];
assigng3=a[3]&
b[3];
assignp0=a[0]^b[0];
assignp1=a[1]^b[1];
assignp2=a[2]^b[2];
assignp3=a[3]^b[3];
//并行进位公式
assignc1=g0|c0&
p0;
//g0+c0p0
assignc2=g1|(g0&
p1)|(c0&
p0&
p1);
//g1+p1g0+p1p0c0
assignc3=g2|(g1&
p2)|(g0&
p1&
p2)|(c0&
p2);
//g2+p2g1+p2p1g0+p2p1p0c0
assignc4=g3|(g2&
p3)|(g1&
p2&
p3)|(g0&
p3)|(c0&
p3);
//g3+p3g2+p3p2g1+p3p2p1g0+p3p2p1p0c0
assignsum0=p0^c0;
assignsum1=p1^c1;
assignsum2=p2^c2;
assignsum3=p3^c3;
always@(posedgeclkornegedgecclr)
begin
if(!
cclr)
begin//用于复位
sum<
=0;
carry_out<
=0;
end
else
begin
={sum3,sum2,sum1,sum0};
=c4;
//符号位进位输出
overflow=c4^c3;
//溢出设计
end
end
5.2.4功能仿真波形图
溢出时carry_out=1;
六、实验注意事项
1.使用testbench进行仿真时切记initial块之间是并行的,否则会因理解有误使得结果相差很大。
2.使用Modelsim-Altrea仿真,在设置setting中编译TestBench部分建立新的TestBench时,名称一定要与testbench的文件名相同,即xxx_vlg_tst()格式,否则调用时会报错errorloading或无法出现波形图。
七、实验问题及解决方法
1.使用仿真软件时报错:
Info:
StartNativelinkSimulationprocess
Error:
NativeLinkdidnotdetectanyHDLfilesintheproject
NativeLinksimulationflowwasNOTsuccessful
NativelinkTCLscriptfailedwitherrorCode:
NONE
NativelinkTCLscriptfailedwitherrorInfo:
NativeLinkdidnotdetectanyHDLfilesintheproject(procedure"
run_eda_simulation_tool"
line1)
invokedfromwithin
"
run_eda_simulation_tooleda_opts_hash"
问题解决:
由于是原理图自动生成的veriloghdl语言,而modelsim只能仿真hdl文件,不能仿真原理图。
可以用file->
creat/update->
createhdldesignfilefromcurrentfile来生成一个同名的hdl文件。
之后将原来的原理图文件从工程中移去(否则分析综合时会报错),进行分析综合。
这样就可以进行rtl仿真了。
2.使用modelsim-altera仿真时发现窗口能弹出,但没有wave波形图
窗口能弹出表示路径正确,点击波形图下方“transcript”,进入后可看到报错error提示,通常为testbench语法报错,直接进入vt文件进行修改即可。
3.报错errorloading
有两种原因:
第一次因为创建testbench时文件名与testbench里的名称不一样;
第二次因为没有从工程目录下移除bdf文件或给它更名,我是利用电路图,生成VerilogHDL文件的,因此bdf文件也放在工程目录下,由于二者名字相同,软件无法判断哪个才是需要仿真的文件,因而报错。
4.使用4位并行进位加法器时,直接用的VerilogHDL语言进行仿真,结果有误。
一直查不出错误,关掉了所有文件,重新生成testbench模板并仿真,结果正确。