加减法运算器的设计.docx

上传人:b****8 文档编号:10297126 上传时间:2023-02-09 格式:DOCX 页数:13 大小:295.25KB
下载 相关 举报
加减法运算器的设计.docx_第1页
第1页 / 共13页
加减法运算器的设计.docx_第2页
第2页 / 共13页
加减法运算器的设计.docx_第3页
第3页 / 共13页
加减法运算器的设计.docx_第4页
第4页 / 共13页
加减法运算器的设计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

加减法运算器的设计.docx

《加减法运算器的设计.docx》由会员分享,可在线阅读,更多相关《加减法运算器的设计.docx(13页珍藏版)》请在冰豆网上搜索。

加减法运算器的设计.docx

加减法运算器的设计

中央民族大学

数字电路实验报告

 

加减法运算器的设计

 

 

 

一、实验目的

1、掌握加减法运算器的VerilogHDL语言描述方法

2、理解超前进位算法的基本原理

3、掌握基于模块的多位加减运算器的层次化设计方法

4、掌握溢出检测方法和标志线的生成技术

5、熟悉QuartusⅡ10.0和DE2-115使用方法

二、实验设备

PC机+QuartusⅡ10.0+DE2-115

三、实验内容

1、在PC机上安装QuartusⅡ10.0或更高版本并破解。

(注意:

QuartusⅡ10.0版本以上软件不再包含仿真组件,因此需要在安装QuartusⅡ10.0同时选择安装第三方仿真工具,我们可以选择安装免费的Modelsim-Altera,学习如何编写VerilogHDL格式的仿真测试文件Testbench。

2、在PC机上安装DE2-115的驱动程序。

3、使用VerilogHDL语言实现一个4位行波(串行)进位的加减法运算器,要求有溢出和进位标志,仿真正确后封装成模块。

4、使用VerilogHDL语言实现一个4位超前(并行)进位加减运算器,要求有溢出和进位标志,仿真正确后封装成模块。

四、实验功能概要

1.四位行波进位的加减法运算器,有溢出和进位标志。

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;

inputwire[3:

0]B;

outputwireY;

outputwire[3:

0]SS;

wire[3:

0]AA;

wire[3:

0]BB;

wire[3:

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,

input[3:

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&p0&p1&p2);//g2+p2g1+p2p1g0+p2p1p0c0

assignc4=g3|(g2&p3)|(g1&p2&p3)|(g0&p1&p2&p3)|(c0&p0&p1&p2&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

sum<={sum3,sum2,sum1,sum0};

carry_out<=c4;//符号位进位输出

overflow=c4^c3;//溢出设计

end

end

endmodule

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

Error:

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模板并仿真,结果正确。

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

当前位置:首页 > 解决方案 > 营销活动策划

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

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