周樂+孫大成
摘要:該文提供了一種基于嵌入式系統(tǒng)的JTAG驅(qū)動(dòng)電路的實(shí)現(xiàn)方法,包括主控制單元由一個(gè)嵌入式處理器模塊來完成,處理調(diào)試計(jì)算機(jī)從接口發(fā)送過來的數(shù)據(jù)包,該數(shù)據(jù)包通過處理器模塊解析成一組基本的操作序列,這組操作序列進(jìn)而進(jìn)入下一級(jí)驅(qū)動(dòng)器模塊,產(chǎn)生的JTAG數(shù)據(jù)碼流發(fā)送給目標(biāo)數(shù)字信號(hào)處理器;同時(shí)將目標(biāo)數(shù)字信號(hào)處理器返回的JTAG信號(hào)解碼,提交給處理器模塊返回上位機(jī)。
關(guān)鍵詞:JTAG驅(qū)動(dòng)電路;嵌入式處理器;驅(qū)動(dòng)器
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)25-0235-04
Abstract: In this paper, we present a method which implements jtag drive circuit based on imbedded system. The main control unit achieves function by a imbedded processor,which processes data packs coming from debugging computer. The data pack is translated a group of operator by processor, then the group of operator are sent to the next drive module, resulting in jtag code to target DSP. Simultaneously, corresponding jtag code come back from target DSP, and send to host by the imbedded processor.
Key words: JTAG drive circuit;imbedded system;drive module
1 引言
目前大多數(shù)的通用數(shù)字信號(hào)處理器都采用JTAG(Joint Test Action Group,聯(lián)合測(cè)試工作組)邊界掃描技術(shù)作為其調(diào)試手段,而在該處理器的外側(cè)需要一個(gè)驅(qū)動(dòng)模塊,用來作為調(diào)試計(jì)算機(jī)和目標(biāo)處理器的橋接。該橋接電路主要對(duì)從調(diào)試計(jì)算機(jī)發(fā)送來的數(shù)據(jù)進(jìn)行解析、格式轉(zhuǎn)換、數(shù)據(jù)同步、數(shù)據(jù)卸載等,同時(shí)還要完成編碼和解碼等功能。
而很多的JTAG驅(qū)動(dòng)電路主要通過單片機(jī)等CPU單純地通過軟件來控制,而JTAG驅(qū)動(dòng)電路中一些編解碼模塊以及狀態(tài)切換操作等模塊用專用硬件電路來實(shí)現(xiàn)效率更高;還有一些JTAG驅(qū)動(dòng)電路只通過FPGA的硬件邏輯來實(shí)現(xiàn),這樣放棄了軟件開發(fā)的靈活性。以上的這些設(shè)計(jì)對(duì)實(shí)現(xiàn)當(dāng)下功能越來越強(qiáng)大的JTAG調(diào)試是一種束縛。
本文涉及一種面向高性能通用數(shù)字信號(hào)處理器的基于嵌入式系統(tǒng)的JTAG驅(qū)動(dòng)電路的實(shí)現(xiàn)方法。是一種基于嵌入式技術(shù)開發(fā)的電路系統(tǒng)可以同時(shí)兼顧軟硬件的優(yōu)勢(shì),通過軟件開發(fā)可以豐富各種面向用戶的調(diào)試功能,結(jié)合相應(yīng)的硬件模塊可以使JTAG驅(qū)動(dòng)電路高速化、模塊化。
2 系統(tǒng)概述
本文所要解決的技術(shù)問題在于提供一種既能滿足IEEE1194.1標(biāo)準(zhǔn),又能夠通過軟硬件協(xié)同處理提高JTAG驅(qū)動(dòng)電路工作效率的基于嵌入式系統(tǒng)的JTAG驅(qū)動(dòng)電路的實(shí)現(xiàn)方法。
本文采用以下技術(shù)方案解決上述技術(shù)問題:一種基于嵌入式系統(tǒng)的JTAG驅(qū)動(dòng)電路的實(shí)現(xiàn)方法,包括以下步驟:主控制單元由一個(gè)嵌入式處理器模塊來完成,處理器模塊完成數(shù)據(jù)的接收、處理以及發(fā)出控制信息,處理器模塊是個(gè)可編程的CPU,處理調(diào)試計(jì)算機(jī)從接口發(fā)送過來的數(shù)據(jù)包,該數(shù)據(jù)包通過處理器模塊解析成一組基本的、目標(biāo)數(shù)字信號(hào)處理器能夠識(shí)別的操作序列,這組操作序列進(jìn)而進(jìn)入下一級(jí)驅(qū)動(dòng)器模塊,驅(qū)動(dòng)器模塊在處理器模塊的控制下,實(shí)現(xiàn)各種調(diào)試操作的JTAG數(shù)據(jù)碼流發(fā)送給目標(biāo)數(shù)字信號(hào)處理器;同時(shí)將目標(biāo)數(shù)字信號(hào)處理器返回的JTAG信號(hào)解碼,提交給處理器模塊,該驅(qū)動(dòng)器模塊同時(shí)完成了數(shù)據(jù)的串/并、并/串轉(zhuǎn)換。
3 層次化設(shè)計(jì)
圖2 是jtag驅(qū)動(dòng)電路的數(shù)據(jù)流/控制流原理圖。本設(shè)計(jì)是基于嵌入式系統(tǒng)的JTAG驅(qū)動(dòng)電路,包括處理器模塊(Processor)、地址譯碼器、鎖存模塊(Latch Block)、存儲(chǔ)器(TDI_data RAM、TDI_address RAM、TDO_data RAM)、驅(qū)動(dòng)器模塊。
3.1 控制器模塊
在該系統(tǒng)中,處理器模塊是作為控制器,在該模塊中,將內(nèi)核(cpu core)、通信接口(interface)、閃存(flash)、控制邏輯(control logic)、JTAG接口(jtag)、鎖相環(huán)(PLL)、計(jì)數(shù)器(timer)等掛載在本地總線(local bus)上形成一個(gè)典型的最小系統(tǒng)。內(nèi)核(cpu core)起到主控制作用,完成數(shù)據(jù)的接收、處理以及發(fā)出一些控制信息;通信接口(Interface)可以是網(wǎng)口、USB、串口等;閃存(flash)主要存放內(nèi)核(cpu core)的解析軟件;控制邏輯(control logic)主要完成數(shù)據(jù)的讀寫使能產(chǎn)生以及控制類參數(shù)的配置;鎖相環(huán)(PLL)主要由外接時(shí)鐘生成幾路系統(tǒng)需要的系統(tǒng)時(shí)鐘;計(jì)數(shù)器(timer)主要用于解析軟件中需要的計(jì)數(shù)功能。圖3是典型最小soc系統(tǒng)。
3.2 鎖存器和地址譯碼器
鎖存模塊(Latch Block)通過數(shù)據(jù)總線與處理器模塊互聯(lián),地址譯碼器通過地址總線與處理器模塊互聯(lián),并且與3塊RAM:TDI_data RAM、TDI_address RAM、TDO_data RAM互聯(lián)。
如圖2所示,處理器模塊主要是協(xié)議棧處理和控制信號(hào)的產(chǎn)生;地址譯碼器主要是對(duì)處理器模塊地址總線進(jìn)行譯碼,譯碼后的bit位再與上一級(jí)寫請(qǐng)求/讀請(qǐng)求(NWR/NRD),生成下一級(jí)模塊的使能信號(hào)。參考圖4的處理器模塊地址總線定義說明:總線上的低5位用于對(duì)兩塊TDI RAM(測(cè)試數(shù)據(jù)輸入隨機(jī)存儲(chǔ)器)的尋址:TDI_data RAM和TDI_address RAM;總線上的[7:5]用于3塊RAM的讀寫使能信號(hào)的產(chǎn)生:TDI_data RAM、TDI_address RAM、TDO_data RAM;總線上的第8位為JTAG電路的復(fù)位信號(hào);總線上的第9位為空;總線上的第10位為讀寫使能信號(hào)位,RW_flag_en有效時(shí),鎖存模塊(Latch Block)會(huì)通過數(shù)據(jù)總線將存放到TDI RAM中每一個(gè)數(shù)據(jù)的讀寫信號(hào)發(fā)送給驅(qū)動(dòng)器模塊,表示每個(gè)數(shù)據(jù)對(duì)是讀還是寫;總線上的第11位是數(shù)據(jù)對(duì)數(shù)使能信號(hào)位,TDI_num_enable有效時(shí),鎖存模塊(Latch Block)會(huì)通過數(shù)據(jù)總線將TDI RAM中有效的數(shù)據(jù)對(duì)數(shù)導(dǎo)入驅(qū)動(dòng)器模塊中;總線上的第12位是芯片信息導(dǎo)入使能位,當(dāng)Chip_info_load_en有效時(shí),鎖存模塊(Latch Block)會(huì)通過數(shù)據(jù)總線將目標(biāo)芯片的個(gè)數(shù)、選中的目標(biāo)芯片編號(hào)、鏈信息導(dǎo)入驅(qū)動(dòng)器模塊中。
3.3 JTAG驅(qū)動(dòng)器模塊
JTAG驅(qū)動(dòng)器模塊是一個(gè)純硬件邏輯,驅(qū)動(dòng)器模塊是專門為目標(biāo)數(shù)字信號(hào)處理器(Target DSP)的JTAG通信機(jī)制定制的codec硬件邏輯,它在處理器模塊最小系統(tǒng)的控制下,實(shí)現(xiàn)各種調(diào)試操作的JTAG數(shù)據(jù)流編碼(主要是TCK、TDI、TMS信號(hào)的產(chǎn)生),發(fā)送給目標(biāo)數(shù)字信號(hào)處理器;同時(shí)將目標(biāo)數(shù)字信號(hào)處理器返回的JTAG信號(hào)TDO解碼,提交給處理器模塊最小系統(tǒng)進(jìn)行相關(guān)處理。IEEE-1149.1協(xié)議規(guī)定了驅(qū)動(dòng)器模塊的5個(gè)串行的JTAG信號(hào)。4個(gè)輸入信號(hào)(相對(duì)于目標(biāo)數(shù)字信號(hào)處理器):時(shí)鐘信號(hào)(TCK)、數(shù)據(jù)信號(hào)(TDI)、控制信號(hào)(TMS)、復(fù)位信號(hào)(TRST_n),1個(gè)輸出信號(hào):數(shù)據(jù)返回信號(hào)(TDO)。除了復(fù)位信號(hào)外的3個(gè)輸入信號(hào)必須滿足一定的關(guān)系才能實(shí)現(xiàn)對(duì)目標(biāo)數(shù)字信號(hào)處理器的各種操作,此外,返回信號(hào)和TMS之間也有對(duì)應(yīng)關(guān)系。為了提高JTAG驅(qū)動(dòng)電路的工作效率,專門用硬件邏輯來實(shí)現(xiàn)對(duì)3個(gè)輸入信號(hào)的編碼和1個(gè)輸出信號(hào)的解碼。根據(jù)在線調(diào)試邏輯的具體特點(diǎn),掃描鏈的切換操作會(huì)頻繁使用,而且操作由固定的基本操作序列構(gòu)成,因此將掃描鏈的切換操作固化在驅(qū)動(dòng)器模塊中,由硬件高速執(zhí)行,軟件只需要提供相應(yīng)的參數(shù),大大簡(jiǎn)化了軟件的負(fù)擔(dān)。
驅(qū)動(dòng)器模塊由以下三部分組成:系統(tǒng)控制單元(System Control)、掃描鏈選擇單元(JTAG_chain_sel)、掃描鏈通道單元(JTAG_Channel),系統(tǒng)控制單元與處理器模塊發(fā)出的控制信號(hào)互聯(lián),包括時(shí)鐘模塊的選擇、復(fù)位信號(hào)的輸入等;掃描鏈選擇單元與鎖存模塊(Latch Block)、處理器模塊發(fā)出的控制信號(hào)互聯(lián),發(fā)出包括目標(biāo)芯片的個(gè)數(shù)、選中的目標(biāo)芯片編號(hào)、鏈編號(hào)信息、鏈選擇使能、使能信號(hào)的關(guān)閉,而中斷返回由處理器模塊來響應(yīng);掃描鏈通道單元與RAM模塊、鎖存模塊(Latch Block)、處理器模塊發(fā)出的控制信號(hào)互聯(lián),完成數(shù)據(jù)流的通路、標(biāo)示讀寫信號(hào)、一次性寫入相應(yīng)存儲(chǔ)器的數(shù)據(jù)個(gè)數(shù)、通路的使能、通路的關(guān)閉,而中斷返回由處理器模塊來響應(yīng)。參見表1驅(qū)動(dòng)器模塊源目的信號(hào)說明。
4 jtag驅(qū)動(dòng)電路的軟硬件協(xié)同工作
該驅(qū)動(dòng)電路是實(shí)現(xiàn)的硬件基礎(chǔ),還需要嵌入式軟件配合一起實(shí)現(xiàn)完整的功能,其工作原理如圖5。
其軟硬件工作流程為:
調(diào)試計(jì)算機(jī)通知通信層(Communication Layer)用戶所選擇的命令;通信層對(duì)該操作做出響應(yīng),注:通信層是IDE環(huán)境中的一個(gè)軟件模塊。根據(jù)調(diào)試操作類型(Reset、Run、StepCycle、StepInst等)做出響應(yīng),生成并行數(shù)據(jù)流,按照通信協(xié)議打包發(fā)送給驅(qū)動(dòng)器模塊;
調(diào)試計(jì)算機(jī)通過通信接口發(fā)送過來的一個(gè)通信包(高級(jí)調(diào)試命令)被JTAG驅(qū)動(dòng)電路的cpu core解析成一組基本的、目標(biāo)數(shù)據(jù)處理器可以識(shí)別的操作序列,這組操作序列進(jìn)而進(jìn)入驅(qū)動(dòng)器模塊,驅(qū)動(dòng)器模塊對(duì)數(shù)據(jù)進(jìn)行編碼并在TCK的驅(qū)動(dòng)下向目標(biāo)數(shù)據(jù)處理器芯片的在線調(diào)試邏輯發(fā)送TMS、TDI、TCK;
在TCK的驅(qū)動(dòng)下,目標(biāo)數(shù)據(jù)處理器完成一次指定的操作,并將TDO數(shù)據(jù)反饋給JTAG驅(qū)動(dòng)電路;
JTAG驅(qū)動(dòng)電路根據(jù)JTAG協(xié)議將TDO數(shù)據(jù)進(jìn)行解碼,并對(duì)返回的TDO信息進(jìn)行分析,確定下一步所要進(jìn)行的操作,如果有必要,則重復(fù)執(zhí)行上述的步驟;解析軟件在某些操作序列中會(huì)進(jìn)行輪詢以等待目標(biāo)DSP返回指定的信息,否則不會(huì)執(zhí)行下一步。
當(dāng)用戶命令的所有分解步驟都執(zhí)行完畢之后,JTAG驅(qū)動(dòng)電路會(huì)通過cpu core將所有的TDO返回信息打包發(fā)送給通信層;通信層接收到TDO應(yīng)答包,并向IDE發(fā)送結(jié)束通知;IDE接到來自通信層的結(jié)束通知后,讀取應(yīng)答包中的信息,并根據(jù)應(yīng)答包的內(nèi)容做出進(jìn)一步的分析、處理與判斷;
5 結(jié)論
基于嵌入式系統(tǒng)搭建的JTAG驅(qū)動(dòng)電路具有較好的系統(tǒng)穩(wěn)定性和可靠性,該驅(qū)動(dòng)電路經(jīng)測(cè)試,實(shí)際工作速度穩(wěn)定在50 KB/s左右,具有單步、運(yùn)行、設(shè)置斷點(diǎn)、觀察點(diǎn)、讀寫寄存器、存儲(chǔ)器、DDR2等功能,獲得了用戶的一致好評(píng)。
參考文獻(xiàn):
[1] Institute of Electrical and Electronics Engineers.IEEE 1149.1-2001IEEE Standard Test Access Port and Boundary-Scan Architecture[S].2001.
[2] 田澤.嵌入式系統(tǒng)開發(fā)與應(yīng)用實(shí)驗(yàn)教程[M].北京:北京航空航天大學(xué)出版社,2004.