允许在包内重新声明某些参数以进行模拟

Allowing re-declaration of certain parameters inside package for simulation

我有一个系统有一些超时,大约为秒,出于模拟的目的,我想将它们减少到微秒或毫秒。

我根据我的 FPGA 时钟的时钟周期数定义了这些超时。举个例子

package time_pkg

parameter EXT_EN_SIG_TIMEOUT = 32'h12345678;
...
endpackage

我将计数器与常量全局参数 EXT_EN_SIG_TIMEOUT 进行比较,以确定现在是否是断言启用信号的正确时间。

我想在名为 time_pkg 的文件中的 time_pkg.v 包中定义此参数(以及其他一些参数),我想使用此包进行综合。

但是当我在 Riviera Pro(或 Modelsim)中模拟我的设计时,我想在名为 time_pkg_sim.v 的文件中定义第二个参数,该文件在 time_pkg.v 之后导入并覆盖参数与 time_pkg.

中已定义的名称相同

如果我简单地制作一个 time_pkg_sim.v 并在其中包含一个同名包 (time_pkg),那么 Riviera 会抱怨,因为我正在尝试重新声明一个已经声明的包。

我不是特别想在我的 hdl 中乱扔语句来检查是否设置了模拟标志,以便决定是否将计数器与 EXT_EN_SIG_TIMEOUTEXT_EN_SIG_TIMEOUT_SIM[=20= 进行比较]

在使用模拟工具时,是否有允许重新定义包内参数的标准方法?

不,您不能覆盖包中的参数。你可以做的是有两个不同的文件名,用不同的参数值声明同一个包,然后选择编译哪一个进行仿真或综合。

在包中包含一个带有模拟器 falg 的大量 ifdef 可能是一个更好的主意。这样你的代码就不会到处都是 ifdef ,只是集中在一个地方。此外,模块本身的代码不需要更改。