为什么Quartus Prime不想忽略用于模拟的systemverilog断言?

时间:2017-10-25 12:18:23

标签: system-verilog system-verilog-assertions

我有以下属性声明并检入我的一个系统verilog文件:

   property StepOutP_pulse_width;
      int count;
      @(posedge ClkRs_ix.clk)
    ($rose(mc.outvec.StepOutP_o),count=STEPPER_PULSE_WIDTH) |->
      (mc.outvec.StepOutP_o,count--)[*] ##1 (~mc.outvec.StepOutP_o && count==0);
   endproperty // StepOutP_pulse_width
   assert property (StepOutP_pulse_width);

这基本上检查信号mc.outvec.StepOutP_o

生成的脉冲宽度

当我尝试编译设计时,Quartus Prime在此属性声明中失败

  

错误(10170):steppingcontroller.sv上的Verilog HDL语法错误(404)   近文:"]&#34 ;;期待一个操作数。检查并修复任何语法   紧接在指定关键字之前或之前出现的错误。该   英特尔FPGA知识库包含许多具体的文章   有关如何解决此错误的详细信息。访问知识数据库   https://www.altera.com/support/support-resources/knowledge-base/search.html   并搜索此特定错误消息编号。

现在,我想,在分析和综合过程中,这些属性声明和相关断言完全被忽略,因为它们只涉及模拟。但显然事实并非如此。 Modelsim(原始导师图形版本)编译它没有问题,并且断言也能达到预期效果。 Quartus verilog编译设置被设置为SystemVerilog'

如何:

  • 使属性规范符合quartus编译器吗?

  • 或设置编译器忽略这些断言?

由于

1 个答案:

答案 0 :(得分:1)

解决此问题的一种方法是使用综合指令。您可以指定合成translate_off和合成translate_on,如下所示:

// synthesis translate_off    
property StepOutP_pulse_width;
      int count;
      @(posedge ClkRs_ix.clk)
    ($rose(mc.outvec.StepOutP_o),count=STEPPER_PULSE_WIDTH) |->
      (mc.outvec.StepOutP_o,count--)[*] ##1 (~mc.outvec.StepOutP_o && count==0);
   endproperty // StepOutP_pulse_width
   assert property (StepOutP_pulse_width);    
// synthesis translate_on

编译器会忽略translate_off,translate_on注释之间编写的任何代码。请注意,可以通过设置选项ignore_translate_off_and_synthesis_off

来禁用/启用此功能