什么是规范签名数字?

Ros*_*ers 9 math floating-point

什么是规范有符号数字(CSD)以及如何将二进制数转换为CSD并将CSD转换回二进制数?你怎么知道,如果一个CSD的数字应该规范地选择为+,-0

mgk*_*bbs 7

有符号位二进制在每个2的幂位置使用三个符号:-1,0,1.表示的值是位置系数乘以相应功率2的总和,就像二进制一样,不同之处在于系数可以是-1.数字在此系统中可以有多个不同的表示.

规范的带符号数字表示是相同的,但受限于没有两个连续数字是非0的约束.可以看出,每个数字在CSD中都有唯一的表示形式.

请参阅Parhi的位级算术中的幻灯片31以获取更多信息,包括二进制到CSD转换算法.


np8*_*np8 7

什么是规范的有符号数字格式?

规范有符号数字 (CSD) 是一种数字表示形式。CSD 演示文稿的重要特征是:

  1. 数字的 CSD 表示由数字 0、1 和 -1 组成。[ 1 , 2 ]。
  2. 数字的 CSD 表示是独一无二的 [ 2 ]。
  3. 非零数字的数量最少 [ 2 ]。
  4. 不能有两个连续的非零数字 [ 2 ]。

如何将数字转换为其 CSD 表示?

首先,找到数字的二进制表示。

示例 1 以数字 287 为例,其二进制表示形式为 1 0001 1111。(256 + 16 + 8 + 4 + 2 + 1 = 287)

1 0001 1111
Run Code Online (Sandbox Code Playgroud)

从右侧 (LSB) 开始,如果您在一行中发现多个非零元素(1 或 -1),则取所有这些元素,再加上下一个零。(如果 MSB 左侧没有零,则在那里创建一个)。我们看到这个数字的第一部分是

01 1111
Run Code Online (Sandbox Code Playgroud)

给数字加1(即把0 改为1,所有的1 都改为0),并强制最右边的数字为-1。

01 1111 -> 10 000-1
Run Code Online (Sandbox Code Playgroud)

您可以检查数字是否仍然相同:16 + 8 + 4 + 2 + 1 = 31 = 32 + (-1)。现在这个数字看起来像这样

1 0010 000-1
Run Code Online (Sandbox Code Playgroud)

由于没有更多连续的非零数字,转换完成。因此,数字 287 的 CSD 表示为 1 0010 000-1,即 256 + 31 - 1。

示例 2

来一个更具挑战性的例子怎么样。数字 345。在二进制中,它是

1 0101 1001
Run Code Online (Sandbox Code Playgroud)

找到第一个位置(从右开始),其中连续有多个非零数字。也取下一个零。加一,并强制最右边的数字为-1。

1 0110 -1001
Run Code Online (Sandbox Code Playgroud)

现在我们刚刚创建了另一对,必须对其进行转换。取011, 并将其加一 (get 100),并强制最后一位数字为 -1。(得到10-1)。现在这个数字看起来像这样

1 10-10 -1001
Run Code Online (Sandbox Code Playgroud)

再做同样的事情。这一次,您将不得不想象 MSB 左侧有一个零。

10 -10-10 -1001
Run Code Online (Sandbox Code Playgroud)

您可以通过观察以下几点来确保这是正确的 CSD 演示: 1) 没有连续的非零数字。2) 总和加上 325 (512 - 128 - 32 - 8 + 1 = 345)。

该算法的更正式定义可以在 [ 2 ] 中找到。

CSD 演讲背后的动机

CSD 也可能用于其他一些应用,但这是数字微电子的观点。它常用于数字乘法。[ 1 , 2 ]。数字乘法包括两个阶段:计算部分乘积和总结部分乘积。让我们考虑的乘法10101011

       1010
x      1011
Run Code Online (Sandbox Code Playgroud)
       1010
      1010
     0000
+   1010 
Run Code Online (Sandbox Code Playgroud)
=   1101110
Run Code Online (Sandbox Code Playgroud)

正如我们所看到的,1010必须相加的非零部分积('s)的数量取决于乘数中非零数字的数量。因此,部分乘积之和的计算时间取决于乘法器中非零位数的数量。因此,使用 CSD 转换数字的数字乘法比使用传统数字数字要快。CSD 形式包含的非零数字比二进制表示(平均)少 33%。例如,使用 CSD 表示时,传统的双精度浮点乘法可能需要 100.2 ns,但仅需要 93.2 ns。[ 1 ]

那么负面的呢。微电路中实际上是否存在三种状态(电压电平)?不,用负号计算的部分乘积不会立即相加。相反,您将这些数字的2 的补码(即负数表示)添加到最终总和中。


资料来源:

[ 1 ] D. Harini Sharma, Addanki Purna Ramesh:使用规范有符号数字的浮点乘法器

[ 2 ] Gustavo A. Ruiz,Mercedes Grand:高效的规范签名数字重新编码