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