芯片驗(yàn)證是為了發(fā)現(xiàn)芯片中的錯誤而執(zhí)行的過程,它是一個破壞性的過程。完備的驗(yàn)證激勵可以更有效地發(fā)現(xiàn)芯片錯誤,進(jìn)而縮短驗(yàn)證周期。合格的驗(yàn)證激勵必須能產(chǎn)生所有可能的驗(yàn)證場景(完備性),包括合法和非法的場景,并保持最大的可擴(kuò)展性和可控性。
激勵構(gòu)造一直都是芯片驗(yàn)證的一大難點(diǎn)。本文將從完備性、可拓展性和可控性三方面展開闡述如何系統(tǒng)地思考和構(gòu)建驗(yàn)證激勵。
? ? ? 1. 完備性
完備性可以從接口類型、內(nèi)部結(jié)構(gòu)和激勵審查三方面分析。分析接口類型是為了從待測模塊與其它模塊的交互信號上提取出驗(yàn)證場景。分析內(nèi)部結(jié)構(gòu)是為了從待測模塊內(nèi)部實(shí)現(xiàn)細(xì)節(jié)上來調(diào)整激勵,使激勵多產(chǎn)生可能發(fā)現(xiàn)錯誤的場景。激勵審查用于查缺補(bǔ)漏,從自己、他人以及項(xiàng)目等各個環(huán)節(jié)上對激勵進(jìn)行完善。
1.1 接口類型
對于待測設(shè)計的輸入輸出接口,可以通過接口類型進(jìn)行劃分,根據(jù)接口類型的特性構(gòu)造對應(yīng)的驗(yàn)證組件來產(chǎn)生激勵。常見接口類型有:
系統(tǒng)控制接口:主要是時鐘、復(fù)位、電源開關(guān)、時鐘門控、時鐘分頻等,這類信號行為都會有詳細(xì)的規(guī)定,遵循實(shí)際集成關(guān)系做控制即可。例如:時鐘和復(fù)位的時序,多個時鐘是不是同步關(guān)系,多個復(fù)位信號是否可以單獨(dú)控制等。
標(biāo)準(zhǔn)總線接口:行業(yè)公開的標(biāo)準(zhǔn)總線協(xié)議,例如AMBA系列協(xié)議。這類協(xié)議通常有現(xiàn)成的驗(yàn)證IP,只需配置它們來產(chǎn)生預(yù)期的場景。
非標(biāo)準(zhǔn)總線接口:公司內(nèi)部定義的接口,或者根據(jù)模塊功能需求定義的接口。這類接口需要從相鄰設(shè)計了解各信號的準(zhǔn)確信息。
其它接口:DFT等。通常來說,這類接口與驗(yàn)證關(guān)系不是很大,只需要把它們接固定值即可。
在對接口類型進(jìn)行分析要產(chǎn)生的激勵時,可以先從單一接口類型進(jìn)行分析,然后再看多個接口交互上有什么需要重點(diǎn)關(guān)注。關(guān)于如何進(jìn)行測試點(diǎn)分解,可以看這個系列視頻《芯片驗(yàn)證分享系列總結(jié)及PPT分享》。
1.1.1 單一接口類型
單一接口類型分析可以按基本顆粒、高級顆粒和非法行為順序進(jìn)行。
基本顆粒:基本顆粒面向信號層,提供基本顆粒生成方法。
每根信號:信號來源和功能、使能極性、脈沖有效或電平有效、時序、信號的取值范圍和格式等。
信號之間:不同信號之間的關(guān)系,是否存在握手和時序關(guān)系,無關(guān)信號是否處理成隨機(jī)值還是固定值等。
高級顆粒:高級顆粒面向場景層,它封裝了多個基本顆粒,較少考慮底層信號。
序列:傳輸包的序列有哪些。
密度:傳輸包的密度分布有哪些。
非法行為:用于驗(yàn)證待測設(shè)計的魯棒性,出現(xiàn)非法行為,待測設(shè)計是否可以正常處理。
數(shù)值:信號值可能出現(xiàn)哪些非預(yù)期的值。
行為:信號時序、協(xié)議等行為可能出現(xiàn)哪些異常行為。
1.1.2 多個接口交互
對于具有多個接口的待測設(shè)計,我們也需要考慮接口之間可能存在的交互或同步,以及接口之間是否使用共同資源。比如,為了測試兩個接口相同地址hazard,可以讓這兩個接口共享一個地址產(chǎn)生器。
不同接口對應(yīng)不同的驗(yàn)證組件,組件之間的協(xié)調(diào)有用多種方式:
中心統(tǒng)籌式:通過集中式控制、分配和協(xié)調(diào),在上層將任務(wù)分解成每個接口組件的任務(wù),并統(tǒng)一分派給各個接口組件去執(zhí)行,進(jìn)而產(chǎn)生不同的激勵組合場景。比如UVM中的virtual sequence角色。
分布事件驅(qū)動式:每個接口組件有自己的控制權(quán),各個組件直接進(jìn)行交互。比如使用SystemVerilog中的event、mailbox、semaphore和全部變量等方式實(shí)現(xiàn)通信交互。
混合式:上述兩種方式并存。這需要根據(jù)具體場景來使用。
1.2 內(nèi)部結(jié)構(gòu)
激勵設(shè)計除了看接口信號外,還需要結(jié)合待測設(shè)計的內(nèi)部結(jié)構(gòu)和功能去分析,調(diào)整激勵約束,從而有更大的概率產(chǎn)生有效場景。
可以沿著控制流(control flow)方向去分析待測設(shè)計的內(nèi)部結(jié)構(gòu)和功能,具體以下幾個地方需要重點(diǎn)關(guān)注:
觸發(fā)功能點(diǎn):觸發(fā)內(nèi)部某個功能的激勵序列有哪些,比如Prefetch、flow-control、address hazard等。觸發(fā)內(nèi)部某個功能的敏感值有哪些,比如ALU、內(nèi)部錯誤(cache ecc error, slave error, etc)、barrier、exclusive monitor、address hazard等。
觸發(fā)資源瓶頸和爭搶:如何觸發(fā)內(nèi)部資源瓶頸和爭搶。比如FIFO空滿、Buffer空滿、多請求源仲裁、數(shù)字運(yùn)算上下溢等。
1.3 激勵審查
審查(Review)環(huán)節(jié)對完善激勵起著至關(guān)重要的作用,可以提高激勵質(zhì)量,并減少漏驗(yàn)特性、無效激勵的概率,對個人成長也有很大幫助。
建議以下這些審查方式都要按順序進(jìn)行:
個人審查:由自己進(jìn)行,對照歷史錯誤清單進(jìn)行,舉一反三,避免犯類似錯誤。
同組審查:由組內(nèi)更有經(jīng)驗(yàn)的人進(jìn)行,對激勵完備性、設(shè)計結(jié)構(gòu)、假設(shè)、代碼實(shí)現(xiàn)進(jìn)行檢查。
跨組審查:由待測模塊的設(shè)計人員進(jìn)行,對激勵完備性、設(shè)計顧慮、易錯特性、局限性和各種激勵假設(shè)進(jìn)行檢查。
? ? ? 2. 可擴(kuò)展性?
可擴(kuò)展性也包括可復(fù)用性。為了處理驗(yàn)證周期縮短、待測RTL規(guī)格頻繁變動等各種情況,我們需要在設(shè)計激勵時提前構(gòu)思如何讓激勵更容易擴(kuò)展?;诖耍覀兛梢詮?strong>模塊化和層次化方面去思考。
2.1 模塊化
模塊化需要將設(shè)計輸入輸出信號劃分為不同的接口類型,并創(chuàng)建出對應(yīng)的接口驗(yàn)證組件,確保各個組件之間的獨(dú)立性,各個組件才會最大程度地不受其它組件的制約。并定義好模塊之間的交互方式,這樣一個模塊的改動對其它模塊的影響就很小,而且模塊也更容易的復(fù)用到其它地方。例如,如果有兩組相同接口,則應(yīng)該引入兩個組件分別控制,而非建立一個組件卻擁有兩套接口,這樣后期維護(hù)起來會很麻煩的。
另外把常見的功能封裝成公共庫,這樣在多個地方都可以直接使用,如果功能需要改動,只需要改動一處代碼即可。在寫代碼時,多留一些后門(callback),方便實(shí)現(xiàn)多樣化的激勵和后期增加新功能。
2.2 層次化
層次化需要將激勵抽象出各個層次,越高的抽象層次越不關(guān)注底層的時序,而是更重視驗(yàn)證場景構(gòu)造。這樣底層信號時序或功能的改動也不容易影響到上層的激勵,而且上層的激勵說不定也可以復(fù)用到其它地方。
以UVM為例,uvm_driver應(yīng)只關(guān)心接口驅(qū)動,負(fù)責(zé)把收到的uvm_sequence_item內(nèi)容直接驅(qū)動到接口信號;uvm_sequence負(fù)責(zé)場景的構(gòu)造,當(dāng)然uvm_sequence也可以繼續(xù)分層,更上層的uvm_sequence產(chǎn)生更宏觀的驗(yàn)證場景,然后逐層分解成小的場景。
? ? ? 3. 可控性?
可控性用于表征是否容易控制激勵產(chǎn)生預(yù)期的驗(yàn)證場景。比如驗(yàn)證ECC模塊功能時,在最開始時,我們需要不注入任何ECC錯誤的激勵,側(cè)重于驗(yàn)證ECC模塊功能是否正常。隨后才會打開ECC注錯激勵,驗(yàn)證ECC模塊是否可以檢查出來。這需要提供一些方式可以控制是否打開ECC注錯激勵?;诖耍覀兛梢詮?strong>局部和全局方面去思考。
3.1 局部
可控性局部的意思是驗(yàn)證激勵可以單獨(dú)控制局部激勵的行為,通常來說面向單個接口驗(yàn)證組件。這層控制的特點(diǎn)是偏向于接口,可以細(xì)致到控制接口每根信號的行為。
比如,待測對象有兩個ECC模塊,我們可以控制其中一個有ECC注錯,另一個沒有。
3.2 全局
可控性全局的意思是驗(yàn)證激勵可以一同控制所有激勵的行為,通常來說面向一個驗(yàn)證環(huán)境中的所有接口驗(yàn)證組件。這層控制的特點(diǎn)是偏向于特性,是把所有局部控制參數(shù)整合起來,提供和驗(yàn)證特性相關(guān)的控制參數(shù)。
比如,待測對象有兩個ECC模塊,我們可以同時控制兩個都有ECC注錯,或都沒有等。又或者待測對象的某個特性還未開發(fā)完成,我們可以控制不讓所有激勵發(fā)出與未完成特性相關(guān)的場景。
? ?總結(jié)? ? ??
綜上所述,激勵設(shè)計可以按照“完備性->可拓展性->可控性”方向去分析。在完備性中,可以按照“接口類型->內(nèi)部結(jié)構(gòu)->激勵審查”方向去分析。在可拓展性中,可以按照“模塊化->層次化”方向去分析。在可控性中,可以按照“局部->全局”方向去分析。
另外很重要的一點(diǎn)是:要經(jīng)常對驗(yàn)證結(jié)果進(jìn)行復(fù)盤分析,并優(yōu)化激勵。
總得思維導(dǎo)圖如下: