我使用的是systemVerilog,我有一个包,它保存了一些模块参数值(例如parameter SPI_RATE = 2_000_000;)。有什么方法可以为仿真设定一个值,为综合设置一个不同的值吗?(我正在使用ModelSim)。例如,我想要这样的东西:
if(IN_SIM) begin
parameter SPI_RATE = 2_000_000;
end
else begin
parameter SPI_RATE = 1_000_000;
end谢谢!
发布于 2020-03-31 09:24:32
是的,这是可能的。SystemVerilog支持条件编译器指令,如`ifdef、`ifndef、`else、`elsif和`endif。注意,这些指令使用的是严重重音(ASCII 0x60),而不是普通的撇号(ASCII 0x27)。
此外,大多数合成工具都支持宏标识符SYNTHESIS。因此,您可以执行以下操作:
`ifdef SYNTHESIS
parameter SPI_RATE = 1_000_000;
`else
parameter SPI_RATE = 2_000_000;
`endif 发布于 2020-03-31 09:26:02
是。您可以在任何模拟中使用+define plusarg从命令行设置宏,例如:
+define+SPI_RATE=2_000_000然后在你的代码中,你可以说
parameter SPI_RATE = `SPI_RATE;在合成器中,将有一种设置宏值的机制:读取合成器的指令。
发布于 2022-08-08 21:29:22
国际水文学组织
使用第一个答案
` `ifdef合成
比第三个答案更可取
/*合成translate_off */
最后一种形式是/* synopsys translate_off */的变体,这对于一个合成工具来说是独一无二的。
宏合成已经被普遍使用了十多年,并且应该由任何合成工具来定义,没有任何额外的命令行选项。
如果您想要运行等效检查(rtl与门级netlist),您可能需要通过推荐的方法定义合成宏。
https://stackoverflow.com/questions/60946670
复制相似问题