2

我注意到 Verilog 将我的实数结果四舍五入为整数结果。例如,当我查看模拟器时,它显示 17/2 的结果为 9。我该怎么办?无论如何定义类似 a: 的东西output real reg [11:0] output_value吗?还是必须通过模拟器设置来完成?

仅模拟(无合成)。示例:
x 定义为有符号输入,output_value 定义为输出 reg。

output_value = ((x >>> 1) + x) + 5; 

如果 x=+1 则输出值必须是:13/2=6.5

但是,当我模拟时,我看到了output_value = 6.

4

1 回答 1

1

代码会有所帮助,但我怀疑你根本没有划分实数。17 和 2 是整数,所以像这样的简单语句将进行整数除法。

17   / 2   = 8 (not 9, always rounds towards 0)
17.0 / 2.0 = 8.5

在你的第二种情况下

output_value = ((x >>> 1) + x) + 5

如果x是 1,x >>> 1则为 0,而不是 0.5,因为您刚刚超出了单词的底部。

output_value = ((1 >>> 1) + 1) + 5 = 0 + 1 + 5 = 6

这里的verilog没有什么特别之处。大多数语言都是如此。

于 2012-03-17T11:30:45.283 回答