新書預告
由小梅哥編寫,Intel FPGA大學計劃經理推薦,駿龍科技大力支持的基于Intel SoC FPGA 器件的設計和開發教程已經上線預售,京東天貓均已上架,歡迎小伙伴圍觀。
得益于Intel SoC FPGA差異化的器件結構設計,當設計者掌握了其中一種器件的開發方法后,即可類比應用到其他系列的器件上。在滿足設計需求的同時,合理選擇功耗、成本和性能平衡的器件應用到實際系統中。作為SoC FPGA家族中功耗和成本最具優勢的系列,掌握Cyclone V SoC FPGA的開發方法,不僅可以熟悉整個SoC FPGA系列器件的開發流程,還可以學有所用。很多沒有實際高端應用需求的讀者,也能夠將Cyclone V SoC FPGA作為一個簡單的ARM+FPGA二合一的產品進行使用,因此本書以Cyclone V SoC FPGA器件為基礎進行講解。
Intel Cyclone VSoC FPGA是英特爾FPGA部門(原Altera)于2013年發布的一款在單一芯片上集成了雙核的ARM Cortex-A9處理器和現場可編程邏輯門陣列(FPGA)的新型SoC芯片。相較于傳統的僅有ARM處理器或FPGA的嵌入式芯片,Intel Cyclone V SoC FPGA既擁有ARM處理器靈活高效的數據運算和事務處理能力,又擁有FPGA的高速并行數據處理優勢。同時,基于兩者獨特的片上互聯結構,設計者在使用時可以將FPGA上的通用邏輯資源經過配置,映射為ARM處理器的一個或多個具有特定功能的外設,并通過高達128位位寬的AXI高速總線進行通信以完成控制命令和高速數據的交互。
在SoC FPGA技術推出之前,各大FPGA廠家已經推廣了十多年的SOPC技術。從架構角度來說,SOPC和SoC FPGA是統一的,都是使用FPGA和CPU共同完成系統的設計。但是與SoC FPGA不相同的是,SOPC是在單純的FPGA芯片上使用FPGA的可編程邏輯資源和嵌入式存儲器資源搭建一個軟核CPU系統,由該軟核CPU實現所需處理器的完整功能,該CPU是由FPGA通用邏輯資源和存儲器通過配置實現的,其本質依舊只是一個復雜的FPGA設計模塊。
得益于FPGA的現場可配置特性,使用FPGA的通用邏輯資源搭建的CPU,在結構資源上具有一定的靈活性。用戶可以根據自己的需求對CPU進行定制裁剪,增加一些專用功能,例如除法或浮點運算單元,用于提升CPU在某些專用運算方面的性能。或者刪除一些在系統中使用不到的功能,以節約邏輯資源。另外用戶也可以根據自己的實際需求,為CPU添加各種標準或定制的外設,例如UART,SPI,I2C等標準接口外設,或者編寫各種專用的外設,然后連接到CPU總線上,由CPU進行控制,以實現軟硬件的協同工作。基于該結構的設計在保證系統性能的同時,增加了系統的靈活性。另外,如果單個軟核CPU無法滿足用戶需求,則可以添加多個CPU軟核,搭建多核系統,通過多核CPU協同工作,讓系統擁有更加靈活便捷的控制和運算能力。
但是,由于CPU是使用FPGA的通用邏輯資源搭建的,所以相較使用經過布局布線優化的硬核處理器來說,軟核處理器夠運行的最高時鐘主頻要低一些,而且搭建軟核CPU也會消耗較多的FPGA邏輯資源以及片上存儲器資源。因此SOPC方案僅適用于對處理器整體性能要求不高的應用,例如整個系統的初始化配置、人機交互、多個功能模塊間的協調控制等方面。
從架構的角度來說,SOPC和SoC FPGA是統一的,都是由FPGA和處理器組成。在SoC FPGA 中,嵌入的是ARM公司32位的Cortex-A9硬核處理器,簡稱HPS(Hardware Processor System)。而SOPC技術中,嵌入的是由Intel自己開發的32位NIOS II 軟核處理器,兩者指令集與處理器性能均有差異。Cortex-A9硬核處理器性能遠遠高于NIOS II 軟核處理器。
Cyclone V SoCFPGA 片上的HPS部分,不僅集成了雙核的Cortex-A9硬核處理器,還集成了各種高性能外設,如MMU、DDR3控制器、NAND FLASH控制器等,有這些外設,HPS部分就可以運行成熟的Linux操作系統,提供統一的系統API,降低開發者的軟件開發難度。而NIOS II軟核CPU雖然可以通過配置,用邏輯資源來搭建相應的控制器以支持相應功能,但是從性能和開發難度上來說,無法與之媲美。因此,采用基于SoC FPGA架構進行設計開發是比較好的選擇。
此外,雖然SoC FPGA芯片上既包含了有ARM,又包含了有FPGA,但是兩者一定程度上是相互獨立的,SoC芯片上的ARM處理器核并非是包含于FPGA邏輯單元內部的,而是與FPGA一同封裝到同一個芯片中,JTAG接口、電源引腳和外設的接口引腳都是獨立的。因此,如果使用SoC FPGA芯片進行設計,即使不用片上的ARM處理器,ARM處理器部分占用的芯片資源也無法釋放出來,不能用作通用的FPGA資源。而SOPC則是使用FPGA通用邏輯和存儲器資源搭建的CPU,當不使用CPU時,CPU占用的資源可以被釋放,重新用作通用FPGA資源。
嵌入式處理器開發人員面對的一個最大挑戰就是如何選擇一個滿足應用要求的處理器。現在已有數百種嵌入式處理器,每種處理器都具備一組不同的外設、存儲器、接口和性能特性,用戶很難做出一個合理的選擇:要么為了匹配實際應用所需的外設和接口要求而不得不選擇在某些性能上多余的處理器;要么為了保持成本的需求而達不到原先預計的理想方案。
在SoC FPGA架構出現之前,一般的嵌入式系統通常使用各種處理器或單片機作為系統核心,如基于ARM架構的CPU、基于因特爾X86架構的CPU、基于IBM PowerPC架構的CPU等。這些處理器的最大局限在于其芯片上的外設數量是確定的,一旦選定一款特定的處理器,則其本身能夠提供的各種功能也就確定了,例如選擇S3C2410這款處理器,則該芯片本身有且僅有3個UART串口,當系統所需的串口數量大于3個時,不得不采用另外的方法來擴展實現,例如使用各種串口擴展芯片。另外,由于這些處理器芯片片上外設功能都是固定的,僅支持在一定程度上設置其工作模式,所以無法實現非常靈活的個性化定制,例如S3C2410處理器的片上UART控制器帶有16個字節的FIFO緩沖,但是在某些大數據量的應用中,希望有更大容量的FIFO來滿足功能開發需求,則片上的UART控制器不能完全滿足要求,只能通過軟件的方式處理。
由于SoC FPGA由于芯片上包含現場可編程邏輯門陣列,可以根據實際應用需求設計相應的邏輯電路,如帶有256個字節的FIFO的UART控制器。得益于SoC FPGA芯片上FPGA和HPS部分獨特的高速互聯架構,FPGA側設計的功能電路可以直接連接到HPS的總線上,從而映射為HPS的一個外設,由HPS對其進行讀/寫操作,該操作就像處理器操作本身片上含有的外設一樣簡單方便。
相較于傳統的硬件功能固定的處理器,SoC FPGA能夠突破硬件功能的限制,實現定制化的片上系統。
FPGA作為一種可以隨時更改其實現的邏輯電路功能的器件,在高速并行數據處理方面有天然的優勢。由于FPGA實現的是硬件邏輯功能,其執行效率相較于使用程序指令實現功能的處理器來說要高很多,例如執行3個數據的乘加運算,FPGA可以使用兩個乘法器和一個加法器,在一個時鐘周期內完成運算并輸出結果,而CPU則可能需要將將該操作拆分成1條乘加指令和1條乘法指令,即使高性能的CPU,也需要2個指令周期才能完成該操作。同時,FPGA也可以利用功能復制的方式,在一個芯片上實現大量相同的功能,例如設計好一個高速數據采集+FIR數字濾波功能模塊,然后可以直接將其例化多次,實現一個高速多路數據采集處理系統。
然而,單獨的FPGA設計的系統也有其不足之處,由于FPGA實現功能都是通過功能固定的邏輯電路實現的,那么當應用中需要靈活的控制和人機交互或者復雜的以太網協議通信時,使用FPGA實現就會有較大的難度,即使使用復雜的狀態機能夠勉強實現功能,也面臨著功能固定、修改難度大的問題。例如在上述多路采集系統之中,當需要將多路采集到的數據在液晶顯示屏上繪制為波形,或者使用TCP/IP協議傳輸到遠端服務器時,單純的FPGA就難以勝任了,而ARM處理器,尤其是運行了嵌入式操作系統的ARM處理器,在圖形界面顯示和網絡傳輸方面有較大的優勢,如果將FPGA實現的多路高速數據采集系統的采集結果交給ARM處理器來實現波形顯示或者網絡傳輸,那么只需要簡單的軟件編程即可實現。
SoC FPGA作為一種在單一芯片上集成了FPGA和高性能處理器的新型芯片架構,即擁有FPGA高速并行處理和定制靈活的優勢,又擁有ARM處理器實現靈活控制、圖形界面顯示和網絡傳輸方面的優勢。而且,這兩者在芯片上并不是相互獨立的存在,而是通過片上的高速互聯架構有機的連接到了一起。FPGA采集的數據可以通過F2HBridge直接寫入HPS側的存儲器中,然后由HPS讀取數據,使用高級的圖形界面編程工具,例如Mini GUI或者Qt來設計圖形界面并顯示波形,也可以使用Web Server網絡服務器將數據組織起來并傳遞給遠端計算機接收。
前文介紹了處理器在靈活控制和用戶界面、網絡傳輸方面的優勢,也介紹了FPGA在高速并行處理方面的優勢,同時還介紹了基于FPGA和軟核處理器協同工作的SOPC技術。綜上可知,處理器和FPGA協同工作是比較理想的方案,但是由于軟核在性能上還是有所欠缺,且實現一些特定的功能不如MCU或處理器具有性價比,因此,相較于軟核實現方案,有相當一部分的技術人員更傾向于選擇使用獨立的處理器加FPGA的方案。例如低端領域使用Cortex-M系列單片機加FPGA,中端應用使用Cortex-A系列處理器加FPGA,高端領域使用X86 CPU甚至Xeon系列處理器加FPGA。這些架構,從一定程度上來講確實有很大的優勢,例如性價比,開發的便捷性等。但是,因為使用了獨立器件,所以電路板設計相對復雜一點。另外,除了高端CPU能夠使用PCIe這種高速通信接口以外,常見的Cortex-M系列單片機和FPGA連接時,相互間的通信速率會有較大的限制,首先,是兩者間的通信數據線受硬件電路板限制,一般不超過32位寬度,其次,就是器件間使用高位寬的并行總線,存在競爭冒險的情況,因此數據線翻轉速率有較大的限制,通信頻率無法做到很高。這兩方因素的共同限制了FPGA和處理器之間的通信帶寬。而SoCFPGA使用的是片上集成的方式,在同一個芯片上集成FPGA和HPS系統,兩者之間設計了高達128位數據的位寬,運行頻率高達200MHz的通信總線,為兩者通信提供了較高的數據帶寬,大大提高了兩者的通信帶寬和通信效率。
采用ARM+FPGA集成架構的SoC FPGA芯片,用戶將不會局限于預先制造的處理器技術,而是根據自己的要求定制處理器,按照需要選擇合適的外設、存儲器和接口。此外,用戶還可以輕松集成自己專有的功能(如DSP,用戶邏輯),創建一款“完美”的處理器,如圖 1.2–1所示,使用戶的設計具有獨特的競爭優勢。
圖 1.2–1SoC簡化系統硬件設計
用戶所需要的嵌入式設備主控制器應該能夠滿足當前和今后的設計功能及性能需求。由于發展具有不確定性,因此,設計人員必須能夠更改其設計,例如為處理器加入新的功能電路,定制硬件加速器,或者加入協處理器,以達到新的性能目標,而基于SoC FPGA的系統能夠滿足以上要求。
采用SoC FPGA芯片,用戶不僅可以使用ARM Cortex-A9處理器的高性能運算和事務處理能力,還可以根據需要定制功能。在單個SoC FPGA芯片中實現高性能處理器、外設、存儲器和I/O接口功能,降低用戶的系統總體成本。
開發人員希望能快速將產品推向市場并保持一個較長的產品生命周期,避免更新換代。基于SoC FPGA的系統在以下幾個方面可以幫助用戶實現此目標:
1 縮短產品的上市時間,FPGA可編程的特性使其具有最快的產品上市速度。許多設計通過簡單的修改都可以在FPGA上快速實現。ARM Cortex-A9處理器能夠運行成熟的Linux操作系統,基于Linux操作系統,用戶能夠非常簡單高效地編寫Linux應用程序,加快軟件開發速度,縮短軟件開發周期。而系統的靈活性和快速上市的特性源于Intel提供的完整的開發套件、眾多的參考設計、強大的硬件開發工具(Platform Designer)和軟件開發工具(SoC EDS套件)。用戶可以借助廠商提供的參考設計和易用的開發工具,在幾個小時內就完成自己的設計原型。
2 建立有競爭性的優勢,維持一個基于通用硬件平臺的產品的競爭優勢是非常困難的。而SoC FPGA器件,能夠充分發揮FPGA的可編程特性,設計獨有的硬件加速和協處理邏輯,與ARM處理器協同工作。具備硬件加速,定制的、可裁剪的外設SoC系統,將更具競爭優勢。
3 延長了產品的生存時間,使用SoC FPGA器件的產品的獨特優勢能夠對硬件進行升級。即使產品已經交付給客戶,仍可以定期升級。這些特性可以解決很多問題:
延長產品的生存時間,隨著時間的增加,可以不斷將新的特性添加到硬件中。
減小由于標準的制定和改變而帶來的硬件上的風險。
簡化了硬件缺陷的修復和排除。