0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

AXI VIP 中產(chǎn)生傳輸事務的基本方法

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-08-29 14:58 ? 次閱讀

本系列我想深入探尋 AXI4 總線。不過事情總是這樣,不能我說想深入就深入。當前我對 AXI總線的理解尚談不上深入。但我希望通過一系列文章,讓讀者能和我一起深入探尋 AXI4。

歡迎來到深入 AXI4 總線的實戰(zhàn)篇,系列第二篇文章中,我們將首先了解調(diào)用 AXI VIP 產(chǎn)生激勵與響應的方法,并完成一個小目標:實現(xiàn)三種情況下的握手信號。

關(guān)于平臺移植

本文的實戰(zhàn)在第一篇的示例工程上,新建 tb 來實現(xiàn)我們的功能。新建 tb 中的邏輯由 demo tb 的內(nèi)容搬運簡化而來。

本來計劃新建一個工程,但是閱讀 PG267 (IP 核的產(chǎn)品文檔)發(fā)現(xiàn),當前 Vivado 對于該 IP 的支持還比較弱,需要將 IP 的實例名以及層次路徑硬編碼至 tb 中,如果新建工程還比較麻煩。所以本文暫時還是在 example 的基礎(chǔ)上展開 。

想要重新搭建工程的讀者請注意閱讀 demo tb 開頭的說明,或者 PG267 第六章中的內(nèi)容。

本文的場景為主機與從機之間通過 Pass-through (以后叫 ta 中間機?)進行通信。從機選用 mem 模式,有自己的存儲模型,即使用 mem_stimulus.sv 作為激勵。關(guān)于存儲模型,我們將在后續(xù)的文章中討論。

我們的改動在于主機的激勵部分,以原先的 mst_stimulus.sv 為基礎(chǔ),構(gòu)建我們自己的主機激勵,改動后的 testbench 結(jié)構(gòu)如下圖所示。

2fb3fb5e-25a9-11ed-ba43-dac502259ad0.png

是的,新的激勵加上了 headbig 字段,這來自于 深入 AXI4 總線 系列文章的英文名:Headbig AXI4。

VIP API 基本調(diào)用方式

PG 文檔中,Xilinx 表示 VIP 基于 SystemVerilog 語言開發(fā),同時在 API 的設(shè)計上,命名與數(shù)據(jù)結(jié)構(gòu)的設(shè)計均參考了 UVM 框架,便于 VIP 在驗證系統(tǒng)中的集成。由于本文的重點不在于 UVM 或者 API 的設(shè)計,因此僅跟著 demo 以及 PG 中的 API 調(diào)用流程過一遍。

主機 master

首先來看主機,定義于 axi_vip_master_mst_stimulus.sv 中

為主機 master ip 創(chuàng)建一個 agent 對象,傳入 master ip 的層級路徑,后續(xù)通過該 agent 控制主機 ip

agent = new("master vip agent",DUT.ex_design.axi_vip_mst.inst.IF);

通過 agent 啟動主機

agent.start_master();

在 fork ...join 并發(fā)塊中同時發(fā)出主機的讀寫傳輸事務。

fork
 begin
  //調(diào)用寫傳輸事務 API
 end
 
 begin
  //調(diào)用讀傳輸事務 API
 end
join

產(chǎn)生兩者的 API 結(jié)構(gòu)相似,我們以寫傳輸事務為例。例程中依次使用了 3 種 API ,分別產(chǎn)生

完全隨機化的寫傳輸事務

multiple_write_transaction_full_rand ("single write",1);

定制化的寫傳輸事務

single_write_transaction_api("single write with api",
                   .id(mtestWID),
                   .addr(mtestWADDR),
                   .len(mtestWBurstLength), 
                   .size(mtestWDataSize),
                   .burst(mtestWBurstType),
                   .wuser(mtestWUSER),
                   .awuser(mtestAWUSER), 
                   .data(mtestWData)
                   );

部分隨機化的寫傳輸事務

multiple_write_transaction_partial_rand(相關(guān)參數(shù));

我們常說,不想知道 API 函數(shù)之下發(fā)生了什么的程序員不是好程序員,IC 工程師同樣如是。以較簡單的定制化寫傳輸事務函數(shù)為例,所謂函數(shù)實質(zhì)上是一個 sv task,以下是 task 中的主要內(nèi)容:

  axi_transaction                wr_trans;
  wr_trans = agent.wr_driver.create_transaction(name);
  wr_trans.set_write_cmd(addr,burst,id,len,size);
  wr_trans.set_prot(prot);
  //...
  wr_trans.set_data_block(data);
  agent.wr_driver.send(wr_trans); 

首先聲明一個 axi 傳輸事務對象,然后在主機 ip 的 agent 下建立傳輸事務。

通過 API 函數(shù)設(shè)定寫命令信息,設(shè)定傳輸屬性以及待傳輸?shù)臄?shù)據(jù)塊。數(shù)據(jù)塊的數(shù)據(jù)類型為

bit [4 * 1024 * 8 - 1:0]

從機 slave

接下來,我們看一下從機的相關(guān)流程,定義于 axi_vip_master_mem_stimulus.sv 中。

同樣為從機創(chuàng)建并啟動相應 agent,此處與主機相似不表。

在 demo 中構(gòu)造了一個虛擬數(shù)據(jù)作為后續(xù)對主機讀數(shù)據(jù)的回應,因為本文的主要工作是得到握手信息的波形,因此并不會實際存儲主機寫入的數(shù)據(jù),而是在主機讀取任意地址時,返回這個虛擬數(shù)據(jù)。

最后,從機調(diào)用 API 產(chǎn)生 wready 信號應答

  task user_gen_wready();
   axi_ready_gen              wready_gen;
   wready_gen = agent.wr_driver.create_ready("wready");
   wready_gen.set_ready_policy(XIL_AXI_READY_GEN_OSC);
   wready_gen.set_low_time(1);
   wready_gen.set_high_time(2);
   agent.wr_driver.send_wready(wready_gen);
  endtask

此處表示 wready 信號在從機空閑時周期性生成,有效時間為 2/3,我們可以在后續(xù)的波形中看到。

握手波形

我們對主機的激勵代碼進行修改,僅保留單次定制化的讀寫傳輸事務,地址為 0x0,突發(fā)長度為 0。在波形中我們得到了三種情況下的握手信號。

(1)VALID 信號等待 READY 信號

2fc32c3c-25a9-11ed-ba43-dac502259ad0.png

在 tb 中主機并行地啟動讀寫傳輸事務,AR/W VALID 同時置高,在等待從機給出 READY 信號后完成地址與控制信號的傳輸,此時地址為 0x0.

(2)READY 信號等待 VALID 信號

2fd8e180-25a9-11ed-ba43-dac502259ad0.png

主機在發(fā)出讀傳輸事務后,置高 RREADY 信號等待接收從機返回的讀數(shù)據(jù)。在從機置高 RVALID 后,讀傳輸事務完成。

(3)READY 與 VALID 信號同時置起

在設(shè)置從機的 READY 信號類型時,我們設(shè)置為周期性置高 READY,從下圖中可以看到,READY 信號在送出 2 個周期高電平后置低 1 個周期。

2fe625e8-25a9-11ed-ba43-dac502259ad0.png

在這個場景中,寫數(shù)據(jù)通道中的 WREADY 信號正好與 WVALID 信號同時置起,解鎖了最后三種握手姿勢中的最后一種,OK 本文實戰(zhàn)篇收工了。

結(jié)語

本文首先介紹了 AXI VIP 中產(chǎn)生傳輸事務的基本方法?;?demo 修改了一個簡單純粹的例子,并基于這個例子觀察到了握手信號。

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    6713

    瀏覽量

    88300
  • 存儲
    +關(guān)注

    關(guān)注

    13

    文章

    4122

    瀏覽量

    85271
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    915

    瀏覽量

    54651
  • AXI總線
    +關(guān)注

    關(guān)注

    0

    文章

    66

    瀏覽量

    14215

原文標題:深入AXI4 總線實戰(zhàn):Hello AXI handshake

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    AXI VIP設(shè)計示例 AXI接口傳輸分析

    賽靈思 AXI Verification IP (AXI VIP) 是支持用戶對 AXI4 和 AXI4-Lite 進行仿真的 IP。它還可
    發(fā)表于 07-08 09:24 ?1636次閱讀

    如何將AXI VIP添加到Vivado工程中

    在這篇新博文中,我們來聊一聊如何將 AXI VIP 添加到 Vivado 工程中,并對 AXI4-Lite 接口進行仿真。隨后,我們將在仿真波形窗口中講解用于AXI4-Lite
    發(fā)表于 07-08 09:27 ?1913次閱讀

    如何使用AXI VIPAXI4(Full)主接口中執(zhí)行驗證和查找錯誤

    AXI 基礎(chǔ)第 2 講 一文中,曾提到賽靈思 Verification IP (AXI VIP) 可用作為 AXI 協(xié)議檢查工具。在本次第4講中,我們將來了解下如何使用它在
    發(fā)表于 07-08 09:31 ?2589次閱讀

    AXI VIP當作master時如何使用

    AXI VIP當作master時如何使用。 ??新建Vivado工程,并新建block design,命名為:axi_demo 新建axi vip
    的頭像 發(fā)表于 07-27 09:19 ?949次閱讀
    <b class='flag-5'>AXI</b> <b class='flag-5'>VIP</b>當作master時如何使用

    高級可擴展接口(AXI)簡介

    的設(shè)計理念相似,但使用多個專用通道進行讀寫。像它的前身一樣,AXI是基于突發(fā)的,并且在交換數(shù)據(jù)之前使用類似的地址和控制階段。AXI還包括許多新功能,包括亂序事務,未對齊的數(shù)據(jù)傳輸,高速
    發(fā)表于 09-28 10:14

    ARM系列 -- AXI協(xié)議資料匯總(一)

    地址通道中,主機(master)是發(fā)送方,而從機(slave)是接收方;在讀數(shù)據(jù)通道中,主機是接收方,從機是發(fā)送方。3、AXI協(xié)議傳輸事務的結(jié)構(gòu)了解完通道握手的依賴關(guān)系,我們再看看傳輸
    發(fā)表于 04-08 09:34

    ARM系列 -- AXI協(xié)議資料匯總(二)

    1、AXI協(xié)議用AxCACHE來控制事務屬性來看看事務屬性(Transaction Attributes),主要是對cache,buffer和memory controller的規(guī)定。按照協(xié)議,從機
    發(fā)表于 04-08 09:49

    如何使用Xilinx AXI VIP對自己的設(shè)計搭建仿真驗證環(huán)境的方法

    接口進行仿真驗證),提前規(guī)避和發(fā)現(xiàn)一些不滿足AXI總線規(guī)范的設(shè)計問題。本文就跟大家分享如何使用Xilinx AXI VIP對自己的設(shè)計搭建仿真驗證環(huán)境的方法。本文參考的Xilinx官方
    發(fā)表于 10-09 16:08

    如何創(chuàng)建基本AXI4-Lite Sniffer IP以對特定地址上正在發(fā)生的讀寫傳輸事務進行計數(shù)

    這將創(chuàng)建一個附帶 BD 的 Vivado 工程,此 BD 包含 AXI VIP (設(shè)置為 AXI4-Lite 主接口) 和 AXI GPIO IP。這與我們在
    的頭像 發(fā)表于 04-30 16:24 ?2277次閱讀
    如何創(chuàng)建基本<b class='flag-5'>AXI</b>4-Lite Sniffer IP以對特定地址上正在發(fā)生的讀寫<b class='flag-5'>傳輸</b><b class='flag-5'>事務</b>進行計數(shù)

    使用AXI VIP的幾個關(guān)鍵步驟及常見功能

    接口進行仿真驗證),提前規(guī)避和發(fā)現(xiàn)一些不滿足AXI總線規(guī)范的設(shè)計問題。本文就跟大家分享如何使用Xilinx AXI VIP對自己的設(shè)計搭建仿真驗證環(huán)境的方法。
    的頭像 發(fā)表于 10-08 16:07 ?5069次閱讀

    一些高質(zhì)量的AMBA(APB/AHB/AXI) VIP分享

    關(guān)于VIP的好處,估計就不用我安利了,引用最近S家的一句廣告語,“擁有VIP,無懼芯片設(shè)計挑戰(zhàn)”。而在當今的芯片領(lǐng)域,用的最多的可能還是標準總線APB/AHB/AXI等。提到VIP,估
    的頭像 發(fā)表于 12-06 14:58 ?1665次閱讀

    AXI協(xié)議的幾個關(guān)鍵特性

    AXI 協(xié)議有幾個關(guān)鍵特性,旨在改善數(shù)據(jù)傳輸事務的帶寬和延遲
    的頭像 發(fā)表于 05-06 09:49 ?989次閱讀

    調(diào)試AMBA AXI未完成事務

    驗證當今的復雜設(shè)計非常耗時,因為仿真需要長時間運行,并且會執(zhí)行數(shù)百萬個事務。傳統(tǒng)的調(diào)試方法是將數(shù)百萬個數(shù)據(jù)包的所有信息轉(zhuǎn)儲到日志文件中,但是從龐大的日志文件中過濾掉特定的事務總是具有挑戰(zhàn)性的。例如
    的頭像 發(fā)表于 05-26 16:03 ?412次閱讀
    調(diào)試AMBA <b class='flag-5'>AXI</b>未完成<b class='flag-5'>事務</b>

    AXI VIP當作master時如何使用?

    ?AXI接口雖然經(jīng)常使用,很多同學可能并不清楚Vivado里面也集成了AXI的Verification IP,可以當做AXI的master、pass through和slave,本次內(nèi)容我們看下
    的頭像 發(fā)表于 07-27 09:16 ?1398次閱讀
    <b class='flag-5'>AXI</b> <b class='flag-5'>VIP</b>當作master時如何使用?

    AXI傳輸數(shù)據(jù)的過程

    AXI-Stream,其中AXI-Lite和AXI-Full都是基于memory map的形式實現(xiàn)數(shù)據(jù)傳輸(即包括地址總線),而AXI-St
    的頭像 發(fā)表于 10-31 15:37 ?862次閱讀
    <b class='flag-5'>AXI</b><b class='flag-5'>傳輸</b>數(shù)據(jù)的過程