System verilog 用哪种方式描述uart接口端口?

System verilog 用哪种方式描述uart接口端口?,system-verilog,uvm,System Verilog,Uvm,我需要创建uart接口的uvm_环境。除了接口本身,工作几乎完成了。我想有两个ModPort,每个包含输入作为rx,输出作为tx DUT/UVM if DUT/UVM ------- ------ ------- |in rx|<--|rx\ /rx|-->|rx in | | | | x | | | |out tx|-->|tx/ \tx|<--|tx out| ----

我需要创建uart接口的uvm_环境。除了接口本身,工作几乎完成了。我想有两个ModPort,每个包含输入作为rx,输出作为tx

 DUT/UVM       if        DUT/UVM
 -------     ------      -------
|in   rx|<--|rx\ /rx|-->|rx  in |
|       |   |   x   |   |       |
|out  tx|-->|tx/ \tx|<--|tx  out|
 -------     ------      --------
如果它能工作的话,我将有相等的模端口,并且我将不必费心考虑哪个引脚应该输出到DUT和tb env。如果我用rx1、tx1这样的名字创建接口,我必须始终考虑哪个modport应该连接到UVM,这是不好的。 问题是,据我所知,我不能在modports中使用内部接口,因为我有以下错误:

 near ".": syntax error, unexpected '.', expecting ')' or ','

有可能描述这样的事情吗?

SystemVerilog有一个称为modport表达式的功能。这类似于端口表达式,其中端口名称与其连接的信号不同

interface uart_if ();
logic l1, l2;

    modport device1(input .rx(l1), output .tx(l2));
    modport device2(input .rx(l2), output .tx(l1));
endinterface
然后,无论您连接到哪个modport,都可以读取rx,并写入tx

module DUT(uart_if.device1 ut);

// ut.rx is really l1
// ut.tx is really l2

endmodule
module DUT(uart_if.device1 ut);

// ut.rx is really l1
// ut.tx is really l2

endmodule