ILA應(yīng)該是調(diào)試AMD-Xilinx FPGA最常用的IP。
在調(diào)試中,我們希望 ILA 中的波形可以提供有關(guān)設(shè)計(jì)問題的所有信息,但情況并非如此。對于復(fù)雜的調(diào)試,我們還需要將 ILA 捕獲的真實(shí)數(shù)據(jù)存儲(chǔ)到可以進(jìn)一步處理的文件中。根據(jù)放置 ILA 的位置,我們可以通過不同的方式使用文件中包含的信息。
ILA 監(jiān)視輸出數(shù)據(jù) – 可用于驗(yàn)證實(shí)例化的模型的正確性。
ILA 監(jiān)視輸入數(shù)據(jù) – 可用于將數(shù)據(jù)輸入到測試臺模塊中,嘗試不同數(shù)據(jù)對測試平臺的影響。當(dāng)然,在這種情況下也可以復(fù)制硬件中觀察到的信號時(shí)序。
這兩種方法在我們的開發(fā)、驗(yàn)證和驗(yàn)證中都非常強(qiáng)大。在使用 ILA 時(shí),我們更熟悉波形視圖,但是,我們可以使用以下命令輕松地將 ILA 信息保存為 CVS 文件。
write_hw_ila_dataila_file.csv[upload_hw_ila_datahw_ila_1]-csv
這將 CSV 文件保存到 Vivado 的當(dāng)前工作目錄中(如果不確定,請?jiān)?tcl 窗口中運(yùn)行 pwd 命令來確定)。
我們還可以使用“文件”->“導(dǎo)出”->“導(dǎo)出 ILA 數(shù)據(jù)”來保存 ILA 數(shù)據(jù)。將打開一個(gè)對話框,詢問要導(dǎo)出哪個(gè) ILA、導(dǎo)出數(shù)據(jù)的位置以及數(shù)據(jù)格式。
我們使用一個(gè)簡單的 LFSR 實(shí)例進(jìn)行演示,可以在 Vivado 中打開 ILA 并導(dǎo)出 CSV。
通過查看 ILA CSV 數(shù)據(jù),第一列顯示緩沖區(qū)中的樣本,第二列顯示窗口中的樣本。
無論是否在觸發(fā)中配置窗口,樣本緩沖區(qū)都會(huì)按順序?qū)彌_區(qū)中的每個(gè)樣本進(jìn)行計(jì)數(shù)。窗口中的第二個(gè)樣本計(jì)數(shù)將從 0 計(jì)數(shù)到窗口大小。
例如,如果我們?yōu)?4 個(gè)窗口配置了 1024 個(gè)樣本緩沖區(qū),則窗口計(jì)數(shù)中的樣本將在 0 到 255 之間計(jì)數(shù)四次,而緩沖區(qū)計(jì)數(shù)中的樣本從 0 線性遞增到 1023。
第三個(gè)要素是觸發(fā)器。該值設(shè)置為 1 指示采樣窗口中何時(shí)發(fā)生觸發(fā)??梢栽谙旅娴拇翱谥锌吹剑?dāng)看到觸發(fā)值時(shí),該窗口在第三列中顯示 1(在本例中為 0x00 為 LFSR 序列的開始)。
我們將 LFSR 序列寫到一個(gè)文本文件中,可以使用一點(diǎn) Python 將文本文件的結(jié)果與 ILA CSV 進(jìn)行比較。
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中,我們可以打開這兩個(gè)文件并將它們讀入Python列表中;一個(gè)來自測試臺文本文件,另一個(gè)來自 CSV 文件。初步結(jié)果如下。
運(yùn)行 Python 腳本展示了我們?nèi)绾问褂?Python CSV 包處理來自 ILA 的數(shù)據(jù)。如果我們想提取一列數(shù)據(jù)并生成一個(gè)文本文件,也很簡單。如下:
注意:如果使用 Versal 設(shè)備,我們可以使用一個(gè)名為 ChipScoPy 的 Python 接口來控制 Versal ILA。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21729瀏覽量
602979 -
數(shù)據(jù)存儲(chǔ)
+關(guān)注
關(guān)注
5文章
970瀏覽量
50894 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
2000瀏覽量
61131 -
LFSR
+關(guān)注
關(guān)注
0文章
16瀏覽量
12743 -
python
+關(guān)注
關(guān)注
56文章
4792瀏覽量
84627
原文標(biāo)題:【Vivado那些事兒】使用 Python 提取 ILA 數(shù)據(jù)
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論