作者:姜 浩,李和平 ,馬翠梅,文章來源: 射頻百花潭微信公眾號
為滿足合成孔徑雷達實時成像、數(shù)據(jù)回放等高速可靠數(shù)據(jù)傳輸需求,解決傳統(tǒng)數(shù)據(jù)傳輸系統(tǒng)由于接口要求高、體積與功耗大以及網絡配置不靈活等原因不適合用于外場試驗的問題,基于 ZYNQ 芯片設計一種光纖接口到以太網接口的數(shù)據(jù)傳輸系統(tǒng)。主要介紹數(shù)據(jù)傳輸流程的實現(xiàn)方法,并提出一種三級乒乓和指令并行的優(yōu)化策略保證數(shù)據(jù)正確,提高傳輸速度;通過移植嵌入式 Linux 系統(tǒng)實現(xiàn)靈活修改網絡配置。與傳統(tǒng)方案相比,該系統(tǒng)在體積、功耗和靈活性上具有明顯優(yōu)勢。經實驗驗證,數(shù)據(jù)傳輸速度可達 770 Mb/s。
飛行試驗獲取合成孔徑雷達( SAR )數(shù)據(jù)需要消耗大量資源,一般使用計算機實現(xiàn)與雷達系統(tǒng)的高速數(shù)據(jù)傳輸。雷達系統(tǒng)普遍使用光纖接口,而絕大部分計算機沒有光纖接口,需要一種將光纖接口轉為計算機通用接口的高速數(shù)據(jù)傳輸系統(tǒng) 。
千兆以太網速率較高、抗干擾能力強且使用方便,更適用于小體積、低功耗的高速數(shù)據(jù)傳輸系統(tǒng)。實現(xiàn)千兆以太網數(shù)據(jù)傳輸?shù)姆桨赣懈呒壘喼噶罴?a target="_blank">處理器( ARM ) + 現(xiàn)場可編程門陣列( FPGA )架構方案 、數(shù)字信號處理( DSP ) +FPGA 架構方案和 FPGA 脫機方案。前 2 種方案設計臃腫、集成度不高,難以控制體積和功耗;FPGA 脫機方案開發(fā)周期長、程序修改困難且難以修改網絡配置,使用不靈活。本文基于 Xilinx ZYNQ7000 系列芯片,設計一種將光纖接口高速串行數(shù)據(jù)轉發(fā)為千兆以太網接口傳輸控制協(xié)議( TCP )數(shù)據(jù)的高速數(shù)據(jù)傳輸系統(tǒng)。
1 系統(tǒng)設計
1.1 系統(tǒng)簡介
數(shù)據(jù)傳輸系統(tǒng)使用 ZYNQ 單主控芯片實現(xiàn), 有 2路光纖與 1 路千兆以太網接口,系統(tǒng)架構如圖 1 所示。
圖 1 光纖 - 以太網系統(tǒng)架構圖
Xilinx ZYNQ 7000 系列( ZYNQ xc7z030 )是集成ARM+FPGA 的異構芯片, 其中處理系統(tǒng) ( PS ) 代表ARM 部分,可編程邏輯( PL )代表 FPGA 部分。PL 部分使用 Aurora IP 實現(xiàn)光纖高速串行數(shù)據(jù)接收, 通過 PS與 PL 間 的 AXI_HP 接 口 將 數(shù) 據(jù) 寫 入 PS 掛 載 的DDR3 。PS 部分移植 Linux 系統(tǒng),存儲于串行外圍接口( SPI ) Flash , 在 Linux 系統(tǒng)下使用 C 語言編程實現(xiàn)輪詢數(shù)據(jù)可讀標識、讀取 DDR3 數(shù)據(jù)并通過 TCP/IP 實現(xiàn)數(shù)據(jù)發(fā)送,興趣數(shù)據(jù)可存儲于 eMMC 芯片中,通過安全文件傳送協(xié)議( SFTP )將文件讀出。
1.2 數(shù)據(jù)傳輸流程設計
1.2.1 光纖接口
Aurora 協(xié)議是 Xilinx 公司提供的一種高效率、簡單易用的高性能點對點串行鏈路協(xié)議。光纖接口使用Aurora 協(xié)議,使用吉比特收發(fā)器( GTX )通道,允許設備間組合多個 GTX 通道進行通信, 以實現(xiàn) 480 Mb/s~84.48 Gb/s 的數(shù)據(jù)傳輸。Aurora IP 核將高速串行收發(fā)器 Rocket I/O 的控制信號進行封裝, 只保留很少的用戶接口信號。Aurora IP 用戶接口如圖 2 所示。
圖 2 Aurora IP 用戶接口
圖 2 中, tx_tready 在輸出信號被接收并且數(shù)據(jù)準備發(fā)送時斷言, tx_tvalid 在輸出流信號或源信號有效時斷言,這樣將數(shù)據(jù)從應用程序移動到 tx_data 總線并執(zhí)行流控制,實現(xiàn)發(fā)送。當 tx_tvalid 取消斷言時,字間會創(chuàng)建并保留間隙。數(shù)據(jù)到達接收側時, rx_tvalid 被斷言, 從用戶接口 rx_tdata 總線將數(shù)據(jù)移動到應用程序并執(zhí)行流控制,實現(xiàn)數(shù)據(jù)接收。數(shù)據(jù)必須立即讀取,否則將丟失。 接口使用先進先出( FIFO )方式保存數(shù)據(jù),將 rx_tvalid 用作 FIFO 寫使能。
系統(tǒng)使用 2 路 Aurora IP 用戶接口, 數(shù)據(jù)位寬為32 bit ,每路速率為 2.5 Gb/s ,參考時鐘為 125 MHz ,用戶時鐘為 PS 提供的 150 MHz 時鐘。Aurora IP 核在物理層進行 8B/10B 編碼, 2 路 Aurora 協(xié)議可提供 4 Gb/s的數(shù)據(jù)速率,可保證數(shù)據(jù)穩(wěn)定正確傳輸并超過系統(tǒng)后級千兆以太網的速率。
1.2.2 AXI_HP 接口
2 路使用 Aurora 協(xié)議的光纖接口速率( 4 Gb/s )與千兆以太網速率(不到 1 Gb/s )之間存在差異,需要將數(shù)據(jù)暫存后等待以太網發(fā)送完畢。ZYNQ 系列 PL 邏輯資源較少, xc7z030ffg676 的 Block RAM 僅有 9.3 Mb 。系統(tǒng)采用 DDR3 實現(xiàn)高速數(shù)據(jù)緩存。DDR3 控制器位于 PS 部分, 光纖接口輸入的數(shù)據(jù)需通過 AXI 互聯(lián)矩陣寫入 DDR3 。位于 PS 與 PL 間的 ARM AMBA 3.0 互聯(lián)矩陣實現(xiàn)主、從設備間的地址、數(shù)據(jù)和響應事件的點對點通信,有加速一致性( AXI_ACP )、高性能( AX-I_HP )和通用( AXI_GP ) 3 種接口。AXI_HP 接口基于AXI 3.0 協(xié)議, 為 PL 部分提供到 DDR 和片上存儲器( OCM ) 內存的高帶寬數(shù)據(jù)通路, 在使用 64 bit 位寬、150 MHz 時鐘時可提供 1200 MB/s 帶寬, 接近 DDR3讀寫帶寬并遠高于后級以太網 1 Gb/s 帶寬。通過使用AXI Interconnect IP 將 AXI_HP 接口轉為 AXI4 協(xié)議。AXI4 采用 READY/VALID 握手通信機制進行數(shù)據(jù)傳輸, READY 和 VALID為高時,數(shù)據(jù)在每個時鐘的上升沿進行有效傳輸。
AXI4 總線含有讀地址通道、寫地址通道、讀數(shù)據(jù)通道、寫數(shù)據(jù)通道、寫應答通道和系統(tǒng)信號(總線時鐘ACLK 、 總 線 復 位 ARESETN ), 其 中 多 個 通 道 有READY/VALID 握手機制,控制信號多,使用復雜。將AXI4 協(xié)議進行封裝,只引出少數(shù)信號給用戶,這樣可以大幅縮短后期開發(fā)和維護周期。PL 為 AXI_HP 的主設備,模塊命名為 AXI master 。AXI master 由有限狀態(tài)機實現(xiàn),狀態(tài)轉移圖如圖 3 所示。
圖 3 AXI master 狀態(tài)轉移圖
AXI master 初始化后進入 WR_IDLE 狀態(tài), 復位所有控制信號和數(shù)據(jù)信號,在接收到數(shù)據(jù)傳輸請求信號 burst_req 后進入 WA_WAIT 狀態(tài),更新外部輸入的數(shù)據(jù)、數(shù)據(jù)長度 len 和起始地址。如果 FIFO 不為空,進入 WA_START 狀態(tài),在此狀態(tài)下與 AXI_HP 接口進行握手并給 last 信號賦值,由于最大突發(fā)長度為 256,在傳輸結束時需要根據(jù) last 信號判斷是否需要進行再一次傳輸,若數(shù)據(jù)長度 len 大于 256 , last 信號置 0 ,否則置 1 。在 WA_PROC 狀態(tài)輸出 AXI 可寫信號 burst_data_req ,對計數(shù)器 cnt 進行累加。WR_DONE 狀態(tài)輸出傳輸完成信號 burst_finish 。
使用 AXI master 進行數(shù)據(jù)傳輸時,將 burst_req 置1 請求 AXI master 傳輸, 寫入數(shù)據(jù)長度 len 和起始地址 addr ,判斷 AXI master 輸出 AXI 可寫信號 burst_da-ta_req 為高時將光纖接口輸入的數(shù)據(jù)拼接為 64 bit 寫入數(shù)據(jù)總線,判斷 AXI master 輸出信號 burst_finish 為高后可進行下一次寫請求。經封裝后的 AXI4 協(xié)議對用戶的接口只有寫請求、數(shù)據(jù)可寫、寫完成、數(shù)據(jù)總線、 地址總 線和數(shù)據(jù)長 度, 極大簡化 了 AXI4 的READY/VALID 握手機制。
1.2.3 內存映射
為實現(xiàn)網絡參數(shù)靈活配置, 在 PS 部分移植嵌入式 Linux 系統(tǒng)進行數(shù)據(jù)讀取和以太網數(shù)據(jù)發(fā)送。Linux中 /dev/mem 是處理器地址空間的全映射,可以通過使用 C 標準庫提供給用戶的內存映射方法 mmap 訪問內存物理地址。內存映射是指 Linux 通過將一個虛擬內存區(qū)域與一個對象映射以讀寫對象內容。mmap 將內存物理地址映射到進程的地址空間,實現(xiàn)物理地址和虛擬地址間一一對應的關系,進程可以使用指針讀寫內存物理地址,獲取 PL 寫入 DDR3 的數(shù)據(jù)。在 Linux讀取完一段數(shù)據(jù)后, 需要清除 PL 寫入的數(shù)據(jù)就緒標識。默認情況下,通過內存映射寫入 DDR3 的數(shù)據(jù)會被寫入內核 Cache 中,不能及時寫入對象的物理輸入 / 輸出( I/O ),這樣會導致 Linux 與 PL 間數(shù)據(jù)傳輸錯誤。為保證數(shù)據(jù)安全,在打開 /dev/mem 時添加 O_SYNC參數(shù), 強制刷新內核 Cache 數(shù)據(jù)到對象 I/O 。Linux 成功讀取數(shù)據(jù)后并通過 TCP/IP 協(xié)議將數(shù)據(jù)發(fā)送到 PC上位機。
1.3 數(shù)據(jù)傳輸流程優(yōu)化
1.3.1 控制策略優(yōu)化
光纖數(shù)據(jù)速率高于以太網數(shù)據(jù)速率,為了避免緩沖區(qū)寫溢出,保證數(shù)據(jù)正確,一般需要等待接收數(shù)據(jù)完畢后再發(fā)送下一包指令,但是這樣串行的指令流程會造成一個周期內各個模塊都有較長的空閑時間。 串行策略流程圖如圖 4 所示。
圖 4 串行策略流程圖
為提高速度,在 PL 寫入 DDR3 、 Linux 讀取 DDR3通過 TCP 發(fā)送和上位機接收數(shù)據(jù)寫入磁盤三部分采用乒乓操作。DDR3 被分為高、低地址兩部分,光纖數(shù)據(jù)被乒乓寫入 2 塊空間。Linux 將 2 塊空間數(shù)據(jù)乒乓發(fā)送,讀到低地址標識后讀取低地址數(shù)據(jù),同時發(fā)送高地址數(shù)據(jù)。上位機先發(fā)送 2 次傳輸指令,使發(fā)送傳輸指令與判斷接收完成這 2 個操作錯位以實現(xiàn)并行處理的優(yōu)化方案。在開始傳輸后,上位機預先發(fā)送傳輸一包數(shù)據(jù)的指令給記錄器, 再按照發(fā)一包指令、收一包數(shù)據(jù)的流水線處理,并且建立 2 條流水線以實現(xiàn)數(shù)據(jù)接收和數(shù)據(jù)落盤的乒乓操作,到最后一包時不發(fā)送指令,只接收數(shù)據(jù)。此方案在上位機接收數(shù)據(jù)時數(shù)據(jù)傳輸系統(tǒng)可以準備好下一包的數(shù)據(jù)等待上位機接收,在處理連續(xù)數(shù)據(jù)時可大幅提升傳輸速度。優(yōu)化策略流程圖如圖 5 所示。
圖 5 優(yōu)化策略流程圖
1.3.2 共享內存映射
使用 O_SYNC 進行內存映射時會嚴重浪費高速內核 Cache 的性能, 讀寫 mmap 映射的內存物理地址非常緩慢。本文在嵌入式 Linux 下分別測試用戶空間、帶 O_SYNC 參數(shù) mmap 和不帶 O_SYNC 參數(shù) mmap 的內存拷貝速度,結果如表 1 所示。
表 1 內存拷貝速度對比
嵌入式 Linux 在檢測到 PL 寫入 DDR3 的數(shù)據(jù)可讀標識后使用讀描述符進行內存映射,將數(shù)據(jù)拷貝至TCP 發(fā)送緩沖區(qū)??截愅瓿珊笫褂脤懨枋龇M行內存映射,清除標識,通知 PL 準備下一包數(shù)據(jù)。共享內存映射比單內存映射提升 36.5% 的拷貝速度。
2 系統(tǒng)實現(xiàn)
2.1 嵌入式 Linux 移植
PS 需要從非易失性存儲器中啟動嵌入式 Linux系統(tǒng)和應用程序 ( APP )。ZYNQ 系列有 JTAG 、 SD 卡、QSPI Flash 和 NAND Flash 4 種啟動方式。因為 SD 卡接插件難以滿足可靠性要求, 且 ZYNQ 不支持 eMMC作為主啟動設備,所以本系統(tǒng)采用 QSPI Flash 啟動掛載 eMMC 作為外部存儲的方案。
Xilinx 提供了 Linux 移植工具 petalinux ,可以很方便實現(xiàn) Linux 的配置、裁剪。移植過程如下:
① 生成 bit 流文件。使用硬件描述語言完成 PL 部分邏輯功能, 并根據(jù)硬件平臺管腳使用情況對 ZYNQIP 核進行配置,編譯整個工程生成 bit 流文件。
② 導入 bit 流文件。在 Linux 虛擬機中依照 ZYNQLinux 模板生成工程,將 bit 流文件作為硬件描述信息導入工程, Linux 通過 bit 流文件實現(xiàn)部分自動設備樹文件配置。
③Linux 裁剪與定制。使用 petalinux 完成內核定制、設備樹文件配置。本系統(tǒng)使用 SPI Flash 加載系統(tǒng),使用 U-boot 作為第二階段引導文件( SSBL ),將 boot 、U-boot 和 kernel 的存儲位置設置為 flash ;啟用安全數(shù)字輸入輸出 ( SDIO ) 控制器和以太網控制器以使用eMMC 和以太網;在設備樹文件中增加 eMMC 、以太網等硬件的物理地址;修改設備樹文件,將 DDR3 的高256 MB 地址空間設置為保留以避免 Linux 系統(tǒng)破壞緩沖區(qū)數(shù)據(jù);加入自啟動腳本文件實現(xiàn) Linux 系統(tǒng)啟動后自動運行應用程序。
④ 打包 bin 文件。使用 petalinux 將 PL 部分配置文件 bit 流文件、 kernel 文件、第一階段引導文件( FS-BL)和U-boot 打包生成 BOOT.bin 文件。
⑤ 固化 Flash 。將生成的 BOOT.bin 文件和 petal-inux 工具生成的 fsbl.elf 文件燒寫進 Flash 中, 實現(xiàn)上電自啟動嵌入式 Linux 操作系統(tǒng)。
嵌入式 Linux 系統(tǒng)啟動時通過運行 BootROM 代碼從外部存儲器加載 FSBL 加載到內存,根據(jù) FSBL 中bit 文 件 對 PS 、 PL 進 行 配 置 后 加 載 SSBL 到 內 存 ,petalinux 使用 U-boot 作為 SSBL 。U-boot 完成硬件配置初始化、內存空間映射后引導 Linux 內核到內存,通過設備樹文件將硬件設備信息傳遞給內核后將控制權移交 Linux 內核, Linux 初始化硬件設備、 加載文件系統(tǒng)后完成啟動。
2.2 PC 上位機
PC 上位機使用網線連接數(shù)據(jù)傳輸系統(tǒng),異步 232串口連接信號源。上位機實現(xiàn)用戶和界面交互,可設置串口號、傳輸數(shù)據(jù)包大小和文件大小。系統(tǒng)連接后,PC 上位機發(fā)送查詢段地址指令建立 TCP 客戶端連接數(shù)據(jù)傳輸系統(tǒng),同時信號源會返回數(shù)據(jù)列表,然后選擇興趣數(shù)據(jù)段和文件存儲路徑后發(fā)送傳輸指令,最后接收數(shù)據(jù)傳輸系統(tǒng)的 TCP 數(shù)據(jù)并記錄到本地磁盤。
3 系統(tǒng)測試
數(shù)據(jù)傳輸系統(tǒng)使用 5 V 電壓供電。本文通過在嵌入式 Linux 下移植 iperf3 帶寬測試軟件進行測試,最終測得此以太網鏈路速率為 850 Mb/s 。測試使用信號源為雷達原始數(shù)據(jù)記錄器,該記錄器理論傳輸速度為3200 Mb/s ,高于千兆以太網的最大速率,不會影響測試結果。數(shù)據(jù)傳輸系統(tǒng)通過 2 路光纖線纜連接記錄器,六類網線連接 PC 上位機。在 PC 上位機進行數(shù)據(jù)傳輸測試,測試電路實物圖如圖 6 所示,右側為數(shù)據(jù)傳輸系統(tǒng)。
圖 6 測試電路實物圖
本文監(jiān)測 Windows 網卡資源使用情況,發(fā)現(xiàn)數(shù)據(jù)傳輸過程中速率平穩(wěn),證明使用的三級乒乓和預發(fā)送指令錯位判斷策略可以有效減少流程中各模塊的空閑時間。 經過多次測試,連續(xù)數(shù)據(jù)的傳輸速度保持在770 Mb/s 以上, 達到該鏈路物理帶寬的 90.6% , 除去TCP 協(xié)議開銷有效數(shù)據(jù)傳輸速度超過 86 MB/s 。測試傳輸 500 GB 數(shù)據(jù),經軟件校驗數(shù)據(jù)無丟包無錯誤。
本設計與傳統(tǒng)數(shù)據(jù)傳輸方式性能對比如表 2 所示。與 PCIe 、 USB3.0 相比, ZYNQ 在功耗、傳輸距離和靈活度上具有明顯優(yōu)勢, 更適用于外場試驗環(huán)境,同時傳輸速率較高,接近磁盤寫入速度,滿足應用要求。
表 2 系統(tǒng)性能對比
4 結束語
本文設計了一種光纖接口轉為以太網接口數(shù)據(jù)傳輸系統(tǒng)的實現(xiàn)方法, 并提出了一種三級乒乓和預發(fā)送指令錯位判斷接收的策略,有效保證了數(shù)據(jù)正確傳輸,提高了傳輸速率,連續(xù)數(shù)據(jù)傳輸速度超過 770 Mb/s 。實現(xiàn)的系統(tǒng) PCB 尺寸僅為 91 mm×63 mm , 使用 5 V 電壓供電,工作電流為 1.1 A ,解決了傳統(tǒng)傳輸系統(tǒng)體積與功耗大、不適用于外場試驗的問題。通過在異構芯片 ZYNQ 的 PS 部分掛載嵌入式 Linux 操作系統(tǒng),實現(xiàn)在不同網絡環(huán)境下靈活配置系統(tǒng)的網段、 IP 和傳輸協(xié)議,擴展了使用場景,降低了后期維護難度。(參考文獻略)
審核編輯:何安
-
以太網
+關注
關注
40文章
5419瀏覽量
171595 -
光纖
+關注
關注
19文章
3913瀏覽量
73127
發(fā)布評論請先 登錄
相關推薦
評論