賀云, 肖夢(mèng)燕, 唐銳
(工業(yè)和信息化部電子第五研究所, 廣東 廣州 511370)
由于現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA) 器件具有體積小、 能耗低、 高性能、 高可靠性和可重復(fù)編程等優(yōu)點(diǎn), 所以其在電子通信、 人工智能和軍工等領(lǐng)域得以廣泛地應(yīng)用。 從最初的萬(wàn)門(mén)級(jí)到目前的千萬(wàn)門(mén)級(jí)乃至更高, FPGA 朝著高集成度、 大規(guī)?;较虿粩嗟匕l(fā)展。 如何快速高效、 低成本地篩選出不合格產(chǎn)品, 判斷故障類型并實(shí)現(xiàn)故障定位具有重要的意義。
FPGA 的測(cè)試是配置后施加測(cè)試向量并對(duì)輸出進(jìn)行檢測(cè)比較的過(guò)程, 完整的測(cè)試需要大量的測(cè)試配置。 FPGA 內(nèi)部包含可編程邏輯資源模塊(CLB)、輸入輸出組(IOB)、 內(nèi)部互連線路(IR)、 塊RAM、DSP 和時(shí)鐘管理單元(CMT), 以及其他特殊的功能模塊, 因此在測(cè)試中常采用分治法將FPGA 以模塊進(jìn)行劃分, 根據(jù)各個(gè)模塊的典型故障有針對(duì)性地選擇測(cè)試方法。 本文將簡(jiǎn)要地介紹和總結(jié)FPGA 內(nèi)部各個(gè)模塊的故障類型和常用的測(cè)試方法。
CLB 是FPGA 中最基本同時(shí)也是數(shù)量最多的功能模塊, 它呈行列狀遍布于芯片內(nèi)部。 以Xilinx 的FPGA 為例, 每一個(gè)CLB 均由Slice 組成, Slice 分為普通邏輯單元SliceL 和可配置為存儲(chǔ)器的邏輯單元SliceM。 兩種Slice 內(nèi)部的資源類別相同, 均由查找表(LUT) 單元、 觸發(fā)器(FF)、 進(jìn)位邏輯及若干與門(mén)、 異或門(mén)和選擇器構(gòu)成[1]。
IOB 是直接連接芯片內(nèi)部硅片管腳(PAD) 的輸入輸出緩沖單元, 在不同的電氣標(biāo)準(zhǔn)下對(duì)輸入/輸出信號(hào)進(jìn)行匹配輸入或驅(qū)動(dòng)輸出, 所有的IOB都就近布置有一組對(duì)輸入輸出信號(hào)進(jìn)行邏輯處理的
IOLOGIC。
島型FPGA 的內(nèi)部互連線路(IR) 最初描述為開(kāi)關(guān)盒 (SB) 和連接盒 (CB) 模型[2], 隨著FPGA 連線資源的豐富, SB/CB 模型難以描述, 取而代之為開(kāi)關(guān)矩陣(SM) 的結(jié)構(gòu)[3]。 IR 主要包括SM 和金屬互連線, 其中SM 主要是由可編程連接點(diǎn)PIP 構(gòu)成。
BRAM 模塊是片內(nèi)集成的專用雙端口可讀寫(xiě)存儲(chǔ)單元, 分布于CLB 之間, BRAM 功能、 數(shù)據(jù)位寬、 讀寫(xiě)模式、 FIFO 模式和標(biāo)志信號(hào)等可配置。CMT (比如數(shù)字時(shí)鐘管理器DCM、 相位匹配分頻器PMCD、 鎖相環(huán)PLL 和MMCM 等) 實(shí)現(xiàn)時(shí)鐘信號(hào)的倍頻分頻、 時(shí)鐘偏移、 頻率綜合和時(shí)鐘抖動(dòng)濾波去歪斜等功能。 此外, 為了進(jìn)一步地加強(qiáng)FPGA性能, 片內(nèi)還會(huì)集成PCIE、 DSP 和乘法器等功能模塊。 典型的SRAM 型FPGA 的主要構(gòu)成如圖1所示。
圖1 FPGA 內(nèi)部結(jié)構(gòu)示意圖
FPGA 芯片內(nèi)部電路資源種類多, 對(duì)應(yīng)的結(jié)構(gòu)和功能各有差異, 因此表現(xiàn)出的故障類型也不同。一般地, 各個(gè)功能模塊可能出現(xiàn)的故障有: 固定型故障、 短路故障、 開(kāi)路故障、 暫態(tài)故障和延遲故障等[4]; 此外還有存儲(chǔ)資源中的地址譯碼故障、 轉(zhuǎn)換故障、 字內(nèi)或位耦合故障、 讀寫(xiě)破壞故障和碼敏感故障等。
固定型故障是指電路中至少一條線路不論輸入什么電平始終固定為邏輯高或低電平, 分為固定1故障和固定0 故障。 常見(jiàn)的有CLB 模塊中的查找表斷開(kāi)故障、 PIP 的常開(kāi)和常閉故障、 IOB 端口的固定高或低電平故障等。
短路故障, 或被稱為橋接故障, 常見(jiàn)的有IR中互連線與電源短接、 接地故障和線之間的短路故障等。
集成電路中某些缺陷不能描述為門(mén)級(jí)的固定型故障, 需要在晶體管級(jí)建立故障模型, 定義為晶體管開(kāi)路、 柵極源極漏極開(kāi)路等。
不同于固定型故障, 暫態(tài)故障表現(xiàn)為瞬態(tài)或間歇性, 一般認(rèn)為由電源電磁干擾、 粒子輻射、 噪聲和生產(chǎn)制造工藝不達(dá)標(biāo)等導(dǎo)致。
延遲故障是電路中信號(hào)的動(dòng)態(tài)故障, 多為觸發(fā)和響應(yīng)時(shí)延, 表現(xiàn)為脈沖信號(hào)的邊沿參數(shù)變化等,常發(fā)生于IOB 模塊、 IR 模塊和CMT 模塊等, 對(duì)電路時(shí)序的影響極大, 常歸因于元件參數(shù)變化或電路結(jié)構(gòu)設(shè)計(jì)不合理等。
其余故障模式不再贅述, 聚焦于器件的典型故障有助于簡(jiǎn)化測(cè)試工作。
FPGA 的測(cè)試有多種分類方法, 比如: 按測(cè)試目的分為設(shè)計(jì)驗(yàn)證測(cè)試、 生產(chǎn)測(cè)試、 特性分析測(cè)試和失效分析測(cè)試; 按測(cè)試階段分為晶圓測(cè)試、 成品測(cè)試和來(lái)料檢驗(yàn)測(cè)試; 按產(chǎn)生配置模型的途徑, 又分為面向制造的測(cè)試(MTP) 和面向應(yīng)用的測(cè)試(ATP); 按測(cè)試內(nèi)容分為參數(shù)測(cè)試、 功能測(cè)試和結(jié)構(gòu)測(cè)試; 按測(cè)試激勵(lì)的生成方式進(jìn)行分類, 又分為確定性方法、 窮舉測(cè)試、 偽窮舉測(cè)試和偽隨機(jī)測(cè)試等。
Toutounchi 等人提出了學(xué)術(shù)界關(guān)于FPGA 測(cè)試的參考標(biāo)準(zhǔn): 1) 測(cè)試方法應(yīng)與具體芯片結(jié)構(gòu)無(wú)關(guān),具有普遍適用性; 2) 與芯片陣列規(guī)模無(wú)關(guān), 容易
推廣; 3) 測(cè)試方法具有可重復(fù)性、 自動(dòng)化程度高;4) 覆蓋率易以統(tǒng)計(jì)[5]。
FPGA生產(chǎn)企業(yè)多以ATE 進(jìn)行流水線測(cè)試, 常用的ATE 機(jī)臺(tái)主要包括ADVANTEST V93000、Teradyne J750 和UltraFLEX。 測(cè)試機(jī)臺(tái)均集成高精度電源、 計(jì)量?jī)x器、 信號(hào)發(fā)生器和模式生成器等,可保證測(cè)試速度和自動(dòng)化要求, 操作便捷且易以擴(kuò)展, 因此, 對(duì)ATE 的測(cè)試方法和效率提升有著大量的研究。
ATE 測(cè)試需反復(fù)修改FPGA 配置數(shù)據(jù)以生成ATE 可識(shí)別并執(zhí)行的測(cè)試向量。 配置數(shù)據(jù)較多時(shí)會(huì)占用ATE 內(nèi)部大量的存儲(chǔ)資源, 若使用設(shè)備商提供的板卡來(lái)擴(kuò)展ATE 的存儲(chǔ)深度則是一筆巨大的開(kāi)銷, 通常也使用U 盤(pán)、 存儲(chǔ)卡、 硬盤(pán)和FLASH 存儲(chǔ)器作為外部存儲(chǔ)介質(zhì)存儲(chǔ)配置數(shù)據(jù),不過(guò)控制相對(duì)復(fù)雜, 需要使用專門(mén)的控制芯片或占用FPGA 部分資源。
測(cè)試時(shí)間是測(cè)試成本的一個(gè)關(guān)鍵因素, 近年來(lái)為了縮短測(cè)試時(shí)間有著大量的研究[6]。
圖2 BIST 邏輯簡(jiǎn)圖
在對(duì)部分資源測(cè)試完畢后, 通過(guò)FPGA 的可編程性將TPG、 ORA 和BUT 模塊資源調(diào)換, 即可測(cè)試另一個(gè)部分的資源, 從而能通過(guò)若干次配置、 測(cè)試覆蓋到所有的邏輯資源。
BIST 還分為在線和離線兩種模式。 在線測(cè)試時(shí)芯片正常工作, 主要有并發(fā)和非并發(fā)兩種測(cè)試方法: 并發(fā)模式下測(cè)試與電路正常操作同時(shí)進(jìn)行, 互不干擾; 非并發(fā)模式在電路空閑狀態(tài)下進(jìn)行, 常用來(lái)進(jìn)行故障診斷測(cè)試, 可隨時(shí)中斷。 離線模式對(duì)電路的實(shí)時(shí)故障無(wú)能為力。 離線模式也分為功能性離線BIST 和結(jié)構(gòu)性離線BIST。
BIST 可以測(cè)試CLB、 IR 和部分內(nèi)嵌模塊。
FPGA的配置可以采用兩種方法: 1) 將位流文件轉(zhuǎn)換為ATE 可識(shí)別的數(shù)據(jù)文件進(jìn)行測(cè)試; 2) 在測(cè)試過(guò)程中直接通過(guò)邊界掃描鏈(JTAG) 和專用下載電纜, 通過(guò)一個(gè)專用PROM 將位流配置數(shù)據(jù)下載到FPGA 中。 邊界掃描結(jié)構(gòu)主要由測(cè)試存取接口(TAP)、 TAP 控制器和幾類寄存器組成[7-8],TAP 包 含測(cè)試 模 式 選 擇 (TMS)、 測(cè) 試 時(shí) 鐘(TCK)、 測(cè)試數(shù)據(jù)輸入引線(TDI)、 測(cè)試數(shù)據(jù)輸出引線 (TDO) 和測(cè)試重置 (TRST) 5 個(gè)端口。TRST 端口非必需, JTAG 結(jié)構(gòu)示意圖如圖3 所示。
圖3 邊界掃描結(jié)構(gòu)示意圖
要實(shí)現(xiàn)芯片的邊界掃描測(cè)試功能, 芯片內(nèi)部必須集成有邊界掃描模塊, 對(duì)信號(hào)的輸入輸出處理也要在芯片設(shè)計(jì)階段就加以考慮。 此外, JTAG 測(cè)試法屬于黑盒測(cè)試, 只能通過(guò)IOB 的輸出判定故障是否發(fā)生, 無(wú)法進(jìn)一步地實(shí)現(xiàn)故障定位, 而且受限于IOB 數(shù)量導(dǎo)致操作時(shí)配置難度較大。
CLB 資源較多, 除了與或等基本邏輯外還可配置為查找表 (LUT)、 函數(shù)發(fā)生器、 RAM 或FIFO、 觸發(fā)器/鎖存器和移位寄存器等, 實(shí)現(xiàn)加乘法、 快速進(jìn)位鏈和高速串并-并串轉(zhuǎn)換等高級(jí)邏輯功能。 CLB 模塊功能通過(guò)將所有的電路單元?jiǎng)澐譃椴煌墓δ茈娐愤M(jìn)行測(cè)試。
CLB 數(shù)量大且呈行列分布, LUT 測(cè)試可將FPGA 中一列LUT 單元級(jí)聯(lián)成鏈進(jìn)行。 要對(duì)電路中所存在的固定型故障、 開(kāi)路故障、 橋接故障、 譯碼故障和轉(zhuǎn)換故障等進(jìn)行100%覆蓋測(cè)試共需(K+1)種電路配置方式, 其中K 是LUT 輸入端口數(shù)目[9]。LUT 可用存儲(chǔ)器的測(cè)試方法進(jìn)行, 但也需要考慮其特殊結(jié)構(gòu)。 要將SRAM 存儲(chǔ)單元測(cè)試完整, LUT需要配置為ROM、 RAM 兩種架構(gòu), 先測(cè)RAM 再測(cè)ROM, 因?yàn)镽OM 其實(shí)是通過(guò)SRAM 來(lái)模擬的(把ROM 的數(shù)據(jù)寫(xiě)進(jìn)SRAM, 接受后關(guān)斷寫(xiě)數(shù)據(jù)和寫(xiě)地址譯碼功能, 只保留其讀功能, 形成ROM模式)。
鞋子華麗、高貴,這在以前,李若定然是發(fā)狂地歡喜,這是她夢(mèng)寐以求的事。可是當(dāng)她真的站在琳瑯滿目的櫥窗前,心卻是灰的。
Slice 內(nèi)的存儲(chǔ)單元可以配置為邊沿觸發(fā)的D觸發(fā)器和電平敏感的鎖存器, 都包含專門(mén)的使能端(CE)、 清零端(SR) 和時(shí)鐘輸入(CK) 等。 可配置寄存器故障主要為功能性故障[10], 需測(cè)試CE 功能、 初始值設(shè)置功能、 SR 置位和RS 復(fù)位功能,以及它們的組合并保證故障能被檢測(cè)到。
CE 功能測(cè)試從輸入端施加CE=0 或CE=1 來(lái)測(cè)試固定故障。
初始值設(shè)置和置位復(fù)位功能采用路徑掃描法,輸入端的輸出與1 相與或與0 相或后作為下一級(jí)輸入往下傳遞, 通過(guò)固定故障進(jìn)行判斷。 以設(shè)置初始值1 為例, 如圖4 所示, 將n 個(gè)寄存器輸出值與1相與, 結(jié)果作為下一級(jí)與門(mén)的輸入, 與下一級(jí)寄存器的輸出相與, 一旦不能初始為1, 則寄存器輸出值為0, 激活固定0 故障。
圖4 寄存器初始化1 功能配置示意圖
當(dāng)然也可以采用位流回讀技術(shù)進(jìn)行測(cè)試, 直接對(duì)觸發(fā)器/鎖存器施加測(cè)試信號(hào), 讀取響應(yīng)值進(jìn)行故障判斷, 但過(guò)程繁瑣, 難度較大。
由進(jìn)位信號(hào)和函數(shù)復(fù)用器組成的進(jìn)位邏輯可以進(jìn)行快速的加減法運(yùn)算, 進(jìn)位邏輯鏈可以顯著地提高CLB 模塊的處理速度。 常見(jiàn)的故障為功能性故障, 表現(xiàn)為邏輯進(jìn)位失效, 因此測(cè)試時(shí)將所有的邏輯配置為全加器, 串聯(lián)在一起測(cè)試, 根據(jù)輸出值來(lái)判斷故障。 需要設(shè)置對(duì)應(yīng)的數(shù)據(jù)發(fā)生器、 比較器和移位寄存器等配合測(cè)試完成。
LUT 單元除可配置為函數(shù)發(fā)生器或ROM 外,還可配置為分布式RAM 和移位寄存器使用。 LUT存儲(chǔ)數(shù)據(jù)在前兩種模式下只能通過(guò)芯片配置時(shí)序初始化設(shè)定, 而分布式RAM 模式下可通過(guò)SliceM 中寫(xiě)電路進(jìn)行修改。 與函數(shù)發(fā)生器或ROM 相比, 分布式RAM/移位寄存器擁有譯碼電路及控制電路,其余部分如LUT 內(nèi)部存儲(chǔ)單元完全一致, 因此只需對(duì)寫(xiě)控制電路功能進(jìn)行測(cè)試。
測(cè)試中可以使用March 算法來(lái)覆蓋固定故障、開(kāi)路故障、 轉(zhuǎn)換故障、 地址譯碼故障和耦合故障。
IOB 是FPGA 與外部進(jìn)行數(shù)據(jù)交互的接口, 在不同的電氣標(biāo)準(zhǔn)下對(duì)輸入/輸出信號(hào)進(jìn)行驅(qū)動(dòng)輸出或匹配輸入。 通過(guò)配置每個(gè)IOB 所對(duì)應(yīng)的IO 邏輯資源可實(shí)現(xiàn)單雙邊信號(hào)的輸入輸出、 高速串并輸入、 高速并串輸出和輸入輸出延遲等功能。
IOLOGIC 的功能測(cè)試按照其功能分為: 單端輸入輸出功能電路、 差分輸入輸出功能電路、IDELAY 模塊功能電路、 IDDR 功能電路、 ODDR數(shù)據(jù)輸出和三態(tài)控制輸出功能電路。 IOB 故障主要為固定故障、 短路故障和三態(tài)故障, 可以通過(guò)各個(gè)管腳的漏電流進(jìn)行故障判斷, 也可以通過(guò)邊界掃描和陣列法進(jìn)行測(cè)試。
在FPGA 中, IR 占據(jù)了50%~90%的芯片面積和60%以上的信號(hào)延遲。 互連資源主要包括SM 和互連線, 因此故障主要分為開(kāi)關(guān)故障和線的故障。
開(kāi)關(guān)故障有常開(kāi)和常閉兩種。 開(kāi)關(guān)常開(kāi)可以理解為開(kāi)關(guān)兩端的線橋接在一起, 即單線常開(kāi)。 線的故障分為單線和多線情況。 單線情況有單線斷路、與電源橋接和與地橋接, 多線情況還有線之間的短路故障即多根線之間的橋接[11]。 金屬互連線的覆蓋率測(cè)試極大地影響到FPGA 的性能和安全, 在實(shí)際電路中, IR 的故障率也大于CLB。
目前針對(duì)IR 資源測(cè)試算法的研究較為深入, 3次配置測(cè)試算法基于IR 的布線規(guī)律, 采用一次正交配置和兩次斜向配置, 能夠完全覆蓋所有的互連金屬線和開(kāi)關(guān)盒中的PIP, 但該算法基于XC4000系列, 不適用于Virtex-4 及之后系列且不具備故障定位功能。
在3 次配置基礎(chǔ)上發(fā)展出6 次配置測(cè)試算法,通過(guò)增加配置次數(shù)來(lái)實(shí)現(xiàn)故障定位, 但同樣不適用于Virtex-4 及之后系列[12]。 也有研究基于圖論相關(guān)思想, 結(jié)合深度優(yōu)先算法和啟發(fā)式搜索算法等完成配置圖形生成[13]。
BIST 也被應(yīng)用于IR 測(cè)試中。
BRAM 模塊是FPGA 中集成度較高的資源, 可被配置為單端口RAM、 雙端口RAM、 內(nèi)容地址存儲(chǔ)器和FIFO 等常用的存儲(chǔ)結(jié)構(gòu), 可以根據(jù)設(shè)計(jì)需求改變存儲(chǔ)位寬和深度[14]。 常出現(xiàn)SRAM 故障、雙端口讀寫(xiě)故障、 位寬模式故障、 級(jí)聯(lián)功能故障、 ECC 功能故障、 FIFO 功能及標(biāo)志位故障和初始化功能故障等7 種故障[9]。 其核心電路SRAM 存儲(chǔ)序列可能出現(xiàn)的故障有地址譯碼故障、 固定型故障、 開(kāi)路故障、 轉(zhuǎn)換故障、 寫(xiě)破壞、 讀破壞和耦合故障等, 被統(tǒng)稱為SRAM 故障。
在BRAM 功能的測(cè)試中, 采用多種測(cè)試算法對(duì)各種故障進(jìn)行全覆蓋測(cè)試。 常用的算法有MSCAN、 GALPAT、 步進(jìn)碼序列、 棋盤(pán)法、 蝴蝶法、 March 及其改進(jìn)算法 (March SS、 March s2df 和March d2pf 等)、 ATS 及其改進(jìn)的MATS 和MATS+等。 比如: 使 用MSCAN 算法對(duì)BRAM 的初始化功能進(jìn)行驗(yàn)證, 算法對(duì)SRAM 陣列中的故障進(jìn)行測(cè)試,使用算法對(duì)BRAM 雙端口讀寫(xiě)故障進(jìn)行測(cè)試, MATS+算法對(duì)各種位寬模式故障及Cascade 功能ECC 功能故障進(jìn)行測(cè)試。
MSCAN 算法形成固定的存儲(chǔ)器掃描序列, 對(duì)所有的單元進(jìn)行全0/1 的讀寫(xiě), 用于檢測(cè)固定型故障。 后續(xù)測(cè)試需在BRAM 初始化功能無(wú)誤的情況下進(jìn)行。
March SS 算法用于覆蓋SRAM 故障及最大位寬模式的BRAM 讀寫(xiě)功能故障, 在實(shí)際的使用中,March SS 算法前經(jīng)常先通過(guò)初始化算法排除了固定型故障。 March SS 算法對(duì)于1 位寬度數(shù)據(jù)之間的讀寫(xiě)破壞故障、 地址譯碼故障及耦合故障已實(shí)現(xiàn)100%覆蓋, 當(dāng)將其擴(kuò)展到多位位寬時(shí), 需考慮讀寫(xiě)數(shù)據(jù)字內(nèi)的耦合故障。 由于FPGA BRAM 模塊不同位寬模式使用相同的存儲(chǔ)陣列, 所有的SRAM 故障測(cè)試中不需要擴(kuò)展算法到多位位寬, 但在BRAM多位位寬讀寫(xiě)功能測(cè)試中需考慮字內(nèi)耦合故障。
MATS+算法用于ECC 功能測(cè)試中, 即升序?qū)?→升序讀0→升序?qū)?→降序讀1→降序?qū)?。 在FPGA 中需將兩個(gè)BRAM 組合成72 位位寬模式才能使用ECC 功能。
如果電路規(guī)模為N, 部分算法的復(fù)雜度和可檢測(cè)的故障如表1 所示。
表1 存儲(chǔ)器測(cè)試幾種常用算法對(duì)比情況
FPGA內(nèi)部還集成有DSP、 乘法器和CMT 等功能模塊, DSP 和乘法器的測(cè)試類同CLB, 主要采用邊界掃描和位流回讀技術(shù)。 FPGA 中DCM、 PMCD等時(shí)鐘管理單元數(shù)量少, 集成度高且原始輸入信號(hào)少, 測(cè)試中可直接在其輸入引腳輸入10~200 M 頻率范圍內(nèi)的時(shí)鐘信號(hào), 測(cè)試其輸出時(shí)鐘的頻率相位。 PMCD 模塊四輸入時(shí)鐘信號(hào)CLKA、 CLKB、CLKC 和CLKD 之間保持45°的相位關(guān)系以測(cè)試模塊的相位匹配功能。
FPGA 高度集成化, 內(nèi)部資源結(jié)構(gòu)復(fù)雜, 各個(gè)功能模塊的故障表現(xiàn)不一, 在測(cè)試過(guò)程中需要大量的配置文件, 測(cè)試成本高。 本文從FPGA 的基本結(jié)構(gòu)出發(fā), 簡(jiǎn)要地總結(jié)和概述了CLB 模塊、 IOB 模塊、 IR 模塊、 BRAM 模塊和內(nèi)部其余功能模塊的常見(jiàn)故障, 在此基礎(chǔ)上根據(jù)分塊測(cè)試的原理, 針對(duì)每個(gè)模塊梳理了目前常見(jiàn)的測(cè)試方法并適當(dāng)?shù)丶右员容^和歸納。 本文的研究成果可用于市場(chǎng)上主流FPGA 的測(cè)試工作中。