2

我有以下属性声明并签入我的系统 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(404) 文本附近出现 Verilog HDL 语法错误:“]”;期待一个操作数。检查并修复紧接在指定关键字之前或处出现的任何语法错误。英特尔 FPGA 知识数据库包含许多文章,其中包含有关如何解决此错误的具体细节。访问 https://www.altera.com/support/support-resources/knowledge-base/search.html上的知识数据库 并搜索此特定错误消息编号。

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

如何:

  • 使属性规范与 quartus 编译器兼容?

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

谢谢

4

1 回答 1

2

解决此问题的一种方法是使用综合指令。您可以指定综合 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禁用/启用此功能

于 2017-10-26T00:01:58.323 回答