Почему я не могу импортировать определение let из пакета в модуль SystemVerilog?

Я хотел бы поместить следующие определения в пакет по умолчанию, который я включаю во все другие мои модули SystemVerilog:

let max(a,b) = a > b ? a : b;

Но когда я пытаюсь использовать импортированное определение let в модуле, мне говорят, что я пытаюсь использовать определение нелокальной функции и выводить ошибки VCS.

Почему?


person dbanas    schedule 08.03.2021    source источник


Ответы (1)


Простой пример работает без проблем. Убедитесь, что пакет всегда компилируется перед импортом. Правильно импортируйте из пакета как pkg::* или pkg::max. Или используйте его как pkg::max(a,b) напрямую без импорта. И да, используйте компилятор, который поддерживает этот синтаксис.

package pkg;
  let max(a,b) = a > b ? a : b;
endpackage:pkg

module top();
  import pkg::*;
  
  int a = 1,b = 2;
  initial begin
    $display("max of %d and %d is %d", a, b, max(a,b));
  end
endmodule
person Serge    schedule 08.03.2021
comment
Спасибо, @Serge! Какой компилятор SystemVerilog вы использовали для проверки этого кода? - person dbanas; 09.03.2021
comment
synopsys VCS, а также aldec, cadence и наставник (все из eda игровая площадка) - person Serge; 09.03.2021