为仿真和综合定义不同的参数值

问题描述 投票:0回答:2

我正在使用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

谢谢!

verilog system-verilog modelsim synplify
2个回答
0
投票

是的,有可能。 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 

0
投票

是。您可以使用+define plusarg在任何模拟中从命令行设置宏,例如:

+define+SPI_RATE=2_000_000

然后您可以在代码中的某处说

parameter SPI_RATE = `SPI_RATE;

并且在您的合成器中,将存在一种用于设置参数值的机制:请阅读您的合成器的说明。

© www.soinside.com 2019 - 2024. All rights reserved.