【问题标题】:Signed Fixed Point Numbers Inequalities in VerilogVerilog中的有符号定点数不等式
【发布时间】:2017-05-06 13:15:48
【问题描述】:

我在使用 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。

【问题讨论】:

  • 是否应该将signedmaxBound 称为maxBound?减号可能是你的问题,也许做 (0 - maxBound) 看看是否有效?

标签: verilog system-verilog fixed-point


【解决方案1】:

您的问题是您使用的是按位 &amp; 运算符而不是逻辑 &amp;&amp; 运算符,它比关系运算符具有更高的优先级。所以你写的东西会被解释为

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

这不是你想要的。你想要的

(currentValue > -maxBound && currentWeight < maxBound)

被解释为

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多