跳到主要内容

1.3.8进位选择加法器

ripple carry adder(前一个练习中提到的2.3.6)的一个缺点是,加法器计算进位输出(在最坏情况下,从进位输入开始)的延迟相当长,并且第二级加法器必须等待第一级加法器完成之后才能开始计算其进位输出。这使得加法器的速度较慢。一种改进方法是使用carry-select加法器,如下图所示。第一级加法器与之前相同,但我们复制了第二级加法器,一个假设进位输入为0,另一个假设进位输入为1,然后使用快速的2选1多路复用器来选择哪个结果是正确的。

在这个练习中,您将获得与上一个练习中相同的模块,该模块可以接收两个16位数以及一个进位输入,并产生一个进位输出和16位的和。您必须实例化三个这样的模块来构建carry-select加法器,并使用您自己的16位2选1多路复用器。

按照下图所示连接这些模块。所提供的 add16 模块具有以下声明:

module add16 ( input[15:0] a, input[15:0] b, input cin, output[15:0] sum, output cout );

alt text

模块声明

module top_module(
input [31:0] a,
input [31:0] b,
output [31:0] sum
);

做题区