3

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

谢谢!

4

3 回答 3

3

是的,这是可能的。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-31T09:24:32.293 回答
0

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

+define+SPI_RATE=2_000_000

然后在你的代码的某个地方,你可以说

parameter SPI_RATE = `SPI_RATE;

在您的合成器中将有一种设置宏值的机制:阅读合成器的说明。

于 2020-03-31T09:26:02.547 回答
-1

使用 Synplify Pro,您可以使用 /*synthesis translate_off */ /*synthesis translate_off */ 来完成此操作,在 VHDL 中可以使用类似的结构,并进行适当的语法/注释更改。Xilinx Vivado 使用 // 综合 translate_off 和 // 综合 translate_on

const logic IN_SIM = 1'b0
/*synthesis translate_off */
    || 1'b1
/*synthesis translate_on */
    ;

这种结构的优点是它不需要任何外部脚本更改。

于 2020-04-01T14:48:03.700 回答