方海伊,豆海利,馮 源
(1.中國航空工業(yè)集團公司西安航空計算技術研究所,陜西 西安 710119;2.空軍工程大學 基礎部,陜西 西安 710051)
控制器局域網(Controller Area Network, CAN)作為一種現場總線,具有良好的通信速率和開放性,采用簡單的控制方式即可擴展總線并連接多個設備。目前CAN總線憑借其良好的性能優(yōu)勢已在汽車電子、工業(yè)控制以及航空航天等領域得到了廣泛應用。
CAN總線是一種總線型結構的通信網絡,總線上各個不同的CAN節(jié)點具有特定的功能,比如實現傳感器數據采集、設備控制、數據顯示等,但所有的CAN節(jié)點都具有大致相同的硬件接口和軟件結構,如圖1所示;并且總線上的所有節(jié)點均通過CAN接口電路連接到同一個通信電纜上。CAN節(jié)點接口通常由CAN總線收發(fā)器、CAN總線控制器以及接口控制器組成。這種結構實現的CAN控制可以采用不同的節(jié)點控制器,具有較強的靈活性,但是外圍系統(tǒng)組成較為復雜,通常需要配合DSP、CPLD等芯片實現通信功能[1],外圍電路控制過程也較為復雜。另外CAN節(jié)點接口還可以將CAN總線控制器集成于節(jié)點控制器中,利用節(jié)點控制器不僅實現了節(jié)點的應用程序,還實現了總線收發(fā)器控制的功能,這種結構的控制過程以及外圍電路組成較為簡單,減少了成本,但是對于控制器本身的功能、性能要求較高,且需要具有較好的通用性。
圖1 CAN節(jié)點結構
ZYNQ-7000系列芯片是一種由Xilinx公司研發(fā),在市場上具有代表性的Soc芯片,該系列芯片采用ARM+FPGA結構,將FPGA可編程邏輯和雙核ARM Cortex-A9集成在一顆芯片上。芯片的PS (Processing System)系統(tǒng)集成了兩個 ARM處理器、內部存儲器、外部存儲器接口和大量外設,可以實現總線節(jié)點設備的連接以及總線節(jié)點接口的控制功能;芯片的PL(Programmable Logic)系統(tǒng)則具有大量邏輯門電路、查找表以及觸發(fā)器,并配有諸多數字信號處理單元,大大提高了數據并行處理能力。芯片中高帶寬的AXI總線實現了PS與PL系統(tǒng)的互連。芯片的PS和PL可分開編程[2-3],均可獨立運行,并在上電或復位下啟動。同時為了方便用戶開發(fā),Xilinx 向用戶提供了許多集成的IP核,方便用戶快速開發(fā)使用,但是許多集成的IP核不能完全滿足用戶的多樣需求,因此在FPGA上還可以通過自定義IP核,即模塊化的設計方法實現用戶需求[4]。與使用ARM配合 FPGA的傳統(tǒng)系統(tǒng)[5]相比,使用ZYNQ-7000作為系統(tǒng)控制器,不僅可以有效降低開發(fā)成本,提高開發(fā)效率,還可以實現更好的性能和更高的集成度。
本文在Vivado開發(fā)平臺上基于ZYNQ-7020芯片進行系統(tǒng)設計。通過調用ZYNQ-7020中的PS系統(tǒng)、PS系統(tǒng)復位、AXI互連、PL系統(tǒng)IP核完成系統(tǒng)級建模。隨后,在ZYNQ-7020上PL系統(tǒng)中利用Verilog HDL完成模塊化設計,實現CAN總線控制器功能,并利用AXI IP核實現與PS之間的數據交互?;谝陨显O計,在ZYNQ-7020芯片的PS系統(tǒng)中可以設計完成CAN總線接口和串行通信接口的創(chuàng)建,使用SDK軟件編寫CAN總線驅動程序[6],實現系統(tǒng)應用層運行。
本文提出了一種基于ZYNQ-7000系列芯片的CAN總線節(jié)點接口的設計方案,在設計中采用ZYNQ-7020作為主控制器,利用其PS系統(tǒng)和PL系統(tǒng)協(xié)同工作并配合CAN總線收發(fā)器來實現CAN節(jié)點接口的控制?;赯YNQ-7000系列芯片的CAN總線節(jié)點接口的整體設計結構如圖2所示,總線節(jié)點接口主要由電源電路、時鐘電路、ZYNQ-7020外圍電路、CAN總線收發(fā)電路以及其他輔助電路組成。
圖2 基于ZYNQ-7020的CAN節(jié)點接口硬件結構
(1)電源電路主要由外部供電電路以及電壓轉換電路組成,采用開關電源實現外部高電壓轉換為低電壓,具有電源防抖、轉換效率高的特點。針對ZYNQ-7020芯片上PS系統(tǒng)以及PL系統(tǒng)電源單獨工作的特點,為其分別配置1.0 V、1.8 V、3.3 V供電電源實現內核供電、RAM供電、IO BANK供電。配合電源芯片的輸入端電源轉換啟動控制管腳以及輸出端狀態(tài)指示管腳,實現ZYNQ-7020芯片對于PS、PL的上電順序要求[7]。
(2)時鐘電路分別采用33.3 MHz和50 MHz的有源晶振為ZYNQ-7020芯片的PS系統(tǒng)和PL系統(tǒng)提供時鐘源。雖然PL系統(tǒng)的時鐘源也可以通過PS系統(tǒng)的PLL產生,但是為了實現PS系統(tǒng)與PL系統(tǒng)的獨立控制,向PL系統(tǒng)提供了單獨的時鐘源。
(3)ZYNQ電路主要由ZYNQ-7020芯片、配置電路以及外設組成。由圖2可知,ZYNQ-7020芯片作為主要的功能芯片,主要包括PS系統(tǒng)和PL系統(tǒng)兩部分:在PL中建立CAN總線控制器模塊,用于CAN收發(fā)器邏輯電平收發(fā)以及CAN協(xié)議解析,并利用AXI模塊實現與PS的通信,在PS中實現CAN總線驅動程序,利用AXI總線進行PL的控制和CAN總線數據的傳輸,具有集成度高、功能多樣、處理速度快的特點。ZYNQ-7020芯片配有QSPI FLASH芯片作為啟動設備存儲系統(tǒng)的啟動鏡像文件,包括PL的bit文件、ARM的應用程序代碼、用戶存儲數據等,并且采用DDR3存儲直接連接ZYNQ-7020芯片的PS系統(tǒng),為系統(tǒng)提供高速外部存儲設備。
(4)CAN總線收發(fā)電路的主要功能是采用CAN收發(fā)器芯片將CAN總線差分電平轉換為CAN控制器的邏輯電平,采用具有電氣隔離和電源隔離的收發(fā)模塊,具有體積小、隔離功能強、使用方便的特點。
從圖2中可以看出,ZYNQ-7020芯片是本次節(jié)點接口設計中的主要功能實現部件,主要包含的邏輯實現功能為:節(jié)點接口的CAN總線控制器功能、AXI通信模塊功能以及在PS系統(tǒng)中建立AXI通信功能。在PS系統(tǒng)中根據總線節(jié)點設備要求移植Linux操作系統(tǒng)、使用SDK軟件設計編寫CAN總線驅動軟件接口,作為驅動開發(fā)重點內容,不在本文中進行論述。
基于ZYNQ-7020的CAN節(jié)點設計中,AXI通信通路作為CAN總線數據鏈路層與應用層交互的主要途徑,是本次設計中的重要內容。AXI通信實現了PS系統(tǒng)與PL系統(tǒng)之間的通信功能,如圖3所示的設計框架,AXI通信主要用于CAN總線數據訪問、PL系統(tǒng)的控制即CAN總線控制器模塊的功能控制。
圖3 ZYNQ-7020上PS和PL系統(tǒng)通信方案設計框圖
AXI通信功能在PL設計中由AXI Interconnect模塊、AXI-DMA模塊[8]、AXIS-Data FIFO以及CAN控制參數配置模塊組合實現[9]。AXI Interconnect模塊主要用于主設備管理多個從設備,通過AXI Interconnect模塊可以擴展多個AXI-Lite總線接口,然后將多個從設備模塊分別與AXI-Lite總線接口連接,通過為這些模塊分配不同的偏移地址,主設備可以控制從設備。AXI-DMA是一種用于實現DMA功能的IP核,具有讀DDR存儲器和寫DDR存儲器兩個通道,當需要讀取數據時,AXI-4總線從PS的DDR內存中讀取數據,AXI流總線將數據傳輸到PL的FIFO緩沖區(qū);在寫入DDR存儲器的過程中,PL設備通過AXI流總線將數據發(fā)送到AXI-DMA,通過AXI-4總線將數據傳輸到PS。AXI-DMA IP核內部的寄存器可以通過AXI-Lite總線進行讀寫。AXIS-Data FIFO為AXI流總線的接口,用于數據存儲。CAN控制參數配置模塊的主要作用是將PS發(fā)送過來的命令和參數傳遞給PL的CAN控制器,同時關注PL中CAN控制器狀態(tài)以方便PS讀取。
當AXI通信用于PS對PL即CAN控制的邏輯功能控制時,這部分信號的控制不涉及高速數據傳輸,因此在PS中采用AXI-GP接口實現,通過AXI4總線傳輸至PL的AXI Interconnect模塊,將信號通過AXI-Lite總線寫入CAN控制參數配置模塊,從而進行FIFO控制、CAN控制器邏輯控制和復位、CAN總線數據接收和錯誤等信號的檢測。
另外,當AXI通信被用于CAN總線數據訪問時主要是通過調用ZYNQ的AXI-DMA IP核來實現的[10]。當PL接收到CAN總線數據后緩存在AXIS-Send FIFO中,將數據通過AXI流總線寫入AXI-DMA模塊,該IP核產生中斷信號通知PS處理器接收數據,PS響應中斷并通過AXI-HP接口將數據寫入PS的DDR。當PS向CAN總線發(fā)送數據時,PS處理器通過AXI-Lite總線將數據的信息寫入AXI-DMA IP,該IP核讀取DDR中的數據并將數據寫入AXIS-Recv FIFO中,再通過CAN總線控制器發(fā)送數據。
CAN節(jié)點接口的總線控制器是通過ZYNQ-7020芯片上的PL邏輯實現,利用Verilog HDL完成模塊化設計,圖4所示為PL系統(tǒng)上CAN總線控制器的設計框圖。從圖4可以看出,該邏輯主要包括信號控制接口、時鐘模塊、復位模塊、寄存控制管理、位時序同步、位流處理、錯誤管理、驗收濾波和收發(fā)緩沖等功能模塊組成。其中信號控制接口實現PS控制信號的接收和解析,并將控制信號下發(fā)給CAN總線控制器模塊。時鐘模塊和復位模塊根據PL系統(tǒng)中不同模塊控制性能產生相應的時鐘信號,并響應各類復位信號。參考SJA1000 CAN控制器功能將本次設計中CAN控制器的主要功能模塊再分為:寄存控制管理、位時序同步、位流處理、錯誤管理、驗收濾波和收發(fā)緩沖等模塊。
圖4 ZYNQ-7020上CAN總線控制器設計框圖
(1)寄存控制管理模塊:在CAN控制器中大量的工作需要通過寄存器實現,例如命令下發(fā)、邏輯狀態(tài)判斷、中斷信號標記、中斷使能、屏蔽掩碼記錄、錯誤計數等功能。因此在FPGA中根據有無、同步/異步復位方式的不同來定義四種寄存器的實現方式[11],并根據不同功能要求在寄存器控制模塊中進行每個寄存器的類型定義。在該模塊中配合以上寄存器實現CAN控制器的各模塊工作狀態(tài)管理和控制。
(2)位時序同步模塊:CAN總線作為一種異步串行通信總線,缺少時鐘線,因此在位流接收和處理中,控制器需要實時觀察總線狀態(tài),必須在接收到總線信號后立即產生位流同步信號,減小與總線的時鐘誤差以消除漏拍、錯拍現象,并且對于總線數據流的位填充位也進行時鐘信號軟同步。
(3)位流處理模塊:位流處理器是緩沖區(qū)與位時序同步模塊之間的控制數據流的模塊,根據位時序同步信號按時鐘節(jié)拍進行有效數據流采集和傳輸,根據CAN2.0協(xié)議執(zhí)行標志位檢測填充、位填充、仲裁、數據和信息提取填充,并檢測處理錯誤。對于沒有位填充錯誤、格式錯誤和CRC校驗錯誤的幀數據產生ACK響應字,并判斷接收節(jié)點是否產生ACK響應。
(4)錯誤管理模塊:該模塊中最重要的功能是實現CAN控制中采用的CRC循環(huán)冗余校驗方法。CRC校驗利用位流處理結果在發(fā)送數據時根據發(fā)送內容計算出CRC段數據并傳輸至位流處理模塊進行位填充和發(fā)送;對于接收到的位流數據,根據接收內容計算出一個CRC值并與接收的CRC段數據進行比較。若存在傳輸錯誤時,則向寄存器和總線通報錯誤消息并進行錯誤計數;同時該模塊根據其他模塊工作發(fā)生的格式錯誤、應答錯誤、位填充錯誤、位發(fā)送錯誤、CRC校驗錯誤等進行CAN錯誤幀管理。
(5)驗收濾波模塊:該模塊根據寄存器的屏蔽掩碼和驗收代碼設置,判斷CRC校驗正確的數據幀是否接收并存入接收緩沖器中。
(6)接收、發(fā)送緩沖模塊:兩模塊中分別存儲需要接收和發(fā)送的CAN總線數據,遵循FIFO的先入先出原則,并且通過AXI總線連接PS系統(tǒng)實現應用層CAN數據總線控制。
通過以上模塊設計實現CAN總線控制的功能邏輯,配合時鐘模塊以及控制信號完成CAN總線協(xié)議的解析和數據收發(fā)。完成所有設計后,通過 Vivado完成編譯并集成 CAN控制器IP核模塊。該模塊利用大量邏輯門電路實現,具有一定的通用性,可移植性好。
本文基于ZYNQ-7020芯片的ARM+FPGA架構進行CAN總線節(jié)點接口電路的設計實現。主要在Vivado開發(fā)平臺下調用ZYNQ-7020芯片的PL系統(tǒng)和PS系統(tǒng)實現CAN節(jié)點接口的數據鏈路層功能以及與應用層的交互。PL系統(tǒng)中利用邏輯器件完成CAN總線控制器的功能開發(fā),具有CAN總線協(xié)議解析以及數據收發(fā)能力。在PL系統(tǒng)和PS系統(tǒng)中分別設計開發(fā)了AXI通信功能,用于PL系統(tǒng)與PS系統(tǒng)的CAN總線數據訪問、PL系統(tǒng)中CAN總線控制器功能控制。通過有效地利用ZYNQ-7020芯片的PS系統(tǒng)建立Linux系統(tǒng),可運行多種CAN總線驅動接口軟件,實現與多種CAN節(jié)點設備的連接,具有一定的應用價值。本文提出的節(jié)點接口設計具有可擴展性良好、模塊體積較小且外圍接口豐富的特點,可滿足CAN節(jié)點用戶的個性化需求。