• 正文
    • ? ? ? 1. 完備性
    • ? ? ? 2. 可擴(kuò)展性?
    • ? ? ? 3. 可控性?
    • ? ?總結(jié)? ? ??
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

如何寫出更牛的驗(yàn)證激勵(lì)

2024/10/08
1377
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

芯片驗(yàn)證是為了發(fā)現(xiàn)芯片中的錯(cuò)誤而執(zhí)行的過程,它是一個(gè)破壞性的過程。完備的驗(yàn)證激勵(lì)可以更有效地發(fā)現(xiàn)芯片錯(cuò)誤,進(jìn)而縮短驗(yàn)證周期。合格的驗(yàn)證激勵(lì)必須能產(chǎn)生所有可能的驗(yàn)證場景(完備性),包括合法和非法的場景,并保持最大的可擴(kuò)展性和可控性。

激勵(lì)構(gòu)造一直都是芯片驗(yàn)證的一大難點(diǎn)。本文將從完備性、可拓展性可控性三方面展開闡述如何系統(tǒng)地思考和構(gòu)建驗(yàn)證激勵(lì)。

? ? ? 1. 完備性

完備性可以從接口類型內(nèi)部結(jié)構(gòu)激勵(lì)審查三方面分析。分析接口類型是為了從待測模塊與其它模塊的交互信號上提取出驗(yàn)證場景。分析內(nèi)部結(jié)構(gòu)是為了從待測模塊內(nèi)部實(shí)現(xiàn)細(xì)節(jié)上來調(diào)整激勵(lì),使激勵(lì)多產(chǎn)生可能發(fā)現(xiàn)錯(cuò)誤的場景。激勵(lì)審查用于查缺補(bǔ)漏,從自己、他人以及項(xiàng)目等各個(gè)環(huán)節(jié)上對激勵(lì)進(jìn)行完善。

1.1 接口類型

對于待測設(shè)計(jì)的輸入輸出接口,可以通過接口類型進(jìn)行劃分,根據(jù)接口類型的特性構(gòu)造對應(yīng)的驗(yàn)證組件來產(chǎn)生激勵(lì)。常見接口類型有:

系統(tǒng)控制接口:主要是時(shí)鐘、復(fù)位、電源開關(guān)、時(shí)鐘門控、時(shí)鐘分頻等,這類信號行為都會有詳細(xì)的規(guī)定,遵循實(shí)際集成關(guān)系做控制即可。例如:時(shí)鐘和復(fù)位的時(shí)序,多個(gè)時(shí)鐘是不是同步關(guān)系,多個(gè)復(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è)計(jì)了解各信號的準(zhǔn)確信息。

其它接口:DFT等。通常來說,這類接口與驗(yàn)證關(guān)系不是很大,只需要把它們接固定值即可。

在對接口類型進(jìn)行分析要產(chǎn)生的激勵(lì)時(shí),可以先從單一接口類型進(jìn)行分析,然后再看多個(gè)接口交互上有什么需要重點(diǎn)關(guān)注。關(guān)于如何進(jìn)行測試點(diǎn)分解,可以看這個(gè)系列視頻《芯片驗(yàn)證分享系列總結(jié)及PPT分享》。

1.1.1 單一接口類型

單一接口類型分析可以按基本顆、高級顆非法行為順序進(jìn)行。

基本顆粒:基本顆粒面向信號層,提供基本顆粒生成方法。

每根信號:信號來源和功能、使能極性、脈沖有效或電平有效、時(shí)序、信號的取值范圍和格式等。

信號之間:不同信號之間的關(guān)系,是否存在握手和時(shí)序關(guān)系,無關(guān)信號是否處理成隨機(jī)值還是固定值等。

高級顆粒:高級顆粒面向場景層,它封裝了多個(gè)基本顆粒,較少考慮底層信號。

序列:傳輸包的序列有哪些。

密度:傳輸包的密度分布有哪些。

非法行為:用于驗(yàn)證待測設(shè)計(jì)的魯棒性,出現(xiàn)非法行為,待測設(shè)計(jì)是否可以正常處理。

數(shù)值:信號值可能出現(xiàn)哪些非預(yù)期的值。

行為:信號時(shí)序、協(xié)議等行為可能出現(xiàn)哪些異常行為。

1.1.2 多個(gè)接口交互

對于具有多個(gè)接口的待測設(shè)計(jì),我們也需要考慮接口之間可能存在的交互或同步,以及接口之間是否使用共同資源。比如,為了測試兩個(gè)接口相同地址hazard,可以讓這兩個(gè)接口共享一個(gè)地址產(chǎn)生器。

不同接口對應(yīng)不同的驗(yàn)證組件,組件之間的協(xié)調(diào)有用多種方式:

中心統(tǒng)籌式:通過集中式控制、分配和協(xié)調(diào),在上層將任務(wù)分解成每個(gè)接口組件的任務(wù),并統(tǒng)一分派給各個(gè)接口組件去執(zhí)行,進(jìn)而產(chǎn)生不同的激勵(lì)組合場景。比如UVM中的virtual sequence角色。

分布事件驅(qū)動(dòng)式:每個(gè)接口組件有自己的控制權(quán),各個(gè)組件直接進(jìn)行交互。比如使用SystemVerilog中的event、mailbox、semaphore和全部變量等方式實(shí)現(xiàn)通信交互。

混合式:上述兩種方式并存。這需要根據(jù)具體場景來使用。

1.2 內(nèi)部結(jié)構(gòu)

激勵(lì)設(shè)計(jì)除了看接口信號外,還需要結(jié)合待測設(shè)計(jì)的內(nèi)部結(jié)構(gòu)和功能去分析,調(diào)整激勵(lì)約束,從而有更大的概率產(chǎn)生有效場景。

可以沿著控制流(control flow)方向去分析待測設(shè)計(jì)的內(nèi)部結(jié)構(gòu)和功能,具體以下幾個(gè)地方需要重點(diǎn)關(guān)注:

觸發(fā)功能點(diǎn):觸發(fā)內(nèi)部某個(gè)功能的激勵(lì)序列有哪些,比如Prefetch、flow-control、address hazard等。觸發(fā)內(nèi)部某個(gè)功能的敏感值有哪些,比如ALU、內(nèi)部錯(cuò)誤(cache ecc error, slave error, etc)、barrier、exclusive monitor、address hazard等。

觸發(fā)資源瓶頸和爭搶:如何觸發(fā)內(nèi)部資源瓶頸和爭搶。比如FIFO空滿、Buffer空滿、多請求源仲裁、數(shù)字運(yùn)算上下溢等。

1.3 激勵(lì)審查

審查(Review)環(huán)節(jié)對完善激勵(lì)起著至關(guān)重要的作用,可以提高激勵(lì)質(zhì)量,并減少漏驗(yàn)特性、無效激勵(lì)的概率,對個(gè)人成長也有很大幫助。

建議以下這些審查方式都要按順序進(jìn)行:

個(gè)人審查:由自己進(jìn)行,對照歷史錯(cuò)誤清單進(jìn)行,舉一反三,避免犯類似錯(cuò)誤。

同組審查:由組內(nèi)更有經(jīng)驗(yàn)的人進(jìn)行,對激勵(lì)完備性、設(shè)計(jì)結(jié)構(gòu)、假設(shè)、代碼實(shí)現(xiàn)進(jìn)行檢查。

跨組審查:由待測模塊的設(shè)計(jì)人員進(jìn)行,對激勵(lì)完備性、設(shè)計(jì)顧慮、易錯(cuò)特性、局限性和各種激勵(lì)假設(shè)進(jìn)行檢查。

? ? ? 2. 可擴(kuò)展性?

可擴(kuò)展性也包括可復(fù)用性。為了處理驗(yàn)證周期縮短、待測RTL規(guī)格頻繁變動(dòng)等各種情況,我們需要在設(shè)計(jì)激勵(lì)時(shí)提前構(gòu)思如何讓激勵(lì)更容易擴(kuò)展。基于此,我們可以從模塊化層次化方面去思考。

2.1 模塊化

模塊化需要將設(shè)計(jì)輸入輸出信號劃分為不同的接口類型,并創(chuàng)建出對應(yīng)的接口驗(yàn)證組件,確保各個(gè)組件之間的獨(dú)立性,各個(gè)組件才會最大程度地不受其它組件的制約。并定義好模塊之間的交互方式,這樣一個(gè)模塊的改動(dòng)對其它模塊的影響就很小,而且模塊也更容易的復(fù)用到其它地方。例如,如果有兩組相同接口,則應(yīng)該引入兩個(gè)組件分別控制,而非建立一個(gè)組件卻擁有兩套接口,這樣后期維護(hù)起來會很麻煩的。

另外把常見的功能封裝成公共庫,這樣在多個(gè)地方都可以直接使用,如果功能需要改動(dòng),只需要改動(dòng)一處代碼即可。在寫代碼時(shí),多留一些后門(callback),方便實(shí)現(xiàn)多樣化的激勵(lì)和后期增加新功能。

2.2 層次化

層次化需要將激勵(lì)抽象出各個(gè)層次,越高的抽象層次越不關(guān)注底層的時(shí)序,而是更重視驗(yàn)證場景構(gòu)造。這樣底層信號時(shí)序或功能的改動(dòng)也不容易影響到上層的激勵(lì),而且上層的激勵(lì)說不定也可以復(fù)用到其它地方。

以UVM為例,uvm_driver應(yīng)只關(guān)心接口驅(qū)動(dòng),負(fù)責(zé)把收到的uvm_sequence_item內(nèi)容直接驅(qū)動(dòng)到接口信號;uvm_sequence負(fù)責(zé)場景的構(gòu)造,當(dāng)然uvm_sequence也可以繼續(xù)分層,更上層的uvm_sequence產(chǎn)生更宏觀的驗(yàn)證場景,然后逐層分解成小的場景。

? ? ? 3. 可控性?

可控性用于表征是否容易控制激勵(lì)產(chǎn)生預(yù)期的驗(yàn)證場景。比如驗(yàn)證ECC模塊功能時(shí),在最開始時(shí),我們需要不注入任何ECC錯(cuò)誤的激勵(lì),側(cè)重于驗(yàn)證ECC模塊功能是否正常。隨后才會打開ECC注錯(cuò)激勵(lì),驗(yàn)證ECC模塊是否可以檢查出來。這需要提供一些方式可以控制是否打開ECC注錯(cuò)激勵(lì)?;诖?,我們可以從局部全局方面去思考。

 

3.1 局部

可控性局部的意思是驗(yàn)證激勵(lì)可以單獨(dú)控制局部激勵(lì)的行為,通常來說面向單個(gè)接口驗(yàn)證組件。這層控制的特點(diǎn)是偏向于接口,可以細(xì)致到控制接口每根信號的行為。

比如,待測對象有兩個(gè)ECC模塊,我們可以控制其中一個(gè)有ECC注錯(cuò),另一個(gè)沒有。

3.2 全局

可控性全局的意思是驗(yàn)證激勵(lì)可以一同控制所有激勵(lì)的行為,通常來說面向一個(gè)驗(yàn)證環(huán)境中的所有接口驗(yàn)證組件。這層控制的特點(diǎn)是偏向于特性,是把所有局部控制參數(shù)整合起來,提供和驗(yàn)證特性相關(guān)的控制參數(shù)。

比如,待測對象有兩個(gè)ECC模塊,我們可以同時(shí)控制兩個(gè)都有ECC注錯(cuò),或都沒有等。又或者待測對象的某個(gè)特性還未開發(fā)完成,我們可以控制不讓所有激勵(lì)發(fā)出與未完成特性相關(guān)的場景。

? ?總結(jié)? ? ??

綜上所述,激勵(lì)設(shè)計(jì)可以按照“完備性->可拓展性->可控性”方向去分析。在完備性中,可以按照“接口類型->內(nèi)部結(jié)構(gòu)->激勵(lì)審查”方向去分析。在可拓展性中,可以按照“模塊化->層次化”方向去分析。在可控性中,可以按照“局部->全局”方向去分析。

另外很重要的一點(diǎn)是:要經(jīng)常對驗(yàn)證結(jié)果進(jìn)行復(fù)盤分析,并優(yōu)化激勵(lì)。

總得思維導(dǎo)圖如下:

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄