允许在包内重新声明某些参数以进行模拟
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_TIMEOUT
或 EXT_EN_SIG_TIMEOUT_SIM
[=20= 进行比较]
在使用模拟工具时,是否有允许重新定义包内参数的标准方法?
不,您不能覆盖包中的参数。你可以做的是有两个不同的文件名,用不同的参数值声明同一个包,然后选择编译哪一个进行仿真或综合。
在包中包含一个带有模拟器 falg 的大量 ifdef 可能是一个更好的主意。这样你的代码就不会到处都是 ifdef ,只是集中在一个地方。此外,模块本身的代码不需要更改。
我有一个系统有一些超时,大约为秒,出于模拟的目的,我想将它们减少到微秒或毫秒。
我根据我的 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_TIMEOUT
或 EXT_EN_SIG_TIMEOUT_SIM
[=20= 进行比较]
在使用模拟工具时,是否有允许重新定义包内参数的标准方法?
不,您不能覆盖包中的参数。你可以做的是有两个不同的文件名,用不同的参数值声明同一个包,然后选择编译哪一个进行仿真或综合。
在包中包含一个带有模拟器 falg 的大量 ifdef 可能是一个更好的主意。这样你的代码就不会到处都是 ifdef ,只是集中在一个地方。此外,模块本身的代码不需要更改。