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

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

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

簡(jiǎn)單講解AXI Interconnect IP核的使用方法

冬至子 ? 來(lái)源:Bug記錄 ? 作者:woodfan ? 2023-06-19 15:45 ? 次閱讀

最近需要用到AXI接口的模塊,xilinx的IP核很多都用到了AXI總線進(jìn)行數(shù)據(jù)和指令傳輸。如果有多個(gè)設(shè)備需要使用AXI協(xié)議對(duì)AXI接口的BRAM進(jìn)行讀寫,總線之間該如何進(jìn)行仲裁,通信?

這里我們注意到,Vivado有一個(gè)叫做AXI Interconnect (RTL)的IP核,這個(gè)IP核可以實(shí)現(xiàn)上述功能。

本文將簡(jiǎn)單講解AXI Interconnect IP核的使用方法,設(shè)計(jì)到Vivado的Block Design,仿真等知識(shí)運(yùn)用。

為了簡(jiǎn)化整體例子的復(fù)雜度,整個(gè)測(cè)試工程項(xiàng)目采用了兩個(gè)措施:

  1. 使用Block Design代替了RTL代碼書(shū)寫連線操作
  2. 使用AXI4-Lite總線進(jìn)行測(cè)試,相對(duì)于AXI4,省去了部分信號(hào)
  3. 整個(gè)工程量不大,故沒(méi)有在VCS中仿真,使用Vivado自帶的仿真器做仿真

最終整體的Block Design結(jié)構(gòu)如下圖:

圖片

圖1

簡(jiǎn)單介紹一下圖1中的模塊功能

  1. clk_wiz_0: MMCM,模式時(shí)鐘管理器,這里作用主要是產(chǎn)生100MHz的clk_out1和200MHz的clk_out2,類似鎖相環(huán);
  2. proc_sys_reset_x: 系統(tǒng)復(fù)位模塊,根據(jù)輸入時(shí)鐘和輸入的信號(hào)產(chǎn)生對(duì)應(yīng)的高復(fù)位有效信號(hào)和低復(fù)位有效信號(hào);
  3. axi_interconnect_0: AXI Interconnect,這里管理著2個(gè)Slave接口和1個(gè)Master接口;對(duì)總線傳輸進(jìn)行仲裁,通信,時(shí)序轉(zhuǎn)換等操作。
  4. axi_bram_ctrl_0: Bram Controller,AXI接口的Bram控制器;
  5. blk_mem_gen_0: Block Ram

簡(jiǎn)單介紹下Block Design的AXI Interconnect IP核使用(因?yàn)锽lock Design可以實(shí)現(xiàn)自動(dòng)連線,自動(dòng)設(shè)置位寬等信息,所以設(shè)置內(nèi)容沒(méi)有AXI Interconnect RTL多,后者專用于Verilog代碼中使用)

圖片

圖2

這個(gè)界面設(shè)置Slave Interface的數(shù)量,與Master 模塊的數(shù)量對(duì)應(yīng);Master Interface數(shù)量,與 Slave模塊的數(shù)量對(duì)應(yīng),如果想不明白可以看圖6。

圖片

圖3

圖片

圖4

這里使能S/M_AXI端口的Register Slice和Data FIFO功能,Slice對(duì)時(shí)序收斂有一定作用,但是數(shù)據(jù)輸出會(huì)延遲一個(gè)周期;Data FIFO,顧名思義,可以實(shí)現(xiàn)數(shù)據(jù)緩存和packet mode。

圖片

圖5

勾選圖2的Advanced Options后,可以進(jìn)入圖5界面,這里可以設(shè)置S_AXI端口的優(yōu)先級(jí),優(yōu)先級(jí)值越高,越優(yōu)先,平行優(yōu)先級(jí)的端口會(huì)使用輪詢的方式處理端口請(qǐng)求。

圖片

圖6

整個(gè)IP核的外部端口,Sxx_AXI連接Master模塊的M_AXI接口;Mxx_AXI連接Slave模塊的S_AXI接口;ACLK是IP核的運(yùn)行時(shí)鐘,ARESETN是IP核的異步低有效復(fù)位信號(hào)。

Sxx_ACLK是對(duì)應(yīng)總線的總線時(shí)鐘,Sxx_ARESETN是對(duì)應(yīng)總線的異步低有效復(fù)位信號(hào)。同理,Mxx_ACLK是對(duì)應(yīng)總線的總線時(shí)鐘,Mxx_ACLK_ARESETN是對(duì)應(yīng)總線的異步低有效復(fù)位信號(hào)。

圖中出現(xiàn)了4個(gè)時(shí)鐘端口,這4個(gè)時(shí)鐘端口的頻率可以各不相同。曾經(jīng)我很疑惑ACLK的時(shí)鐘頻率到底應(yīng)該如何設(shè)置,找到了一個(gè)在Xilinx論壇的帖子,上面的建議是連接到任一Sxx_ACLK或者M(jìn)xx_ACLK,雖然ACLK可以隨意連接到一個(gè)時(shí)鐘頻率信號(hào)。

圖1的輸入端口有S00_AXI,S01_AXI的接口,clk_100MHz的時(shí)鐘輸入信號(hào),reset_rtl_0的高有效復(fù)位信號(hào);輸出有100MHz的clk_out1,200MHz的clk_out2;

然后將Block Design生成為verilog文件,供其他的verilog文件直接實(shí)例化。這里我們利用留出的clk_out1,clk_out2,s00_axi,s01_axi接口,對(duì)Bram進(jìn)行簡(jiǎn)單的地址讀寫操作,讀寫時(shí)鐘分別為200MHz/100MHz。

Testbench里面,除了必要的initial和時(shí)鐘賦值外,主要的還是對(duì)s00_axi,s01_axi的控制。

s00_axi在100MHz時(shí)鐘域下,我們單獨(dú)對(duì)它進(jìn)行寫操作。

在設(shè)計(jì)過(guò)程中,我還發(fā)現(xiàn)了一個(gè)奇怪的現(xiàn)象,原本的設(shè)計(jì)中,握手信號(hào)想等著s00_axil_awready信號(hào)拉高之后,這邊的s00_axil_awvalid再拉高。結(jié)果發(fā)現(xiàn)awready遲遲沒(méi)有拉高,在看完參考資料1后,才知道需要Master這側(cè)的valid先拉高,否則slave的ready信號(hào)不一定會(huì)拉高;所以s00_axil_awvalid, s01_axil_arvalid設(shè)置為1 。

100MHz頻率下,s00_axil_awaddr 在寫入數(shù)據(jù)完成(s00_axil_wready & s00_axil_wvalid)后,地址會(huì)加4;地址寫到1024后會(huì)重新歸零。

可以看到,等到s00_axil_wready拉高,Master會(huì)把s00_axil_wvalid拉高,并生成一個(gè)隨機(jī)數(shù)寫入BRAM;然后s00_axil_wvalid拉低。

always @ (posedge clk_out1) begin
if (s00_axil_wready & s00_axil_wvalid)
s00_axil_awaddr <= (s00_axil_awaddr < 32'd1023) ? s00_axil_awaddr + 32'd4 : 0;

if (s00_axil_wready & ~s00_axil_wvalid) begin
s00_axil_wvalid <= 1'b1;
s00_axil_wdata <= $random;
end
else
s00_axil_wvalid <= 1'b0;
end

200MHz頻率下,s01_axil_araddr在讀取數(shù)據(jù)完成后(s01_axil_rvalid & s01_axil_rready),會(huì)加4;同樣,地址寫到1024后會(huì)重新歸零。

可以看到,等到s01_axil_rvalid拉高,s01_axil_rready會(huì)拉高,讀取出對(duì)應(yīng)數(shù)據(jù),然后拉低s01_axil_rready;

always @ (posedge clk_out2) begin
s01_axil_arvalid <= 1'b1;
if (s01_axil_rvalid & s01_axil_rready)
s01_axil_araddr <= (s01_axil_araddr < 32'd1023) ? s01_axil_araddr + 32'd4 : 0;

if (s01_axil_rvalid & ~s01_axil_rready) begin
s01_axil_rready <= 1'b1;

end
else
s01_axil_rready <= 1'b0;
end

當(dāng)然,為什么兩個(gè)不同的總線能夠?qū)σ粋€(gè)BRAM進(jìn)行操作,這里涉及到地址分配的問(wèn)題;

圖片

圖7

兩個(gè)總線可以訪問(wèn)到同一個(gè)地址,所以自然可以對(duì)同一個(gè)BRAM進(jìn)行操作;那有人可能問(wèn),假如我操作s00訪問(wèn)的地址超過(guò)了分配的地址范圍呢,那么s00_axil_bresp會(huì)等于2'd3,告知地址錯(cuò)誤的問(wèn)題。

圖片

圖8

由于設(shè)計(jì)問(wèn)題,讀取的地址相比寫入數(shù)據(jù)落后幾個(gè)時(shí)鐘周期,這樣可以將剛寫入的數(shù)據(jù)讀出來(lái)。

這個(gè)實(shí)驗(yàn)表明AXI Interconnect不僅是總線仲裁器,還幫助時(shí)鐘域不同的AXI總線完成了時(shí)序轉(zhuǎn)換。除此之外,AXI Interconnect還可以實(shí)現(xiàn)數(shù)據(jù)位寬轉(zhuǎn)換,AXI協(xié)議轉(zhuǎn)換,例如AXI4/3轉(zhuǎn)AXI4-Lite,AXI4轉(zhuǎn)AXI3等;增加Register Slice改善時(shí)序,增加數(shù)據(jù)fifo緩存數(shù)據(jù);

AXI Interconnect最多支持16 MI與16 SI組合。不過(guò),當(dāng)配置只有一個(gè)SI接口時(shí),MI接口最多可以設(shè)置到64位。

其中的仲裁采用的輪詢調(diào)度算法,當(dāng)然,IP核可以設(shè)置每個(gè)SI的優(yōu)先級(jí),值越高,優(yōu)先級(jí)越高;

當(dāng)然,這篇文章只是為了簡(jiǎn)單介紹AXI Interconnect的作用,更復(fù)雜更多的功能還有待發(fā)掘。當(dāng)然,功能強(qiáng)大意味著復(fù)雜,比如根據(jù)參考資料2,AXI4協(xié)議中的ID信號(hào),如果在AXI Interconnect中使用不當(dāng),可能造成仲裁器死鎖。

圖片

圖9

看上圖,在我的示例中,ACLK與S01_ACLK同源同頻,所以示意圖中,s01_couples從S_AXI直通到M_AXI;而s00_couples則添加了一個(gè)AXI Clock Converter做時(shí)序轉(zhuǎn)換;在m00_couples中,又使用了AXI Clock Converter將ACLK轉(zhuǎn)換到M00_ACLK;

至此,簡(jiǎn)單總結(jié)下在AXI通信中使用AXI Interconnect的好處:

  1. 真正實(shí)現(xiàn)了總線通信,N Master模塊與M Slave模塊的通信,減少了相互間通信的復(fù)雜度
  2. 內(nèi)部實(shí)現(xiàn)時(shí)鐘域轉(zhuǎn)換,不需要外部的過(guò)度干預(yù)
  3. 內(nèi)部可實(shí)現(xiàn)FIFO等,免去了很多場(chǎng)景下需要FIFO,Register,位寬轉(zhuǎn)換,協(xié)議轉(zhuǎn)換的需求
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16037

    瀏覽量

    176693
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    385

    瀏覽量

    59627
  • VCS
    VCS
    +關(guān)注

    關(guān)注

    0

    文章

    78

    瀏覽量

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

    關(guān)注

    0

    文章

    66

    瀏覽量

    14230
  • BRAM
    +關(guān)注

    關(guān)注

    0

    文章

    41

    瀏覽量

    10927
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Designing High-Performance Video Systems with the AXI Interconnect

    can be created using Xilinx AXI IP. The use of AXI Interconnect, Memory Interface Generator
    發(fā)表于 01-26 18:57

    有人知道為什么MIG IP中的AXI協(xié)議。為什么沒(méi)有AXI_WID這個(gè)信號(hào)呢?

    有人知道為什么MIG IP中的AXI協(xié)議。為什么沒(méi)有AXI_WID這個(gè)信號(hào)呢。
    發(fā)表于 04-13 09:22

    如何在IP_catalog中創(chuàng)建可見(jiàn)的axi_interconnect_v2.1?

    你好。Vivado 2015.1 IP目錄包含AXI_interconnect V1.7(默認(rèn)情況下),同時(shí)DIR .. / data / IP / xilinx包含文件
    發(fā)表于 04-08 10:30

    PCIE項(xiàng)目中AXI4 IP例化詳解

    4和PCIE之間有什么聯(lián)系,敬請(qǐng)關(guān)注我們的連載系列文章。在本篇文章中暫時(shí)先不講解AXI4協(xié)議,先來(lái)分享例化AXI4的自定義IP詳細(xì)步驟。一
    發(fā)表于 12-13 17:10

    三個(gè)不同AXI IP的實(shí)現(xiàn)的方法_性能的對(duì)比及差異的分析

    本文先總結(jié)不同AXI IP的實(shí)現(xiàn)的方法,性能的對(duì)比,性能差異的分析,可能改進(jìn)的方面。使用的硬件平臺(tái)是Zedboard。 不同的AXI總線卷
    的頭像 發(fā)表于 06-29 14:34 ?8134次閱讀
    三個(gè)不同<b class='flag-5'>AXI</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>的實(shí)現(xiàn)的<b class='flag-5'>方法</b>_性能的對(duì)比及差異的分析

    基于MicroBlaze的AXI總線實(shí)時(shí)時(shí)鐘IP設(shè)計(jì)

    作者:薩其日娜 內(nèi)蒙古魯電電力工程有限公司 摘要: 應(yīng)用MicroBlaze軟作為CPU的硬件平臺(tái),在此平臺(tái)上設(shè)計(jì)了基于AXI總線的通用實(shí)時(shí)時(shí)鐘IP。給出了創(chuàng)建
    發(fā)表于 11-17 16:34 ?3879次閱讀

    AXI接口簡(jiǎn)介_(kāi)AXI IP的創(chuàng)建流程及讀寫邏輯分析

    本文包含兩部分內(nèi)容:1)AXI接口簡(jiǎn)介;2)AXI IP的創(chuàng)建流程及讀寫邏輯分析。 1AXI簡(jiǎn)介(本部分內(nèi)容參考官網(wǎng)資料翻譯) 自定義
    的頭像 發(fā)表于 06-29 09:33 ?1.6w次閱讀
    <b class='flag-5'>AXI</b>接口簡(jiǎn)介_(kāi)<b class='flag-5'>AXI</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>的創(chuàng)建流程及讀寫邏輯分析

    自定義sobel濾波IP,IP接口遵守AXI Stream協(xié)議

    自定義sobel濾波IP IP接口遵守AXI Stream協(xié)議
    的頭像 發(fā)表于 08-06 06:04 ?3836次閱讀

    如何使用MicroBlaze調(diào)用AXI IP詳細(xì)解析

    在一個(gè)項(xiàng)目中,當(dāng)你使用microblaze作為控制器來(lái)進(jìn)行系統(tǒng)調(diào)度的時(shí)候,一般是建議將所有模塊封裝成AXI形式的IP,這樣好管理,也容易調(diào)試。
    的頭像 發(fā)表于 04-27 11:17 ?6555次閱讀
    如何使用MicroBlaze調(diào)用<b class='flag-5'>AXI</b> <b class='flag-5'>IP</b><b class='flag-5'>核</b>詳細(xì)解析

    Xilinx FPGA里面的AXI DMA IP簡(jiǎn)單用法

    本文以浮點(diǎn)數(shù)Floating-point IP將定點(diǎn)數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)為例,詳細(xì)講解AXI DMA IP
    的頭像 發(fā)表于 02-16 16:21 ?9254次閱讀
    Xilinx FPGA里面的<b class='flag-5'>AXI</b> DMA <b class='flag-5'>IP</b><b class='flag-5'>核</b>的<b class='flag-5'>簡(jiǎn)單</b>用法

    AXI4-Stream Video 協(xié)議和AXI_VDMA的IP介紹

    本文主要介紹關(guān)于AXI4-Stream Video 協(xié)議和AXI_VDMA的IP相關(guān)內(nèi)容。為后文完成使用帶有HDMI接口的顯示器構(gòu)建圖像視頻顯示的測(cè)試工程做準(zhǔn)備。
    的頭像 發(fā)表于 07-03 16:11 ?8048次閱讀

    Video In to AXI4-Stream IP知識(shí)介紹

    大家好!今日分享一些關(guān)于Video In to AXI4-Stream IP 的知識(shí)。在具體學(xué)習(xí)IP的過(guò)程中,我也將分享一些關(guān)于如何看x
    的頭像 發(fā)表于 05-18 14:55 ?1508次閱讀
    Video In to <b class='flag-5'>AXI</b>4-Stream <b class='flag-5'>IP</b><b class='flag-5'>核</b>知識(shí)介紹

    自定義AXI-Lite接口的IP及源碼分析

    在 Vivado 中自定義 AXI4-Lite 接口的 IP,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 LED 控制功能,并將其掛載到 AXI Interconnect
    發(fā)表于 06-25 16:31 ?3044次閱讀
    自定義<b class='flag-5'>AXI</b>-Lite接口的<b class='flag-5'>IP</b>及源碼分析

    LogiCORE JTAG至AXI Master IP簡(jiǎn)介

    LogiCORE JTAG至AXI Master IP是一個(gè)可定制的,可生成AXIAXI總線可用于處理和驅(qū)動(dòng)系統(tǒng)中FPGA內(nèi)部的AXI
    的頭像 發(fā)表于 10-16 10:12 ?989次閱讀
    LogiCORE JTAG至<b class='flag-5'>AXI</b> Master <b class='flag-5'>IP</b><b class='flag-5'>核</b>簡(jiǎn)介

    Xilinx JTAG to AXI Master IP的用法

    無(wú)意間發(fā)現(xiàn)了JTAG to AXI Master IP,發(fā)現(xiàn)這個(gè)東西對(duì)于FPGA單獨(dú)調(diào)試應(yīng)該比較有用,故而來(lái)研究了一番,發(fā)現(xiàn)這個(gè)東西切實(shí)很好用而且也比較簡(jiǎn)單。想起我之前為了構(gòu)造一個(gè)指
    的頭像 發(fā)表于 10-24 15:29 ?54次閱讀
    Xilinx JTAG to <b class='flag-5'>AXI</b> Master <b class='flag-5'>IP</b><b class='flag-5'>核</b>的用法