從原始碼角度來看UVM phase

2022-09-19 06:51:09 字數 2117 閱讀 9764

說到uvm phase我們就知道是uvm乙個很重要的特性,從使用者角度來講,其實就是一些很簡單的應用規則,能夠極大地提公升編碼的效率,簡化**複雜度,提高debug的效率。至於應用可以參看zhangqiang大佬的第五章,這裡就不再贅述。

本文就從原始碼的角度來看,uvm的phase是怎麼工作的?

之前學習uvm總是從使用者的角度來學習怎麼使用,很多東西都只是知道,但是並不明白其中的內涵,讀了原始碼才能從根本上理解這些使用規則背後的道理。之後我也會分析一下剩下的uvm原始碼,希望大家能夠相互學習。

源**的版本是uvm1.2

**將原始碼抽象了一下,儲存了各個主要task function的主要功能,對整個phase進行了抽象。如果有任何問題,可以及時跟我溝通交流[email protected].

1.1 phase top

通過下面的偽**就能清晰看到phase的top層是從**進入的,大體上是怎麼運轉的。

1.2 get_common_domain()

由於偽**篇幅有限,所以我會提醒一些細節,這些細節還需要讀者去原始檔裡面查詢。

如果我們有需求,需要另建乙個domain(12-run_time_phase)。set_domain其實就是在run_time_phase/12-run_time_phase(common_domain)的基礎上再新增12-run_time_phase跟它們並行。

前面說了get_common_domain已經將uvm phase的框架擺好了,那麼具體要怎麼執行呢?

forever fork join_none以及mailbox共同作用,通過phase.execute_phase來實現了phase的執行

execute_phase()的呼叫者的phase型別包括三類

從**功能角度來看可以分為兩類:

所有的uvm phase的實現,最核心的部分就是這裡了。

我們前面說過set_domain會將12-run_time_phase加入進來跟run_phase並行起來,兩個domain的12-run_time_phase相互之間並沒有先後關係。那要是有這方面的需求應該怎麼做呢?

uvm_phase提供了sync的函式,用於滿足這方面的需求。

從Android原始碼來看「Builder模式」

本文主要解釋什麼是builder模式,及其作用。然後結合 android 原始碼來看一下builder模式的實現。什麼是builder模式 build 是構建 建造的意思,builder 模式又稱建造者模式。builder模式中包括兩個核心元素 產品和建造者。這兩者可以比作房屋和磚瓦匠。在建造房屋這...

從讀者角度來看Blog

最近經常在看各種blog文章,覺得受益匪淺,也剛剛在這裡安了家,覺得很不錯,但是現在的blog似乎在功能上都趨於一致,就是各種blog的skin是經常變化的,也越來越漂亮,但是困擾讀者的東西也就出來了。舉個例子,比如我們看書的時候,如果書的風格 格式 結構都類似的話,即使看不同的書,看起來也很方便,...

從原始碼的角度理解Volley

今天從原始碼的角度來理解一下volley中部分功能的實現。新增請求到請求佇列 將請求新增到請求佇列中 public requestadd requestrequest 為請求設定順序編號.request.setsequence getsequencenumber 新增標記 request.addma...