CXS (Credited eXtensible Stream)是一個(gè)流接口協(xié)議,主要用于點(diǎn)到點(diǎn)(point-to-point)的數(shù)據(jù)包通信。CXS接口的主要使用情形是在片上互連和PCIe控制器。CXS中的數(shù)據(jù)傳輸是單向的,因此一般CXS接口是收/發(fā)成對出現(xiàn)的。
看到這里,是不是想起了什么?沒錯(cuò),就是AXI-Stream,同樣也是點(diǎn)到點(diǎn)的流接口傳輸,比如中斷控制器GIC的組件之間就采用了AXI-Stream。AXI-Stream在 FPGA中應(yīng)用較多,尤其是多媒體領(lǐng)域。
CXS接口的數(shù)據(jù)傳輸是單向的,兩端是Transmitter(TX)和Receiver(RX)。一個(gè)時(shí)鐘周期內(nèi)傳輸?shù)臄?shù)據(jù)稱作flit。一個(gè)數(shù)據(jù)包可以占用一個(gè)或多個(gè)flit組成。
CXS的接口信號分為兩部分,一部分是必須包含的,另一部分是可選信號。其中必須實(shí)現(xiàn)的信號如下(以下用正粗體表示信號,斜粗體表示屬性):
從接口信號上看,并沒有READY信號,也就是說CXS不像其它的AMBA總線,比如AXI,是通過“VALID - READY”來控制流量。
正如名字中的含義,CXS接口上的流量控制(flow control)通過信用交換機(jī)制實(shí)現(xiàn)。其信用機(jī)制規(guī)則如下:
- 僅當(dāng)TX有信用值時(shí)才能發(fā)送數(shù)據(jù)
- 當(dāng)接口剛完成復(fù)位或者是第一次active,TX沒有信用值,不能發(fā)送數(shù)據(jù)
- RX通過CXSCRDGNT信號授予TX信用
- 在CXSCRDGNT被RX置位的每個(gè)時(shí)鐘周期,RX授予一個(gè)信用值給TX。每個(gè)信用值可用作一次flit傳輸。
- RX必須保證每釋放一個(gè)信用值,即可接收一個(gè)flit
- TX置位 CXSVALID ,每個(gè)時(shí)鐘周期發(fā)送一個(gè)flit,占用一個(gè)信用值
- RX可以授予TX的最大信用值數(shù)由CXS_MAX_CREDIT屬性決定
- TX只有等到CXSCRDGNT被置位之后,得到信用才能發(fā)送flit
- 可選,TX可以通過CXSCRDRTN返還信用值給RX,無需發(fā)送flit
- RX不能重用已消耗或返回的信用
- 如果TX在發(fā)送flit或者返回給RX信用的同時(shí)接收到一個(gè)信用,則TX端的可用信用數(shù)不變
正常情況下,TX發(fā)送一個(gè)flit給RX,同時(shí)消耗一個(gè)信用值;RX接收到flit,如果有能力接收更多的flit,則可以授予TX一個(gè)信用值;隨后,TX得到新的信用值。從TX消耗信用值到得到新的信用值,這段時(shí)間稱為信用延遲(credit latency)。為保證TX能夠源源不斷的發(fā)送數(shù)據(jù),則需要設(shè)計(jì)好最大可用的信用數(shù)量,以保證不會由于信用延遲造成的斷流。
CXS接口的屬性包括以下:
其中,TX和RX的屬性可以單獨(dú)設(shè)置。
CXS的完整接口信號列表如下:
其中,CXSLAST用于連續(xù)傳輸;CXSPRCLTYPE用于支持多種協(xié)議類型。
當(dāng)CXSCHECKTYPE 屬性被設(shè)置成Odd_Byte_Parity,CXS接口上會增加額外的信號線,用于增強(qiáng)接口信號的完整性。對于單bit信號線,增加一個(gè)bit,比如 CXSVALID ,增加一個(gè)信號 CXSVALIDCHK ;對于多bit信號,每8bit增加一個(gè)信號,比如256-bit的 CXSDATA ,增加一個(gè)32-bit信號 CXSDATACHK 。增加的信號與原信號相加為奇數(shù)。
CXS對每個(gè)flit中的數(shù)據(jù)包放置進(jìn)行了限制,以簡化數(shù)據(jù)路徑實(shí)現(xiàn):
- 數(shù)據(jù)包的第一個(gè)byte必須是16-byte對齊的邊界
- 數(shù)據(jù)包的后續(xù)字節(jié)占用flit的后續(xù)字節(jié)
- 數(shù)據(jù)包可以在任何4-byte對齊的邊界上結(jié)束。
- 從字節(jié)位置開始的數(shù)據(jù)包將占用該flit中的每個(gè)后續(xù)字節(jié),直到數(shù)據(jù)包結(jié)束或flit結(jié)束。
- 如果flit結(jié)束時(shí)數(shù)據(jù)包中還有剩余字節(jié),則該數(shù)據(jù)包將從下一個(gè)flit的字節(jié)[0]開始,并占據(jù)隨后的每個(gè)字節(jié)位置,直到數(shù)據(jù)包結(jié)束或flit結(jié)束。
- 當(dāng)數(shù)據(jù)包在flit中結(jié)束時(shí),flit中的剩余字節(jié)可以不使用。
- flit中的任何數(shù)據(jù)包必須從相對于flit開始或前一數(shù)據(jù)包結(jié)束的第一個(gè)可用16-byte邊界開始。
CXSCNTL信號總線可以分為五個(gè)字段,分別為:START,START[N:0]PTR,END,ENDERROR和END[N:0]PTR。下面分別解釋。
下圖給出CXSCNTL信號的組成示例。當(dāng)屬性 **CXSMAXPKTPERFLIT ** = 4,屬性 **CXSDATAFLITWIDTH ** = 512時(shí),CXSCNTL信號共有36-bit。
CXS接口傳輸滿足以下要求的數(shù)據(jù)包大小需滿足:
- 至少為4字節(jié)
- 為4字節(jié)的倍數(shù)
- 數(shù)據(jù)大小沒有上限
如果CXS用于CCIX數(shù)據(jù)包傳輸,需要遵守CCIX的約定。
協(xié)議中給出了數(shù)據(jù)包傳輸?shù)睦?,看一個(gè)比較復(fù)雜的示例。屬性 ***CXSMAXPKTPERFLIT *** = 4, ***CXSDATAFLITWIDTH *** = 512, ***CXSCONTINUOUSDATA *** = true,Protocol 0用于可變長數(shù)據(jù)包,Protocol 1用于固定長64-byte數(shù)據(jù)包。在Protocol 0中,P0D和P0E分組必須保持在一起;在Protocol 1中,P1B和P1C分組必須保持在一起,P1E,P1F和P1分組必須保持在一起。
當(dāng)屬性 **CXSLINKCONTROL _ ** = Explicit *Credit *Return,CXS接口上會多出一組信號, CXSCRDRTN , CXSACTIVEREQ ,CXSACTIVEACK和 CXSDEACTHINT 。
其中 CXSACTIVEREQ ,CXSACTIVEACK實(shí)現(xiàn)四相位的握手機(jī)制。握手機(jī)制共分為四種狀態(tài):
- STOP
- CXS接口在STOP狀態(tài)時(shí)沒有任何操作,所有的信用被RX收回
- STOP是一個(gè)穩(wěn)定狀態(tài),CXS接口可以無限期保持在STOP
- RX此時(shí)不可以接收flit,也不可以授予信用
- TX此時(shí)不可以發(fā)送flit,也不可以返還信用
- 如果TX有flit等待發(fā)送,需要從STOP狀態(tài)轉(zhuǎn)移到ACTIVATE狀態(tài)
- ACTIVATE
- 此狀態(tài)為STOP到RUN的過渡
- 期望進(jìn)入此狀態(tài)后,期待CXS通路很快進(jìn)入RUN狀態(tài)
- 此狀態(tài)下,TX必須接收信用,但還不可以發(fā)送flit
- RX此時(shí)不可以接收flit,也不可以授予信用
- RX不可以在狀態(tài)ACTIVATE下發(fā)送信用。但是允許RX在進(jìn)入RUN狀態(tài)的同一周期內(nèi)發(fā)送信用。由于存在潛在的競爭條件,因此TX在ACTIVATE狀態(tài)下可能會收到信用
- 當(dāng)RX準(zhǔn)備好接收flit時(shí),它可以從ACTIVATE狀態(tài)轉(zhuǎn)移到RUN狀態(tài)
- RUN
- TX和RX在此狀態(tài)下傳輸flit
- RUN狀態(tài)是穩(wěn)定狀態(tài),CXS通道可以一直保持在RUN狀態(tài)
- RX可以接收flit,授予信用,接收返還的信用
- TX可以發(fā)送flit,,接收信用
- TX允許返還信用給RX
- TX可以在某些情況下從RUN狀態(tài)切換到DEACTIVATE狀態(tài),比如TX沒有flit可以發(fā)送了
- DEACTIVATE
- 此狀態(tài)用于從RUN到STOP的過渡
- DEACTIVATE是一個(gè)中間狀態(tài)
- 在進(jìn)入此狀態(tài)前,TX必須停止發(fā)送flit,由于潛在的競爭條件,RX有可能在此狀態(tài)下接收flit
- RX可以發(fā)送信用,當(dāng)RX發(fā)現(xiàn)TX返還信用時(shí)必須停止繼續(xù)發(fā)送信用
- RX可以接收TX返還的信用
- TX必須發(fā)送信用返回,以便將所有信用返回給RX。
- 只有當(dāng)所有信用都已返回時(shí),RX才能退出該狀態(tài)并移至STOP狀態(tài)。
四種狀態(tài)轉(zhuǎn)換的關(guān)系如下圖:
TX始終負(fù)責(zé)啟動從RUN到STOP,或從STOP到RUN的狀態(tài)更改,例如:
- TX端有flit等待發(fā)送,所以需要從STOP轉(zhuǎn)移到RUN
- TX端沒有flit可以發(fā)送,可以從RUN切換到STOP
- TX可以觀測一個(gè)獨(dú)立的邊帶信號,判斷是否需要從RUN移動到STOP,或從STOP移動到RUN
- TX可以觀測RX發(fā)出的CXSDEACTHINT來判斷是否需要從RUN轉(zhuǎn)移到STOP
當(dāng)接口的一方同時(shí)執(zhí)行兩個(gè)操作時(shí),即存在競爭條件。CXS規(guī)范允許數(shù)據(jù)流和鏈路控制信號組之間存在不同的延遲。因此,到達(dá)時(shí)的操作順序可能與發(fā)出的順序不同。競爭條件之所以會存在,是因?yàn)椴灰?strong>CXSACTIVEREQ和CXSACTIVEACK信號不需要在TX和RX之間的其它信號具有相同的延遲。
CXS接口信號間的時(shí)序關(guān)系如下。
- CXSVALID,CXSDATA,CXSCNTL和CXSCRDRTN必須是同步關(guān)系,且具有相同的延時(shí)
- CXSCRDGNT,CXSACTIVEACK,CXSDEACTHINT必須是同步,但是可以有任意延時(shí)
- CXSACTIVEREQ必須是同步驅(qū)動,但是接收端可以異步接收,且可以任意延時(shí)
來看一個(gè)例子。
- 1.T0時(shí)刻,TX和RX都處于STOP狀態(tài),兩邊都可以關(guān)斷時(shí)鐘,甚至電源;
- T1時(shí)刻,TX置位 CXSACTIVEREQ ,從STOP轉(zhuǎn)移到ACTIVATE;TX等待RX啟動;
- 3.T6時(shí)刻,RX完成啟動,置位 CXSACTIVEACK ;
- 4. CXSCRDGNT與CXSACTIVEACK**在同一時(shí)刻被置位;
- 5. T7時(shí)刻,TX接收到一個(gè)信用,發(fā)送一個(gè)flit;
- 6. TX在接收到更多信用后,連續(xù)發(fā)送flit。
某些情況下,CXS通道不能中斷數(shù)據(jù)流,例如PCIe。這時(shí),需要TX和RX實(shí)現(xiàn)一個(gè)存儲轉(zhuǎn)發(fā)(store-and-forward)buffer。
如果RX內(nèi)置了這個(gè)buffer,數(shù)據(jù)包可以被下游完整接收。RX必須有足夠的空間來存儲TX所能發(fā)送的最大數(shù)據(jù)包。這種情況下,TX和RX可以設(shè)置屬性 *** CXSCONTINUOUSDATA * ** = False。TX無需緩存數(shù)據(jù)包。
如果RX沒有緩沖區(qū)并且需要連續(xù)數(shù)據(jù),則它會將** *CXSCONTINUOUSDATA *屬性設(shè)置為True,并且TX也必須將 *CXSCONTINUOUSDATA ***設(shè)置為True。然后,TX必須能夠在不依賴其它接口的情況下發(fā)出數(shù)據(jù)包內(nèi)的所有flit。
如果需要連續(xù)流量,必須確保RX有足夠的信用來覆蓋最壞情況下的往返信用延遲:
- RX和TX之間的CXSCRDGNT延遲
- TX端的CXSTXCRDGNT和CXSTXVALID之間的最大內(nèi)部延遲,由TX的CXS_MAX_CREDIT_LATENCY屬性描述
- RX和TX之間的CXSVALID延遲
- RX端的CXSTXVALID和CXSTXCRDGNT之間的最大內(nèi)部延遲,由RX的CXS_MAX_CREDIT_LATENCY屬性描述
RX可以發(fā)出的最大信用數(shù)取決于其緩沖區(qū)的大小,可以通過其** CXS MAX *CREDIT ***屬性來描述。
如果下游接口的時(shí)鐘比CXS鏈路慢,則可能不需要每個(gè)周期發(fā)送一個(gè)flit。在這種情況下,RX保持恒定流量所需的信用數(shù)可能小于往返延遲。
-
緩沖器
+關(guān)注
關(guān)注
6文章
1922瀏覽量
45503 -
接收機(jī)
+關(guān)注
關(guān)注
8文章
1182瀏覽量
53494 -
狀態(tài)機(jī)
+關(guān)注
關(guān)注
2文章
492瀏覽量
27548 -
中斷控制器
+關(guān)注
關(guān)注
0文章
59瀏覽量
9458 -
PCIe接口
+關(guān)注
關(guān)注
0文章
120瀏覽量
9713
發(fā)布評論請先 登錄
相關(guān)推薦
評論