SRIO學習(三) SRIO包

2021-10-04 17:31:28 字數 3438 閱讀 8667

在講srio包之前,有必要再強調一下srio的構造層次。

srio分為三個層次,分別是邏輯層,傳輸層和物理層。

邏輯層 確定終端處理傳輸的協議,包括包的格式。

傳輸層 定義了在系統中正確路由資訊包的定址方案。

物理層 包含裝置級的介面資訊,如電氣特性、錯誤管理資料和基本的流量控制資料。

傳輸層與邏輯層和物理層是上下相容的。

rapidio資料流由與資料字段有關的邏輯層、傳輸層和物理層組成。

邏輯層包含header(定義訪問型別)和payload(如果有的話)。

傳輸層一定程度上取決於系統中物理層的拓撲結構,傳輸層包含有傳送/接受訊息(message)所需的**裝置id(source id)和目標裝置id(destination id)。

物理層取決於物理介面(例如並口和串列埠),物理層包含優先順序acknowledgement(什麼是acknowledgement?),和錯誤檢測域

srio的transaction是基於請求包(request packet)和響應包(response packet)的,包是終端裝置之間最基本的通訊元素,master(主核)或initator(初始化器)產生乙個請求包並傳輸到目標去,目標產生乙個響應包回到master或者initiator完成整個transaction。

以下是筆者自己畫的乙個transaction的示意圖:

srio終端之間通常並不直接連線,而是通過中間fabric(結構)裝置連線。控制符號是用來管理srio物理互聯塊之間的transaction流的,也提供資料報的確認,流量控制資訊和維護功能。

figure2-2 顯示了包在系統中的流向。

首先在initiator中,由master進行操作並產生request packet,再由initiator將request packet 發出到中間fabric層中,fabric的控制符號確認資料報後,向initiator發回乙個確認接受訊號。fabric層接收到request packet之後繼續將其送至target,target的控制符號確認資料報後,向fabric返回乙個接收訊號。接著target對request packet進行相關操作,操作完成之後向fabric發出乙個response packet,待fabric中的控制符號確認response packet之後,返回乙個確認接收訊號。fabric繼續將response packet傳送回initiator,待initiator中的控制符號確認包之後,向fabric傳送乙個接收訊號,之後意味著此次整體操作的完成。

圖中用紅圈標記的就是帶有返回訊號的控制符號的確認操作。只有這部分帶有雙向交流,其餘部分都是單向交流。

srio包的長度必須是乙個32位的偶數,如果物理層、邏輯層和傳輸層長度加起來是乙個16位的整數,那麼在packet的最後一部分crc之後會加上乙個16位的字尾,一般是0000h。packet的位域(bits filed)裡被定為保留(reserved)的部分,如果在該包被產生時,或者在被接收時忽略,那麼位域就會被全部置0。包有不同的格式,我會在後續的文章裡細講。

如果系統中定義的裝置id是8位的,那麼可能的id位置有256個,如果定義的裝置id是16位的,那可能指向的位置就有64k個。

packet還包含乙個crc部分,該部分旨在確認資料在傳輸時的正確性,即在資料傳輸時資料內容沒有發生變化。crc部分保護除了ackid(ackid是什麼?)和1bit的phy(物理層)區域。外設會以硬體方式自動檢視crc部分,如果crc是正確的,乙個packet-accepted control symbol(包接收控制符)就會被接收包的裝置所傳送。如果crc是錯誤的,接收包的裝置就會傳送乙個未接收包控制符,該控制符會引起傳送方重試這一次的包傳送。

ps:crc是迴圈冗餘糾錯碼

control symbol(控制符)是物理層的訊息單元,用來管理鏈結維護包界定(包的分割)包確認錯誤報告和錯誤恢復,所有經過傳輸的資料報都通過start-of-packet和end-of-packet分割符進行分割。srio的控制符24bit長,並被控制符自己的crc所保護。figure2-4顯示的是控制符的格式。

控制符提供了兩個功能:stype0型別的控制符顯示傳遞符號的port的狀態;stype1型別的控制符是向傳輸分隔符接收port發出的請求。

「傳遞符號的port」大家可以理解為figure2-2中的箭頭,那些就是傳遞符號的port。同樣「接收port」也是類似定義。

ti在控制符的開始位,提供特殊的符號對控制符進行分割。如果控制符包含乙個分割符,那麼就使用特殊符號pd。(k28.3)(k28.3是特殊符號的名稱,在這裡就是將pd定義為k28.3,即pd = k28.3,後文的k28.0也是類似的定義)如果控制符不包含分隔符,就使用特殊符號sc(k28.0)。這種控制符會為控制符的內容提供了乙個預警告,crc並不保護這些特殊符號,但是如果出現乙個非法的或錯誤的特殊符號,crc就會將其理解為packet-not-accpted訊號。因為控制符的長度是一定的,所以它已經在頭部分割之後,就不需在尾部繼續分割。

接收到的包的型別決定該包的去向,未定義的包型別在被邏輯層功能區域處理之前就會被摧毀,這防止系統為邏輯層功能區域分配錯誤的儲存空間,不支援的包型別會以error response packet的形式返回。

srio包的型別決定於包的ftypettype兩個域的組合情況, table2-2列出了所有ftype和ttype的組合和相應的解讀。

參考文獻

SRIO學習(四) SRIO管腳

srio管腳部分官方文件給的資訊較少,只有乙個 不過筆者會對 裡的描述進行詳細解析 srio裝置管腳是基於current mode logic cml 電流模式邏輯 的高速差分訊號,傳輸和接收訊號的快取自身都包含有時鐘恢復區域。參考時鐘輸入是不納入serdes巨集的,參考時鐘使用的是差分快取輸入的,...

DSP C6678 SRIO介面除錯

設計的板子到了srio除錯階段了,在板子上,一片v6和兩片6678通過4xsrio互聯,中間沒有switch,總算搞定了相互之間的通訊。首先,感謝ti論壇提供的srio程式範例,但是其硬體平台是evm板,更多的只能用於loopback測試,但是可以在其基礎上修改。1.初始化dsp的srio,主要是對...

SRIO中門鈴中斷的路由配置

最近由於需要使用tms320c6474和tms320c6678的srio外設,doorbell中斷是必須使用的功能。ti的這兩款晶元都是多核晶元,6474為3核 6678包含有8個核 所以在配置中斷時,需要使用到類似於路由的暫存器來講中斷掛在到需要中斷的核上。路由的配置主要使用icrr暫存器,該圖為...