virtual sequence是用來實現sequence之間的同步。從字面上理解,即虛擬的sequence。虛擬的意思就是它根本就不傳送transaction,它只是控制其他的sequence,起統一排程的作用。如圖1所示,為了使用virtual sequence,一般需要乙個virtual sequencer。virtual sequencer裡面包含指向其他真實sequencer的指標:
在base_test中,例項化vsqr,並將相應的sequencer賦值給vsqr中的sequencer的指標:
在virtual sequence中則可以使用uvm_do_on系統巨集來傳送transaction,uvm_do_on用於顯式地指定使用哪個sequencer傳送此transaction,它有兩個引數,第乙個是transaction的指標,第二個sequencer的指標。virtual sequence是uvm_do_on巨集用得最多地方(p175-p176)
在case0_vseq中,先使用uvm_do_on_with在p_sequencer.sqr0上傳送乙個最長包,當其傳送完畢後,再啟動drv0_seq和drv1_seq。這裡的drv0_seq和drv1_seq非常簡單,兩者之間不需要為同步做任何事情。virtual sequence的body是順序執行,所以只需要先產生乙個最長的包,產生完畢後再將其他的sequence啟動起來,沒有必要刻意地同步。
在使用uvm_do_on巨集的情況下,雖然seq0是在case0_vseq中啟動,但是它最終會被交給p_sequencer.p_sqr0,也即env0.i_agt.sqr而不是v_sqr。這個就是virtual sequence和virtual sequencer中virtual的**。它們各自並不產生transaction,而只是控制其他的sequence為相應的sequencer產生transaction。virtual sequence和virtual sequencer只是起乙個排程作用。由於根本不直接產生transaction,所以virtual sequence和virtual sequencer在定義時根本無需指明要傳送的transaction資料型別。
virtual sequence的使用可以減少config_db語句的使用。virtual sequence作為一種特殊的sequence,也可以在其中啟動其他的virtual sequence。
另外乙個需要注意的是最好只在最頂層的virtual sequence中控制objection。因為virtual sequence是起統一排程作用的,這種統一排程不只體現在transaction上,也應該體現在objection的控制上。
UVM 7 3 1 UVM 中前門訪問的實現
1.前門訪問操作只有兩種 讀操作和寫操作。2.對於參考模型來說,最大問題是如何在其中啟動乙個sequence。全域性變數和config db。3.除了這兩種方式之外,如果能在參考模型中得到sequencer 的指標,也可以啟動sequence。只要在其中設定p sqr變數,並在env 中將seque...
在UVM中新增env
在驗證平台中加入reference model driver scoreboard等元件後,如何在驗證平台中對它們進行例項化呢?顯然使用factory機制註冊後使用run test 已經不行啦,run test最多只能例項化乙個元件。因此需要引入乙個容器類,這個容器類可以包含所有的元件,通過對容器類...
UVM中的driver元件
一般uvm環境中的driver元件,派生自uvm driver。uvm dirver派生自uvm component。class uvm driver type req uvm sequence item,type rsp req extends uvm component 其中定義了兩個ports...