一種新的嵌入式處理器在線調(diào)試方法
摘要: 針對(duì)嵌入式處理器在FPGA 中的應(yīng)用現(xiàn)狀,通過引入通用的調(diào)試模塊,實(shí)現(xiàn)了對(duì)沒有調(diào)試接口的嵌入式處理器進(jìn)行在線調(diào)試的功能。所設(shè)計(jì)的調(diào)試模塊通過引入專用的調(diào)試中斷及與之對(duì)應(yīng)的調(diào)試服務(wù)程序?qū)崿F(xiàn)一種處理器響應(yīng)斷點(diǎn)( breakpoint) 的機(jī)制,并基于雙端口RAM 中一種巧妙的地址映射機(jī)制實(shí)現(xiàn)同時(shí)對(duì)多行代碼設(shè)置斷點(diǎn)的功能。實(shí)際的工程應(yīng)用情況表明,新的調(diào)試方法擴(kuò)展了對(duì)小型嵌入式處理器進(jìn)行調(diào)試的手段,明顯提高了開發(fā)效率。
本文引用地址:http://m.butianyuan.cn/article/150966.htm1 引言
在FPGA 設(shè)計(jì)中使用嵌入式處理器軟核( 如MicroBlaze、PicoBlaze 等) 構(gòu)成可編程片上系統(tǒng)( SystemOn Programmable Chip,SOPC) ,相比于ASIC 具有更好的可修改性和可維護(hù)性,得到了普遍的應(yīng)用。由于ARM,MicroBlaze 等大型處理器內(nèi)核具備調(diào)試接口,在與之對(duì)應(yīng)的調(diào)試模塊配合下,調(diào)試軟件可以通過JTAG 接口實(shí)現(xiàn): 執(zhí)行到斷點(diǎn)處掛起、單步執(zhí)行、查看處理器內(nèi)部狀態(tài)、查看和修改Memory空間中的數(shù)據(jù)等基本的在線調(diào)試功能。上述基本的在線調(diào)試功能對(duì)嵌入式系統(tǒng)的調(diào)試具有重要意義。
對(duì)于PicoBlaze 等占用資源少、設(shè)計(jì)開發(fā)簡單的小巧型處理器,一般不具備調(diào)試接口,然而在SOPC系統(tǒng)設(shè)計(jì)中經(jīng)常需要使用上述處理器。使用上述處理器時(shí),由于沒有調(diào)試接口,屬于大型處理器的標(biāo)準(zhǔn)高效的調(diào)試機(jī)制不再能夠使用,因此通過指令集仿真( ISS,Cycle - accurate Instruction Set Simulation) 和利用仿真工具對(duì)含有處理器的系統(tǒng)進(jìn)行軟硬件協(xié)同仿真是確保設(shè)計(jì)正確性的重要途徑。然而在諸如接收機(jī)基帶信號(hào)處理等系統(tǒng)的設(shè)計(jì)中,仿真所用的測試用例往往覆蓋率不夠,或者在發(fā)現(xiàn)故障以后很難構(gòu)造出與之相應(yīng)的測試用例。因此迫切需要使在線調(diào)試功能能夠方便地?cái)U(kuò)展到一般的處理器上。
針對(duì)上述應(yīng)用需求,這里提出的新調(diào)試方法通過引入一種通用的調(diào)試模塊( Universal Debug Module,UDM) 可以使沒有調(diào)試接口的處理器建立起標(biāo)準(zhǔn)的調(diào)試機(jī)制。該調(diào)試模塊利用處理器的中斷機(jī)制實(shí)現(xiàn)處理器響應(yīng)斷點(diǎn)( breakpoint) 的機(jī)制,利用基于雙端口RAM 中一種巧妙的地址映射機(jī)制實(shí)現(xiàn)同時(shí)對(duì)多行代碼設(shè)置斷點(diǎn)的功能,并且能夠方便地實(shí)現(xiàn)被調(diào)試系統(tǒng)和調(diào)試主機(jī)之間調(diào)試信息和命令的交互。UDM 還具有易于擴(kuò)展的優(yōu)點(diǎn),當(dāng)SOPC 系統(tǒng)中有多個(gè)處理器時(shí)可以共用一個(gè)UDM。
2 在線調(diào)試的一般原理
嵌入式處理器的主流在線調(diào)試方法,目前主要有2 種: 后臺(tái)調(diào)試模式( backgroud debug mode,BDM) 技術(shù)和基于IEEE P1149. 1 協(xié)議的JTAG 調(diào)試技術(shù)。BDM 技術(shù)在Motolora 微控制器中得到了大量的應(yīng)用,ARM,MIPS 和PowerPC 等處理器都具有基于JTAG 技術(shù)的在片調(diào)試功能,如ARM 公司提出了基于JTAG 技術(shù)的RDI 調(diào)試接口標(biāo)準(zhǔn),主要用于ARM 芯片的調(diào)試。處理器內(nèi)核中通過增加支持調(diào)試的擴(kuò)展設(shè)計(jì),可在預(yù)留的調(diào)試接口輸入簡單的控制信號(hào),以實(shí)現(xiàn): 處理器掛起( Halt) 、輸出PC 值和通用寄存器值、輸出和修改Memory 空間中的數(shù)據(jù)等基本的原始調(diào)試操作。通常上述調(diào)試接口的設(shè)計(jì)與指令集架構(gòu)相關(guān),如MIPS32 提供如下一些調(diào)試方法: ①斷點(diǎn)指令BREAK; ②一些自陷指令TRAP; ③特殊控制寄存器WATCH,通過編程使得特定的load /store 操作以及取指操作產(chǎn)生特殊的例外;④一種基于TLB 的MMU,通過編程使得訪問任意存儲(chǔ)器頁都可以產(chǎn)生特定的例外。
對(duì)于沒有調(diào)試接口的處理器目前主要是通過在軟件和硬件設(shè)計(jì)中充分考慮可能的調(diào)試需求,再加上調(diào)試主機(jī)和被調(diào)試系統(tǒng)之間的通信機(jī)制來實(shí)現(xiàn)在線調(diào)試的。這種調(diào)試模式下,調(diào)試代碼需要插入到正常程序中,將調(diào)試信息輸出到調(diào)試主機(jī),同時(shí)還能夠接收調(diào)試主機(jī)發(fā)過來的命令做出各種響應(yīng)。該方法的主要缺陷是針對(duì)不同的調(diào)試需求,要不斷修改正常程序中的調(diào)試代碼,導(dǎo)致標(biāo)準(zhǔn)化和通用性程度不高。此處的UDM 在不對(duì)處理器內(nèi)核做修改的情況下即可使這類處理器建立起方便的調(diào)試機(jī)制,是一種不同于主流大型處理器實(shí)現(xiàn)在線調(diào)試的方法。
3 通用調(diào)試模塊( UDM) 的工作原理
3. 1 系統(tǒng)描述
使用UDM 的調(diào)試系統(tǒng)框圖如圖1 所示,利用與FPGA 同在一塊PCB 板上的ARM、DSP 等處理器作為輔助調(diào)試用的嵌入式處理器( 下文中簡稱為輔助處理器) ,簡化了UDM 與調(diào)試主機(jī)之間的通信。通過輔助處理器的總線接口,UDM 中的各種控制和數(shù)據(jù)寄存器被直接映射到輔助處理器的Memory 空間。在輔助處理器開發(fā)工具的Memory 窗口直接進(jìn)行數(shù)據(jù)讀寫操作,就可實(shí)現(xiàn)對(duì)UDM 的操控,如圖4、圖5 所示。由于在一塊PCB 板上同時(shí)集成FPGA 和嵌入式處理器芯片是很常見的設(shè)計(jì),因此這種通信方式適用的范圍很廣。
圖1 應(yīng)用UDM 的調(diào)試系統(tǒng)框圖
UDM 直接作為FPGA 外部輔助調(diào)試的嵌入式處理器的外設(shè),如果在外部處理器總線掛接多個(gè)UDM 模塊,就能實(shí)現(xiàn)同時(shí)對(duì)多個(gè)處理器進(jìn)行調(diào)試。
UDM 通過產(chǎn)生調(diào)試中斷( DeBug Interrupt,DI) 信號(hào),使處理器響應(yīng)中斷并調(diào)用調(diào)試服務(wù)程序( DebugRoutine,DR) 。UDM 通過監(jiān)測處理器的取指令地址( Instruction Address, IA) 產(chǎn)生DI 信號(hào)。PicoBlaze 在運(yùn)行DR 時(shí)可通過其總線接口訪問UDM,從而實(shí)現(xiàn)調(diào)試信息的輸出和對(duì)調(diào)試命令的響應(yīng)。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論