systemverilog пакеты, макросы и область видимости - PullRequest
0 голосов
/ 01 ноября 2019

У меня проблемы с доступом к пакету и макросу из другой библиотеки в systenverilog. Я не понимаю, что пакет или макрос должны быть видимы в модуле компиляции и, следовательно, видны из любой библиотеки в этом модуле, но в этом примере это не так

define.sv

`define POUTMAX

mtp_pkg.sv

package mtp;
function automatic void set_mtp(string name, int val);
  $display("set_mtp");
endfunction
endpackage

tb.sv

module tb;
  initial begin
    mtp::set_mtp("l",7);
//    $display(`POUTMAX);
  end
endmodule

Если я скомпилируюTestBench в свою собственную библиотеку mtp_pkg или макрос не доступны. например,

xrun mtp_pkg.sv определяет.sv -makelib tb_lib tb.sv -endlib -top tb

file: tb.sv
     mtp::set_mtp("l",7);
       | xmvlog: *E,NOPBIND (tb.sv,6|8): Package mtp could not be bound.
       module tb_lib.tb:sv
               errors: 1, warnings: 0 xrun: *E,VLGERR: An error occurred during parsing.  Review the log file for errors with the code
*E and fix those identified problems to proceed. Exiting with code (status 1).

Чего мне здесь не хватает? кажется, что mtp_pkg не скомпилирован до tb.sv. Добавление include и или import mtp :: * в tb.sv не решает проблему. Затем я получаю сообщение об ошибке, что пакет mtp существует в 2 местах, и ошибку привязки.

Работает нормально, если я удалю tb_lib.

1 Ответ

0 голосов
/ 01 ноября 2019

Это не правильно. Макросы только доступны в модуле компиляции, где они определены, и нигде больше. Пакеты должны быть скомпилированы, прежде чем на них можно будет ссылаться или импортировать. Похоже, ваш сценарий сначала соответствует -makelib файлам, поэтому вам нужно выяснить, как обеспечить их компиляцию в правильном порядке.

...