在FPGA設(shè)計中由于ARM,MicroBlaze 等大型處理器內(nèi)核具備調(diào)試接口,在與之對應(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)試功 能對嵌入式系統(tǒng)的調(diào)試具有重要意義。
對于PicoBlaze 等占用資源少、設(shè)計開發(fā)簡單的小巧型處理器,一般不具備調(diào)試接口,然而在SOPC系統(tǒng)設(shè)計中經(jīng)常需要使用上述處理器。使用上述處理器時,由于沒有調(diào)試接口,屬于大型處理器的標(biāo)準(zhǔn)高效的調(diào)試機(jī)制不再能夠使用,因此通過指令集仿真( ISS,Cycle - accurate Instruction Set SimulaTIon) 和利用仿真工具對含有處理器的系統(tǒng)進(jìn)行軟硬件協(xié)同仿真是確保設(shè)計正確性的重要途徑。
然而在諸如接收機(jī)基帶信號處理等系統(tǒng)的設(shè)計中,仿真所用的測試用例往往覆蓋率不夠,或者在發(fā)現(xiàn)故障以后很難構(gòu)造出與之相應(yīng)的測試用例。因此迫切需要使在線調(diào)試功能能夠方便地擴(kuò)展到一般的處理器上。
針對上述應(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è)置斷點(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)中有多個處理器時可以 共用一個UDM。
對于沒有調(diào)試接口的處理器目前主要是通過在軟件和硬件設(shè)計中充分考慮可能的調(diào)試需求,再加上調(diào)試主機(jī)和被調(diào)試系統(tǒng)之間的通信機(jī)制來實(shí)現(xiàn)在線調(diào)試的。這種調(diào)試模式下,調(diào)試代碼需要插入到正常程序中,將調(diào)試信息輸出到調(diào)試主機(jī),同時還能夠接收調(diào)試主機(jī)發(fā)過來的命令做出各種響應(yīng)。該方法的主要缺陷是針對不同的調(diào)試需求,要不斷修改正常程序中的調(diào)試代碼,導(dǎo)致標(biāo)準(zhǔn)化和通用性程度不高。此處的UDM 在不對處理器內(nèi)核做修改的情況下即可使這類處理器建立起方便的調(diào)試機(jī)制,是一種不同于主流大型處理器實(shí)現(xiàn)在線調(diào)試的方法。
使用UDM 的調(diào)試系統(tǒng),利用與FPGA 同在一塊PCB 板上的ARM、DSP 等處理器作為輔助調(diào)試用的嵌入式處理器( 下文中簡稱為輔助處理器) ,簡化了UDM 與調(diào)試主機(jī)之間的通信。通過輔助處理器的總線接口,UDM 中的各種控制和數(shù)據(jù)寄存器被直接映射到輔助處理器的Memory 空間。
在輔助處理器開發(fā)工具的Memory 窗口直接進(jìn)行數(shù)據(jù)讀寫操作,就可實(shí)現(xiàn)對UDM 的操控。由于在一塊PCB 板上同時集成FPGA 和嵌入式處理器芯片是很常見的設(shè)計,因此這種通信方式適用的范圍很廣。
UDM 直接作為FPGA 外部輔助調(diào)試的嵌入式處理器的外設(shè),如果在外部處理器總線掛接多個UDM 模塊,就能實(shí)現(xiàn)同時對多個處理器進(jìn)行調(diào)試。
UDM 通過產(chǎn)生調(diào)試中斷( DeBug Interrupt,DI) 信號,使處理器響應(yīng)中斷并調(diào)用調(diào)試服務(wù)程序( DebugRouTIne,DR) 。UDM 通過監(jiān)測處理器的取指令地址( InstrucTIon Address, IA) 產(chǎn)生DI 信號。PicoBlaze 在運(yùn)行DR 時可通過其總線接口訪問UDM,從而實(shí)現(xiàn)調(diào)試信息的輸出和對調(diào)試命令的響應(yīng)。
產(chǎn)生DI 時由于處理器會立即執(zhí)行DR,從而中斷正常的執(zhí)行流程轉(zhuǎn)為為調(diào)試服務(wù),因此決定DI 產(chǎn)生的時機(jī)是實(shí)現(xiàn)斷點(diǎn)機(jī)制的核心。DI 信號是通過監(jiān)測處理器的取指令地址( InstrucTIon Address, IA)產(chǎn)生的。直接通過一個比較器將IA 與一個數(shù)據(jù)比較一次只能設(shè)置一個斷點(diǎn),為了解決此矛盾采用了如下方法: 在UDM 中用雙口RAM 存儲斷點(diǎn)配置信息,使RAM 中的每1bit 與程序存儲區(qū)的一個地址對應(yīng)起來,數(shù)據(jù)為1 代表設(shè)置了斷點(diǎn),0 代表沒有。
將輸入的IA 進(jìn)行地址變換后對RAM 存儲區(qū)尋址,使得RAM 在一端輸出一個正好代表輸出的地址處是否設(shè)置了斷點(diǎn)信息,再根據(jù)此數(shù)據(jù)就可生成正確的DI 信號。在雙口RAM 的另外一端,斷點(diǎn)設(shè)置情況可以方便地被修改。這樣一來可以設(shè)置的斷點(diǎn)個數(shù)變?yōu)橹饕躑DM 中雙口RAM 容量限制了。
只需在DR 中保證處理器不對目標(biāo)程序的內(nèi)外部環(huán)境造成改變,就等效于實(shí)現(xiàn)了處理器的掛起功能。因此,需要將DR 和目標(biāo)程序的執(zhí)行環(huán)境隔離開來,這可以通過對編譯器進(jìn)行某些設(shè)置或強(qiáng)制的編碼規(guī)范來實(shí)現(xiàn)。在處理器被掛起之后,DR 與外部調(diào)試主機(jī)通信,通過查詢命令寄存器的方式響應(yīng)調(diào)試主機(jī)發(fā)出的 各種調(diào)試命令。這些命令包括: 將有關(guān)的調(diào)試信息搬移到外部調(diào)試主機(jī)可以觀察的緩存區(qū)中、修改Memory 空間中的數(shù)據(jù)、退出DR 使目標(biāo)程序繼續(xù)執(zhí)行等。 由于DR 必須與目標(biāo)程序使用相互隔離的資源并且小型處理器中代碼容量,外部Memory空間大小等都比較受限,因此DR 的設(shè)計應(yīng)該盡可能占用較少的端口數(shù)、通用寄存器數(shù)和代碼總行數(shù)。