李 光,謝 達(dá),董宜平,胡 凱
(1.無錫中微億芯有限公司,江蘇無錫 214072;2.中國電子科技集團(tuán)公司第五十八研究所,江蘇無錫 214072)
可編程邏輯器件FPGA的應(yīng)用越來越廣泛,對(duì)FPGA的測(cè)試也變得越來越重要。評(píng)價(jià)FPGA測(cè)試方法的好壞標(biāo)準(zhǔn)包括故障覆蓋率、配置文件數(shù)、自動(dòng)化程度。目前工業(yè)界測(cè)試為了達(dá)到特定目標(biāo),會(huì)精心設(shè)計(jì)每一個(gè)配置文件,確定性布線是一個(gè)重要方法。而學(xué)術(shù)界測(cè)試方法更關(guān)注自動(dòng)化程度,他們一般設(shè)計(jì)復(fù)雜的測(cè)試優(yōu)化算法自動(dòng)生成配置文件[1]。
對(duì)FPGA進(jìn)行確定性功能測(cè)試一般分為三個(gè)步驟:首先,給FPGA配置確定的配置文件;其次,在配置完成后,在相應(yīng)的管腳施加外部測(cè)試向量;最后,通過觀察輸出管腳的結(jié)果來分析判斷芯片的故障。
本文介紹了一種基于XDL(Xilinx Design Language)語言的FPGA確定性布線測(cè)試方法,對(duì)互聯(lián)資源的五倍線進(jìn)行測(cè)試。
Xilinx公司基于Virtex系統(tǒng)架構(gòu)的xc5vlx330的FPGA, 包 括 IOB (Input/output Block)、CLB(configurable Logic Block)、CLB的互聯(lián)開關(guān)盒 SB(Swith Box)等?;谝陨霞軜?gòu)的FPGA,IOB的物理位置位于左側(cè)和右側(cè)。
FPGA內(nèi)部互聯(lián)開關(guān)盒架構(gòu)包括單倍線、二倍線、五倍線、長(zhǎng)線等。V5LX330的五倍線共十六個(gè)方向,包括 ER(East Right)、WR(West Right)、EL(East Left)、WL(West Left) 四個(gè)水平方向,SL(South Left)、NL(North Left)、SR(South Right)、NR(North Right)四個(gè)豎直方向,EN(East North)、WS(West South)、NE(North East)、SW(South West)左下右上四個(gè)對(duì)角線方向和ES(East South)、WN(West North)、NW(North West)、SE(South East)左上右下四個(gè)對(duì)角線方向。每個(gè)方向三根線,圖1以平方向和對(duì)角線方向各舉一例作為說明。
圖1 FPGA V5LX330內(nèi)部五倍線示意圖
FPGA功能測(cè)試主要分為CLB測(cè)試、互聯(lián)資源測(cè)試和RAM測(cè)試。在FPGA芯片中,互聯(lián)資源占據(jù)FPGA芯片面積的大部分(50%~90%),是FPGA資源中發(fā)生故障概率最高的部分?;ヂ?lián)資源一般分為全局互聯(lián)資源和局部互聯(lián)資源,本文測(cè)試的五倍線資源屬于全局互聯(lián)資源。互聯(lián)資源的故障一般有:(1)線段的固定型(stuck at)故障;(2)線段的開路(stuck open)故障;(3)線段間的橋接故障[2]。
本文提供的測(cè)試方法,針對(duì)五倍線互聯(lián)資源,依據(jù)XDL規(guī)范進(jìn)行自主確定性布線,對(duì)十六個(gè)方向的FPGA進(jìn)行配對(duì)配置,從而形成FPGA的確定性五倍線全局布線。
XDL語言是賽靈思公司FPGA設(shè)計(jì)語言的簡(jiǎn)稱,是Xilinx公司一種全功能的物理層設(shè)計(jì)語言規(guī)范。XDL由design聲明、module聲明、Instance聲明和net聲明四個(gè)聲明構(gòu)成,這四個(gè)聲明構(gòu)成了整個(gè)文件和電路的描述[3]。
Design聲明在XDL是必須存在的,且只能存在一次。該聲明包括一個(gè)全局的設(shè)計(jì)名稱以及目標(biāo)FPGA的部分名稱。Design的格式如下:
design "V5LX330_WRERtest.ncd" xc5vlx330ff 1760-1 v3.2;
Module聲明是一系列instance和net的結(jié)合,通常在hard macros里使用。本文不涉及。
Instance聲明以關(guān)鍵詞’inst’開頭,元件類型主要有CLB、IOB、TBUF等幾種類型,放置元件關(guān)鍵詞placed,所在的 tile即所在的分區(qū)。對(duì)V5LX330CLB_X1Y0的Instance配置的實(shí)例格式如下:
Inst"INST_X0Y0""SLICEM",placed CLBLM_X1Y0 SLICE_X0Y0
Net聲明由net、輸入管腳 (inpin)、輸出管腳(outpin)、PIP(Programmable Interconnect Point)等四部分組成。
使用XDL生成五倍線的測(cè)試布線分成五個(gè)步驟:步驟1將IOB的輸入接入到五倍線的輸入;步驟2將同一行同一個(gè)CLB的ER5和WR5首尾連接起來,如圖2所示;步驟3將同一行不同CLB的所有ER5和WR5首尾連接起來,如圖3所示;步驟4將五倍線的輸出連接到下一行的輸入,將相鄰行的五倍線按步驟2相同的方法進(jìn)行相接,直到所有的行做完;步驟5將五倍線的輸出連接到IOB的輸出上。
下面以ER50號(hào)五倍線ER5BEG0和WR52號(hào)五倍線WR5BEG2為例,各步驟如下:
步驟1將一個(gè)IOB管腳連接到五倍線的slice輸入A1,如圖2所示,其中INSTER0in為xc5vlx330的IOB,INST_X1Y0為CLB_X1Y0的 slice X1Y0:
net"NET_IOER0_in",
outpin"ER0_in"I,
inpin"INST_X1Y0"A1,;
步驟2如圖2所示,完成同一個(gè)CLB內(nèi)ER5的0號(hào)線五倍線和WR5的2號(hào)線五倍線的一個(gè)來回。
圖2 FPGA五倍線布線步驟1和2
如圖2所示,首先,通過slice A轉(zhuǎn)接到ER5BEG0,然后ER5BEG0連接到ER5END0,ER5END0連接到ES5BEG0,再通過ES5MID0連接到 ER5BEG0,這樣一直向東,直到最后一個(gè)ER5END0。然后ER5END0再經(jīng)過Slice B連接到WR5BEG2進(jìn)行回線,WR5BEG2和WR5END2相接,直到最后一個(gè)WR5END2。然后,WR5END2再接下一個(gè) CLB的ER5BEG0。
實(shí)現(xiàn)步驟2中ER50號(hào)線從東到西布線的XDL語法如下,其中INST_X1Y0為SLICEX1Y0,INST_X215Y0為SLICE X215Y0。
net"CLB1NET_ER0Row0",
outpin"INST_X1Y0"A,
inpin"INST_X215Y0"C1,
pip CLBLM_X1Y0 L_A->SITE_LOGIC_OUTS8,
pip INT_X1Y0 LOGIC_OUTS8->ER5BEG0,
pip INT_X6Y0 ER5END0->ES5BEG0,
pip INT_X9Y0 ES5MID0->ER5BEG0,
……
pip INT_X118Y0 ER5END0->SR2BEG0,
pip INT_X118Y0 SR2BEG0->IMUX_B6,
pip CLBLL_X118Y0 SITE_IMUX_B6->L_C1,
pip INT_BUFS_L_X58Y0 INT_BUFS_ER5A0->INT_BUFS_ER5A_B0,
pip INT_BUFS_R_X59Y0 INT_BUFS_ER5A_B0->INT_BUFS_ER5A0,
pip INT_BUFS_L_X114Y0 INT_BUFS_ER5A0->INT_BUFS_ER5A_B0,
pip INT_BUFS_R_X115Y0 INT_BUFS_ER5A_B0->INT_BUFS_ER5A0,;
其 中 ,INT_BUFS_L_X58Y0、INT_BUFS_R_X59 Y0、INT_BUFS_L_X114Y0、INT_BUFS_R_X115Y0 是四個(gè)有向BUFFER連接。
ER5 0號(hào)五倍線ER5END0到達(dá)最東邊的最后一個(gè)CLB后,通過該CLB的SLICE X215Y0的C輸出,直接轉(zhuǎn)角到WR5 2號(hào)五倍線的WR5BEG2上。WR5 2號(hào)五倍線從西到東的XDL布線如下,其中INST_X1Y0為 SLICE X1Y0,INST_X215Y0為 SLICE X215Y0。
net"CLB1NET_WR2Row0",
outpin"INST_X215Y0"C,
inpin"INST_X0Y0"D4,
pip CLBLL_X118Y0 L_C->SITE_LOGIC_OUT S10,
pip INT_X118Y0 LOGIC_OUTS10->WR5BEG2,
pip INT_X113Y0 WR5END2->WN5BEG2,
pip INT_X110Y0 WN5MID2->WR5BEG2,
……
pip INT_X6Y0 WN5MID2->WR5BEG2,
pip INT_X1Y0 WR5END2->SL2BEG1,
pip INT_X1Y0 SL2BEG1->IMUX_B22,
pip CLBLM_X1Y0 SITE_IMUX_B22->M_D4,
pip INT_BUFS_L_X114Y0 INT_BUFS_WR5C_B2->INT_BUFS_WR5C2,
pip INT_BUFS_L_X58Y0 INT_BUFS_WR5C_B2->INT_BUFS_WR5C2,
pip INT_BUFS_R_X115Y0 INT_BUFS_WR5C2->INT_BUFS_WR5C_B2,
pip INT_BUFS_R_X59Y0 INT_BUFS_WR5C2->INT_BUFS_WR5C_B2,;
步驟3把同一行內(nèi)所有CLB的ER5 0號(hào)五倍線和WR5 2號(hào)五倍線連接起來,如圖3所示。CLB1通過ER5 0號(hào)五倍線連接到CLB118,CLB118通過WR5 2號(hào)五倍線再回線到CLB1。CLB1中的WR5END2再連接到CLB2中的ER5BEG0,ER5 0號(hào)五倍線一直連接到CLB 111,CLB111通過WR5 2號(hào)五倍線再回線到CLB2……如此循環(huán),把同一行的所有五倍線連接起來。
通過腳本程序?qū)⒃摲椒〝U(kuò)展到整個(gè)FPGA,從而生成整個(gè)V5LX330的特定五倍線測(cè)試的確定性XDL布線,然后調(diào)用XDL命令,命令行格式為:XDL-xdl2ncd V5LX330_ERWRtest.XDL,從而生成了ER5和WR5五倍線測(cè)試的NCD文件V5LX330_ERWRtest.NCD。然后調(diào)用bitgen生成rbt文件,bitgen命令行的命令格式為:bitgen-b V5LX330_ERWRtest.NCD。
完整的V5LX330的FPGA東西向ER5和WR5的五倍線NCD部分圖如圖4所示,其中上方的連線包括了WR5BEG0~WR5BEG2,下方的連線包括了ER5BEG0~ER5BEG2,而 CLB上的連線為 ER5和WR5方向的轉(zhuǎn)接線。
圖3 FPGA五倍線布線步驟3
圖4 完整的東西向五倍線ER5 WR5布線部分
生成RBT文件后,對(duì)FPGA V5LX330進(jìn)行配置,然后對(duì)輸入側(cè)對(duì)應(yīng)ER5BEG0~ER5BEG2的IOB施加測(cè)試向量。如果對(duì)ER5 0號(hào)五倍線和WR5 2號(hào)五倍線進(jìn)行測(cè)試,則施加(1,0,0)的測(cè)試向量,然后在對(duì)應(yīng)輸出端的IOB觀察輸出結(jié)果。如果輸出為(1,0,0),則ER5 0號(hào)五倍線、WR5 2號(hào)五倍線無故障,如果輸出不為(1,0,0),則ER5 0號(hào)五倍線或者WR5 2號(hào)五倍線有故障,記錄輸出結(jié)果。然后對(duì)ER5 0號(hào)五倍線再施加(0,1,1)的測(cè)試向量,然后在對(duì)應(yīng)輸出端的IOB觀察輸出結(jié)果。如果輸出為(0,1,1),則ER5 0號(hào)五倍線、WR5 2號(hào)五倍線無故障,如果輸出不為(0,1,1),則ER5 0號(hào)五倍線或者WR5 2號(hào)五倍線有故障,記錄輸出結(jié)果。
綜合輸出結(jié)果,故障類型初步判斷為:
(1)輸出結(jié)果始終為(0,0,0),則ER5 0號(hào)五倍線或者WR5 2號(hào)五倍線固定0故障或斷路故障;
(2)輸出結(jié)果始終為(1,0,0,),則 ER5 0號(hào)五倍線或者WR5 2號(hào)五倍線固定1故障;
(3)如果輸入為(1,0,0),ER5 0號(hào)五倍線位置為1,而其他位置也出現(xiàn)了1,則出現(xiàn)了橋接故障。
利用XDL腳本程序?qū)ξ灞毒€進(jìn)行確定性布線的方法,通過一次配置文件就能判斷出故障。由于采用確定性布線,在布線時(shí)選擇了所有能測(cè)試的五倍線,所以故障覆蓋率可以達(dá)到100%。通過實(shí)施,發(fā)現(xiàn)確定性布線方法可以快速實(shí)現(xiàn)特定線段的測(cè)試,相對(duì)于自動(dòng)化算法布線,具有應(yīng)用快速、覆蓋率可控的優(yōu)勢(shì)。
參考文獻(xiàn):
[1]代莉.基于布線資源圖的FPGA互連測(cè)試算法[J].計(jì)算機(jī)工程,35(14).
[2]董宜平,謝文虎,李光.基于Virtex 4的全覆蓋FPGA二倍線內(nèi)建自測(cè)試[J].電子與封裝,2017,17(1)∶19-23.
[3]Christian Beckhoff,Dirk Koch,Jim Torresen.The Xilinx Design Language(XDL)∶Tutorial and Use Cases[M].
[4]M Renovell,Y Zorian.Different Experiments in Test Generation for XILINX FPGAs[C].ITC INTERNATIONAL TEST CONFERENCE,2000,32.2∶854-862.
[5]Mehdi Baradaran Tahoori,Subhasish Mitra.Fault Grading FPGA Interconnect Test Configurations[C].ITCINTERNATIONAL TEST CONFERENCE,2002,22.2∶608-617.
[6]http∶//china.xilinx.com/[EB/OL].
[7]成飛.基于ATE的FPGA測(cè)試[D].上海:復(fù)旦大學(xué),2011.
[8]王世穎.基于ATE的百萬門級(jí)FPGA測(cè)試方法的研究[D].成都:電子科技大學(xué),2012.
[9]張秀均,陳誠,孟祥媛.一種用perl編寫Xilinx的FPGA內(nèi)建測(cè)試向量的方法[J].電子與封裝,2014,14(3)∶18-20.