У меня проблемы с доступом к пакету и макросу из другой библиотеки в 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.