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