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

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

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

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