在Verilog中的条件语句中使用减法

时间:2017-07-02 20:28:53

标签: conditional verilog

我对Verilog比较陌生,而且我一直致力于一个项目,在理想的世界中,我希望有一个如下的任务声明:

assign isinbufferzone = a > (packetlength-16384) ? 1:0;

其中包含此类型行的文件将进行编译,但isinbufferzone在应该的时候不会变高。我假设它对条件中的减法不满意。我能够通过移动内容使模块工作,但结果比我认为应该需要的更复杂,延迟真的开始加起来。有没有人对最简洁的方法有什么想法?预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果isinbufferzone为16384或更低,无论packetlength如何,您可能希望a变高,但不会发生这种情况。

如果packetlength小于16384,则值packetlength - 16384不是负数 - X ,而是一些非常大的正数(可能是2 32 < / sup> - X ,或2 17 - X ,我不太确定哪个,但它没有但是,因为Verilog默认执行无符号算术。这称为integer overflow

您可以尝试通过将某些信号声明为signed来解决此问题,但在我看来,最安全的方法是明确处理溢出情况并确保仅针对packetlength计算减法结果值16384或更高:

assign isinbufferzone = (packetlength < 16384) ? 1 : (a > packetlength - 16384);