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,增加了很多使用的成員變數和函式/任務。