Verilog 宏,用于检查是否在模拟或合成中



我需要修改设计源的行为,以便在仿真和综合中执行一些略有不同的操作(我需要在仿真中将时间戳清零以获得确定性结果。 是否定义了 verilog 宏,以便我可以知道源在哪种模式下使用? 像...

`ifdef __SYNTHESIS__
timestamp <= hardware_ts;
`else
timestamp <= 0;
`endif

这将是非常特定于工具的。来自 Mentor 的模拟器定义MODEL_TECHQUESTA

在命令行上运行任何合成工具时,最好使用+define+__SYNTHESIS__自己定义宏。

另一种选择是向每个模块添加一个参数,无论您处于合成模式还是模拟模式,该参数都会向下传递。 只需将默认值设置为正确合成所需的值,除非您从测试台实例化,否则您无需执行任何特殊操作。

对于像HOW_MANY_CLOCK_CYCLES_TO_WAIT_FOR_PLL_TO_LOCK这样的东西也很有用,它们在合成/现实中会有很大的不同(取决于你想在模拟中等待多长时间(。

最新更新