可编程逻辑器件及应用实验 加法器的设计与仿真.docxVIP

可编程逻辑器件及应用实验 加法器的设计与仿真.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

PAGE

PAGE1

实验二:加法器的设计与仿真

2.11位半加器的设计与仿真

2.1.1设计任务

完成第十二章12.3节半加器设计内容,完成设计输入、编译、时间约束设置,功能仿真,管脚分配。

2.1.2设计思路与原理

一位半加器有两输入两输出,输入为两个数据位相加,没有进位输入,输出为一个数据位一个进位,实现一位二进制加法。其中a,b为输入,cout为进位输出,sum为和输出。

一位半加器真值表

a

b

sum

cout

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

1

2.1.3Verilog源代码与注释

moduleh_add(cout,sum,a,b);

outputcout,sum;

inputa,b;

wirecout,sum;

assign{cout,sum}=a+b; //用assign进行线网赋值

endmodule //{}为连接符号

`timescale100ps/10ps

moduleh_add_vlg_tst();

rega,b;

wirecout,sum;

h_addi1(cout,sum,a,b);

parameterperiod1=50,period2=100; //period1为a的周期

parameterpulse=40; //period2为b的周期pluse重复四十次

initial

begin

a=1b0;

repeat(pulse)

#(period1/2)a=~a;

end

initial

begin

b=1b0;

repeat(pulse)

#(period2/2)b=~b;

end

endmodule

2.1.4仿真结果与分析

a,b为输入位,testbench设置a翻转周期50,b反转周期为100,在无时序延迟影响下,可从图中直观看出符合半加器设计要求。

图2-11位半加器的功能仿真截图

图2-21位半加器的时序仿真截图

时序仿真使用布局布线后器件给出的模块和连线的延时信息,在最坏的情况下对电路的行为作出实际地估价,时序仿真信号加载了时延,波形产生毛刺现象。

2.28位全加器的设计与仿真

2.2.1设计任务

利用1位半加器设计8位全加器,使用QuartusII软件进行仿真验证,测试功能。

2.2.2设计思路与原理

一位半加器与一位全加器的区别在于全加器有从低位进上来的进位位,可以使用两个半加器与一个二输入或门构成一位全加器,有三个输入信号分别问cin,a,b和两个输出信号cout和sum。

一位半加器真值表

cin

a

b

cout

sum

0

0

0

0

0

0

0

1

0

1

0

1

0

0

1

0

1

1

1

0

1

0

0

0

1

1

0

1

1

0

1

1

0

1

0

1

1

1

1

1

由八个一位全加器级联即可获得一个八位全加器

2.2.3Verilog源代码与注释

moduleadd_1(

a,

b,

cin,

cout,

sum

); //一位全加器有三个输入信号,两个输出信号

inputwire a;

inputwire b;

inputwire cin;

outputwire cout;

outputwire sum;

wire SYNTHESIZED_WIRE_0; //定义三个综合过的线网信号

wire SYNTHESIZED_WIRE_1; //用于全加器之间的连接

wire SYNTHESIZED_WIRE_2;

h_add b2v_inst1(

.a(a),

.b(b),

.cout(SYNTHESIZED_WIRE_2),

.sum(SYNTHESIZED_WIRE_0));

h_add b2v_inst2(

.a(SYNTHESIZED_WIRE_0),

.b(cin),

.cout(SYNTHESIZED_WIRE_1),

.sum(sum));

assign cout=SYNTHESIZED_WIRE_1|SYNTHESIZED_WIRE_2;

//一位全加器是否有进位是看低位是否有进位以及本位是否产生新的进位信号

endmodule

moduleadd_8( //八位全加器也是三个输入信号,两个输出信号

cin,

A,

B,

COUNT,

SUM

);

inputwire cin;

inputwire [7:0]A;

inputwire [7:0]B;

outputwire COUNT;

ou

文档评论(0)

t_github + 关注
实名认证
文档贡献者

计算机研究者

1亿VIP精品文档

相关文档