應對高級嵌入式處理器系統調試挑戰
FPGA最大的優點在于其靈活性,可激發設計人員創造出無數不同的設計。然而,設計調試通常最后才加以考慮――如果還加以考慮的話,因此調試器通常要適應系統的要求。
好消息是一家在嵌入式領域耕耘近30年的公司推出了一款調試器,它對于解決所有您能想象得到的問題,甚至包括那些您都不愿意去聽到的問題具有豐富的經驗。在本文中,我們將通過一些例子說明Lauterbach公司的TRACE32調試器所具有的功能,這些功能將節省您的時間,甚至保全您的項目。
面向靈活平臺的靈活調試
談到靈活設計,我們想到了客戶推出的一套十分有趣的系統。該系統在VirtexTM-5 LX50T器件上集成兩個Xilinx®MicroBlazeTM處理器核和一個內部block RAM存儲器塊。這種設計的特殊之處在于每個MicroBlaze處理器只有一個與block RAM模塊相連的I-side接口以實現指令提取。Block RAM的另一個存儲端口被連接到PCI Express接口上,以便在運行時遠程改變應用代碼和啟動處理器。在此面臨的挑戰在于如何在調試器無法讀寫的存儲器區域進行調試,因為在存儲器區域MicroBlaze處理器本身無法進行加載/存儲操作。
我們利用TRACE32的內部“虛擬存儲器”來解決這個問題,這個調試器內部的仿真存儲器具有無限的地址空間(64位),可以按照需要分配存儲容量。我們將目標程序加載到這個虛擬存儲器中,并且通過配置調試器的內部地址轉換機制將無法讀取的目標存儲器映射到虛擬存儲器上。這使得甚至可在匯編級上進行程序診斷。
但是這里面臨著另外一個挑戰:為了實現程序的按步執行,特別是高級語言行以及條件分支,人們通常使用軟件斷點。由于無法通過MicroBlaze處理器訪問Block RAM,顯然無法做到這一點。我們的解決方案是提供“map.break”指令,強制調試器在給定的地址范圍內使用硬件斷點。映射指令還可使您指定存儲器的數據寬度,更改大小頭特性,或者完全禁止調試器訪問某些具有關鍵外設寄存器的地址范圍。
小而有用的功能
Lauterbach在JTAG調試器和仿真器方面的經驗充分體現在TRACE32調試器的功能以及其他諸多微小和意想不到的細節中。考慮到Lauterbach完全利用自身工具開發所有軟件,這一點并不奇怪。而日常出現的問題通常會激發人們設計出最有用的功能。
您是否曾經需要在調試階段關掉煩人的計時器中斷處理器,或者在無需重啟的情況下改變條件分支?是否曾經需要修補循環以觀察處理器核是否正確執行外部存儲器給出的指令?內置的匯編器正可實現這些功能。
另一個調試中常見的情況是:是否經常在某個程序行走得太遠而不得不重新開始?寄存器恢復功能可以取消最后的操作。
TRACE32通過不間斷地每秒10次的存儲器重讀來顯示存儲器的內容,甚至在處理器停止的時候也不停止重讀。為什么它要這么做呢?可能在一秒鐘內,您的系統中不間斷運行的MicroBlaze處理器就造成了數據破壞,所以您希望能夠監測這一點。也可能在某些時候不穩定的存儲器造成了屏幕閃爍。又或者是您的JTAG接口在20MHz時并不那么穩定。這些都是您期望知道的。另一方面,TRACE32確保它只會在需要的時候訪問存儲器。
談及外設,我們還應該提到外設寄存器文件。這些文件指定了存儲器映射的寄存器的位置、寬度,甚至按位編碼,并且將它們分組成寄存器樹。這樣,可以很容易地訪問外設寄存器以進行檢查及修改:您點擊一下即可關掉DMA控制器,而無需仔細閱讀目標手冊以找到正確位。調試器給出了標準外設的規格說明,但是您可以使用簡單的文本編輯器修改這些文件以滿足您的要求。對于Xilinx工具鏈,插件選項可以生成這些文件,并將其作為Xilinx構建過程的一部分。
評論