王建超,陸 鋒,顧衛(wèi)民
(1. 江南大學(xué)物聯(lián)網(wǎng)工程學(xué)院,江蘇 無(wú)錫 214122;2.中國(guó)電子科技集團(tuán)公司第58研究所,江蘇 無(wú)錫 214035)
現(xiàn)場(chǎng)可編程門(mén)陣列(Field Programmable Gate Array,F(xiàn)PGA)是在PAL、GAL、EPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門(mén)電路數(shù)有限的缺點(diǎn)。
FPGA主要由可配置邏輯模塊(CLB)、可編程連線資源(PI)、輸入輸出接口模塊(IOB)、用于配置的SRAM、BlockRAM和數(shù)字延遲鎖相環(huán)(DLL)等組成,結(jié)構(gòu)十分復(fù)雜。國(guó)外大規(guī)模FPGA電路設(shè)計(jì)了專用測(cè)試結(jié)構(gòu),由于技術(shù)保密,如何測(cè)試為廠商機(jī)密。因此需要深入研究其測(cè)試結(jié)構(gòu),開(kāi)發(fā)高效的測(cè)試程序。
本文所研究的FPGA為Virtex系列FPGA,而實(shí)現(xiàn)FPGA器件的主要功能模塊是可編程邏輯模塊(CLB),每個(gè)CLB由4個(gè)基本的邏輯單元(LC)構(gòu)成,一個(gè)LC包括4輸入函數(shù)發(fā)生器(LUT)、進(jìn)位邏輯、存儲(chǔ)單元、多路選擇器、與門(mén)、異或門(mén)、函數(shù)發(fā)生器級(jí)聯(lián)邏輯等子模塊。優(yōu)點(diǎn)在于每個(gè)模塊都可以組合互用,但如果要用完這些邏輯模塊,需要多次配置以改變不同的功能才能實(shí)現(xiàn)。針對(duì)FPGA 器件可用的 IO 數(shù)目有限,本文基于內(nèi)建自測(cè)試實(shí)現(xiàn)CLB全面測(cè)試,已達(dá)到全覆蓋測(cè)試的目的。
對(duì)于SRAM型FPGA,由于芯片內(nèi)有著大量重復(fù)的可編程邏輯模塊。如果對(duì)每一個(gè)邏輯單元都進(jìn)行功能例化測(cè)試,將會(huì)導(dǎo)致測(cè)試實(shí)例過(guò)多而降低測(cè)試效率,因而使用內(nèi)建自測(cè)試(BIST)方法來(lái)進(jìn)行邏輯資源覆蓋測(cè)試。利用 FPGA 的動(dòng)態(tài)可編程特性把FPGA自身的一部分邏輯資源配置成BIST電路來(lái)測(cè)試剩余邏輯資源,測(cè)試完成后再轉(zhuǎn)換角色繼續(xù)測(cè)試直到覆蓋所有的邏輯模塊,以此來(lái)達(dá)到降低測(cè)試復(fù)雜度和減少測(cè)試成本的目的。BIST測(cè)試的最大優(yōu)點(diǎn)是無(wú)需借助昂貴的自動(dòng)測(cè)試設(shè)備,只需使用簡(jiǎn)單的儀器觀察檢驗(yàn)電路ORA的輸出響應(yīng)即可。對(duì)FPGA進(jìn)行BIST測(cè)試只需很少的管腳,還可以利用邊界掃描寄存器,因此測(cè)試門(mén)檻很低。
內(nèi)建自測(cè)試(BIST)就是在電路內(nèi)部建立測(cè)試生成、施加、分析和測(cè)試控制結(jié)構(gòu)使得電路能夠自我測(cè)試的一種測(cè)試方法。利用 FPGA 內(nèi)的邏輯資源,將 BIST 電路分為3個(gè)模塊:測(cè)試向量生成模塊(TPG)、輸出結(jié)果分析模塊(ORA)和被測(cè)模塊(BUT)?;緶y(cè)試原理如圖 1所示。TPG 模塊是根據(jù)不同被測(cè)模塊(BUT)的功能來(lái)進(jìn)行編寫(xiě)的,它主要是產(chǎn)生被測(cè)模塊的所有輸入組合以及在這些組合下被測(cè)模塊產(chǎn)生的期望輸出結(jié)果。ORA 模塊是一塊比較電路,它的輸入是被測(cè)模塊的實(shí)際輸出和TPG模塊的期望輸出,通過(guò)比較這兩個(gè)輸入來(lái)判斷被測(cè)模塊(BUT)的功能是否正確。
圖1 BIST基本構(gòu)造示意圖
為了實(shí)現(xiàn)對(duì)CLB內(nèi)部以及CLB對(duì)應(yīng)的三態(tài)緩沖器BUFT進(jìn)行無(wú)差別、100%覆蓋率的內(nèi)建自測(cè)試,需要對(duì)三態(tài)緩沖器、觸發(fā)器、分布式RAM、CLB內(nèi)部進(jìn)位鏈與門(mén)、鎖存器、算數(shù)邏輯、多路選擇器MUXF6、移位寄存器進(jìn)行內(nèi)建自測(cè)試。通過(guò)BUFT以及與BUFT相連的FPGA片內(nèi)總線(長(zhǎng)線),將每列CLB輸出數(shù)據(jù)作為一組待測(cè)信號(hào),經(jīng)對(duì)應(yīng)的BUFT連入FPGA片內(nèi)總線,從而在結(jié)構(gòu)上實(shí)現(xiàn)對(duì)CLB內(nèi)部各器件/功能部件無(wú)差別、100%覆蓋率的測(cè)試;同時(shí)FPGA內(nèi)嵌的BLOCKRAM可以用作測(cè)試期望結(jié)果存儲(chǔ)的ROM,這樣只要通過(guò)一個(gè)簡(jiǎn)單的狀態(tài)機(jī)控制,即可實(shí)現(xiàn)對(duì)CLB內(nèi)部器件/功能部件無(wú)差別、100%覆蓋率的內(nèi)建自測(cè)試。
依據(jù)上述途徑實(shí)現(xiàn)的FPGA內(nèi)CLB功能內(nèi)建自測(cè)試程序主要由兩部分構(gòu)成:(1)Xilinx原語(yǔ)描述的被測(cè)器件結(jié)構(gòu)功能文件;(2)自測(cè)試與測(cè)試期望值ROM文件。由于Xilinx原語(yǔ)在synthesize/translate/map/place&route過(guò)程中,既不會(huì)被優(yōu)化掉,又方便用戶對(duì)被測(cè)器件進(jìn)行定位約束,所以在被測(cè)器件結(jié)構(gòu)功能文件中使用Xilinx原語(yǔ)描述。
由于自測(cè)試程序不占用三態(tài)緩沖器資源,所以使用一段測(cè)試向量即可完成對(duì)所有BUFT的測(cè)試。其功能框圖如圖2所示。本文所研究的FPGA中含32行50×2列片內(nèi)BUFTs,每行BUFTs輸出數(shù)據(jù)依據(jù)地址譯碼器的輸出值選出2 bits信號(hào)D_O,則32行共計(jì)64 bits數(shù)據(jù)D_O;期望值ROM共計(jì)2個(gè)單元,0地址存放數(shù)據(jù)64’b0,1地址存放數(shù)據(jù)64’Hffff_ffff_ffff_ffff。比較器的結(jié)果即為ERROR信號(hào),用戶可以依據(jù)ERROR信號(hào)將錯(cuò)誤信息記錄在err_msg中輸出,從而確保一旦發(fā)生錯(cuò)誤,用戶可以依據(jù)err_msg定位到BUFT的具體位置(行/列/Slice)。
圖2 所有三態(tài)緩沖器的內(nèi)建自測(cè)試程序功能框圖
為了保證電路內(nèi)部的所有觸發(fā)器全部被測(cè)試,按照其物理位置分別約束至Slice0和Slice1,觸發(fā)器的輸入引腳特性包括正沿/負(fù)沿觸發(fā)、同步/異步復(fù)位、復(fù)位高/低有效初始值0/1、使能端高/低有效,通過(guò)該方法實(shí)現(xiàn)對(duì)CLB內(nèi)部觸發(fā)器的功能測(cè)試。
考慮到自測(cè)試程序需要占用一定的CLB資源,所以分布式RAM最少也需要兩段程序方可確保每個(gè)CLB的每個(gè)LUT都可以被測(cè)試到。所以分兩次約束分布式RAM內(nèi)建自測(cè)試程序,第一次將分布式RAM約束到每個(gè)CLB的Slice0,第二次約束到Slice1。
此外,為了能夠獲得更高的故障覆蓋率,在自測(cè)試程序信號(hào)發(fā)生器使用March算法。March算法正是針對(duì)存儲(chǔ)電路開(kāi)發(fā)的測(cè)試算法。相對(duì)于其他算法,March算法具有更加簡(jiǎn)潔高效的測(cè)試向量及更好的故障覆蓋率。該算法覆蓋了固定0/1失效、固定開(kāi)路失效和轉(zhuǎn)換失效、地址失效和字間耦合失效,基于字的March算法表示為:
與分布式RAM一樣,與門(mén)也采用分別約束至Slice0、Slice1的方式實(shí)現(xiàn),共計(jì)2段碼方可實(shí)現(xiàn)100%覆蓋率的CLB內(nèi)部觸發(fā)器的功能測(cè)試。
電路內(nèi)部的鎖存器按照其物理位置分別約束至Slice0、Slice1,通過(guò)該方式實(shí)現(xiàn)對(duì)CLB內(nèi)部鎖存器(包括對(duì)高/低有效選通位)的功能測(cè)試,其功能框圖見(jiàn)圖3。
圖3 所有CLB內(nèi)部D鎖存器的內(nèi)建自測(cè)試程序功能框圖
電路內(nèi)部的算術(shù)邏輯按照其物理位置分別約束至Slice0和Slice1內(nèi),其測(cè)試碼共計(jì)需要2段。為了確保加法器的進(jìn)位鏈不會(huì)因綜合實(shí)現(xiàn)等操作的優(yōu)化而斷開(kāi),首先必須用Xilinx原語(yǔ)實(shí)現(xiàn)2 bits帶進(jìn)位輸入/輸出的全加器,其次必須按照規(guī)定的進(jìn)位鏈順序?qū)⒓臃ㄆ骷s束至對(duì)應(yīng)的CLB中去。
由于電路內(nèi)部MUXF6的輸入全部來(lái)自同一個(gè)CLB的MUXF5,而每個(gè)Slice里只有1個(gè)MUXF5,所以不可能依據(jù)Slice將該程序分別約束到不同的Slice,這里采用按列方式分為兩部分約束,第一段碼約束至CLB_RiC1~ CLB_RiC24,第二段碼約束至CLB_RiC25~ CLB_RiC48。
電路內(nèi)部的移位寄存器按照其物理位置分別約束至Slice0、Slice1,共計(jì)需要2段碼實(shí)現(xiàn)移位寄存器功能的100%故障覆蓋率。其功能框圖見(jiàn)圖4。
圖4 移位寄存器內(nèi)建自測(cè)試程序的功能框圖
為了對(duì)故障屏蔽現(xiàn)象進(jìn)行有效的控制,必須對(duì)BLOCKRAM、BUFT和FPGA片內(nèi)總線進(jìn)行測(cè)試,所以FPGA中CLB模塊內(nèi)建自測(cè)試必須依據(jù)固定的順序進(jìn)行,否則將因故障屏蔽現(xiàn)象導(dǎo)致測(cè)試故障覆蓋率有所降低。通過(guò)分別對(duì)三態(tài)緩沖器、觸發(fā)器、分布式RAM、CLB內(nèi)部進(jìn)位鏈與門(mén)、鎖存器、算數(shù)邏輯、多路選擇器MUXF6、移位寄存器進(jìn)行內(nèi)建自測(cè)試,從而達(dá)到了縮短測(cè)試時(shí)間、全覆蓋測(cè)試的目的。
[1] Ehsan A toofian, Zainalabed in Navabi. A Test Approach for Look Up Table Based FPGAs [J]. Journal of Computer Science and Technology, 2006.
[2] 李文昌,萬(wàn)理,等. 應(yīng)用于Virtex系列FPGA的IR-CLB資源的聯(lián)合測(cè)試和診斷[J]. 微電子學(xué)與計(jì)算機(jī),2014(01):31.
[3] 周濤. SRAM 型 FPGA 的測(cè)試技術(shù)研究[D]. 成都:電子科技大學(xué),2006. 5-7.
[4] 張凱虹,陸鋒,等. DDS自動(dòng)測(cè)試技術(shù)研究[J]. 半導(dǎo)體學(xué),2009(03):262-265.