Main Content

数字硬件中的数据类型和定标

定点数据类型

在数字硬件中,数字以二进制字形式存储。二进制字是固定长度的位(1 和 0)序列。硬件组件或软件函数如何解释这个由 1 和 0 组成的序列是由数据类型定义的。二进制数字以定点或浮点数据类型的形式来表示。

定点数据类型具有以下特征:以位为单位的字长、二进制小数点的位置,以及是有符号还是无符号。二进制小数点的位置用来定标和解释定点值。

例如,广义定点数(有符号或无符号)的二进制表示如下所示:

其中

  • bi 是第 i 个二进制数字。

  • wl 是以位为单位的字长。

  • bwl-1 是最高有效位或最高位 (MSB) 的位置。

  • b0 是最低有效位或最低位 (LSB) 的位置。

  • 二进制小数点显示在 LSB 左侧的四个位置处。在此示例中,该数字称为有四个小数位,或者小数长度为 4。

定点数据类型可以是有符号的也可以是无符号的。定点值是有符号还是无符号通常不会在二进制字中显式编码;也就是说,没有符号位。但是,符号信息在计算机架构中是隐式定义的。

有符号二进制定点数在计算机硬件中通常以三种方式之一表示:

  • 原码 - 二进制字中有一位是专用符号位,其余位用来对数字的量级进行编码。使用原码表示的求反包括将符号位从 0(正)翻转为 1(负),或从 1 翻转为 0。

  • 1 的补码 - 对 1 的补码中的二进制数求反需要按位补码。也就是说,所有 0 都翻转为 1,所有 1 都翻转为 0。在 1 的补码记数法中,零有两种表示方式。所有位均为 0 的二进制字表示“正”零,而所有位均为 1 的二进制字表示“负”零。

  • 2 的补码 - 使用有符号 2 的补码求反时,先对位取反(转换为 1 的补码),然后使用二元加法加 1。例如,000101 的 2 的补码是 111011。

2 的补码是有符号定点数的最常用表示方式,也是 Fixed-Point Designer™ 文档使用的唯一表示方式。

二进制小数点的解释

二进制小数点是用于对定点数进行定标的方式。通常由软件确定二进制小数点。当执行加法或减法等基本数学运算时,无论定标因子的值如何,硬件都使用相同的逻辑电路。本质上,逻辑电路并不知道存在定标因子。它们视二进制小数点就在 b0 的右边一样来执行有符号或无符号定点二进制代数。

Fixed-Point Designer 支持一般的二进制小数点定标 V = Q ✕ 2E,其中 V 是真实值,Q 是存储的整数值,固定指数 E 等于小数长度的负数。换言之,RealWorldValue = StoredInteger ✕ 2−FractionLength

小数长度定义存储整数值的定标。字长限制存储的整数可取的值,但不限制小数长度可取的值。软件不会根据存储的整数 Q 的字长限制指数 E 的值。由于 E 等于 −FractionLength,因此没有必要将二进制小数点限制为要紧连着小数;小数长度可以是负数或大于字长。

例如,由三个无符号位组成的字在科学记数法中通常以下列方式之一表示:

bbb.=bbb.×20bb.b=bbb.×21b.bb=bbb.×22.bbb=bbb.×23

如果指数大于 0 或小于 -3,则表示将包含额外的零:

bbb00000.=bbb.×25bbb00.=bbb.×22.00bbb=bbb.×25.00000bbb=bbb.×28

这些额外的 0 永远不会变为 1,因此它们不会出现在硬件中。与浮点指数不同,定点指数从不出现在硬件中,因此定点指数不受有限位数的限制。

例如,假设一个字长为 8、小数长度为 10、存储的整数值为 5 的有符号值(二进制值 00000101)。真实值使用以下公式计算:RealWorldValue = StoredInteger ✕ 2−FractionLength。在本例中,为 RealWorldValue = 5 ✕ 2−10 = 0.0048828125。由于小数长度比字长要长 2 位,因此存储的整数的二进制值是 x.xx00000101,其中 x 是隐含零的占位符。0.0000000101(二进制)等效于 0.0048828125(十进制)。有关使用 fi 对象的示例,请参阅 Fraction Length Greater Than Word Length

浮点数据类型

浮点数据类型由符号位、小数(或尾数)字段和指数字段来表征。Fixed-Point Designer 遵循二进制浮点算术的 IEEE® 标准 754-1985(在本指南中简称为 IEEE 标准 754),并支持半精度、单精度和双精度数据类型。

选择数据类型时,必须考虑以下因素:

  • 结果的数值范围

  • 结果所需的精度

  • 相关联的量化误差(即舍入模式)

  • 处理异常算术条件的方法

这些选择项取决于您的特定应用程序、使用的计算机架构和开发成本等。

通过 Fixed-Point Designer,您可以研究动态数字系统建模中数据类型、范围、精度和量化误差之间的关系。使用 Simulink® Coder™,您可以基于该模型生成生产代码。使用 HDL Coder™,您可以从 Simulink 模型和 Stateflow® 图中生成可移植的、可综合的 VHDL 和 Verilog 代码。

相关主题