我看到一堆
` `ifndef合成
some_variable={1{$random}};
语句在我生成的RTL verilog中。这些语句在门级综合期间不会被综合。当我这样做的时候:
输出/rv64ui-p-auipc.vpd(以/rocket-chip/vsim为例)
我想基于RTL生成合成工具将看到的波形。我尝试通过将'+define+SYNTHESIS=1‘设置为VCS选项来实现这一点,但这样做会在运行测试时造成某种类型的无限循环。
这些‘`ifndef’语句到底在做什么?它们的意义是什么(即为什么在这里定义合成变量会创建无限循环?)
谢谢!
发布于 2016-06-21 18:19:35
火箭芯片仿真基础结构依赖于将所有状态初始化为0或1。如果在仿真开始时未初始化寄存器,某些仿真器(如Synopsys VCS)可能会将寄存器初始化为X,这可能会导致仿真失败(这是您在定义SYNTHESIS
时观察到的行为)。由于测试应该对随机初始化具有鲁棒性,因此预合成RTL被注释为随机初始化寄存器状态。
综合工具(如Synopsys Design Compiler)将忽略包装在这些ifndef
块中的RTL。请注意,合成后RTL的模拟还必须将所有寄存器初始化为0或1,模拟才能正常工作。
https://stackoverflow.com/questions/37606710
复制相似问题