問(wèn)題提出:ready時(shí)序如何優(yōu)化?
在valid/ready 握手協(xié)議中,valid 與 data的時(shí)序優(yōu)化比較容易理解。
但是有時(shí)候,關(guān)鍵路徑是在ready信號(hào)上,如何對(duì)ready信號(hào)打拍呢?
首先將把目標(biāo)設(shè)計(jì)想象成一個(gè)黑盒子,如圖1所示,我們的目標(biāo)是將READY_DOWN通過(guò)打拍的方法獲得時(shí)序優(yōu)化。

(圖1)
嘗試直接對(duì)ready打一拍

(僅示例,非verilog代碼。下同)
這樣是行不通的。
一個(gè)簡(jiǎn)單的例子(case 1)就是你讓READY_DOWN像一個(gè)時(shí)鐘一個(gè),間隔一個(gè)cycle起來(lái)一次,那么VALID_UP && READY_UP 與 VALID_DOWN && READY_DOWN無(wú)法同步,數(shù)據(jù)無(wú)法傳輸下去。
思路:將其分解成兩個(gè)interfaces
將ready打拍的邏輯想象成一個(gè)黑盒子,去分析這個(gè)黑盒子的設(shè)計(jì),分為up interface 和down interface將問(wèn)題細(xì)化:
-
up interface 有VALID_UP, DATA_UP, READY_UP
-
down interface 有VALID_DOWN, DATA_DOWN, READY_DOWN
可以總結(jié)成下面的樣子:

如果去解決剛才例子(case 1),那么這個(gè)黑盒子:
當(dāng)READY_UP為高的時(shí)候,可以接受數(shù)據(jù);
當(dāng)READY_DOWN為高的時(shí)候, 如果我們有數(shù)據(jù)可發(fā)的話 ,我們可以向downstream發(fā)送數(shù)據(jù);
是不是很像一個(gè)FIFO?
用FIFO去解決
將一個(gè)FIFO插在黑盒子這里,那么就會(huì)變成這樣子:

(圖2)
VALID_UP/READ_YUP ==> FIFO ==> VALID_DOWN/READY_DOWN
也就是:

現(xiàn)在問(wèn)題變成了:如何設(shè)計(jì)這個(gè)FIFO呢?
- 這個(gè)FIFO深度多少?
- 怎么設(shè)計(jì),能夠保證READY_UP是READY_DOWN打過(guò)一拍的呢?
FIFO設(shè)計(jì)多深?
因?yàn)楸旧韛alid/ready協(xié)議是 反壓協(xié)議 ( 也就是READY_UP為0的時(shí)候,不會(huì)寫(xiě)FIFO,而不會(huì)導(dǎo)致FIFO溢出 )而且此處的讀寫(xiě)時(shí)鐘是同一個(gè)時(shí)鐘,是一個(gè)同步FIFO,所以FIFO深度是1或者2就足夠了。
深度是1還是2要看極端情況下需要存儲(chǔ)幾筆數(shù)據(jù)。
簡(jiǎn)單分析可以知道,只有一種情況會(huì)去向FIFO中存儲(chǔ)數(shù)據(jù):
- READY_UP是1,可以從upstream接收數(shù)據(jù)
- 同時(shí)READY_DOWN是0,不可以向downstream發(fā)送數(shù)據(jù)
這種情況在極端情況下最多維持多久呢?
答案是: 一個(gè)周期 。
因?yàn)槿绻鹀ycle a 時(shí):READY_DOWN=0,那么cycle a+1時(shí),READY_UP變?yōu)?了,開(kāi)始反壓,所以只用存一個(gè)數(shù)就夠了。
所以設(shè)計(jì)為一個(gè)深度為1的FIFO就可以了。
深度為1的FIFO有很多特點(diǎn),設(shè)計(jì)起來(lái)比較簡(jiǎn)單。比如:wr_ptr/rd_ptr始終指向地址0,所以我們可以刪掉wr_ptr和rd_ptr,因?yàn)槭且粋€(gè)常值0。
簡(jiǎn)單的depth-1 FIFO實(shí)現(xiàn)
使用depth-1 FIFO傳輸數(shù)據(jù),可以這樣設(shè)計(jì):

這解決了READY打拍的問(wèn)題。但是這里有一些可以改進(jìn)的地方,比如:
- 是不是可以擠掉多于的氣泡?
- 在FIFO為空的時(shí)候,數(shù)據(jù)是不是可以直接bypass FIFO?
無(wú)氣泡傳輸
具體的說(shuō),就是既然你這里有個(gè)深度為1的FIFO了,那么我是不是可以利用起來(lái),放點(diǎn)數(shù)據(jù)啊……
當(dāng)READY_DOWN持續(xù)是0的時(shí)候,READY_UP依然可以有一個(gè)cycle去接收一筆數(shù)據(jù),把FIFO資源利用起來(lái):

同樣的原因,在RESET情況下,READY_UP可以為1,可以將復(fù)位值修改。
那么FIFO穿越呢?
FIFO穿越
考慮一個(gè)特殊情況(case 2):
假設(shè)READY_DOWN在復(fù)位之后始終為1,
然后某個(gè)時(shí)刻開(kāi)始VALID_UP為1了。
是不是每個(gè)周期,數(shù)據(jù)都可以直接傳下來(lái)而不用進(jìn)入FIFO,即使READY_DOWN打過(guò)一拍?
換句話說(shuō): ***如果READY_UP=1, READY_DOWN=1, FIFO是空的這種情況下,數(shù)據(jù)可以直通*** 。
- 上文特殊情況(case 2),READY_DOWN/READY_UP一直是1,顯然可以。
- READY_UP從0到1的跳變:READY_DOWN也會(huì)在前一周期有一個(gè)從0到1的跳變。在READY_DOWN為0時(shí),有一筆數(shù)據(jù)存到FIFO里邊(無(wú)氣泡傳輸);當(dāng)READY_DOWN在時(shí)刻a從0變到1時(shí),READY_UP在時(shí)刻a+1也會(huì)從0變?yōu)?。如果此時(shí)READY_DOWN也為1,可以直通,不用進(jìn)入FIFO。也就是:

注意在直通時(shí),我們不希望數(shù)據(jù)進(jìn)入FIFO:

將所有這些結(jié)合起來(lái):



(注:代碼未經(jīng)詳細(xì)驗(yàn)證)
換一種思路
經(jīng)過(guò)上面對(duì)FIFO的分析,我們可以總結(jié)起來(lái),主要是以下幾點(diǎn):
- 加入一個(gè)深度為1的同步FIFO,這個(gè)FIFO在READY_DOWN為0,且READY_UP為1時(shí)暫存一個(gè)數(shù)據(jù);
- 在READY_DOWN從0->1時(shí),F(xiàn)IFO里邊的數(shù)據(jù)先輸出到下級(jí);
- 如果READY_DOWN繼續(xù)為1,數(shù)據(jù)可以繞過(guò)FIFO直通;
深度為1的FIFO(不管是同步還是異步FIFO),都是一個(gè)特殊的邏輯單元。
對(duì)于深度為1的同步FIFO,其實(shí)就是一拍寄存器打拍。
所以,我們可以這樣重新設(shè)計(jì):
-
加一級(jí)寄存器作為buffer(實(shí)際上就是深度為1的FIFO)
-
當(dāng)以下條件滿足,這一級(jí)寄存器會(huì)暫存一級(jí)數(shù)據(jù):
2.1 READY_DOWN是0,并且
2.2 READY_UP是1,并且
2.3 VALID_UP是1;
也就是:

- 當(dāng)READY_UP是1時(shí),數(shù)據(jù)可以直接暴露在下級(jí)接口:READY_UP為1時(shí),BUFFER中一定是空的,因?yàn)樯弦粋€(gè)時(shí)鐘周期數(shù)據(jù)已經(jīng)排空了。也就是:

這其實(shí)就是上面的FIFO直通模式。同樣我們可以擠掉氣泡:

把這所有的總結(jié)起來(lái):


(注:代碼未經(jīng)詳細(xì)驗(yàn)證)
其他
- 我在電腦上簡(jiǎn)單跑了兩個(gè)波形,F(xiàn)IFO方法和Buffer方法結(jié)果是一樣的。
- 用FIFO去隔離開(kāi)上下兩個(gè)interface思考,比較容易想明白。
- 無(wú)氣泡傳輸、FIFO直通這兩個(gè)小feature拿掉,也可以工作、也是能實(shí)現(xiàn)READY_DOWN時(shí)序優(yōu)化的設(shè)計(jì)目標(biāo)的。
-
寄存器
+關(guān)注
關(guān)注
31文章
5608瀏覽量
129968 -
AXI總線
+關(guān)注
關(guān)注
0文章
68瀏覽量
14756 -
FIFO存儲(chǔ)
+關(guān)注
關(guān)注
0文章
103瀏覽量
6318
發(fā)布評(píng)論請(qǐng)先 登錄
valid-ready握手協(xié)議和enable-xoff協(xié)議對(duì)比
ADS131A04在復(fù)位后以READY字進(jìn)行響應(yīng),在第一個(gè)幀中接收到的響應(yīng)不正確,為什么?
任務(wù)處于Ready狀態(tài)如何調(diào)試?
Stream中的halfPipe方法為什么會(huì)導(dǎo)致帶寬減半?
什么是“HD Ready”標(biāo)準(zhǔn)
GeForce現(xiàn)在增加了其不斷發(fā)展的Game Ready庫(kù)
SD-WAN Ready在工業(yè)互聯(lián)網(wǎng)的實(shí)踐
setup/hold的概念
AXI4協(xié)議五個(gè)不同通道的握手機(jī)制
在握手協(xié)議中的Valid及data打拍技巧
valid與ready信號(hào)有哪三種情況
Valid-Ready握手協(xié)議的介紹與時(shí)序說(shuō)明
AI ready是什么?文明的發(fā)展需要做好準(zhǔn)備
在valid ready協(xié)議中對(duì)ready進(jìn)行timing修復(fù)打拍的方法
評(píng)論