摘 要:ZedBoard是Xilinx公司首款融合了ARM Cortex A9雙核和7系列FPGA的全可編程片上系統,兼具ARM和FPGA兩者的優勢,是小型化SCA實現的最佳嵌入式平臺之一。本文介紹了ZedBoard平臺的硬件結構,并針對SCA架構在專用硬件平臺上無法實現的問題,通過分析研究MHAL硬件抽象層技術和OCP接口規范,設計了符合ZedBoard平臺硬件環境的MHAL硬件抽象接口和FPGA波形組件容器,有效地解決了SCA架構在ZedBoard平臺上的實現問題,為在ZedBoard上實現以SCA架構為核心的系統開發打下了基礎。
?
0 引言
軟件通信體系架構(Software Communications Architecure,SCA)是美軍在聯合戰術無線電系統(Joint Tatical Radio System,JTRS)中針對GPP環境提出的軟件無線電實現框架,結合JTRS后續推出SCA補充標準對SCA架構進行裁剪,可在硬件資源有限的嵌入式硬件平臺上搭建小型化SCA架構,增強系統軟件的可重用性和可移植性,是實現嵌入式可重構系統的主要架構之一。ZedBoard是Xilinx公司推出的首款融合了GPP和FPGA的嵌入式開發環境,可滿足大部分嵌入式系統開發的需求,是嵌入式開發環境的必然發展趨勢,但是由于FPGA中的應用組件都由具體的邏輯電路實現,完全不同于GPP上的程序調用執行,所以SCA架構在ZedBoard平臺上會有諸多實現問題[1]。
本文首先介紹了ZedBoard平臺硬件結構,提出了基于ZedBoard的SCA架構的總體設計,并重點針對SCA架構在ZedBoard平臺上難以實現的問題,通過深入分析研究Modem硬件抽象層(Modem Hardware Abstration Layer,MHAL)標準和Open Core Protocol(OCP) 接口協議,結合ZedBoard硬件結構設計了MHAL硬件平臺外部抽象接口和SCA波形組件容器,有效地解決了SCA架構在ZedBoard上的實現問題,為在ZedBoard上實現以SCA架構為核心的系統開發打下了基礎。
1 基于ZedBoard的SCA架構總體設計
ZedBoard平臺是Xilinx公司最新推出的首款融合了ARM Cortex A9雙核和FPGA的全可編程片上系統,兼備GPP和FPGA的特點和優勢。ZedBoard平臺的核心是Xilinx的Zynq-7020芯片,主要包括processing system(PS)和programmable logic(PL)兩部分。其中PS部分包含雙核的ARM Cortex A9處理器,不僅負責整個ZedBoard開發板的管理和配置,也可作為獨立的芯片單獨使用,是ZedBoard平臺的系統控制核心,同時還集成了SIMD多媒體處理引擎(NEON)、內存管理器(MMU)等功能模塊和多種對外擴展接口,具有很強的功能擴展能力。PL部分主要包括Xilinx的高性能7系列FPGA,作為PS部分的補充提供了豐富的IO資源和高速數字處理能力[2-3]。
基于ZedBoard的SCA架構總體設計如圖1所示,為充分發揮ZedBoard平臺PS部分的高性能系統控制能力,設計將SCA架構的核心框架、中間件和操作系統在PS部分的ARM上實現;而PL部分的高速數字處理能力和可重配置特點非常適合SCA應用層波形組件的實現。本文通過自行設計的MHAL硬件抽象接口和OCP波形組件容器來解決SCA架構在FPGA上的實現問題,并利用ZedBoard平臺的APC接口和IO總線實現PS部分的核心框架和FPGA波形組件間的消息傳輸,下面對MHAL硬件抽象接口和FPGA波形組件容器進行重點講述。
2 MHAL硬件抽象接口設計
Modem硬件抽象層MHAL是JTRS辦公室在2007年頒布的接口標準,其初衷是為SCA系統中不同處理單元的通信提供標準的協議和接口,同時也涉及了硬件平臺外部接口的抽象,為實現SCA消息在ZedBoard上的標準傳輸提供了方法[4-5]。本文深入分析研究了MHAL標準,并結合ZedBoard開發環境,對MHAL消息結構進行了修改,重新定義了MHAL硬件抽象接口的功能結構和接口函數,分別設計了ARM和FPGA的MHAL消息發送和接收結構,完成了MHAL硬件抽象接口的設計。
2.1 MHAL消息結構設計
MHAL消息從最低有效位到最高有效位以地址遞增的方式進行排列,本文對MHAL標準中的消息結構進行了修改和擴充,添加了消息起始符和消息類型字段,使其能更好地滿足SCA架構在ZedBoard上的實現需求,其消息結構如圖2所示,其他字段與MHAL標準中的消息結構一樣,在此不做贅述。
(1)消息起始符:本文設置了專門的16 bits消息起始符用來界定消息的起始,以13位巴克碼為基礎取值為“1111100110101000”,大大提高了MHAL消息接收和解幀的準確性。
(2)消息類型:獨立的16 bits消息類型字段用來指示MHAL消息的類型和附屬信息,可以提高MHAL消息解析效率,使FPGA波形組件容器準確地將消息發送到相應的功能模塊。前3 bits指示MHAL消息類型,其對應關系如表1所示;后續比特分為三部分,分別指示MHAL消息源的處理編號、組件編號和端口編號。
2.2 MHAL硬件抽象接口結構設計
結合MHAL標準和ZedBoard平臺特點,本文設計的MHAL硬件抽象接口功能結構如圖3所示,主要包括通用代理、MHAL消息接收結構和MHAL消息發送結構,結合上文規范的MHAL消息結構屏蔽了ARM和FPGA硬件平臺的外部接口,實現了SCA消息在ZedBoard的ARM和FPGA之間的標準傳輸。
2.2.1 通用代理設計
通用代理由SCA核心框架的ExecutableDevice接口通過execute()函數創建,是運行在ARM上的一個SCA中間件對象,具有核心框架規定的CF::Resource、CF::PortSupplier和CF::Port等組件接口,根據目標邏輯地址實現與對應FPGA組件的通信。
通用代理作為FPGA波形組件在ARM上的代理接受核心框架的調用和管理,并將SCA消息轉換為MHAL報文,添加目標邏輯地址字段后發送到ARM MHAL發送結構,是實現FPGA波形組件和ARM核心框架橋接的適配器。
2.2.2 ARM MHAL發送和接收結構設計
ARM MHAL發送和接收結構由MHAL設備組件實現,提供信源函數和信宿函數服務,實現對MHAL消息的封裝和發送、接收和解封裝。結合ZedBoard平臺ARM+FPGA的硬件結構特點,本文對MHAL標準中的GPP API結構進行了擴充和修改,使其更好地與ZedBoard開發環境相契合,下面以ARM發送結構為例進行講述,其UML圖如圖4所示。
MHAL發送結構收到由通用代理發送來的MHAL報文后,通過builsMhalMsg()等函數將其封裝為完整的MHAL消息并存儲在MHALMsg[MAX_MHAL]中,end-BuildMhalMsg()函數結束MHAL消息封裝流程,再由 pushPacket()函數通過外部傳輸鏈路將MHAL消息發送到對端的MHAL接收結構。
2.2.3 FPGA MHAL發送和接收組件設計
FPGA MHAL發送和接收組件由一系列接收和發送MHAL消息的實體構成,與ARM MHAL發送和接收結構功能基本一致。本文以Multi-Depth FIFO節點為基礎設計了FPGA MHAL發送和接收組件,其具有允許多條消息隊列等待接收,支持按字節處理消息的優點,增強了FPGA對MHAL消息的處理能力,很好地滿足了FPGA上MHAL消息發送和接收的需求。下面以FPGA MHAL接收組件為例,本文采用Verilog硬件編程語言封裝了其外部接口,其外部端口和功能如表2所示。
3 FPGA波形組件容器設計
容器是FPGA波形組件的直接運行環境,為實現SCA對FPGA波形組件的調用和控制提供本地服務和API[1],使得FPGA上的波形組件能像GPP組件一樣被核心框架管理,是在ZedBoard上實現SCA架構的重要組成部分。
開放核協議OCP片上子系統通信定義了一個高效的、和總線相對獨立的、可配置的、可升級的接口,并可通過Verilog、VHDL等硬件編程語言實現,非常適合FPGA開發環境[6-7]。本文基于OCP接口設計了FPGA波形組件容器,規范了容器提供的服務和波形組件接口,實現了SCA核心框架對FPGA組件的管理以及異構組件間互通,大大提高了FPGA波形組件的可移植性和可重用性,其結構如圖5所示。
3.1 OCP互連模塊設計
OCP互聯模塊作為FPGA波形組件容器的核心,是實現容器對組件控制和管理功能的主要承擔者,主要由控制模塊、通信模塊、本地服務模塊和相應的OCP接口組成。其中控制模塊是OCP互聯模塊的樞紐,為FPGA波形組件提供了與SCA波形組件接口相對應的initialize()、start()和stop()等操作,便于核心框架對FPGA波形組件控制命令的執行。
OCP互聯模塊的工作流程為:控制模塊進一步解析FPGA MHAL接收組件接收到的MHAL消息,并判斷出此消息的類型。如果是控制消息、連接消息或者斷開連接消息,則根據MHAL消息中的目標邏輯地址找到目標組件并完成相應控制操作;如果是數據消息,則交由通信模塊處理。通信模塊根據MHAL消息中的目標邏輯地址將數據消息發送到目標組件,并將接收到的組件返回數據消息交由控制模塊進行封裝等處理。本地服務模塊為容器中的組件提供時鐘信號和復位信號。
3.2 組件OCP接口設計
為了使FPGA波形組件與容器的OCP互連模塊無縫連接,本文以OCP接口為基礎設計了FPGA組件的封裝接口。組件OCP接口與OCP互聯模塊的功能模塊相對應,包括組件控制接口、組件通信接口和本地服務接口。
組件控制接口采用以容器為Master,組件為Slave的模式,采用RTL編程語言實現了initialize()、run()和release()操作,與組件SCD文檔中組件IDL端口定義保持一致,很好地滿足了核心框架對FPGA組件的控制操作需求。
組件通信接口根據組件與容器具體的通信情況分為組件Master只寫、組件Master只讀和組件Slave只寫三種模式,并定義了不同模式下所需的端口,可滿足組件通信的各種需求。
本地服務接口與本地服務模塊相對應,用來接收OCP互聯模塊提供的時鐘信號和復位信號。
4 結論
本文緊跟當前系統開發硬件平臺的趨勢,以Xilinx最新推出的ZedBoard平臺為背景,針對SCA架構在專用硬件平臺上實現的諸多問題,通過深入分析研究MHAL標準和OCP協議,對MHAL消息結構進行了修改和擴充,結合ZedBoard開發環境設計了ARM和FPGA上的MHAL消息發送和接收結構,并根據SCA核心框架對組件的管理需求設計了容器功能模塊和FPGA組件接口,最終完成了MHAL硬件抽象接口和FPGA波形組件容器設計,有效地解決了SCA架構在ZedBoard上的實現問題,為在ZedBoard上實現以SCA架構為核心的系統開發打下了基礎。
評論
查看更多