有什么意义以及如何在rocket-chip / vsim中使用`define SYNTHESIS?

时间:2016-06-03 05:41:03

标签: riscv

我看到了一堆

`ifndef SYNTHESIS

some_variable = {1 {$随机}};

我生成的RTL verilog中的

语句。这些语句在门级综合期间不会被合成。当我这样做时:

make output / rv64ui-p-auipc.vpd(以/ rocket-chip / vsim为例)

我想基于合成工具将看到的RTL生成波形。我尝试通过将'+ define + SYNTHESIS = 1'设置为VCS选项来完成此操作,但这样做会在运行测试时创建某种无限循环。

那些`ifndef语句究竟在做什么?它们的重要性是什么(即为什么定义SYNTHESIS变量会产生无限循环?)

谢谢!

1 个答案:

答案 0 :(得分:0)

Rocket Chip仿真基础设施依赖于所有初始化为0或1的状态。如果在仿真开始时没有初始化寄存器,某些仿真器(如Synopsys VCS)可能会将寄存器初始化为X,这可能导致仿真失败(这是您在定义SYNTHESIS时)时观察到的行为。因为测试应该对随机初始化很稳健,所以预合成RTL被注释为随机初始化寄存器状态。

综合工具(例如Synopsys Design Compiler)将忽略这些ifndef块中包含的RTL。请注意,合成后RTL的仿真还必须将所有寄存器初始化为0或1,以使仿真正常工作。