本發(fā)明涉及一種基于Virtex架構(gòu)的FPGA芯片的測(cè)試法,尤其是一種二倍線布線資源故障的測(cè)試法。
背景技術(shù):
可編程邏輯器件(FPGA),具有開發(fā)周期短,成本低,風(fēng)險(xiǎn)小,集成度高,靈活性大,且便于電子系統(tǒng)維護(hù)和升級(jí),因此成為了數(shù)字芯片的主流,被廣泛應(yīng)用在通信、控制、視頻、信息處理、消費(fèi)電子、互聯(lián)網(wǎng)、汽車以及航空航天等諸多領(lǐng)域。
在FPGA芯片中,布線資源占據(jù)FPGA芯片面積的大部分(50%~90%),是FPGA芯片資源中發(fā)生故障概率最高的部分,所以布線資源的測(cè)試非常重要。布線資源的故障一般有:(1)線段的固定型(stuck at)故障;(2)線段的開路(stuck open)故障;(3)線段間的橋接故障。
FPGA芯片的測(cè)試,簡(jiǎn)單來說,就是把FPGA芯片配置成相應(yīng)的測(cè)試電路,用多次配置來覆蓋所有的資源,然后對(duì)每項(xiàng)配置施加特定的測(cè)試向量。好的布線資源的測(cè)試方法是在盡可能高的故障覆蓋率下,通過最少的編程次數(shù)和測(cè)試向量對(duì)布線資源進(jìn)行測(cè)試。
在Virtex架構(gòu)下,二倍線分為東向的十根(E2BEG0~E2BEG9),西向的十根(W2BEG0~W2BEG9),北向的十根(N2BEG0~N2BEG9),南向的十根(S2BEG0~S2BEG9)。為了區(qū)分,根據(jù)后綴,分別命名BEG0和End0為0號(hào)線,BEG1和End1為1號(hào)線,依次類推。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題是克服現(xiàn)有的缺陷,提供一種配置次數(shù)盡可能少,覆蓋率盡可能高的基于Virtex架構(gòu)的FPGA芯片二倍線故障測(cè)試法,采用本發(fā)明的方法通過一次配置,可以進(jìn)行二倍線故障測(cè)試,提高測(cè)試效率和故障覆蓋率;經(jīng)過多次配置,還可以定位某行或某列的某根二倍線出現(xiàn)了故障。
為了解決上述技術(shù)問題,本發(fā)明提供了如下的技術(shù)方案:
本發(fā)明基于Virtex架構(gòu)的FPGA芯片二倍線故障測(cè)試法,包括:配置邏輯單元將相鄰行或者相鄰列的二倍線連接起來,其中起始的配置邏輯單元將IO的輸入和二倍線的輸入連接起來,終止的配置邏輯單元將IO的輸出和二倍線的輸出連接起來;配置邏輯單元將東向(E2BEG)和西向(W2BEG)的二倍線首尾連接起來,或者將南向(S2BEG)和北向(N2BEG)的二倍線首尾連接起來。
進(jìn)一步地,配置邏輯單元包括一個(gè)slice輸入和一個(gè)slice輸出,在起始的配置邏輯單元,一個(gè)IO的輸入連接到slice輸入,在終止的配置邏輯單元,一個(gè)slice輸出連接到IO輸出;在中間的行或者列,前一行或者前一列的slice輸出連接到一個(gè)slice輸入,一個(gè)slice輸出連接到下一行或者下一列的slice輸入。
進(jìn)一步地,配置邏輯單元的slice將上一行或者上一列的二倍線的輸入,作為slice輸入,該slice對(duì)應(yīng)的輸出作為二倍線的行或者列內(nèi)部的輸出;二倍線的行或列在沿一個(gè)方向(東向E2BEG或者西向W2BEG,南向S2BEG或者北向N2BEG)首尾相接后的輸出,連接到一個(gè)slice輸入,該slice對(duì)應(yīng)的輸出作為二倍線的行或者列內(nèi)部的輸出;該輸出連接到二倍線的行或者列內(nèi)部的輸入,然后二倍線的行或列沿相反的方向(西向W2BEG或者東向E2BEG,北向N2BEG或者南向S2BEG)首尾相接后的輸出,連接到一個(gè)slice輸入,該slice對(duì)應(yīng)的輸出作為二倍線的行或者列之間的輸出,輸出到下一行或者下一列的輸入。
按照本發(fā)明提供的技術(shù)方案,二倍線故障的測(cè)試法分為東西方向的二倍線測(cè)試和南北方向的二倍線測(cè)試,這兩個(gè)方向的測(cè)試法相同。每個(gè)測(cè)試法需要進(jìn)行十次配置,每次配置一根線。下面是東西方向的0號(hào)線的配置步驟:
(1)將西側(cè)底部的IO作為0號(hào)線的輸入,連接到第一組CLB的IMUX中,這里第一組CLB是指FPGA的第一行第一列的CLB;
(2)從第一組CLB的IMUX輸入,轉(zhuǎn)到CLB對(duì)應(yīng)的OMUX的輸出,CLB邏輯配置成輸入等于輸出;
(3)從CLB的OMUX輸出接到對(duì)應(yīng)的二倍線的輸入端(E2BEG0);
(4)將二倍線0號(hào)線沿向東方向首尾相連(E2End0和E2BEG0相連),當(dāng)走到邊緣,利用轉(zhuǎn)角線(E2BEG0到W2BEG0),進(jìn)行回環(huán);
(5)回環(huán)后,將二倍線沿向西方向首尾相連(W2End0和W2BEG0相連),當(dāng)走到邊緣,利用轉(zhuǎn)角線(W2BEG0到E2BEG0),進(jìn)行回環(huán);
(6)回環(huán)后,將二倍線沿向東方向首尾相連(E2End0和E2BEG0相連),回到初始CLB;
(7)將二倍線的尾端(E2End0)連接到初始的CLB的IMUX中;
(8)從初始CLB的IMUX輸入,轉(zhuǎn)到CLB對(duì)應(yīng)的OMUX的輸出,邏輯配置成輸入等于輸出;
(9)從CLB的OMUX輸出到對(duì)應(yīng)的二倍線0號(hào)線的另一個(gè)方向的輸入端(W2BEG0);
(10)將0號(hào)線沿向西方向首尾相連(W2End0和W2BEG0相連),當(dāng)走到邊緣,利用轉(zhuǎn)角線(W2BEG0到E2BEG0),進(jìn)行回環(huán);
(11)回環(huán)后,將二倍線沿向西方向首尾相連(W2End0和W2BEG0相連),當(dāng)走到邊緣,利用轉(zhuǎn)角線(W2BEG0到E2BEG0),進(jìn)行回環(huán);
(12)回環(huán)后,將二倍線沿向東方向首尾相連(E2End0和E2BEG0相連),回到初始CLB;
(13)將二倍線的尾端(E2End0)連接到初始的CLB的IMUX中;
(14)從初始CLB的IMUX輸入,轉(zhuǎn)到CLB對(duì)應(yīng)的OMUX的輸出,邏輯配置成輸入等于輸出;
(15)從CLB的OMUX輸出接到下一行對(duì)應(yīng)的二倍線的輸入端(E2BEG0);
(16)如此循環(huán),直到整個(gè)FPGA每行的0號(hào)線都布滿;
(17)然后從最后一個(gè)CLB出來的輸出,連接到IOB的輸出端;
(18)同理,配置1號(hào)線,2號(hào)線…,9號(hào)線;
(19)調(diào)整布線,使用FPGAEditor的自動(dòng)布線功能進(jìn)行布線,成功后生成RBT文件,加載到FPGA,施加測(cè)試向量進(jìn)行測(cè)試;
(20)在輸入端施加測(cè)試向量,如果輸出端和輸入端不相同,則二倍線有故障,并且根據(jù)不同的結(jié)果,可以判斷出何種故障。
本發(fā)明南北方向的二倍線測(cè)試方法也需要進(jìn)行十次配置,每次配置一根線。下面是南北方向的0號(hào)線的配置步驟:
(1)將西側(cè)底部的IO作為0號(hào)線的輸入,連接到第一組CLB的IMUX中,這里第一組CLB是指FPGA的第一行第一列的CLB;
(2)從第一組CLB的IMUX輸入,轉(zhuǎn)到CLB對(duì)應(yīng)的OMUX的輸出,CLB邏輯配置成輸入等于輸出;
(3)從CLB的OMUX輸出接到對(duì)應(yīng)的二倍線的輸入端(N2BEG0);
(4)將二倍線0號(hào)線沿向北方向首尾相連(N2End0和N2BEG0相連),當(dāng)走到邊緣,利用轉(zhuǎn)角線(N2BEG0到S2BEG0),進(jìn)行回環(huán);
(5)回環(huán)后,將二倍線沿向南方向首尾相連(S2End0和S2BEG0相連),當(dāng)走到邊緣,利用轉(zhuǎn)角線(S2BEG0到N2BEG0),進(jìn)行回環(huán);
(6)回環(huán)后,將二倍線沿向北方向首尾相連(N2End0和N2BEG0相連),回到初始CLB;
(7)將二倍線的尾端(N2End0)連接到初始的CLB的IMUX中;
(8)從初始CLB的IMUX輸入,轉(zhuǎn)到CLB對(duì)應(yīng)的OMUX的輸出,邏輯配置成輸入等于輸出;
(9)從CLB的OMUX輸出到對(duì)應(yīng)的二倍線0號(hào)線的另一個(gè)方向的輸入端(S2BEG0);
(10)將0號(hào)線沿向南方向首尾相連(S2End0和S2BEG0相連),當(dāng)走到邊緣,利用轉(zhuǎn)角線(S2BEG0到N2BEG0),進(jìn)行回環(huán);
(11)回環(huán)后,將二倍線沿向北方向首尾相連(N2End0和N2BEG0相連),當(dāng)走到邊緣,利用轉(zhuǎn)角線(N2BEG0到S2BEG0),進(jìn)行回環(huán);
(12)回環(huán)后,將二倍線沿向南方向首尾相連(S2End0和S2BEG0相連),回到初始CLB;
(13)將二倍線的尾端(S2End0)連接到初始的CLB的IMUX中;
(14)從初始CLB的IMUX輸入,轉(zhuǎn)到CLB對(duì)應(yīng)的OMUX的輸出,邏輯配置成輸入等于輸出;
(15)從CLB的OMUX輸出接到下一列對(duì)應(yīng)的二倍線的輸入端(N2BEG0);
(16)如此循環(huán),直到整個(gè)FPGA每列的0號(hào)線都布滿;
(17)然后從最后一個(gè)CLB出來的輸出連接到IOB的輸出端;
(18)同理,配置1號(hào)線,2號(hào)線…,9號(hào)線;
(19)調(diào)整布線,使用FPGAEditor的自動(dòng)布線功能進(jìn)行布線,成功后生成Bit文件,加載到FPGA,施加測(cè)試向量進(jìn)行測(cè)試;
(20)在輸入端施加測(cè)試向量,如果輸出端和輸入端不相同,則二倍線有故障,并且根據(jù)不同的結(jié)果,可以判斷出何種故障。
本發(fā)明的有益效果:
1、本發(fā)明覆蓋率高,一次配置可以100%覆蓋一個(gè)方向的所有二倍線。
2、本發(fā)明可復(fù)用性強(qiáng),適用于所有基于Virtex架構(gòu)的FPGA。
3、本發(fā)明故障測(cè)試準(zhǔn)確,在一次編程配置的情況下,采用不同的測(cè)試向量,可以對(duì)一個(gè)方向(東西方向或者南北方向)上的二倍線布線資源進(jìn)行全覆蓋的故障測(cè)試,可以發(fā)現(xiàn)固定故障、開路故障和橋接故障。
4、本發(fā)明還具有故障局部定位的功能,在多次配置的情況下,可以定位某行或者某列的二倍線發(fā)生了故障。
附圖說明
圖1為現(xiàn)有Virtex架構(gòu)FPGA芯片整體結(jié)構(gòu)簡(jiǎn)圖;
圖2為現(xiàn)有Virtex架構(gòu)FPGA芯片Switch BOX二倍線互聯(lián)資源簡(jiǎn)圖;
圖3為本發(fā)明測(cè)試二倍線的配置簡(jiǎn)圖。
具體實(shí)施方式
本發(fā)明所列舉的實(shí)施例,只是用于幫助理解本發(fā)明,不應(yīng)理解為對(duì)本發(fā)明保護(hù)范圍的限定,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明思想的前提下,還可以對(duì)本發(fā)明進(jìn)行改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求保護(hù)的范圍內(nèi)。
下面結(jié)合具體附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明。
本測(cè)試法的實(shí)施對(duì)象基于Xilinx公司Virtex系列架構(gòu)的任何FPGA芯片。如圖1-2所示,基于該架構(gòu)的FPGA芯片通常包括:可編程輸入輸出單元(Input/Output Block,IOB)、大量可編程邏輯單元(Configurable Logic Block,CLB)和可編程互連資源,經(jīng)典對(duì)稱式的FPGA芯片互聯(lián)資源包括CLB的互聯(lián)開關(guān)盒(Switch Box,SB1)、IOB的互聯(lián)開關(guān)盒(SB2)、CLB的輸入開關(guān)盒(Input Mux,IMUX;lmux_b0~lmux_b31)、CLB的輸出開關(guān)盒(Output Mux,OMUX)、IOB的輸入開關(guān)盒、互聯(lián)線段(具體包括單長(zhǎng)線、二倍線、六倍線、長(zhǎng)線等資源)、CLB的slice0~slice3、二倍線起始(E2BEG,W2BEG,N2BEG,S2BEG)、二倍線終止(E2End,W2End,N2End,S2End)?;谝陨霞軜?gòu)的FPGA,IOB的物理位置位于左側(cè)和右側(cè)。
本發(fā)明的測(cè)試法如圖3所示,將IO的輸入接入到二倍線的輸入,或者將前一行或者前一列的二倍線輸出接入到二倍線的輸入。再利用每行或者每列中的某個(gè)CLB進(jìn)行中繼,將IO的輸入經(jīng)過Slice引入到二倍線中,同時(shí)將同行或者同列的不同方向的二倍線首尾相接。再將同方向的二倍線按照行或者按照列進(jìn)行首尾相接。再將二倍線的輸出連接到下一行或者下一列的輸入,將相鄰行或者相鄰列的二倍線進(jìn)行首尾相接,或者將二倍線的輸出連接到IO的輸出上。這樣整個(gè)FPGA芯片的行的二倍線或者列的二倍線都從頭到尾連接起來。然后在FPGA的測(cè)試二倍線的頭端施加特定的激勵(lì)測(cè)試向量,根據(jù)尾端的輸出,從而判斷出測(cè)試二倍線的固定故障,開路故障,或者橋接故障。同時(shí),該發(fā)明的測(cè)試法還能定位某行或者某列的二倍線發(fā)生了故障。
下面以Virtex架構(gòu)的芯片為例,做一根具體的0號(hào)線的走線方法,具體走線方法為:
(1)如圖3所示,從最左下側(cè)的IOB作為輸入,引入一根線到最左側(cè)最下邊的一個(gè)初始CLB(CLB_X1Y0),從Slice3的F4輸入,再?gòu)膶?duì)應(yīng)的Slice3的X(pip CLB_X1Y0 X_PINWIRE3->BEST_LOGIC_OUTS3_INT,pip INT_X1Y0 BEST_LOGIC_OUTS3->E2BEG0),輸出到E2BEG0;
(2)如圖3所示,初始接線盒(INT_X1Y0)的E2BEG0線,通過0號(hào)二倍線走到下一個(gè)接線盒(INT_X3Y0),然后在INT_X3Y0里E2End0直接連接到E2BEG0(pip INT_X3Y0 E2END0->E2BEG0);
(3)如圖3所示,如此循環(huán),一直到最右側(cè)接線盒(INT_X71Y0)(pip INT_X71Y0 E2END0->E2BEG0),通過最右側(cè)回環(huán)(pip R_TERM_INT_X72Y0 R_TERM_INT_E2MID0->R_TERM_INT_W2END0);然后再一路向西(pip INT_X72Y0 W2END0->W2BEG0);
(4)從接線盒INT_X72Y0的W2End0連接到INT_X70Y0的W2BEG0,然后連接到接線盒INT_X70Y0(pip INT_X72Y0 W2END0->W2BEG0),如此循環(huán),一直到最左側(cè)的接線盒INT_X0Y0,通過INT_X0Y0進(jìn)行回環(huán)(pip L_TERM_INT_X0Y0L_TERM_INT_W2BEG0->L_TERM_INT_E2MID0);
(5)如圖3所示,通過接線盒INT_X1Y0的E2End0連接到slice0的G4(pip INT_X1Y0 E2END0->IMUX_B0;pip CLB_X1Y0 IMUX_B0_INT->G4_PINWIRE0)。然后Slice0的G4對(duì)應(yīng)的輸出Y,連接進(jìn)入西向的W2BEG0,(pip CLB_X1Y0 Y_PINWIRE0->BEST_LOGIC_OUTS4_INT;pip INT_X1Y0 BEST_LOGIC_OUTS4->W2BEG0),通過INT_X0Y0回環(huán),對(duì)應(yīng)的命令為(pip L_TERM_INT_X0Y0 L_TERM_INT_W2MID0->L_TERM_INT_E2END0);
(6)回環(huán)后,從接線盒INT_X0Y0連接到INT_X2Y0(pip INT_X0Y0 E2END0->E2BEG0),如此循環(huán),一直到最右側(cè)邊緣,回環(huán)到接線盒(INT_X71Y0pip R_TERM_INT_X72Y0R_TERM_INT_E2BEG0->R_TERM_INT_W2MID0);
(7)回環(huán)后,從接線盒INT_X71Y0連接到接線盒INT_X69Y0(pip INT_X71Y0 W2END0->W2BEG0),然后一直向西,直到接線盒INT_X1Y0;
(8)在接線盒INT_X1Y0里,將W2End0接入到Slice 0的F4(pip INT_X1Y0W2END0->IMUX_B8,pip CLB_X1Y0 IMUX_B8_INT->F4_PINWIRE0);
(9)如圖3所示,將Slice0F4對(duì)應(yīng)的輸出X連接到下一行的CLB_X1Y1;
(10)將0號(hào)線如此循環(huán),直到把所有行的二倍線0號(hào)線走完,然后把最后一個(gè)CLB的Slice0 F4對(duì)應(yīng)的輸出X連接到最左側(cè)最頂上的輸出IOB上;至此,所有二倍線的0號(hào)線,從頭到尾就串聯(lián)了起來;
(11)如法炮制,把二倍線的1號(hào)線,2號(hào)線,……,9號(hào)線,也從頭到尾的串聯(lián)起來;
(12)施加測(cè)試向量,例如測(cè)試0號(hào)線,則對(duì)10根線的輸入端施加(1,0,0,0,0,0,0,0,0,0)的測(cè)試信號(hào),如果輸出端的輸出信號(hào)也為(1,0,0,0,0,0,0,0,0,0),則二倍線無故障。