聯(lián)合測試行為組織串聯(lián)鏈中器件的測試方法
【專利摘要】本發(fā)明涉及一種聯(lián)合測試行為組織串聯(lián)鏈中器件的測試方法,該方法包括:重置JTAG串聯(lián)鏈及串聯(lián)鏈中各器件的數(shù)據(jù)寄存器和指令寄存器中的數(shù)據(jù);在TCK節(jié)拍下,輸入長度為2N的第一數(shù)據(jù)流,同時移位出各指令寄存器中的二進(jìn)制數(shù)據(jù)流,得到第一輸出序列;在TCK節(jié)拍下,輸入長度為2N的第二數(shù)據(jù)流,同時移位出各指定寄存器中的二進(jìn)制數(shù)據(jù)流,得到第二輸出序列;計算出JTAG串聯(lián)鏈中所有器件的指令寄存器的寬度之和M并計算出各個器件的指令寄存器的寬度;選中目標(biāo)器件并讀取選中的目標(biāo)器件中的唯一標(biāo)識寄存器ID中的數(shù)據(jù)。本發(fā)明提供的方法通過輸入特定的二進(jìn)制數(shù)據(jù)流,能自動計算出JTAG串聯(lián)鏈中各器件的指令寄存器的寬度,從而實現(xiàn)對目標(biāo)器件的編程與測試。
【專利說明】聯(lián)合測試行為組織串聯(lián)鏈中器件的測試方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種測試方法,特別是涉及一種聯(lián)合測試行為組織串聯(lián)鏈中器件的測試方法。
【背景技術(shù)】
[0002]聯(lián)合測試行為組織(JTAG, Joint Test Act1n Group)測試允許多個器件通過JTAG接口串聯(lián)在一起,形成一個JTAG鏈,能實現(xiàn)對各個器件分別測試。圖1為常見的多個JTAG器件串聯(lián)方式。如圖1所示,多個器件通過JTAG接口串聯(lián)在一起,其中,每個器件均有四個引腳:TCK一測試時鐘輸入;TDI—測試數(shù)據(jù)輸入,數(shù)據(jù)通過TDI輸入JTAG 口 ;TD0—測試數(shù)據(jù)輸出,數(shù)據(jù)通過TDO從JTAG 口輸出;TMS—測試模式選擇,TMS用來設(shè)置JTAG 口處于某種特定的測試模式。通過TCK、TMS的設(shè)置,可將JTAG設(shè)置為捕獲指令CAPTURE_IR或捕獲數(shù)據(jù)CAPTURE_DR狀態(tài)。圖1中,唯一標(biāo)識寄存器ID為32位,旁路寄存器Bypass為I位,指令寄存器的寬度一般大于2小于等于16。
[0003]目前,JTAG接口還常用于實現(xiàn)在系統(tǒng)編程(ISP, In-System Programmer),對FLASH等器件進(jìn)行編程。只要知道每個設(shè)備的指令寄存器的寬度,就可以旁路(Bypass)鏈中其它的器件、對目標(biāo)芯片進(jìn)行編程與調(diào)試。傳統(tǒng)的編程器在多鏈中指定器件編程時,為了能夠Bypass其它器件,需要從器件指定的邊界掃描描述語言(BSDL, Boundary ScanDescript1n Language)文件獲取指令寄存器寬度等器件信息。然而在某一特定條件或環(huán)境中,由于沒有相應(yīng)的BSDL文件,則無法Bypass此器件,導(dǎo)致JTAG編程失敗。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的是提供一種通過輸入特定的二進(jìn)制數(shù)據(jù)流,自動計算JTAG串聯(lián)鏈中各器件的指令寄存器寬度,實現(xiàn)對目標(biāo)器件編程的方法。
[0005]為實現(xiàn)上述目的,本發(fā)明提供了一種JTAG串聯(lián)鏈中器件的測試方法,包括以下步驟:
[0006]重置Reset聯(lián)合測試行為組織JTAG串聯(lián)鏈及串聯(lián)鏈中各器件的數(shù)據(jù)寄存器和指令寄存器中的數(shù)據(jù);
[0007]在JTAG的狀態(tài)為移位指令SHIFT_IR時,在測試時鐘TCK節(jié)拍的控制下,通過JTAG串聯(lián)鏈的測試數(shù)據(jù)輸入TDI 口,輸入長度為2N的第一數(shù)據(jù)流,同時通過JTAG串聯(lián)鏈的測試數(shù)據(jù)輸出TDO 口移位出各指令寄存器中的二進(jìn)制數(shù)據(jù)流,得到第一輸出序列;
[0008]重置JTAG串聯(lián)鏈及串聯(lián)鏈中各器件的數(shù)據(jù)寄存器和指令寄存器中的數(shù)據(jù),在JTAG的狀態(tài)為移位指令SHIFT_IR時,在TCK節(jié)拍的控制下,通過JTAG串聯(lián)鏈的TDI 口,輸入長度為2N的第二數(shù)據(jù)流,同時通過JTAG串聯(lián)鏈的TDO 口移位出各指定寄存器中的二進(jìn)制數(shù)據(jù)流,得到第二輸出序列;
[0009]根據(jù)所述第一輸出序列和第二輸出序列,計算出所述JTAG串聯(lián)鏈中所有器件的指令寄存器的寬度之和M ;
[0010]根據(jù)所述第一輸出序列,第二輸出序列和所述計算出的所述JTAG串聯(lián)鏈中所有器件的指令寄存器的寬度之和M,計算出各個器件的指令寄存器的寬度;
[0011 ] 通過輸入M位特定的二進(jìn)制數(shù)據(jù)流,選中目標(biāo)器件,其中,在所述M位特定的二進(jìn)制數(shù)據(jù)流中,與選中的目標(biāo)器件的位置對應(yīng)的字段為與選擇唯一標(biāo)識指令相對應(yīng)的二進(jìn)制數(shù)據(jù);
[0012]在JTAG的狀態(tài)為捕獲數(shù)據(jù)CAPTURE_DR時,將各器件的數(shù)據(jù)寄存器連接到TDI和TDO之間;在JTAG的狀態(tài)為移位數(shù)據(jù)SHIFT_DR時,在TCK節(jié)拍的控制下,通過JTAG的TDO口移位出各器件的數(shù)據(jù)寄存器中的數(shù)據(jù)。
[0013]在上述方法中,所述第一數(shù)據(jù)流由N位全O的二進(jìn)制數(shù)據(jù)流和N位全I(xiàn)的二進(jìn)制數(shù)據(jù)流組成;所述第二數(shù)據(jù)流為2N位全I(xiàn)的二進(jìn)制數(shù)據(jù)流;
[0014]或者,
[0015]所述第一數(shù)據(jù)流為2N位全I(xiàn)的二進(jìn)制數(shù)據(jù)流;所述第二數(shù)據(jù)流為由N位全O的二進(jìn)制數(shù)據(jù)流和N位全I(xiàn)的二進(jìn)制數(shù)據(jù)流組成。
[0016]在上述方法中,所述相應(yīng)的二進(jìn)制數(shù)據(jù)流的位數(shù)與相應(yīng)指令寄存器的寬度相對應(yīng),所述二進(jìn)制數(shù)據(jù)流的最后一位為1,倒數(shù)第二位為O。
[0017]在上述方法中,計算出所述JTAG串聯(lián)鏈中所有器件的指令寄存器的寬度之和M包括:
[0018]比較第一輸出序列和第二輸出序列,所述第一輸出序列和第二輸出序列中相同的M位為所述JTAG串聯(lián)鏈所有器件的指令寄存器的寬度之和。
[0019]在上述方法中,根據(jù)所述第一輸出序列,第二輸出序列和所述計算出的所述JTAG串聯(lián)鏈中所有器件的指令寄存器的寬度之和M,計算出各個器件的指令寄存器的寬度包括:
[0020]取出第一輸出序列和第二輸出序列中相同的M位二進(jìn)制數(shù)據(jù)流,根據(jù)指定的開頭劃分為i組,判斷i和JTAG串聯(lián)鏈中器件的個數(shù)是否一致,在一致的情況下,將每組二進(jìn)制數(shù)據(jù)流的位數(shù)作為所對應(yīng)器件的指令寄存器寬度。
[0021]在上述方法中,將各器件的數(shù)據(jù)寄存器連接到TDI和TDO之間包括:
[0022]將選中的目標(biāo)器件的唯一標(biāo)識寄存器ID,以及其他器件的旁路Bypass寄存器連接到TDI和TDO之間。
[0023]本發(fā)明提供的方法通過輸入特定的二進(jìn)制數(shù)據(jù)流,自動計算出JTAG串聯(lián)鏈中所有器件的指令寄存器的寬度之和,將計算出的寬度之和再結(jié)合相應(yīng)的算法即可計算出每個器件的指令寄存器的寬度及目標(biāo)器件在串聯(lián)鏈中的位置,從而實現(xiàn)對目標(biāo)器件的編程與測試。
【專利附圖】
【附圖說明】
[0024]圖1為常見的多個JTAG器件串聯(lián)方式;
[0025]圖2為本發(fā)明實施例的JTAG串聯(lián)鏈中器件的測試方法的流程圖;
[0026]圖3為輸入40位全O和40位全I(xiàn) 二進(jìn)制數(shù)據(jù)流的示意圖;
[0027]圖4為輸入80位全I(xiàn) 二進(jìn)制數(shù)據(jù)流的示意圖;
[0028]圖5為計算JTAG串聯(lián)鏈中所有器件指令寄存器寬度之和示意圖;
[0029]圖6為選中最右端的目標(biāo)器件的示意圖;
[0030]圖7為讀取最右端的目標(biāo)器件ID中數(shù)據(jù)的示意圖;
[0031]圖8為計算所有器件的各指令寄存器的寬度的示意圖;
[0032]圖9為選中第二個目標(biāo)器件的示意圖;
[0033]圖10為讀取第二個目標(biāo)器件ID中數(shù)據(jù)的示意圖。
【具體實施方式】
[0034]下面通過附圖和實施例,對本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
[0035]圖2為本發(fā)明實施例的JTAG串聯(lián)鏈中器件的測試方法的流程圖。如圖2所示,本實施例具體包括如下步驟:
[0036]步驟201,重置Reset聯(lián)合測試行為組織JTAG串聯(lián)鏈及串聯(lián)鏈中各器件的數(shù)據(jù)寄存器和指令寄存器中的數(shù)據(jù)。
[0037]在步驟201中,重置JTAG串聯(lián)鏈,包括重置JTAG的狀態(tài)機MAP,使其回到邏輯重置LOGIC RESET狀態(tài);重置指令寄存器中的數(shù)據(jù)后,各器件的指令寄存器中為相應(yīng)的二進(jìn)制數(shù)據(jù)流;該相應(yīng)的二進(jìn)制數(shù)據(jù)流的位數(shù)與相應(yīng)指令寄存器的寬度相對應(yīng),且二進(jìn)制數(shù)據(jù)流的最后一位為1,倒數(shù)第二位為O。舉例為,當(dāng)JTAG串聯(lián)鏈中某一指令寄存器的寬度為10,那么該指令寄存器產(chǎn)生的相應(yīng)二進(jìn)制數(shù)據(jù)流可以為:0000,0000,01。數(shù)據(jù)寄存器的重置包括唯一標(biāo)識寄存器ID和旁路寄存器BYPASS的重置,唯一標(biāo)識寄存器ID重置后,唯一標(biāo)識寄存器ID中為該器件的32位唯一標(biāo)識碼;旁路寄存器BYPASS重置后為全O數(shù)據(jù)。
[0038]步驟202,計算JTAG串聯(lián)鏈中器件的個數(shù),目標(biāo)器件在串聯(lián)鏈中的位置和目標(biāo)器件指令寄存器的寬度。
[0039]在步驟202中,依照步驟201對JTAG串聯(lián)鏈中各器件的指令寄存器和數(shù)據(jù)寄存器重置后,將JTAG串聯(lián)鏈中所有器件的唯一標(biāo)識寄存器ID連接到TDI和TDO之間,在JTAG的狀態(tài)為移位指令SHIFT_DR時,在TCK節(jié)拍的控制下,通過JTAG的TDI 口輸入32*k位二進(jìn)制數(shù)據(jù)流,其中,k為自然數(shù);同時通過JTAG的TDO 口移位出32*k位二進(jìn)制數(shù)據(jù)流,其中包括各器件的唯一標(biāo)識寄存器中的數(shù)據(jù);根據(jù)移位出的數(shù)據(jù),再結(jié)合datasheet手冊,計算JTAG串聯(lián)鏈中目標(biāo)器件的個數(shù),目標(biāo)器件在串聯(lián)鏈中的位置和目標(biāo)器件指令寄存器的寬度。其中,datasheet手冊中記錄了目標(biāo)器件的唯一標(biāo)識ID碼,型號(如ARM cortex m3,STM32等)及指令寄存器的寬度。舉例為,通過JTAG的TDI 口輸入32*3位二進(jìn)制數(shù)據(jù)流,且在TCK節(jié)拍的控制下,通過JTAG的TDO 口輸出的32*3位二進(jìn)制數(shù)據(jù)流為:第I個32位的二進(jìn)制數(shù)據(jù)流為:00111011110000000000010001110111(用 16 進(jìn)制表示為 0x3ba00477),第 2 個 32 位的二進(jìn)制數(shù)據(jù)流為:00000110010000010100000001000001
[0040](用16進(jìn)制表示為0x06414041),第3個32位的二進(jìn)制數(shù)據(jù)流為全O二進(jìn)制數(shù)據(jù)。通過分析上述輸出結(jié)果,可知,有兩個32位非O數(shù)據(jù),那么可以得出,該JTAG串聯(lián)鏈中有兩個器件。通過將手冊中目標(biāo)器件的ID碼和輸出結(jié)果中的各ID碼進(jìn)行比較,可確定目標(biāo)器件在JTAG串聯(lián)鏈中的位置。假設(shè)目標(biāo)器件的ID碼為0x06414041,那么目標(biāo)器件在JTAG串聯(lián)鏈中第2個位置。最后通過查閱datasheet手冊,可以獲取目標(biāo)指令寄存器的寬度。
[0041]步驟203,在JTAG的狀態(tài)為移位指令SHIFT_IR時,在測試時鐘TCK節(jié)拍的控制下,通過JTAG串聯(lián)鏈的測試數(shù)據(jù)輸入TDI 口,輸入長度為2N的第一數(shù)據(jù)流,同時通過JTAG串聯(lián)鏈的測試數(shù)據(jù)輸出TDO 口移位出各指令寄存器中的二進(jìn)制數(shù)據(jù)流,得到第一輸出序列。
[0042]在步驟203中,通過JTAG串聯(lián)鏈的測試時鐘TCK和測試模式選擇TMS進(jìn)行狀態(tài)的改變,將JTAG設(shè)置為移位指令SHIFT_IR狀態(tài)。第一數(shù)據(jù)流的長度為2N,優(yōu)選地,N>=a*b,其中,a為JTAG串聯(lián)鏈中器件的個數(shù),b為JTAG串聯(lián)鏈中的器件中具有的最大指令寄存器的寬度。第一數(shù)據(jù)流由N位全O的二進(jìn)制數(shù)據(jù)流和N位全I(xiàn)的二進(jìn)制數(shù)據(jù)流組成或者為2N位全I(xiàn)的二進(jìn)制數(shù)據(jù)流。圖3為輸入40位全O和40位全I(xiàn) 二進(jìn)制數(shù)據(jù)流的示意圖,圖中,依照步驟202的步驟計算JTAG串聯(lián)鏈中器件的個數(shù),可得該串聯(lián)鏈中共有4個器件,即a=4 ;假設(shè)目前已知的器件的最大指令寄存器的寬度為10,那么b=10,則N=4*10。在TCK節(jié)拍的控制下,依次將40位的全O和40位全I(xiàn) 二進(jìn)制數(shù)據(jù)流,通過JTAG串聯(lián)鏈的TDI 口輸入到各器件的指令寄存器中,同時通過JTAG串聯(lián)鏈的TDO 口移位出各指令寄存器中的二進(jìn)制數(shù)據(jù)流,即一個TCK節(jié)拍輸入一位0,相應(yīng)地可以移位出一位二進(jìn)制數(shù)據(jù),直至移位出80位的第一輸出序列。該第一輸出序列可以分為第一字段和第二字段,第一字段的數(shù)據(jù)位數(shù)和JTAG串聯(lián)鏈中各器件的指令寄存器的寬度之和一致,且第一字段中的二進(jìn)制數(shù)據(jù)流呈規(guī)律性變化;第二字段由兩部分組成,第一部分為40位全O數(shù)據(jù);第二部分為全I(xiàn)數(shù)據(jù),全I(xiàn)數(shù)據(jù)的位數(shù)為40減去各器件的指令寄存器寬度之和。
[0043]步驟204,重置JTAG串聯(lián)鏈及串聯(lián)鏈中各器件的數(shù)據(jù)寄存器和指令寄存器中的數(shù)據(jù),在JTAG的狀態(tài)為移位指令SHIFT_IR時,在TCK節(jié)拍的控制下,通過JTAG串聯(lián)鏈的TDI口,輸入長度為2N的第二數(shù)據(jù)流,同時通過JTAG串聯(lián)鏈的TDO 口移位出各指定寄存器中的二進(jìn)制數(shù)據(jù)流,得到第二輸出序列。
[0044]在步驟204中,得到第一輸出序列之后,依照步驟201重置JTAG串聯(lián)鏈及串聯(lián)鏈中各器件的數(shù)據(jù)寄存器和指令寄存器中的數(shù)據(jù)。第二數(shù)據(jù)流為由N位全O的二進(jìn)制數(shù)據(jù)流和N位全I(xiàn)的二進(jìn)制數(shù)據(jù)流組成或者為2N位全I(xiàn)的二進(jìn)制數(shù)據(jù)流,在一種具體實施例中,第二數(shù)據(jù)流為2N位全I(xiàn)數(shù)據(jù)流。
[0045]步驟204的執(zhí)行方法和步驟203相似,不同的是在JTAG的狀態(tài)為移位指令SHIFT_IR時,在TCK節(jié)拍的控制下,依次輸入80位的全I(xiàn) 二進(jìn)制數(shù)據(jù)流。圖4為輸入80位全I(xiàn) 二進(jìn)制數(shù)據(jù)流的示意圖,圖中,同樣可以移位出80位的第二輸出序列。該第二輸出序列也可以分為第一字段和第二字段,其中,第一字段和第一輸出序列的第一字段一致;第二字段為全I(xiàn)數(shù)據(jù),其位數(shù)為80減去各器件的指令寄存器寬度和。
[0046]步驟205,根據(jù)所述第一輸出序列和第二輸出序列,計算出所述JTAG串聯(lián)鏈中所有器件的指令寄存器的寬度之和M。
[0047]步驟205中,通過對第一輸出序列和第二輸出序列的第一字段進(jìn)行分析,可計算出所有器件的指令寄存器的寬度之和。圖5為計算JTAG串聯(lián)鏈中所有器件指令寄存器寬度之和示意圖。圖中,第一行對應(yīng)第一輸出序列,分為三部分:第一部分為以“10”開頭的多組二進(jìn)制數(shù)據(jù)流組成,即第一字段;第二部分為40位全O數(shù)據(jù);第三部分為全I(xiàn)數(shù)據(jù),全I(xiàn)數(shù)據(jù)的位數(shù)為40減去各器件的指令寄存器寬度之和,第二部分和第三部分組成第二字段。第二行對應(yīng)第二輸出序列,分為兩部分:第一部分為以“10”開頭的多組二進(jìn)制數(shù)據(jù)流組成,即第一字段,從圖中可以看出,其與第一序列的第一字段部分相同;第二部分為80全I(xiàn) 二進(jìn)制數(shù)據(jù)組成,即第二字段。取出第一輸出序列和第二輸出序列相同的第一字段部分,該字段包括M位二進(jìn)制數(shù)據(jù),則M為JTAG串聯(lián)鏈所有器件的指令寄存器的寬度之和。圖中所示的M值為22,即所有器件的指令寄存器的寬度之和為22。
[0048]步驟206,依照步驟202中計算出的目標(biāo)器件在JTAG串聯(lián)鏈的位置,判斷目標(biāo)器件是否在兩端,如果是,則執(zhí)行步驟207 ;否則執(zhí)行步驟209。
[0049]步驟207,通過輸入M位特定的二進(jìn)制數(shù)據(jù)流,選中目標(biāo)器件,其中,在所述M位特定的二進(jìn)制數(shù)據(jù)流中,最左端或最右端對應(yīng)的字段為與選擇唯一標(biāo)識指令相對應(yīng)的二進(jìn)制數(shù)據(jù)。
[0050]在步驟207中,依照步驟205的計算結(jié)果,得到所有器件的指令寄存器的寬度之和及與其相應(yīng)的第一字段部分,再結(jié)合目標(biāo)器件指令寄存器的寬度,即可通過向JTAG串聯(lián)鏈中各器件的指令寄存器中輸入選擇指令,而選定一個需要訪問的唯一標(biāo)識寄存器。圖6為選中最右端的目標(biāo)器件的示意圖。假設(shè)依照步驟202計算的目標(biāo)器件在最右端,且目標(biāo)器件的指令寄存器的寬度為10位。圖中,把JTAG串聯(lián)鏈中所有器件的指令寄存器連接到TDI和TDO之間;然后在TCK節(jié)拍控制下,輸入22位的特定的二進(jìn)制數(shù)據(jù)流,其中,22為依照步驟204計算出的所有器件的指令寄存器寬度之和,最右端的10位為與選中目標(biāo)器件的選擇唯一標(biāo)識指令相對應(yīng)的二進(jìn)制數(shù)據(jù),其余位為I ;在依次輸入特定的二進(jìn)制數(shù)據(jù)流的同時,移位出各器件的指令寄存器中原有的數(shù)據(jù)。在向各器件的指令寄存器中寫入特定的二進(jìn)制數(shù)據(jù)流之后,就可進(jìn)行數(shù)據(jù)的讀取了。
[0051]步驟208,在JTAG的狀態(tài)為捕獲數(shù)據(jù)CAPTURE_DR時,將各器件的數(shù)據(jù)寄存器連接到TDI和TDO之間;在JTAG的狀態(tài)為移位數(shù)據(jù)SHIFT_DR時,通過JTAG的TDO 口移位出各器件的數(shù)據(jù)寄存器中的數(shù)據(jù)。
[0052]在步驟208中,連接到TDI和TDO之間的數(shù)據(jù)寄存器包括目標(biāo)器件的唯一標(biāo)識寄存器和其他器件的旁路寄存器。依照步驟207的執(zhí)行結(jié)果,可選中兩端的目標(biāo)器件,然后基于選中的目標(biāo)器件,輸入讀取指令即可讀取出目標(biāo)器件唯一標(biāo)識寄存器中的數(shù)據(jù)。圖7為讀取最右端的目標(biāo)器件ID中數(shù)據(jù)的示意圖。圖中,在JTAG的狀態(tài)為捕獲數(shù)據(jù)CAPTURE_DR時,把選中的目標(biāo)器件的唯一標(biāo)識寄存器ID,以及其他器件的旁路Bypass寄存器連接到TDI和TDO之間;在JTAG的狀態(tài)為移位數(shù)據(jù)SHIFT_DR時,在TCK節(jié)拍控制下,輸入35位的特定的二進(jìn)制數(shù)據(jù)流,其中,32是唯一標(biāo)識寄存器ID的寬度,最右端的32位為與讀取指令相對應(yīng)的特定二進(jìn)制數(shù)據(jù),其余3位為0,即旁路JTAG串聯(lián)鏈中其他器件;同時通過JTAG的TDO 口移位出各器件的數(shù)據(jù)寄存器中的數(shù)據(jù)。
[0053]步驟209,根據(jù)所述第一輸出序列,第二輸出序列和所述計算出的所述JTAG串聯(lián)鏈中所有器件的指令寄存器的寬度之和M,計算出各個器件的指令寄存器的寬度。
[0054]在步驟209中,依據(jù)步驟205提取的第一輸出序列和第二輸出序列相同的第一字段,和計算出的所有器件的指令寄存器的寬度之和,計算所有器件的各指令寄存器的寬度。圖8為計算所有器件的各指令寄存器的寬度的示意圖。圖中,將第一輸出序列和第二輸出序列相同的第一字段(22位二進(jìn)制數(shù)據(jù)流),根據(jù)指定的開頭“10”劃分為4組。判斷4與依照步驟202計算出的JTAG串聯(lián)鏈中器件的個數(shù)是否一致,在一致的情況下,則將最后一組二進(jìn)制數(shù)據(jù)流“1000_0000_00”的位數(shù)10作為第一個器件的指令寄存器的寬度;第三組二進(jìn)制數(shù)據(jù)流“100”的位數(shù)3作為第二個器件的指令寄存器的寬度;第二組二進(jìn)制數(shù)據(jù)流“1000_0”的位數(shù)5作為第三個器件的指令寄存器的寬度;第一組二進(jìn)制數(shù)據(jù)流“1000”的位數(shù)4作為最后一個器件的指令寄存器的寬度。
[0055]步驟210,通過輸入M位特定的二進(jìn)制數(shù)據(jù)流,選中目標(biāo)器件,其中,在所述M位特定的二進(jìn)制數(shù)據(jù)流中,與選中的目標(biāo)器件的位置對應(yīng)的字段為與選擇唯一標(biāo)識指令相對應(yīng)的二進(jìn)制數(shù)據(jù)。
[0056]在步驟210中,已經(jīng)計算出JTAG串聯(lián)鏈中各器件指令寄存器的寬度,通過輸入M位特定的二進(jìn)制數(shù)據(jù)流,選中任意位置的目標(biāo)器件。圖9為選中第二個目標(biāo)器件的示意圖。依據(jù)步驟209的計算結(jié)果可知,第一個器件的指令寄存器的寬度為5,JTAG串聯(lián)鏈中各器件指令寄存器的寬度之和為22,而已知的目標(biāo)器件的指令寄存器的寬度為10,則待輸入的22位特定的二進(jìn)制數(shù)據(jù)流為:左端5位I與第一個器件的指令寄存器的寬度相對應(yīng),之后的第6-15共10位為與選中目標(biāo)器件的選擇唯一標(biāo)識指令相對應(yīng)的二進(jìn)制數(shù)據(jù),剩下的7位全部置I。圖中,把JTAG串聯(lián)鏈中所有器件的指令寄存器連接到TDI和TDO之間,然后在TCK節(jié)拍控制下,輸入22位的特定的二進(jìn)制數(shù)據(jù)流,同時,移位出各器件的指令寄存器中原有的數(shù)據(jù)。
[0057]步驟211,在JTAG的狀態(tài)為捕獲數(shù)據(jù)CAPTURE_DR時,將各器件的數(shù)據(jù)寄存器連接到TDI和TDO之間;在JTAG的狀態(tài)為移位數(shù)據(jù)SHIFT_DR時,通過JTAG的TDO 口移位出各器件的數(shù)據(jù)寄存器中的數(shù)據(jù)。
[0058]步驟211中,連接到TDI和TDO之間的數(shù)據(jù)寄存器包括目標(biāo)器件的唯一標(biāo)識寄存器和其他器件的旁路寄存器。基于選中的第二個目標(biāo)器件,輸入讀取指令即可讀取出目標(biāo)器件唯一標(biāo)識寄存器中的數(shù)據(jù)。圖10為讀取第二個目標(biāo)器件ID中數(shù)據(jù)的示意圖。在JTAG的狀態(tài)為捕獲數(shù)據(jù)CAPTURE_DR時,把選中的第二個目標(biāo)器件的唯一標(biāo)識寄存器ID,以及其他器件的旁路Bypass寄存器連接到TDI和TDO之間;在JTAG的狀態(tài)為移位數(shù)據(jù)SHIFT_DR時,在TCK節(jié)拍控制下,輸入35位的特定的二進(jìn)制數(shù)據(jù)流,其中,第一位O表示旁路第一個器件的Bypass寄存器,之后的32位是第二個器件的唯一標(biāo)識寄存器ID的寬度,這32位二進(jìn)制數(shù)據(jù)為與讀取指令相對應(yīng)的特定二進(jìn)制數(shù)據(jù),其余兩位為0,即旁路JTAG串聯(lián)鏈中其他兩個器件;同時通過JTAG的TDO 口移位出各器件的數(shù)據(jù)寄存器中的數(shù)據(jù)。
[0059]綜上,本發(fā)明提供的方法首先對串聯(lián)鏈中各器件的指令寄存器和數(shù)據(jù)寄存器重置后,通過讀取各器件唯一標(biāo)示寄存器中的數(shù)據(jù),確定JTAG串聯(lián)鏈中器件的個數(shù),目標(biāo)器件的位置和目標(biāo)器件指令寄存器的寬度;然后通過兩次輸入不同的二進(jìn)制數(shù)據(jù)流,自動計算出JTAG串聯(lián)鏈中所有器件的指令寄存器的寬度之和;將計算出的寬度之和再結(jié)合相應(yīng)的算法即可計算出每個器件的指令寄存器的寬度;最后通過指令寄存器,選定一個需要訪問的數(shù)據(jù)寄存器,把選定的數(shù)據(jù)寄存器連接到TDI和TDO之間;由TCK驅(qū)動,通過TDI把特定的二進(jìn)制數(shù)據(jù)流輸入到選定的數(shù)據(jù)寄存器中,同時把選定的數(shù)據(jù)寄存器中的數(shù)據(jù)通過TDO讀出來,從而實現(xiàn)對目標(biāo)器件的編程與測試。
[0060]本發(fā)明提供的方法解決了在某一特定條件或環(huán)境中,由于沒有相應(yīng)的BSDL文件,則無法Bypass此器件,導(dǎo)致JTAG編程失敗的問題。
[0061]專業(yè)人員應(yīng)該還可以進(jìn)一步意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
[0062]結(jié)合本文中所公開的實施例描述的方法或算法的步驟可以用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實施。軟件模塊可以置于隨機存儲器(RAM)、內(nèi)存、只讀存儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動磁盤、CD-ROM、或【技術(shù)領(lǐng)域】內(nèi)所公知的任意其它形式的存儲介質(zhì)中。
[0063]以上所述的【具體實施方式】,對本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,所應(yīng)理解的是,以上所述僅為本發(fā)明的【具體實施方式】而已,并不用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種聯(lián)合測試行為組織串聯(lián)鏈中器件的測試方法,其特征在于,該方法包括: (1)重置聯(lián)合測試行為組織JTAG串聯(lián)鏈及串聯(lián)鏈中各器件的數(shù)據(jù)寄存器和指令寄存器中的數(shù)據(jù); (2)在JTAG的狀態(tài)為移位指令SHIFT_IR時,在測試時鐘TCK節(jié)拍的控制下,通過JTAG串聯(lián)鏈的測試數(shù)據(jù)輸入TDI 口,輸入長度為2N的第一數(shù)據(jù)流,同時通過JTAG串聯(lián)鏈的測試數(shù)據(jù)輸出TDO 口移位出各指令寄存器中的二進(jìn)制數(shù)據(jù)流,得到第一輸出序列; (3)重置JTAG串聯(lián)鏈及串聯(lián)鏈中各器件的數(shù)據(jù)寄存器和指令寄存器中的數(shù)據(jù),在JTAG的狀態(tài)為移位指令SHIFT_IR時,在TCK節(jié)拍的控制下,通過JTAG串聯(lián)鏈的TDI 口,輸入長度為2N的第二數(shù)據(jù)流,同時通過JTAG串聯(lián)鏈的TDO 口移位出各指定寄存器中的二進(jìn)制數(shù)據(jù)流,得到第二輸出序列; (4)根據(jù)所述第一輸出序列和第二輸出序列,計算出所述JTAG串聯(lián)鏈中所有器件的指令寄存器的寬度之和M ; (5)根據(jù)所述第一輸出序列,第二輸出序列和所述計算出的所述JTAG串聯(lián)鏈中所有器件的指令寄存器的寬度之和M,計算出各個器件的指令寄存器的寬度; (6)通過輸入M位特定的二進(jìn)制數(shù)據(jù)流,選中目標(biāo)器件,其中,在所述M位特定的二進(jìn)制數(shù)據(jù)流中,與選中的目標(biāo)器件的位置對應(yīng)的字段為與選擇唯一標(biāo)識指令相對應(yīng)的二進(jìn)制數(shù)據(jù); (7)在JTAG的狀態(tài)為捕獲數(shù)據(jù)CAPTURE_DR時,將各器件的數(shù)據(jù)寄存器連接到TDI和TDO之間;在JTAG的狀態(tài)為移位數(shù)據(jù)SHIFT_DR時,在TCK節(jié)拍的控制下,通過JTAG的TDO口移位出各器件的數(shù)據(jù)寄存器中的數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述第一數(shù)據(jù)流由N位全O的二進(jìn)制數(shù)據(jù)流和N位全I(xiàn)的二進(jìn)制數(shù)據(jù)流組成;所述第二數(shù)據(jù)流為2N位全I(xiàn)的二進(jìn)制數(shù)據(jù)流; 或者, 所述第一數(shù)據(jù)流為2N位全I(xiàn)的二進(jìn)制數(shù)據(jù)流;所述第二數(shù)據(jù)流為由N位全O的二進(jìn)制數(shù)據(jù)流和N位全I(xiàn)的二進(jìn)制數(shù)據(jù)流組成。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述相應(yīng)的二進(jìn)制數(shù)據(jù)流的位數(shù)與相應(yīng)指令寄存器的寬度相對應(yīng),所述二進(jìn)制數(shù)據(jù)流的最后一位為1,倒數(shù)第二位為O。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,計算出所述JTAG串聯(lián)鏈中所有器件的指令寄存器的寬度之和M包括: 比較第一輸出序列和第二輸出序列,所述第一輸出序列和第二輸出序列中相同的M位為所述JTAG串聯(lián)鏈所有器件的指令寄存器的寬度之和。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述第一輸出序列,第二輸出序列和所述計算出的所述JTAG串聯(lián)鏈中所有器件的指令寄存器的寬度之和M,計算出各個器件的指令寄存器的寬度包括: 取出第一輸出序列和第二輸出序列中相同的M位二進(jìn)制數(shù)據(jù)流,根據(jù)指定的開頭劃分為i組,判斷i和JTAG串聯(lián)鏈中器件的個數(shù)是否一致,在一致的情況下,將每組二進(jìn)制數(shù)據(jù)流的位數(shù)作為所對應(yīng)器件的指令寄存器寬度。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,將各器件的數(shù)據(jù)寄存器連接到TDI和TDO之間包括: 將選中的目標(biāo)器件的唯一標(biāo)識寄存器ID,以及其他器件的旁路Bypass寄存器連接到TDI和TDO之間。
【文檔編號】G01R31/00GK104237666SQ201310250703
【公開日】2014年12月24日 申請日期:2013年6月21日 優(yōu)先權(quán)日:2013年6月21日
【發(fā)明者】朱維良, 韓桂麗, 劉明 申請人:京微雅格(北京)科技有限公司