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