當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]基于龍芯一號(hào)IP核的EJTAG調(diào)試

引 言
   
目前,隨著嵌入式系統(tǒng)在各個(gè)領(lǐng)域中的廣泛應(yīng)用,人們對(duì)嵌入式開(kāi)發(fā)工具的需求也變得非常迫切。嵌入式系統(tǒng)的開(kāi)發(fā)需要特殊的開(kāi)發(fā)環(huán)境,一般包括交叉編譯器、交叉調(diào)試器等。交叉調(diào)試器有兩種實(shí)現(xiàn)方式:一種是片上調(diào)試,另一種是在目標(biāo)機(jī)端運(yùn)行監(jiān)控程序來(lái)完成調(diào)試。前者是處理器的硬件調(diào)試模塊支持的,如MIPS架構(gòu)的EJTAG,國(guó)芯CPU的OnCE等,由于接近硬件底層,可以在裸機(jī)狀態(tài)下提供調(diào)試手段,不僅可以調(diào)試監(jiān)控程序、系統(tǒng)軟件,也可以利用邊界掃描單元來(lái)測(cè)試硬件電路及故障定位;而后者一般是在處理器正常工作后,才可以使用的一種調(diào)試手段。
    EJTAG(Enhanced Joint Test Action Group)是MIPS公司根據(jù)IEEE 1149.1協(xié)議的基本構(gòu)造和功能擴(kuò)展而制定的規(guī)范,是一個(gè)硬件/軟件子系統(tǒng),在處理器內(nèi)部實(shí)現(xiàn)了一套基于硬件的調(diào)試特性,用于支持片上調(diào)試。
    龍芯一號(hào)處理器IP核是在龍芯一號(hào)處理器基礎(chǔ)上,對(duì)功耗、面積和性能等各方面進(jìn)行改進(jìn)而得到的高度靈活、適用于更廣泛領(lǐng)域的處理器內(nèi)核。它采用RISC架構(gòu),可運(yùn)行MIPS III指令集,支持EJTAG調(diào)試功能,采用可配置架構(gòu),可在滿足用戶性能要求的前提下,實(shí)現(xiàn)最低成本的產(chǎn)品集成。


1 EJTAG工作機(jī)制及實(shí)現(xiàn)
1.1 EJTAG組成
   
所有MIPS的微處理器或是包含MIPS核的SoC芯片組件均提供對(duì)EJTAG調(diào)試的支持。EJTAG接口利用JTAG的TAP(Test Access Port)訪問(wèn)方式,將測(cè)試數(shù)據(jù)傳入或者傳出處理器核。EJTAG可實(shí)現(xiàn)的功能包括:訪問(wèn)處理器的寄存器、訪問(wèn)系統(tǒng)內(nèi)存空間、設(shè)置軟件/硬件斷點(diǎn)、單步/多步執(zhí)行等。如圖1所示,EJTAG調(diào)試功能模塊由4部分組成:CPU核內(nèi)部的組件擴(kuò)展,硬件斷點(diǎn)單
元,調(diào)試控制寄存器(DCR)以及TAP接口。

1.2 EJTAG工作機(jī)制
   
處理器在某個(gè)調(diào)試?yán)?debug exception,如單步運(yùn)行、斷點(diǎn)等)產(chǎn)生以后,進(jìn)入到調(diào)試模式(debug mode),直到DERET指令執(zhí)行以后從調(diào)試模式退出來(lái)。在這段時(shí)間里,處理器執(zhí)行調(diào)試?yán)馓幚磉^(guò)程。在調(diào)試?yán)馓幚磉^(guò)程中,調(diào)試軟件通過(guò)對(duì)TAP處理器的訪問(wèn)操作,實(shí)現(xiàn)了對(duì)普通寄存器的訪問(wèn)、協(xié)處理器的訪問(wèn)、系統(tǒng)內(nèi)存空間的訪問(wèn)等功能。系統(tǒng)退出調(diào)試模式以后允許應(yīng)用程序或是系統(tǒng)代碼繼續(xù)執(zhí)行,直到遇到下一個(gè)調(diào)試?yán)?。重?fù)以上過(guò)程,EJTAG實(shí)現(xiàn)了單步運(yùn)行或者多步運(yùn)行等調(diào)試功能。
1.2.1 調(diào)試?yán)?BR>    在體系結(jié)構(gòu)的設(shè)計(jì)上,EJTAG并不需要與CPU緊密結(jié)合,但CPU必須提供調(diào)試寄存器、進(jìn)入調(diào)試模式和在調(diào)試模式下執(zhí)行指令的能力,更重要的是調(diào)試?yán)獾膬?yōu)先級(jí)必須高于其他處理器的例外(exception)。EJTAG調(diào)試是通過(guò)處理器的調(diào)試?yán)鈦?lái)實(shí)現(xiàn)的,調(diào)試?yán)鈱PU從非調(diào)試模式(non-debug mode)轉(zhuǎn)到調(diào)試模式。在調(diào)試模式下也可以再發(fā)生調(diào)試?yán)?,這種例外就叫做“調(diào)試模式例外(debuIg mode exception)”。
    MIPS 4KC處理器提供的調(diào)試?yán)馊绫?所列。

    當(dāng)CPU執(zhí)行了軟件斷點(diǎn)指令(SDBBP),或者發(fā)生了單步調(diào)試,或者在EJTAG回路中產(chǎn)生了JtagBrk調(diào)試事件,或者發(fā)生了硬件斷點(diǎn)時(shí),CPU就會(huì)產(chǎn)生調(diào)試?yán)?。SDBBP是一個(gè)標(biāo)準(zhǔn)的MIPS指令集指令,軟件斷點(diǎn)的設(shè)置就是調(diào)試軟件通過(guò)把正常的應(yīng)用程序代碼替換成軟件斷點(diǎn)指令來(lái)實(shí)現(xiàn)的。EJTAG支持指令斷點(diǎn)和數(shù)據(jù)斷點(diǎn)兩種類型的硬件斷點(diǎn),指令斷點(diǎn)發(fā)生在處理器取指過(guò)程中,數(shù)據(jù)斷點(diǎn)發(fā)生加載/存儲(chǔ)傳輸過(guò)程中,它們可以設(shè)置在任何地址空間中,包括不能被改寫(xiě)的ROM空間。調(diào)試?yán)獍l(fā)生后,CPU首先屏蔽地址錯(cuò)誤異常和中斷異常,然后轉(zhuǎn)向調(diào)試?yán)馓幚沓绦虻膱?zhí)行。調(diào)試?yán)馓幚沓绦蚴怯烧{(diào)試軟件通過(guò)與TAP處理器的配合,利用EJTAG接口實(shí)現(xiàn)的。在調(diào)試模式下,CPU仍能夠正常地訪問(wèn)協(xié)處理器和系統(tǒng)內(nèi)存空間等處理器資源。
    調(diào)試寄存器包括DEBUG寄存器、DEPC寄存器和DESAVE寄存器,都被定義在協(xié)處理器中。DEBUG寄存器保存了CPU進(jìn)入調(diào)試模式的原因,以及同時(shí)是否發(fā)生了其他CPU例外的標(biāo)志位,也被用來(lái)控制單步運(yùn)行的設(shè)置。DEPC(Debug Exception Program Counter)寄存器保存了發(fā)生調(diào)試?yán)鈺r(shí)將要執(zhí)行的那條指令的地址,當(dāng)退出調(diào)試模式后,該地址恢復(fù)到PC寄存器中。DESAVE (Debug Exception Save)寄存器是一個(gè)草稿寄存器,被調(diào)試軟件用在對(duì)普通寄存器的處理過(guò)程中,該寄存器的內(nèi)容不需要保存。
1.2.2 調(diào)試?yán)馓幚磉^(guò)程
   
所有的調(diào)試?yán)舛加邢嗤幕玖鞒蹋?BR>    ①DEPC保存了中斷返回后重新開(kāi)始執(zhí)行的指令PC值,設(shè)置DEBUG寄存器中的DBD位(表示DEBUG中斷是否發(fā)生在分支延遲槽中)。如果不在延遲槽中,DEPC保存的就是當(dāng)前的PC值;如果在延遲槽中,DEPC保存的就是那條跳轉(zhuǎn)指令的PC值。
    ②根據(jù)調(diào)試?yán)飧翫ebug寄存器中的內(nèi)容DSS,DBp,DDBL,DDBS,DIB,DINT位)。
    ③DEBUG寄存器中的DExcCode域變?yōu)榉嵌x的。
    ④DEBUG寄存器中的Halt和Doze位更新。
    ⑤在調(diào)試處理開(kāi)始時(shí)設(shè)置IEXI位來(lái)確定是否精確中斷。
    ⑥D(zhuǎn)EBUG寄存器中的DM位設(shè)置為1。
    ⑦處理器開(kāi)始從調(diào)試?yán)庀蛄咳≈噶钸M(jìn)行例外處理。
    處理過(guò)程用程序描述如下:


2 龍芯一號(hào)處理器IP核簡(jiǎn)介
   
龍芯一號(hào)處理器IP核是北京神州龍芯集成電路設(shè)計(jì)有限公司與中國(guó)科學(xué)院計(jì)算技術(shù)研究所共同研制的,兼顧通用及嵌入式CPU特點(diǎn)的32位處理器內(nèi)核。龍芯一號(hào)處理器IP核具有可配置特性,用戶可以根據(jù)自己的需求進(jìn)行選擇配置,從而定制出最適合用戶應(yīng)用的處理器結(jié)構(gòu)。圖2顯示了龍芯一號(hào)IP核的可配置結(jié)構(gòu),其中虛線部分表示用戶可根據(jù)自己的需求進(jìn)行選擇配置,從而定制出最適合用戶應(yīng)用的處理器結(jié)構(gòu)。

    GS32S是龍芯一號(hào)處理器系列中的一款,采用RISC架構(gòu),可運(yùn)行MIPS III指令集,有7級(jí)流水線,具有32位整數(shù)單元,典型工作頻率為200~266 MHz,典型功耗為0.5W。GS32S不含浮點(diǎn)部件(FPU)、媒體部件(MMX),以及哈佛結(jié)構(gòu)SRAM接口。固定內(nèi)核、EJTAG、TLB、Cache、AMBA接口和協(xié)處理器接口為固定配置。圖2中的陰影部分為GS32S處理器的配置模塊。


3 GS32S處理器EJTAG調(diào)試的實(shí)現(xiàn)
3.1 TAP處理器的訪問(wèn)
   
GS32S CPU從EJTAG Probe取指執(zhí)行,或向EJTAGProbe訪問(wèn)數(shù)據(jù)(Load/Store),實(shí)現(xiàn)處理器進(jìn)入調(diào)試模式后的調(diào)試?yán)鈭?zhí)行,整個(gè)處理過(guò)程需要調(diào)試軟件通過(guò)Probe監(jiān)測(cè)進(jìn)行。在這種情況下,EJTAG的TAP就相當(dāng)于一個(gè)從設(shè)備,TAP模塊接收處理器內(nèi)部對(duì)dmseg段進(jìn)行的取指、Load/Store操作等發(fā)出的訪問(wèn),等待外部響應(yīng)。
    GS32 CPU處于調(diào)試模式時(shí),如果ProbEn有效,則對(duì)0xFF200000~0xFF2FFFFF的訪問(wèn)轉(zhuǎn)向dmseg段;如果ProbTrap有效,則發(fā)生調(diào)試?yán)獾奶幚砥鬓D(zhuǎn)向0xFF200200取指。TAP處理器訪問(wèn)流程如圖3所示。
    發(fā)生調(diào)試?yán)鈺r(shí),如果DCR中的ProbTrap位是1,則GS32S CPU跳轉(zhuǎn)到0xFF20 0200取指執(zhí)行的過(guò)程如下:
    ①處理器把PC值(如0xFF200200)送到TAP模塊中的Address寄存器中。
    ②處理器寫(xiě)TAP模塊中的ECR寄存器,設(shè)置PrAcc=1,PRnW=0,Psz[1:0]=2。
    ③處理器不停地測(cè)試PrAcc位,為1處于等待狀態(tài)。
    ④EJTAGProbe選擇ECR寄存器,串行移出其內(nèi)容,看PrAcc 位是否為1。為1表示處理器等待通過(guò)TAP輸入要執(zhí)行的指令,同時(shí)也表示地址寄存器的值是有效的。
    ⑤EJTAG Probe判斷ECR寄存器的PRnW位,0表示讀。
    ⑥EJTAGProbe選擇地址寄存器,并移出其內(nèi)容。
    ⑦EJTAG Probe選擇數(shù)據(jù)寄存器,把對(duì)應(yīng)于上一步地址的指令移入數(shù)據(jù)寄存器里。
    ⑧EJTAG Probe選擇ECR寄存器,把PrAcc位置0,其他位保持不變,表示開(kāi)始由處理器來(lái)執(zhí)行數(shù)據(jù)寄存器中的指令。
    ⑨處理器測(cè)試PrAcc值為0,把數(shù)據(jù)寄存器中的指令取走執(zhí)行。
    ⑩處理器把PC值加4,發(fā)出讀下一條指令的命令,因?yàn)榈刂啡匀辉赿mseg區(qū)域中,所以重復(fù)上面的過(guò)程,讀入下一條指令。
    由于流水線的存在,發(fā)生在dmseg內(nèi)的Load/Store操作分2步進(jìn)行。第1步,取指譯指;第2步,將指定地址的數(shù)據(jù)裝入寄存器/將寄存器的數(shù)據(jù)裝入指定地址。在指令執(zhí)行過(guò)程中這2步之間會(huì)有間隙,為了獲得正確的執(zhí)行結(jié)果,需要檢測(cè)Address寄存器里的內(nèi)容是否為操作數(shù)地址。若不是則插入nop指令,繼續(xù)檢測(cè)Address寄存器里的內(nèi)容。
3.2 與標(biāo)準(zhǔn)的EJTAG的差異性及應(yīng)對(duì)措施
   
在實(shí)現(xiàn)GS32S EJTAG調(diào)試功能的過(guò)程中,發(fā)現(xiàn)GS32S處理器的EJTAG與標(biāo)準(zhǔn)EJTAG存在著差異性,因此需要調(diào)試軟件針對(duì)這些差異性采取相應(yīng)的應(yīng)對(duì)措施。
    (1)TAP狀態(tài)機(jī)進(jìn)入復(fù)位狀態(tài)后異常
   
“Test-Logic-Reset”是TAP有限狀態(tài)機(jī)16個(gè)狀態(tài)中的其中之一。一般來(lái)說(shuō),在處理器復(fù)位后,TAP狀態(tài)機(jī)會(huì)處于不確定的狀態(tài)。為了使TAP狀態(tài)機(jī)正常工作,需要在5個(gè)時(shí)鐘周期內(nèi),置高TDI輸入,讓TAP狀態(tài)機(jī)進(jìn)入“Test-Logic-Reset”的指定狀態(tài)。GS32S處理器的TAP狀態(tài)機(jī)在進(jìn)入“Test-Logic-Reset”狀態(tài)后,會(huì)改變3個(gè)寄存器的內(nèi)容:清除DCR寄存器的ProbEn和ProbTrap位;置高協(xié)處理器Debug的DM位;修改協(xié)處理器DEPC的內(nèi)容為0xBFC00500。然后處理器進(jìn)入調(diào)試模式中,這樣的結(jié)果會(huì)導(dǎo)致后繼的調(diào)試過(guò)程被打斷。

    應(yīng)對(duì)措施:調(diào)試軟件限制TAP狀態(tài)機(jī)進(jìn)入“Test-LogiC-Reset”狀態(tài)的時(shí)機(jī)與次數(shù),并在TAP狀態(tài)機(jī)進(jìn)入“Test-Logic-Reset”狀態(tài)后,進(jìn)行必要的清理工作。
    (2)進(jìn)入調(diào)試模式后PC的輸出值高8位全為零
   
進(jìn)入調(diào)試模式后,處理器會(huì)把PC值送到TAP模塊中的Address寄存器中,而通過(guò)TAP模塊輸出的Address值高8位全為零。由于對(duì)發(fā)生在dmseg段內(nèi)的Load/Store操作,調(diào)試軟件會(huì)依據(jù)Address寄存器里的內(nèi)容是否為操作數(shù)地址來(lái)判斷Load/Store操作是否執(zhí)行完畢,因此會(huì)發(fā)生比較總是失敗的情況。
    應(yīng)對(duì)措施:該情況僅僅影響Address寄存器輸出值的高8位數(shù)據(jù)(0xFFXXXXXX~0x00XXXXX),因此可在判斷Address寄存器數(shù)據(jù)是否等于操作數(shù)地址時(shí),只比較低24位數(shù)據(jù)。
    (3)未被正確初始化的處理器會(huì)進(jìn)入死機(jī)狀態(tài)
   
目標(biāo)機(jī)上電后,處理器將從復(fù)位例外向量處取指令執(zhí)行。如果復(fù)位向量處為隨機(jī)數(shù)據(jù)或不完整的初始化代碼,則處理器執(zhí)行后將會(huì)進(jìn)入死機(jī)狀態(tài),不再響應(yīng)任何EJTAG的TAP處理器的訪問(wèn)。
    應(yīng)對(duì)措施:首先讓EJTAG TAP執(zhí)行EJTAGBOOT的命令,處理器復(fù)位后將會(huì)進(jìn)入調(diào)試模式,此后即可使用TAP處理器的訪問(wèn)機(jī)制進(jìn)行正常的EJTAC調(diào)試操作。


結(jié) 語(yǔ)
   
EJTAG是一種不影響、不干擾系統(tǒng)運(yùn)行的新型開(kāi)發(fā)調(diào)試技術(shù),它改變了硬件開(kāi)發(fā)工具滯后、出現(xiàn)新體系結(jié)構(gòu)且專用于特定處理器的落后局面,提供了一種容易實(shí)現(xiàn)的硬件調(diào)試標(biāo)準(zhǔn),具備了實(shí)時(shí)調(diào)試特征,使用5針EJTAG接口實(shí)現(xiàn)了硬件斷點(diǎn)、軟件斷點(diǎn)等調(diào)試功能。本文在實(shí)現(xiàn)了EJTAG調(diào)試功能的基礎(chǔ)上,開(kāi)發(fā)了以USB為快速通信接口、用CPLD硬件實(shí)現(xiàn)JTAG時(shí)序的MIPS仿真器產(chǎn)品,實(shí)現(xiàn)了對(duì)GS32S處理器EJTAG調(diào)試的支持,并在展訊、海爾等公司基于龍芯一號(hào)IP核的項(xiàng)目研究中得到了驗(yàn)證。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉