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