我注意到Verilog将实数结果舍入为整数结果。例如,当我查看模拟器时,它将17/2的结果显示为9。我该怎么办?有没有什么办法定义像:output real reg [11:0] output_value这样的东西?或者这是必须由模拟器设置完成的事情?
仅模拟(无合成)。示例:
X定义为带符号的输入,output_value定义为输出寄存器。
output_value = ((x >>> 1) + x) + 5; 如果为x=+1,则输出值必须为:13/2=6.5。
然而,当我模拟时,我看到的是output_value = 6。
发布于 2012-03-17 19:30:45
代码会有所帮助,但我怀疑你根本没有区分reals。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没有什么特别之处。这对于大多数语言都是正确的。
https://stackoverflow.com/questions/9745989
复制相似问题