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之後返回
由於實現操作的方法在import中定義,所以不能將port->export而沒有import
一、put模式的代碼使用方法
reference_model擴展於uvm_component基類;由於reference_model是接收方,需要在其中定義import端口;之後實例化需要構造的對象;
在agent中加入export;連接reference_model和monitor
二、get模式的使用方法
monitor將需要發送的事務存放至fifo中,一旦有get函數的調用,立即將事務發送給reference_model
三、FIFO模式的使用方法
UVM analysis component
- reference model(模擬DUT的行爲,並根據輸入計算出相應輸出的組件)
- scoreboard(將DUT的輸出與從參考模型獲取的期望值相對比,判斷DUT是否正常工作的組件)
1、構建slave agent中的monitor
使用interface將monitor與DUT相連接,在run phase中,實現monitor對DUT的檢測功能,並將事務打包給scoreboard
2、將monitor放入agent當中,構建agent
3、創建scoreboard
4、爲reference_model創建一個端口
5、創建兩個FIFO,將組件與FIFO連接起來