AXI4 STREAM DATA FIFO使用
掃描二維碼
隨時隨地手機看文章
AXI4 STREAM DATA FIFO是輸入輸出接口均為AXIS接口的數(shù)據(jù)緩存器,和其他fifo一樣是先進(jìn)先出形式。可以在跨時鐘域的應(yīng)用中用于數(shù)據(jù)緩沖,避免亞穩(wěn)態(tài)出現(xiàn)。支持?jǐn)?shù)據(jù)的分割和數(shù)據(jù)拼接。在使用該IP核之前,我們應(yīng)該熟悉該IP核的各種參數(shù)設(shè)定的含義。
上圖則是該IP核的參數(shù)設(shè)定界面(開發(fā)環(huán)境為VIVADO2015.1),點擊左上角的Documentation,下拉框中選擇Product Guide,打開該IP核的說明文檔。
鏈接如下:
http://www.xilinx.com/support/documentation/ip_documentation/axis_infrastructure_ip_suite/v1_1/pg085-axi4stream-infrastructure.pdf
Component Name:
元件名字:該IP核生成后的模塊名;
FIFO Depth:
FIFO深度:該設(shè)定為指定例化FIFO的深度。當(dāng)FIFO的深度為16或者32時利用基于FIFO的LUTRAM,其他深度的FIFO將利用BLOCK RAM實現(xiàn)。
Enable Packet Mode:
使能包模式:設(shè)置為Yes將使能包模式。此項設(shè)定需要TLAST信號被使能。FIFO的操作在包模式下被修改為存儲傳送的數(shù)據(jù),知道TLAST信號被斷言(響應(yīng))。當(dāng)TLAST信號被響應(yīng)或者FIFO滿了,存儲的傳送數(shù)據(jù)將被送至AXI4-Stream master interface。
Asynchronous Clocks:
異步時鐘:如果設(shè)定了Yes,S_AXIS_ACLK和M_AXIS_ACLK被設(shè)定為與彼此異步,該IP將在異步模式進(jìn)行操作。
Synchronization Stages across Cross Clock Domain Logic:
跨交叉時鐘域邏輯的同步階段:
當(dāng)S_AXIS_ACLK和M_AXIS_ACLK是與彼此異步的,此項參數(shù)指定了用于跨時鐘域邏輯的同步階段的階數(shù)。增加這個值可以增加設(shè)計的MTBF,但是會增加延遲時間和邏輯利用。參考the FIFO Generator Product Guide(PG075)獲得該參數(shù)的更多信息。
ACLKEN Conversion Mode
ACLKEN轉(zhuǎn)換模式:
這個下拉選項為ACLKEN信號的轉(zhuǎn)換模式。當(dāng)ACLKEN轉(zhuǎn)換執(zhí)行時會消耗額外的延遲和邏輯。這個選項有:
None - 這里沒有ACLKEN信號關(guān)聯(lián)于IP。
S AXIS Only - 一個S_AXIS_ACLKEN信號關(guān)聯(lián)到S_AXIS_ACLK時鐘信號和沒M_AXIS_ACLKEN信號。
M AXIS Only - 一個M_AXIS_ACLKEN信號關(guān)聯(lián)到M_AXIS_ACLK時鐘信號和沒有S_AXIS_ACLKEN信號。
S AXIS & M AXIS - 兩邊時鐘都有 ACLKEN信號關(guān)聯(lián)到他們。
Signal Properties:
信號特性:
當(dāng)使用IP集成器是,Vivado IDE會自動計算這些參數(shù)的值。
TDATA Width(bytes):
TDATA位寬(字節(jié)為最小單位):
該參數(shù)指定了所有AXI4-Stream interfaces中的TDATA信號的位寬,以字節(jié)為最小單位。該參數(shù)為整數(shù),在0到512之間。設(shè)為0將省略TDATA信號。如果TDATA信號被省略,TKEEP和TSTRB信號也會被省略。接口數(shù)據(jù)的位寬按bits計算,需要乘以8。
Enable TSTRB:
使能TSTRB信號
如果設(shè)定為Yes,這個參數(shù)指定是否在所有AXI4-Stream interfaces使用可選的TSTRB信號。這個選項只能在TDATA Width(bytes)參數(shù)大于0時才可以使能。
Enable TKEEP:
使能TKEEP信號
如果設(shè)定為Yes,這個參數(shù)指定是否在所有AXI4-Stream interfaces使用可選的TKEEP信號。這個選項只能在TDATA Width(bytes)參數(shù)大于0時才可以使能。
Enable TLAST:
使能TLAST:
如果設(shè)定為Yes,這個參數(shù)指定是否在所有AXI4-Stream interfaces使用可選的TLAST信號。對于TLAST信號要重點說明,因為在使用STREAM FIFO時TLAST的作用特別的重要。對于STREAM FIFO來說,TLAST信號的作用是指示一次傳輸數(shù)據(jù)流的最后一個數(shù)據(jù),也指示著該數(shù)據(jù)流的結(jié)束。其會記錄下TLAST信號的位置,及當(dāng)其SLAVE接口(SFIFO的數(shù)據(jù)寫入接口)的某一個數(shù)據(jù)寫入的同時TLASET信號也為高的話,當(dāng)MASTER接口(SFIFO的數(shù)據(jù)讀出接口)讀出該數(shù)據(jù)的同時也會將TLAST信號拉高??偨Y(jié)起來就是,進(jìn)的數(shù)據(jù)有TLAST,該數(shù)據(jù)出的時候就會有TLAST。
TID Width(bits):
TID位寬(比特為單位):
如果該參數(shù)大于0,這個參數(shù)指定是否在所有的AXI4-Stream interfaces中使用TID信號。值大于0省略這個信號。
TDEST Width(bits):
TDEST位寬(bits):
如果該參數(shù)大于0,這個參數(shù)指定是否在所有的AXI4-Stream interfaces中使用TDEST信號。值大于0省略這個信號。
TUSER Width(bits):
TUSER 位寬(bits):
如果該參數(shù)大于0,這個參數(shù)指定是否在所有的AXI4-Stream interfaces中使用TDEST信號。值大于0省略這個信號。
這里重點說下Synchronization Stages across Cross Clock Domain Logic,這個參數(shù)的出現(xiàn)是由于在進(jìn)行跨時鐘域操作時,即FIFO的讀寫時鐘異步時,在讀時鐘域與寫時鐘域進(jìn)行數(shù)據(jù)交互時可能會存在亞穩(wěn)態(tài),而通過在數(shù)據(jù)交換節(jié)點插入連續(xù)的寄存器進(jìn)行時鐘同步,而這個參數(shù)的數(shù)值就是插入的同步寄存器的個數(shù),或者叫做階數(shù)。階數(shù)越高,MTBF(Mean Time Between Failures,平均無故障時間)越大,則出現(xiàn)亞穩(wěn)態(tài)的幾率越小,但是同時也會增加信號傳輸?shù)难舆t和增加額外的邏輯資源。
還有一個參數(shù)Packet Mode,當(dāng)開啟整包發(fā)送模式后,F(xiàn)IFO會一直檢測當(dāng)前接收數(shù)據(jù)量,只有當(dāng)數(shù)據(jù)量到達(dá)FIFO的深度時,即FIFO滿的時候(在實際測試中發(fā)現(xiàn)當(dāng)STREAM FIFO滿的時候不會輸出TLAST信號),或者是FIFO的SLAVE接口接收到TLAST信號時,該FIFO的MASTER接口才可以輸出有效數(shù)據(jù),及才會允許后級模塊接收FIFO內(nèi)數(shù)據(jù)。
在使用STREAM FIFO的應(yīng)用中只應(yīng)用到了TDATA、TVALID、TREADY以及TLAST信號,所以接下來對STREAM FIFO的功能說明只要是針對只是用以上信號的條件下的。
STREAM FIFO的復(fù)位信號為低有效,當(dāng)復(fù)位信號拉高后的第三個時鐘上升沿s_axis_tready信號會自動拉高,該fifo處于等待接收數(shù)據(jù)狀態(tài)。
當(dāng)STREAM FIFO的前端有數(shù)據(jù)需要發(fā)送時,在s_axis_tready為高時拉高s_axis_tvalid信號,在下個時鐘上升沿,STREAM FIFO便開始收數(shù)。
當(dāng)STREAM FIFO內(nèi)部的數(shù)據(jù)達(dá)到fifo的深度時,在接收進(jìn)最后一個數(shù)據(jù)的同時,s_axis_tready將會變?yōu)榈?,告訴前級fifo已滿,不能在收數(shù)據(jù)了。其實S_axis_tready信號相當(dāng)于普通FIFO的full與empty信號的綜合體。
對STREAM FIFO 的MASTER接口為FIFO的數(shù)據(jù)輸出接口。當(dāng)STREAM FIFO接收到數(shù)據(jù)并傳到MASTER接口上時,m_axis_tvalid便會拉高,由于使用的STREAM FIFO為異步時鐘模式,數(shù)據(jù)寫入時鐘比數(shù)據(jù)讀出時鐘要快,而讀數(shù)據(jù)計數(shù)器的刷新是在讀數(shù)據(jù)時鐘的上升沿,所以可以從圖中看到讀數(shù)據(jù)計數(shù)器的值是跳躍上升的。當(dāng)FIFO的后端將m_axis_tready拉高時,MASTER接口便會將數(shù)據(jù)送出去。
最后再來觀測下TLAST信號:
為了說明TLAST信號的傳輸特點,我們在SLAVE的寫入數(shù)據(jù)時在數(shù)據(jù)1023 和數(shù)據(jù)1024的時候?qū)_axis_tlast拉高。然后打開MASTER接口將STREAM FIFO內(nèi)部的數(shù)據(jù)讀出。
從MASTER接口的數(shù)據(jù)流可以看出,將數(shù)據(jù)1023和數(shù)據(jù)1024讀出的同時也會將m_axis_tlast信號拉高。
最后說明一下STREAM FIFO的Packet mode包模式,開啟包模式必須是采用同步時鐘,而且TLAST信號必須使用。
在包模式下,數(shù)據(jù)將是以包的單位,而包內(nèi)數(shù)據(jù)的數(shù)量由TVALID、TREADY和TLAST信號控制,TVALID信號和TREADY信號一起為包數(shù)據(jù)的開始,TLAST信號為包數(shù)據(jù)的結(jié)束。當(dāng)STREAM FIFO里面沒有收到一包的數(shù)據(jù)時,F(xiàn)IFO的MASTER接口將處于關(guān)閉狀態(tài),即m_axis_tvalid將一直保持為低。當(dāng)STREAM FIFO內(nèi)部數(shù)據(jù)有至少一包及以上的數(shù)據(jù)時,MASTER接口將開啟,m_axis_tvalid將會拉高,當(dāng)后級將存的包數(shù)據(jù)取完之后,MASTER接口又將關(guān)閉,m_axis_tvalid將拉低,直到接收到下一包數(shù)據(jù)之后才會重新打開。





