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





