創建Sequencer
sequencer生成激勵數據,并將其傳遞給driver執行。UVM類庫提供了uvm_sequencer基類,其參數為request和response數據類型。
uvm_sequencer基類包含了sequencer與driver通信所需的基本功能。在sequencer類的定義中, 默認情況下,response數據類型與request數據類型相同。如果需要不同的response數據類型,必須為uvm_sequencer指定可選的第二個參數
uvm_sequencer #(simple_item, simple_rsp) sequencer;
連接Driver和Sequencer
driver和sequencer通過TLM連接,driver的seq_item_port連接到sequencer的seq_item_export。sequencer產生數據項,通過seq_item_export提供。driver通過它的seq_item_port獲取數據項,并提供response(可選)。包含driver和sequencer的驗證組件(通常是agent)在它們之間建立連接。
uvm_driver中的seq_item_port定義了driver獲取sequence中下一個數據項的一組方法,并且提供了driver與sequencer同步的能力。sequencer實現了一套方法,允許驅動器和序列器之間進行靈活和模塊化的交互。
Sequencer和Driver的基本交互方式
driver和sequencer之間的基本交互是通過get_next_item()和item_done()任務完成的。
driver使用get_next_item()來獲取下一個要發送的隨機數據項。發送到DUT后,driver向sequencer發出信號,使用item_done()表示該數據項已被驅動。通常情況下,driver的主函數類似于以下偽代碼:
get_next_item()是blocking的,直到在該sequencer上運行的sequences提供一個需要驅動的數據項。
獲取待驅動的數據項
除 了 get_next_item() 任 務 外 , uvm_seq_item_pull_port 類 還 提 供 了 另 一 個 任 務try_next_item()。如果沒有數據項可供驅動,這個任務將在同一simulation step中返回,此時可以讓driver執行一些idle transactions,比如當沒有有意義的數據要傳輸時,給DUT發送隨機數據,如下圖所示:
將處理后的數據發回給Sequencer
在某些sequences中,正在生成的值取決于先前生成的數據驅動后的響應,那么driver需要使用item_done(rsp)將處理后的響應返回到sequencer中。
seq_item_port.item_done(rsp);
或使用put_response(rsp)方法
seq_item_port.put_response(rsp);
或使用uvm_driver的內置analysis port
rsp_port.write(rsp);
在提供response之前,必須使用rsp.set_id_info(req)將response transaction與request transaction相對應。put_response()是一個blocking方法,所以sequence必須有一個對應的get_response(rsp)。
審核編輯:劉清
-
UVM
+關注
關注
0文章
182瀏覽量
19277 -
TLM
+關注
關注
1文章
33瀏覽量
24812 -
sequence
+關注
關注
0文章
23瀏覽量
2890
原文標題:UVM driver和sequencer的通信
文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
數字IC驗證之“典型的UVM平臺結構”(3)連載中...
數字IC驗證之“構成uvm測試平臺的主要組件”(4)連載中...
什么是uvm?uvm的特點有哪些呢
UVM sequence分層有哪幾種方式呢
請問一下在UVM中的UVMsequences是什么意思啊
UVM sequence分層的幾種體現
如何配置sequence的仲裁算法和優先級及中斷sequence的執行
介紹兩種交互方法來完成Sequencer和Driver的握手機制
談UVM之sequence/item見解 sequencer特性及應用(下)

數字IC驗證之“典型的UVM平臺結構”(3)連載中...

評論