uvm_do系列宏淺析


 

 

uvm_do系列宏淺析

 

外表篇:

uvm_do系列宏包括:

  • `uvm_do
  • `uvm_do_pri
  • `uvm_do_with
  • `uvm_do_pri_with
  • `uvm_do_on
  • `uvm_do_on_pri
  • `uvm_do_on_with
  • `uvm_do_on_pri_with

宏的形式記憶:

  細心的讀者,從上面的排列總就能發現一個簡答的規律,幫組記憶。金字塔記憶方法。

  總共8個,分兩組:一組帶on,一組不帶on。每組都是由 pri,with的有無來組合,所以每組有四個。

 

宏的參數記憶:

  其實可以從宏的形式來知道,其到底傳了什么參數。並且能方便記憶參數的位置。

  首先,所有宏都有參數:“SEQ_OR_ITEM",該參數可以使sequence或者transaction。與do對應。

  其次,帶有on的宏,其要傳一個”SEQR“的參數,該參數是sequencer,用來指定在要將后面產生的transaction發給哪一個sequencer。與on對應。

  然后,帶有pri的宏,都要給其傳一個“PRIORITY"的參數,該參數是大於-1的整數,表示產生的transaction的優先級。與pri對應。

  最后,帶有with的宏,都有傳一個”CONSTRAINT“的參數,該參數是由{ }包括的約束,表示對SEQ_OR_ITEM的一個約束。與with對應。 

  所以,`uvm_do_on_pri_with的具體形式為:`uvm_do_on_pri_with(SEQ_OR_ITEM, SEQR, PRIORITY, CONSTRAINT)。   

 

內在篇:

代碼解析:

  雖然說uvm_do系列宏有八個,但是每一個宏最終的落腳點都是在`uvm_do_on_pri_with,這8個是統一的。具體源碼里面怎么實現的呢?

  • 宏中沒有on的,其實是`uvm_do_on_pri_with( SEQ_OR_ITEM , m_sequencer, PRIORITY, CONSTRAINT)
  • 宏中沒有pri的,其實是`uvm_do_on_pri_with(SEQ_OR_ITEM, SEQR, -1, CONSTRAINT)
  • 宏中沒有with的,其實是`uvm_do_on_pri_with(SEQ_OR_ITEM, SEQR, PRIORITY, {}) 

  一句話總結:就是SEQR的默認參數是m_sequencer, PRIORITY的默認參數是-1, with的默認參數是{},不指明參數的將用默認參數代替。  

  下面來具體分析`uvm_do_on_pri_with。

  源碼如下:

里面有個uvm_create_on函數,其定義如下:

這里面又調用ceate_item函數,創建一個SEQ_OR_ITEM。create_item函數是uvm_sequence_base類的一個函數,為此,這就說明了uvm_do系列宏只能在sequence類里面用

create_item宏定義如下:

最終調用factory.create_object_by_type來實例化SEQ_OR_ITEM。並且指定SEQ_OR_ITEM的m_sequencer(SEQR),和parent_sequence(this)。位start_item做准備。

下面回到`uvm_do_on_pri_with中。

SEQ_OR_ITEM被返回后,后面要先判斷SEQ_OR_ITEM是SEQ還是ITEM,從而為執行不同的動作。

  1. 如果是ITEM,則start_item(SEQ_OR_ITEM, PRIORITY) , randomize, finish_item(SEQ_OR_ITEM, PRIORITY)。
  2. 如果是SEQ,則調用start(SEQR,this,PRIORITY, 0)。

后面分兩次分析start方法,以及start_item和finish_item。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM