UVM TLM(Transaction level modeling)
TLM为组件之间的通信建立专门的通信信道,避免通信出现混乱
(例如reference model只能从master_agent的monitor获取数据)
transaction事务的传送分为put(producer主动发起事务的传输)和get(consumer主动从producer获取数据)其中使用port.put()函数(在consumer中定义),以及port.get()函数(在producer中定义)
常见的TLM port:
uvm_put_port #(T);//(port要传输的transaction的类型)
uvm_blocking_put_port#(T);
uvm_unblocking_put_port#(T);
uvm_get_port#(T);
put()//put()是一个task,可能会阻塞当前进程直到transaction传输成功
try_put()//try_put()是一个function,不会阻塞当前进程,不管transaction是否完成传输都会立刻返回
can_put()//can_put()是一个function,不会阻塞当前进程,不会发生transaction传输,只是检查对方是否准备好接受
get()//get()是一个task,会阻塞当前进程直到成功获取了一个transaction之后返回