【发布时间】:2011-05-16 15:32:00
【问题描述】:
我需要在我的 Verilog 代码中使用有理数。我查找了任何资源,但找不到有关此问题的任何信息。如何在 Verilog 中定义有理数。
【问题讨论】:
-
需要合成吗?
我需要在我的 Verilog 代码中使用有理数。我查找了任何资源,但找不到有关此问题的任何信息。如何在 Verilog 中定义有理数。
【问题讨论】:
Verilog 有一个 real 数据类型,用于实数(浮点)数:
real data;
initial data = 1.55;
【讨论】:
在 HDL 中实现有理数有两种主要方法:
1) 如果您想要一个始终是 2 的幂的固定分母,您可以简单地使用具有正常二进制补码表示的定点数,但具有索引小于零的位,就像 @ 987654321@ "0111" 将是 0*2**3 + 1*2**2 + 1*2**1 + 1*2**0 = 7,[1:-2] "0111" 将是 0*2**1 + 1*2**0 + 1*2**-1 + 1*2**-2 = 1.75 。在常规的 Verilog 中,您可以使用这样的负指标,但是当您手动执行操作时(例如,将每个操作放在它自己的函数或模块中),您将不得不处理移位和缩放。使用 SystemVerilog 或 VHDL,您可以创建(或使用现有的)定点包,自动处理数据类型。
2) 如果您想要任意分母,您可以简单地使用两个 reg 来表示每个值,其中一个是分子,一个是分母。同样,您将不得不手动处理数学运算的实现。同样,如果您使用 SystemVerilog 或 VHDL,您可以将此行为封装到数据类型中。
祝你好运!
【讨论】: