Codasip 驗(yàn)證總監(jiān) Philippe Luc 分享了他對(duì)驗(yàn)證工程師應(yīng)注意哪些錯(cuò)誤的看法。
您是否知道在設(shè)計(jì)復(fù)雜的處理器內(nèi)核時(shí)可能會(huì)出現(xiàn) 1,000 到 2,000 個(gè)錯(cuò)誤?真的,一千個(gè)蟲子?嗯,這就是經(jīng)驗(yàn)告訴我們的。并非所有的錯(cuò)誤都是生來平等的:它們的重要性和后果可能會(huì)有很大差異。讓我們來看看 4 類CPU 錯(cuò)誤,如何找到它們,如果我們沒有找到它們會(huì)給用戶帶來什么后果。
類型 1:驗(yàn)證工程師容易發(fā)現(xiàn)的處理器 BUG
“哦,我忘記了分號(hào)”。是的,這是一個(gè)錯(cuò)誤。很容易檢測(cè)到,通常是您在編譯時(shí)直接發(fā)現(xiàn)的錯(cuò)誤。除了睜大眼睛,沒有其他辦法可以避免這些.
“哦,原來規(guī)范的一部分沒有實(shí)現(xiàn)”。這是另一個(gè)容易找到的 CPU 錯(cuò)誤,您可以通過任何體面的測(cè)試平臺(tái)找到 - 前提是存在顯式測(cè)試。在這種情況下,執(zhí)行該功能的第一個(gè)簡(jiǎn)單測(cè)試將失敗。您的處理器驗(yàn)證團(tuán)隊(duì)需要做什么?確保你有詳盡的測(cè)試。另一方面,設(shè)計(jì)團(tuán)隊(duì)需要努力仔細(xì)閱讀規(guī)范,并在開發(fā)過程中遵循規(guī)范中的任何更改。
換句話說,簡(jiǎn)單的錯(cuò)誤是通過運(yùn)行一個(gè)測(cè)試該功能的測(cè)試來發(fā)現(xiàn)的。它的(壞)行為是系統(tǒng)性的,而不是時(shí)間條件。詳盡的驗(yàn)證是找到此類 CPU 錯(cuò)誤的關(guān)鍵。代碼覆蓋率會(huì)幫助你,但絕對(duì)不夠。如果 RTL 中沒有對(duì)某個(gè)特性進(jìn)行編碼,那么覆蓋率如何報(bào)告它缺失?代碼審查- 手頭有規(guī)范 - 絕對(duì)有幫助。
類型 2:驗(yàn)證團(tuán)隊(duì)喜歡找到的極端案例
極端情況下的CPU 錯(cuò)誤更難找到,需要強(qiáng)大的測(cè)試平臺(tái)。運(yùn)行該功能的簡(jiǎn)單測(cè)試用例正確通過,即使有隨機(jī)延遲。很多時(shí)候,當(dāng)異步事件加入聚會(huì)時(shí),您會(huì)發(fā)現(xiàn)這些錯(cuò)誤。例如,一個(gè)中斷恰好在 2 條指令之間以精確的時(shí)間到達(dá)?;蛘呔彺嬷械囊恍性诖鎯?chǔ)緩沖區(qū)想要合并時(shí)被驅(qū)逐。要解決這些錯(cuò)誤,您需要一個(gè)能夠兼顧指令、參數(shù)和延遲的測(cè)試平臺(tái),以便執(zhí)行所有可能的指令和事件交錯(cuò)。顯然,一個(gè)好的檢查者應(yīng)該發(fā)現(xiàn)任何與預(yù)期的偏差。
在這種情況下,代碼覆蓋率有幫助嗎?不幸的是沒有。僅僅因?yàn)殄e(cuò)誤的情況是已經(jīng)單獨(dú)涵蓋的幾個(gè)事件的組合。在這里,條件覆蓋或分支覆蓋可能會(huì)有所幫助。但分析起來很痛苦,而且最終很少有好處。
1. 測(cè)試臺(tái)發(fā)現(xiàn)了簡(jiǎn)單的錯(cuò)誤和一些極端情況。2.我們從這些極端案例中學(xué)習(xí),以改進(jìn)測(cè)試平臺(tái)并擴(kuò)大驗(yàn)證范圍。這樣做,我們會(huì)發(fā)現(xiàn)隱藏的案例變成了極端案例(或簡(jiǎn)單的錯(cuò)誤)。3. 由于Bug“成群結(jié)隊(duì)”,我們可以根據(jù)最后發(fā)現(xiàn)的Bug進(jìn)一步擴(kuò)大我們的驗(yàn)證范圍。當(dāng)我們遇到一個(gè)愚蠢的錯(cuò)誤時(shí),我們知道我們的測(cè)試已經(jīng)足夠遠(yuǎn)了。
類型 3:意外發(fā)現(xiàn)的隱藏 CPU 錯(cuò)誤 - 或由客戶發(fā)現(xiàn)
隱藏的錯(cuò)誤是由客戶發(fā)現(xiàn)的(這是不好的),或者是偶然發(fā)現(xiàn)的(在內(nèi)部,在發(fā)布之前)。在這兩種情況下,這意味著驗(yàn)證方法無法找到它們。
如果您使用不同的測(cè)試臺(tái)或環(huán)境,您可能會(huì)因?yàn)榇碳げ煌业狡渌咐?。很公平。那么,我們所說的“偶然發(fā)現(xiàn)”是什么意思?這是隨機(jī)測(cè)試平臺(tái)方法的限制。
對(duì)于隨機(jī)刺激,測(cè)試平臺(tái)通常會(huì)生成“相同”的東西。如果你擲骰子得到一個(gè)隨機(jī)數(shù),那么連續(xù) 10 次得到數(shù)字 6 的機(jī)會(huì)很少。準(zhǔn)確地說,6000 萬分之一的機(jī)會(huì)。對(duì)于具有 100 條不同指令的RISC-V CPU,(等概率的)隨機(jī)指令生成器每 102? 次只有 1 次機(jī)會(huì)連續(xù)生成 10 次相同的指令。只是魔方不同位置數(shù)量的兩倍……在 10 級(jí)流水線處理器上,使用所有流水線級(jí)上存在的相同指令對(duì)其進(jìn)行測(cè)試并非不合理。如果你不調(diào)整你的隨機(jī)約束,祝你好運(yùn)......
類型 4:現(xiàn)實(shí)生活中不會(huì)發(fā)生的愚蠢錯(cuò)誤
您可能會(huì)過度尋找極端案例和隱藏案例,最終創(chuàng)建的測(cè)試太愚蠢了。
在連接調(diào)試器的同時(shí)在每個(gè)周期來回更改字節(jié)順序可能永遠(yuǎn)不會(huì)在消費(fèi)產(chǎn)品上發(fā)生,如果 CPU 錯(cuò)誤的后果對(duì)客戶來說永遠(yuǎn)不可見,那么它就不是真正的錯(cuò)誤。如果您在復(fù)制文件時(shí)故意拔下 U 盤,而文件已損壞,我認(rèn)為這不是錯(cuò)誤。如果某些操作導(dǎo)致 USB 控制器掛起,那么是的,這是一個(gè)錯(cuò)誤。
謹(jǐn)防擴(kuò)大驗(yàn)證范圍。當(dāng)發(fā)現(xiàn)愚蠢的案例時(shí),您可能將工程工作投入到錯(cuò)誤的地方。
您可以應(yīng)用不同的驗(yàn)證技術(shù)在客戶之前有效地發(fā)現(xiàn) CPU 錯(cuò)誤。在 Codasip,我們使用多個(gè)組件測(cè)試平臺(tái)、各種隨機(jī)測(cè)試生成器、隨機(jī)刺激器和其他幾種技術(shù)來驗(yàn)證我們的產(chǎn)品。隨著項(xiàng)目的發(fā)展,我們開發(fā)了這些技術(shù)以擁有強(qiáng)大的驗(yàn)證方法。在我們的博客文章中了解更多信息,其中我們解釋了我們?nèi)绾尾粩喔倪M(jìn)我們的驗(yàn)證方法。
審核編輯:符乾江
-
cpu
+關(guān)注
關(guān)注
68文章
10809瀏覽量
210874 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
8973瀏覽量
85098 -
錯(cuò)誤
+關(guān)注
關(guān)注
0文章
10瀏覽量
17344
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論