UVM中的6個(gè)關(guān)鍵機(jī)制
時(shí)間:2021-11-12 14:14:55
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀]UVM內(nèi)建了許多關(guān)鍵的處理機(jī)制,幫助實(shí)現(xiàn)驗(yàn)證工程師需要的功能。a.Factory機(jī)制Factory機(jī)制是產(chǎn)生通用代碼的一種典型的軟件設(shè)計(jì)思路。在功能驗(yàn)證中,引入的類經(jīng)常需要變化。例如,在許多測(cè)試中我們可能需要給事務(wù)增加更多的約束或字段,或者想在整個(gè)環(huán)境中或僅僅一個(gè)單接口中使用新的...
UVM 內(nèi)建了許多關(guān)鍵的處理機(jī)制,幫助實(shí)現(xiàn)驗(yàn)證工程師需要的功能。
a. Factory 機(jī)制
Factory機(jī)制是產(chǎn)生通用代碼的一種典型的軟件設(shè)計(jì)思路。在功能驗(yàn)證中,引入的類經(jīng)常需要變化。例如,在許多測(cè)試中我們可能需要給事務(wù)增加更多的約束或字段,或者想在整個(gè)環(huán)境中或僅僅一個(gè)單接口中使用新的派生類。UVM 提供了一個(gè)內(nèi)建的工廠機(jī)制,促進(jìn)環(huán)境重用和調(diào)整預(yù)定義的驗(yàn)證 IP。工廠機(jī)制最大的優(yōu)點(diǎn)之一是,其對(duì)于測(cè)試人員簡(jiǎn)單、透明, 并且減少了開發(fā)者和用戶對(duì)面向?qū)ο笾R(shí)的需求。
我的理解就是利用 factory 機(jī)制,我們可以方便快捷地更換驗(yàn)證環(huán)境中的任何一個(gè)組件。
b. Phase 機(jī)制
UVM 將 testbench 建立、仿真啟動(dòng)到最后仿真結(jié)束分為不同的階段,各個(gè)階段稱為不同的phase。在正式運(yùn)行仿真的階段稱之為run_phase,在 run_phase 之前有 build_phase、connect_phase 等,在run_phase 之后有 check_phase、report_phase等。各個(gè) phase 都有自己需要完成的動(dòng)作。
UVM 中的 phase 根據(jù)是否消耗仿真時(shí)間分為 task phase 和 function phase。只有 run_phase 是 task phase。
在 UVM1.0 時(shí)代, run_phase 是其中唯一的一個(gè) task_phase。當(dāng) UVM 進(jìn)化到1.1 版 本 后,又 增 加 了 configure_phase、pre_main_phase、main_phase、post_main_phase 等 12 個(gè) task_phase,同時(shí)為了兼容以前的 1.0 版本保留了
run_phase。這 12 個(gè) phase 共同實(shí)現(xiàn)了 run_phase 的功能,通過這 12 個(gè) task_phase可以實(shí)現(xiàn)對(duì)仿真過程更精細(xì)化的控制。
phase 的執(zhí)行是有先后順序的,是按照整個(gè) testbench 的建立順序依次執(zhí)行。
對(duì)于 task_phase 來說, UVM 中不同 component 的同一個(gè) phase 的執(zhí)行順序是并行執(zhí)行。UVM1.1 應(yīng)用指南及源碼分析中有提到是“自上而下啟動(dòng),并行運(yùn)行”。
c. Field_automation 機(jī)制
Field_automation 機(jī)制用于產(chǎn)生 transaction。使用該機(jī)制,我們能夠很方便的用 transaction 的成員函數(shù),比如 print()、compare()(這個(gè)在 scoreboard 用的比較多)、pack()(這個(gè)函數(shù)在 driver 用的比較多)、unpack()(這個(gè)在 monitor 用的比較多)等等,簡(jiǎn)化了很多工作。
d. Sequence 機(jī)制
sequence 機(jī)制不能不說是 UVM 的一大創(chuàng)新, sequence 使得激勵(lì)的產(chǎn)生和驅(qū)動(dòng)相互分離,我們通過定義不同的 sequence 來使得 testbench 代碼可重用,增加了激勵(lì)產(chǎn)生的靈活性。?
引入 sequence 之后,在不同的 case 中將不同的 sequence設(shè)置成 sequencer 中 main_phase 的 default_sequence,這樣就完成了不同激勵(lì)的加
載。同時(shí) sequence 能夠通過 starting_phase 來控制驗(yàn)證平臺(tái)的開啟。
e. Config 機(jī)制
Config 機(jī)制用于在整個(gè)驗(yàn)證環(huán)境中傳遞變量,通過 config 機(jī)制,可以在驗(yàn)證平臺(tái)的頂層設(shè)置任何一個(gè) component 或者某些指定 component 中的參數(shù)。在驗(yàn)證平臺(tái)中 driver和 monitor 的虛接口和實(shí)體接口的連接就是通過 config 機(jī)制實(shí)現(xiàn)的。
f. Callback 機(jī)制
Callback 機(jī)制也是為了提高驗(yàn)證平臺(tái)的可重用性,其原理類似于 phase 機(jī)制,但是不同于 phase 機(jī)制的是,其僅僅提供了 callback 的接口函數(shù),函數(shù)中全部為空,需要開發(fā)者自己去填寫,通過對(duì) callback 接口函數(shù)中填充不同的內(nèi)容,來適應(yīng)不同測(cè)試的需求。
比如我們要計(jì)算 mac 幀的 crc 校驗(yàn)值,那么只能等到 transaction 中的除了 crc之 外 的 其 他 值 全 部 固 定 (randomize) 之 后 才 能 計(jì) 算 , 這 個(gè) 計(jì) 算 可 以 通 過post_randomize()函數(shù)來完成,這個(gè)函數(shù)就是一個(gè) callback 函數(shù)。
a. Factory 機(jī)制
Factory機(jī)制是產(chǎn)生通用代碼的一種典型的軟件設(shè)計(jì)思路。在功能驗(yàn)證中,引入的類經(jīng)常需要變化。例如,在許多測(cè)試中我們可能需要給事務(wù)增加更多的約束或字段,或者想在整個(gè)環(huán)境中或僅僅一個(gè)單接口中使用新的派生類。UVM 提供了一個(gè)內(nèi)建的工廠機(jī)制,促進(jìn)環(huán)境重用和調(diào)整預(yù)定義的驗(yàn)證 IP。工廠機(jī)制最大的優(yōu)點(diǎn)之一是,其對(duì)于測(cè)試人員簡(jiǎn)單、透明, 并且減少了開發(fā)者和用戶對(duì)面向?qū)ο笾R(shí)的需求。
我的理解就是利用 factory 機(jī)制,我們可以方便快捷地更換驗(yàn)證環(huán)境中的任何一個(gè)組件。
b. Phase 機(jī)制
UVM 將 testbench 建立、仿真啟動(dòng)到最后仿真結(jié)束分為不同的階段,各個(gè)階段稱為不同的phase。在正式運(yùn)行仿真的階段稱之為run_phase,在 run_phase 之前有 build_phase、connect_phase 等,在run_phase 之后有 check_phase、report_phase等。各個(gè) phase 都有自己需要完成的動(dòng)作。
UVM 中的 phase 根據(jù)是否消耗仿真時(shí)間分為 task phase 和 function phase。只有 run_phase 是 task phase。
在 UVM1.0 時(shí)代, run_phase 是其中唯一的一個(gè) task_phase。當(dāng) UVM 進(jìn)化到1.1 版 本 后,又 增 加 了 configure_phase、pre_main_phase、main_phase、post_main_phase 等 12 個(gè) task_phase,同時(shí)為了兼容以前的 1.0 版本保留了
run_phase。這 12 個(gè) phase 共同實(shí)現(xiàn)了 run_phase 的功能,通過這 12 個(gè) task_phase可以實(shí)現(xiàn)對(duì)仿真過程更精細(xì)化的控制。
phase 的執(zhí)行是有先后順序的,是按照整個(gè) testbench 的建立順序依次執(zhí)行。
對(duì)于 task_phase 來說, UVM 中不同 component 的同一個(gè) phase 的執(zhí)行順序是并行執(zhí)行。UVM1.1 應(yīng)用指南及源碼分析中有提到是“自上而下啟動(dòng),并行運(yùn)行”。
c. Field_automation 機(jī)制
Field_automation 機(jī)制用于產(chǎn)生 transaction。使用該機(jī)制,我們能夠很方便的用 transaction 的成員函數(shù),比如 print()、compare()(這個(gè)在 scoreboard 用的比較多)、pack()(這個(gè)函數(shù)在 driver 用的比較多)、unpack()(這個(gè)在 monitor 用的比較多)等等,簡(jiǎn)化了很多工作。
d. Sequence 機(jī)制
sequence 機(jī)制不能不說是 UVM 的一大創(chuàng)新, sequence 使得激勵(lì)的產(chǎn)生和驅(qū)動(dòng)相互分離,我們通過定義不同的 sequence 來使得 testbench 代碼可重用,增加了激勵(lì)產(chǎn)生的靈活性。?
引入 sequence 之后,在不同的 case 中將不同的 sequence設(shè)置成 sequencer 中 main_phase 的 default_sequence,這樣就完成了不同激勵(lì)的加
載。同時(shí) sequence 能夠通過 starting_phase 來控制驗(yàn)證平臺(tái)的開啟。
e. Config 機(jī)制
Config 機(jī)制用于在整個(gè)驗(yàn)證環(huán)境中傳遞變量,通過 config 機(jī)制,可以在驗(yàn)證平臺(tái)的頂層設(shè)置任何一個(gè) component 或者某些指定 component 中的參數(shù)。在驗(yàn)證平臺(tái)中 driver和 monitor 的虛接口和實(shí)體接口的連接就是通過 config 機(jī)制實(shí)現(xiàn)的。
f. Callback 機(jī)制
Callback 機(jī)制也是為了提高驗(yàn)證平臺(tái)的可重用性,其原理類似于 phase 機(jī)制,但是不同于 phase 機(jī)制的是,其僅僅提供了 callback 的接口函數(shù),函數(shù)中全部為空,需要開發(fā)者自己去填寫,通過對(duì) callback 接口函數(shù)中填充不同的內(nèi)容,來適應(yīng)不同測(cè)試的需求。
比如我們要計(jì)算 mac 幀的 crc 校驗(yàn)值,那么只能等到 transaction 中的除了 crc之 外 的 其 他 值 全 部 固 定 (randomize) 之 后 才 能 計(jì) 算 , 這 個(gè) 計(jì) 算 可 以 通 過post_randomize()函數(shù)來完成,這個(gè)函數(shù)就是一個(gè) callback 函數(shù)。