我有以下属性声明并检入我的一个系统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编译器吗?
或设置编译器忽略这些断言?
由于
答案 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
来禁用/启用此功能