UVM中的driver元件

2021-09-06 22:59:28 字數 1511 閱讀 8421

一般uvm環境中的driver元件,派生自uvm_driver。

uvm_dirver派生自uvm_component。  

class  uvm_driver #(type req = uvm_sequence_item, type rsp = req)  extends uvm_component

其中定義了兩個ports:seq_item_port,driver一般用這個介面向sequencer索要sequence。

rsp_port,driver向相應的sequencer傳送response。

還有乙個new函式,再無其他。

driver內部通過呼叫get函式來向sequencer索要transaction

相應的uvm_sequencer,派生自uvm_sequencer_param_base,繼而派生自uvm_sequencer_base。

class  uvm_sequencer #(type req=uvm_sequence_item, rsp=req)  extends uvm_sequencer_param_base (#req,rsp)

定義有乙個seq_item_export。提供訪問這個sequencer的介面實現。

uvm_seq_item_pull_imp #(req,rsp,this_type)  seq_item_export

其中介面的型別是uvm_sqr_if_base #(req,rsp)。

它實現的方法有:get_next_item/try_next_item,先在該sequencer中選擇優先順序最高的sequence,然後該sequence wait_for_grant,

然後uvm_sequence_base::pre_do,randomized,post_do。

item_done,一旦上乙個task被呼叫,那這個task也必須被呼叫。表示乙個sequence結束,fifo可以移出。

driver中在得到sequence後,需要將sequence變為dut能夠接收的訊號型別。

在agent中必須在connect_phase中,連線driver.seq_item_port.connect(sequencer.seq_item_export)。所以sequence在執行時

必須指定sequencer,而sequencer又與driver相連線在一起,最終完成向dut傳送transaction的目的。當然對於很簡單的

transaction也可以直接在sequence中就向dut傳送訊號。

不過有乙個疑惑的地方,sequence中的task body()與sequencer的seq_item_port的執行之間的關係是如何的。

答:sequence body主要完成transaction的create/random/send,之後的transaction才會傳送給driver

sequencer會更根據poriority,phase,connect來呼叫正確的sequence給driver。

UVM中Virtual sequence的作用

virtual sequence是用來實現sequence之間的同步。從字面上理解,即虛擬的sequence。虛擬的意思就是它根本就不傳送transaction,它只是控制其他的sequence,起統一排程的作用。如圖1所示,為了使用virtual sequence,一般需要乙個virtual se...

UVM 7 3 1 UVM 中前門訪問的實現

1.前門訪問操作只有兩種 讀操作和寫操作。2.對於參考模型來說,最大問題是如何在其中啟動乙個sequence。全域性變數和config db。3.除了這兩種方式之外,如果能在參考模型中得到sequencer 的指標,也可以啟動sequence。只要在其中設定p sqr變數,並在env 中將seque...

UVM中Objection的作用

objection機制用來控制驗證平台的關閉。phase和objection與uvm驗證平台息息相關,phase恰如鐵軌,讓uvm這趟列車在鐵軌上向前執行,不會脫軌,不會跳過某一段而直接到達後一段,objection則更像是能量,給列車提供能量,控制著這趟列車的起始和終止。在乙個實際的驗證平台中,通...