put port to imp Link to heading

class A;
	uvm_blocking_put_port #(obj) m_port;

	task run_phase()
		m_port.put(pkt);
	endtask

endclass


class B;
	uvm_blocking_put_export #(obj, comp) m_imp;

	virtual task put(pkt p);
	endtask

endclass

a.m_port.connect(b.m_imp);

get port/imp Link to heading

class A;
	uvm_blocking_get_imp #(obj) m_imp;

	virtual task get(pkt p);
	endtask

endclass

class B;
	uvm_blocking_get_port #(obj, comp) m_port;

	task run_phase()
		m_port.get(pkt);
	endtask

endclass

b.m_port.connect(a.m_imp);

Port to Port Link to heading

m_subcompo.m_port.connect(this.m_port)

imp to export Link to heading

m_export.connect(subcomp.m_imp)

port to export Link to heading

subcom.m_port.connect(comp.m_export)

tlm_fifo Link to heading

uvm_blocking_put_port #(pkt) m_put;
m_put(p);


uvm_blocking_get_port #(pkt) m_get;
m_get(p)

uvm_tlm_fifo #(pkt) m_tlm_fifo;

comp1.m_put.connect(m_tlm_fifo.put_export);
comp2.m_get.connect(m_tlm_fifo.get_export);

uvm_analysis_port Link to heading

uvm_analysis_port #(pkt) ap;
ap.write(p)

in uvm_subscriber
  uvm_analysis_imp #(T, this_type) analysis_export;


class s extends uvm_subscriber #(pkt);
	virtual function void write(pkt p1);
	endfunction

endclass

c1.ap.connect(c2.analysis_export)

TLM analysis fifo Link to heading


// declare fifo
 uvm_tlm_analysis_fifo #(transaction) analy_fifo;  

// on one side create ap
 uvm_analysis_port#(transaction) analysis_port; 

// connect fifo to ap
 analysis_port.connect(analy_fifo.analysis_export);

// write to port
analysis_port.write(trans);

// get from fifo
analy_fifo.get(trans);

TLM macros Link to heading

`uvm_put_imp_decl(_1)
`uvm_put_imp_decl(_2)

uvm_put_imp_2 #(pkt, my_put_compo#(pkt) ) put_imp2
uvm_put_imp_1 #(pkt, my_put_compo#(pkt) ) put_imp1

function void put_1(input pkt t);
endfunction
function void put_2(input pkt t);
endfunction


uvm_blocking_put_port #(pkt) put_port;
put_port.put(p);

compoS1.put_port.connect(compoR.put_imp1);
compoS2.put_port.connect(compoR.put_imp2);