姚霽
摘? 要: 為了給芯片設(shè)計提供一種高效方便的調(diào)試方法,提出一種基于JTAG的片內(nèi)調(diào)試系統(tǒng)。該系統(tǒng)包括調(diào)試系統(tǒng)控制模塊、斷點產(chǎn)生模塊和JTAG接口。JTAG接口實現(xiàn)調(diào)試指令的發(fā)送與接收;斷點產(chǎn)生模塊是調(diào)試系統(tǒng)硬件調(diào)試的邏輯單元;調(diào)試系統(tǒng)控制模塊則實現(xiàn)斷點設(shè)置、單步運行、內(nèi)存調(diào)試等功能。不同的調(diào)試指令可根據(jù)不同的硬件結(jié)構(gòu)自動完成其各自的處理流程,而且不同的工作模式之間可以自由切換。該片內(nèi)調(diào)試系統(tǒng)表現(xiàn)出了高性能,便于操作的特點,已經(jīng)通過了實際的芯片測試。
關(guān)鍵詞: 片內(nèi)調(diào)試系統(tǒng); 系統(tǒng)設(shè)計; JTAG; 調(diào)試指令; 調(diào)試流程; 模式切換
中圖分類號: TN911?34? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文獻標識碼: A? ? ? ? ? ? ? ? ? ? ? 文章編號: 1004?373X(2020)20?0031?03
Design of on?chip debugging system based on JTAG
YAO Ji
(Xian University of Posts and Telecommunications, Xian 710121, China)
Abstract: An on?chip debugging system based on JTAG is proposed to provide an efficient and convenient debugging method for the chip design. The system is mainly composed of the debugging mode control module, breakpoint generation module and JTAG interface. The JTAG interface is used to realize the sending and receiving of debugging commands, the breakpoint generation module is the logic unit for hardware debugging of the system, and the debugging system control module is used to realize the breakpoint setting, single step running, memory debugging and other functions. The different debugging commands can automatically complete their own processing flow according to different hardware structures, and different working modes can be freely switched. The on?chip debugging system shows its characteristics of high performance and easy operation, and has passed the actual chip testing.
Keywords: on?chip debugging system; system design; JTAG; debugging command; debugging process; mode switching
0? 引? 言
隨著半導體電子技術(shù)的飛速發(fā)展,集成電路芯片的功能越來越復雜,集成度越來越高。在面對復雜SOC芯片設(shè)計時,芯片的調(diào)試手段不僅關(guān)系到芯片的質(zhì)量,還直接影響到研發(fā)的效率和進度。因此在芯片仿真之外,提供高效、強大、方便、可靠的測試手段,已經(jīng)成為芯片研發(fā)成敗的關(guān)鍵。本文在基于8051控制器的芯片硬件設(shè)計基礎(chǔ)上,提出并實現(xiàn)了一種基于JTAG接口的嵌入式片內(nèi)調(diào)試系統(tǒng)(On?chip Debug System)[1]。該系統(tǒng)復用系統(tǒng)中8051控制器的JTAG接口和外部管腳不僅能避開CPU的訪問,不占用CPU資源,同時提供了多種調(diào)試手段,能對控制器及存儲器的內(nèi)部狀態(tài)進行監(jiān)測,從而實現(xiàn)芯片的實時調(diào)試[2]。
1? 基于JTAG的嵌入式片內(nèi)調(diào)試系統(tǒng)
1.1? 嵌入式片內(nèi)調(diào)試系統(tǒng)結(jié)構(gòu)
文中提出的嵌入式片內(nèi)調(diào)試系統(tǒng)主要應用于面向基于8051微控制器的多IP模塊集成的SoC芯片,主要包括JTAG接口和調(diào)試系統(tǒng)控制模塊及斷點產(chǎn)生模塊三個部分。用戶可以通過該調(diào)試復用系統(tǒng)的JTAG接口,完成調(diào)試指令的接收、發(fā)送、調(diào)試標志位的設(shè)置等交互信息的通信。而斷點產(chǎn)生模塊是屬于調(diào)試系統(tǒng)的硬件邏輯部分,負責設(shè)置識別外部中斷、硬件斷點、軟件斷點等。調(diào)試控制模塊則管理調(diào)試模式的進出、返回,識別指令信息并控制調(diào)試指令執(zhí)行,處理硬件測試平臺信息,從而實現(xiàn)對整個芯片的調(diào)試和監(jiān)控。嵌入式片內(nèi)調(diào)試系統(tǒng)的系統(tǒng)結(jié)構(gòu)[3]如圖1所示。
1.2? 嵌入式片內(nèi)調(diào)試系統(tǒng)工作原理
嵌入式片內(nèi)調(diào)試系統(tǒng)是集成在微控制器芯片內(nèi)部的專用調(diào)試模塊,用戶設(shè)置相應的調(diào)試寄存器來決定響應調(diào)試中斷的優(yōu)先級,并決定處理器是否直接進入調(diào)試狀態(tài)。當滿足調(diào)試條件進入調(diào)試狀態(tài)后,用戶進入調(diào)試系統(tǒng),內(nèi)嵌調(diào)試單元負責接收中斷,并進行調(diào)試中斷處理,然后通過JTAG接口向外部調(diào)試器發(fā)出信號,通知主機調(diào)試器,調(diào)試器通過內(nèi)嵌的調(diào)試模塊執(zhí)行接收到的調(diào)試指令,監(jiān)控芯片的運行、寄存器的狀態(tài)以及實現(xiàn)存儲器內(nèi)容的直接讀/寫[4]。調(diào)試過程不但可以實現(xiàn)對處理器內(nèi)核的監(jiān)控、片內(nèi)調(diào)試系統(tǒng)與各外圍功能模塊的數(shù)據(jù)交換,從而實現(xiàn)微控制器的實時調(diào)試,而且還可以方便地進行片內(nèi)調(diào)試模式和正常模式的切換。
2? 基于JTAG的嵌入式片上調(diào)試系統(tǒng)內(nèi)核設(shè)計
片上調(diào)試系統(tǒng)內(nèi)核是整個調(diào)試系統(tǒng)的核心部件,它通過總線與不同的功能接口與微控制器及外設(shè)通信。在結(jié)構(gòu)和功能上包括JTAG接口單元、斷點產(chǎn)生模塊及調(diào)試控制單元三部分[5]。
2.1? JTAG接口
集成在芯片內(nèi)的JTAG接口是外部調(diào)試器與內(nèi)部調(diào)試系統(tǒng)之間的主要通信接口,根據(jù)嵌入式片內(nèi)調(diào)試系統(tǒng)的需求,本文設(shè)計了增強的JTAG接口模塊[6]。它采用標準的JTAG通信協(xié)議及端口,但在結(jié)構(gòu)上增加了控制寄存器及控制單元進行數(shù)據(jù)傳送控制,其結(jié)構(gòu)原理如圖2所示。用戶可以設(shè)置控制寄存器的JEN位,進行JTAG工作模式的選擇。在數(shù)據(jù)捕獲之前,將來自片上調(diào)試系統(tǒng)的5個控制位(DBCON,DMODE,RRF,TRF, COMRST)分別寫入寄存器16位DMSHR。該流程用來控制片上調(diào)試系統(tǒng)狀態(tài)。數(shù)據(jù)傳輸寄存器DMTR同樣也寫入DMSHR準備傳輸數(shù)據(jù),當數(shù)據(jù)傳送信號激活后,JTAG模塊的輸入就會在時鐘信號tck_i的上升沿被傳送到寄存器DMSHR里面。從寄存器DMSHR出來的輸出數(shù)據(jù)也會通過tdo_o輸出到JTAG模塊,并通過JTAG模塊進行指令和數(shù)據(jù)處理。
在一個數(shù)據(jù)移入后,jm_update信號被激活,DMSHR中移入的數(shù)據(jù)信息被存儲到各自的片上調(diào)試系統(tǒng)寄存器里面,同時DMSHR的數(shù)據(jù)也通過JTAG 接口送入到片上調(diào)試系統(tǒng)里進行處理。
2.2? 斷點產(chǎn)生模塊
斷點產(chǎn)生模塊是片上調(diào)試系統(tǒng)硬件調(diào)試的邏輯單元。通過調(diào)試控制模塊進入該模式后,基于芯片的內(nèi)部存儲器結(jié)構(gòu),片上調(diào)試系統(tǒng)利用斷點產(chǎn)生模塊產(chǎn)生硬件斷點:指令斷點和內(nèi)存斷點。在芯片的實際調(diào)試中,用戶需要根據(jù)實際情況進行相應的斷點設(shè)置操作。指令斷點作用于系統(tǒng)處理器核的取指令階段,物理上由多組比較寄存器組成。它是通過存儲空間地址的設(shè)定來確定斷點地址。芯片程序在取指令時,片內(nèi)調(diào)試系統(tǒng)讀入程序地址總線的指令地址,并與預設(shè)的程序斷點地址進行比較,并判斷預設(shè)的斷點地址是否與程序總線傳送的地址匹配,如果匹配則進入片內(nèi)調(diào)試模式,反之,則程序繼續(xù)運行。當用戶在內(nèi)存空間進行斷點設(shè)置時,處理過程和指令斷點類似,處理器核通過內(nèi)部8位內(nèi)存總線接口進行內(nèi)存斷點的讀寫,并在片內(nèi)調(diào)試系統(tǒng)內(nèi)部完成斷點設(shè)置比較,如果匹配則觸發(fā)片內(nèi)調(diào)試系統(tǒng),反之,處理器正常執(zhí)行。用戶在設(shè)置斷點時,也可以通過外部調(diào)試軟件進行斷點設(shè)置,其原理與設(shè)置程序存儲器斷點原理相同,只是存儲空間和內(nèi)部總線接口不同。
2.3? 調(diào)試系統(tǒng)控制模塊
調(diào)試器的控制模塊是調(diào)試系統(tǒng)的核心部件。片內(nèi)調(diào)試系統(tǒng)的各個硬件操作,如調(diào)試模式進入、單步執(zhí)行、存儲器訪問、斷點設(shè)置等,都是由片內(nèi)調(diào)試硬件模塊的控制模塊操作的。同時,調(diào)試系統(tǒng)的內(nèi)核與處理器核及存儲器的通信也都是由控制模塊來實現(xiàn)的[7]。
2.3.1? 調(diào)試模式的進出
當片內(nèi)調(diào)試模式的觸發(fā)事件發(fā)生時,調(diào)試系統(tǒng)向處理器發(fā)出中斷請求int_req,然后處理器響應該請求,并反饋中斷識別信號int_ack,標志著調(diào)試模式的進入,并進行壓棧處理。當退出調(diào)試模式時,片內(nèi)調(diào)試控制器置低中斷請求信號,處理器響應該信號,執(zhí)行出棧操作。片上調(diào)試系統(tǒng)還可以支持外部中斷的產(chǎn)生。當外部管腳EXT上產(chǎn)生一個下降沿觸發(fā),由控制單元發(fā)送debug_ack信號到處理器后,芯片進入片上調(diào)試模式。
2.3.2? 單步執(zhí)行
單步執(zhí)行是指控制單元通過握手信號向處理器申請單步調(diào)試,進行單步執(zhí)行時,處理器每次執(zhí)行當前指令后即進入片內(nèi)調(diào)試模式。如果單步執(zhí)行,片內(nèi)調(diào)試模式控制寄存器將會設(shè)置控制寄存器DMTR,控制和標志單步的執(zhí)行。單步執(zhí)行的過程為每次單步執(zhí)行完成2個SCLK以后,DebugReq被reset, 同時片上調(diào)試系統(tǒng)硬件系統(tǒng)再一次激活信號DebugReq。
2.3.3? 片內(nèi)訪問控制
程序存儲器以及內(nèi)存訪問控制都是控制單元通過地址讀寫總線prog_a和程序數(shù)據(jù)總線prog_d來對程序存儲器進行數(shù)據(jù)讀寫以及對芯片的在線編程[8]。
3? 片內(nèi)調(diào)試系統(tǒng)的調(diào)試流程
SoC系統(tǒng)中的微控制器可根據(jù)上電時特定的管腳配置,選擇片內(nèi)調(diào)試模式配置。當調(diào)試事件發(fā)生后,芯片啟動調(diào)試系統(tǒng),進入調(diào)試模式,處理器掛起,交出控制權(quán)。調(diào)試控制器發(fā)送調(diào)試指令,根據(jù)不同的指令進行不同的調(diào)試流程。調(diào)試完成后,處理器重新獲得控制權(quán),進入正常工作模式[9]。具體調(diào)試流程如圖3所示。
4? 結(jié)? 論
隨著SoC芯片開發(fā)復雜度的提高,傳統(tǒng)的板級調(diào)試手段已不能滿足芯片研發(fā)的調(diào)試需求,因此片內(nèi)調(diào)試技術(shù)對SoC芯片的研發(fā)質(zhì)量和周期至關(guān)重要。本文提出一種基于JTAG協(xié)議的片內(nèi)調(diào)試系統(tǒng)的設(shè)計方案,可以實現(xiàn)斷點設(shè)置、單步執(zhí)行、寄存器/存儲器內(nèi)容讀寫以及在線編程、處理器核的現(xiàn)場配置等調(diào)試功能。本設(shè)計方案在實際的微控制器項目中成功地完成了芯片開發(fā)和調(diào)試,表現(xiàn)出了優(yōu)異的性能。它利用通用的JTAG接口使得調(diào)試過程快速靈活,用戶調(diào)試簡單、方便。獨特的內(nèi)嵌式調(diào)試機制保證了高監(jiān)控性,可以及時準確地查詢設(shè)置芯片內(nèi)部寄存器的狀態(tài),而且在調(diào)試時不占用芯片CPU資源,調(diào)試時間少,效率高[10]。
隨著半導體技術(shù)的飛速發(fā)展,處理器提供片內(nèi)的調(diào)試電路為復雜SoC芯片設(shè)計以及嵌入式系統(tǒng)開發(fā)提供的調(diào)試手段早已是大勢所趨。本文提出的基于JTAG協(xié)議的片內(nèi)調(diào)試系統(tǒng)方案為處理器芯片調(diào)試功能的研發(fā)提供了一個新的調(diào)試平臺,為其應用開發(fā)提供了強有力的技術(shù)支持。
參考文獻
[1] 虞致國,魏敬和.一種SoC片上調(diào)試與可測性的整合設(shè)計[J].電子與封裝,2010,10(2):20?22.
[2] 何勇,王騰,王新安,等.一種低代價零開銷SoC在線調(diào)試系統(tǒng)設(shè)計[J].微電子學與計算機,2014,31(3):89?93.
[3] 虞致國,魏敬和.一種基于JTAG的SoC片上調(diào)試系統(tǒng)的設(shè)計[J].微電子學與計算機,2009,26(5):5?8.
[4] 高瑛珂,王琪,李泉泉,等.一種基于JTAG接口的片上調(diào)試與性能分析方法[J].微電子學與計算機,2012,29(7):68?71.
[5] 常志恒,肖鐵軍,史順波.基于JTAG的片上調(diào)試器與調(diào)試系統(tǒng)的設(shè)計實現(xiàn)[J].計算機工程與應用,2012,48(30):78?82.
[6] 張立強,宋玲,劉寶娟.JTAG并口下載設(shè)計[J].微處理機,2013,34(1):13?15.
[7] 榮蓉.基于SoC嵌入式片上系統(tǒng)應用研究[J].煤炭技術(shù),2012,31(6):218?219.
[8] 婁冕,趙翠華,張洵穎,等.一種片內(nèi)硬件調(diào)試支持單元設(shè)計[J].現(xiàn)代電子技術(shù),2010,33(24):18?22.
[9] 王琪,高瑛珂,華斯亮,等.可復用微處理器片上調(diào)試功能的設(shè)計與實現(xiàn)[J].計算機輔助設(shè)計與圖形學學報,2012,24(10):1369?1374.
[10] 陳芳芳,周克寧.面向電子控制器的片上可調(diào)試性結(jié)構(gòu)設(shè)計[J].電子器件,2018,41(3):708?712.