uvm的sequence

宙斯黃發表於2018-08-09

1,每個sequence都有一個body任務。當一個sequence啟動後,會自動執行sequence的body任務,所以在sequence的class中,一定要有一個名為body的task。

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

2,sequence的原始碼中,沒有build_phase,所以,不要在sequence中使用build_phase。但是記得,sequencer中可以有build_phase。

3,當完成一個sequence的定義後,可以使用start任務將其啟動。

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,起到統一排程的作用。

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

sequence 主要是要實現其body任務,用來產生sequence item並將其傳送給driver,擴充套件自如下基類:xxx_seuqence extends uvm_sequence 或者uvm_sequence_base;

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

9,使用者定義的所有的transaction,都必須從uvm_sequence_item類來派生。transaction就是封裝了各種協議介面的事務模型,而uvm_sequence_item,相對於transaction,增加了很多使用的成員變數和函式/任務。

相關文章