閱讀筆記:pg085 AXI4-Stream infrastructure

Introduction

  • 前言:pg085-axi4stream-infrastructure.pdf 這篇文檔,所介紹不僅僅是 AXI4-Stream Switch 一個IP核,而是分別對下圖所示的幾個IP核進行了說明,閱讀時需要區分。另外,在這些IP核中,數據傳輸的基本單位是傳輸(transfer),類似於數據包的概念,2個以上的 transfer 構成一個 transaction。
  • axi_infrastucture
  • AXI4-Stream Infrastucture IP 核們的主要功能是在 AXI4-Stream master/slave 系統 之間提供高速連接。這些IP核們的功能大概可以劃分三類:buffering,transform,routing。
  • buffering 類的IP核有:
    1. AXI4-Stream Clock Converter:作用是連通兩個不同的時鐘域。
    2. AXI4-Stream Data FIFO:用來實現不同深度的BRAM/LUTRAM。
    3. AXI4-Stream Register Slice:Creates timing isolation and pipelining master and slave using a two-deep register buffer。
  • transform 類IP核有:

    1. AXI4-Stream Combiner:將位寬較窄的TDATA 數據流拼接成更寬的輸出。
    2. AXI4-Stream Data Width Converter:分兩種情況:①拓寬數據寬度:將數個TDATA 混合成更寬的流;②縮小數據寬度:將TDATA拆分爲數個寬度較小的流。
    3. AXI4-Stream Subset Converter。
  • routing 類的IP核有:

    1. AXI4-Stream Broadcaster:將一個傳輸複製到多個輸出。
    2. AXI4-Stream Switch: 將多個master 和 slave 連接在一起,使用 TDEST 信號將傳輸 路由到不同的輸出端口;或者利用可選的 control register 模式進行路由,這種模式需要AXI4-Lite接口進行控制。
    3. AXI4-Stream Interconnect:實際就是利用AXI4-Stream Switch 加上一些其他模塊構成。
  • 從上面可以看出,AXI4-Stream Switch 只是這個pg085 文檔中的一個小分子。下面將着重總結AXI4-Stream Switch 相關的內容,對其他IP核的內容只是一筆帶過,或者一筆也沒有。

1. Overview

1.1 對 AXI4-Stream 接口協議的簡介

  • AXI4-Stream 是一個開放標準接口協議,支持低資源消耗,高帶寬的單向數據傳輸。
  • 對於AXI4-Stream 傳輸通路兩端而言,發送方是master,接收方是slave。

1.2 AXI4-Stream Switch 的基本屬性

  • 支持 1-16個slave,支持1-16個master;
  • 支持三種仲裁依據:基於TLAST信號;基於傳輸的數量(number of transfers);基於超時,即 對連續的 LOW TVALID計數,數量達到預設值則開始新的仲裁。
  • 支持三種仲裁算法:Round-Robin, True Round-Robin, 和 Fixed Priority arbitration 。
  • 支持稀疏連接;
  • 支持基於TDEST base/high 信號對的路由,或者基於AXI4-Lite 接口控制的control register 路由。

2. Pruduct Specification

略過其他IP核的說明,直接總結第16頁的Switch的說明,主要是對兩種路由方式的說明。

  • 兩種路由方式包括 TDEST routing 和 control register based routing。

2.1 AXI4-Stream Switch 的兩種路由方式

2.1.1 TDEST routing

  • TDEST_routing
  • 如上圖所示,在IP覈定制階段,就要先配置各個master的TDEST base/high,從而得到一個解碼錶。在路由時,每個slave接口對輸入數據中TDEST信號進行解碼,然後查找解碼錶找到目的master 接口,之後向目標master 接口的仲裁器發送一個請求。當仲裁器回覆一個“允許”後,slave 開始進行傳輸。
  • Arbitration can be performed at the transfer level or at the transaction level. (A transaction is a series of two or more transfers.) ==> 仲裁可以在兩個層面上進行:可以對每個傳輸進行(transfer level),也可以對數個傳輸進行(transaction level)。如果是在transaction level,可以基於固定長度 或者 TLAST信號 進行仲裁。還有一個可選的超時操作,就是:即使沒有達到固定長度限制 或者 沒收到TLAST 信號,只要連接已經空閒太久了的話,也能終止這個transaction。這個措施在特定的系統拓撲上能夠避免死鎖。
  • TDEST routing 要求TDEST 信號線寬度至少是 log2( master接口數量 )。
    注:此處原文是 log2(Number of Slave Interfaces)。文章中對於slave和master變化多端,因爲對於AXI4-Stream總線而言,發送者就是master,接收者就是slave。在switch內部,原來的相對於外部而言的slave接口是從外部接收數據,然後發送給master接口,之後master接口發送到外部。因爲在內部,數據是從slave發給master,所以對於slave而言,master是它的slave,因此這裏公式中的slave,實際上是通常所說的master。文檔中還有不少地方這樣倒騰slave和master。我們約定master和slave都是相對於外部而言的。

2.1.2 control register based routing

  • control register routing 引入AXI4-Lite 接口來配置路由表。
  • 每個master接口上有一個寄存器,用來控制選擇器。一旦這些寄存器們被程序改寫,會有一個提交寄存器(commit register)把這些寄存器們的值傳入switch。在這期間,AXI4-Stream 接口會保持在reset 狀態。
  • 這個路由模式要求 master 和 slave 之間只有一條路徑。當企圖把同一slave 接口連接到多個master 時,只有編號最低的 master 能夠訪問這個slave。編號指的是每個接口的編號,比如slave 接口依次有 S01 S02 … S15,master 接口依次有 M01 M02 … M15。(前面的TDEST路由沒提到這個限制,或許允許多徑?
  • 未使用的master 接口可能會被置爲disabled,任何未被連接到master的slave 接口都會被 disabled。
  • 另外,對於兩種路由方式,支持 slave 和 master 之間的稀疏連接。當不需要或者要禁止某些連接時,在定製IP核階段可以點掉,從而節省開銷。如果使用的是control register based routing,則無效的路由會被停止;如果使用的是 TDEST 路由,則會丟棄傳輸。當傳輸被丟棄的時候,decode_err信號 會被置爲高。

2.2 Performance

2.2.1 最大頻率

  • 在 Kintex®-7
    FPGA (xc7k325tffg900-1.) 板子上,pg085文檔中的各 AXI4-Stream IP核的最大頻率可以達到250 MHz。對於某些 -2 或者 -3 速度等級的元器件,最大頻率能夠提高 5% - 10%。但是對於 AXI4-Stream Switch,當配置超過大概 4 個master 或者 slave 時,支持的最大頻率會降低 20-25%。(所以,我們 8x8 的話,還能使用這個switch 嗎??

2.2.2 時延

  • 時延使用時鐘週期作計算單位。
  • 時延的計算的始末:從slave 接口將 TVALID 信號置高電平開始,到master 接口首次將 TVALID 信號置爲高電平。
  • 延遲的計算基於 master 接口上的TREADY 信號始終是高電平的假設。(這是因爲只有TREADY 和TVALID 同時爲高電平,傳輸才能開始)
  • 如果要計算 背靠背 傳輸模式的時延,可以通過計算 當slave 接口接收到一個傳輸後,它的 TREADY 處於低電平的時鐘週期數。
  • switch_delay
  • AXI4-Stream Switch 的時延如上圖所示。這是 TDEST 路由模式的時延,而 control register based routing 模式的時延在此未提及。由上圖可見,非背靠背傳輸的時延是 2 個時鐘週期,一個週期用來解碼TDEST信號,另一個週期用來給仲裁器批准(前提是沒有衝突)。對於 背靠背 傳輸,對於一個已經被允許的transaction,其時延是0。背靠背傳輸的transactions 之間的仲裁會導致 1 個時鐘週期的時延。何哉?

2.3 Port Descriptions

  • 具體可以查詢文檔,此處僅僅介紹一些特殊信號。
信號 描述
TSTRB 修飾符,用來指示TDATA中的字節們分別是data byte 還是 position byte
TID data stream identifier,相當於stream ID,指示身份
s_req_suppress 置爲高,則下個仲裁週期忽略這個總線。置爲高時,這個bus不接收下一個仲裁;如果這個bus已經是被仲裁器允許的狀態了的話,它會保持被允許狀態直到仲裁週期結束
s_decode_err 表示剛接收到的傳輸中的TDEST值沒有匹配到任何一個master,然後丟棄這個傳輸;僅在TDEST模式中存在
  • 另外,如果選擇 control register based routing 模式,會引入AXI4-Lite接口,接口信號可查26頁表。

2.4 Register Space

  • 當選擇control register based routing 模式時,switch 會有一張寄存器表,如下表2-8.
  • register_map

2.4.1 Control Register

  • 上面表2-8中的第一行就是Control Register,共32位。這個寄存器的作用是 將master接口選擇器的值(也就是路由寄存器的值)提交給switch。該寄存器描述如下表2-9.
  • control_register
  • 由上可知,該寄存器雖然是32位,實際有用的就 1 位。利用 REG_UPDATE 這一位指示更新,並促使 switch 轉入 reset 狀態並持續大概 16 個時鐘週期。(這是不是就是control register based routing 模式的時延??)

2.4.2 MI_MUX[0-15] Register

  • MI_MUX[0-15] 寄存器如表2-10所示。

  • MI_MUX_REGISTER

  • 每個master 端口都有一個 MI_MUX 寄存器。每個 MIx_MUX 的值控制着 slave 接口的選擇。比如說,MI4_MUX 的值是 0x1 的話,意味以爲着 slave 接口1 會被路由到 master 接口4。
  • MIx_DISABLE 可以設爲1,從而將該master 置爲disabled。
  • 每個slave 接口只能被選擇一次。如果有多於一個 MIx_MUX 的值被設置爲選擇同一slave,那麼序號最低的master 獲得該slave 的控制權,其他master 們被置爲disabled。
  • 各個寄存器的地址偏移量是分配好的,MI0_MUX 的地址偏移是 0x40,MI1_MUX 的地址偏移是 0x44,…,MI15_MUX 的地址偏移是 0x7C.

2.4.3 control register based routing 模式使用示例

  • 假設我們現在要配置一個 4x4 的 switch,slave接口 SI1 路由到 master 接口 MI0,MI1 未使用,SI3 路由到 MI2,SI0 路由到 MI3。則示例代碼如下:
  • example_code
  • 注意最底下 commit register 的時候,在地址偏移 0x0 處寫入 0x2。首先地址偏移 0x0,就是上面表2-8中第一行的control register,也就是表2-9中的寄存器。然後,寫入的數值是 2,從而第二位 REG_UPDATE 的值爲1,觸發一次update,把更改過的 MI_MUX 的值傳入 switch,更新路由表。

3. Clock & Reset

3.1 Clock

  • 沒什麼特別內容,摘錄兩句:
    • An optional feature for clock enables (ACLKEN ports) allows an extra level of control for essentially gating clocks.
    • The optional AXI4-Lite control register interface operates asynchronously from the AXI4-Stream clocks.

3.2 Reset

  • reset 是有些講究的。reset 需要同步到 ACLK。爲了確保在reset 期間不丟失數據,switch 會將所有的TREADY 和TVALID 輸出信號都置爲低電平,直到它們對應的源退出reset 狀態。對於外部的將TREADY 或者 TVALID 信號輸入到switch 的終端們(比如MAC 核),也應該將這兩個信號置爲低電平,直到switch 內部退出 reset 狀態。
  • 推薦:reset時,終端們將TREADY 和 TVALID 信號置爲低電平,應該保證在 8 個時鐘週期內。而ARESETn 信號應該保持至少 16 個時鐘週期,從而確保系統內的其他接口們都能進入reset 狀態,並在reset 狀態結束前有時間去將它們的 TREADY 和 TVALID 輸出信號置爲低。

4.Design Flow Steps

4.1 AXI4-Stream Switch IP核的定製

  • 各個基本信號基本都在前面介紹過,下面主要介紹在選擇兩種路由方式(TDEST路由 和 control register based routing)時,所需要進行的不同配置。

4.1.1 Data Flow Properties

  • TDEST_customize
  • 如上圖所示,當選擇TDEST路由方式時(也就是 Use control register routing 選項設爲 NO),這時候纔會出現Data Flow Properties 的選項們。
  • Arbitrate on Maximum Number of Transfers:這個設置項表示仲裁器最多隔幾個傳輸就把前面的“允許”撤銷,進行新的仲裁。如果設爲0,那麼傳輸數量就是無限的,這時候Arbitrate on TLAST transfer 選項必須設爲 Yes;如果設爲1,那麼每完成一次傳輸,switch 都會撤銷前面的仲裁結果,開始新的仲裁;如果設爲大於 1 的值,比如設爲 n,那麼每完成 n 次傳輸,就重新執行仲裁。
  • Arbitrate on Number of LOW TVALID Cycles:這個選項允許在沒有傳輸的情況下重新執行仲裁。switch 持續對一個被仲裁器“允許”的從master 到slave 的連接進行監視,對它的連續的 LOW TVALID 信號進行計數。如果計數值達到預設值,則重新執行仲裁。如果設爲0,則不進行計數;如果有不止一個slave,不止一個master,而且Arbitrate on Maximum Number of Transfers 也設置爲大於 1 的話,那麼這個選項就不能設爲 0。這是爲了確保不發生死鎖。
  • Arbitrate on TLAST Transfer:如果設爲 Yes,在switch 內部,會有一個從 slave 接口發送到 master 接口的 TLAST 信號,用來指示一個 transaction 的完成。然後仲裁器可以開始新一輪仲裁。這裏TLAST應該和 slave 接口以及 master 接口上顯示的 TLAST信號區分開,那些TLAST 信號是用來和外部設備通信的。
  • 仲裁算法:有三種,如下:
    • True Round-Robin 算法:對於所有出於活躍狀態的slave 接口賦予同等的權重;而且如果一個slave 接口緊跟着一個已經被允許的slave 接口的話,那麼新一輪仲裁中它擁有最高優先級。這種算法確保了每個活躍的slave 擁有同等的帶寬資源。
    • Round-Robin算法:類似與前者,不過新一輪的仲裁中每個slave 接口的優先級一致,而不是緊跟着一個剛被允許的接口的優先級最高。這種算法的帶寬分配有可能不均勻。
    • Fixed-Priority 固定優先級算法:slave接口 S00 擁有最高優先級,S01次之,…,S15 擁有最低優先級。這種算法中,低優先級的接口可能餓死。
    • 爲了區別以上三種算法,舉個例子:比如對於一個有 4 個slave 接口,1 個master 接口的switch,其中 S00,S02 和 S03 在持續不斷地要求傳輸 large transactions。經過一番仲裁之後,最終,在True Round-Robin 算法中,S00,S02 和 S03 都獲得了33% 的帶寬;而在Round-Robin算法中,S00 和 S03 各獲得 25% 的帶寬,而 S02 獲得了 50% 的帶寬,這是因爲 S02 繼承了 S01 的帶寬;而在Fixed-Priority 固定優先級算法 中,S00 獲得了100% 的帶寬,S02 和 S03 都餓死了。
    • 另外,無論哪種算法,如果Arbitrate on maximum number of transfers 選項設爲 1 的話,仲裁器都是不支持來自同一slave 接口的背靠背傳輸的。這裏面有兩層意思:① 如果對於一個特定的master,只有一個slave 接口發來請求的話,則它們之間只能實現 50% 的帶寬,另外 50% 就浪費了; ② 如果加上上一段所描述的場景,使用 固定優先級算法 的話,那麼 S00 和 S02 會獲得 50% 的帶寬,S03 餓死。

4.1.2 Pipeline Registers

  • 僅當Use control register routing設爲 Yes 時,纔有Pipeline Registers這些選項們。
  • Enable Input Pipeline Register:When enabled, the slave interface side of the switch has register slices for each port at the IP boundary。
  • Enable Output Pipeline Register:When enabled, the master interface side of the switch has register slices for each port at the IP boundary.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章