【SRIO】1、RapidIO協(xié)議概述
目錄

一、RapidIO背景介紹
二、RapidIO協(xié)議概述
2.1 包與控制符號(hào)
2.2 包格式
2.3 事務(wù)格式與類型
2.4 消息傳遞
2.5 全局共享存儲(chǔ)器
2.6 流量控制
2.7 串行物理層
三、I/O邏輯操作與包格式
3.1 引言
3.2 請(qǐng)求包格式
3.3 響應(yīng)包格式
3.4 常用的I/O邏輯操作事務(wù)
四、維護(hù)操作與包格式
五、消息操作與包格式
5.1 引言
5.2 門鈴事務(wù)(DOORBELL)
5.3 消息事務(wù)
六、總結(jié)
七、參考資料
一、RapidIO背景介紹
RapidIO是由Motorola和Mercury等公司率先倡導(dǎo)的一種高性能、 低引腳數(shù)、 基于數(shù)據(jù)包交換的互連體系結(jié)構(gòu),是為滿足和未來高性能嵌入式系統(tǒng)需求而設(shè)計(jì)的一種開放式互連技術(shù)標(biāo)準(zhǔn)。RapidIO主要應(yīng)用于嵌入式系統(tǒng)內(nèi)部互連,支持芯片到芯片、板到板間的通訊,可作為嵌入式設(shè)備的背板(Backplane)連接。
RapidI0采用三層分級(jí)體系結(jié)構(gòu),該分級(jí)結(jié)的如下圖所示
其中邏輯層位于最高層.定又全部協(xié)議和包的格式,它們?yōu)槎它c(diǎn)器件發(fā)起和完成事務(wù)提供必要的信息;傳輸層規(guī)范位于中間層,定義了RapidIO地址空間和在端點(diǎn)器件間傳輸包所需要的路由信息,物理層規(guī)范在整個(gè)分級(jí)結(jié)構(gòu)的底部,包括器件級(jí)接口的細(xì)節(jié),如包傳輸機(jī)制、流量控制、電氣特性和低級(jí)錯(cuò)誤管理等功能.
Rapid IO分為并行Rapid IO標(biāo)準(zhǔn)和串行Rapid IO標(biāo)準(zhǔn),串行RapidIO是指物理層采用串行差分模擬信號(hào)傳輸?shù)腞apidIO標(biāo)準(zhǔn)。在Xilinx的一部分FPGA里面已經(jīng)集成了GTP,GTX或GTZ等高速串行收發(fā)電路,這些是FPGA實(shí)現(xiàn)RapidIO高速傳輸?shù)奈锢韺踊A(chǔ)。
二、RapidIO協(xié)議概述
2.1 包與控制符號(hào)
RapidIO操作是基于請(qǐng)求和響應(yīng)事務(wù)的。
包是系統(tǒng)中端點(diǎn)器件間的基本通信単元。發(fā)起器件或主控器件產(chǎn)生一個(gè)請(qǐng)求事務(wù),該事務(wù)被發(fā)送至目標(biāo)器件。目標(biāo)器件于是產(chǎn)生一個(gè)響應(yīng)事務(wù)返回至發(fā)起器件來完成該次操作。 RapidIO事務(wù)被封裝在包中,而包則包含確保將事務(wù)可靠傳送至目標(biāo)端點(diǎn)的所有必需的位字段。通常不會(huì)將RapidIO端點(diǎn)相互直接連在一起,而是通過介于其間的交換結(jié)構(gòu)(fabric)連接。名詞“交換結(jié)構(gòu)”指的是提供系統(tǒng)互連的單個(gè)或多個(gè)交換器件的集合。
控制符號(hào)用于管理RapdIO物理層互連的事務(wù)流,也用于包確認(rèn)、流量控制信息和維護(hù)功能。下圖顯示了如何在 RapidIO系統(tǒng)中傳送事務(wù)。
上圖中,系統(tǒng)中的發(fā)起器件(Initiator)通過產(chǎn)生一個(gè)請(qǐng)求事務(wù)(Request)開始一次操作。該請(qǐng)求包傳送至交換結(jié)構(gòu)器件(Fabric),通常是一個(gè)交換機(jī),交換結(jié)構(gòu)器件發(fā)出控制符號(hào)確認(rèn)收到了該請(qǐng)求包,然后交換結(jié)構(gòu)將該包轉(zhuǎn)發(fā)至目標(biāo)器件(Target),這就完成了此次操作的請(qǐng)求過程。目標(biāo)器件(Target)完成要求的操作,產(chǎn)生響應(yīng)事務(wù)(Response)。通過交換結(jié)構(gòu)(Fabric)將承載該事務(wù)的響應(yīng)包傳送回發(fā)起器件(Initiator).傳送時(shí)使用控制符號(hào)對(duì)每一跳(hop)進(jìn)行確認(rèn)。一旦響應(yīng)包到達(dá)發(fā)起器件(Initiator)并得到確認(rèn),就可認(rèn)為此次操作已經(jīng)完成。
2.2 包格式
RapidIO包由代表3級(jí)規(guī)范體系結(jié)構(gòu)的多個(gè)字段組成。下圖顯示了典型的請(qǐng)求包和響應(yīng)包的格式,這些包的格式屬于并行物理層包格式,串行物理層包的格式與此稍有不同。某些字段是依賴于具體的上下文的, 并不會(huì)在所有的包中出現(xiàn)。
請(qǐng)求包以物理層字段開始, S位指示這是一個(gè)包還是一個(gè)控制符號(hào)(S=0表示是一個(gè)包,S=1表示是控制符號(hào)), AckID表明交換結(jié)構(gòu)器件將用控制符號(hào)來確認(rèn)哪一個(gè)包。PRIO字段指示用于流量控制的包優(yōu)先級(jí)。TT、目標(biāo)地址( Target Address)和源地址( Source Address)字段指示傳輸?shù)刂返臋C(jī)制類型、包應(yīng)被傳送到的器件的地址和產(chǎn)生包的器件的地址。Ftype和事務(wù)(Transation)指示正被請(qǐng)求的事務(wù)。長度(Size)字段等于編碼后事務(wù)的長度, RapidIO事務(wù)數(shù)據(jù)的有效裁荷(Payload)長度從1到256字節(jié)不等。SrcTID(源事務(wù)ID)指示事務(wù)ID, RapidIO器件在兩個(gè)端點(diǎn)器件間最多允許有256個(gè)未完成的事務(wù)。對(duì)于存儲(chǔ)器映射事務(wù),跟隨在srcTID后面的是器件偏移地址 (Device Offset Address ) 字段。寫事務(wù)必須附帶數(shù)據(jù)的有效裁荷,所有包以16位(2個(gè)字節(jié))循環(huán)冗余校驗(yàn)碼(CRC)結(jié)束。
響應(yīng)包與請(qǐng)求包類似。狀態(tài)(Status)字段指示是否成功完成了事務(wù)。目標(biāo)TID(目標(biāo)事務(wù)ID)字段的值與請(qǐng)求包中源事務(wù) ID字段的值相等。下圖是請(qǐng)求包與響應(yīng)包的包格式示意圖
對(duì)于用戶來說,最需要關(guān)注的就是邏輯層(上圖中藍(lán)色部分)各個(gè)字段的含義,邏輯層中Ftype與Ttype(Ttype字段和上圖中的Transaction字段是同一個(gè)字段,只不過叫法不同而已)兩個(gè)字段唯一的確定了這個(gè)請(qǐng)求包的功能。下表列出了Ftype與Ttype所確定的包含義
Ftype
(Format Type)
Ttype
(Transaction Type)
包類型
功能
0~1
——
Reserve
無
2
4’b0100
NREAD
讀指定的地址
4’b1100
ATOMIC increment
先往指定的地址中傳遞數(shù)據(jù),在把傳遞的數(shù)據(jù)加1,此操作為原子操作,不可打斷
4’b1101
ATOMIC decrement
先往指定的地址中傳遞數(shù)據(jù),在把傳遞的數(shù)據(jù)減1,此操作為原子操作,不可打斷
4’b1110
ATOMIC set
把指定地址中的數(shù)據(jù)每個(gè)bit全部寫1
4’b1111
ATOMIC clear
把指定地址中的數(shù)據(jù)清0(每個(gè)bit全部清零)
3~4
——
Reserve
無
5
4’b0100
NWRITE
往指定的地址寫數(shù)據(jù)
4’b0101
NWRITE_R
往指定的地址寫數(shù)據(jù),寫完成以后接收目標(biāo)器件(Target)的響應(yīng)
4’b1101
ATOMIC test/swap
對(duì)指定地址中的數(shù)據(jù)進(jìn)行測(cè)試并交換,此操作為原子操作,不可打斷
6
4’bxxxx
SWRITE
以流寫方式寫指定的地址,與NWRITE以及NWRITE_R相比,此方式效率最高
7
——
Reserve
無
8
4’b0000
MAINTENANCE read request
發(fā)起讀配置,控制,狀態(tài)寄存器請(qǐng)求
4’b0001
MAINTENANCE write request
發(fā)起寫配置,控制,狀態(tài)寄存器請(qǐng)求
4’b0010
MAINTENANCE read response
產(chǎn)生讀配置,控制,狀態(tài)寄存器響應(yīng)
4’b0011
MAINTENANCE write response
產(chǎn)生寫配置,控制,狀態(tài)寄存器響應(yīng)
4’b0100
MAINTENANCE write resquest
端口寫請(qǐng)求
9
——
Reserve
無
10
4’bxxxx
DOORBELL
門鈴
11
4’bxxxx
MESSAGE
消息
12
——
Reserve
無
13
4’b0000
RESPONSE
no data
不帶有效數(shù)據(jù)的響應(yīng)包
4’b1000
RESPONSE
with data
帶有效數(shù)據(jù)的響應(yīng)包
14~15
——
Reserve
無
2.3 事務(wù)格式與類型
RapidIO事務(wù)的類型大概有以下幾種:
功能
事務(wù)類型
I/O非一致功能
NREAITED(讀非共享存儲(chǔ)器)
NWRITE、NWRITE_R、SWRITE(寫非共享存儲(chǔ)器)
原子(ATOMIC)(讀-修改-寫至非共享存儲(chǔ)器)
基于端口的功能
門鈴(DOORBELL)(產(chǎn)生中斷)
消息(MESSAGE)(對(duì)端口寫)
系統(tǒng)支持功能
維護(hù)(MAINTENANCE)(讀寫配置、控制、狀態(tài)寄存器)
用戶定義功能
對(duì)專用事務(wù)開放
高速緩存一致性功能
讀(READ)(讀全局共享高速緩存器)
READ_TO_DOWN(寫全局共享高速緩存器)
拋棄(CASTOUT)(交出全局共享高速緩存器擁有權(quán))
IKILL(指令緩沖失效)
DKILL(數(shù)據(jù)緩沖失效)
刷新(FLUSH)(返回全局共享高速緩存器至存儲(chǔ)器)
IO_READ(讀非緩沖全局共享高速緩存器的副本)
操作系統(tǒng)支持功能
TLBIE(TLB失效)
TLBSYNC(TLB強(qiáng)迫完成失效)
2.4 消息傳遞
當(dāng)數(shù)據(jù)必須被系統(tǒng)中的多個(gè)處理器件共享時(shí),必須由協(xié)議維護(hù)和管理多個(gè)器件對(duì)共享數(shù)據(jù)的臨時(shí)占用,許多嵌入式系統(tǒng)用軟件機(jī)制實(shí)現(xiàn)該協(xié)議。如果存儲(chǔ)器空間可被多個(gè)器件訪問,可以使用鎖或者信號(hào)量來保證器件間正確的訪問次序。在其他情況下,處理部件可能只有訪問本地存儲(chǔ)器空間的權(quán)利,在這些“非共享”的系統(tǒng)中,需要一種機(jī)制把數(shù)據(jù)從一個(gè)處理器件傳遞到另一個(gè)器件。使用消息傳遞(Message Passing)信箱(Mailbox)可以實(shí)現(xiàn)這種機(jī)制。
RapidIO提供了一種有用的消息傳遞機(jī)制, RapidlO消息傳遞協(xié)議描述了支持信箱和門鈴?fù)ㄐ诺氖聞?wù)。RapidIO信箱是一個(gè)端口,器件間可通過它發(fā)送消息。接收器件在消息到達(dá)后對(duì)其進(jìn)行處理。RapidIO消息的長度從0到4096字節(jié)不等。一個(gè)接收器件有1~4個(gè)可尋址消息隊(duì)列來捕獲輸人的消息。
RapidIO門鈴 (Doorbell )是一種基于端口的輕量級(jí)事務(wù),可用于帶內(nèi)(in-band)中斷。門鈴消息包括一個(gè)由軟件定義的16位字段,該字段可用來在兩個(gè)器件間傳達(dá)多種不同意圖的消息。
2.5 全局共享存儲(chǔ)器
支持全局共享的分布式存儲(chǔ)器系統(tǒng)是RapidIO協(xié)議的擴(kuò)展功能之一。這意味著可以把存儲(chǔ)器放到系統(tǒng)中不同的物理位置上, 可以正確地在不同處理器件間緩存。
RapidIO制定了一種基于目錄的一致性解決方案來支持這種方法。使用這種方法,每個(gè)存儲(chǔ)器控制器都有責(zé)任跟蹤每個(gè)數(shù)據(jù)元素的當(dāng)前副本在系統(tǒng)中位于什么位置,為一致域中的每個(gè)器件維護(hù)一個(gè)目錄,跟蹤每個(gè)器件的修改、共享、位置(MSL)等簡(jiǎn)単的一致性狀態(tài)。
2.6 流量控制
流量控制是任何互連技術(shù)的重要內(nèi)容。流量控制是指在任意時(shí)間互連技術(shù)采用某些規(guī)則和機(jī)制,根據(jù)這些規(guī)則和機(jī)制決定任意時(shí)間從可能獲得的若干事務(wù)中選擇哪一事務(wù)進(jìn)行發(fā)送。流量控制的目的是使器件完成系統(tǒng)中的事務(wù),避免被其他事務(wù)阻塞。基于總線的互連技術(shù)使用仲裁算法來確保器件進(jìn)行恰當(dāng)?shù)霓D(zhuǎn)發(fā)操作,確保高優(yōu)先級(jí)的事務(wù)優(yōu)先于低優(yōu)先級(jí)的事務(wù)得到轉(zhuǎn)發(fā)。采用交換的互連技術(shù),事務(wù)從系統(tǒng)的不同位置進(jìn)入,從而無法使用集中式的仲裁機(jī)制。這就需要一種管理系統(tǒng)中的事務(wù)流的方法。RapidIO使用若干補(bǔ)充機(jī)制來獲得系統(tǒng)中平穩(wěn)的數(shù)據(jù)流并避免系統(tǒng)死鎖。
2.7 串行物理層
RapidIO邏輯層的包被定義為一連串的比特,并且與物理層實(shí)現(xiàn)無關(guān)。這意味著RapidIO協(xié)議在串行與并行接口,銅線與光纖介質(zhì)下都能正常工作。在Xilinx FPGA中已經(jīng)集成了GTP,GTX或GTH等高速串行收發(fā)器,所以在FPGA實(shí)現(xiàn)RapidIO高速傳輸協(xié)議都是采用的串行物理層而并非并行物理層。串行物理層使用8B/10B編碼用到的字符(K碼)完成定界,利用這種方式,發(fā)送器件使用K碼作為定界符,為接收器件指明包或控制符號(hào)的開始和結(jié)束。
串行RapidIO規(guī)范使用物理編碼子層(PCS)和物理媒介附屬子層(PMA)在發(fā)送方將包轉(zhuǎn)化成串行比特流。并在接收方提取出該比特流。除了在發(fā)送前進(jìn)行編碼和在接收后進(jìn)行解碼操作,PCS層還負(fù)責(zé)空閑序列(idle sequence) 產(chǎn)生、通道分段(lane striping)、通道對(duì)齊(lane alignment)、以及接收方通道合并(lane destriping)的操作。PCS層使用8B/10B編碼技術(shù)在鏈路上傳送數(shù)據(jù),8B/10B編碼模塊把8位數(shù)據(jù)編碼轉(zhuǎn)換為10位做據(jù),編碼后的數(shù)據(jù)包括原始數(shù)據(jù)和可恢復(fù)的時(shí)鐘信息。PCS層還提供了一種機(jī)制,用于自動(dòng)決定端口的工作模式是在單通道(1-lane)模式還是四通道(4-lane)模式。PCS層也可彌補(bǔ)發(fā)送方和接收方之間的時(shí)鐘差。
PMA層負(fù)責(zé)逐個(gè)通道地將10位并行碼組(code-group)數(shù)據(jù)串行化為串行比特流或?qū)⒋斜忍亓鞑⑿谢癁?0位并行碼組數(shù)據(jù)。接收數(shù)據(jù)時(shí), PMA層獨(dú)立地、逐個(gè)通道地將接收到的比特流對(duì)齊到10位碼組邊界,然后向PCS層提供連續(xù)的10位碼組流,每一通道分配一個(gè)碼組流,10位碼組對(duì)于PCS層以上各層是不可見的。
三、I/O邏輯操作與包格式
3.1 引言
I/O邏輯操作支持RapidIO存儲(chǔ)空間的基本讀寫,它可以通過請(qǐng)求和響應(yīng)事務(wù)對(duì)來完成。請(qǐng)求和響應(yīng)事務(wù)對(duì)穿越 RapidIO交換結(jié)構(gòu)運(yùn)行, 但當(dāng)事務(wù)穿越交換結(jié)構(gòu)時(shí)RapidIO交換結(jié)構(gòu)并不跟蹤該事務(wù)。從交換結(jié)構(gòu)的角度看, 請(qǐng)求事務(wù)和與之對(duì)應(yīng)的響應(yīng)事務(wù)間并沒有明確的關(guān)系。雖然系統(tǒng)中可能存在多個(gè)中間交換器件和由此引起的多次包轉(zhuǎn)發(fā),但是從RapidlO邏輯層的角度來說,請(qǐng)求事務(wù)和響應(yīng)事務(wù)只有一個(gè)(如果需要響應(yīng)的話),中間交換器件不區(qū)分請(qǐng)求和響應(yīng)事務(wù),它們的作用只是轉(zhuǎn)發(fā)事務(wù)到它們的最終目的地。
在 RapidIO體系結(jié)構(gòu)中定義了6種基本的I/O操作, 下表給出了這6種基本的I/O操作、用來執(zhí)行相應(yīng)操作的事務(wù)和對(duì)操作的描述,
操作
使用的事務(wù)
描述
讀
NREAD、RESPONSE
從目標(biāo)器件中讀數(shù)據(jù)
寫
NWRITE
往目標(biāo)器件中寫數(shù)據(jù)
有響應(yīng)寫
NWRITE_R、RESPONSE
往目標(biāo)器件中寫數(shù)據(jù),寫完后等待目標(biāo)的響應(yīng)
流寫
SWRITE
面向大數(shù)據(jù)量DMA傳輸優(yōu)化寫數(shù)據(jù)
Atomic
ATOMIC、RESPONSE
原子操作,讀-修改-寫,事務(wù)不能被打斷
維護(hù)
MAINTENANCE
以RapidIO專用寄存器為目標(biāo)的事務(wù)
3.2 請(qǐng)求包格式
RapidIO處理器發(fā)起一個(gè)請(qǐng)求包給目標(biāo)器件(Target),目標(biāo)器件收到這個(gè)請(qǐng)求包以后給一個(gè)響應(yīng)包到處理器(前提是這個(gè)請(qǐng)求包需要目標(biāo)器件的響應(yīng)),比如存儲(chǔ)器讀操作。一個(gè)典型的請(qǐng)求包的格式如下圖所示
對(duì)于用戶來說,最需要關(guān)注的就是邏輯層(上圖中藍(lán)色部分)各個(gè)字段的含義,F(xiàn)type與Ttype兩個(gè)字段唯一的確定了包的類型,具體的對(duì)應(yīng)關(guān)系請(qǐng)參考2.2節(jié)。邏輯層各個(gè)字段的含義如下表所示
字段
含義
Ftype
格式類型(Format Type),與Ttype共同唯一的確定包的格式
Ttype
事務(wù)類型(Transaction Type),與Ftype共同唯一的確定包的格式
Wrsize/Rdsize
此字段根據(jù)包的類型來決定是寫事務(wù)數(shù)據(jù)的大小還是讀事務(wù)數(shù)據(jù)的大小,這個(gè)字段配合wdptr(word pointer)字段一起使用
Src TID
包的事務(wù)ID(Transaction ID)號(hào)
Extended Address
擴(kuò)展地址,這是一個(gè)可選字段,指定50-bit物理地址的高16-bit或者66-bit物理地址的高32-bit
Address
29-bit的物理地址,由于RapidIO傳輸以一個(gè)雙字(double-word)為基本單元,大多數(shù)嵌入式系統(tǒng)是32位的,所以一個(gè)字(word)占用4個(gè)字節(jié),一個(gè)雙字(double-word)占用8個(gè)字節(jié),所以29-bit的物理地址指向的一個(gè)存儲(chǔ)單元實(shí)際上是占用8個(gè)字節(jié)的,這樣用29-bit的物理地址實(shí)際上可以訪問4G(2^32)的內(nèi)存空間
Wdptr
字指針(Word pointer),配合Wrsize/Rdsize字段來指明數(shù)據(jù)的大小以及對(duì)齊方式,詳細(xì)的說明請(qǐng)查看RapidIO_Rev_2.2_Specification第33頁
Xamsbs
擴(kuò)展地址最高位(Extended address most significant bits),把物理地址進(jìn)一步擴(kuò)展2位,由于29-bit的地址已經(jīng)可以訪問4G內(nèi)存空間,在最高位擴(kuò)展2位以后就可以訪問16G的內(nèi)存空間
Data Payload
要傳輸?shù)臄?shù)據(jù)
3.3 響應(yīng)包格式
當(dāng)一個(gè)RapidIO端點(diǎn)完成由另一個(gè)RapidIO端點(diǎn)發(fā)起的請(qǐng)求時(shí),該端點(diǎn)就會(huì)發(fā)送一個(gè)響應(yīng)事務(wù)。響應(yīng)事務(wù)包總是以與請(qǐng)求事務(wù)包相同的方式被發(fā)送和傳輸。從廣義上說,第12、13、14 和15類格式(Ftype=12表示的就是第12類格式)是響應(yīng)類事務(wù)的格式。通常,第 12和14類是保留的,第15類由具體應(yīng)用定義, 第13類才是主要的響應(yīng)類事務(wù)。第13類包格式返回狀態(tài),數(shù)據(jù)(如果需要)和請(qǐng)求者的事務(wù)ID。帶有“ERROR”狀態(tài)或沒有預(yù)期的數(shù)據(jù)裁荷的響應(yīng)的RESPONSE包沒有數(shù)據(jù)載荷。響應(yīng)包使用第13類格式來響應(yīng)除維護(hù)和無響應(yīng)寫之外的所有請(qǐng)求包。維護(hù)響應(yīng)包響應(yīng)維護(hù)請(qǐng)求。一個(gè)典型的響應(yīng)包的格式如下圖所示
邏輯層各個(gè)字段的含義如下表所示
字段
值
含義
Ftype
4’b1101
格式類型(Format Type),與Ttype唯一的確定包的格式,對(duì)于一個(gè)有效的響應(yīng)包來說,此字段的值固定為4’b1101,也就是16進(jìn)制的d
Ttype
4’b0000
不攜帶數(shù)據(jù)的響應(yīng)
4’b0001~4’b0111
保留
4’b1000
攜帶數(shù)據(jù)的響應(yīng)
4’b1001~4’b1111
保留
Status
4’b0000
DONE狀態(tài):表示請(qǐng)求事務(wù)得到了正確的響應(yīng)
4’b0001~4’b0110
保留
4’b0111
ERROR狀態(tài):表示請(qǐng)求事務(wù)出現(xiàn)了不可恢復(fù)的錯(cuò)誤,未能得到正確的響應(yīng)
4’b1000~4’b1011
保留
4’b1100~4’b1111
用戶自定義響應(yīng)
Target TID
——
目標(biāo)事務(wù)ID(Transaction ID)號(hào)
Data Payload
——
響應(yīng)包攜帶的數(shù)據(jù),如果是不攜帶數(shù)據(jù)的響應(yīng),那么這個(gè)字段就不存在
3.4 常用的I/O邏輯操作事務(wù)
1、讀操作(NREAD)
讀操作由一個(gè)NREAD事務(wù)和一個(gè)RESPONSE事務(wù)組成,NREAD事務(wù)由請(qǐng)求方(Requestor)發(fā)起,目標(biāo)方(Destination)正確的處理請(qǐng)求方發(fā)過來的響應(yīng)以后會(huì)給請(qǐng)求方反饋正確的響應(yīng)以及請(qǐng)求方讀取的數(shù)據(jù)。整個(gè)操作的示意圖如下所示
2、寫操作(NWRITE)和流寫操作(SWRITE)
寫操作(write operations)和流寫操作(streaming-write operations)分別由NWRITE和SWRITE事務(wù)組成。請(qǐng)求方可以用這兩種事務(wù)往目標(biāo)方指定的地址寫入數(shù)據(jù)。NWRITE事務(wù)允許多個(gè)雙字(double-word),字(word),半字(half-word)和字節(jié)(byte)作為數(shù)據(jù)負(fù)載(Data Payload)進(jìn)行傳輸,但前提是必須對(duì)數(shù)據(jù)進(jìn)行適當(dāng)?shù)难a(bǔ)0(padded)并進(jìn)行8字節(jié)邊界對(duì)齊。而SWRITE事務(wù)相當(dāng)于用NWRITE事務(wù)傳輸雙字(double-word)的情況,并且SWRITE事務(wù)具有更少的頭部開銷(SWRITE事務(wù)的包格式中把Ttype,Rdsize/Wrsize和srcTID三個(gè)字段全部定義為了Extended Address字段的一部分,所以頭部開銷變少)。NWRITE事務(wù)和SWRITE事務(wù)不需要接收目標(biāo)方的響應(yīng),所以當(dāng)事務(wù)被目標(biāo)方處理完以后并不會(huì)給發(fā)起方反饋任何信息。NWRITE事務(wù)與SWRITE事務(wù)的操作示意圖如下圖所示
3、帶響應(yīng)的寫操作(NWRITE_R)
帶響應(yīng)的寫操作(write-with-response operations)由NWRITE_R事務(wù)和RESPONSE事務(wù)組成。它的整個(gè)請(qǐng)求操作和NWRITE事務(wù)的請(qǐng)求操作完全相同,但是在目標(biāo)方正確處理請(qǐng)求方的NWRITE_R事務(wù)以后,目標(biāo)方會(huì)給請(qǐng)求方反饋一個(gè)響應(yīng)包告訴請(qǐng)求方事務(wù)已經(jīng)被正確的處理。這種機(jī)制可以有效的保證數(shù)據(jù)傳輸?shù)姆€(wěn)定性。NWRITE_R事務(wù)的處理流程如下圖所示
4、原子操作(Atomic Operations)
原子操作(Atomic Operations)又叫做讀-修改-寫操作(Read-modify-Write Operations),它是由ATOMIC事務(wù)和RESPONSE事務(wù)組成,許多協(xié)處理器單元使用該操作來執(zhí)行非一致性(non-coherent)存儲(chǔ)器的同步。它允許攜帶的數(shù)據(jù)量為一個(gè)字(4個(gè)字節(jié)),一個(gè)半字(2個(gè)字節(jié))或者一個(gè)字節(jié),其他數(shù)據(jù)量都是不被允許的。
原子操作既包含了讀操作,也包含了寫操作。目標(biāo)方讀取指定地址的數(shù)據(jù),并把讀取的數(shù)據(jù)返回給請(qǐng)求方,然后對(duì)數(shù)據(jù)執(zhí)行相關(guān)的操作,最后在寫回指定的地址。這個(gè)過程不會(huì)被任何其他的事務(wù)干擾或者打斷。對(duì)數(shù)據(jù)執(zhí)行的操作包括加1運(yùn)算(increment),減1運(yùn)算(decrement),測(cè)試和交換(test-and-swap),置1操作(set)和清0操作(clear),在這些操作中,只有測(cè)試和交換(test-and-swap),比較和交換(compare-and-swap)以及交換(swap)需要處理單元提供數(shù)據(jù)。原子操作的目標(biāo)數(shù)據(jù)可以用NWRITE事務(wù)進(jìn)行初始化。原子操作的整個(gè)操作示意圖如下圖所示
四、維護(hù)操作與包格式
第8類事務(wù)維護(hù)事務(wù)用于訪問 RapidIO能力寄存器(CARs,Capability Registers)、命令和狀態(tài)奇存器( CSRs,Command and Status Register) ,本地定義的寄存器(Locally-Refined Registers)以及數(shù)據(jù)結(jié)構(gòu)(Data Structures)。與其他的請(qǐng)求格式不同,維護(hù)操作的請(qǐng)求和響應(yīng)包格式都是第8類包格式。第8 類包不含地址字段,只含寫請(qǐng)求和讀響應(yīng)的數(shù)據(jù)載荷。
WRSIZE字段規(guī)定了多雙字事務(wù)數(shù)據(jù)載荷的最大長度。數(shù)據(jù)載荷的長度不能超過這個(gè)最大長度,但是如果需要的話,可以比這個(gè)最大長度小。維護(hù)讀請(qǐng)求和維護(hù)請(qǐng)求都產(chǎn)生正確的維護(hù)響應(yīng) 。
維護(hù)事務(wù)的請(qǐng)求包格式如下圖所示
維護(hù)事務(wù)的響應(yīng)包格式如下圖所示
維護(hù)事務(wù)包格式中邏輯層各個(gè)字段(Hopcount字段不屬于邏輯層,下表同樣列出它的含義)的含義如下表所示
字段
值
含義
Ftype
8
第8類事務(wù)代表維護(hù)類事務(wù),維護(hù)類事務(wù)中這個(gè)字段固定為8
Ttype
4’b0000
指定一個(gè)維護(hù)讀請(qǐng)求
4’b0001
指定一個(gè)維護(hù)寫請(qǐng)求
4’b0010
指定一個(gè)維護(hù)讀響應(yīng)
4’b0011
指定一個(gè)維護(hù)寫響應(yīng)
4’b0100
指定一個(gè)維護(hù)寫端口請(qǐng)求
4’b0101~4’b1111
保留
Hopcount
跳數(shù)是一個(gè)8-bit字段,用于確定維護(hù)事務(wù)的目標(biāo)交換器件。RapidIO交換器件沒有器件ID,跳數(shù)是可供選擇的尋址交換器件機(jī)制
Config Offset
用于讀寫CAR/CSR寄存器的雙字偏移量
Src TID
維護(hù)請(qǐng)求包的事務(wù)ID
Target TID
維護(hù)響應(yīng)包的事務(wù)ID
Status
4’b0000
DONE狀態(tài):表明請(qǐng)求的事務(wù)成功完成
4’b0001~4’b0110
保留
4’b0111
ERROR狀態(tài):檢查到不可恢復(fù)的錯(cuò)誤
4’b1000~4’b1011
保留
4’b1100~4’b1111
用戶定義
維護(hù)操作由維護(hù)請(qǐng)求事務(wù)和維護(hù)響應(yīng)事務(wù)組成,處理器可以通過這類事務(wù)訪問CARs/CSRs等寄存器中的數(shù)據(jù)。如果發(fā)起的維護(hù)請(qǐng)求事務(wù)需要一個(gè)響應(yīng),那么目標(biāo)方正確處理了維護(hù)請(qǐng)求事務(wù)以后會(huì)給請(qǐng)求方反饋一個(gè)維護(hù)響應(yīng)包而不是由NWRITE_R事務(wù)或NREAD事務(wù)產(chǎn)生的正常響應(yīng)包。它支持讀取配置寄存器的操作執(zhí)行長度是字(4字節(jié)),也可以是雙字( 8字節(jié))或設(shè)計(jì)者自已指定的雙字的整數(shù)倍長,但執(zhí)行長度最多不得超過64 字節(jié)。所有寫配置寄存器的操作的執(zhí)行長度規(guī)定與讀操作相同。維護(hù)操作的示意圖如下圖所示
五、消息操作與包格式
5.1 引言
分布式處理系統(tǒng)的一般方法是使用連接到分布式存儲(chǔ)器部件的緊耦合處理器。這些處理器可能運(yùn)行在一個(gè)単獨(dú)的操作系統(tǒng)下。例如,,一個(gè)單Linux系統(tǒng)可以在最多數(shù)十個(gè)處理器上有效地運(yùn)行。通常一個(gè)單操作系統(tǒng)的任務(wù)是管理處理器組和存儲(chǔ)器組。多數(shù)情況下,處理器可以高效地計(jì)算出通用硬件維護(hù)的一致性存儲(chǔ)器空間。這允許處理器通過使用信號(hào)量(semaphores )、自旋鎖(spin lock)和處理器間中斷來解決任務(wù)的初始化和完成的通信問題。操作系統(tǒng)使用頁保護(hù)方案集中管理存儲(chǔ)器。這種多處理技術(shù)十分成熟,已經(jīng)使用了幾十年。
在其他分布式系統(tǒng)中,處理器和存儲(chǔ)器的耦合度可能松一些。若干操作系統(tǒng)或者內(nèi)核可能在同一系統(tǒng)中共存,每個(gè)內(nèi)核負(fù)責(zé)整個(gè)系統(tǒng)的一小部分。這些內(nèi)核可能來自不同的軟件供應(yīng)商,可能運(yùn)行在不同的處理器體系結(jié)構(gòu)上。在這些系統(tǒng)中使用簡(jiǎn)單的通信機(jī)制是十分有用的;內(nèi)核可以使用該機(jī)制與系統(tǒng)內(nèi)的其他內(nèi)核通信。例如,運(yùn)行Linux的PowerPC處理器可能與運(yùn)行QNX的TigerSHARC數(shù)字信號(hào)處理器通信。對(duì)于一個(gè)給定的應(yīng)用,可能沒有理由在這些器件間共享存儲(chǔ)器空間。在這種類型的系統(tǒng)中,需要一種在所有器件上可用的通用硬件和軟件接口機(jī)制來簡(jiǎn)單、經(jīng)濟(jì)地完成高性能通信。在這些系統(tǒng)中,處理器之間通過消息傳遞進(jìn)行通信。
在這些消息傳遞系統(tǒng)中,經(jīng)常使用兩種機(jī)制將命令或數(shù)據(jù)從一個(gè)器件移動(dòng)到另一個(gè)器件, 第一種機(jī)制稱為直接存儲(chǔ)器訪問(DMA),第二種稱為消息(Message)。這兩種模型的主要差別是,DMA事務(wù)由源端操縱,而消息由目標(biāo)端操縱。這意味著DMA源端不僅需要訪問目標(biāo),還必須具有對(duì)目標(biāo)的地址空間的可見性。消息的源端僅需訪問目標(biāo),而不需要對(duì)目標(biāo)地址空間的可見性。在分布式系統(tǒng)中,通常DMA和消息機(jī)制是結(jié)合使用的。
RapidIO體系結(jié)構(gòu)包括一種可以用于消息的包傳輸機(jī)制。RapidIO消息模型應(yīng)滿足下列目標(biāo):
1、消息由一個(gè)或多個(gè)事務(wù)組成,這些事務(wù)可以通過無序的互連發(fā)送和接收。
2、發(fā)送者可以有多個(gè)正在排隊(duì)等待發(fā)送的未完成的消息。
3、發(fā)送者可以在低優(yōu)先級(jí)消息前發(fā)送高優(yōu)先級(jí)消息,也可以為了發(fā)送一個(gè)高優(yōu)先級(jí)消息而搶占低優(yōu)先級(jí)消息,并在高優(yōu)先級(jí)消息完成后恢復(fù)低優(yōu)先級(jí)消息(基于優(yōu)先級(jí)的并發(fā)性)。
4、發(fā)送者無需了解接收者的內(nèi)部結(jié)構(gòu)或存儲(chǔ)器映射。
5、消息接收者控制它本身的本地地址空間。
6、如果需要,接收者可以有多個(gè)未完成的正在排隊(duì)等待服務(wù)的消息。
7、如果需要,接收者可以接收多個(gè)并發(fā)的多事務(wù)(multiple-transaction)消息。
RapidIO消息傳遞邏輯規(guī)范定義了兩種不同的包格式用于消息事務(wù)。第10類包格式用來發(fā)送非常短的16位數(shù)據(jù)載荷,第10類包也稱為門鈴(DOORBELL)事務(wù),門鈴事務(wù)很適合發(fā)送處理器間的中斷。多事務(wù)消息用第11類包發(fā)送最多4096字節(jié)的數(shù)據(jù)載荷。下面將分別介紹兩種事務(wù),
5.2 門鈴事務(wù)(DOORBELL)
第10類包格式是門鈴事務(wù)格式。它沒有數(shù)據(jù)載荷。門鈴事務(wù)的請(qǐng)求包格式如下圖所示
上圖中Ftype字段固定為10,表示這是一個(gè)門鈴事務(wù),8位的Reserved字段應(yīng)該置0,Source TID指的是請(qǐng)求方的事務(wù)ID, info(msb)表示的是發(fā)送信息的高8位,info(lsb)表示的是發(fā)送信息的低8位。如果信息是用數(shù)字表示的,而且長度大于8位,那么數(shù)據(jù)符合低地址存放高字節(jié)(big-endian)的格式。比特流中先到達(dá)的是高字節(jié)。門鈴事務(wù)適合向處理器遞送中斷信息,在這種情況下,信息字段用來向接收者傳遞中斷級(jí)別和目標(biāo)信息,除此以外,還可以在處理器件間發(fā)送信號(hào)量。
一個(gè)完整的門鈴操作由DOORBELL事務(wù)和RESPONSE事務(wù)(通常是DONE響應(yīng))組成。處理單元用這個(gè)操作將非常短的消息通過互連結(jié)構(gòu)發(fā)送到另一個(gè)處理器部件。門鈴事務(wù)包括用于保持事務(wù)信息的信息字段。該事務(wù)沒有數(shù)據(jù)載荷。它的信息字段是由軟件定義的,可以用子任何目的。通常,運(yùn)行在處理器上的操作系統(tǒng)會(huì)定義門鈴事務(wù)使用的信息字段的意義。收到門鈴事務(wù)的處理器部件將包放進(jìn)處理器部件中的門鈴消息隊(duì)列,該隊(duì)列可以在硬件或者本地存儲(chǔ)器中實(shí)現(xiàn)。一個(gè)完整的門鈴操作如下圖所示
5.3 消息事務(wù)
第11類包為消息事務(wù)格式包。第11類包總有數(shù)據(jù)載荷,并且數(shù)據(jù)載荷長度總是雙字(64-bits或8-bytes)長度的整數(shù)倍。沒有規(guī)定子雙字(sub-double-word)消息,如果需要的話,可以由軟件管理子雙字消息。一個(gè)消息請(qǐng)求包的格式如下圖所示
圖中邏輯層各個(gè)字段的含義如下表所示
字段
值
含義
Ftype
11
Ftype=11表示這是一個(gè)MESSAGE事務(wù)
Msglen
消息長度(Message Length):指的是組成該消息的包的總數(shù)。值為0時(shí)表明該包是一個(gè)單包消息,值為15(4’b1111)時(shí),表明這是一個(gè)由16個(gè)包組成的消息。
Ssize
標(biāo)準(zhǔn)消息包數(shù)據(jù)大小(Stardard message packet data size)。該字段告訴消息接收者一個(gè)單獨(dú)消息操作除消息中最后一個(gè)包外組成消息的所有包的數(shù)據(jù)載荷大小。這樣可以防止發(fā)送者過度延長最后一個(gè)包的數(shù)據(jù)字段并允許接收者正確的將包放入本地存儲(chǔ)器
4’b0000~4’b1000
保留(Reserved)
4’b1001
8字節(jié)(byte)
4’b1010
16字節(jié)(byte)
4’b1011
32字節(jié)(byte)
4’b1100
64字節(jié)(byte)
4’b1101
128字節(jié)(byte)
4’b1110
256字節(jié)(byte)
4’b1111
保留(Reserved)
Letter
信件。該字段用來識(shí)別信箱(MailBox)中的一個(gè)槽(SLOT)。該字段允許發(fā)送方同時(shí)發(fā)送最多4個(gè)消息到接收方的同一個(gè)信箱中
Mbox
信箱(MailBox)。該字段用來指定目標(biāo)處理部件中的接收信箱
Msgseg
消息段(Message Segment)。該字段用來表明該包是組成消息的包中的第幾個(gè)包。值為0表明該包是消息的第一個(gè)包。值為15(4’b1111)表明該包是消息的第16個(gè)包。
Xmbox
對(duì)于單包數(shù)據(jù)消息事務(wù),該字段用來指明目標(biāo)信箱的高四位。該字段與Msgseg占用相同的字段。Xmbox字段和mbox字段組合使用的定義如下:
xmbox || mbox : mailbox number
0000 00????? : mailbox 0
0000 01????? : mailbox 1
0000 10????? : mailbox 2
0000 11????? : mailbox 3
0001 00????? : mailbox 4
……
1111 11????? : mailbox 63
盡管RapidIO規(guī)范使用信箱(MailBox)、信件(Letter)和消息分段(Message Segment)之類的術(shù)語,但是這些字段在邏輯上指的是一個(gè)8位的消息標(biāo)識(shí)符信息。消息標(biāo)識(shí)符信息可以用來惟一的標(biāo)識(shí)和管理任意兩個(gè)處理部件之間最多256個(gè)不同的消息流。接收處理部件的消息傳遞硬件會(huì)根據(jù)該信息計(jì)算應(yīng)該把事務(wù)數(shù)據(jù)存放在本地存儲(chǔ)器的什么位置。
例如,假設(shè)接受處理部件的信箱0、信箱1、信箱2和信箱3的起始地址分別為地址0x1000、0x2000、0x3000和0x4000,處理部件接收到的消息事務(wù)帶有下列字段:
A、消息長度為6個(gè)包(msglen = 4’b0110)
B、消息段是第3個(gè)包(msgseg = 4’b0011)
C、信箱為信箱2(mbox = 2’b10)
D、信件為1(letter = 2’b01)
E、標(biāo)準(zhǔn)大小為32字節(jié)(ssize = 4’b1011)
F、數(shù)據(jù)載荷為32字節(jié)(由于這不是最后一個(gè)事務(wù), 所以數(shù)據(jù)載荷應(yīng)該是32字節(jié))
處理部件的消息傳遞硬件使用這些信息來決定將這部分?jǐn)?shù)據(jù)消息所含32字節(jié)數(shù)據(jù)存放到本地存儲(chǔ)器地址0x3040。
目標(biāo)地址 = 信箱2基地址(Mailbox_2_base) + (消息分段x標(biāo)準(zhǔn)長度)
0x3040? =??? 0x3000??? ???????????????+ (0x0002 x 0x0020)
這個(gè)簡(jiǎn)單的尋址結(jié)構(gòu)使得接收處理部件很容易計(jì)算存儲(chǔ)消息數(shù)據(jù)的目標(biāo)存儲(chǔ)結(jié)構(gòu)的地址。不僅計(jì)算起來容易,而且接收者的目標(biāo)存儲(chǔ)器結(jié)構(gòu)的位置對(duì)發(fā)送者也是不可見的。這允許僅在處理器部件間提供基于消息通信的安全系統(tǒng)研發(fā)工作。
消息的響應(yīng)事務(wù)也是由第13類包產(chǎn)生,與NREAD事務(wù)和NWRITE_R事務(wù)響應(yīng)包不同的是,消息事務(wù)的響應(yīng)包中的target_info字段占用了普通響應(yīng)包中的target ID字段的位置,具體的響應(yīng)包格式見下圖
其中消息響應(yīng)包中邏輯層Ftype字段,Ttype字段,Status字段以及Data Payload字段的含義與普通響應(yīng)包中各字段的含義完全相同, Target_info字段由letter,mbox和msgseg三個(gè)字段組成,這三個(gè)字段的含義與消息請(qǐng)求包中這三個(gè)字段的含義完全相同,這里不再贅述。
由消息和響應(yīng)(一般是DONE響應(yīng))事務(wù)組成的數(shù)據(jù)消息操作如下圖所示,處理部件的支持消息傳遞的硬件用它向另一個(gè)處理部件發(fā)送數(shù)據(jù)消息。完成一次數(shù)據(jù)消息操作最多需要16個(gè)單獨(dú)的消息事務(wù)。消息事務(wù)數(shù)據(jù)載荷的大小是雙字長度(8個(gè)字節(jié))的整數(shù)倍。最大的消息操作載荷是4096字節(jié),該載荷由16個(gè)消息事務(wù)組成,每個(gè)事務(wù)攜帶256字節(jié)的數(shù)據(jù)載荷。信件( letter),信箱(mbox)和消息段(msgseg)組合在一起,惟一地標(biāo)識(shí)系統(tǒng)中每個(gè)請(qǐng)求和響應(yīng)部件對(duì)的消息包,與其他請(qǐng)求類型使用的事務(wù) ID的作用一樣。
六、總結(jié)
RapidIO的事務(wù)大致就上面幾種,下圖把所有的事務(wù)都放在一起以便于大家更快的查看相關(guān)的包格式與各個(gè)字段的位置。
這里有幾點(diǎn)值得注意的是:
1、 每個(gè)包的邏輯層字段與上文所講的各個(gè)包的邏輯層字段定義完全相同
2、 上圖物理層字段的前10位所代表的字段ackID,rsvd,crf以及prio與正文中包格式的物理層字段有所出入,這是因?yàn)檎乃v解的包都是并行物理層的包格式,而上圖中是串行物理層的包格式,所以物理層字段會(huì)有一點(diǎn)點(diǎn)區(qū)別,具體的內(nèi)容請(qǐng)閱讀下一篇博客。
3、 上圖每個(gè)包CRC字段的后面還有一些字段是正文中包格式所沒有講到的。這里特地解釋一下:由于RapidIO包的總長度大于80個(gè)字節(jié)以后,RapidIO包會(huì)對(duì)前80個(gè)字節(jié)生成一個(gè)2字節(jié)CRC碼并補(bǔ)0使字節(jié)邊界對(duì)齊。然后80字節(jié)以上的數(shù)據(jù)放在處理完畢以后的數(shù)據(jù)后面繼續(xù)發(fā)送,發(fā)送完畢以后生成第二個(gè)CRC碼并補(bǔ)0使字節(jié)邊界再次對(duì)齊,其中第二個(gè)CRC校驗(yàn)碼是第一個(gè)CRC校驗(yàn)碼的延續(xù)。因此上圖中會(huì)出現(xiàn)后面的那些字段。后面我會(huì)寫一篇博客教大家怎么使用RapidIO核,到時(shí)候看完這種大于80字節(jié)傳輸?shù)臅r(shí)序圖就能明白這個(gè)過程了。
七、參考資料
1、RapidIO??Interconnect Specification,下載鏈接 https://pan.baidu.com/s/1ek-3AAhetLAcxTuOE2IyMg
2、RapidIO嵌入式系統(tǒng)互連,電子工業(yè)出版社
3、Xilinx的pg007_srio_gen2,- https://china.xilinx.com/support/documentation/ip_documentation/srio_gen2/v4_0/pg007_srio_gen2.pdf
轉(zhuǎn)載地址:https://www.cnblogs.com/liujinggang/p/9925859.html
TCP/IP 單片機(jī) 通用安全
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。