獲取 CSV:
現(xiàn)在,您不僅可以使用 Python 腳本執(zhí)行調(diào)試分析,更重要的是,借由 Vivado ILA 所生成的 ILA 文件可以進(jìn)一步簡(jiǎn)化此操作。通過(guò)將 *.ila 擴(kuò)展名重命名為 *.zip 然后將生成的文件解壓,即可將其轉(zhuǎn)換為 CSV 文件。
解壓后的文件夾將包含以下列表中的文件:
Python 可提供相應(yīng)的庫(kù),用于 CSV 文件分析,以便對(duì) Vivado ILA 所生成的調(diào)試信號(hào)數(shù)據(jù)執(zhí)行詳盡的分析。調(diào)試信號(hào)還可在 Vivado 硬件管理器中以波形形式來(lái)查看。對(duì)于計(jì)算某些接口中的數(shù)據(jù)包數(shù)量、解讀數(shù)據(jù)包內(nèi)的字段值等分析操作,使用 Python 腳本方法更便于進(jìn)行定制調(diào)試。
Python 腳本用例示例
此處提供的 Python 腳本會(huì)對(duì) ILA 數(shù)據(jù)執(zhí)行分析,這些數(shù)據(jù)包含下圖所示的 RQ/RC/CQ/CC 接口信號(hào)。此模塊框圖源自 (PG213),該文檔適用于 UltraScale+ 器件 Integrated Block for PCI Express IP。
PG213:
此腳本可識(shí)別每個(gè)接口上有效的數(shù)據(jù)包、提取每個(gè)數(shù)據(jù)包中的描述符文件,并報(bào)告輸出每個(gè)字段的值。
適用于 PCIe 調(diào)試的 Python 代碼示例:
該腳本執(zhí)行的步驟如下所述:
打開(kāi) CSV 文件。
從所選 CSV 文件中提取數(shù)據(jù)。
提取包含目標(biāo)數(shù)據(jù)的特定列/報(bào)頭。
使用“tready”、“tvalid”和“tlast”作為限定符來(lái)識(shí)別有效的數(shù)據(jù)包。
提取有效的 tdata 值,并使用函數(shù)執(zhí)行十六進(jìn)制到二進(jìn)制轉(zhuǎn)換。
二進(jìn)制轉(zhuǎn)換是從“tdata”提取比特級(jí)數(shù)據(jù)所必需的操作。
打印含十六進(jìn)制數(shù)據(jù)的描述符字段。
以下 func_rq_pkt_analysis() 函數(shù)會(huì)導(dǎo)入 CSV 文件并基于提供的 tready 值來(lái)判定要對(duì)哪個(gè)接口運(yùn)行分析。
以下代碼可識(shí)別 .csv 文件中相應(yīng)字段的列編號(hào),如下所示:
僅提取 tready 值、tdata 值、tvalid 值和 tlast 值,并將其存儲(chǔ)在詞典中,作為對(duì)應(yīng)索引的值,該索引將用作為詞典的鍵。
下一步是對(duì)詞典中存儲(chǔ)的數(shù)據(jù)執(zhí)行分析。詞典包含 tdata、tready、tvalid 和 tlast。
for 循環(huán)會(huì)遍歷詞典中的每一行,如果發(fā)現(xiàn) tready 和 tvalid 均為“1”,那么它會(huì)將對(duì)應(yīng)數(shù)據(jù)復(fù)制到變量中。tdata 作為十六進(jìn)制數(shù)值存儲(chǔ)在 CSV 文件中。為了對(duì)描述符字段標(biāo)識(shí)執(zhí)行比特級(jí)提取,需將十六進(jìn)制值轉(zhuǎn)換為二進(jìn)制。
描述符字段的提取是基于 (PG213) 中提供的描述符格式來(lái)執(zhí)行的。以下示例顯示了完成方完成 (CC) 接口的描述符。
為打印描述符字段值,需使用 bin_to_hex_print( ) 函數(shù)將此二進(jìn)制值再次轉(zhuǎn)換為十六進(jìn)制。
該函數(shù)定義如下:
以下是本篇博文隨附的 waveform.csv 文件的輸出示例:
代碼限制示例
提供的代碼示例僅作為概念證明。提供的腳本則可在以下情況下“按現(xiàn)狀”直接使用:
1.數(shù)據(jù)包包含 1 個(gè)數(shù)據(jù)節(jié)拍,即 tready/tvalid 和 tlast 全都在同一個(gè)時(shí)鐘周期內(nèi)斷言有效。
2.不使用跨接。
3.對(duì)應(yīng)接口的 tdata、tready、tvalid 和 tlast 的信號(hào)命名方式與本文隨附的 .csv 文件中的命名相同。
使用 Python 執(zhí)行 PCIe 調(diào)試的用例
Python 腳本示例可通過(guò)擴(kuò)展用于調(diào)試下列各種場(chǎng)景:
1.計(jì)算每個(gè)接口上的數(shù)據(jù)包數(shù)量。
2.在啟用跨接的用戶(hù)接口上執(zhí)行數(shù)據(jù)包分析。
3.支持分析含多個(gè)數(shù)據(jù)節(jié)拍的數(shù)據(jù)包,例如,跨多個(gè)時(shí)鐘周期的數(shù)據(jù)包。
4.驗(yàn)證是否接收到拆分完成包。
5.在給定的 ILA 捕獲窗口緩沖器大小足夠的情況下,驗(yàn)證用戶(hù)邏輯在 CC 接口上生成的完成包是否正確,并驗(yàn)證在 RC 接口上是否同樣接收到完成包(用于 RQ 接口上的對(duì)應(yīng)請(qǐng)求)。
審核編輯:劉清
-
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7484瀏覽量
163759 -
python
+關(guān)注
關(guān)注
56文章
4792瀏覽量
84626 -
Vivado
+關(guān)注
關(guān)注
19文章
812瀏覽量
66470 -
PCIe接口
+關(guān)注
關(guān)注
0文章
120瀏覽量
9701 -
csv
+關(guān)注
關(guān)注
0文章
38瀏覽量
5819
原文標(biāo)題:使用 Python 調(diào)試 PCIe 問(wèn)題
文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論