我正在使用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
谢谢!
是的,有可能。 SystemVerilog支持条件编译器指令,例如`ifdef
,`ifndef
,`else
,`elsife
和`endif
。请注意,这些指令使用的是grave accent(ASCII 0x60),而不是普通的撇号(ASCII 0x27)。
此外,大多数综合工具都支持宏标识符SYNTHESIS
。因此,您可以执行以下操作:
`ifdef SYNTHESIS
parameter SPI_RATE = 1_000_000;
`else
parameter SPI_RATE = 2_000_000;
`endif
是。您可以使用+define
plusarg在任何模拟中从命令行设置宏,例如:
+define+SPI_RATE=2_000_000
然后您可以在代码中的某处说
parameter SPI_RATE = `SPI_RATE;
并且在您的合成器中,将存在一种用于设置参数值的机制:请阅读您的合成器的说明。