Negabinary 中的并行前缀加法器单元

电器工程 数字逻辑 加法器
2022-01-20 11:38:43

我正在尝试为基于负二进制的加法器设计一个并行前缀加法器。Negabinary 是 base \$-2\$ 而不是熟悉的 base \$2\$ 二进制文件。每个 1 位加法器生成一个和和两个(而不是二进制中的一个)进位,这些进位进入下一个加法器。

为了使加法器更快,我想使用并行前缀结构,例如下面给出的 Ladner-Fischer 结构。我熟悉二进制系统中紫色单元的功能,但我不确定如何在 negabinary 系统中获得相同的功能。

我这样做的原因只是为了好玩,我还没有发现负二进制的任何用途。

计算总和和进位的公式:

\$s_i = a_i \oplus b_i \oplus (c_i^+ + c_i^-) \$

\$ c_{i+1}^+ = \overline{a_i}\overline{b_i}\overline{c_i^+}c_i^- \$

\$ c_{i+1}^- = a_ib_i\overline{c_i^-}+a_i c_i^+ \overline{c_i^-}+b_i c_i^+ \overline{c_i^-} \$

Ladner-fischer 携带树结构:

在此处输入图像描述

如果有任何不清楚的地方,请随时提问。

1个回答

我可能在这个问题上花费的时间比我应该的要多,但这是我的发现。

我找不到负二进制数的“纯”并行前缀加法器的任何示例。我也认为这是一个悬而未决的问题,因为我没有看到任何证据证明这不可能的。

我能得到的最接近的方法是使用两步负负加法(在文献中通常缩写为 nnba)。它基于以下属性:

设 \$f(x) = \overline{x_{n-1}}x_{n-2}...\overline{x_1}x_0\$ 和 \$g(x) = x_{n-1}\上划线{x_{n-2}}...x_1\上划线{x_0}\$。这些基本上是分别与0xAA...AA和的 XOR 操作0x55...55然后你可以证明

$$-(a +_{nb} b) = g\left(f(a) + f(b) + 1\right)$$

其中左侧是负数和 \$+_{nb}\$,而右侧的 \$+\$ 是正常的二进制和。

然后可以使用相同的属性但使用零操作数简单地反转负和:

$$-x = g\left(f(x) + f(0) + 1\right)$$

因此,为了使用并行前缀加法器求和,您可以:

  1. 计算 \$f(a)\$ 和 \$f(b)\$,即。通过反转负二进制数的每个奇数位
  2. 在设置 LSB 的进位位(\$+1\$)时计算常规二进制和,得到第一个中间和 \$s_1\$。
  3. 反转 \$s_1\$ 的所有位(这是 \$f(g(s_1))\$)。这是第一次求和的完成,同时也开始了反演。
  4. 使用并行前缀加法器将结果增加0xAA...AB(\$=f(0)+1\$),产生第二个中间和 \$s_2\$
  5. 计算 \$g(s_2)\$ (反转每个偶数位)以找到最终的负数和。

我实际上试图找到一个“纯粹的”并行前缀加法器,但我认为它太复杂了,因为我愿意花时间在它上面。原因如下:

并行前缀加法器的重点是找到 \$\{0,1\}^n \times \{0,1\}^n \rightarrow \{0,1\}^n\$ 的一些操作,它允许您可以从这些位轻松计算(在本例中为 2)进位。作为一个附加的约束,操作需要是关联的才能并行计算。例如,这基本上排除了任何 NOT 运算符(不是双重否定的一部分)。例如:\$a \circ b=a\cdot \bar b\$ 不是结合运算符,因为

$$\begin{align} (a\circ b)\circ c &= a\cdot \bar b \cdot \bar c\\ a\circ (b \circ c) &= a\cdot \overline{b \ cdot \bar c} \end{对齐}$$

请注意,您问题中进位的布尔运算符包括混合术语 \$c_i^+\overline{c_i^-}\$ 和 \$c_i^-\overline{c_i^+}\$,因此无法使用照原样。对于普通二进制加法中的单进位,在考虑生成传播时如何构造该运算符变得非常明显,但对于负进位似乎并不那么明显。