驗證基礎(chǔ)之(Stimulator、monitor、checker)
????????測試平臺(testbench)是整個驗證系統(tǒng)的總稱。它包括驗證結(jié)構(gòu)中的各個組件、組件之間的連接關(guān)系、測試平臺的配置和控制。更系統(tǒng)的來講,它還包括編譯仿真的流程、結(jié)果分析報告和覆蓋率檢查等。從狹義上來講,我們主要關(guān)注驗證平臺的結(jié)構(gòu)和組件部分,他們可以產(chǎn)生設(shè)計所需要的各種輸入,也會在此基礎(chǔ)上進行設(shè)計功能的檢查。
????????對一個測試平臺,各個組件之間是相互獨立的,驗證組件與設(shè)計之間需要連接、驗證組件之間也需要進行通信、驗證環(huán)境也需要時鐘和復(fù)位信號的驅(qū)動。下面來講一講基礎(chǔ)的驗證組件Stimulator、monitor、checker。
激勵發(fā)生器(Stimulator)
????????Stimulator(激勵發(fā)生器)是驗證的重要部件,在些場合中,它也被稱為Driver、BFM(buf function model)、behavior(行為模型)或者generator(發(fā)生器)。
????????Stimulator的主要職責(zé)是模擬與DUT相鄰設(shè)計的接口協(xié)議,只需要關(guān)注如何模擬接口信號,使其能夠以真實的接口協(xié)議來發(fā)送激勵給DUT。Stimulator 不應(yīng)該違反協(xié)議,但不拘束于真實的硬件行為,還可以給出更多豐富的只要協(xié)議允許的激勵場景。
????????它具有比真實硬件更豐富的激勵,會使得在模塊級的驗證更加充分,因為它不但驗證過了硬件的普通接口協(xié)議情景,還模擬出更多復(fù)雜的、在更高系統(tǒng)級別無法產(chǎn)生出來的場景。
????????Stimulator的接口主要與DUT之間連接,此外,也應(yīng)該有時鐘和復(fù)位的輸入,確保生成的數(shù)據(jù)同DUT的接口一側(cè)是同步的關(guān)系。較精細的Stimulator還可以有其他的配置接口用來控制接口的數(shù)據(jù)生成。Stimulator也可以有存儲接口數(shù)據(jù)生成歷史的功能,方便在結(jié)束后查看接口數(shù)據(jù)。
如果用一個Stimulator去驗證一個FIFO,就要考慮FIFO的狀態(tài)可遍歷。例如,典型的FIFO狀態(tài)可以分為empty、full以及中間狀態(tài)即有數(shù)據(jù)存儲但未存滿。要使得FIFO可以觸發(fā)這些狀態(tài),我們就應(yīng)該控制Stimulator的傳輸速率。
在寄存器讀寫傳輸上,可以考慮連續(xù)的寫、讀、或者讀寫交叉的方式測試寄存器模塊的讀寫功能。對于讀寫寄存器的所有比特位測試都應(yīng)該覆蓋。對于只讀狀態(tài)寄存器需要測試是否為不可寫入的設(shè)定,你說你是只讀的,我就偏要往里寫,然后再讀出來,看看你是不是真的是只讀的。
監(jiān)測器(Monitor)
????????Monitor(監(jiān)測器)的主要功能是用來觀察DUT的邊界或者內(nèi)部信號,并且經(jīng)過打包整理傳送給其他驗證平臺的組件,例如checker(比較器)。
monitor可以觀測DUT邊界信號。對于系統(tǒng)信號如時鐘,可以監(jiān)測其頻率變化;對于總線信號,可以監(jiān)測總線的傳輸類型和數(shù)據(jù)內(nèi)容,以及檢查總線時序是否符合協(xié)議。
monitor也可以觀察DUT內(nèi)部信號。從灰盒驗證的手段來看,往往需要探視DUT內(nèi)部信號,用來指導(dǎo)Stimulator的激勵發(fā)送,或者完成覆蓋率收集,又或者完成內(nèi)部功能的檢查。
對于monitor,更傾向于一個Stimulator配一個monitor,即不同的接口信號的采集交給不同的monitor,因為就各個接口的功能而言,它們之間沒有聯(lián)系性,易于切割。
利用分立的monitor還有一個好處,就是相對獨立的monitor可以更好地作為驗證IP被其他的驗證環(huán)境復(fù)用,也更方便驗證后期項目修改的維護工作。
比較器(checker)
????????checker肩負模擬設(shè)計行為和功能檢查的任務(wù),所以無論是從實現(xiàn)難度還是維護人力上講,checker都應(yīng)當(dāng)是最需要時間投入的驗證組件了。
????????比較器需要能緩存從各個monitor收集到的數(shù)據(jù)。將DUT輸入接口側(cè)的數(shù)據(jù)匯集給內(nèi)置的reference model。通過數(shù)據(jù)比較的方法,檢查實際收集到的DUT輸出端口數(shù)據(jù)是否同reference model產(chǎn)生的期望數(shù)據(jù)一致。對于設(shè)計內(nèi)部的關(guān)鍵功能模塊,也有相對應(yīng)的線程進行獨立的檢查。
實現(xiàn)方式:
1.線上比較(online check):在仿真時收集數(shù)據(jù)和在線比較,并且實時報告。
2.線下比較(offline check):將仿真時收集到的數(shù)據(jù)記錄在文件中,在仿真結(jié)束后,通過腳本或者其他手段,進行數(shù)據(jù)比較。
對于復(fù)雜的系統(tǒng)驗證,我們更傾向于集中管理Stimulator和checker,因為它們兩者都需要主動給出激勵或者判斷結(jié)果,也需要較多的協(xié)調(diào)處理。而monitor則相對更獨立,因為它只作為檢測方,任務(wù)就是把監(jiān)測到的數(shù)據(jù)都交給checker就行了。
monitor和Stimulator是一一對應(yīng)的,所以我們通常將它們進一步封裝在agent單元組件中,而checker則最終集群擱置在中心化的位置。