當前位置:首頁 > 公眾號精選 > 芯片驗證工程師
[導讀]UVM內建了許多關鍵的處理機制,幫助實現(xiàn)驗證工程師需要的功能。a.Factory機制Factory機制是產生通用代碼的一種典型的軟件設計思路。在功能驗證中,引入的類經常需要變化。例如,在許多測試中我們可能需要給事務增加更多的約束或字段,或者想在整個環(huán)境中或僅僅一個單接口中使用新的...

UVM 內建了許多關鍵的處理機制,幫助實現(xiàn)驗證工程師需要的功能。

a. Factory 機制
Factory機制是產生通用代碼的一種典型的軟件設計思路。在功能驗證中,引入的類經常需要變化。例如,在許多測試中我們可能需要給事務增加更多的約束或字段,或者想在整個環(huán)境中或僅僅一個單接口中使用新的派生類。UVM 提供了一個內建的工廠機制,促進環(huán)境重用和調整預定義的驗證 IP。工廠機制最大的優(yōu)點之一是,其對于測試人員簡單、透明, 并且減少了開發(fā)者和用戶對面向對象知識的需求。


我的理解就是利用 factory 機制,我們可以方便快捷地更換驗證環(huán)境中的任何一個組件。


b. Phase 機制
UVM 將 testbench 建立、仿真啟動到最后仿真結束分為不同的階段,各個階段稱為不同的phase。在正式運行仿真的階段稱之為run_phase,在 run_phase 之前有 build_phase、connect_phase 等,在run_phase 之后有 check_phase、report_phase等。各個 phase 都有自己需要完成的動作。


UVM 中的 phase 根據是否消耗仿真時間分為 task phase 和 function phase。只有 run_phase 是 task phase。


在 UVM1.0 時代, run_phase 是其中唯一的一個 task_phase。當 UVM 進化到1.1 版 本 后,又 增 加 了 configure_phase、pre_main_phase、main_phase、post_main_phase 等 12 個 task_phase,同時為了兼容以前的 1.0 版本保留了
run_phase。這 12 個 phase 共同實現(xiàn)了 run_phase 的功能,通過這 12 個 task_phase可以實現(xiàn)對仿真過程更精細化的控制。


phase 的執(zhí)行是有先后順序的,是按照整個 testbench 的建立順序依次執(zhí)行。

對于 task_phase 來說, UVM 中不同 component 的同一個 phase 的執(zhí)行順序是并行執(zhí)行。UVM1.1 應用指南及源碼分析中有提到是“自上而下啟動,并行運行”。


c. Field_automation 機制
Field_automation 機制用于產生 transaction。使用該機制,我們能夠很方便的用 transaction 的成員函數,比如 print()、compare()(這個在 scoreboard 用的比較多)、pack()(這個函數在 driver 用的比較多)、unpack()(這個在 monitor 用的比較多)等等,簡化了很多工作。


d. Sequence 機制
sequence 機制不能不說是 UVM 的一大創(chuàng)新, sequence 使得激勵的產生和驅動相互分離,我們通過定義不同的 sequence 來使得 testbench 代碼可重用,增加了激勵產生的靈活性。?


引入 sequence 之后,在不同的 case 中將不同的 sequence設置成 sequencer 中 main_phase 的 default_sequence,這樣就完成了不同激勵的加
載。同時 sequence 能夠通過 starting_phase 來控制驗證平臺的開啟。


e. Config 機制
Config 機制用于在整個驗證環(huán)境中傳遞變量,通過 config 機制,可以在驗證平臺的頂層設置任何一個 component 或者某些指定 component 中的參數。在驗證平臺中 driver和 monitor 的虛接口和實體接口的連接就是通過 config 機制實現(xiàn)的。


f. Callback 機制
Callback 機制也是為了提高驗證平臺的可重用性,其原理類似于 phase 機制,但是不同于 phase 機制的是,其僅僅提供了 callback 的接口函數,函數中全部為空,需要開發(fā)者自己去填寫,通過對 callback 接口函數中填充不同的內容,來適應不同測試的需求。


比如我們要計算 mac 幀的 crc 校驗值,那么只能等到 transaction 中的除了 crc之 外 的 其 他 值 全 部 固 定 (randomize) 之 后 才 能 計 算 , 這 個 計 算 可 以 通 過post_randomize()函數來完成,這個函數就是一個 callback 函數。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
關閉
關閉