UVM驗證基本架構
其中agent是很重要的基本單元,通常driver、monitor、sequencer會針對特定的interface protocol做設計,然後包裝成agent以便重複使用。例如針對AMBA AXI protocol設計一個agent,如果DUT(design under test)有很多個AXI port,只要重複instance agent就可以了。Environment包含需要的各個agent,加上負責比對的scoreboard,或是收集coverage的subscriber,成為驗證DUT的環境。有了驗證環境之後就可以設計各種Test,根據需求也可以覆寫environment的設定。最後用最上層的module把Test和DUT包起來,處理好interface接線,就成為如下圖的架構了。
圖一:UVM驗證基本架構
UVM class hierarchy
在基本架構中,使用了UVM定義好的各種class,各個常用class的繼承關係可以參考圖二。重點是UVM的class可分為兩大類,uvm_sequence_item系列以及uvm_component系列。至於uvm_component系列中,TLM(Transaction-Level Modeling)相關的class,內容很多,可以再獨立出來討論。
關於uvm_sequence_item以及uvm_component兩大系列的不同,可以簡單舉出幾個例子。
- uvm_component的new function,需要name string和parent component兩個參數,而uvm_sequence_item只需要name string一個。
- 好用的`uvm_do macro系列,是針對uvm_sequence及uvm_sequence_item使用。
圖二:UVM class hierarchy
UVM component phases
就是圖二uvm_component中的*_phase(),上面提過UVM的驗證基本架構是由uvm_component組成。UVM把component的執行分成如下圖三,總共21個不同的phase。基本上執行流程是由上而下,當所有uvm_component都執行完同一個phase之後,才會進入下一個phase。關於phase的執行也有很多細節,這裡只是簡單介紹一下最基本的概念。