目前,越來越多的FPGA設計開始采用嵌入式處理器(如PowerPC和Xilinx的MicroBlaze處理器)來完成控制任務, 這些控制任務用C語言等軟件語言描述比VHDL或Verilog等硬件語言描述更容易。
當進行嵌入式系統設計時,絕大部分的設計時間可能花費在調試階段,因此縮短發現問題并解決問題的時間非常重要。作為一款集成調試器,Computex公司的F-Sight同時具備硬件和軟件調試能力。一方面,它支持FPGA內部嵌入式處理器的全方位軟件調試。另一方面,它還支持監視FPGA硬件信號。本文將介紹如何利用F-Sight提高調試效率。
啟動調試器
Computex公司的調試器非常適合用來實現FPGA內部嵌入式處理器的調試。對于MicroBlaze處理器來說,工程師可以利用MicroBlaze調試模塊(MDM)來控制和調試處理器的執行過程,也可以利用賽靈思公司的MicroBlaze跟蹤內核(XMTC)以非侵入方式監控處理器程序的執行情況。
由于FPGA的引腳限制,減少輸出到引腳的信號數量非常重要。XMTC提供了編碼指令和數據跟蹤功能,所需要的引腳數量僅為非編碼信號所需的10%。
為了使調試器實現跟蹤功能,只需要將MDM和XMTC內核分別連接到MicroBlaze處理器的調試和跟蹤接口,然后將編碼后的跟蹤信號引到FPGA引腳以便F-Sight收集數據。完成FPGA實現以后,再將F-Sight調試器連接到電路板的Mictor連接器。如果使用的是賽靈思生產的不帶Mictor連接器的ML400系列、ML500系列或Sparta-3E/3A/3AN FPGA板,那么在Computex F-Sight適配器幫助下仍可以使用F-Sight中的處理器跟蹤功能。圖1就是利用F-Sight適配器將F-Sight連接到Spartan-3板上的照片。

圖1:F-Sight通過適配器連接到Spartan-3電路板
使用處理器跟蹤功能
處理器跟蹤功能可以在不中斷處理器運行的情況下監控程序執行情況,因此用戶可以長時間地對程序流進行分析來確定代碼中的問題而不會改變處理器的執行狀態。Computex公司的F-Sight提供的處理器跟蹤能力已被證明在許多情況下都非常管用。
試想一段程序總是不停地產生異常。異??赡馨l生在程序的任何位置;工程師面臨的挑戰在于找出異常發生的地方并弄清原因。為了解決這個問題,可以在異常發生之前或在異常矢量中設置斷點,這樣當程序到達斷點時就會暫停。當程序停止時,可以查看F-Sight記錄的執行歷史數據,從中可以發現在進入異常句柄前執行了哪些指令。
在嵌入式系統中堆棧溢出也是一個常見的問題。程序突然開始從看起來不太正常的地方執行。堆??赡苡捎谝绯龆黄茐?。如果懷疑發生了這樣的問題,可以通過設計觸發器來開始或停止跟蹤數據的采集。通過設置觸發器條件進行堆棧指針和堆棧上限之間的比較,當條件滿足時,程序將及時中止,然后用戶就可以很容易地確認堆棧溢出以及發生的地方。
在某些實時系統中,為了調試目的而停止處理器的執行過程并非很好的選擇,因為停止執行本身可能會改變程序行為。有時候問題可能極少出現,因此可能需要長時間監控程序執行情況。F-Sight可以用來設置復雜的觸發條件并收集跟蹤數據,然后通過事后分析來調試問題。
探測內部信號
FPGA調試經常從設計仿真開始。盡管仿真器能夠發現設計中的錯誤,但卻不能發現與技術指標相關的問題。而且還經常發生設計在仿真時通過了所有測試、但在FPGA中實現時卻無法工作的情況。發生這種情況時,設計人員將被迫利用邏輯分析儀在實際的目標系統中進行調試。
當試圖將信號從FPGA中引出以便讓邏輯分析儀監視其波形時,問題就出現了。對于大規模嵌入式系統設計來說,在大多數情況下即使只有很小的修改(例如將所需要的信號引到器件外部引腳),也可能需要很長時間才能完成FPGA的重新綜合和物理實現。此外,還可能會由于不同的布局和布線而帶來時序問題。運行物理實現工具所需要的實際時間依賴于電路的規模以及主計算機的性能,但很可能一天內只夠完成幾次調試。
幸運的是,Computex F-sight提供了一項非常有用的功能,它不需要重新運行綜合和物理實現工具就能通過設計修改把內部FPGA信號引到器件外部引腳。這一功能被稱為“探測”(Probing)。只需在顯示HDL源代碼的視圖中簡單地選擇內部FPGA信號(圖2),F-Sight將自動完成其余工作,并根據上述選擇為測試引腳分配合適的布線資源。這是通過利用Xilinx ISE軟件工具中包含的FPGA編輯器實現的。有了這一功能,調試時必須花在邏輯綜合和布局布線上的時間被縮到了最短,從而可以有更多時間用在監視信號波形上。

圖 2:F-Sight探測
協同調試
當系統工作不正常時,唯一能做的就是根據實際發生的事件檢查問題產生的原因。在有些情況下,利用硬件來實現事件跟蹤會更容易;而在其他情況下,利用軟件可能更容易一些。例如,在使用硬件的情況中,如果能夠確定顯示異常的信號,那么可以將這個信號設為觸發信號。在使用軟件的情況中,如果異常句柄被調用,那么可以在異常處理程序處設置斷點并執行用戶程序。這樣事件發生的過程將被捕獲進F-Sight的跟蹤緩沖器中。
然而,這兒的問題是即使捕獲了事件的發生過程,確定原因仍然需要很長的時間,除非了解硬件和軟件之間的相關性。針對這一點,Computex實現了協同調試功能,即可以在F-Sight中實現硬件(分析儀)和軟件(跟蹤)歷史之間的同步。利用這一功能,可以在相同時間軸上檢查事件發生時的波形和程序行為。當在分析儀窗口中滾動顯示波形時,程序執行歷史和源代碼視圖也相應滾動(圖3)。協同調試功能的強大之處在于能夠通過硬件和軟件協同調試快速確定問題原因。

圖 3:F-Sight 協同調試
調試閃速存儲器
FPGA內部存儲器經常被用來存儲嵌入式處理器程序。然而,如果程序太大,內部存儲器的容量經常不夠用。一種可行的方法是利用外部閃存來存儲用戶程序。
雖然有些調試器不支持閃存寫入功能,但F-Sight卻能夠像調試位于內部存儲器中的程序一樣來全面調試位于外部閃存中的程序。例如,它可以用來下載用戶程序,向存儲器的某一部分程序打補丁,或者在閃存中設置軟件斷點。
F-Sight支持1000多種類型的閃存。即使所使用的閃存不在已支持列表中,也可以通過圖形用戶界面方便地手工增加相應條目。