摘要: 現(xiàn)代信號處理系統(tǒng)通常需要在不同處理器之間實現(xiàn)高速數(shù)據(jù)通信,SRIO協(xié)議由于高效率、低延時的特性被廣泛使用。本文研究了在FPGA和DSP兩種處理器之間實現(xiàn)SRIO協(xié)議的方法,并通過電路設(shè)計和利用處理器的開發(fā)工具編程實現(xiàn)了兩種處理器間的高速通信。經(jīng)測試,該系統(tǒng)具有較高的傳輸效率。 引言 1異構(gòu)處理器電路 1.2FPGA處理器 1.3異構(gòu)處理器電路互連 SRIO協(xié)議分為3層:邏輯層、傳輸層和物理層。邏輯層定義了操作協(xié)議;傳輸層定義了包交換、路由和尋址機制;物理層定義了電氣特性、鏈路控制和糾錯重傳等。SRIO是基于包交換的高速互連技術(shù),其數(shù)據(jù)包是由包頭、有效的數(shù)據(jù)載荷和16位CRC校驗組成。包頭的長度根據(jù)包類型不同,可能為十幾到二十幾個字節(jié),最大的有效載荷長度為256字節(jié)。由于包長度短,所以傳輸延時較小,硬件上也易于實現(xiàn),適合數(shù)字信號處理場合對傳輸延時要求較高的應(yīng)用。 TMS320C6678集成了支持SRIOv2.1通信協(xié)議的4通道SRIO接口,可以實現(xiàn)每條通路1.25 Gbps、2.5 Gbps、3.125 Gbps、5 Gbps的通信速率。XC6VLX550T的GTX模塊嵌入Serial RapidIO IP核,可支持線速率為1.25 Gbps,2.5 Gbps~3.125 Gbps,因此可實現(xiàn)異構(gòu)處理器DSP與FPGA之間的SRIO高速串行通信。 為了最大程度地體現(xiàn)RapidIO串行接口的性能,本設(shè)計中采用3.125 Gbps的線速率,處理器之間采用4xSRIO連接方式, 1個1x接口即是一個差分對的一對讀/寫信號,一個4x接口即4個此類差分對的結(jié)合,因此采用4x SRIO連接可實現(xiàn)最高12.5 Gbps的數(shù)據(jù)傳輸速率。電路連接方式如圖1所示,只需要將DSP的TX、RX端口與FPGA的RX、TX端口對應(yīng)相接,由于SRIO采用差分線對實現(xiàn)數(shù)據(jù)傳輸,所以需要在異構(gòu)處理器的RX端口的差分線上串聯(lián)一個0.1 μF的電容,做交流耦合使用。 圖1 異構(gòu)處理器連接方式 2 SRIO設(shè)計 2.1 DSP端的SRIO配置 2.1.1 SRIO初始化 實現(xiàn)SRIO重要的一步是SRIO的初始化,一般分為以下幾步: ① 打開SRIO的電源和時鐘:為了降低功耗,默認狀態(tài)下SRIO模塊的電源和時鐘是處于關(guān)閉狀態(tài)的,因此 SRIO 初始化首先要調(diào)用CSL_SRIO_OPEN函數(shù)將SRIO模塊的電源和時鐘打開。 ② 配置SRIO的串并轉(zhuǎn)換器:將125 MHz的參考時鐘通過串并轉(zhuǎn)換器內(nèi)部的鎖相環(huán)倍頻至1.25 GHz,串并轉(zhuǎn)換器采用半速率時鐘模式,利用這個時鐘信號的上升沿和下降沿對4路8位數(shù)據(jù)分時移位輸出,即每個時鐘串并轉(zhuǎn)換器的串行輸出端將輸出2位的數(shù)據(jù),采用該模式降低了對時鐘信號的要求,降低了電路設(shè)計難度。 ③ 設(shè)置4x工作模式:C6678有4個SRIO端口,將4路串并轉(zhuǎn)換器使能。定義SRIO通信鏈路端點器件的ID,C6678提供了8個LSU模塊用于SRIO數(shù)據(jù)操作的處理,每組LSU都有7個32位寄存器,通過配置LSUx_reg4將源器件DSP的ID設(shè)為0x00,目的器件FPGA的ID設(shè)計為0xFF。 ④ 等待SRIO初始化完成:通過配置SP_ERR_STAT寄存器,檢測SRIO的端口狀態(tài)是否OK,如果OK,則表示可以進行SRIO通信,否則提示初始化不成功或者其他情況導致不能通信。在SRIO初始化前需要FPGA端完成SRIO邏輯的配置,否則DSP在初始化SRIO期間無法和FPGA進行握手,會導致初始化失敗。 2.1.2 SRIO的讀寫操作 圖2 FPGA端的SRIO實現(xiàn)結(jié)構(gòu) I/O邏輯操作使用了SRIO的功能模塊LSU(Load Store Unit)和MAU(Memory Access Unit)。LSU實現(xiàn)I/O邏輯操作數(shù)據(jù)包的讀寫;MAU提取數(shù)據(jù)包中的源地址、目的地址、數(shù)據(jù)長度等信息,從而將數(shù)據(jù)包的有效數(shù)據(jù)載荷寫入指定位置。DSP端SRIO的I/O邏輯操作可以分為4個部分: ① 鎖定LSU寄存器:CSL_SRIO_IsLSUFull函數(shù)讀取LSUx_reg6寄存器中的FULL位,為1,則LSU所有的影子寄存器已經(jīng)寫入配置文件等待數(shù)據(jù)發(fā)送,暫時沒有可用的影子寄存器。 ② 配置寄存器:配置LSU寄存器0~4,獲取傳輸信息,包括源地址dspAddress、目的地址rapidIOLSB、數(shù)據(jù)長度bytecount等,程序使用的函數(shù)是CSL_SRIO_SetLSUTransfer。 圖3 RapidIO接口模塊實現(xiàn)方案 ③ 釋放寄存器:完成鎖定和配置LSU寄存器后,最后配置LSU寄存器5,確定數(shù)據(jù)包的事務(wù)類型,配置完成后通過CSL_SRIO_IsLSUBusy函數(shù)檢測LSUx_reg6寄存器中的BUSY位。若BUSY為0,釋放LSU控制權(quán),該影子寄存器進入等待狀態(tài),最終將數(shù)據(jù)發(fā)送出去;若BUSY為1,則將數(shù)據(jù)存放在影子寄存器中,等待LSU完成當前傳輸至空閑再發(fā)送數(shù)據(jù)。 ④ 等待傳輸完成:通過CSL_SRIO_GetLSUCompletionCode函數(shù)讀取寄存器SRIO_LSU_STAT_REG的狀態(tài),判斷是否所有數(shù)據(jù)均傳輸完畢。 2.1.3 通信流程 2.2 FPGA端的SRIO配置 本文以IP核為基礎(chǔ),采用已有的整體框架,圍繞目標用戶接口設(shè)計接口模塊。中斷作為FPGA和DSP之間的握手信號,F(xiàn)IFO作為用戶邏輯和IP核之間的數(shù)據(jù)緩沖接口。圖3所示為Rapid IO接口模塊實現(xiàn)方案。 由于FPGA在通信中作為從設(shè)備,因此接口模塊中不再需要IP核接口中發(fā)起用戶的功能,只保留目標用戶的功能,其中目標請求/響應(yīng)狀態(tài)機控制各模塊的時序變化。接口模塊左側(cè)與用戶邏輯接口相連,右側(cè)與IP核目標用戶接口相連。 中斷機制部分,向DSP發(fā)送數(shù)據(jù)時采用發(fā)送FIFO的半滿標志作為讀中斷,從DSP接收數(shù)據(jù)時采用接收FIFO的半空標志作為寫中斷。發(fā)送FIFO中數(shù)據(jù)超過一定量時觸發(fā)DSP讀數(shù)據(jù),接收FIFO中數(shù)據(jù)低于一定量時觸發(fā)DSP寫數(shù)據(jù)。用戶及時有效地控制FIFO的狀態(tài),可以保證FIFO不會被寫滿或者被讀空。用戶也可以產(chǎn)生中斷邏輯,控制DSP對FPGA內(nèi)部存儲空間進行讀寫。本文引入了中斷機制和數(shù)據(jù)緩沖FIFO,利于接口對接和功能拓展,實現(xiàn)數(shù)據(jù)在不同芯片之間的高效傳輸。 3 傳輸性能測試 表2是使用NWRITE和NWREAD對不同數(shù)據(jù)包進行通信速度測試的結(jié)果。在傳輸數(shù)據(jù)為32 字節(jié)時,考慮到數(shù)據(jù)包操作時的開銷,與理論值比率僅為1.1%,很大一部分時間被花費在數(shù)據(jù)包的打包和解包的處理中,隨著傳輸數(shù)據(jù)量的增加,SRIO的實際傳輸效率不斷增大,最終維持在7 800 Mbps。經(jīng)過多次反復(fù)實驗,該統(tǒng)計結(jié)果穩(wěn)定可靠,并且沒有出現(xiàn)丟包誤碼的情況。 結(jié)語 歡迎通信工程師和FPGA工程師關(guān)注公眾號 FPGA微信技術(shù)群 歡迎大家加入全國FPGA微信技術(shù)群,這里有一群熱愛技術(shù)的工程師,在這里可以一起交流討論技術(shù)! 用手指按住就可以加入FPGA全國技術(shù)群哦 FPGA技術(shù)群平臺自營:Xilinx Altera 鎂光、三星、海力士、ADI TI ST NXP 等品牌的優(yōu)勢代理分銷商,歡迎大家有需求隨時發(fā)型號清單,我們將在第一時間為您提供最優(yōu)競爭力的報價!價格低于您原有供應(yīng)商5%以上!歡迎詢價-微信:1051197468 或者直接把需求發(fā)給群主 FPGA技術(shù)群官方鳴謝品牌:Xilinx、 intel(Altera)、microsemi(,Actel)、LattIC e,Vantis,Quicklogic,Lucent等 |
|