Почему Quartus Prime не хочет игнорировать утверждение systemverilog, используемое для симуляции?

У меня есть следующее объявление свойства и я зарегистрировался в одном из моих системных файлов 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): синтаксическая ошибка Verilog HDL на steppingcontroller.sv(404) рядом с текстом: "]"; ожидая операнд. Проверьте и исправьте любые синтаксические ошибки, которые появляются непосредственно перед или по указанному ключевому слову. База знаний Intel FPGA содержит много статей с конкретными сведениями о том, как устранить эту ошибку. Посетите базу данных знаний по адресу https://www.altera.com/support/support-resources/knowledge-base/search.html и найдите этот конкретный номер сообщения об ошибке.

Теперь я думаю, что во время анализа и синтеза эти объявления свойств и связанные с ними утверждения полностью игнорируются, поскольку они касаются только моделирования. Но, видимо, это не так. Modelsim (оригинальная графическая версия наставника) не имеет проблем для его компиляции, а также утверждение делает то, что ожидается. Настройки компиляции Quartus Verilog установлены на "SystemVerilog"

Как:

  • сделать спецификацию свойства совместимой с компилятором quartus?

  • или настроить компилятор, чтобы игнорировать эти утверждения?

Спасибо

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

Другие вопросы по тегам