Verilog中的有符号不动点

时间:2017-05-06 13:15:48

标签: verilog system-verilog fixed-point

我遇到verilog模块的问题,我需要检查一个固定点数是否在设定范围内,但我有意想不到的行为。这是我想要完成的简化版本:

reg signed [4:0] signedmaxBound =     5'sb01010; // 10
reg signed [4:0] currentValue = 5'sb00000; // 0

if (currentValue > -maxBound & currentWeight < maxBound)
    // Execute Code

我只想知道这段代码是否能完成预期的任务(我已将问题排除在包含此代码的模块中)。我不确定-maxBound是否会正确执行二进制补码操作以表示负值。

此外,我不确定比较器操作员是否生效。即,在这种简化格式中,10由01010表示,-15由10000表示。 -15然而01010不大于10000。

1 个答案:

答案 0 :(得分:2)

您的问题是您使用的是逐位&运算符而不是逻辑&&运算符,它的优先级高于关系运算符。那么你所写的东西被解释为

(currentValue > ((-maxBound) & currentWeight)) < maxBound)

这不是你想要的。你想要

(currentValue > -maxBound && currentWeight < maxBound)

被解释为

(currentValue > (-maxBound)) && (currentWeight < maxBound)

关系运算符会查看其操作数的签名 - 它们都需要签名才能进行签名比较。