我注意到Verilog将我的实数结果舍入为整数结果。例如,当我查看模拟器时,它将17/2的结果显示为9.我该怎么办?无论如何定义像: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
。
答案 0 :(得分: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并没有什么特别之处。大多数语言都是如此。