我在verilog
中有浮点数,我想把它移到右边制作IEEE标准,但我不知道重点在哪里,要知道它是否是标准的(停止移位)
我该怎么办?
第二个问题: 如果我像这样移动浮点数:10001.11到右边verilog会发生什么? 0100.111或0100.11?
答案 0 :(得分:0)
IEEE 1800-2012最新的SystemVerilog规范声明:
5.7.2真实常量
实际的文字常数应按照IEEE标准754(IEEE标准)的描述来表示 双精度浮点数。
...
6.12真实,短期和实时数据类型
真正的*数据类型与C double相同。 shortreal数据类型与C float相同。实时声明应与实际声明同义,并可互换使用。这三种类型的变量统称为实变量*真实和短期类型由IEEE Std 754描述。
答案 1 :(得分:0)
要确定的一件事是您是在处理floating point号码还是fixed-point号码。它们在实践中的存储方式非常不同,定点数更容易处理。
固定点编号的存储方式与任何其他整数相同。区别在于它们被解释为在位位置添加小数点。例如,您可以存储一个16但是数字,但是说最后4位在小数点之后。这有时被称为12.4,请确保您对代码进行注释以明确这一点。您还需要跟踪该数字是仅为正值还是2的补码值。
对于你的第二个问题,我假设你正在使用定点算术。小数点是固定的,不会移动。所以对你的例子来说:
10001.11>> 1 = 11000.11
请注意,如果您的号码是2号补码,那么MSB将从班次前的号码MSB中复制(这样可以保留班次前后的符号)。
答案 2 :(得分:0)
您讲述修复点操作。移位操作不适用于浮点数。
Verilog具有浮动类型 - 真实,但此类型不适用于合成且不支持oparation>> (移位)
对于浮点数,在所有语言中都没有定义移位。
但是如果你想要乘以数字,你必须使用指数和尾数部分
答案 3 :(得分:0)
使其成为IEEE标准。您需要遵循IEEE-754格式来表示浮点数。标准中有不同类型的浮点表示。
半精度(或FP16),其中符号可以为1位,指数为5位,尾数为10位。
全精度(或FP32),其中符号可以为1位,指数为8位,尾数为23位 等等。
您可以使用FP16和FP32表示执行任何类型的操作,例如加法,减法,乘法等。