本書節選自小梅哥《SOC FPGA嵌入式設計和開發教程》第11章內容
在前面章節的內容中,針對SoC FPGA的開發流程,從修改Qsys系統配置、更新Quartus工程,到生成對應的板級支持鏡像(Preloader、U-Boot[A1] )、Linux應用編程控制這些外設,編譯linux內核,修改板級設備樹,使用linux驅動程序完成外設的控制等一系列工作的介紹,為讀者展示了使用SoCFPGA開發需要掌握的各種方法和思路。但是,作為一個高性能的異構芯片,如何將芯片上的FPGA和HPS兩者有機的結合起來,實現高性能的數據通信才是該芯片的應用重點。因此,本章將針對該部分內容進行細致的講解。
在含有HPS的SOC系統中,由于HPS中的ARM Cortex-A9使用的是AXI總線協議,其提供的與FPGA通信總線也是AXI總線。但是AXI總線和Avalon Memory Mapped總線在信號類型和時序上都有一定的差別,無法直接連接。HPS針對和FPGA的互聯通信,總共提供了3種形式的AXI總線協議,分別為用于FPGA主動向HPS發起高效數據傳輸操作的F2H_AXI_Slave總線,用于HPS主動向FPGA發起高效數據傳輸操作的H2F_AXI_Master總線,以及用于HPS主動向FPGA發起一些控制或小容量數據傳輸操作的H2F_LW_AXI_Master總線。
這三個橋都使用先進的微控制器總線架構(Advanced Microcontroller Bus Architecture),即AMBA。高性能可擴展接口(Advanced eXtensible Interface),即AXI協議,就是基于AMBA網絡互連架構的。
這些HPS-FPGA橋使得FPGA內核邏輯可以同HPS側的從設備邏輯進行通信,同時也可以使HPS側的邏輯能夠與FPGA側的從設備進行通信。例如,設計者可以在FPGA內核邏輯中添加額外的存儲器或者外設,然后HPS中的主機邏輯可以來獲取這些設備,當然,用戶也可以在FPGA側添加NIOS II 處理器,然后使用NIOS II的主機接口來獲取HPS側的存儲器或者外設。
下表為HPS-FPGA橋的一些特性:
特點 |
FPGA-to-HPS Bridge |
HPS-to-FPGA Bridge |
Lightweight HPS-to FPGA Bridge |
支持AMBA AXI3 接口協議 |
支持 |
支持 |
支持 |
實現時鐘域交互,管理FPGA內核邏輯時鐘域和HPS邏輯時鐘域的數據交互 |
支持 |
支持 |
支持 |
實現HPS邏輯和FPGA內核邏輯的數據位寬轉換 |
支持 |
支持 |
支持 |
允許在例化總線接口時配置接口的數據位寬 |
支持 |
支持 |
不支持 |
每個橋都包含一對主從接口對,其中一個接口導出到FPGA內核邏輯,而另一個接口導出到HPS邏輯。FPGA-to-HPS 橋引出了一個AXI Slave接口,用戶可以將其連接到FPGA側帶AXI Master或Avalon-MM Master接口的主機上,HPS-to-FPGA橋和 lightweight HPS-toFPGA橋引出了AXI Master接口,用戶用其連接FPGA內核邏輯中帶AXI Slave或Avalon-MM Slave的設備。
圖11.1–1展示了HPS-FPGA 橋與FPGA內核邏輯以及HPS的L3 互聯架構的關系,圖中每個主和從端口都標明了數據位寬,并通過括號備注的方式標明了每個端口的時鐘域。
圖11.1–1 HPS-FPGA橋與FPGA內核以及HPS的L3架構連接關系
HPS-to-FPGA 橋由HPS的L3主交互架構作為主機管理,lightweightHPS-to-FPGA 橋由連接在L3上的外設交換架構管理,FPGA-to-HPS 橋作為L3主交互架構的一個主機。從而使得FPGA內核中實現的任何主機都能夠獲取HPS中的大多數從設備。例如FPGA-to-HPS可以獲取Cortex-A9 MPU的加速器一致性接口(ACP) ,從而實現對SDRAM控制器的緩存一致性獲取。
對于HPS-to-FPGA和FPGA-to-HPS兩個高速橋,每個橋最高支持128-bit位寬。在HPS側邏輯中,每個橋最高可運行在200M的時鐘頻率下,數據位寬為固定的64bit,因此在不考慮輕量級橋的情況下,FPGA和HPS的總通信帶寬為64*2*200MHz=25600Mbps。
另外,Intel Cyclone V SoC FPGA還提供了一個FPGA到SDRAM的橋,該橋最高可提供4個獨立的讀寫端口和6個控制端口,支持可配置的32位、64位、128位和256位的數據位寬,適合于FPGA共享使用HPS側的高性能存儲器的應用場合。
在前面以AC501_SoC_GHRD工程為基礎的實驗中,我們重點講解了H2F_LW_AXI_Master橋上連接的外設的操作方式,包括使用虛擬地址映射的方式和Linux系統內核驅動的方式。H2F_LW_AXI_Master由HPS控制,作用于FPGA內核邏輯,該接口具有一個32位的固定數據寬度,作為FPGA內核邏輯的輔助的、低性能主接口。通過一個固定的寬度和較小地址空間,輕型橋接主要用于低帶寬流量的應用,例如對FPGA外設采用存儲器映射方式組織的寄存器的訪問。該方法可以分擔轉移高性能HPS-to-FPGA橋接的流量,并且可以改善CSR訪問延遲,提高整體系統性能。
H2F_AXI_Master橋為FPGA內核邏輯提供一個可配置寬度的、高性能主接口。該橋提供HPS中的各種主器件對FPGA中實現的邏輯、外設和存儲器的訪問,有效地址空間大小為960MB。使用時可以配置FPGA內核邏輯的橋接主接口以支持32、64或128位數據。
H2F_AXI_Master橋的位于HPS邏輯中的從端口數據位寬為64位。該橋能夠提供數據位寬適配和時鐘域交互邏輯,使得 FPGA 中的邏輯能夠工作在任意異步于 HPS的時鐘域。其中,HPS邏輯中的從端口時鐘為ARM L3的主時鐘,即l3_main_clk,該時鐘頻率默認為MPU時鐘頻率的1/4,當MPU時鐘頻率為800MHz時,該時鐘頻率為200MHz。因此該橋的理論總帶寬為64bit*200Mhz,即12800Mbps。H2F_AXI_Master橋常用于由HPS發起的HPS與FPGA側的存儲器進行大量的數據搬運工作,例如HPS從內存中高速搬運大量數據到FPGA側的SDRAM存儲器,或者HPS從FPGA側的SDRAM存儲器中讀取大量數據到內存中。
F2H_AXI_Slave橋提供一個FPGA內核邏輯對HPS可配置寬度的、高性能主接口,而對于HPS來說,則提供了一個受FPGA內核邏輯中的主機控制訪問HPS中外設的從接口。使用時可以配置FPGA內核邏輯的橋接主接口以支持32、64或128位數據。
F2H_AXI_Slave橋的位于HPS邏輯中的從端口數據位寬為固定的64位。該橋能夠提供數據位寬適配和時鐘域交互邏輯,使得 FPGA 中的邏輯能夠工作在任意異步于HPS的時鐘域。其中,HPS邏輯中的連接HPS的L3主端口時鐘與ARM L3的主時鐘相同,即l3_main_clk,該時鐘頻率默認為MPU時鐘頻率的1/4,當MPU時鐘頻率為800MHz時,該時鐘頻率為200MHz。因此該橋的理論總帶寬為64bit*200Mhz,即12800Mbps。F2H_AXI_Slave橋常用于由FPGA側邏輯發起的HPS與FPGA進行大量的數據搬運工作,例如FPGA從HPS內存中高速搬運大量數據到FPGA中(典型應用實例為FramerBuffer),或者由FPGA寫入大量數據到HPS中(典型應用為高速數據采集)。
為了支持Platform Designer中提供的所有使用Avalon Memory Mapped總線的IP能夠方便的連接到HPS上,Platform Designer具有Avalon和AXI總線間的自動轉換功能,我們在設計時,只需要將Avalon Memory Mapped總線信號連接到AXI信號總線上即可。至于如何完成兩者間的信號功能和時序的轉換,用戶無需關心,Platform Designer會自動生成相應的轉換邏輯。這對于一些已經使用NIOS II CPU開發了相應的系統和自定義IP的用戶來說,是一件非常方便的事情,用戶可以直接在HPS中按照原本NIOS II中的系統架構添加IP并連接好總線,就能實現相同的功能,同時,對于用戶自己開發的自定義IP,無需做任何修改就能直接用于SOC系統中,大大降低了系統移植的工作量。
得益于Platform Designer中提供的強大的Avalon-MM到AXI總線協議自動適配功能,用戶在編寫FPGA側邏輯時,可以直接使用易用的Avalon-MM總線進行設計,從而避開復雜的AXI總線協議。因此,作為一本講解SoC FPGA基本開發方法的書,本書也并未安排針對AXI總線協議的FPGA側邏輯設計的講解,所有FPGA側邏輯,無論是主接口還是從接口,都統一使用Avalon-MM總線協議實現。
更多內容,請關注小梅哥《SOC FPGA嵌入式設計和開發教程》一書相關章節。