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

TCP協(xié)議和UDP協(xié)議的區(qū)別有哪些
TCP協(xié)議和UDP協(xié)議的區(qū)別有哪些?
CAN 的較高層協(xié)議和子協(xié)議
什么是握手信號? 什么是握手協(xié)議?
什么是詢問握手身份驗證協(xié)議
TCP協(xié)議和UDP協(xié)議最核心的區(qū)別是什么?

在握手協(xié)議中的Valid及data打拍技巧

tcp/ip協(xié)議和opc協(xié)議對比詳解
valid與ready信號有哪三種情況

Valid-Ready握手協(xié)議的介紹與時序說明

AXI握手時序優(yōu)化—pipeline緩沖器

評論