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