#126. 进位选择加法器
进位选择加法器
题目描述
前例中的加法器成为串行进位加法器,只有等前一级的加法器运算结束产生进位位之后,下一级加法器才能利用进位位进行计算,因此电路延时会随加法器串联级数的增加而线性增加,这使得电路计算速度大大降低。设每一级全加器的延时为t,则32bit加法器的延时则为:32t。 为降低电路整体延时,我们可以按下图进行设计:
我们将电路分为两段,每段实现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