汪安民,韓道文,徐焱
(1.同方電子科技有限公司研究所,九江 332009;2.電子工程學院;3.哈爾濱工業(yè)大學)
多核DSP和FPGA之間的高速SRIO通信
汪安民1,韓道文2,徐焱3
(1.同方電子科技有限公司研究所,九江 332009;2.電子工程學院;3.哈爾濱工業(yè)大學)
在高速采樣系統(tǒng)中,大量數據需要實時傳輸到處理器。尤其是系統(tǒng)中存在多個處理器協(xié)同工作,就需要高速的總線來交換數據。SRIO總線由于存在連線少、傳輸速度高等優(yōu)點,使用較為廣泛。本文介紹了多核DSP和FPGA之間使用SRIO進行數據交換的軟硬件設計方法,在不同數據需求下,介紹了FPGA將數據直接傳輸到DSP的DDR3、片內RAM或者多核的共享RAM中。本文研制了硬件系統(tǒng),給出了各種方式的軟件操作方法和實際硬件平臺驗證,SRIO傳輸速率達到4 Gbps。
多核處理器;SRIO;共享RAM
大規(guī)模集成電路的高速發(fā)展,使得處理器的能力越來越強,進而處理的事件增多;大數據的應用,使得高速寬帶采樣成為必然,高速采樣每秒采集到的信息量遠遠大于低速采樣。高速采集、高速存儲和高速處理成為發(fā)展的必然。這其中,高速傳輸通道是芯片間的數據橋梁,一般要求10 Gbps以上的處理速度,實時傳輸至少要達到幾Gbps。在設備之間,采用萬兆網、USB3.0、光纖通信等;在板間,采用PCIe、VPX等;而在芯片間,采用SRIO(也稱RapidIO)總線是常用方法。
多核處理器片內集成多個處理器,目前得到大規(guī)模使用;同時多核處理器的強處理能力,也豐富了產品的功能。為了支撐功能使用,一般多核處理器都會配置大容量DDR2或DDR3,運行程序和存儲數據,還配置共享RAM空間用于多個核之間的通信,每個核還有自己的私有RAM。一旦其他芯片和多核處理器進行數據交互,可能會和這3個RAM空間進行高速通信。傳統(tǒng)的單處理器交換一定需要CPU參與,CPU讀取數據,然后存儲到芯片的DDR、片內RAM或者片外Flash空間。但這樣,每個數據交互都需要CPU參與,嚴重影響了運行效益。而多核處理器,數據交互遠比單核處理器頻繁,而且要求交互速率也非常高,這就需要數據總線直接進行交互,而不用CPU參與[2]。
本文以8核DSP芯片TMS320C6678(以下簡稱C6678)和xck7325t芯片為例,通過4線SRIO實現(xiàn)FPGA將數據直接傳輸到DSP的DDR3、共享片內RAM的方法。筆者給出了軟硬件設計方法,研究了硬件平臺,實際數據傳輸驗證,該方法可以實現(xiàn)4 Gbps的高速傳輸。
C6678是TI公司多核處理器中的一款8核浮點型DSP,最高工作頻率達到1.25 GHz,單個核具備40 GMAC定點計算或20 GFLOP浮點計算能力,單芯片具備320 GMAC或160 GFLOP的計算能力[3]。C6678的部分片內結構如圖1所示。
圖1 C6678內部結構圖
圖1主要列出了C6678和RAM相關的片內模塊,其他部分未列出。從圖中可以看出,一個超高速的TeraNet(兆兆網絡)總線將大部分模塊連接在一起,數據通過TeraNet總線進行交互。核訪問共享RAM(圖中的MSM SRAM)的速度最快,它們之間不通過TeraNet,而是有專用的數據總線,不會和其他外設產生沖突,核訪問共享RAM的速率大概在50 Gbps。核訪問DDR3的速度僅次于共享RAM,因為DDR3的數據需要通過共享RAM過渡,其讀寫訪問速度有所差別,讀速率至少可以達到10 Gbps,寫速率可以達到20 Gbps。核訪問其他片內和片外設備都要經過TeraNet,可能存在總線仲裁,但這些外設一般不會長時間占據TeraNet總線。
本文關注的SRIO是直接掛在TeraNet總線上的,而C6678的DDR3控制器、共享RAM、512 KB的二級Cache都是連接在TeraNet總線上,所以,SRIO可以直接和這3個RAM進行通信,但需要一定的時序控制,否則會造成RAM的互鎖,增大仲裁開銷,甚至程序死機。具體表現(xiàn)在:
① 和DDR3進行通信。因為DDR3一般會運行主核程序,尤其是需要使用網絡接口,TI提供的NDK程序代碼很大,必須在DDR3中運行。這樣程序運行的DDR3地址,SRIO不能盲目進行讀寫,尤其是寫操作,此外如果SRIO和程序需要同時讀某一地址,就會造成總線沖突。
② 和共享RAM進行通信。共享RAM是用于多個核之間的數據交互,幾個核對共享RAM的某個地址進行操作,一定需要一個控制權搶占,誰搶占到控制權誰就可以操作,其他核只能等待,這樣就避免了多個核同時訪問共享RAM的問題。如果SRIO對共享RAM進行操作,一定需要將SRIO加入核之間的控制權搶占以及釋放。
③ 和每個核私有RAM進行通信。理論上,SRIO可以和每個核的L1數據空間、L1程序空間、L2空間進行通信。但一般程序會將L1的全部數據和程序空間、L2的部分空間定義為Cache,用于存儲程序運行的中間結果,例如局部變量。程序在調試過程中的打印輸出等也需要較大的堆棧來處理,這些堆??臻g都在私有RAM中由SYS/BIOS自動開辟。如果SRIO將數據寫入到這些空間,將很可能造成地址的同時讀寫,所以建議SRIO不對這些空間進行操作。
FPGA和DSP的SRIO硬件連接如圖2所示。SRIO總線由收發(fā)各4對差分線(一共16根線)組成。DSP的RIORXp0~3為4根收數據的正端,RIORXn0~3為一一對應的4根收數據的負端,它們和FPGA相應的8根發(fā)數據連接,形成一個FPGA發(fā)、DSP收的回路。另外8根線形成一個DSP發(fā)、FPGA收的回路。所以,在物理層,SRIO的收發(fā)是完全獨立的,可以做到收發(fā)全雙工。為了提高SRIO傳輸可靠性,在靠近收方的總線上,需要采用隔離電容,將信號直流隔掉,使得差分信號更加可靠。SRIO的時鐘由各自的處理器單獨設置,不要求DSP和FPGA共用SRIO時鐘。SRIO的傳輸時鐘是疊加在傳輸數據上的,由SRIO處理器從數據總線提取出時鐘信號,用于數據位的對齊。這些處理工作,均由各自芯片的SRIO模塊完成,不需要用戶設置[4]。
圖2 硬件連接圖
圖2中,DSP外掛了5片DDR3,每片DDR3為16位數據寬度,4片組成64位數據寬度,直接連接到DSP。第5片連接到DSP的數據校驗位,每個64位的數據通過BCH編碼生成一個8位的校驗碼同時存放到第5片DDR3中,DSP讀取DDR3數據時,也同時把這個校驗碼讀出,進行BCH譯碼。如果譯碼正確,則表示數據可靠,否則會嘗試重讀或多次失敗后丟棄數據。此外BCH碼具有一定的數據糾錯能力,也可以提高DDR3數據的讀寫可靠性。經過實際驗證,由DSP直接讀速度達到10 Gbps,寫速度達到20 Gbps。
由于DSP有多個外設,這些外設需要一個基準時鐘,這樣就方便時序和同步控制,圖中采用CDCM62005對輸入的125 MHz時鐘進行分頻,輸出多路CLK信號,分別提供到SRIO、DDD3模塊,以及DSP的運行主時鐘。實際上還可以提供給DSP的網絡模塊、PCIe等模塊。
軟件設計主要包括各個模塊的初始化、數據讀寫、中斷響應和任務控制等。
3.1 DDR3的軟件設計
DDR3的軟件設計包括初始化、讀/寫數據和刷新控制等。由于DDR3是依靠電容的充放電狀態(tài)來存儲信息,就需要定時刷新來維持電容的狀態(tài)。定時刷新由處理器的片內模塊自動完成,用戶不需要參與。DDR3的初始化順序為:
① 配置DDR3的PLL,通過設置PLL寄存器中的clkr、clkf、clkmod以及bwadj位來確定DDR3的工作時鐘。
② 延遲一段時間,等待PLL設置有效。
③ 清除RESET,使得PLL進入工作狀態(tài),查詢PLL鎖定標志。鎖定標志有效,表示初始化過程結束。如果DDR3芯片及其周邊電路存在問題,PLL就會無法鎖定。這些問題可能包括:電源不穩(wěn)定、時鐘抖動大以及硬件錯誤等。
3.2 SRIO的軟件設計
SRIO的軟件設計包括初始化、數據讀寫和中斷響應等。SRIO的軟件設計包括了FPGA和DSP兩個芯片,所以兩個芯片的大部分參數設置需要保持一致。此外,一旦SRIO的數據鏈路建立好后,一方不能自行單獨復位SRIO模塊,否則將出現(xiàn)雙方不能同步現(xiàn)象,SRIO數據不能正常通信。所以,一旦一方要求復位,必須通知對方。在程序中,建議在SRIO鏈路建立后,不進行復位操作。SRIO的初始化順序為:
① 配置SRIO的工作時鐘,SRIO需要從低速時鐘倍頻到高速時鐘,最低到1.25 Gbps,最高支持5 Gbps。一般電路板設計和制造后可以達到2.5 Gbps或者3.125 Gbps的時鐘速率。如果再采用4線制傳輸,傳輸數據速率可以輕松達到10 Gbps或者12.5 Gbps。
② 等到SRIO時鐘設置好后,按照先使能接收器,再使能發(fā)送器的順序復位自身的模塊,如果另外一方也設置好后,會看到連接寄存器的狀態(tài)位變化,表示雙方鏈路已經建立;如果狀態(tài)位沒有變化,則說明存在硬件或者設置上的問題。
③ 設置數據收發(fā)中斷,可以以SRIO自身中斷,也可以以GPIO觸發(fā)另外中斷的方式。
3.3 SRIO傳輸數據到DDR3
多核DSP的程序代碼一般在DDR3中運行,一旦SRIO也對DDR3進行操作,就存在多個主模塊共享DDR3的問題。DDR3控制器只有一組總線與DDR3連接,一旦出現(xiàn)多個主模塊同時訪問DDR3時,必須要根據優(yōu)先級進行總線仲裁。DDR3的訪問以頁為基礎,一個主模塊訪問某個頁之前,必須要打開該頁。DDR3最高具有8個bank,每個bank可以打開一頁,最多同時打開8頁。但如果想同時訪問一個bank中的2頁是不可能的,只有關閉掉其中一頁,才能訪問另外一頁,這就存在頁切換的問題。
圖3是多個主模塊訪問同一bank下的不同頁,這是切換最頻繁的情況,每次訪問都要進行頁切換,導致傳輸效率大大降低。如果SRIO將數據傳輸到這些頁,存在很大的風險。雖然DDR3控制器可以進行總線仲裁,但對于SRIO的傳輸端FPGA,不清楚總線是否被占用,仍然傳輸數據,將會導致數據丟失,所以不建議SRIO用這種情況訪問DDR3。
圖3 多個模塊訪問同一bank的頁
圖4是多個主模塊訪問不同bank不同頁的情況,這是最簡單的情況,因為每個主模塊訪問的bank和頁均不同,所以不存在任何頁切換情況,總線傳輸很快。但圖中的空白頁將無法訪問,一旦訪問,將回到圖3所示的情況,導致大量DDR3空間不能使用,所以不建議SRIO用這種情況訪問DDR3。
圖4 多個模塊訪問不同bank的不同頁
圖5是圖4的簡化訪問方式,這種方式只存在
High-speed Communication Between Multicore DSP and FGPA Based on SRIO
Wang Anmin1,Han Daowen2,Xu Yan3
(1.Research of Tongfang Science and Technology Ltd.,Jiujiang 332009,China;2.Electronic Engineering Institute 3.Harbin Institute of Techonlogy)
High speed data communication between the different processors is needed in the high sampling system.The SRIO bus is used widely because it’s high efficiency and low latency.In this paper,the design method of SRIO bus between FPGA and DSP is studied.The data translation is realized from FPGA to DDR3,shared RAM or private RAM of DSP.In this paper,the hardware system is developed,and the operation method of the software and the verification of the actual hardware platform are given.The result of data throughput is up to 4 Gbps by the SRIO bus in the real system.
multicore processor;SRIO;shared RAM
TP336
A