AXI總線在FPGA設計中使用越來越頻繁,但初學的同學經常會因為對協議的理解不夠深入,寫出來的代碼經常會出現死鎖等問題,對FPGA設計與調試帶來很多不必要的麻煩。為了解決這個問題,我們可以使用Vivado生成AXI VIP(AXI Verification IP)來對自己設計的AXI接口模塊進行全方位的驗證(如使用VIP的Master、Passthrough、Slave三種模式對自己寫的AXI接口進行仿真驗證),提前規避和發現一些不滿足AXI總線規范的設計問題。本文就跟大家分享如何使用Xilinx AXI VIP對自己的設計搭建仿真驗證環境的方法。
本文參考的Xilinx官方文檔為:pg267-axi-vip.pdf。
01使用AXI VIP的幾個關鍵步驟
1.1、從IP Catalog中選擇并添加一個VIP,在這一步可以自定義該VIP的Component Name(新建完成后就很難再改名字了)。
IP添加完成就可以在tb中實例化。
1.2、在sv格式的tb中加入下面兩條import語句,第一個import是固定不變的,axi_vip對應axi_vip_pkg,axi-stream vip對應axi4stream_vip_pkg。
第二個import是導入剛才例化的vip的pkg,格式為import {Component Name}_pkg::*; 比如Component Name為axi_vip_0,則import如下圖第二行。
vivado自帶的編輯器會提示找不到import的這些pkg,但不會影響仿真。
1.3、 在tb中聲明相關的agent,使用vip的agent和它支持的一些函數就能實現仿真的功能。AXI vip支持的agent類型如下:
(AXI Verification IP v1.1 第47頁)
如果測試一個AXI Master接口,可以聲明一個自帶memory model的slave agent,結尾為mem_t:
這種自帶memory model的slave可以在執行start();之后自動生成AXI Slave時序,支持數據的寫入和讀出,也支持對memory內容的初始化和后臺讀寫操作。
1.4、Start前的初始化步驟
使用new函數將agent指定到待仿真的vip的IF上,
第二行:為agent設置一個標簽,在使用多個vip時,方便在仿真時的錯誤信息中看到是哪個vip產生的。
第三行:設置verbosity為0,為不展示詳細的仿真信息。設置為400,則會在仿真時print出詳細的仿真信息。(不常用)
第四行:啟動slave,之后slave可以根據待測的Master接口的讀寫時序產生相應的slave時序,被Master進行讀寫。
仿真過程中,如果axi或axi stream總線上的時序出現了任何錯誤,vip都會自動結束(暫停)仿真過程,仿真記錄的波形會停在總線時序出錯的位置偏后一點,控制臺中也會顯示vip對錯誤的詳細描述。
02幾個常見功能
VIP的內部功能結構、支持的仿真函數在xilinx-vip-api-2021-2中有詳細的說明。使用瀏覽器打開下圖中的文件,便可以查看到。
axi-vip和axi-stream-vip都有自帶的仿真例程,常用的功能在仿真例程中都有涉及。
2.1 設置VIP支持的Outstanding讀寫深度
例如,設置slave vip的outstanding深度為32,執行下面代碼的前兩行即可。第3~4行則是獲取agent的讀寫深度,可以以此確認前面設置的讀寫深度是否有效。
2.2 自定義ready信號
自帶memory model的slave vip可以在start_slave();之后產生slave時序,也可以通過slave的wr_driver或rd_driver,自定義ready的高低電平周期。
下圖代碼展示的是為axi產生自定義wready、awready、arready的方法。在這個initial的末尾,只是為ready信號設置了一個低電平時間為5clk,高電平時間為5clk的初始狀態。
仿真開始后,可以在每次AW(寫地址)通道握手之后,將新的awready和wready設置到agent上。在每次AR通道握手之后,將arready設置到agent上。
不能在axi的一個傳輸周期之內設置多組ready,否則vip會報出類似“太多未處理的ready”等錯誤信息,即使仿真依舊能夠進行。
2.3 Axi slave vip的memory model
使用agent.mem_model.backdoor_memory_write等函數可以繞過vip直接對memory model進行一些讀寫操作,在xilinx vip api文檔中有詳細介紹,需要注意只有帶memory model的vip才支持這類功能。
03使用自己的仿真環境
dma_sim_vivado工程中含有兩個仿真源,一個是只測試AXI與AXI-Stream通路的回環測試工程,另一個是測試DMA所有功能包括接口的仿真工程。
其中,axi_if_sim中例化了一個axi vip和一個axi stream vip,其測試內容為:
1、 填充axi stream接口的rxfifo。
2、 axi master接口將rxfifo中的數據寫入到axi vip的memory。
3、 axi master接口將ax vip中memoty的數據全部讀出,并存入txfifo。
4、 txfifo上的axi-stream master接口將txfifo內的數據以axi-stream的形式傳給axi stream vip。
5、最后比較axi stream vip接收的數據與一開始填充進rxfifo的數據是否一致,輸出仿真結果。
np_dma_sim中的vip使用基本一致,增加的內容在于使用
agent.mem_model.backdoor_memory_write為slave vip的memory預先填充了一部分DMA的描述符,方便后面的仿真使用。
審核編輯:湯梓紅
-
FPGA
+關注
關注
1626文章
21667瀏覽量
601858 -
Xilinx
+關注
關注
71文章
2163瀏覽量
121010 -
AXI
+關注
關注
1文章
127瀏覽量
16598
原文標題:【經驗分享】Xilinx AXI VIP使用說明
文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論