TLM : transaction level modeling
TLM classes
uvm_*_export
uvm_*_imp
uvm_*_port
uvm_*_fifo
uvm_*_socket
PUSH mode
producer call port.put();
consumer implement put();
class producer extends uvm_component;
uvm_blocking_put_port #(packet) put_port;
function void_build_phase(uvm_phase phase);
put_port = new("put_port", this);
endfunction
virtual task initial_tr();
put_port.put(tr);
endtask
endmodule
class consumer extends uvm_component();
uvm_blocking_put_imp #(packet, consumer) put_export;
function void_build_phase(uvm_phase phase);
put_export = new("put_export", this);
endfunction
virtual task put(packet tr);
process_tr(tr);
endtask
endmodule
class env_test extends uvm_env;
producer p;
consumer c;
virtual function void connect_phase(uvm_phase phase);
p.put_port.connect(c.put_export);
endfunction
endclass
PULL mode
FIFO mode
class env_test extends uvm_env;
producer p;
consumer c;
uvm_tlm_fifo #(packet) tr_fifo;
virtual function void build_phase(uvm_phase phase);
p = producer::type_id::creare("p",this);
c = consumer::type_id::create("c",this);
tr_fifo = new("tr_fifo",this);
endfunction
virtual function void connect_phase(uvm_phase phase);
//p.put_port.connect(c.put_export); // push mode
p.put_port.connect(tr_fifo.put_export);
c.get_port.connect(tr_fifo.get_export);
endfunction
endclass
一般是push/pull + fifo 来使用