#126. 进位选择加法器

    ID: 126 Type: Default 1000ms 256MiB

进位选择加法器

题目描述

前例中的加法器成为串行进位加法器,只有等前一级的加法器运算结束产生进位位之后,下一级加法器才能利用进位位进行计算,因此电路延时会随加法器串联级数的增加而线性增加,这使得电路计算速度大大降低。设每一级全加器的延时为t,则32bit加法器的延时则为:32t。 为降低电路整体延时,我们可以按下图进行设计:

image

我们将电路分为两段,每段实现16bit的加法,为了使高16位与低16位同时进行运算,我们采用两个add16对高位进行计算,区别在于进位位分别为0和1,最终通过低16位加法器的输出进位作为选择控制信号,选择高16位的运算结果。这样,32bit加法器的延时就变为:16t+tmux2 ≈16t,延时降低了接近一倍,这种以空间(增加电路)换时间(提高速度)的做法,在数字电路设计中经常使用。

请创建Verilog模块,实现上图中的电路结构,其中add16不需要用户编写,其声明如下:

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

assign {cout,sum} = a + b + cin;

endmodule

输入格式

32bit a, 32bit b

输出格式

32bit sum 为 a 与 b 的和

示例代码

module add16 ( 
    input[15:0] a, 
    input[15:0] b, 
    input cin, 
    output[15:0] sum, 
    output cout 
);
    assign {cout,sum} = a + b + cin;
endmodule

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