許樹(shù)軍,黃 镠,牛戴楠,王 銳
(中國(guó)船舶重工集團(tuán)公司第七二四研究所,南京 211153)
基于FPGA的Serial RapidIO協(xié)議 的設(shè)計(jì)與實(shí)現(xiàn)
許樹(shù)軍,黃镠,牛戴楠,王銳
(中國(guó)船舶重工集團(tuán)公司第七二四研究所,南京 211153)
摘要:在對(duì)RapidIO協(xié)議和Serial RapidIO(SRIO,下同) IPcore用戶接口介紹的基礎(chǔ)上,詳細(xì)描述了Serial RapidIO交換架構(gòu)在FPGA上的編程方法,并采用雙緩存機(jī)制實(shí)現(xiàn)了位寬、數(shù)據(jù)流速的轉(zhuǎn)換,完成了多SRIO節(jié)點(diǎn)間的高速數(shù)據(jù)通信,具有較強(qiáng)的通用性和可移植性。
關(guān)鍵詞:FPGA;SRIO IPcore;RapidIO;高速通信;串行接口
0引言
RapidIO高速總線技術(shù)主要為了實(shí)現(xiàn)系統(tǒng)內(nèi)部設(shè)備互連,總線支持芯片到芯片和板到板通信。其規(guī)范采用三層分級(jí)體系結(jié)構(gòu):邏輯層、傳輸層和物理層。在物理連接上,它支持兩種方式:并行模式和串行模式。與并行模式相比,串行模式具有更少的連接管腳、更大的帶寬、更高的擴(kuò)展性能、更低的成本等優(yōu)點(diǎn)。
本文采用Xilinx公司Virtex6系列的FPGA實(shí)現(xiàn)高速串行RapidIO(SRIO)接口,即利用FPGA內(nèi)RocketIO模塊實(shí)現(xiàn)3.125Gbps ×4的SRIO高速接口。
1用戶接口介紹
RapidIO數(shù)據(jù)交換流程是基于請(qǐng)求和響應(yīng)事務(wù)的。包是系統(tǒng)中各設(shè)備端點(diǎn)間的基本通信單元,發(fā)起端點(diǎn)產(chǎn)生一個(gè)請(qǐng)求事務(wù),該事務(wù)被發(fā)送至目標(biāo)端點(diǎn)。目標(biāo)端點(diǎn)產(chǎn)生一個(gè)響應(yīng)事務(wù)直至發(fā)起端點(diǎn)來(lái)完成該次操作。圖1顯示了FPGA中SRIO端點(diǎn)支持的幾種典型包格式。
圖1中,ackID為物理層的包號(hào);crf為擴(kuò)展優(yōu)先級(jí)位;prio為包的優(yōu)先級(jí);tt為器件尋址模式,=00為8位地址模式,=01為16位地址模式;Ftype為包格式類型字段;Ttype為事務(wù)類型字段;srcTID為源事務(wù)ID號(hào);目的地址和源地址的長(zhǎng)度由tt字段決定。所有包以16位循環(huán)冗余校驗(yàn)碼(CRC)結(jié)束。
圖1 FPGA中SRIO支持的典型包格式
SRIO IPcore已經(jīng)實(shí)現(xiàn)了SRIO協(xié)議中的物理層、傳輸層和邏輯層的功能,用戶只需對(duì)用戶接口部分進(jìn)行編程就可以實(shí)現(xiàn)FPGA與外部其他設(shè)備端點(diǎn)(以下以CPU處理器為例介紹,其他端點(diǎn)類似)的高速數(shù)據(jù)交換。
用戶接口分為源端事務(wù)接口和目的端事務(wù)接口。源端事務(wù)包括源端點(diǎn)發(fā)起的請(qǐng)求事務(wù)和目的端對(duì)該請(qǐng)求事務(wù)應(yīng)答回來(lái)的響應(yīng)事務(wù),目的端事務(wù)是目的端點(diǎn)發(fā)過(guò)來(lái)的請(qǐng)求事務(wù)及源端點(diǎn)對(duì)該請(qǐng)求事務(wù)進(jìn)行應(yīng)答的響應(yīng)事務(wù)。圖2顯示了典型的有響應(yīng)事務(wù)操作過(guò)程。無(wú)響應(yīng)事務(wù)只有請(qǐng)求事務(wù),沒(méi)有響應(yīng)事務(wù)。
圖2 典型的有響應(yīng)事務(wù)操作過(guò)程
SRIO IPcore的用戶接口如圖3所示,包括源端事務(wù)請(qǐng)求用戶接口、源端事務(wù)響應(yīng)用戶接口、目的端事務(wù)請(qǐng)求用戶接口和目的端事務(wù)響應(yīng)用戶接口。
圖3 邏輯層用戶接口框圖
考慮在FPGA中實(shí)現(xiàn)SRIO協(xié)議的主要目的是為了高速的數(shù)據(jù)交換,即FPGA發(fā)送或接收高速數(shù)據(jù)流。為了編程邏輯實(shí)現(xiàn)的簡(jiǎn)單可靠,本文在設(shè)計(jì)中主要實(shí)現(xiàn)了兩類事務(wù)接口:流寫(Ftype=6)和門鈴(Ftype=10),均采用8位器件地址和34位尋址模式。下面對(duì)源端事務(wù)請(qǐng)求接口的信號(hào)作簡(jiǎn)要說(shuō)明,其他接口信號(hào)與此類似。
ireq_sof_n表示一包的開(kāi)始,低電平有效;ireq_eof_n表示一包的結(jié)束,低電平有效;ireq_vld_n數(shù)據(jù)有效標(biāo)志,只有在ireq_vld_n為低電平時(shí)其他接口信號(hào)才有效;ireq_rdy_n為邏輯層準(zhǔn)備就緒信號(hào)指示,其他信號(hào)必須在ireq_rdy_n有效的情況下才被邏輯層接受;ireq_prio[0:1]包的優(yōu)先級(jí),取值范圍0~3,在數(shù)據(jù)包中一般取值0~2,最低優(yōu)先級(jí)為0,最高優(yōu)先級(jí)為3;ireq_ftype[0:3]表示包格式類型,ireq_ttype[0:3]表示事務(wù)類型,如表示流寫(SWRITE)的Ftype=6,流寫只有一種事務(wù)類型,所以Ttype的值可以忽略,表示寫(WRITE)的Ftype=5,Ttype有如下幾種情況(Ttype=4 NWRITE,Ttype=5 NWRITE_R等);ireq_dest_id[0:7]表示目的端的端點(diǎn)號(hào),采用8位器件地址模式(tt=0),所以最多可以尋址256個(gè)端點(diǎn)(0xFF端點(diǎn)號(hào)一般不采用);ireq_tid[0:7]表示事務(wù)ID,在端點(diǎn)之間交換數(shù)據(jù)包時(shí)指示這是第幾個(gè)事務(wù),一般采用自動(dòng)累加計(jì)數(shù)器,每傳輸一包使該字段加一;ireq_data[0:63] 8字節(jié)的傳輸數(shù)據(jù);ireq_addr[0:33] 34位字節(jié)尋址的地址偏移量。
一次流寫請(qǐng)求事務(wù)的時(shí)序圖如圖4所示:在ireq_rdy_n和ireq_vld_n有效的情況下, ireq_sof_n為低電平指示一包數(shù)據(jù)的開(kāi)始,在ireq_sof_n有效時(shí)鐘周期內(nèi)采集其他接口信號(hào)的值;包開(kāi)始后,在每個(gè)有效時(shí)鐘周期(ireq_rdy_n和ireq_vld_n都有效)采集ireq_data上的數(shù)據(jù),直到ireq_eof_n有效,采集最后一個(gè)數(shù)據(jù)值,從而一包完整的數(shù)據(jù)即可傳送到邏輯層內(nèi)部。
微小鈣化是超聲診斷甲狀腺癌的重要指標(biāo)之一,其特異性較強(qiáng),尤其是對(duì)乳頭狀癌的特異性較高。因當(dāng)微小鈣化這一指征出現(xiàn)時(shí),考慮甲狀腺癌的幾率較高。
圖4 SWRITE 源端請(qǐng)求時(shí)序圖
2設(shè)計(jì)實(shí)現(xiàn)
接口邏輯主要完成FPGA內(nèi)部邏輯與SRIO IPcore之間正確的數(shù)據(jù)交換,包括兩個(gè)方面的功能:把FPGA內(nèi)部數(shù)據(jù)流按照SRIO核的接口時(shí)序要求形成發(fā)送數(shù)據(jù)包;正確解析SRIO核接收到的其他端點(diǎn)發(fā)送來(lái)的數(shù)據(jù)包,并形成相應(yīng)的響應(yīng)事務(wù)包。
設(shè)計(jì)中采用源端事務(wù)和目的端事務(wù)分離的模式。為了在FPGA中的邏輯實(shí)現(xiàn)方便,所有的數(shù)據(jù)傳輸都是采用8字節(jié)對(duì)齊的方式(每次傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)為8的整數(shù)倍)。
在數(shù)據(jù)接收過(guò)程中,如果收到的是寫事務(wù),則根據(jù)接收到的偏移地址值把接收到的有效數(shù)據(jù)寫入相應(yīng)地址的RAM;如果收到的是門鈴,則判斷門鈴號(hào)。
數(shù)據(jù)發(fā)送的過(guò)程是先傳輸數(shù)據(jù),在一次數(shù)據(jù)傳輸完畢后發(fā)送門鈴信號(hào)通知目的端點(diǎn)讀取數(shù)據(jù),這樣就完成了一次數(shù)據(jù)的傳輸,接著啟動(dòng)下一次的數(shù)據(jù)傳輸。在RapidIO協(xié)議中規(guī)定,每個(gè)事務(wù)包的有效數(shù)據(jù)載荷在1~256字節(jié)之間(無(wú)有效數(shù)據(jù)載荷的包除外)。為了最大化傳輸效率,在設(shè)計(jì)中采用除最后一個(gè)數(shù)據(jù)包外其他包的有效數(shù)據(jù)載荷都為256個(gè)字節(jié)。
數(shù)據(jù)接收的實(shí)現(xiàn)過(guò)程相對(duì)簡(jiǎn)單,只要根據(jù)接收到的地址把數(shù)據(jù)正確寫入接收數(shù)據(jù)的雙口RAM中,接收完畢給出標(biāo)志信號(hào)即可完成一包數(shù)據(jù)的正確接收。
數(shù)據(jù)發(fā)送過(guò)程相對(duì)復(fù)雜一些,需要把傳輸?shù)臄?shù)據(jù)分成不大于256字節(jié)的包,并根據(jù)每包傳輸?shù)淖止?jié)數(shù)控制每包的偏移地址量,保證數(shù)據(jù)傳輸正確。由于RapidIO核每接收一個(gè)完整的包都要進(jìn)行包數(shù)據(jù)的重組,且RapidIO核的緩存區(qū)大小也有限制,所以傳輸過(guò)程中需要握手信號(hào)控制雙方的通信時(shí)序。如圖5所示,設(shè)計(jì)中采用兩級(jí)緩存結(jié)構(gòu)。SRIO核的邏輯層時(shí)鐘是156.25MHz、數(shù)據(jù)位寬是64bit,F(xiàn)PGA的數(shù)據(jù)位寬和時(shí)鐘頻率很可能和SRIO核不匹配。為了解決時(shí)鐘域、數(shù)據(jù)位寬變換等問(wèn)題,設(shè)計(jì)中加入了第一級(jí)緩存。由于每個(gè)RapidIO事務(wù)包的有效數(shù)據(jù)載荷不大于256個(gè)字節(jié),加入第二級(jí)緩存完成數(shù)據(jù)分包功能,把FPGA的輸入數(shù)據(jù)分成不大于256個(gè)字節(jié)的RapidIO流事務(wù)包。
圖5 具體實(shí)現(xiàn)框圖
第一級(jí)緩存主要實(shí)現(xiàn)與FPGA傳輸數(shù)據(jù)的接口。為了防止數(shù)據(jù)丟失,第一級(jí)雙口RAM的容量根據(jù)實(shí)際需要可以設(shè)置足夠大的空間。命令FIFO每傳輸256*N個(gè)字節(jié)數(shù)據(jù)或數(shù)據(jù)傳輸結(jié)束寫一次。命令FIFO存儲(chǔ)的內(nèi)容包括目的端點(diǎn)號(hào)、包格式類型、事務(wù)類型、偏移地址量、雙口RAM中數(shù)據(jù)的起始地址和數(shù)據(jù)長(zhǎng)度。在每次數(shù)據(jù)傳輸結(jié)尾,要把這次傳輸?shù)淖止?jié)總長(zhǎng)度和一些附加信息傳輸出去,最后傳輸門鈴給對(duì)方,通知對(duì)方接收數(shù)據(jù)。流程如圖6所示。
圖6 第一級(jí)緩存寫狀態(tài)機(jī)
第二級(jí)緩存是把第一級(jí)緩存的數(shù)據(jù)包按照RapidIO協(xié)議分包,并最終實(shí)現(xiàn)與RapidIO邏輯層的接口時(shí)序。流程如圖7所示。首先判斷第一級(jí)FIFO是否為空,如果不為空,讀取FIFO中的信息,根據(jù)讀出的包格式類型、數(shù)據(jù)在第一級(jí)RAM中的起始地址和數(shù)據(jù)長(zhǎng)度,產(chǎn)生RapidIO傳輸包。如果數(shù)據(jù)長(zhǎng)度大于256個(gè)字節(jié),則讀取256個(gè)字節(jié),產(chǎn)生數(shù)據(jù)長(zhǎng)度為256個(gè)字節(jié)的SWRITE事務(wù)包,直到數(shù)據(jù)長(zhǎng)度不大于256個(gè)字節(jié)產(chǎn)生最后一個(gè)寫事務(wù)包。
圖7 第二級(jí)緩存寫狀態(tài)機(jī)
由于RapidIO協(xié)議是基于交換結(jié)構(gòu)的,在數(shù)據(jù)正常通信前必須要配置整個(gè)系統(tǒng)的交換路由關(guān)系,在系
統(tǒng)配置期間是不能正常通信的,所以在最終的設(shè)計(jì)中用戶接口要加入通信使能開(kāi)關(guān),在系統(tǒng)配置完畢之前不能開(kāi)始數(shù)據(jù)傳輸。
最終的設(shè)計(jì)采用VHDL語(yǔ)言在Xilinx公司的XC6VLX550T上實(shí)現(xiàn)。為了實(shí)現(xiàn)一對(duì)多的數(shù)據(jù)交換功能,設(shè)計(jì)實(shí)現(xiàn)中增加了第一級(jí)緩存雙口RAM容量,同時(shí)加入更多的命令FIFO深度來(lái)實(shí)現(xiàn)多點(diǎn)通信能力。按照RapidIO協(xié)議成功發(fā)送數(shù)據(jù)如圖8所示,在ireq_rdy_n和ireq_vld_n都為低電平的情況下 ireq_sof_n為低電平指示一包數(shù)據(jù)的開(kāi)始,在ireq_sof_n有效時(shí)鐘周期內(nèi)采集其他接口信號(hào)的值,包括優(yōu)先級(jí)、數(shù)據(jù)長(zhǎng)度、事務(wù)類型、節(jié)點(diǎn)號(hào)、起始地址等;包開(kāi)始后,在每個(gè)有效時(shí)鐘周期(ireq_rdy_n和ireq_vld_n都為低電平)采集ireq_data上的數(shù)據(jù),直到ireq_eof_n有效,采集最后一個(gè)數(shù)據(jù)值,從而一包完整的數(shù)據(jù)即可傳送到邏輯層內(nèi)部。
圖8 發(fā)送數(shù)據(jù)成功時(shí)序圖
3結(jié)束語(yǔ)
RapidIO是面向系統(tǒng)互連和交換結(jié)構(gòu)的標(biāo)準(zhǔn),具有握手協(xié)議簡(jiǎn)單、低緩沖開(kāi)銷等特點(diǎn)。FPGA的高速邏輯陣列、高級(jí)I/O能力和可重編程性,應(yīng)用FPGA來(lái)實(shí)現(xiàn)RapidIO協(xié)議變得簡(jiǎn)便可行。RapidIO技術(shù)使FPGA的接口適應(yīng)能力大大提高,使交換結(jié)構(gòu)的使用設(shè)備設(shè)計(jì)和升級(jí)更加靈活。
RapidIO用戶接口實(shí)現(xiàn)中,由于需要適應(yīng)不同接口位寬和不同傳輸速率的數(shù)據(jù)流,并且RapidIO的邏輯層接口也有嚴(yán)格的時(shí)序要求,為了接口邏輯的適用性更強(qiáng),設(shè)計(jì)中采用了兩級(jí)緩沖機(jī)制,第一級(jí)緩沖實(shí)現(xiàn)FPGA數(shù)據(jù)流的存儲(chǔ)和位寬變化,第二級(jí)緩沖用來(lái)實(shí)現(xiàn)與RapidIO邏輯層的接口時(shí)序。在時(shí)序關(guān)系調(diào)整正確后,第二級(jí)緩沖的邏輯就可以固定下來(lái),因此只需修改第一級(jí)緩沖的邏輯來(lái)適應(yīng)不同速率和位寬的數(shù)據(jù)流傳輸。RapidIO程序具有較強(qiáng)的通用性和可移植性。
參考文獻(xiàn):
[1]Sam FullerRapidIO嵌入式系統(tǒng)互連[M].北京:電子工業(yè)出版社,2006.6.
[2]LogicCORE IP Serial RapidIO v5.5 user guide,Xilinx Inc,2010.4.
Design and implementation of FPGA-based Serial RapidIO protocol
XU Shu-jun, HUANG Liu, NIU Dai-nan, WANG Rui
(No.724 Research Institute of CSIC, Nanjing 211153)
Abstract:The RapidIO protocol and the Serial RapidIO (SRIO) IPcore user interface (UI) are introduced, on the basis of which the programming method of the SRIO IPcore exchange architecture on the FPGA is described in detail. The two-stage buffer mechanism is adopted to realize the conversion of the bit width and the data rate and complete the high-speed data communication between multiple SRIO nodes. The RapidIO program features strong generality and portability.
Keywords:FPGA; SRIO IPcore; RapidIO; high-speed communication; serial port
中圖分類號(hào):TN911.7
文獻(xiàn)標(biāo)志碼:A
文章編號(hào):1009-0401(2015)04-0036-04
作者簡(jiǎn)介:許樹(shù)軍(1985-),男,工程師,碩士,研究方向:雷達(dá)信號(hào)處理;黃镠(1986-),男,工程師,碩士,研究方向:雷達(dá)信號(hào)處理;牛戴楠(1982-),男,工程師,碩士,研究方向:高速電路板設(shè)計(jì)和數(shù)字信號(hào)處理;王銳(1982-),男,工程師,碩士,研究方向:雷達(dá)信號(hào)處理。
收稿日期:2015-04-04;修回日期:2015-05-09