Мне нужно создать uvm_environment интерфейса uart. Работа практически выполнена, кроме самого интерфейса. Я хочу иметь два модпорта, каждый из которых содержит входные данные как rx и выходные данные как tx.
DUT/UVM if DUT/UVM
------- ------ -------
|in rx|<--|rx\ /rx|-->|rx in |
| | | x | | |
|out tx|-->|tx/ \tx|<--|tx out|
------- ------ --------
Я думал о чем-то вроде этого:
interface uart_internal_if();
logic rx,tx;
endinterface
interface uart_if ();
uart_internal_if if1;
uart_internal_if if2;
assign if1.rx = if2.tx;
assign if2.rx = if1.tx;
modport device1(input if1.tx, output if1.rx);
modport device2(input if2.tx, output if2.rx);
endinterface
Если бы это сработало, у меня были бы равные модпорты и я не стал бы беспокоиться о том, какой вывод выводить для DUT то же самое для ТБ env. Если я создаю интерфейс с именами, такими как rx1, tx1, мне нужно всегда думать, какой модпорт должен go для UVM, и это не хорошо. Проблема в том, что, как я понимаю, я не могу использовать внутренние интерфейсы в модпортах, потому что у меня следующая ошибка:
near ".": syntax error, unexpected '.', expecting ')' or ','
Можно ли описать такую вещь?