Verilog浮点运算在编译时?

问题描述 投票:0回答:1

我的Verilog testbench代码定义了一个模块,有这些参数。

parameter PHASE_BITS = 32;
parameter real MAX_PHASE = 1 << PHASE_BITS;

我无法得到 MAX_PHASE 具备预期值 4294967296 或其近似值;ModelSim向我展示了 0 而不是。尽管事实是 MAX_PHASE 被声明为实数。

我想这其中涉及到一些整数溢出,因为如果将 PHASE_BITS 是降低到31。

如何使这个参数等于2的另一个参数的幂?

verilog modelsim
1个回答
2
投票

问题出在右手表达式本身。

1 << PHASE_BITS

它是在考虑它被存储到的变量类型之前被评估的。因为 1 是一个整数文字,而Verilog中的整数是有符号的32位,所以 << 操作符(左移操作符)将输出一个相同类型的整数,并将导致溢出,如果 PHASE_BITS 是高于31的。

我们可以强迫 1 来代替一个真实的文字。

1.0 << PHASE_BITS

但这会导致编译时的错误,因为... << 对于实值没有定义。

让我们使用普通的2-power-to-N。

2.0 ** PHASE_BITS

这将产生预期的结果。4.29497e+09.

© www.soinside.com 2019 - 2024. All rights reserved.