我对Verilog比较陌生,而且我一直致力于一个项目,在理想的世界中,我希望有一个如下的任务声明:
assign isinbufferzone = a > (packetlength-16384) ? 1:0;
其中包含此类型行的文件将进行编译,但isinbufferzone
在应该的时候不会变高。我假设它对条件中的减法不满意。我能够通过移动内容使模块工作,但结果比我认为应该需要的更复杂,延迟真的开始加起来。有没有人对最简洁的方法有什么想法?预先感谢您的帮助。
答案 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);