关注我的公众号c137Lab获取更多相关内容
基本 N N N 位二进制加法器由 N N N 个全加器(FA)组成,全加器的布尔方程如下:
s k = x k ⊕ y k ⊕ c k s_k=x_k\oplus y_k\oplus c_k sk=xk⊕yk⊕ck
对于 2C 加法器,最低位可以设计成半加器来减少占用。
逐位进位加法器
最简单的加法器,将 N N N 个全加器(FA)串联组成。一次计算两位,最长的延迟来自通过所有阶段的进位的脉冲。使用跳跃进位、先行进位、条件和或进位选择加法器可以降低这一延迟。
流水线加法器
DSP算法的内部数据流规则决定了在DSP解决方案中流水线技术会得到广泛运用。
流水线技术
通俗的说,流水线技术即在规模较大的逻辑电路中使用寄存器将其切分,通过缩短一个时钟周期内信号通过的长度来提高吞吐量,但是需要付出更多的功耗和面积。
下图展示了如何将组合逻辑转换为流水线逻辑。
FPGA实现流水线加法器
下图展示了两种不同的实现方法:
32位流水线加法器代码如下:
`timescale 1ns / 1ps
module PipelineAdder(
input [31:0] x,
input [31:0] y,
input clk,
output [31:0] sum,
output LSB_C
);
reg [15:0] L1, L2, s1;
reg [16:0] r1;
reg [15:0] M1, M2, r2, s2;
always@(posedge clk)
begin
L1 <= x[15:0];
L2 <= y[15:0];
M1 <= x[31:16];
M2 <= y[31:16];
r1 <= {1'b0 + L1} + {1'b0 + L2};
r2 <= M1 + M2;
s1 <= r1[15:0];
s2 <= r1[16] + r2;
end
assign LSB_C = r1[16];
assign sum = {s2, s1};
endmodule
模加法器
模加法器是RNS-DSP设计中最重要的构建模块,既可以用于加法,也可以通过索引算法用于乘法。
目前有多种模加法器设计,在此不一一介绍,下图展示两种分别基于MPX和ROM的流水线式模加法器。
尽管ROM提供了很高的速度,但是ROM本身产生了4个周期的流水线延迟。多路复用器的速度相对较慢。流水线版本通常能够实现3倍速度。在3级流水线和6位宽的通道上实现加法器时会出现最大吞吐量。
参考文献:
[1]:Digital Signal Processing with Field Programmable Gate Arrays --U.Meyer-Baese
[2]:Verilog数字系统设计教程(第二版)–夏宇闻