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