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