最有趣的行業(yè)統(tǒng)計數(shù)據(jù)之一是,84%的FPGA設(shè)計至少存在一個錯誤。
當然,我們可以嘗試通過遵循良好的FPGA開發(fā)過程來減少這種情況,從而實現(xiàn)結(jié)構(gòu)化方法。這樣的方法可以完成高質(zhì)量的設(shè)計。通常,該開發(fā)過程將包含幾個不同的階段、過程和審查,以執(zhí)行結(jié)構(gòu)化方法,包括:
?系統(tǒng)需求評審——評審系統(tǒng)需求和驗證方法,以及符合/不符合矩陣。
?初步設(shè)計評審——根據(jù)要求對建筑設(shè)計進行評審,以確保滿足要求。審查架構(gòu)的可行性和技術(shù)風險。
?關(guān)鍵設(shè)計評審——根據(jù)需求和體系結(jié)構(gòu)評審已實現(xiàn)的設(shè)計及其驗證包、仿真和定時關(guān)閉/實現(xiàn)報告。
遵循這個過程,當然,需要審查階段的檢查表和與供應商規(guī)則一致的優(yōu)秀編碼/設(shè)計指南,例如超快編碼方法。
一旦FPGA設(shè)計完成,項目離完成還有很長的路要走。
設(shè)計必須集成到硬件中,與現(xiàn)實世界的傳感器、執(zhí)行器、驅(qū)動器和應用軟件接口。
在此階段,在產(chǎn)品發(fā)布之前,有幾個技術(shù)挑戰(zhàn)/風險可能導致需要在硬件上執(zhí)行調(diào)試。
在硬件上進行調(diào)試需要能夠理解邏輯設(shè)計、應用軟件和現(xiàn)實世界之間的交互——不幸的是,有時現(xiàn)實世界與驗證設(shè)計的方式是不同的——例如,不同的時序、操作模式或意想不到的硬件/軟件交互。
當這種情況發(fā)生時,我們需要能夠找到問題的根本原因并采取糾正措施。在集成過程中發(fā)現(xiàn)的任何東西都應該反饋到模擬中,以確保未來的產(chǎn)品更新/回歸測試不會忘記實驗室的慘痛教訓。
為了做到這一點,作為工程師,我們有幾個工具-從簡單的萬用表測量電壓和電流,到邏輯分析儀/模式發(fā)生器和示波器。
然而,有時我們想要內(nèi)部查看我們的SoC/FPGA,以了解IP核或嵌入式硬核和軟核處理器之間的交互。
AMD ChipScope是集成到Vivado設(shè)計套件中的片上調(diào)試和驗證工具包。它使開發(fā)人員能夠?qū)崟r觀察,捕獲FPGA或SoC設(shè)計的內(nèi)部信號并與之交互,而無需外部探針或邏輯分析儀。
ChipScope工具包的關(guān)鍵要素之一是集成邏輯分析儀。
什么是ILA
集成邏輯分析儀(ILA)是嵌入在AMD fpga和soc中的硬件調(diào)試工具,允許工程師捕獲和分析內(nèi)部數(shù)字信號。
ILA提供實時硬件調(diào)試功能,允許用戶設(shè)置觸發(fā)條件并直接在FPGA結(jié)構(gòu)上捕獲信號數(shù)據(jù)。ILA能夠捕獲具有一系列接口定義的信號,從簡單的邏輯信號和矢量到AXI和AXI流接口。
System ILA是一個增強版本,可以跨多個接口和時鐘域進行更全面的系統(tǒng)級調(diào)試。它提供監(jiān)視AXI接口、內(nèi)存控制器和其他系統(tǒng)互連的功能。
與基本ILA相比,系統(tǒng)ILA可以捕獲更長的跟蹤緩沖區(qū),支持更復雜的觸發(fā)條件,并同時監(jiān)視更多數(shù)量的信號。這使得它對于調(diào)試復雜的片上系統(tǒng)(SoC)設(shè)計特別有價值,其中多個組件通過不同的接口和協(xié)議相互交互。
調(diào)試方法
在調(diào)試應用程序時,我們需要采用邏輯方法。因此,在使用System ILA或ILA時,我們應該理解FPGA設(shè)計是一個迭代過程,如果我們從邏輯上解決問題,這是最成功的。
最好的方法是:
?把問題分解成更小的部分
?通過減少變量和變化來簡化
?做一個預測,然后驗證結(jié)果
?在設(shè)計周期的早期計劃如何以及在哪里進行調(diào)試
插裝方法
當在實際設(shè)計中使用集成邏輯分析儀(ILA)時,重要的是要有策略地使用儀器來平衡調(diào)試可見性和FPGA資源使用。
ILAs消耗邏輯和塊RAM,這在已經(jīng)接近容量的設(shè)備中成為一個關(guān)鍵問題。
捕獲深度和被監(jiān)測信號的寬度直接影響B(tài)RAM的使用——更寬的探針和更長的捕獲窗口會迅速耗盡可用內(nèi)存。
在早期的版本中,遵循上面概述的方法,重點關(guān)注關(guān)鍵控制信號、重置線和狀態(tài)或錯誤指示器,因為這些通常提供對系統(tǒng)行為的直接洞察,并幫助在調(diào)試周期的早期識別問題。
系統(tǒng)內(nèi)的關(guān)鍵AXI總線,特別是那些最接近處理系統(tǒng)接口的總線,如Zynq UltraScale+ mpsoc上的M_AXI_HPM_FPD(高性能主)和S_AXI_HP_FPD(高性能從),也應該考慮用于儀器儀表。
雖然這些寬總線是資源密集型的,但它們承載著可編程邏輯和處理系統(tǒng)之間的基本流量,并且可以揭示數(shù)據(jù)處理和系統(tǒng)集成中的微妙問題。
從精心選擇的控制、復位、狀態(tài)/錯誤和這些關(guān)鍵AXI接口的混合開始,在適當?shù)牟东@深度提供了對系統(tǒng)級行為的有價值的可見性,同時為迭代調(diào)試改進保留了空間。
演示項目
為了演示如何在FPGA設(shè)計中利用ila提供的功能,我們將創(chuàng)建一個簡單的演示項目。
該項目將針對安富利ZU板,并連接到Digilent ZMod AWG以生成簡單的模擬輸出。
在這個項目中,我將使用兩種不同的ILA來幫助確保正確的操作。
?ILA -用于監(jiān)控時鐘向?qū)фi定信號、DAC初始化信號和DAC錯誤信號
?系統(tǒng)ILA -監(jiān)控系統(tǒng)中的AXI和AXI流數(shù)據(jù)
第一步是創(chuàng)建一個新項目。如果未安裝ZU板,則使用Vivado中的Boards選項卡下載。
一旦創(chuàng)建了項目,下一步就是創(chuàng)建Vivado設(shè)計。要做到這一點,第一步是創(chuàng)建一個塊設(shè)計。
隨著塊設(shè)計的開放,添加Zynq UltraScale+ MPSoC處理系統(tǒng)。
運行塊自動化配置處理系統(tǒng)為ZU板定義。
在配置了處理系統(tǒng)之后,我們可以從Vivado庫中添加ZMod AWG控制器。
雙擊IP并選擇“將IP添加到塊設(shè)計”。
ZMod AWG需要一個軸流輸入,而處理系統(tǒng)有一個AXI4輸出。然而,Vivado能夠?qū)崿F(xiàn)必要的內(nèi)存映射到流轉(zhuǎn)換架構(gòu)。連接ZMod AWG輸入數(shù)據(jù)流端口到處理系統(tǒng)的h0 - fpd端口。
這將打開一個連接自動化對話框。對于時鐘,從處理系統(tǒng)中選擇100 MHz輸出時鐘。
這將生成如下圖所示的圖表。將系統(tǒng)時鐘連接到與DAC I/O時鐘相同的時鐘,因為兩者都將處于100?MHz。
重新定義軸流FIFO并取消啟用傳輸控制選項。
添加一個新的時鐘向?qū)Р慈缦滤具M行配置;我們想要一個100?MHz的輸出偏移距輸入90度。
如圖所示,將時鐘連接到ZMod AWG的DAC CLK輸入端。
連接復位。
增加一個常數(shù)塊設(shè)置為DAC使能的邏輯高。
添加一個常數(shù)塊設(shè)置為邏輯低禁用測試模式。
除了ZMod AWG塊上的頂部兩個端口,并將它們標記為外部。
添加系統(tǒng)ILA;我們將使用它來監(jiān)視系統(tǒng)中的AXI和axis - stream數(shù)據(jù)。
按如下方式配置System ILA屬性;啟用其觸發(fā)輸入和輸出端口。這將使我們能夠與Vitis Unified的軟件開發(fā)進行交叉探索。
0號槽位保持當前配置不變。
改變槽1的屬性來監(jiān)控軸流。
如下所示連接System ILA插槽0和插槽1,以及時鐘和復位。
重新定制處理系統(tǒng)以禁用HPM1,并啟用PS到PL和PL到PS的交叉觸發(fā)。這種交叉觸發(fā)允許ILA和Vitis Unified環(huán)境相互觸發(fā)。
輸出觸發(fā)是指在Vitis中遇到斷點時,也可以同時觸發(fā)所連接的ILA,以觀察斷點觸發(fā)時硬件的行為。
輸入觸發(fā)是指當ILA到達它的觸發(fā)器時,處理器上的軟件執(zhí)行也停止,使得軟件的狀態(tài)也可以被觀察到。
如圖所示連接Trigger端口。
添加一個ILA;我們將用它來監(jiān)測設(shè)計中的一些簡單的邏輯信號。
用三個輸入探針配置ILA,如下所示。
如下所示連接ILA;我們將監(jiān)視時鐘向?qū)фi定信號,DAC初始化信號和DAC錯誤信號。
最終的設(shè)計應該如下所示。
驗證設(shè)計,創(chuàng)建包裝器,并使用下面提供的XDC文件構(gòu)建比特流。
HW設(shè)置
確保硬件設(shè)置如下所示,將ZU板通過PL HSIO端口連接到ZMod DAC。DAC通道1 SMA的輸出應使用SMA- bnc電纜連接到示波器。
此外,確保ZU板通過USB- c連接供電,并通過USB JTAG連接到開發(fā)機器。
SW設(shè)計
為了開始軟件設(shè)計,我們首先需要確保ZU板上的啟動模式設(shè)置為JTAG。我們將使用JTAG端口訪問ILAs。如果您正在使用PetaLinux,您也可以通過以太網(wǎng)進行訪問,如本項目所示;然而,這超出了本項目的范圍。
在Vitis Unified中,基于剛剛導出的XSA創(chuàng)建一個新的硬件平臺。
選擇剛剛從Vivado導出的XSA。
選擇一個獨立的操作系統(tǒng)和第一個A53處理器。
完成平臺的創(chuàng)建。
下一步是創(chuàng)建應用程序項目。對于這個項目,我們將使用Hello World模板,并將其命名為AWG_Example。
選擇剛剛創(chuàng)建的平臺。
按照指示離開域。
完成應用程序的創(chuàng)建。
下一步是構(gòu)建應用程序并使用應用程序的啟動配置交叉探測。json文件。
要添加交叉探測(我們需要添加兩個,每個方向一個),選擇add Item選項。
我們將設(shè)置的第一個交叉探針使觸發(fā)器能夠使用FTM從A53-0處理器轉(zhuǎn)到可編程邏輯,從而轉(zhuǎn)到系統(tǒng)ILA。
一旦設(shè)置了第一個交叉探測,我們需要添加另一個從可編程邏輯到A53處理器的交叉探測。
現(xiàn)在,我們可以調(diào)試標準的Hello World應用程序,以確保該流程按預期工作,并提前查看ZMod AWG狀態(tài)。
我們將在終端中看到輸出;這有助于證明我們有一個具有基本功能的構(gòu)建。
在開發(fā)主應用軟件之前,下一步是確認ZMod AWG已被正確配置和初始化。這里的任何錯誤都表明時鐘或控制信號映射有問題。
在Vivado中,打開硬件管理器,并在ILA1上,仔細檢查時鐘向?qū)欠癖绘i定并且DAC已初始化。由于這些是靜態(tài)信號,我們可以立即觸發(fā)ILA。
如果我們看到一個配置錯誤,我們將需要進一步研究ZMod AWG的接口和時鐘。
下一步是在系統(tǒng)ILA上啟用觸發(fā)器并武裝它。
然后我們可以開發(fā)主應用軟件,對于本例,它將向DAC中寫入一個斜坡計數(shù)。這是一種通常在集成早期執(zhí)行的測試,以確保DAC沒有丟失的位或卡住的代碼。
應用程序代碼如下:
下一步是使用System ILA檢查數(shù)據(jù)是否正確地傳輸?shù)捷S流FIFO。
在for循環(huán)中添加一個斷點來執(zhí)行寫操作。
當遇到斷點時,ILA也將觸發(fā),并且可以觀察到AXI寫入。
這證明數(shù)據(jù)正在寫入軸流FIFO?,F(xiàn)在我們需要檢查數(shù)據(jù)是否從FIFO輸出。
在Vivado中,更改System ILA觸發(fā)器,并將其設(shè)置為在axis - stream上有效的數(shù)據(jù)上升沿觸發(fā),然后武裝ILA。
重新啟動應用程序軟件,ILA將隨著軟件的停止而觸發(fā),就像在斷點處一樣。我們可以看到數(shù)百個數(shù)據(jù)包正在輸出。
放大后,您可以看到斜坡的值和值按預期增加。
在Vitis中,您還將看到該軟件已被停止。
當我們將輸出驅(qū)動到DAC時,這應該會導致DAC輸出端出現(xiàn)模擬輸出。然而,在連接到硬件的示波器上,沒有觀察到任何信號。
我們知道處理系統(tǒng)正在生成數(shù)據(jù),我們知道它正在被發(fā)送到ZMod DAC驅(qū)動程序,我們知道ZMod被正確初始化-但是作用域中沒有出現(xiàn)任何東西。
讓我們看看ZMod AWG用戶指南,看看我們是否遺漏了什么。該指南的鏈接在這里。
閱讀文檔,我們看到了這個問題:目前,測試波形被放置在較低的位,但ZMod AWG期望它在較高的位。
糾正這個錯誤(很有幫助,這是一個軟件修復)可以再次在ILA中驗證;但是,我們現(xiàn)在可以在作用域輸出中看到結(jié)果。
由于DAC代碼是有簽名的,因此將計數(shù)器從0調(diào)到最大刻度將導致作用域顯示一個正斜坡,然后在設(shè)置MSB后顯示一個負斜坡。
總結(jié)
本項目展示了我們?nèi)绾问褂肁MD ChipScope調(diào)試解決方案、ILAs和System ILAs在實時項目中發(fā)現(xiàn)問題并快速識別它們。該項目還概述了如何通過使用交叉探測功能來調(diào)試硬件和軟件交互,從而可以輕松地分析集成問題。
ChipScope, ILA和System ILA是開發(fā)人員可以用來快速輕松地調(diào)試應用程序的重要元素。
本文編譯自hackster.io