Мне нужно создать 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 и для tb env. Если я создам интерфейс с такими именами, как rx1, tx1, мне придется всегда думать, какой модпорт должен идти в UVM, а это нехорошо. Проблема в том, насколько я понимаю, я не могу использовать внутренние интерфейсы в модпортах, потому что у меня следующая ошибка:
near ".": syntax error, unexpected '.', expecting ')' or ','
Можно ли описать такое?