<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > 自動(dòng)實(shí)現(xiàn)半導(dǎo)體器件系統(tǒng)強(qiáng)化測(cè)試的方法

          自動(dòng)實(shí)現(xiàn)半導(dǎo)體器件系統(tǒng)強(qiáng)化測(cè)試的方法

          作者: 時(shí)間:2011-11-22 來源:網(wǎng)絡(luò) 收藏

          檢驗(yàn)芯片的各項(xiàng)功能需要編寫診斷軟件,目的是確保器件的各項(xiàng)功能按要求工作,但是無論各項(xiàng)測(cè)試有多么詳盡,它都無法找出大部分系統(tǒng)層次的問題。因此,要利用系統(tǒng)級(jí)強(qiáng)化測(cè)試(stress testing)來使多種功能以高強(qiáng)度和隨機(jī)的方式共同執(zhí)行,從而迫使這些設(shè)計(jì)問題浮出表面。本文將探討用于檢驗(yàn)半導(dǎo)體器件設(shè)計(jì)的方法。

          強(qiáng)化測(cè)試

          強(qiáng)化測(cè)試是指將產(chǎn)品置于比實(shí)際正常應(yīng)用苛刻得多的條件下使用,其目的是通過各種方式對(duì)設(shè)備進(jìn)行考驗(yàn),迅速發(fā)現(xiàn)其設(shè)計(jì)缺陷。例如,對(duì)于一件機(jī)械產(chǎn)品,可能讓它面對(duì)惡劣的環(huán)境條件,如高壓、高溫和震動(dòng)。如果該產(chǎn)品能在這樣的條件下成功經(jīng)受一個(gè)月的考驗(yàn),那么在正常使用條件下,它應(yīng)該能工作長得多的時(shí)間。

          同樣的概念也適用于芯片的設(shè)計(jì)。此時(shí),強(qiáng)化測(cè)試的表現(xiàn)形式是執(zhí)行診斷軟件,其目的是使大量的芯片功能同時(shí)、連續(xù)、隨機(jī)、密集地工作,其程度遠(yuǎn)遠(yuǎn)超過芯片正常使用時(shí)的狀況。這些測(cè)試通常連續(xù)運(yùn)行,大多數(shù)時(shí)候無人照管,夜間和周末也不停止。通過這些測(cè)試,可以在產(chǎn)品發(fā)貨之前迫使隱藏的系統(tǒng)問題盡快地暴露出來。

          為什么強(qiáng)化測(cè)試對(duì)半導(dǎo)體設(shè)計(jì)如此重要呢?為了解釋這一問題,假設(shè)一個(gè)半導(dǎo)體器件常常為了不同用途而應(yīng)用在各種電子系統(tǒng)之中,因此,這些電子產(chǎn)品將被幾千甚至幾百萬用戶使用,每個(gè)用戶使用產(chǎn)品的方式各不相同。在如此大量的使用中,當(dāng)芯片上的功能和事件出現(xiàn)某種在器件測(cè)試過程中從未遇到過的順序或組合時(shí),可能就會(huì)發(fā)生問題。這些問題通常表現(xiàn)為:不時(shí)被鎖住、數(shù)據(jù)出錯(cuò)或其它難以復(fù)現(xiàn)的異常現(xiàn)象。如果這些問題出現(xiàn)太多(或者在執(zhí)行重要任務(wù)的產(chǎn)品中僅僅偶然出現(xiàn)),用戶將會(huì)認(rèn)為這些產(chǎn)品是不可靠甚至不穩(wěn)定的。

          強(qiáng)化測(cè)試概念的引出

          最初嘗試創(chuàng)建時(shí),方法是研究和編寫直接激活盡可能多的芯片功能并使它同時(shí)執(zhí)行軟件,使用定時(shí)器中斷并讓它執(zhí)行隨機(jī)測(cè)試,同時(shí)主程序不停地復(fù)制數(shù)據(jù),并隨機(jī)地不時(shí)啟動(dòng)其它芯片操作。當(dāng)想出向芯片內(nèi)引入更多無序和隨機(jī)事件的招數(shù)時(shí),便將它添加到軟件中去。很快就可以發(fā)現(xiàn),雖然陸續(xù)發(fā)現(xiàn)了許多問題,但它大多發(fā)生在自己編寫的軟件上。

          由于不時(shí)使用同一塊存儲(chǔ)區(qū)域或外設(shè)資源,測(cè)試軟件中的測(cè)試功能相互干擾。例如,當(dāng)一個(gè)測(cè)試正在使用某一通用I/O時(shí),另一個(gè)隨機(jī)啟動(dòng)的測(cè)試卻更改了它的狀態(tài)。由此不時(shí)導(dǎo)致的故障耗用了大量的調(diào)試時(shí)間。

          第二次,嘗試開發(fā)組織得非常好的強(qiáng)化測(cè)試軟件。它安排隨機(jī)選擇的測(cè)試功能輪流運(yùn)行,在許多地方將中斷鎖住,以防止軟件沖突和保證其它安全措施。這種謹(jǐn)慎的編程使得測(cè)試非常穩(wěn)定,但與直接測(cè)試相比,同樣不能有效地發(fā)現(xiàn)芯片的問題,因?yàn)樗前凑找环N很大程度上可預(yù)期的順序方式來執(zhí)行測(cè)試。畢竟測(cè)試的目的是為了測(cè)試半導(dǎo)體器件的設(shè)計(jì),而不是為了獲得穩(wěn)定的測(cè)試軟件。

          在理論上希望避免這兩種極端情況。測(cè)試的根本目的是為了暴露芯片中系統(tǒng)級(jí)的相互作用問題,為了達(dá)到這個(gè)目的,就必須將操作搞亂,使得許多不同事件以隨機(jī)方式發(fā)生。其中的訣竅是,以一種有組織的方式來保持測(cè)試的無序特點(diǎn),從而獲得可靠的測(cè)試軟件,并可進(jìn)行擴(kuò)展,還可以盡可能地幫助調(diào)試。要達(dá)到這些目的,需要仔細(xì)進(jìn)行考慮和規(guī)劃。這就是構(gòu)建一個(gè)強(qiáng)化測(cè)試框架的思路。

          測(cè)試框架

          本文介紹一個(gè)軟件框架(framework)的設(shè)計(jì),讀者可以使用這個(gè)框架來為半導(dǎo)體器件構(gòu)建一個(gè)可擴(kuò)展的強(qiáng)化測(cè)試。雖然本文沒有提供完整的框架,但這些內(nèi)容應(yīng)當(dāng)能夠激發(fā)讀者的靈感來幫助構(gòu)建自己的強(qiáng)化測(cè)試框架。

          軟件框架通過提供一個(gè)公共操作引擎和環(huán)境來簡(jiǎn)化特定類型的應(yīng)用開發(fā)工作,具體的應(yīng)用經(jīng)由一個(gè)定義好的接口來與框架連接。強(qiáng)化測(cè)試框架也采用了同樣的思路,它提供一個(gè)軟件引擎來處理強(qiáng)化測(cè)試的基本操作和公共功能。

          強(qiáng)化測(cè)試框架本身不測(cè)試任何芯片功能,但它允許嵌入測(cè)試事件模塊。測(cè)試事件模塊是實(shí)現(xiàn)一項(xiàng)具體的半導(dǎo)體器件測(cè)試或事件的函數(shù),通常要使用一組隨機(jī)產(chǎn)生的測(cè)試參數(shù)。執(zhí)行強(qiáng)化測(cè)試時(shí),框架引擎將隨機(jī)選擇并以不同方式來啟動(dòng)這些測(cè)試事件模塊。圖1:強(qiáng)化測(cè)試框架的組成。

          這個(gè)框架還為測(cè)試事件模塊提供了基本服務(wù)供其使用,包括保留系統(tǒng)資源的功能、選擇隨機(jī)測(cè)試參數(shù)的功能和數(shù)據(jù)記錄功能。大部分預(yù)先規(guī)劃和設(shè)計(jì)都位于框架本身內(nèi)部,因?yàn)榭蚣芴幚韽?qiáng)化測(cè)試復(fù)雜和“混亂無序”的一面。然后,根據(jù)需要增加單個(gè)測(cè)試事件模塊,擴(kuò)展強(qiáng)化測(cè)試。由于框架負(fù)責(zé)處理公共的強(qiáng)化測(cè)試軟件部分,測(cè)試事件模塊的開發(fā)人員可以專注于為目標(biāo)芯片功能編寫優(yōu)秀的測(cè)試程序。圖1為強(qiáng)化測(cè)試框架各個(gè)組成部分的高層次示意圖。

          隨機(jī)測(cè)試池是強(qiáng)化測(cè)試的核心部分,實(shí)際的半導(dǎo)體器件測(cè)試就位于其中。它是為了對(duì)芯片的某項(xiàng)具體功能啟動(dòng)事件和(或)執(zhí)行測(cè)試而編寫的測(cè)試事件模塊的集合。開發(fā)新的測(cè)試事件模塊時(shí),可將它添加到隨機(jī)測(cè)試池中,以便在下一次運(yùn)行強(qiáng)化測(cè)試時(shí)將其包含在內(nèi)。本文后面還將更詳細(xì)地介紹測(cè)試事件模塊,因?yàn)檫@是為芯片開發(fā)并由框架啟動(dòng)和支持的實(shí)際半導(dǎo)體器件測(cè)試。

          執(zhí)行過程中,強(qiáng)化測(cè)試引擎隨機(jī)地從池中選擇和運(yùn)行測(cè)試事件模塊。為了使測(cè)試變得更加雜亂無序(從而對(duì)器件設(shè)計(jì)施加更大的強(qiáng)化測(cè)試),框架采用異步時(shí)隙來按照任意時(shí)間間隔隨機(jī)選擇和啟動(dòng)測(cè)試。

          “時(shí)隙”使用一個(gè)硬件定時(shí)器來實(shí)現(xiàn),器件或測(cè)試板卡上的多個(gè)定時(shí)器可以擁有各自的時(shí)隙。框架為每個(gè)時(shí)隙定時(shí)器選擇隨機(jī)的時(shí)間間隔,當(dāng)時(shí)隙截止時(shí),引擎中斷當(dāng)前的測(cè)試模塊,定時(shí)器的中斷處理程序?qū)⑦x擇另一個(gè)模塊來執(zhí)行,同時(shí)引擎為下一個(gè)時(shí)隙操作選擇另一個(gè)隨機(jī)的時(shí)間間隔。這樣,測(cè)試將以一種交織的風(fēng)格執(zhí)行,引發(fā)各種各樣的執(zhí)行方式,同時(shí)還實(shí)現(xiàn)了執(zhí)行的并行性,這一點(diǎn)將在后面看到。

          選擇和啟動(dòng)一項(xiàng)測(cè)試的框架代碼很簡(jiǎn)單,因?yàn)闇y(cè)試事件模塊只不過是一個(gè)C語言函數(shù)而已。列表1是啟動(dòng)程序的一段代碼。一般而言,框架保持有一組C函數(shù),這些函數(shù)即為測(cè)試模塊,讀者可以選擇任意一個(gè)索引來查看函數(shù)并加以執(zhí)行。

          (列表1)列表1:隨機(jī)測(cè)試啟動(dòng)程序

          測(cè)試模塊

          如前所述,測(cè)試事件模塊是一個(gè)函數(shù),它針對(duì)半導(dǎo)體器件的某個(gè)具體特性執(zhí)行一個(gè)動(dòng)作或一次檢驗(yàn)。雖然框架將測(cè)試模塊作為一個(gè)C函數(shù)來激活,但如果需要,模塊也可以調(diào)用匯編級(jí)代碼??蚣艿木帉懛绞绞沟迷O(shè)計(jì)人員可以開發(fā)新的模塊并添加到測(cè)試池中,供強(qiáng)化測(cè)試期間框架隨機(jī)選擇。后面框架實(shí)例中的測(cè)試模塊是void C函數(shù),它不需要任何參數(shù)。在框架支持功能的幫助下,模塊本身可以啟動(dòng)測(cè)試并調(diào)用相應(yīng)的功能來記錄結(jié)果。

          測(cè)試事件模塊共有三種類型:


          1. 純事件


          2. 檢驗(yàn)測(cè)試


          3. 延遲檢驗(yàn)測(cè)試

          正如其名稱所表明的那樣,純事件模塊啟動(dòng)一個(gè)系統(tǒng)事件后不做任何檢驗(yàn)工作,包括以某種方式改變系統(tǒng)或啟動(dòng)某項(xiàng)后臺(tái)功能。那么,啟動(dòng)一個(gè)事件而不執(zhí)行任何檢驗(yàn)有什么意義呢?為了解釋這個(gè)問題,來考察一個(gè)測(cè)試事件模塊,它僅僅切換處理器高速緩存的當(dāng)前設(shè)置。每次框架隨機(jī)選擇這個(gè)模塊時(shí),高速緩存就從1切換到0或從0切換到1。這增加了一個(gè)變化因素,因?yàn)閷?duì)于運(yùn)行時(shí)需要用到這個(gè)高速緩存的測(cè)試模塊而言,它的值有時(shí)為1有時(shí)為0。

          第二種測(cè)試事件模塊是檢驗(yàn)測(cè)試,它執(zhí)行一個(gè)動(dòng)作,并在測(cè)試模塊函數(shù)退出之前對(duì)這個(gè)動(dòng)作進(jìn)行檢驗(yàn)。例如,這種測(cè)試可以用任意數(shù)據(jù)來填充隨機(jī)選擇的存儲(chǔ)器區(qū)域,然后采用任意CPU讀寫寬度來將這個(gè)區(qū)域復(fù)制到一個(gè)隨機(jī)的目的存儲(chǔ)器區(qū)域,再檢驗(yàn)其結(jié)果。

          第三種測(cè)試模塊是延遲檢驗(yàn)測(cè)試,這是功能最強(qiáng)的測(cè)試,雖然通常只能用于可以對(duì)總線進(jìn)行控制的芯片功能(換句話說,運(yùn)行在CPU的后臺(tái))。這種測(cè)試模塊將啟動(dòng)一個(gè)測(cè)試然后退出,使得在原測(cè)試?yán)^續(xù)運(yùn)行時(shí),其它測(cè)試模塊可以執(zhí)行。在大多數(shù)情況下,測(cè)試的完成用一個(gè)中斷來表示。當(dāng)中斷發(fā)生時(shí),中斷處理程序?qū)z驗(yàn)測(cè)試的結(jié)果。

          延遲檢驗(yàn)測(cè)試的例子如DMA (直接存儲(chǔ)器訪問)傳輸??梢跃帉懸粋€(gè)測(cè)試模塊來選擇隨機(jī)的源、目的存儲(chǔ)器區(qū)域和DMA通道。這個(gè)測(cè)試模塊可以用任意數(shù)值來填充源存儲(chǔ)器,并配置一個(gè)用來檢驗(yàn)測(cè)試結(jié)果的DMA結(jié)束中斷處理程序。這個(gè)中斷處理程序即為“延遲檢驗(yàn)測(cè)試”,它可訪問包含有被啟動(dòng)測(cè)試的詳細(xì)信息的數(shù)據(jù)結(jié)構(gòu),在被調(diào)用時(shí),它還將檢驗(yàn)測(cè)試的結(jié)果。

          測(cè)試框架實(shí)例

          為了展示這些測(cè)試的強(qiáng)大功能,來考察一個(gè)簡(jiǎn)單的測(cè)試框架實(shí)例,它包含以下四個(gè)測(cè)試模塊。

          1) 簡(jiǎn)單的基于CPU的存儲(chǔ)器復(fù)制(TE_CPU_COPY):


          將隨機(jī)數(shù)據(jù)樣式填充到一個(gè)任意大小的隨機(jī)源地址存儲(chǔ)器塊中,然后使用一種隨機(jī)混合的讀寫寬度來將數(shù)據(jù)樣式復(fù)制到任意選擇的目的地址。復(fù)制完成后,檢驗(yàn)?zāi)康膮^(qū)域中的數(shù)據(jù)是否包含了先前選擇的數(shù)據(jù)樣式。

          2) DMA存儲(chǔ)器---存儲(chǔ)器復(fù)制(TE_DMA_M2M):


          將任意數(shù)據(jù)樣式填充到隨機(jī)源地址的任意大小的存儲(chǔ)器塊中,然后任意選擇一個(gè)存儲(chǔ)器---存儲(chǔ)器DMA通道,編程為將源地址的數(shù)據(jù)樣式復(fù)制到隨機(jī)選擇的目的地址。當(dāng)DMA結(jié)束中斷發(fā)生時(shí),檢查兩個(gè)存儲(chǔ)器區(qū)域是否匹配。

          3) DMA---外設(shè)(TE_DMA_M2P):


          將任意數(shù)據(jù)樣式填充到隨機(jī)源地址的任意大小的存儲(chǔ)器塊中,然后任意選擇一個(gè)存儲(chǔ)器---存儲(chǔ)器DMA通道,編程為將數(shù)據(jù)樣式復(fù)制到特定外設(shè)的任意端口號(hào)中。當(dāng)DMA結(jié)束中斷發(fā)生時(shí),檢查外設(shè)的FIFO中是否包含了正確的數(shù)據(jù)(或者被發(fā)送到外設(shè))。

          4) 高速緩存切換(TE_CACHE):


          將高速緩存從1切換到0或從0切換到1并退出。這個(gè)測(cè)試模塊是一個(gè)純事件測(cè)試模塊,運(yùn)行時(shí)不執(zhí)行檢驗(yàn)操作。

          假設(shè)框架有三個(gè)時(shí)隙定時(shí)器用來啟動(dòng)測(cè)試事件模塊,那么啟動(dòng)它的main( )例程位于時(shí)隙0,具體運(yùn)行時(shí)可能與列表2所示類似。

          (列表2)列表2:強(qiáng)化測(cè)試框架運(yùn)行實(shí)例

          運(yùn)行開始時(shí)執(zhí)行存儲(chǔ)器復(fù)制測(cè)試。執(zhí)行過程中,時(shí)隙2定時(shí)器在復(fù)制中途定時(shí)截止。此時(shí),高速緩存測(cè)試事件模塊被啟動(dòng),它切換高速緩存的狀態(tài)并退出。復(fù)制測(cè)試在高速緩存處于新設(shè)置的狀況下繼續(xù)執(zhí)行。在測(cè)試完成之前,時(shí)隙1定時(shí)器又截止,此時(shí)一個(gè)DMA存儲(chǔ)器---端口測(cè)試模塊被啟動(dòng),它設(shè)置任意的DMA通道并退出?,F(xiàn)在,DMA已在后臺(tái)執(zhí)行,而原來的復(fù)制測(cè)試又重新運(yùn)行。隨后又發(fā)生一個(gè)時(shí)隙3定時(shí)器中斷,使用DMA通道5啟動(dòng)存儲(chǔ)器---存儲(chǔ)器傳輸并退出。這種安排還可以繼續(xù)下去,但已經(jīng)可以看到,通過這個(gè)測(cè)試,可以讓所有的DMA通道同時(shí)運(yùn)行,高速緩存隨機(jī)切換,而且CPU在測(cè)試過程中隨機(jī)訪問不同的存儲(chǔ)器區(qū)域。

          測(cè)試參數(shù)

          測(cè)試事件模塊將使用一個(gè)或多個(gè)隨機(jī)選擇的測(cè)試參數(shù)來執(zhí)行測(cè)試操作。常見的測(cè)試參數(shù)如:源和目的存儲(chǔ)器地址、塊大小、數(shù)據(jù)樣式、讀寫寬度(如8、16或32位)、DMA通道和UART端口。

          雖然隨機(jī)地選擇測(cè)試事件函數(shù)看起來比較簡(jiǎn)單,但究竟應(yīng)當(dāng)如何選擇隨機(jī)測(cè)試參數(shù)值,同時(shí)確保這些值對(duì)系統(tǒng)有效,而且不與其它測(cè)試發(fā)生交疊從而導(dǎo)致干擾呢?例如,如果某個(gè)測(cè)試選擇一個(gè)隨機(jī)的存儲(chǔ)器地址和大小,需要知道(1)存儲(chǔ)器確實(shí)存在;(2)其它測(cè)試沒有選擇與這片存儲(chǔ)器交疊的存儲(chǔ)器區(qū)域(因?yàn)橐粋€(gè)測(cè)試有可能改寫另一個(gè)測(cè)試的存儲(chǔ)器并導(dǎo)致故障)。另一個(gè)資源競(jìng)爭(zhēng)的例子是,兩個(gè)測(cè)試都隨機(jī)地選中同一個(gè)DMA通道來進(jìn)行數(shù)據(jù)傳輸。

          框架提供的支持功能使測(cè)試模塊可以安全地選擇任意測(cè)試參數(shù)。為了幫助理解這一點(diǎn),這里舉一個(gè)最常用的測(cè)試參數(shù)的例子:隨機(jī)選擇的系統(tǒng)存儲(chǔ)器塊。隨機(jī)選擇的存儲(chǔ)器塊有一個(gè)起始地址值和一個(gè)大小值,它都是隨機(jī)數(shù)值。這個(gè)存儲(chǔ)器塊可以位于CPU地址空間的任何位置,包括在SRAM、PCMCIA或Flash存儲(chǔ)器中。

          在列表3所示的例子中,memPool數(shù)組中填入了存儲(chǔ)器段的起始地址和大小,它位于系統(tǒng)的地址空間中,可供測(cè)試進(jìn)行隨機(jī)選擇。每個(gè)條目都有一個(gè)保留標(biāo)志(inUse項(xiàng))。為了選擇一個(gè)隨機(jī)存儲(chǔ)器塊,函數(shù)首先選擇一個(gè)隨機(jī)的指向存儲(chǔ)器段數(shù)組的索引。然后在這個(gè)段中選擇一個(gè)隨機(jī)的起始地址和大小。最大塊的大小值是存儲(chǔ)器段的結(jié)束地址減去所選的起始地址。一旦隨機(jī)塊的起始地址和大小選定了,整個(gè)存儲(chǔ)器段就通過設(shè)置保留標(biāo)志被標(biāo)記為保留。

          列表3:隨機(jī)存儲(chǔ)器塊選擇


          ============================


          typedef struct


          {


          uint32_t start_addr;


          uint32_t size;


          bool inUse;


          } memSeg;


          memSeg memPool[] =


          {


          /* start addr size inUse */


          { 0x10000000,0x00040000, 0},


          { 0x10040000,0x00040000, 0},


          { 0x10080000,0x00040000, 0},


          { 0x100c0000,0x00040000, 0},


          { 0x30000000,0x00040000, 0},


          { 0x30040000,0x00040000, 0},


          { 0x30080000,0x00040000, 0},


          { 0x300c0000,0x00040000, 0},


          { 0x30100000,0x00008000, 0},


          { 0x40004000,0x00004000, 0},


          { 0x40008000,0x00004000, 0},


          { 0x4000c000,0x00004000, 0},


          { 0xa0000000,0x00002000, 0},


          { 0xb0000000,0x00008000, 0},


          { 0xb0008000,0x00008000, 0},


          { 0xb0010000,0x00004000, 0}


          };


          int SelectAndReserveBlock(unsigned int *addr, unsigned int *size)


          {


          int retries=0; /* limit the number of times we try to get a segment */


          int seg;


          while(retries MAX_RETRY_COUNT)


          {


          /* Select a random memory segment (index into memPool array) */


          seg = GetRandomNumber(sizeof(memPool)/sizeof(memSeg));


          if (memPool[seg].inUse)


          {


          retries++;


          continue;


          }


          /* reserve the segment */


          memPool[seg].inUse = 1;


          /* select random block in segment, and don't let it run past the end


          of the segment. */


          *addr = memPool[seg].start_addr + GetRandomNumber(memPool[seg].size);


          max_size = memPool[seg].size - (*addr - memPool[seg].start_addr);


          if (max_size > MAX_BLOCK_SIZE)


          max_size = MAX_BLOCK_SIZE;


          *size = GetRandomNumber(max_size);


          break;


          }


          /* return the segment number so it can be used to free it later,


          or return -1 if we gave up looking for a free segment */


          return (retries >= MAX_RETRY_COUNT) ? -1 : seg;


          }


          void FreeMemorySegment(int seg)


          {


          memPool[seg].inUse = 0;


          }


          ===============================================

          這種方法的一個(gè)缺點(diǎn)是,使用存儲(chǔ)器段中的某個(gè)隨機(jī)存儲(chǔ)器塊時(shí),按照存儲(chǔ)器段數(shù)組中的定義方式,整個(gè)存儲(chǔ)器段都將被保留。如果所有存儲(chǔ)器段都被保留了,還有存儲(chǔ)器可用嗎?解決的辦法是將存儲(chǔ)器分為更小的段??赡芟M圆煌姆绞絹矸指畲鎯?chǔ)器段,以便消除跨越數(shù)據(jù)寬度和類型各不相同的多個(gè)存儲(chǔ)器器件來選擇存儲(chǔ)器塊的可能性。注意這些方案都比較簡(jiǎn)單,也可以加強(qiáng)它的功能,關(guān)鍵只是直接控制指示哪些存儲(chǔ)器區(qū)域可以使用。

          管理其它資源的選擇和保留可能更加簡(jiǎn)單。例如,保留標(biāo)志數(shù)組可用來管理DMA通道,數(shù)組的索引代表通道。設(shè)計(jì)人員可以編寫一個(gè)ReserveDmaChannel()函數(shù),它返回一個(gè)隨機(jī)DMA通道號(hào),這個(gè)通道號(hào)處于芯片上的DMA通道數(shù)目范圍之內(nèi),并且其保留標(biāo)志未被設(shè)置。然后,函數(shù)將設(shè)置保留標(biāo)志來保留這個(gè)通道。測(cè)試完成時(shí),可以調(diào)用FreeDmaChannel()來清除該標(biāo)志。

          調(diào)試技巧

          調(diào)試和分離與系統(tǒng)相互作用有關(guān)的問題可能比較困難,在這個(gè)過程中可以通過設(shè)計(jì)強(qiáng)化測(cè)試框架來提供幫助。根據(jù)運(yùn)行是在芯片生產(chǎn)前的仿真環(huán)境下進(jìn)行,還是在一個(gè)安裝有實(shí)際芯片的板卡上進(jìn)行,所遇到的問題將會(huì)有差異。

          在仿真環(huán)境下運(yùn)行時(shí),速度是最大的問題,仿真CPU的運(yùn)行速度要比實(shí)際器件慢得多。仿真環(huán)境的優(yōu)勢(shì)在于仿真工具可以輸出芯片設(shè)計(jì)內(nèi)部信號(hào)的詳細(xì)記錄,這將簡(jiǎn)化調(diào)試工作,但它也有一個(gè)很大的缺點(diǎn),即問題復(fù)現(xiàn)困難。如果為了暴露問題要花費(fèi)太長的時(shí)間來運(yùn)行強(qiáng)化測(cè)試,這將是難以接受的。

          解決的辦法是將強(qiáng)化測(cè)試作為許多較短(例如30分鐘)的測(cè)試來運(yùn)行,這可以通過用一組測(cè)試事件模塊來創(chuàng)建不同的測(cè)試來實(shí)現(xiàn)。此外,還應(yīng)該給每個(gè)測(cè)試分配一個(gè)專門的隨機(jī)數(shù)種子(seed),以便使用這個(gè)種子的其它測(cè)試每次運(yùn)行時(shí),都能重新產(chǎn)生準(zhǔn)確的測(cè)試事件和測(cè)試參數(shù)序列。

          好的運(yùn)行腳本可以隨機(jī)產(chǎn)生種子值,然后創(chuàng)建一個(gè)測(cè)試并加以運(yùn)行。種子值應(yīng)當(dāng)與運(yùn)行結(jié)果一起記錄下來。為了復(fù)現(xiàn)一個(gè)故障,可以用這個(gè)種子重新創(chuàng)建測(cè)試(因?yàn)榭赡懿幌MA羲械目蛇\(yùn)行測(cè)試程序,其數(shù)量可能達(dá)到幾千個(gè)),然后在短時(shí)間內(nèi)復(fù)現(xiàn)這個(gè)問題。

          在實(shí)際的芯片上可以運(yùn)行更多強(qiáng)化測(cè)試,因?yàn)槠鋱?zhí)行速度要快得多。但在理論上,它可能還是要花費(fèi)同樣長的時(shí)間,因?yàn)楸容^常見的問題應(yīng)該在芯片生產(chǎn)前的強(qiáng)化測(cè)試中就已經(jīng)暴露出來了。在這里,問題的復(fù)現(xiàn)同樣是一個(gè)很大的困難,讀者可以嘗試在芯片生產(chǎn)前的測(cè)試中應(yīng)用所介紹的技術(shù),但它可能不會(huì)同樣有效,因?yàn)閷?shí)際系統(tǒng)可能不如在仿真環(huán)境下那樣確定。換句話說,兩個(gè)采用同一隨機(jī)測(cè)試種子運(yùn)行的測(cè)試可能不會(huì)每次都獲得精確相同的運(yùn)行序列。另外,此時(shí)也無法記錄內(nèi)部信號(hào)的行為,因此應(yīng)該依靠一些技術(shù),如將檢測(cè)點(diǎn)的信息記錄到存儲(chǔ)器或高速端口、插入各種邏輯分析儀觸發(fā)事件,以及采用其它技術(shù)來幫助深入跟蹤問題的詳細(xì)情況。

          在實(shí)際芯片上調(diào)試系統(tǒng)問題時(shí),沒有什么通用的方法。設(shè)計(jì)人員應(yīng)當(dāng)周密考慮,并象即將遇到難以捉摸的故障一樣來進(jìn)行計(jì)劃,編寫程序代碼,為分析問題提供盡可能多的線索。

          此外,測(cè)試框架還應(yīng)該包含這樣一種能力,它創(chuàng)建的測(cè)試運(yùn)行程序能將某些測(cè)試模塊排除在外,從而使強(qiáng)化測(cè)試無需在已知的問題上停止下來而得以繼續(xù)運(yùn)行。另一方面,將其余功能排除在外也將使設(shè)計(jì)人員能夠?qū)δ承┨囟ǖ男酒δ苓M(jìn)行重點(diǎn)測(cè)試。

          框架需要組織良好的軟件代碼來生成種子、創(chuàng)建測(cè)試、運(yùn)行、存儲(chǔ)測(cè)試記錄和后續(xù)處理,并向設(shè)計(jì)人員報(bào)告所遇到的問題。這個(gè)過程應(yīng)當(dāng)是完全自動(dòng)化的,這樣就可長時(shí)間運(yùn)行測(cè)試而無需人員維護(hù)。

          記錄測(cè)試過程

          強(qiáng)化測(cè)試框架最少應(yīng)該記錄哪個(gè)測(cè)試模塊在運(yùn)行,以及發(fā)生的所有故障。完善的記錄將包括更多的信息,如選擇的隨機(jī)參數(shù),各個(gè)測(cè)試事件是何時(shí)啟動(dòng)、退出和檢驗(yàn) (針對(duì)延遲檢驗(yàn)函數(shù))的。這樣,設(shè)計(jì)人員就可以了解各個(gè)測(cè)試是如何相互聯(lián)系地運(yùn)行的。后續(xù)處理軟件可以生成一些有用的報(bào)告,以顯示測(cè)試的覆蓋范圍。

          開發(fā)記錄功能時(shí),應(yīng)使強(qiáng)化測(cè)試軟件盡可能簡(jiǎn)單方便地記錄事件。在仿真環(huán)境下,可編寫HDL代碼來提供一個(gè)記錄外設(shè),這樣設(shè)計(jì)人員只需寫下一個(gè)數(shù)值記號(hào), HDL就將產(chǎn)生完整的記錄信息。在實(shí)際芯片上,可以將字節(jié)記號(hào)和數(shù)值發(fā)送到存儲(chǔ)器板卡或輸出到調(diào)試端口。關(guān)鍵之處是要避免記錄操作本身過多占用寶貴的測(cè)試運(yùn)行時(shí)間,并導(dǎo)致過度干擾。通過后續(xù)處理軟件,可以使記錄更清楚、更美觀。

          本文小結(jié)

          由于框架將涉及對(duì)中斷處理程序所讀寫的共享數(shù)據(jù)結(jié)構(gòu)的使用,因此訪問這些數(shù)據(jù)結(jié)構(gòu)時(shí),應(yīng)在軟件代碼中對(duì)重要的存儲(chǔ)器段進(jìn)行保護(hù)。例如,如果一個(gè)測(cè)試事件剛剛讀取了一個(gè)存儲(chǔ)器段的inUse標(biāo)志并發(fā)現(xiàn)它未被使用,但在它將該存儲(chǔ)器段設(shè)置為保留之前,又發(fā)生了一個(gè)時(shí)隙中斷,中斷啟動(dòng)的測(cè)試模塊結(jié)束時(shí),可能將同一存儲(chǔ)器段設(shè)置為保留,因?yàn)榇藭r(shí)該存儲(chǔ)器段仍表現(xiàn)為未被使用。在這種類似的重要全局?jǐn)?shù)據(jù)訪問期間,應(yīng)該將時(shí)隙定時(shí)器中斷予以禁止。

          設(shè)計(jì)一個(gè)強(qiáng)化測(cè)試框架時(shí),有許多擴(kuò)展可能性。如可以調(diào)節(jié)測(cè)試事件模塊的概率權(quán)重,或調(diào)整測(cè)試參數(shù)以便對(duì)強(qiáng)化測(cè)試進(jìn)行精密調(diào)節(jié)。舉個(gè)例子,高速緩存切換事件可能是100個(gè)測(cè)試事件模塊之一,但測(cè)試時(shí)可能希望它運(yùn)行比1%多得多的時(shí)間,此時(shí)便可通過調(diào)整測(cè)試參數(shù)來實(shí)現(xiàn)。規(guī)劃、設(shè)計(jì)和實(shí)現(xiàn)性能優(yōu)良可靠的半導(dǎo)體器件強(qiáng)化測(cè)試框架是一項(xiàng)重大投入,雖然需要花費(fèi)大量的時(shí)間,但它可以幫助提高產(chǎn)品的質(zhì)量。

          作者: Steve Babin


          IBM公司負(fù)責(zé)開發(fā)靈巧電話軟件的深入計(jì)算事業(yè)部擔(dān)任顧問職務(wù)。在嵌入式系統(tǒng)領(lǐng)域擁有16年以上的工作經(jīng)驗(yàn),Steve
          Babin持有路易斯安那州立大學(xué)的電子工程學(xué)士學(xué)位。


          Email: sbabin@austin.rr.com



          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();