在設(shè)計(jì)安全關(guān)鍵系統(tǒng)時(shí),國(guó)際安全標(biāo)準(zhǔn)對(duì)于我們選擇合適的流程和適當(dāng)?shù)募夹g(shù)來(lái)檢測(cè)和避免最終產(chǎn)品中的危險(xiǎn)故障至關(guān)重要,這些標(biāo)準(zhǔn)確保我們不會(huì)像之前的嵌入式開(kāi)發(fā)工程師一樣陷入同樣的困境。
然而,這些標(biāo)準(zhǔn)的危險(xiǎn)在于,它們假設(shè)你對(duì)底層硬件(如微控制器)有詳細(xì)的了解,這可能會(huì)導(dǎo)致經(jīng)驗(yàn)不足的安全工程師實(shí)施不安全的設(shè)計(jì)。例如,IEC(國(guó)際電工委員會(huì))60730標(biāo)準(zhǔn)建議使用棋盤式存儲(chǔ)器測(cè)試來(lái)檢測(cè)B類軟件的可變存儲(chǔ)器中的DC故障,這比看起來(lái)更具挑戰(zhàn)性。
本文描述了SRAM的邏輯布局和物理布局之間未記錄的差異如何導(dǎo)致我們無(wú)意中錯(cuò)誤地實(shí)現(xiàn)了諸如棋盤算法之類的內(nèi)存測(cè)試。標(biāo)準(zhǔn)微控制器的數(shù)據(jù)表中通常沒(méi)有必要的信息,但幸運(yùn)的是,內(nèi)存測(cè)試算法不受SRAM邏輯和物理布局之間差異的影響。
在運(yùn)行時(shí)測(cè)試SRAM的缺陷
SRAM存儲(chǔ)器顯然是由IC供應(yīng)商在生產(chǎn)中進(jìn)行測(cè)試的,有缺陷的產(chǎn)品不會(huì)運(yùn)送給消費(fèi)者。盡管如此,在IC的使用壽命期間,隨機(jī)硬件缺陷可能會(huì)出現(xiàn),這也是在嵌入式開(kāi)發(fā)安全關(guān)鍵應(yīng)用中需要在運(yùn)行時(shí)測(cè)試微控制器中硬件的原因之一。
棋盤式記憶測(cè)驗(yàn)
IEC 60730(H.2.19.6.1)等安全標(biāo)準(zhǔn)建議,對(duì)于必須符合B級(jí)安全等級(jí)的應(yīng)用,可以使用棋盤算法來(lái)識(shí)別SRAM中的某些缺陷(DC故障)。通常選擇棋盤測(cè)試,因?yàn)樗采w了SRAM中最可能的故障,而且速度相對(duì)較快,便于將對(duì)應(yīng)用程序本身的性能影響降至最低。除了DC故障(一個(gè)比特永久地處于高位或低位)外,棋盤算法還可以檢測(cè)相鄰比特相互影響的缺陷。
SRAM在邏輯上由多個(gè)按字組織的位組成。這些字通常為8位、16位或32位寬,但也可以更長(zhǎng)。物理上,這些位被組織成陣列,其中每個(gè)位通常有八個(gè)相鄰的位(見(jiàn)圖1)。位中的物理缺陷可能會(huì)影響單個(gè)位,使其處于高位或低位(DC故障),或者缺陷可能是兩位分離,在這種情況下,相鄰的侵略單元(圖1中用紫色標(biāo)記)可能會(huì)影響受害單元(圖2中用黃色標(biāo)記)。攻擊者受害者場(chǎng)景通常被稱為耦合故障。從統(tǒng)計(jì)上看,DC故障更可能發(fā)生,但它仍然與檢測(cè)最可能的耦合故障相關(guān)。
圖1-相鄰位之間的潛在耦合故障
如果故障正在影響單個(gè)位,因此該位一直處于高位或低位,則可以通過(guò)寫(xiě)入值1,通過(guò)讀回驗(yàn)證1,然后寫(xiě)入值0并讀回驗(yàn)證0來(lái)揭示故障,如圖1所示。另一方面,嵌入式開(kāi)發(fā)如果缺陷是兩個(gè)相鄰位之間的耦合故障,例如第2行中的位列9和10,則某些模式(例如全1或全0)將不會(huì)顯示耦合故障,因?yàn)樵跍y(cè)試期間單元具有相同的值。
相鄰單元(側(cè)面、上方和下方)的這種耦合故障具有相反的二進(jìn)制值。圖1(右下)說(shuō)明了第10位中的一位污染了第9位,由于第9位未保持預(yù)期值零,因此顯示了耦合故障。
SRAM的物理布局與邏輯布局
為了使棋盤算法工作,需要知道哪些位是相鄰位。這是一個(gè)問(wèn)題,因?yàn)閿?shù)據(jù)表通常只描述SRAM的邏輯布局,而不描述SRAM是如何物理組織的。
為了理解SRAM的物理布局,必須區(qū)分一次可以訪問(wèn)一個(gè)位的面向位存儲(chǔ)器(BOM)和一次讀寫(xiě)n位字的面向字存儲(chǔ)器(WOM)。雖然大多數(shù)真實(shí)世界的內(nèi)存都是以WOM的形式實(shí)現(xiàn)的,但科學(xué)文獻(xiàn)中的經(jīng)典內(nèi)存測(cè)試算法通常采用BOM實(shí)現(xiàn)。
對(duì)于WOM存儲(chǔ)器,構(gòu)成字的位的物理組織有三大類:相鄰、交錯(cuò)和子陣列。雖然邏輯布局將每個(gè)單詞放在同一列中的前一個(gè)單詞下面(類似于地址空間),但相鄰的內(nèi)存將每個(gè)單詞放置在同一行中,如圖2所示。交錯(cuò)結(jié)構(gòu)將字的每個(gè)位分離到SRAM陣列的不同列和行中。最后,子陣列組織將一個(gè)字的每個(gè)位放置在SRAM的不同物理分離塊中。現(xiàn)實(shí)情況是,在嵌入式開(kāi)發(fā)中,你不知道正確執(zhí)行棋盤測(cè)試所需的物理布局。
圖2-面向單詞的存儲(chǔ)器的物理布局示例
棋盤測(cè)試的特點(diǎn)和缺點(diǎn)
用于實(shí)現(xiàn)棋盤式算法的簡(jiǎn)單方法是交替地將值0xAA(假設(shè)為8位數(shù)據(jù)字)寫(xiě)入第一個(gè)地址,并將0x55寫(xiě)入下一個(gè)地址。然后驗(yàn)證該模式以檢測(cè)相鄰小區(qū)之間的任何DC或耦合故障。然后使用逆模式重復(fù)該過(guò)程。如前所述,有一個(gè)陷阱:內(nèi)存邏輯布局中的棋盤圖案可能不是底層物理布局中的一個(gè)棋盤圖案,如圖3所示。
圖3-邏輯與物理SRAM的數(shù)據(jù)模式。
補(bǔ)償邏輯布局和物理布局之間的差異似乎很明顯,但設(shè)備數(shù)據(jù)表中很少提供必要的信息。那么,你是做什么的?接受較低的覆蓋范圍,畢竟,診斷仍將覆蓋DC故障和相鄰位之間的一些耦合故障?向IC供應(yīng)商請(qǐng)求布局,并為每個(gè)設(shè)備定制棋盤測(cè)試?或者選擇其他算法?
既然你已經(jīng)意識(shí)到棋盤測(cè)試的潛在缺點(diǎn),你就可以做出明智的決定了。
SRAM運(yùn)行時(shí)測(cè)試的替代算法
IEC 60730中針對(duì)C級(jí)安全級(jí)別提出的內(nèi)存測(cè)試技術(shù)具有更高的故障檢測(cè)覆蓋率,但這些算法屬于可被視為生產(chǎn)測(cè)試算法的算法:它們運(yùn)行時(shí)間更長(zhǎng),也檢測(cè)到更罕見(jiàn)的故障類型,但通常會(huì)破壞存儲(chǔ)在SRAM中的數(shù)據(jù),因?yàn)樗鼈冊(cè)谡麄€(gè)SRAM上運(yùn)行,而不是在子塊中運(yùn)行。
一般來(lái)說(shuō),對(duì)于我們的嵌入式開(kāi)發(fā)設(shè)計(jì),我們不能很好地容忍這種情況。因此,我們建議你考慮改編自生產(chǎn)測(cè)試March算法的混合March算法:這些算法在WOM優(yōu)化實(shí)現(xiàn)中可用,并提供高測(cè)試覆蓋率。此外,這些混合March算法可以實(shí)現(xiàn)為在SRAM的較小重疊部分上運(yùn)行,以避免一次擦除SRAM中的所有數(shù)據(jù),這意味著可以避免嵌入式系統(tǒng)的重新啟動(dòng)。March算法的缺點(diǎn)是,它們比傳統(tǒng)的棋盤算法計(jì)算量更大,但這是安全關(guān)鍵系統(tǒng)中可能需要的開(kāi)銷。