,
(諾基亞上海貝爾股份有限公司,杭州 310053)
聯合測試行動小組(Joint Test Action Group, JTAG) 邊界掃描(Boundary Scan) 是IEEE1149.1標準,其接口在大量的數字芯片中集成,方便調試和編程。集成電路板上一般將各個芯片的JTAG接口串接起來形成菊花鏈,這樣可以通過JTAG工具進行統一的自動化操作。FLASH存儲芯片往往掛載在具有JTAG接口的芯片的總線上,這樣在工廠進行大規模生產時,可以通過JTAG鏈對FLASH芯片進行編程。
JTAG接口一般有4個信號,分別為測試數據輸入(TDI)、測試數據輸出(TDO)、測試時鐘(TCK)、測試模式選擇(TMS),測試復位信號(TRST)是可選的。TMS、TCK連入芯片內部的測試接入端口(TAP),TDI串接到芯片引腳的邊界掃描單元(BS)上,這些單元串接后通過TDO連出芯片。TAP控制器在TCK觸發下通過一系列的TMS信號進行狀態機的改變,這些狀態包括:Capture DR(得到當前數據寄存器的內容),Shift DR(對數據寄存器進行數據移位,從TDI移入,TDO移出),Update DR(更新當前數據寄存器的內容),Capture IR(得到當前數據指令寄存器的內容),Shift IR(對指令寄存器進行數據移位,從TDI移入、TDO移出),Update IR(更新當前指令寄存器的內容)。
IR和DR一起進行邊界掃描單元的控制,比如當IR是全1時,一般對應的功能是測試數據直通輸出(通過1比特的移位寄存器Bypass Register)。還可以控制引腳數據是從內部邏輯得到還是掃描單元得到,掃描單元的數據是從引腳輸入還是輸出到引腳上,從而實現特定的JTAG動作(如圖1所示)。

圖1 TAP控制器原理框圖
集成電路板上的FLASH器件一般掛載在具有JTAG接口的芯片上,在批量生產中往往需要通過JTAG燒寫一個小的引導程序或數據文件,大小從幾十KB到幾MB不等。
傳統的邊界掃描方式是依次將數據串行移位到芯片的掃描單元(BS)里,準備好各個數據線(data)、地址線(address)、片選線(cs)、讀寫使能線(wr)、輸出使能(oe)、編程使能(AW),接線如圖2所示。

圖2 FLASH連接圖
因為每次移位都需要遍歷芯片的所有BS,一次數據的準備需要額外的開銷,所以這種方式的編程十分低效,只能用來燒寫小塊的程序和數據。即便這樣,這種方式的耗時也不可小覷,以1 MB的數據和有100個引腳的芯片以及有32字節編程塊緩存的FLASH(即有N=32K字節塊,一次性可以編程32字節)為例。
為方便計算,忽略FLASH的命令字,僅僅計算有效字節編程時間。一個塊編程周期包含片選CS從高到低,然后寫有效信號WE從高到低,數據有效(可同時),WE從低到高,WE從高到低,數據有效(可同時),WE從低到高…… 最后CS從低到高。JTAG控制器就需要至少移位K=(2N+3) cycles(對應一個TCK時鐘周期),每次都需要移位Tshift=100次。假設JTAG控制器的TCK時鐘為Ttck=20 MHz,那么T cycle=50 ns??倳r間就是:
T=K×Tcycle×Tshift=327.695 s>5 min
實際上的引腳會更多,編程命令字的開銷也不少,JTAG工具每批次移位的間隔還有時間,需要更多的編程時間。
批量生產的自動化測試需要用到JTAG接口,而傳統的JTAG編程又比較低效費時,有沒有兩全其美的方法呢?答案是肯定的,就是可編程器件FPGA或CPLD(Complex Programmable Logic Device)的虛擬JTAG技術。Virtual JTAG 是ALTERA(已被Intel收購)公司提出的一個概念,XILINX公司和LATTICE公司也有相對應的提法,具體實現大同小異。
在可編程器件里面,JTAG TAP控制器可以作為一個硬核對用戶開放,用戶可以得到TAP狀態機的各種狀態,當然包括TDI、TCK、TDO,從而可以接管TDI的數據,自定義返回給TDO的數據。
觸發用戶自定義的JTAG后級控制器的原理用到了指令寄存器(instruction register)里面的用戶數據寄存器(user data register)。當輸入特定數據給用戶寄存器0和用戶寄存器1后,相應的狀態指示線發出高電平,JTAG后級控制器就可以知道后面的數據都是輸入給它的,就可以對這些數據進行自定義的操作、自定義虛擬指令寄存器(Virtual Instruction Register,VIR)和虛擬數據寄存器(Virtual Data Register, VDR), 從而完成了虛擬JTAG的實現,如圖3所示。

圖3 Virtual JTAG實現原理圖
基于Virtual JTAG技術,可以自定義后級JTAG TAP控制器,定義好虛擬數據寄存器(VDR)和虛擬指令寄存器(IR)。再移植一個Flash Memory Controller,由相應的虛擬IR指令得到擦除、讀取、編程等命令,相應的數據從VDR得到或保存于VDR。一般的FPGA有足夠的內部存儲空間RAM,所以上位機可以一次性把大容量數據通過虛擬JTAG傳給VDR,后級的Flash Controller就可以啟動相應的編程序列,從而節省了很多傳輸和邊界移位的開銷,極大地提高了FLASH的編程效率。圖4就是一種實現的功能框圖。

圖4 虛擬JTAG 快速FLASH編程實現框圖
TAP控制器里面對Virtual JTAG的內核進行了封裝,導出了三個總線,分別是對下級模塊輸出的虛擬IR、虛擬DR以及從下級模塊輸入的虛擬DR。下級的命令轉換模塊從輸入的VIR和VDR得到命令和數據,通過Wishbone總線轉換為FLASH控制器的命令和數據,以及得到返回的數據。FLASH控制器進行對FLASH的實際讀寫操作。
VIR定義為4比特位寬, 其定義如表1所列。
還是以1 MB的數據為例,VDR存儲深度為1 KB,如果VDR的存儲深度變得更大(一般FPGA里面有足夠多的內存),那么時間將更少,最后的瓶頸取決于FLASH自身的編程速度。

表1 VIR VDR對應關系表
T=K×Tcycle×Tshift=52.633 6 s<1 min

[1] Dr. Ben Bennetts.IEEE 1149.1 JTAG and Boundary Scan Tutorial[EB/OL].[2017-10]. https://www.asset-intertech.com/eresources/ieee-11491-jtag-and-boundary-scan-tutorial.
[2] ALTERA. Virtual JTAG (altera_virtual_jtag) IP Core User[EB/OL].[2017-10]. https://www.altera.com/en_US/pdfs/literature/ug/ug_virtualjtag.pdf.
丁峰平(硬件工程師), 主要研究方向為電信硬件電路、FPGA設計和實現;陳莉萍(項目經理),主要研究方向為電信工程項目組織計劃和實現。