ILA應(yīng)該是調(diào)試AMD-Xilinx FPGA最常用的IP。
在調(diào)試中,我們希望 ILA 中的波形可以提供有關(guān)設(shè)計問題的所有信息,但情況并非如此。對于復(fù)雜的調(diào)試,我們還需要將 ILA 捕獲的真實數(shù)據(jù)存儲到可以進一步處理的文件中。根據(jù)放置 ILA 的位置,我們可以通過不同的方式使用文件中包含的信息。
ILA 監(jiān)視輸出數(shù)據(jù) – 可用于驗證實例化的模型的正確性。
ILA 監(jiān)視輸入數(shù)據(jù) – 可用于將數(shù)據(jù)輸入到測試臺模塊中,嘗試不同數(shù)據(jù)對測試平臺的影響。當(dāng)然,在這種情況下也可以復(fù)制硬件中觀察到的信號時序。
這兩種方法在我們的開發(fā)、驗證和驗證中都非常強大。在使用 ILA 時,我們更熟悉波形視圖,但是,我們可以使用以下命令輕松地將 ILA 信息保存為 CVS 文件。
write_hw_ila_dataila_file.csv[upload_hw_ila_datahw_ila_1]-csv
這將 CSV 文件保存到 Vivado 的當(dāng)前工作目錄中(如果不確定,請在 tcl 窗口中運行 pwd 命令來確定)。
我們還可以使用“文件”->“導(dǎo)出”->“導(dǎo)出 ILA 數(shù)據(jù)”來保存 ILA 數(shù)據(jù)。將打開一個對話框,詢問要導(dǎo)出哪個 ILA、導(dǎo)出數(shù)據(jù)的位置以及數(shù)據(jù)格式。
我們使用一個簡單的 LFSR 實例進行演示,可以在 Vivado 中打開 ILA 并導(dǎo)出 CSV。
通過查看 ILA CSV 數(shù)據(jù),第一列顯示緩沖區(qū)中的樣本,第二列顯示窗口中的樣本。
無論是否在觸發(fā)中配置窗口,樣本緩沖區(qū)都會按順序?qū)彌_區(qū)中的每個樣本進行計數(shù)。窗口中的第二個樣本計數(shù)將從 0 計數(shù)到窗口大小。
例如,如果我們?yōu)?4 個窗口配置了 1024 個樣本緩沖區(qū),則窗口計數(shù)中的樣本將在 0 到 255 之間計數(shù)四次,而緩沖區(qū)計數(shù)中的樣本從 0 線性遞增到 1023。
第三個要素是觸發(fā)器。該值設(shè)置為 1 指示采樣窗口中何時發(fā)生觸發(fā)??梢栽谙旅娴拇翱谥锌吹?,當(dāng)看到觸發(fā)值時,該窗口在第三列中顯示 1(在本例中為 0x00 為 LFSR 序列的開始)。
我們將 LFSR 序列寫到一個文本文件中,可以使用一點 Python 將文本文件的結(jié)果與 ILA CSV 進行比較。
importcsv csv_file='iladata_trig.csv' text_file=' fibonacci.txt' withopen(csv_file,newline='')ascsvfile: reader=csv.reader(csvfile) #SkipthetoptworowsoftheCSVFile next(reader) next(reader) Fibonacci_hw_values=[] #StoreFibonacciSequence fori,rowinenumerate(reader): ifi256: ????????????Fibonacci_hw_values.append(row[3]) ????????else: ????????????break Fibonacci_tb_values?=?[] #?Open?test?bench?text?file with?open(text_file,?'r')?as?file: ????for?line?in?file: ????????#?Strip?newlines?and?any?whitespace?around?the?value ????????value?=?line.strip() ????????Fibonacci_tb_values.append(value) non_matching_in_a?=?[] non_matching_in_b?=?[] Fibonacci_tb_values?=?[item.lower()?for?item?in?Fibonacci_tb_values] for?item?in?Fibonacci_tb_values: ????if?item?not?in?Fibonacci_hw_values: ????????non_matching_in_a.append(item) for?item?in?Fibonacci_hw_values: ????if?item?not?in?Fibonacci_tb_values: ????????non_matching_in_b.append(item) print("Non-matching?in?HW:",?non_matching_in_a) print("Non-matching?in?TB:",?non_matching_in_b)
在Python中,我們可以打開這兩個文件并將它們讀入Python列表中;一個來自測試臺文本文件,另一個來自 CSV 文件。初步結(jié)果如下。
運行 Python 腳本展示了我們?nèi)绾问褂?Python CSV 包處理來自 ILA 的數(shù)據(jù)。如果我們想提取一列數(shù)據(jù)并生成一個文本文件,也很簡單。如下:
注意:如果使用 Versal 設(shè)備,我們可以使用一個名為 ChipScoPy 的 Python 接口來控制 Versal ILA。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21744瀏覽量
603653 -
數(shù)據(jù)存儲
+關(guān)注
關(guān)注
5文章
975瀏覽量
50922 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
2000瀏覽量
61169 -
LFSR
+關(guān)注
關(guān)注
0文章
16瀏覽量
12747 -
python
+關(guān)注
關(guān)注
56文章
4797瀏覽量
84727
原文標(biāo)題:【Vivado那些事兒】使用 Python 提取 ILA 數(shù)據(jù)
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論