1 引言 集成電路制造工藝的飛速發(fā)展推動(dòng)了信息技術(shù)的發(fā)展,而信息技術(shù)的核心是微處理器技術(shù)。微處理器的總體發(fā)展趨勢是功能越來越強(qiáng)大,工作頻率越來越高。由于微處理器芯片從設(shè)計(jì)過程到生產(chǎn)過程中都可能產(chǎn)生一些缺陷,這些缺陷都將最終影響微處理器的功能和性能,為了保證微處理器功能的正確性,減少設(shè)計(jì)風(fēng)險(xiǎn),對其進(jìn)行測試和調(diào)試是必不可少的。但是微處理器的發(fā)展趨勢也導(dǎo)致了微處理器芯片的測試與調(diào)試變得更加復(fù)雜,板級調(diào)試系統(tǒng)設(shè)計(jì)和調(diào)試軟件的開發(fā)也越來越困難。特別是進(jìn)入21世紀(jì),集成電路進(jìn)入了高度集成的系統(tǒng)芯片SoC(System-On-Chip)時(shí)代,而嵌入式微處理器是系統(tǒng)芯片的核心。傳統(tǒng)的微處理器的調(diào)試方法采用監(jiān)測并控制其地址與數(shù)據(jù)總線的方法。對于高度集成化的系統(tǒng)芯片,由于封裝尺寸的限制,不可能將嵌入片內(nèi)的微處理器信號引出片外,通過外部直接測試和調(diào)試。在板級,通過軟件模擬、驗(yàn)證和分析等系統(tǒng)功能調(diào)試已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足功能正確性調(diào)試和故障定位等要求,所以微處理器芯片,特別是嵌入式微處理器,硬件上支持片上測試和調(diào)試功能顯得十分重要。 為了能讓嵌入式微處理器的片上調(diào)試功能也能夠像高級語言編程工具那樣支持?jǐn)帱c(diǎn)設(shè)置、單步執(zhí)行、寄存器內(nèi)容的查看和內(nèi)存內(nèi)容查看等功能,文章提出了一種在線調(diào)試模塊設(shè)計(jì),此設(shè)計(jì)為嵌入式微處理器增加了一些專用的調(diào)試引腳,通過這些引腳可以響應(yīng)硬件和軟件觸發(fā),提供開始/停止調(diào)試模試,單步調(diào)試操作以及程序執(zhí)行的跟蹤。有了這些引腳,還可以對微處理器做調(diào)試接口,提供更好的調(diào)試性能,查錯(cuò)功能,從基本停止/ 開始或單步執(zhí)行到硬件、軟件斷點(diǎn)支持再到對數(shù)據(jù)存儲區(qū)、程序存儲區(qū)和SFRs的訪問和修改以及對程序進(jìn)行跟蹤。 2 嵌入式微處理器的片上調(diào)試原理 為微處理器增加的調(diào)試引腳及其功能如表1所示。 可實(shí)現(xiàn)的調(diào)試功能: ⑴ 開始/停止debug模式 可以通過兩種方式進(jìn)入調(diào)試模式即硬件請求或者軟件中斷指令TRAP。硬件請求進(jìn)入到debug模式將發(fā)出一個(gè)DebugReq信號。這個(gè)信號在核運(yùn)行的每個(gè)指令操作的最后一個(gè)周期的第一個(gè)階段進(jìn)行采樣,若是采樣信號為高,核將完成當(dāng)前指令,插入一個(gè)NOP指令。在NOP指令的第一階段的最后核將發(fā)出一個(gè)DebugAck信號然后進(jìn)入debug模式。它的時(shí)序圖見圖1。當(dāng)TRAP指令被執(zhí)行的時(shí)候,核只是簡單的發(fā)送一個(gè)DebugAck信號,然后在這個(gè)單一周期指令第一個(gè)階段的結(jié)束進(jìn)入debug模式。 在debug模式,核在每個(gè)機(jī)器周期的第一階段的最后采樣DebugReq信號,當(dāng)DebugReq信號為高之后采樣一個(gè)機(jī)器周期的信號,如果為低則離開調(diào)試模式(置DebugAck信號無效)。它的時(shí)序圖見圖2。注意:如果在TRAP下進(jìn)入調(diào)試模式,外部硬件必須在重新置信號為低之前置DebugReq信號為高一個(gè)機(jī)器周期才可以離開試模式。 圖1 進(jìn)入debug模式的時(shí)序圖 圖2 退出debug模式的時(shí)序圖 ①DebugReq采樣信號為高電平。① DebugRep采樣信號為高電平。 ②微處理器內(nèi)核進(jìn)入調(diào)試模式,置DebugAck 為高電平。 ② DebugRep 采樣信號為低,CPU核置DebugAck為低并離開調(diào)試模式。 其中 PROGA 為程序存儲器的地址總線,PROGA_EN 為程序存儲器的地址總線使能。它們是微處理器內(nèi)核已經(jīng)設(shè)計(jì)好的。 ⑵單步調(diào)試 在調(diào)試模式下,把DebugReq 置成無效的低信號,微處理器執(zhí)行一個(gè)用戶指令,等待DebugAck 信號無效的時(shí)候指出離開了調(diào)試模式,再把DebugReq 信號置成高電平。 ⑶程序執(zhí)行的跟蹤信號 DebugPFetch 和Debug Vector 支持程序追蹤。當(dāng)程序代碼在下一個(gè)上升緣被讀取的時(shí)候DebugPFetch信號發(fā)出,它并不發(fā)送程序數(shù)據(jù)提取的信號。(例如使用MOVC 指令讀取數(shù)據(jù))。當(dāng)在程序計(jì)數(shù)器里的下一個(gè)代碼表現(xiàn)為一個(gè)間斷性程序的時(shí)候DebugVector 被發(fā)送,(例如Jump,Call 或者Return 指令)。 ⑷外部數(shù)據(jù)存儲器、SFR、內(nèi)部數(shù)據(jù)存儲器的讀和寫 提供了一個(gè)時(shí)序發(fā)生器一個(gè)RAM,它包含了一些訪問存儲器的指令。當(dāng)一個(gè)時(shí)序開始的時(shí)候,DebugStep信號發(fā)送直到時(shí)序結(jié)束。因此時(shí)序指令以全速的處理器速度運(yùn)行。在微處理器程序輸入端設(shè)計(jì)了一個(gè)多路選擇器允許時(shí)序發(fā)生器的指令給內(nèi)核執(zhí)行。時(shí)序發(fā)生器中的指令總是把想訪問的存儲器和SFRs 中的數(shù)據(jù)加載到累加器A 中,因此只要把XRAMD0 總線的狀態(tài)存儲到結(jié)果儲存器中,然后通過JTAG 接口把結(jié)果儲存器讀出就可以得知存儲器和SFRs 中的數(shù)據(jù)。給出一個(gè)讀內(nèi)部數(shù)據(jù)存儲器的時(shí)序發(fā)生器中的程序。其中Temp1,Temp 是時(shí)序發(fā)生器中定義的存放中間數(shù)據(jù)的寄存器。 3 微處理器的在線調(diào)試模塊的結(jié)構(gòu)設(shè)計(jì) 在微處理器內(nèi)核中設(shè)計(jì)的調(diào)試部分為DebugReq 信號鎖存器、調(diào)試狀態(tài)機(jī)、操作碼指示器。 調(diào) 試 狀 態(tài) 機(jī) 是 有 DebugReq 、DebugAck、DebugStep、TRAP 信號來控制的。它有4 種狀態(tài):00、01、10、11。00 表示用戶狀態(tài)。01 表示調(diào)試開始狀態(tài),此狀態(tài)時(shí)已檢測到DebugReq 信號有效,插入NOP 指令。01 表示單步調(diào)試模式,已檢測到DebugStep 信號有效。11 為調(diào)試模式。狀態(tài)機(jī)為10、11 時(shí)都要置DebugAck 為有效信號,進(jìn)入Debug 模式。 操作碼指示器是有指令譯碼器和狀態(tài)機(jī)譯碼器控制的。當(dāng)程序代碼在下一個(gè)上升緣被讀取的時(shí)候(而不是程序數(shù)據(jù)的讀取), 操作碼指示器就置DebugPFetch 為有效信號,以實(shí)現(xiàn)對程序的跟蹤。當(dāng)操作碼指示器檢測到程序計(jì)數(shù)器為不連續(xù)數(shù)值時(shí)置DebugVector 為有效信號。 外部數(shù)據(jù)存儲器、SFR、內(nèi)部數(shù)據(jù)存儲器的讀和寫是基于1149.1 JTAG 的設(shè)計(jì)。IEEE 1149.1 JTAG 接口是專門為集成電路測試和電路板系統(tǒng)測試制定的國際標(biāo)準(zhǔn)。TDI(數(shù)據(jù)輸入),TMS(TAP 模式選擇),TCK(測試時(shí)鐘輸入),TRST(測試接口復(fù)位),TDO(數(shù)據(jù)輸出)是JTAG 的5 個(gè)外部管腳。調(diào)試部分電路為:調(diào)試掃描鏈、調(diào)試數(shù)據(jù)寄存器、指令譯碼器、時(shí)序發(fā)生器和多路選擇器(MUX)。時(shí)序發(fā)生器是一個(gè)RAM,它包含了一些訪問存儲器的指令。指令010110xx 表示啟動(dòng)時(shí)序發(fā)生器,把預(yù)先存好的訪問程序送到微處理器的程序輸入端(PROGDI),微處理器執(zhí)行這些程序,實(shí)現(xiàn)對存儲器、SFR 的訪問。指令譯碼器對調(diào)試指令進(jìn)行譯碼,并發(fā)出調(diào)試控制信號,比如:設(shè)置DebugReq 為有效,進(jìn)入Debug 模式;啟動(dòng)時(shí)序發(fā)生器,控制多路選擇器(MUX),讓PROGDI 上的信號為時(shí)序發(fā)生器中的指令。調(diào)試數(shù)據(jù)寄存器是為存放中間數(shù)據(jù)和訪問結(jié)果數(shù)據(jù)的。調(diào)試掃描鏈對中間數(shù)據(jù)和訪問結(jié)果進(jìn)行查看。 4 結(jié)論 此設(shè)計(jì)給微處理器內(nèi)核增加了一些調(diào)試引腳。實(shí)現(xiàn)了開始/停止調(diào)試模試,單步調(diào)試操作以及程序執(zhí)行的跟蹤的調(diào)試功能。這些引腳使內(nèi)核具有很好的可擴(kuò)張性,可對芯片增加調(diào)試接口,實(shí)現(xiàn)更強(qiáng)大的調(diào)試功能。基于1149.1 JTAG 接口的對存儲器、SFR 訪問,既可以使芯片原有的測試功能不受影響,又可以節(jié)省硬件,減少開銷。帶Debug 模塊的微處理器在SMIC 的0.25um 標(biāo)準(zhǔn)單元庫映射綜合后,可工作在120MHz。仿真的結(jié)果表明,擴(kuò)充Debug 功能的JTAG 接口所增加的芯片面積很少,而且在對存儲器、SFR 進(jìn)行訪問時(shí)不影響處理器的工作速度。 |