隨著片上系統(tǒng)(SoC)設(shè)計向更大的復(fù)雜性進軍,包含數(shù)千行系統(tǒng)級驗證代碼的測試套件仍在繼續(xù)手工編寫,這是一種古老而低效的做法,違背了“盡可能自動化”的格言。在嵌入式開發(fā)中,對于在SoC的嵌入式處理器上運行以在制造之前驗證整個器件的C測試來說尤其如此。
在可能的情況下,自動化驗證測試組合已被證明可以提高SoC開發(fā)的許多階段的生產(chǎn)率。例如,在通用驗證方法(UVM)測試臺中,約束隨機技術(shù)利用針對特定場景的隨機測試向量來增加覆蓋率。雖然這些提高了硬件模塊級的驗證效率,但設(shè)計仍被視為一個黑盒,激勵、檢查和覆蓋代碼分別編寫,對于大型模塊而言,這仍是一項繁重且容易出錯的任務(wù)。
考慮到需要將處理器測試代碼與I/O事務(wù)結(jié)合起來,通常在仿真器或原型系統(tǒng)上執(zhí)行,很難將這種方法擴展到系統(tǒng)級。為了正確驗證SoC,必須對處理器本身進行測試。UVM和其他約束隨機方法不考慮處理器上運行的代碼。事實上,為了在SoC上使用UVM,處理器通常被移除,并被SoC總線上的虛擬輸入和輸出所取代,從而允許子系統(tǒng)減去處理器進行驗證。
SoC驗證工程師認識到了受限隨機測試平臺的局限性,促使他們手寫C測試以在處理器上運行模擬和硬件仿真,即使他們在充分運用SoC設(shè)計方面受到限制。這些驗證平臺的性能不足以運行完整的操作系統(tǒng)(OS),因此這些測試執(zhí)行“裸機”,這大大增加了合成工作的開銷。在嵌入式開發(fā)中,手寫測試,尤其是在沒有操作系統(tǒng)服務(wù)幫助的情況下,在利用多線程的多核處理器上以協(xié)調(diào)的方式運行是不常見的。結(jié)果是SoC行為的各個方面,例如并發(fā)操作和一致性,得到了最低限度的驗證。
自動生成C測試
當然,自動生成的C測試會更有效地利用工程資源。它們也增加了覆蓋面。與手寫測試相比,生成的C測試用例可以測試更多的SoC功能,并且可以找出難以想象的復(fù)雜的極限情況。多線程、多處理器測試用例可以測試設(shè)計中的所有并行路徑,以驗證并發(fā)性。它們可以在內(nèi)存段之間移動數(shù)據(jù)以強調(diào)一致性算法,并在數(shù)據(jù)應(yīng)該發(fā)送到芯片的輸入或從其輸出讀取時與I/O事務(wù)協(xié)調(diào)。這樣做的總體效果是增加系統(tǒng)功能覆蓋率,通常高于90%,而數(shù)字通常要低得多。
測試生成軟件,被稱為測試套件合成,使用一個易于理解的、基于圖形的場景模型來捕獲預(yù)期的設(shè)計行為。這些模型可以使用Accellera可移植刺激標準使用本地C++編寫或可視化描述。場景模型由設(shè)計或驗證工程師創(chuàng)建,作為SoC開發(fā)的自然部分,因為它們類似于傳統(tǒng)的芯片數(shù)據(jù)流圖,可以在白板上繪制以解釋部分設(shè)計規(guī)范。
這些模型本質(zhì)上包括激勵、檢查、覆蓋細節(jié)和調(diào)試信息,為生成器提供了生成高質(zhì)量、自檢C測試用例所需的一切,這些測試用例強調(diào)了設(shè)計的每個方面。在嵌入式開發(fā)中,因為它們是分層的和模塊化的,所以在模塊級開發(fā)的任何測試都可以作為完整SoC模型的一部分完全重用,并且可以很容易地與不同的團隊和跨項目共享。最后,合成工具可以分解單個意圖模型,以提供跨線程和I/O端口的并發(fā)測試,所有測試都同步在一起。
優(yōu)勢測試套件綜合
測試套件合成的一個顯著優(yōu)勢是能夠在意圖模型上預(yù)先定義覆蓋目標。一旦指定了意圖,該工具就可以對其進行分析,以了解可能產(chǎn)生的測試數(shù)量以及將要實現(xiàn)的功能意圖的覆蓋范圍。
對于SoC來說,這可能需要數(shù)千次測試。然后,可以通過約束要測試的意圖并將工具集中在關(guān)鍵領(lǐng)域來設(shè)置覆蓋目標。這種能力避免了傳統(tǒng)方法中出現(xiàn)的痛苦的迭代循環(huán),傳統(tǒng)方法是設(shè)置測試,運行驗證工具,理解實現(xiàn)的覆蓋范圍,然后一次又一次地重置測試。
在一個由著名半導(dǎo)體公司開發(fā)的大型SoC的典型項目中,驗證工程師將測試組合時間減少到以前需要手寫測試的20%。自動化技術(shù)產(chǎn)生了更嚴格的測試用例,覆蓋率從84%提高到97%。此外,這些型號便于攜帶。
在嵌入式開發(fā)中,單個模型可以為虛擬平臺、寄存器傳輸級(RTL)模擬、仿真、現(xiàn)場可編程門陣列(FPGA)原型或?qū)嶒炇抑姓谶M行硅后驗證的實際芯片生成測試用例。
調(diào)試是工程師的另一個時間陷阱,尤其是在SoC層面。如果一個測試用例發(fā)現(xiàn)了一個潛伏的設(shè)計錯誤,驗證工程師必須了解是哪個測試觸發(fā)了這個錯誤,從而追蹤到它的來源。測試用例失敗可能是由于場景模型中的一個錯誤,因此必須能夠?qū)y試用例與捕獲設(shè)計意圖的圖相關(guān)聯(lián)。這個過程創(chuàng)建了高度模塊化和自包含的測試,這些測試很容易被分解,這樣就很容易看到為發(fā)現(xiàn)bug而執(zhí)行的測試。
結(jié)論
就像約束隨機測試平臺消除了塊驗證的人工工作一樣,基于嵌入式處理器的SOC的綜合測試內(nèi)容已被證明可以減少系統(tǒng)級驗證工作。此外,在嵌入式開發(fā)中,該解決方案目前正在塊級應(yīng)用,并用于芯片后驗證。在這個例子中,自動化C測試用例應(yīng)用了“盡可能自動化”的格言,顯著地提高了覆蓋率,同時縮短了驗證計劃。