System verilog 用哪种方式描述uart接口端口?
我需要创建uart接口的uvm_环境。除了接口本身,工作几乎完成了。我想有两个ModPort,每个包含输入作为rx,输出作为txSystem 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| ----
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