陶子然, 曹文君, 王沁喆, 葉文靜
(中國(guó)電子科技集團(tuán)第三十八研究所, 安徽 合肥 230000)
隨著現(xiàn)代信息技術(shù)的高速發(fā)展, 數(shù)字信號(hào)處理在軍用及民用領(lǐng)域都取得了極大發(fā)展和廣泛應(yīng)用, 同時(shí)日益增長(zhǎng)的信號(hào)處理需求也對(duì)整機(jī)、 分機(jī)平臺(tái)提出了越來越高的要求。 特別是在航天航空、圖像處理、AI 等高科技前沿領(lǐng)域,信號(hào)處理實(shí)時(shí)性高,數(shù)據(jù)量大,數(shù)據(jù)交互頻繁及信號(hào)處理算法繁雜度高, 傳統(tǒng)的解決方法無法滿足該類需求的情況下,基于DSP 和FPGA 的協(xié)同處理架構(gòu)主流。這一系統(tǒng)較傳統(tǒng)方法顯著提升了系統(tǒng)的運(yùn)算速度和數(shù)據(jù)處理能力。 處理器之間主要采用的高速通信接口包括SRIO、PCIe 等。 RapidIO 技術(shù)是一種高帶寬、低延遲的基于包交換的開放式互聯(lián)技術(shù)標(biāo)準(zhǔn),2001 年由Freescale 公司發(fā)表正式規(guī)范,主要應(yīng)用于嵌入式系統(tǒng)的高速互聯(lián),支持芯片到芯片以及板卡到板卡間的高速通信。 高速串行輸入輸出SRIO (Serial RapidIO) 作為新一代高速通信協(xié)議,具有非常優(yōu)異的高帶寬、低延遲、低功耗等特性。 本文提出了一種基于高性能DSP SRIO 模塊的測(cè)試速率的方法,DSP 在信號(hào)板板內(nèi)與DSP 通信以及通過交換芯片與板間的FPGA 通信的實(shí)例研究了相關(guān)研究方法。 通過該方法,可以較為準(zhǔn)確的測(cè)算SRIO 模塊的通信速率,所測(cè)結(jié)果也為架構(gòu)模型提供了數(shù)據(jù)支持。
RapidIO 技術(shù)作為一種高帶寬、低延遲的基于包交換的開放式互聯(lián)技術(shù),可以滿足高性能嵌入式系統(tǒng)的需求,支持芯片到芯片以及板卡到板卡間的高速通信。 多用于多處理器、存儲(chǔ)器及通用信號(hào)處理平臺(tái)間的高速交互。 其主要特點(diǎn)包括靈活的系統(tǒng)結(jié)構(gòu),允許點(diǎn)對(duì)點(diǎn)傳輸;帶錯(cuò)誤檢測(cè)的魯棒傳輸;可拓展的頻率和接口寬度;非軟件密集型操作;低開銷的高帶寬互聯(lián);低引腳數(shù)、低功耗、低延遲。
基于SRIO 的驅(qū)動(dòng)程序包括SRIO 模塊初始化功能,DMA 數(shù)據(jù)傳輸功能,DOORBELL 中斷功能,MESSAGE 數(shù)據(jù)傳輸功能和維護(hù)包傳輸功能。 本實(shí)驗(yàn)的硬件平臺(tái)為基于高性能DSP 的某兩型板卡,信號(hào)處理板與接口板。平臺(tái)架構(gòu)如圖1,2 所示。
圖1 接口板結(jié)構(gòu)圖
圖2 信號(hào)板結(jié)構(gòu)圖
為了實(shí)現(xiàn)通信測(cè)速功能, 實(shí)驗(yàn)中涉及到DSP 端的SRIO 模塊驅(qū)動(dòng)編程設(shè)計(jì)主要包含以下幾個(gè)方面:
(1)SRIO 模塊工作模式設(shè)置。 在開發(fā)環(huán)境ECS 中,手動(dòng)創(chuàng)建bsp 包后進(jìn)入PLL 配置界面,在圖形化界面中配置內(nèi)核頻率,在勾選相應(yīng)的SRIO 控制器后,可以配置通道數(shù)和通道速率。 本文采用4x,5G 模式設(shè)置,DSP 工作于中斷模式下與FPGA 進(jìn)行互連通信。 在涉及到DDR 作為數(shù)據(jù)傳輸對(duì)象時(shí),需設(shè)置地址映射表,不同地址映射表對(duì)應(yīng)不同的索引方式, 索引方式可以選擇38 位AXI 地址是如何組成的, 可以選擇SourceID 或者SourceAddr,“索引號(hào)來源” 則選擇38 位AXI 地址的組成方式, 如選擇默認(rèn)方式RIO_Addr[33:30]/SourceID[3:0],則是將SourceID 放在低4位,將RIO_Addr 放在了高34 位,實(shí)際的地址一般為32位,34 位RIO_Addr 就是將32 位的地址左移兩位。AXI 地址高18 位根據(jù)需要填寫。 例如若是映射到DDR0,DDR0 的基地址為0x80000000 (32 位), 將其左移2 位即得到34位RIO_Addr,這就是AXI 地址的高34 位,再加上低4 位的SourceID,就組成了完整的AXI 地址。 0x80000000(32 位)左 移 兩 位 是 0x200000000 (34 位), 即 2 進(jìn) 制0b1000000000000000000000000000000000,取其高18 位,即0b100000000000000000,即0x20000,將0x20000 填寫在窗口中即可,也可以將0x200000000(34 位)直接右移16 位,即可得AXI 地址高18 位。
(2)SRIO 模塊初始化。
初始化函數(shù)如下:
status=srio_driver_initialize(SRIOCTL,NULL);
status=srio_driver_open(SRIOCTL,NULL);
如果兩個(gè)函數(shù)的返回值status 均為0,則表明DSP 與目標(biāo)元件link 成功, 通常使用status|= srio_driver_initialize(SRIOCTL,NULL);來多次確認(rèn)返回值的狀態(tài),保證其沒有出錯(cuò)。
(3)交換芯片的配置。 對(duì)于直連的通信架構(gòu)來說,無需對(duì)交換進(jìn)行配置。在目前主流系統(tǒng)架構(gòu)中,交換是必不可少的。對(duì)于存在交換的系統(tǒng),需要根據(jù)交換的類型對(duì)其進(jìn)行相應(yīng)的路由配置。 本文的實(shí)驗(yàn)平臺(tái)所使用的交換為1800,1800 配置函數(shù)為:
cps1800(slave_addr);
程序中對(duì)1800 的路由的配置在下圖所示, 程序?qū)?x11 路由到port8, 將0x12 路由到port4, 將0x21 路由到port1,將0x22 路由到port9,將0x31 路由到port7,將0x32路由到port0,將0x41 路由到port3,將0x42 路由到port11??梢愿鶕?jù)實(shí)際使用情況進(jìn)行修改。
圖3 1800 路由配置
(4)讀寫驅(qū)動(dòng)函數(shù)配置。 本文使DSP 采用DMA 模式與FPGA 進(jìn)行通信,DMA 模式適合在數(shù)據(jù)量較大的傳輸中使用, 主設(shè)備可以主動(dòng)對(duì)從設(shè)備進(jìn)行讀寫。 SRIO 在DMA 模式中可以實(shí)現(xiàn)DDR 寫讀DDR,DDR 寫讀內(nèi)存,內(nèi)存寫讀DDR,內(nèi)存寫讀內(nèi)存。 DMA 模式中發(fā)送方需要配置的參數(shù)主要有:dma_param.dest_id(DestID)、dma_param.axi_37(AXI 地址37 位)、dma_param.axi_36_34(AXI 地址36~34 位)、dma_param.dma_seq (DMA 通道, 賦值0 即可)、dma_param.src_addr(源地址)、dma_param.dst_addr(目的地址)、rw_args.count (傳輸數(shù)目, 內(nèi)核傳輸數(shù)目最大256K,DDR 傳輸數(shù)目可達(dá)1M,一個(gè)DMA 的數(shù)據(jù)包的最大數(shù)據(jù)量為256K 字)。
讀寫驅(qū)動(dòng)函數(shù)設(shè)置如下:
srio_driver_write(deviceID,*ARG);
srio_driver_read(deviceID,*ARG);
(5)方案優(yōu)化函數(shù)。 本文DSP 端通過門鈴中斷計(jì)數(shù),在此過程中DSP 端需讀取門鈴FIFO,否則將造成DSP 無法進(jìn)入MISC 中斷程序的情況。 在讀取周期計(jì)數(shù)時(shí),數(shù)據(jù)量過大時(shí)會(huì)造成計(jì)數(shù)寄存器CC0 溢出的情況,需引入周期計(jì)數(shù)寄存器CC1 進(jìn)行補(bǔ)位計(jì)算,計(jì)算公式為:
Time=(val_high_CC1*4294967296)+ val_low_CC0。
優(yōu)化函數(shù)如下:
FIFO_read(deviceID,*ARG);
Cycle_get(void);
本文通過信號(hào)板對(duì)板間DSP 芯片和FPGA 通過SRIO 通信進(jìn)行測(cè)試,記錄每次數(shù)據(jù)傳輸首尾兩個(gè)門鈴中斷之間的周期,多次測(cè)量取平均值。具體軟件流程圖如圖4 所示。
圖4 算法軟件流程圖
將信號(hào)板和接口板依次插入機(jī)箱對(duì)應(yīng)槽位。 分別將接口板和信號(hào)板通過JTAG 下載器連接到測(cè)試計(jì)算機(jī),查看信號(hào)板上位機(jī)IP 地址, 設(shè)置為10.100.39.39。 信號(hào)板、接口板上電,接口板上FPGA 和信號(hào)板上DSP 分別加載測(cè)試?yán)獭<虞d完成后,DSP 程序運(yùn)行,完成1800 交換芯片配置。DSP程序進(jìn)入while 循環(huán)等待接收門鈴中斷和數(shù)據(jù)。 同時(shí)設(shè)置FPGA 程序VIO 的參數(shù)為vio_cnt_1000 為10000000,loop_cnt 為100,delay_time 為2。 測(cè)試?yán)贪L(zhǎng)、包數(shù)可控,典型包長(zhǎng)為256B,每次發(fā)送100 包,循環(huán)10000000 次,傳輸指定格式的數(shù)據(jù)為從0 開始的遞增數(shù)列。 FPGA 端測(cè)試程序發(fā)送數(shù)據(jù)的流程為:先發(fā)送一個(gè)DOORBELL 包表示開始發(fā)送, 發(fā)送25KB 的遞增數(shù)據(jù)后延時(shí)4 個(gè)時(shí)鐘周期再發(fā)送一個(gè)DOORBELL 包表示一次發(fā)送結(jié)束,再發(fā)送下一個(gè)25KB 遞增數(shù),依次發(fā)送10000000 次25KB 共約238.41GB 遞增數(shù)據(jù)。 在接收端,DSP 每隔100 包數(shù)據(jù),記錄下兩個(gè)門鈴間的周期,在ECS變量窗口顯示每個(gè)門鈴所對(duì)應(yīng)的當(dāng)前周期數(shù), 同時(shí)顯示通信速率。
實(shí)驗(yàn)每次連續(xù)測(cè)試10 次,每次測(cè)試包數(shù)不小于一億包,取接收端輸出速率平均值作為板間SRIO 速率。 實(shí)驗(yàn)結(jié)果如表1 所示。 FPGA 實(shí)驗(yàn)波形如圖5、6 所示。
表1 板間FPGA 與DSP 通信速率
圖5 FPGA 數(shù)據(jù)波形圖-1
圖6 FPGA 數(shù)據(jù)波形圖-2
本文基于高性能DSP 平臺(tái)的SRIO 接口模塊建立DSP 與FPGA 之間的通信系統(tǒng)測(cè)算速率, 并提出相應(yīng)的準(zhǔn)確計(jì)數(shù)方法。在4x,5G 模式下,SRIO 模塊4lane 通道整個(gè)鏈路的傳輸瓶頸不大于4×5=20Gbps 的速率(即鏈路速率最大理論值),在計(jì)算SRIO 包的開銷以及8b/10b 的轉(zhuǎn)換開銷之后, 根據(jù)有效數(shù)據(jù)負(fù)載速率的通用計(jì)算公式:V有效負(fù)載最大速率=鏈路速率最大理論值×0.8(8b/10b 轉(zhuǎn)換且包括兩級(jí)開銷)等于4Gbps。實(shí)驗(yàn)統(tǒng)計(jì)結(jié)果為單次100包周期為16418, 速率計(jì)算公式為100×256×8/(16418×2),經(jīng)計(jì)算在該硬件平臺(tái)SRIO 模塊平均寫速率為6.23Gbps,單通道平均速率為3.11Gbps。 由DSP 讀數(shù)的平均讀速率為3.29Gbps。 讀寫速率相當(dāng), 且達(dá)到理論最大有效速率的80%,表明該系統(tǒng)能夠高速傳輸大批量數(shù)據(jù),當(dāng)數(shù)據(jù)量較大時(shí),讀寫速率同步提升,通信開銷占比總傳輸時(shí)間比例減小,整體速率超過12Gbps,傳輸效率較為理想。