uvm的sequence

1,每一個sequence都有一個body任務。當一個sequence啓動後,會自動執行sequence的body任務,因此在sequence的class中,必定要有一個名爲body的task。函數

此外,若是一個sequence中,還有pre_body與post_body,則這兩個task,會分別在body的task前面與後面執行。post

2,sequence的源碼中,沒有build_phase,因此,不要在sequence中使用build_phase。可是記得,sequencer中能夠有build_phase。ui

3,當完成一個sequence的定義後,能夠使用start任務將其啓動。component

4,sequence有幾個重要的宏,如uvm_do,uvm_create,uvm_send,start_item,finish_item等。接口

5,注意,sequence派生自uvm_object,sequencer派生自uvm_component,sequencer的做用,是調度其中的sequence在driver之間進行傳輸。事務

6,一個sequence應該使用uvm_object_utils宏註冊到factory中去。源碼

7,virtual sequence的引入,主要是爲了解決sequence之間的控制和調度,他通常不發送transaction,他只控制其餘的sequence,起到統一調度的做用。it

8,注意,sequence item 與sequence是有區別的,要關注這一點。io

sequence 主要是要實現其body任務,用來產生sequence item並將其發送給driver,擴展自以下基類:xxx_seuqence extends uvm_sequence 或者uvm_sequence_base;class

sequence item主要用來產生兩個components之間的讀寫操做,流通在uvm_component組件直接,進行通訊。它擴展的基類以下: xxx_seq_item extends uvm_sequence_item;

9,用戶定義的全部的transaction,都必須從uvm_sequence_item類來派生。transaction就是封裝了各類協議接口的事務模型,而uvm_sequence_item,相對於transaction,增長了不少使用的成員變量和函數/任務。

相關文章
相關標籤/搜索