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

嵌入式系統(tǒng) RapidIO協(xié)議結(jié)構(gòu)詳解

怎么利用FPGA實(shí)現(xiàn)DSP與RapidIO網(wǎng)絡(luò)互聯(lián)?
如何實(shí)現(xiàn)DSP與RapidIO網(wǎng)絡(luò)互聯(lián)?
了解體系結(jié)構(gòu) - 介紹 Arm 體系結(jié)構(gòu)
Arm的DRTM體系結(jié)構(gòu)規(guī)范
《IP交換技術(shù)協(xié)議與體系結(jié)構(gòu)》
一種新型的網(wǎng)格安全體系結(jié)構(gòu)
Cisco出版MPLS和VPN體系結(jié)構(gòu)
一種基于B/S結(jié)構(gòu)與C/S結(jié)構(gòu)結(jié)合的新體系結(jié)構(gòu)

網(wǎng)絡(luò)體系結(jié)構(gòu),什么是網(wǎng)絡(luò)體系結(jié)構(gòu)
一種智能云安全服務(wù)體系結(jié)構(gòu)研究與設(shè)計_黃成榮
米爾科技ARM體系結(jié)構(gòu)與編程介紹

評論