在數(shù)據(jù)處理模塊中,我們經(jīng)常會(huì)涉及數(shù)據(jù)流控反壓。什么是流控呢?簡(jiǎn)單來說就是控制數(shù)據(jù)流停止發(fā)送。常見的流控機(jī)制分為帶內(nèi)流控和帶外流控。帶外流控流控比較簡(jiǎn)單,就是需要一根額外的信號(hào)線來表示流控信息,如ready,1表示可以發(fā)送數(shù)據(jù),0表示不可以發(fā)送數(shù)據(jù).如果取名為fc(flowcontrol),則0表示可以發(fā)送數(shù)據(jù),1表示停止發(fā)送數(shù)據(jù)。帶內(nèi)流控機(jī)制中,流控信息是通過數(shù)據(jù)通路傳輸?shù)?,沒有額外的流控信號(hào)線。帶內(nèi)流控在接口模塊非常常見,例如以太MAC的pause幀和PCIe的信用量機(jī)制。流控系列文章分為4篇,今天是第一篇。首先將最簡(jiǎn)單的流控機(jī)制,fifo與帶外流控。
1、什么是FIFO
FIFO(first in first out)是一種用寄存器reg或者RAM實(shí)現(xiàn)的存儲(chǔ)結(jié)構(gòu),常用于存儲(chǔ)數(shù)據(jù)通道中的數(shù)據(jù)流,采用先入先出的數(shù)據(jù),當(dāng)下游模塊無法及時(shí)處理上流模塊輸出的數(shù)據(jù)時(shí),此時(shí)需要用FIFO暫存數(shù)據(jù),防止數(shù)據(jù)丟失。
2、FIFO的流水反壓機(jī)制
每一個(gè)fifo都有一個(gè)將滿閾值cfg_afull_value(名稱隨意,看得懂就行),通常由寄存器配置模塊cfg_csr提供。當(dāng)fifo內(nèi)的數(shù)據(jù)量達(dá)到或超過cfg_afull_value時(shí),將滿信號(hào)afull從0跳變成1,即fc信號(hào)從0跳變1。上游發(fā)送模塊感知到fc為1時(shí),則停止發(fā)送數(shù)據(jù),有可能是1~2周期就停止,有可能是一個(gè)整包發(fā)送完才停止,根據(jù)代碼實(shí)現(xiàn)才能判斷。在fc跳變成1后,fifo需要能夠緩存路徑上的data以及上游發(fā)送模塊停止發(fā)流之前發(fā)出的所有data。這就是fifo的流控機(jī)制。
圖1:fifo流控示意圖
3、FIFO深度如何設(shè)置
如圖2所示,數(shù)據(jù)data和有效信號(hào)vld從模塊A產(chǎn)生,經(jīng)過N拍延時(shí),輸入到FIFO,F(xiàn)IFO產(chǎn)生將滿信號(hào)afull,經(jīng)過M拍延時(shí)反饋到模塊A,假設(shè)模塊A接收到afull=1時(shí),立即停止發(fā)送數(shù)據(jù)。假設(shè)FIFO深度為fifo_depth,每拍為一個(gè)時(shí)鐘周期。
圖2:fifo深度計(jì)算示意圖
1為了保證FIFO不發(fā)生溢出,請(qǐng)問將滿閾值cfg_afull_value至少應(yīng)該設(shè)置成多少?
2為了充分發(fā)揮FIFO的性能,F(xiàn)IFO深度depth應(yīng)該為多少?
FIFO將滿閾值如何設(shè)置:
當(dāng)FIFO中的數(shù)據(jù)為cfg_afull_value時(shí),產(chǎn)生afull=1,
Afull=1經(jīng)過M拍到達(dá)模塊A,此時(shí)FIFO中應(yīng)該有(cfg_afull_value+M)個(gè)數(shù)據(jù)。
Afull=1到達(dá)模塊A時(shí),模塊A立即停止發(fā)送數(shù)據(jù),此時(shí)電路中還存在N拍數(shù)據(jù)將陸續(xù)送到FIFO中,所以最后FIFO中應(yīng)該為(cfg_afull_value+M+N)個(gè)數(shù)據(jù),
為了保證數(shù)據(jù)不會(huì)溢出,所以應(yīng)該滿足公式fifo_depth>= cfg_afull_value+M+N,因此,將滿閾值應(yīng)該至少為depth_fifo-(M+N)
FIFO深度depth應(yīng)該為多少?
若fifo_depth過小,afull有效之后,fifo中存儲(chǔ)的數(shù)據(jù)將很快被下游數(shù)據(jù)讀取,而新的數(shù)據(jù)又無法及時(shí)到達(dá)FIFO,因此會(huì)造成流水氣泡,影響電路性能。
假設(shè)M=5 ,N=10,假設(shè)fifo_depth=20,則cfg_afull_value=5, 所以在T時(shí)刻,fifo中存了5個(gè)數(shù)據(jù)后afull=1會(huì)有效,在之后的15個(gè)周期內(nèi)會(huì)陸續(xù)存入15個(gè)數(shù)據(jù)。假設(shè)下游模塊B每個(gè)周期讀取FIFO中的一個(gè)數(shù)據(jù),因?yàn)楫?dāng)FIFO內(nèi)的數(shù)據(jù)data_cnt小于5時(shí),afull才會(huì)無效(為0),因此在T+15和T+30的時(shí)刻內(nèi),下游電路B只能讀5個(gè)數(shù)據(jù),因此會(huì)造成數(shù)據(jù)斷流,影響電路性能。
圖3:流控信號(hào)時(shí)序圖
為保證電路性能,在T+15到T+30這個(gè)時(shí)間段內(nèi)應(yīng)該有15個(gè)數(shù)據(jù)可讀,因此cfg_afull_value應(yīng)該不小于15(M+N)。所以FIFO深度應(yīng)該不小于2*(M+N)
結(jié)束語
其實(shí)FIFO的流控方式有個(gè)明顯的弊端,一旦反壓路徑M(見圖2)過大,會(huì)明顯浪費(fèi)資源。
編輯:黃飛
-
寄存器
+關(guān)注
關(guān)注
31文章
5434瀏覽量
124539 -
RAM
+關(guān)注
關(guān)注
8文章
1392瀏覽量
117557 -
fifo
+關(guān)注
關(guān)注
3文章
402瀏覽量
44821 -
Mac
+關(guān)注
關(guān)注
0文章
1117瀏覽量
53120
原文標(biāo)題:4種常見的流控機(jī)制(一) FIFO與流控
文章出處:【微信號(hào):IC學(xué)習(xí),微信公眾號(hào):IC學(xué)習(xí)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
FIFO隊(duì)列原理簡(jiǎn)述
轎車外流場(chǎng)的數(shù)值模擬
轎車外流場(chǎng)的數(shù)值模擬
鏈接后的RX郵箱的FIFO機(jī)制是什么意思?
鏈接CAN RX郵箱的FIFO機(jī)制怎么使用?
流控制機(jī)制,流控制機(jī)制原理是什么?
可重構(gòu)密碼流處理器片外流訪存系統(tǒng)的設(shè)計(jì)
FPGA之FIFO練習(xí)3:設(shè)計(jì)思路
FPGA之FIFO的原理概述
同步FIFO之Verilog實(shí)現(xiàn)
異步FIFO之Verilog代碼實(shí)現(xiàn)案例
XILINX FPGA IP之FIFO Generator例化仿真

評(píng)論