Verilog中的有理数

Verilog中的有理数,verilog,rational-numbers,Verilog,Rational Numbers,我需要在我的Verilog代码中使用有理数。我查找了任何资源,但找不到有关此问题的任何信息。如何在Verilog中定义有理数。Verilog有一个用于实数(浮点)的real数据类型: 在HDL中实现有理数有两种主要方法: 1) 如果你想要一个总是2的幂的固定分母,你可以简单地使用固定点号,它有正常的2的补码表示,但是有索引小于零的位,所以就像一个[3:0]“0111”将是0*2**3+1*2**2+1*2**0=7,一个[1:-2]“0111”将是0*2**1+1*2**0+1*2**-1+1*

我需要在我的Verilog代码中使用有理数。我查找了任何资源,但找不到有关此问题的任何信息。如何在Verilog中定义有理数。

Verilog有一个用于实数(浮点)的
real
数据类型:


在HDL中实现有理数有两种主要方法:

1) 如果你想要一个总是2的幂的固定分母,你可以简单地使用固定点号,它有正常的2的补码表示,但是有索引小于零的位,所以就像一个
[3:0]
“0111”
将是
0*2**3+1*2**2+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,您可以将此行为包装为数据类型


祝你好运!

它需要可合成吗?
real data;
initial data = 1.55;