宋家平,朱衍明,劉一博,王天昊
(中國船舶集團有限公司 系統工程研究院,北京 100036)
隨著目前集成電路的工藝和技術的高速發展,電子信息技術也在高速發展中,DSP(digital signal processor)已經成為數字信號處理技術應用中必不可少的重要器件之一。DSP已經廣泛應用到航天航空、軍事領域等相關領[1]。在一些對信號處理數據量大、實時性高、高速計算的應用中,單單依靠DSP芯片的信號處理能力往往不能滿足需求,高度集成的多處理器系統逐步成為高速信號處理平臺的主流方案[2]。FPGA(field programmable gate array)是一種可編程邏輯器件,擁有豐富的高速接口,能通過使用預建的邏輯塊可重新編程布線資源來實現特定的電路結構[3]。
當前DSP和FPGA的協同數字信號處理系統主要應用于雷達信號處理[4]、語音信號處理[5]、圖像處理[6]等領域。在[7]中,實現了一種能夠對以太網、CAN等不同協議數據進行解析、過濾及轉發的多協議網關,該網關采用DSP+FPGA的控制器架構DSP作為控制核心,調用FPGA實現的驅動函數實現以太網和CAN數據收發,并根據特定的轉發策略對接收數據進行解析、過濾和轉發,試驗結果表明,該多協議網關單元具有通信接口種類多、數量多,數據轉發實時性強、可靠性高,數據解析、轉發規則可編程設定、靈活性高等特點,能夠適應不同系統的應用需求。在文獻[8]中提出運用DSP與FPGA相配合的方式控制CAN總線實現數據傳輸,提高高速條件下數據傳輸的穩定性和可靠性,實驗結果表明,系統數據傳輸過程穩定可靠,可以基本滿足高速信號的處理與傳輸要求。
水下無人航行器(UUV,unmanned underwater vehicle)作為一種復雜的水下機器人,其探測系統主要通過聲、光、電、磁等多種物理場信息的采集和處理,實現對水下目標的搜索、探測等任務。因此,利用DSP的數據高速處理能力和FPGA的高速接口數據交互能力,基于DSP和FPGA協同處理架構,在高速數據通信、高實時性聲、光、電、磁等數字信號處理的UUV水下目標探測應用場景中,實現同時具備兩者優勢,發揮各自特點優勢。實現了通用的目標探測處理系統平臺。通過FPGA擴展DSP,不僅解決了DSP通信資源不足的問題,而且通過FPGA實現一些通信接口的邏輯設計,降低了電路設計的復雜度。并通過以太網完成上位機到目標探測系統的指令或數據映射,以設備地址定義不同RS232設備等,通過對不同地址進行讀寫地址數據操作,從而實現了對不同探測系統外圍設備在目標探測前和處理后的控制。
基于DSP的UUV目標探測系統總體設計的核心思想是構造一個具有可擴展性、標準化、模塊化的硬件平臺,再結合模塊化軟件設計,使平臺具有很高的靈活和通用性。該系統主要實現了16路RS232串口數據的發送及接收,根據不同的需求后期可擴展 CAN通信以及RS485通信等,實現對不同接口的外圍設備的控制,從而更快地獲得更多、更全面的目標信息,便于目標的處理和識別,總體設計如圖1所示。

圖1 系統總體設計框圖
由于DSP的接口資源有限,以及FPGA具備多個工作單元并行處理和實時數據傳輸的能力[9],為降低外圍硬件電路的設計難度和提高該系統的靈活性、通用性、擴展性[10],該系統采用了FPGA來對DSP進行功能的擴展。
圖1中,通過TCP/IP協議棧的網絡通信實現以太網到目標探測系統的指令或數據映射,以設備地址定義不同RS232外圍設備,通過對不同地址進行讀地址數據操作,并將這些數據信息發送到FPGA,在FPGA內部做FIFO緩存、串并轉化等;再通過EMIF接口將處理后的數據傳輸給DSP端,充分使用DSP強大的數據處理能力和靈活的配置能力[11],實現目標探測信號處理和識別的各種復雜的算法;DSP端先將數據存儲到DDR3中,再根據需要將數據讀出內存進行相應的處理,處理后通過EMIF接口傳輸給FPGA端;最后,再由網絡通信實現對不同RS232外圍設備的寫操作,從而將最終處理的數據映射到不同的外圍設備,經行目標識別后的操作,如:顯示目標的特征信息、具體方位信息等。至此便實現了目標探測信號處理和識別的整個過程。FPGA Flash控制模塊和DSP Flash控制模塊,分別實現FPGA和DSP各自程序的在線加載和更新。
本系統設計的主控單元使用Xilinx 公司Zynq7000系列的XC7Z045T芯片。該芯片集成了ARMCortex-A9雙核處理器的處理系統(PS)和基于Xilinx 可編程邏輯資源的可編程邏輯系統(PL)。可對該芯片的PS端和PL端進行獨立開發,并根據控制需求進行系統的軟件和硬件劃分,從而將PS和PL各自的優勢發揮出來,讓整個系統呈現出最佳性能,該芯片還具有豐富的外部接口、內外部存儲以及靈活的配置[12]。
DSP采用美國TI公司的8核C66x CorePac芯片TMS320C6678,其核心工作頻率為1.25 GHz,運算速度最高可達320 GMACS/160 GFLOPS。該芯片采用了同構多核架構,具有4 MB供8個核心訪問的共享內存,以及具有SRIO、PCIe等多種接口,每個核均有512 KB的私有內存,可獨立地執行特定的計算任務。可滿足各種不同數據傳輸的應用需求,完全向后兼容所有現有的C6000系列定點和浮點DSP[13]。配合外圍DDR3、Flash等,為整個模塊提供數字處理平臺。
多模塊集成設計需要具備相應的時鐘分配方案,如圖2所示。在本設計中使用1片ADI公司的AD9520時鐘產生芯片為所有的工作模塊提供低抖動、穩定的參考時鐘。該芯片是一款極低噪聲PLL時鐘頻率合成器,集成VCO、時鐘分頻器和12路1.6 GHz LVPECL/CMOS輸出,具有自動保持和靈活的參考輸入電路,支持非常平穩的參考時鐘切換,該系列還可以提供用于外部VCXO的必要配置[14]。

圖2 時鐘分配方案
通過配置SPI總線對其進行編程設計,產生250 MHz、156.25 MHz、100 MHz和50 MHz 的時鐘分別提供給DDR3工作時鐘、SRIO模塊時鐘、FPGA的系統時鐘及多核DSP內核和以太網模塊時鐘等。
在整個系統的設計中電源設計作為平臺設計的基本環節,為了達到給多核DSP、FPGA以及其他的芯片提供正確、安全、穩定供電的目的,電源部分設計也是最為復雜和繁瑣的一個環節。本系統采用了3片ADI公司的LTM4644降壓型μModule(電源模塊)穩壓器為總體系統提供所需要的各種電壓值。
LTM4644可在一個4~14 V或2.375~14 V(采用一個外部偏置電源)的輸入電壓范圍內運作,LTM4644/LTM4644-1支持一個0.6~5.5 V的輸出電壓范圍。該器件的高效率設計使每個通道能夠提供4 A連續(5 A峰值)輸出電流,僅需大容量的輸入和輸出電容器[15]。
以太網接口采用TI公司DP83848以太網PHY,DP83848C是美國國家半導體公司生產的一款魯棒性好、功能全、功耗低的10/100 Mbps單路物理層(PHY)器件。支持10 Base-T和100 Base-TX以太網外設,對其他標準以太網解決方案有良好的兼容性和通用性,其電路結構如圖3所示。

圖3 百兆以太網接口
該系統的RS232串口部分采用了模塊化的電路設計。FPGA的功能邏輯如圖4所示,它包括發送模塊、接收模塊和數據處理模塊[10]。由于不同的外圍設備有不同的串口通信需求,因此,該系統每一路串口通道均采用了獨立的設計,而且,DSP可根據各自的需求對每一路串口動態設置波特率、起始位、數據位、奇偶校驗位及停止位等工作參數,以提高其靈活性和通用性。

圖4 串口邏輯設計
2.6.1 RS232接口設計
RS232接口電平轉換芯片采用芯佰微公司的CBM3232。它是一種基于EIA/TIA-232標準和V.28/V.24標準的通訊接口,其供電電壓為3.3 V、具有低功耗需求,高數據傳輸率能力,其電路結構如圖5所示。

圖5 RS232接口電路圖
CBM3232有兩個接收器和一個驅動器,該設備可以確保以RS-232標準輸出電平水平的情況下以120 kbps數據傳輸率運行。典型應用包括筆記本計算機、輕型便攜掌上電腦、電池供電的設備、手持式設備、電子周邊設備和打印機[16]。
2.6.2 UART通信
通用異步接收器或發送器(UART,universal asynchronous receiver/transmitter)是一種全雙工傳輸模式[17],主要用于串行傳遞數據。它的基本原理是:一方面,在接收數據時,將接收到的串行數據轉換成并行數據;另一方面,在發送數據時,將并行數據轉換成串行數據來進行傳輸,實現將信息在串行通信與并行通信之間傳輸和轉換。
UART的傳輸鏈路時以數據幀為基本單元進行傳輸的,如圖6所示。其一幀數據長度一般是5~8 bit,包括起始位、數據位、校驗位與停止位;可根據需要選擇是否采用校驗位,校驗模式包括奇校驗和偶校驗,停止位長度包括1 bit、1.5 bit、2 bit,一般根據當前UART鏈路傳輸要求選用合適的數據格式[18]。

圖6 UART串行異步通信數據格式
2.6.3 收發FIFO緩存數據
FPGA使用的FIFO一般指的是對數據的存儲具有先進先出特性的一個緩存器,常被用于數據的緩存,或者高速異步數據的交互也即所謂的跨時鐘域信號傳遞[19]。FIFO 可以將連續的數據流在進棧和存儲之前集中緩存起來,不僅可以防止數據丟失,還可以使若干個數據一起進行處理避免頻繁的總線操作。收發FIFO采用8×256的容量,數據位寬度為8位,存儲深度為256 byte,FIFO_empty作為FIFO是否有數據的標志信號。
2.6.4 數據處理及與DSP的通信
FPGA芯片對不同的串口通道分配了不同的片選地址,DSP在每個串口通道進行參數初始化設置和收發數據設置時,首先,根據設置的片選地址找到相應的寄存器,其次,通過總線的形式收發存放在不同地址中的數據,最后,根據需求對所有通道的數據進行相應處理。根據圖4中的串口邏輯設計,當接收到其中某一路串口通道數據時,DSP讀取該通道對應的FIFO_empty值,若有數,則DSP從該通道對應的寄存器地址獲取已完成串并轉換的數據。類似地,在發送指令或數據至串口通道時,DSP通過總線把帶有幀頭、幀尾的完整數據包發送到對應的FPGA寄存器,然后,FPGA將該數據存入對應串口通道的發送FIFO中,最后,完成并串轉換后把該FIFO中的數據轉成串行形式逐位傳送至外部設備。
通過采用VIVADO開發平臺和VHDL 硬件描述語言,UART通信在邏輯電路層面開展了模塊化的設計和開發。包括波特率發生器;UART接收器;UART發送器三個功能設計模塊。
首先,波特率發生器的設計本質就是對分頻器的設計。而分頻器的設計最重要的步驟就是確定分頻數,即波特率的分頻因子。本系統的UART通信分頻因子通過給定的UART時鐘頻率和外圍設備要求的波特率計算得出。根據UUV目標探測系統不同傳感器設備的通信協議可對波特率分頻因子更改。
UART接收器設計的目的是接收串行通信數據。當 UART 接收使能變量置1時,開始接收RXD數據信號,直至信號FIFO_empty變為 1,此時 FIFO已滿。串行通信數據接收的幀格式如圖6所示,UART接收器的設計通過狀態機來實現,其狀態轉移過程如圖7所示。

圖7 UART接收器狀態轉移過程圖
S0表示空閑等待狀態,具體表現是RXD數據線為低電平,此時UART接收器模塊一直在等待狀態。當UART接收的數據被檢測到低電平后,便進入到S1狀態。S1狀態的目的是消除電磁干擾所產生的低電壓毛刺對UART接收數據的干擾,若是干擾,返回到S0狀態,否則進入數據接收狀態S2狀態。在S2狀態下通過9位的寄存器完成包含8位數據和1位奇偶校驗位的數據接收和存儲,然后進入S3狀態。S3狀態是對接收到的數據進行奇偶校驗的狀態,若校驗有誤,提示相關錯誤信息;反之,提示完成數據接收,并進入下一次接收等待的S0狀態。
UART發送器模塊設計的目的是串行發送數據,在發送使能變量和發送 FIFO均不為0時,讀取該FIFO中的并行數據,經過并串轉換后,在首位加入數據起始位,末位加入奇偶校驗位以及停止位,形成完整的串行數據幀;最后按照事先設定的波特率完成串行發送,UART發送器模塊狀態轉移過程如圖8所示。

圖8 UART發送器狀態轉移過程圖
S0表示空閑等待狀態,在該狀態下一直等待主控處理器發來數據。當發現有數據寫入時,由S0狀態轉為S1狀態。S1為奇偶校驗位設置狀態,通過開啟校驗電路,根據寫入的數據和奇偶校驗規則或算法設置并獲取相應的校驗結果,并將其添加到數據特定位后,完成相應的校驗位生成,S1狀態進入S2狀態。S2狀態為數據發送狀態,將包含數據起始位、奇偶校驗位以及停止位的完整數據幀向外發送,直至完成所有數據的發送,接著回到S0狀態,進入下一次發送等待狀態。
由于TMS320C6678的外部存儲器控制接口是EMIF16,因此,EMIF通信的軟件設計就是對EMIF16模塊的初始化參數配置進行設計。該EMIF16模塊的寄存器地址配置范圍是0x20C00000~20C000FF,它包括26組寄存器[20]共256字節。具體包括異步等待周期寄存器(AWCCR)、EMIF模塊中斷相關寄存器(IRR、IMR、IMSR、IMCP)、EMIF模塊版本及狀態寄存器(RCSR)、異步配置寄存器(ACR)等[21]。該系統通過對上述寄存器逐一進行相應的編程配置,完成了DSP對EMIF16模塊的初始化編程。寄存器編程配置時根據其需求進行重點位域的編碼,與本系統無關的寄存器選擇默認值對其進行了配置。完成配置后開始設計和實現上層應用系統,本系統中DSP和FPGA基于EMIF16異步通信的軟件流程如圖9所示,主要實現數據的接收和發送功能。

圖9 EMIF通信軟件流程圖
該系統上電后,EMIF模塊接口完成初始化程序后開始和外接設備進行通信。對于需要依靠系統告知EMIF模塊進行數據接收這種被動模式下,通過GPIO發送中斷信號以實現輔助接收數據的功能;即FPGA端即將發送的數據在準備好之后,拉高GPIO管腳電平,DSP端收到該GPIO上升沿信號后觸發中斷信號Interrupt,開始執行中斷函數,判斷數據接收控制寄存器(RCR),并開始接收數據。對于DSP端直接讀取EMIF模塊完成數據發送這種主動模式,在每次發送數據時需要對FPGA端的數據準備狀態進行查詢,確保發送控制寄存器(TCR)對應的狀態準備已完成才開始發送相應的數據,以保證發送數據的穩定性。
在該系統中,為實現基于TCP/IP以太網協議的上位機與UUV目標探測傳感系統之間的通信,XC7Z045T芯片對硬件邏輯電路模塊和IP核采用Verilog語言設計編程。傳輸控制協議/網際協議簡稱為TCP/IP協議,它包含多個不同層次的協議族組合[22],其中的TCP和IP 協議是兩個重要的計算機通信協議。本系統以太網通信的設計使用應用層、傳輸層、網絡層、鏈路層,以及一路物理層組成的五層網絡協議,其設計流程如圖10所示。

圖10 以太網通信設計流程圖
上位機應用程序在通過TCP/IP以太網協議棧發送數據時,要對數據進行逐級打包和封裝,在該過程中,接收數據的首部或尾部將會被每個協議層添加相應的信息;在目標探測傳感系統接收通過TCP/IP協議發送過來的數據時,首先將數據流由下往上逐層解析相應接收到的數據,然后去除對應的首部或尾部的信息,保留其發送的有效數據。
應用層通過提供各種協議目的是對接收的數據進行解釋。TCP/IP的應用層協議包括文件傳輸協議(FTP 協議)、TELNET協議、超文本傳輸協議(HTTP 協議)和簡單郵件協議(SMTP 協議),在使用過程中根據傳輸不同數據的需要選擇不同的協議。本系統主要采用了文件傳輸協議(FTP協議)和超文本傳輸協議(HTTP 協議)。
傳輸層主要時負責兩個端系統之間的可靠數據傳輸,為傳輸數據兩端的系統提供建立、維護和斷開連接等功能。在 TCP/IP 的傳輸層協議族中,一般使用可靠傳輸的傳輸控制協議(TCP)和不可靠傳輸的用戶數據報協議(UDP)。UDP 協議是不面向連接的,其無法保證數據傳輸的可靠性;但 TCP 協議是面向連接的,可保證可靠的數據傳輸。若傳輸層接收的是 UDP 報文,則根據 UDP 協議中對應的端口,分別送給不同的應用程序;若接收的是 TCP 報文,則需要根據 TCP 的狀態轉換過程圖進行處理。在本系統中采用 TCP 協議為傳輸層協議。
網絡層在數據鏈路層傳輸功能上,進一步處理網絡中發送方到目的地報文地址和路由信息等數據的通信,并且一般具備為傳輸層提供服務、組包和拆包、選擇路由等功能,目的是實現兩個數據傳輸端之間的數據透明傳送及相關的協議封裝。具體的過程是,網絡層在接收到數據鏈路層發送的數據包后,根據 IP 數據幀中的協議種類,首先去掉 IP 首部數據,然后形成 TCP、UDP 或是 ICMP報文后再對數據進行相應的處理。網絡層傳送數據采用IP 協議機制,它是 TCP/IP協議棧的核心。因此,本系統的網絡層們選用了IP協議和ARP 協議來實現 IP 地址到 MAC 物理地址的轉換。
鏈路層一般包括系統的網絡接口和設備驅動應用程序,目的是用于定義計算機如何連接網絡。數據鏈路層要實現數據傳輸功能必須要連接網絡,它主要負責接收和發送以太網數據幀,并將數據首部信息剝離,然后根據以太網數據幀的上層協議分別傳輸到上一層,完成將所傳輸的原始數據轉換成上一層能夠識別的邏輯幀。
物理層包括MII/GMII(介質獨立接口)子層,PCS(物理編碼子層),PMA(物理介質附加)子層,PMD(物理介質相關)子層以及MDI(媒介相關接口)子層。本系統的設計使用了MDI子層,即使用 RJ45 接口將設備接入網絡。
基于DSP的UUV目標探測通用系統設計完成后,需要對其進行功能性數據測試,測試的內容包括網口硬件測試、系統與上位機的連接測試,以及RS232設備的讀寫操作測試。其測試環境的搭建過程為:首先使用筆記本電腦作為以太網通信上位機,然后通過網線將上位機與被測板卡百兆網口相連,最后使用RS232調試串口觀測每一路的調試結果。
使用JTAG將測試例程,加載到FPGA中,再使用SDK軟件加載測試執行程序,通過調試串口觀測結果如圖11所示。

圖11 程序加載后,串口的觀測結果
以上結果,顯示百兆網PHY自協商正常,測試Server配置正常,目標端機IP:192.168.1.10,端口:7;再通過使用Ping命令,測試網絡通信是否正常,其測試結果如圖12所示。

圖12 網絡通信的測試結果
由圖12可知,百兆網口通信正常,至此,硬件測試完畢,進行上下位機軟件功能測試。
該上位機軟件通過TCP/IP協議與下位機進行交互,上位機作為客戶端,下位機作為服務端。下位機的IP和端口可在上位機可執行程序對應目錄下的配置文件中配置,實現上位機軟件啟動時主動連接下位機的操作。也可以在上位機軟件啟動后連接下位機失敗時,手動輸入下位機IP和端口進行連接。手動連接:點擊【網絡配置】—>【下位機】,在彈出窗體中輸入正確的IP和端口號,然后點擊連接,完成系統與上位機的連接測試,其操作界面和測試結果如圖13所示。

圖13 上、下位機連接的操作界面和測試結果
通過上位機,實現以太網到設備端的指令或數據映射,以設備地址定義不同RS232設備,通過對不同地址進行讀寫地址數據操作,實現對不同RS232設備的讀寫操作。
1)寫操作測試:在圖13中的“設備寫訪問”功能區中,向設備地址0x11寫入十進制數據5,后側顯示數據下發成功,返回成功標識,測試結果如圖14左側所示。
2)讀操作測試:在圖13中的“設備讀訪問”功能區中,向設備地址0x12發起讀請求,后側顯示數據下發成功,回讀十進制數據4660,測試結果如圖14右側所示。

圖14 寫和讀操作測試結果
本文設計和實現了基于DSP的UUV目標探測通用系統。首先考慮到DSP的高速數據處理能力,以及FPGA的高速接口數據交互能力,通過FPGA對其進行擴展。再結合FPGA自身的編程能力和模塊化的設計,實現了每一路RS232通信接口邏輯獨立化地設計。最后利用以太網完成上位機到探測系統指令或數據的映射,先給不同的RS232設備定義不同的地址,再通過對不同地址進行讀寫地址數據操作,從而實現了對UUV探測系統不同探測載荷及外圍設備在目標探測前和識別后的處理和控制。經測試實驗表明,該系統設計方案達到了對以太網傳感設備和不同RS232外圍傳感器快速處理和控制的目的,實現了基于DSP的UUV目標探測通用系統設計。