Floating point verilog中的浮点

Floating point verilog中的浮点,floating-point,verilog,Floating Point,Verilog,我在verilog中有一个浮点数,我想把它向右移动,使之成为IEEE标准,但我不知道点在哪里,以了解它是否是标准的(停止移动) 我能做什么 第二个问题: 如果我像这样移动浮点:10001.11到右边,verilog会发生什么?0100.111还是0100.11 最新的SystemVerilog规范规定: 5.7.2实文字常量 实数常量应按照IEEE标准754的规定表示,IEEE标准为 双精度浮点数 6.12实时、短实时和实时数据类型 real*数据类型与C double相同。shortreal

我在verilog中有一个浮点数,我想把它向右移动,使之成为IEEE标准,但我不知道点在哪里,以了解它是否是标准的(停止移动)

我能做什么

第二个问题: 如果我像这样移动浮点:10001.11到右边,verilog会发生什么?0100.111还是0100.11

最新的SystemVerilog规范规定:

5.7.2实文字常量

实数常量应按照IEEE标准754的规定表示,IEEE标准为 双精度浮点数

6.12实时、短实时和实时数据类型
real*数据类型与C double相同。shortreal数据类型与C浮点相同。实时声明应与真实声明同义,并且可以互换使用。这三种类型的变量统称为实变量

*实数和短实数类型如IEEE标准754所述


要确定的一件事是,你是在处理一个数字,还是一个数字。实际上,它们的存储方式非常不同,定点数字更容易处理

  • 固定点号的存储方式与任何其他整数相同。不同之处在于,在解释它们时,在位位置添加一个小数点。例如,您可以存储一个16 but数字,但最后4位位于小数点之后。这有时被称为12.4,请确保您对代码进行了注释,以明确这一点。您还需要跟踪数字是纯正值还是2的补码值

    • 浮点使用尾数和指数存储。它们可以代表更大范围的值,但操作起来更复杂
对于你的第二个问题,我假设你使用的是定点算法。小数点是固定的,不会移动。以你为例:

10001.11>>1=11000.11


请注意,如果您的数字是带符号的2的补码,则MSB将从移位前数字的MSB复制(这将保持移位前后的符号)。

您将讲述定点操作。移位操作不适用于浮点数

Verilog有float类型-real,但该类型不用于合成,不支持opation>>(shift)

对于浮点数,所有语言中都未定义移位


但若你们想将数字相乘,你们必须使用指数和尾数部分,使之成为IEEE标准。您需要遵循IEEE-754格式来表示浮点数。标准中有不同类型的浮点表示法

  • 半精度(或FP16),其中1位表示符号,5位表示指数,10位表示尾数

  • 全精度(或FP32),其中1位表示符号,8位表示指数,23位表示尾数 等等


  • 您可以使用FP16和FP32表示法执行任何类型的操作,如加法、减法、,乘法等。

    为什么你需要移位以使其成为IEEE标准这是IEEE标准754当你尝试
    >
    移位时发生了什么我得到:`实表达式的非法运算符:>>。`为什么不直接乘以0.5。我想使其成为1.000111以进行规范化(说使其成为标准是我的错),tnxi将乘以0.5,但会发生什么?0100.111 ? @Morgan您不能在reals上使用
    >
    操作符,因此不会发生任何事情。也只是为了确保您知道real是不可合成的。好的,我将使用*0.5,但会发生什么?0100.11还是0100.111?@morgan