整数环绕中的 Modelsim 错误标志 - 无法更改为 vhdl 代码

问题描述 投票:0回答:1

我有一个旧的 VHDL 代码,我需要使用 Modelsim 运行模拟。该代码“包括”扭曲条件,该条件在实际硬件中没有影响,但在模拟中失败。 我知道这不应该这样写,因为实现取决于综合工具,但它是 20 年前写的,我现在必须处理它...... 在状态机内,下一个状态由从预加载值减少到 0 的信号值确定。不幸的是,减量线不在 If then else 语句内,因此“bitcounter”在为零时也会减少。环绕值不用于代码中的任何内容(在“稍后”状态之一,信号再次预加载),因此硬件中一切都很好。

信号定义: 位计数器:整数范围 0 到 11;

有问题的代码片段

进程(时钟) 开始 如果上升沿(时钟) 然后

案例状态是 当....

...

当 GET_DATA_2 => IF(位计数器 = 0)
然后 状态 <= LAST_CYCLES_HIGH;
别的 状态 <= GET_DATA1; END IF; Bitcounter <= Bitcounter-1; ...

Modelsim 失败,因为位计数器递减至 -1

是否有任何选项可以通过模拟命令来补偿此错误代码,或者通过将“-1”声明为“允许”(扩展“在 Modelsim 端”的范围)或抑制模拟中的此特定错误?

虽然最简单的方法肯定是更改 VHDL 代码,但这最终会导致不同的配置数据,这是应该避免的......

integer vhdl word-wrap modelsim suppress
1个回答
0
投票

这段代码曾经运行过吗?如果是这样,正如评论所暗示的那样,它可能是在没有范围检查的情况下运行的。

注意 Modelsim 不会“失败”;您只是收到一个断言错误,表明该值现在超出了范围。这就是范围的工作原理:没有隐含的模算术;这只是一张支票。如果您不喜欢这样,请删除子类型声明(

range
)并仅使用普通的
integer
。然而,最初的设计者想必使用该范围是有原因的,因此最好修复递减操作,以便它首先检查值是否为零,然后换行为 11(或
Bitcounter'high
)。

请注意,如果

Bitcounter
实际上是综合的,您应该保留范围并修复减量。

© www.soinside.com 2019 - 2024. All rights reserved.