用实数计算,Verilog HDL

时间:2012-03-16 23:58:42

标签: numbers verilog hdl real-datatype

我注意到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

1 个答案:

答案 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并没有什么特别之处。大多数语言都是如此。