這一篇主要對(duì)比下valid-ready握手協(xié)議和enable-xoff協(xié)議,當(dāng)然這個(gè)對(duì)比僅限于同時(shí)鐘域下的信號(hào)傳輸。
工作中接觸的第一個(gè)模塊采用的接口協(xié)議就是典型的enable-xoff協(xié)議,這種協(xié)議的典型特點(diǎn)是通過enable信號(hào)標(biāo)記數(shù)據(jù)有效,通過xoff信號(hào)進(jìn)行反壓,比較典型的波形如下:
上面的波形中呢,data_en就是使能信號(hào),為1時(shí)表明上游的傳輸數(shù)據(jù)有效;data_xoff為反壓信號(hào),為1時(shí)表明下游的接收端無法接收數(shù)據(jù),此時(shí)數(shù)據(jù)傳輸不會(huì)立即停止,而是會(huì)繼續(xù)傳輸N拍,N的大小稱為過沖。
還有另外一種常見場(chǎng)景:
這種波形的特點(diǎn)是,數(shù)據(jù)不再是單拍有效的,而是若干拍組成一個(gè)“包”,data_sop是包頭標(biāo)志,data_eop為包尾標(biāo)志,data_sop和date_eop之間(左右均包含)data_en有效的數(shù)據(jù)即為整個(gè)包的數(shù)據(jù)。這種包傳輸很常見的場(chǎng)景是包頭為多層ID,包尾為ECC校驗(yàn),中間為payload:
這種包傳輸起反壓時(shí),可能有兩種場(chǎng)景:一是過沖若干拍,二是過沖若干個(gè)包。具體的要求就要看上下游模塊的協(xié)議要求了。這種場(chǎng)景比較復(fù)雜暫不過多討論,只看一下最見到的單拍enable-xoff接口,可以發(fā)現(xiàn)其與valid-ready最大的區(qū)別在于,后者ready拉低時(shí)數(shù)據(jù)傳輸時(shí)強(qiáng)制停止的,只有valid和ready同時(shí)高有效才完成了一個(gè)數(shù)據(jù)的傳輸。
而前者則不然,enable信號(hào)高有效時(shí)就完成了一個(gè)數(shù)據(jù)的傳輸,而xoff為1后(起反壓,類似于ready拉低的效果)仍然會(huì)過沖幾個(gè)數(shù)據(jù),直到enable拉低后才停止數(shù)據(jù)傳輸。
單純從代碼實(shí)現(xiàn)的角度看,valid-ready型接口的valid信號(hào)必然是會(huì)看上一拍是否握手,如果握手了就可以立刻開始下一個(gè)數(shù)據(jù)的發(fā)送(而不需要關(guān)心本拍ready的情況),不握手就一直維持高有效;而enable-xoff則是在感知到xoff后主動(dòng)停止發(fā)送(單接口上不一定是立即停止),直到xoff降為0后再重新開始發(fā)送數(shù)據(jù)(而不能維持enable信號(hào)為1)。
比較典型的enable-xoff就是兩個(gè)fifo級(jí)聯(lián)的電路結(jié)構(gòu),從這個(gè)結(jié)構(gòu)也能看出為什么xoff為高后接口不會(huì)立即停止數(shù)據(jù)發(fā)送而是會(huì)過沖幾個(gè)數(shù)據(jù)。在這種結(jié)構(gòu)中,下級(jí)的fifo將afull(將滿)信號(hào)作為xoff輸入給上一級(jí),afull信號(hào)參與fifo0的rd_en邏輯中,當(dāng)afull為1時(shí)rd_en會(huì)為0。
那么顯然,即使fifo0在第一時(shí)間停止數(shù)據(jù)發(fā)送了,那么由fifo0到fifo1的路上還有4個(gè)寄存器呢呀,極端場(chǎng)景這4個(gè)寄存器里都有有效數(shù)據(jù),那么下級(jí)的fifo1是必須得能夠把數(shù)據(jù)收下來的(要不然不就丟數(shù)了嗎),所以fifo1入口的接口協(xié)議就是:xoff為1之后,最多允許過沖4個(gè)數(shù)據(jù)(包括xoff為1的當(dāng)拍)。
順便延伸一下,那么這個(gè)時(shí)候fifo1的afull水線應(yīng)該設(shè)為多少呢?應(yīng)當(dāng)是N-4,N為fifo深度對(duì)吧。那么繼續(xù)深入一下,N的值最小應(yīng)該為多少?答案是,N最小值應(yīng)該為8,大于8肯定是沒有關(guān)系的。為什么要這么設(shè)置呢,我們來看一下下游阻塞-恢復(fù)場(chǎng)景(不糾結(jié)于具體的時(shí)序,只看行為):
下游阻塞 -> fifo將滿,起反壓 -> fifo接收路徑上的過沖,等待下游通流 -> 下游通流,fifo出數(shù) -> fifo不再將滿,撤銷反壓 -> 上游恢復(fù)發(fā)送數(shù)據(jù),那么如果在fifo1里面將滿水線以下的數(shù)據(jù)發(fā)送完成之前,上游的數(shù)據(jù)沒能補(bǔ)充過來(路上有流水),那么必然會(huì)造成下游的斷流現(xiàn)象,也就是非阻塞斷流。這對(duì)于對(duì)帶寬、延遲、抖動(dòng)有要求的芯片而言是不可接受的。
因此fifo的將滿水線必須設(shè)置合理,太淺會(huì)丟數(shù),太深會(huì)斷流。對(duì)于驗(yàn)證而言,這里的性能驗(yàn)證也是重中之重,而這一關(guān)過去后還有包反壓過沖場(chǎng)景的性能問題以及反壓流水場(chǎng)景:
反正哪個(gè)都?jí)蛎ι弦魂嚨?,這個(gè)不是重點(diǎn)也就不贅述了。說了這么多,其實(shí)valid-ready和enable-xoff接口的差異已經(jīng)說的也比較清楚了:
在芯片設(shè)計(jì)中,"valid-ready握手接口"和"enable-xoff使能接口"都是用于控制數(shù)據(jù)傳輸和通信的接口,但它們?cè)诠δ芎陀猛旧嫌幸恍┎町悺?/p>
Valid-Ready握手接口:
"Valid" 和 "Ready" 是兩個(gè)信號(hào)線,用于在數(shù)據(jù)傳輸過程中進(jìn)行握手和同步。
"Valid" 信號(hào)表示數(shù)據(jù)是否有效。當(dāng)數(shù)據(jù)準(zhǔn)備好并可以傳輸時(shí),"Valid" 信號(hào)置高。
"Ready" 信號(hào)表示接收方是否準(zhǔn)備好接收數(shù)據(jù)。當(dāng)接收方準(zhǔn)備好接收數(shù)據(jù)時(shí),"Ready" 信號(hào)置高。
握手的基本原則是:當(dāng)發(fā)送方的 "Valid" 信號(hào)為高且接收方的 "Ready" 信號(hào)也為高時(shí),數(shù)據(jù)可以傳輸。
Enable-XOFF使能接口:
"Enable" 和 "XOFF" 是兩個(gè)信號(hào)線,用于控制數(shù)據(jù)流的啟用和停止。
"Enable" 信號(hào)用于啟用數(shù)據(jù)傳輸,當(dāng) "Enable" 為高時(shí),數(shù)據(jù)傳輸可以進(jìn)行。
"XOFF" 信號(hào)用于停止數(shù)據(jù)傳輸,當(dāng) "XOFF" 為高時(shí),數(shù)據(jù)傳輸被暫停。
通常,"XOFF" 信號(hào)用于流量控制,以避免數(shù)據(jù)過載,允許接收方在處理數(shù)據(jù)之前進(jìn)行暫停。
在實(shí)際應(yīng)用中,選擇使用哪種接口取決于項(xiàng)目的需求和設(shè)計(jì)目標(biāo)。"Valid-Ready握手接口"通常用于高速數(shù)據(jù)。
-
寄存器
+關(guān)注
關(guān)注
31文章
5363瀏覽量
121172 -
FIFO芯片
+關(guān)注
關(guān)注
0文章
10瀏覽量
8855 -
信號(hào)傳輸
+關(guān)注
關(guān)注
4文章
437瀏覽量
20282 -
時(shí)鐘域
+關(guān)注
關(guān)注
0文章
52瀏覽量
9574
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論