五个步骤:
(1)声明端口
(2)在build phase里例化端口
(3)建立端口连接
(4)在发送端调用write方法发送transaction。
(5)在接收端重载write方法来完成接收和处理。
如果是一对多,在接收模块可以设置
`uvm_analysis_imp_decl(_rx)
`uvm_analysis_imp_decl(_tx)
这样可以在重载write方法的时候加后缀
function void uart_ctrl_monitor::write_rx(uart_frame frame);
uart_rx_out.write(frame);
if (tx_time_q.size > 0) begin
tx_time_in = tx_time_q.pop_back();
end else begin
`uvm_warning ("CVC-DBG", "Trying to pop an empty Q");
end
tx_time_out = ($time-tx_time_in)/clk_period;
endfunction : write_rx
function void uart_ctrl_monitor::write_tx(uart_frame frame);
uart_tx_out.write(frame);
rx_time_q.push_front($time);
endfunction : write_tx
这样就可以接收到两个端口,write_rx和write_tx