Verilog 中有符号定点数不等式

Signed Fixed Point Numbers Inequalities in Verilog

我在使用 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 表示。10 > -15 但是 01010 不大于 10000。

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

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

这不是你想要的。你要

(currentValue > -maxBound && currentWeight < maxBound)

这被解释为

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

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