Почему 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