||
5000字!FPGA開(kāi)發(fā)必須知道的五件事
FPGA(Field Programmable Gate Array 現場(chǎng)可編程門(mén)陣列)是一種可以重構電路的芯片,是一種硬件可重構的體系結構。它是在PAL(可編程陣列邏輯)、GAL(通用陣列邏輯)等可編程器件的基礎上進(jìn)一步發(fā)展的產(chǎn)物,是作為專(zhuān)用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現的,既解決了定制電路的不足,又克服了原有可編程器件門(mén)電路數有限的缺點(diǎn)。
鑒于其可編輯,更靈活;產(chǎn)品上市時(shí)間短,節省了ASIC流片周期;避免一次性工程費用,用量較小時(shí)具有成本優(yōu)勢等特點(diǎn),FPGA現已廣泛應用于原型驗證、通信、汽車(chē)電子、工業(yè)控制、航空航天、數據中心等領(lǐng)域。
一、FPGA的技術(shù)發(fā)展歷程
FPGA技術(shù)從發(fā)明到現在已經(jīng)經(jīng)歷了三十多年的發(fā)展歷程,其核心價(jià)值是可編程性和靈活性。隨著(zhù)工藝技術(shù)、系統設計和應用創(chuàng )新的不斷進(jìn)步,FPGA技術(shù)也在不斷創(chuàng )新和集成,實(shí)現了從邏輯器件到系統平臺的轉變。
根據智慧芽研發(fā)情報庫生成的技術(shù)路線(xiàn)圖可見(jiàn),在近十多年間,隨著(zhù)5G、人工智能、云計算等新技術(shù)的快速發(fā)展和廣泛應用,對于FPGA等可編程邏輯器件的需求也越來(lái)越大,代表性技術(shù)詳見(jiàn)下圖:
為了解決系統設計問(wèn)題,FPGA越來(lái)越多地整合系統模塊:高速收發(fā)器、存儲器、DSP處理單元和完整處理器。同時(shí)還進(jìn)一步集成了重要控制功能:比特流加密與驗證、混合信號處理、電源與溫度監控以及電源管理等。這些特性在Xilinx的Zynq系列和Intel的Arria系列中得到了充分體現。同時(shí),器件也推動(dòng)了工具的發(fā)展。系統FPGA需要高效的系統編程語(yǔ)言,現可利用OpenCL和C語(yǔ)言以類(lèi)似軟件的流程來(lái)編程。FPGA正在越來(lái)越多地取代傳統上ASIC,在小批量、個(gè)性化的產(chǎn)品市場(chǎng)方面具有明顯優(yōu)勢。
二、FPGA的基本架構
自Xilinx公司于1984年發(fā)明了世界首款基于SRAM可編程技術(shù)的FPGA至今,FPGA的基本架構已經(jīng)確定,主要包括以下幾個(gè)部分:
可編程輸入輸出單元(IOB):IOB是FPGA與外部設備進(jìn)行信號交互的接口,可以支持多種電氣標準和協(xié)議,如LVCMOS、LVDS、PCIe等。IOB可以配置為輸入、輸出或雙向模式,可以實(shí)現信號緩沖、鎖存、延遲等功能。
可配置邏輯塊(CLB):CLB是FPGA實(shí)現邏輯功能的基本單元,每個(gè)CLB由兩個(gè)SLICE組成,每個(gè)SLICE包含4個(gè)LUT(查找表)、8個(gè)寄存器、3個(gè)MUX(多路選擇器)和一個(gè)CARRY4(進(jìn)位鏈)。LUT可以實(shí)現任意6輸入1輸出的布爾函數,也可以用作分布式RAM或移位寄存器。寄存器可以實(shí)現數據鎖存和同步功能。MUX可以將LUT擴展為7輸入或8輸入的選擇器。CARRY4可以實(shí)現高速的加法、減法、比較等算術(shù)運算。
嵌入式塊RAM(BRAM):BRAM是FPGA內部提供的大容量存儲資源,可以用作數據緩存、隊列、FIFO等應用。BRAM有18K和36K兩種規格,可以配置為不同的位寬和深度,支持單口或雙口模式,也可以級聯(lián)成更大的存儲空間。
布線(xiàn)資源:布線(xiàn)資源是FPGA內部連接各種資源的網(wǎng)絡(luò ),包括水平布線(xiàn)、垂直布線(xiàn)、長(cháng)線(xiàn)、超長(cháng)線(xiàn)等不同類(lèi)型和長(cháng)度的布線(xiàn)。布線(xiàn)資源通過(guò)開(kāi)關(guān)矩陣(switch matrix)進(jìn)行連接和分配,開(kāi)關(guān)矩陣由可編程的開(kāi)關(guān)組成,可以實(shí)現靈活的布線(xiàn)方案。
底層內嵌功能單元:底層內嵌功能單元是FPGA內部提供的一些特殊功能模塊,如數字時(shí)鐘管理(DCM)、相位鎖定環(huán)(PLL)、延遲鎖定環(huán)(DLL)、全局時(shí)鐘網(wǎng)絡(luò )(GCLK)、全局置位網(wǎng)絡(luò )(GRST)等。這些功能單元可以實(shí)現時(shí)鐘生成、分頻、相位調整、延遲補償、時(shí)鐘分配、復位分配等功能,提高了FPGA的性能和穩定性。
內嵌專(zhuān)用硬核:內嵌專(zhuān)用硬核是FPGA內部集成的一些專(zhuān)用功能模塊,如乘法器、除法器、DSP(數字信號處理器)、微處理器、PCIe控制器、以太網(wǎng)控制器等。這些硬核可以提供高效的計算和通信能力,降低了FPGA的邏輯資源消耗和功耗。
三、FPGA開(kāi)發(fā)流程
FPGA的開(kāi)發(fā)流程是利用EDA(Electronic Design Automation)開(kāi)發(fā)軟件和編程工具對FPGA芯片進(jìn)行開(kāi)發(fā)的過(guò)程,主要步驟如下:
1)功能定義/器件選型:這個(gè)步驟主要進(jìn)行方案驗證、系統設計和FPGA芯片選型等準備工作。根據任務(wù)要求,評估系統的指標和復雜度,對工作速度和芯片本身的資源、成本等方面進(jìn)行權衡,選擇合理的設計方案和合適的器件類(lèi)型。這個(gè)階段往往會(huì )花費大量的時(shí)間,這個(gè)階段之后一般已經(jīng)完成了系統建模,功能劃分,模塊劃分以及設計文檔的撰寫(xiě)等工作。
2)設計輸入:這個(gè)步驟是將劃分好的各功能模塊用硬件描述語(yǔ)言(HDL)表達出來(lái),常用的硬件描述語(yǔ)言有Verilog HDL和VHDL。以后的教程中我們主要講解如何使用Verilog HDL進(jìn)行FPGA設計。設計輸入方式有三種形式:IP核、原理圖、HDL。IP核是實(shí)現一定功能的模塊,可以形成一個(gè)項目。原理圖是一種最直接的描述方式,在可編程芯片發(fā)展的早期應用比較廣泛,它將所需的器件從元件庫中調出來(lái),畫(huà)出原理圖。HDL是利用文本描述設計,可以分為普通HDL和行為HDL。普通HDL有ABEL、CUR等 ,支持邏輯方程、真值表和狀態(tài)機等表達方式, 主要用于簡(jiǎn)單的小型設計 。而在中大型工程中,主要使用行為HDL,其主流語(yǔ)言是Verilog HDL和VHDL 。這兩種語(yǔ)言都是美國電氣與電子工程師協(xié)會(huì ) (IEEE)的標準,其共同的突出特點(diǎn)有:語(yǔ)言與芯片工藝無(wú)關(guān),利于自頂向下設計,便于模塊的劃分與移植,可移植性好,具有很強的邏輯描述和仿真功能,而且輸入效率很高。
3)功能仿真:這個(gè)步驟是在編譯之前對用戶(hù)所設計的電路進(jìn)行邏輯功能驗證,此時(shí)的仿真沒(méi)有延遲信息,僅對初步的功能進(jìn)行檢測。仿真前,要先利用波形編輯器和HDL等建立波形文件和測試向量 (即將所關(guān)心的輸入信號組合成序列),仿真結果將會(huì )生成報告文件和輸出信號波形,從中便可以觀(guān)察各個(gè)節點(diǎn)信號的變化。如果發(fā)現錯誤,則返回設計修改邏輯設計。
4)邏輯綜合:這個(gè)步驟是將高級抽象層次的語(yǔ)言描述轉化成較低層次的電路結構。也就是說(shuō)將硬件描述語(yǔ)言描述的電路邏輯轉化成與門(mén)、或門(mén)、非門(mén)、觸發(fā)器等基本邏輯單元的互連關(guān)系,也就是我們常說(shuō)的門(mén)級網(wǎng)表。綜合是創(chuàng )造性的轉化過(guò)程,它不但能翻譯我們的電路,還能夠優(yōu)化我們的電路,比如去除電路描述中冗余的電路結構,或者復用功能相同的電路結構。綜合的目標和要求可以通過(guò)約束文件來(lái)指定,比如時(shí)序約束、面積約束、功耗約束等。
5)前仿真:這個(gè)步驟也叫做綜合后仿真,仿真時(shí),把綜合生成的標準延時(shí)文件反標注到綜合仿真模型中去。因為綜合后只能體現基本的邏輯門(mén)之間的互連關(guān)系,并不是實(shí)物電路,沒(méi)有連線(xiàn)長(cháng)度信息,所以前仿真只能評估門(mén)延時(shí)帶來(lái)的影響,不能估計路徑延時(shí),前仿真結果和布線(xiàn)后實(shí)際情況還有一定的差距,并不十分準確。目前的綜合工具較為成熟,一般的設計可以省略這一步。但如果布局布線(xiàn)后發(fā)現電路功能與設計意圖不符,就需要回溯到前仿真來(lái)確定問(wèn)題所在。
6)實(shí)現與布局布線(xiàn):這個(gè)步驟是將綜合生成的邏輯網(wǎng)表配置到具體的FPGA芯片上,布局布線(xiàn)是其中最重要的過(guò)程。布局將邏輯網(wǎng)表中的硬件原語(yǔ)和底層單元合理地配置到芯片內部的固有硬件結構上,并且往往需要在速度最優(yōu)和面積最優(yōu)之間作出選擇。布線(xiàn)根據布局的拓撲結構,利用芯片內部的各種連線(xiàn)資源,合理正確地連接各個(gè)元件。布局布線(xiàn)后就可以進(jìn)行靜態(tài)時(shí)序分析了,靜態(tài)時(shí)序分析的方法是在布局布線(xiàn)后的實(shí)際電路中尋找寄存器和寄存器之間的最長(cháng)路徑延遲,通過(guò)最大延遲可以得出系統最大時(shí)鐘速率。
7)后仿真:這個(gè)步驟也稱(chēng)為時(shí)序仿真,是將布局布線(xiàn)的延時(shí)信息反標注到設計網(wǎng)表中來(lái)檢測有無(wú)時(shí)序違規現象(即不滿(mǎn)足時(shí)序約束條件或者器件固有的時(shí)序規則,如建立時(shí)間、保持時(shí)間等)。經(jīng)過(guò)布局布線(xiàn)后,門(mén)與門(mén)之間的連線(xiàn)長(cháng)度也確定了,所以后仿真包含的延遲信息最全,也最精確,能更好地反映芯片的實(shí)際工作情況。
8)板級仿真與驗證:這個(gè)步驟主要應用于高速電路設計中,對高速系統的信號完整性、電磁干擾等特征進(jìn)行分析。板級仿真需要利用專(zhuān)業(yè)的軟件工具和儀器設備來(lái)進(jìn)行。
9)芯片編程與調試:這個(gè)步驟是設計的最后一步,將EDA軟件產(chǎn)生的數據文件(位數據流文件)下載到FPGA芯片中,進(jìn)行實(shí)際的測試。芯片編程需要滿(mǎn)足一定的條件,如編程電壓、編程時(shí)序和編程算法等方面。調試時(shí),需要利用邏輯分析儀、示波器等儀器設備來(lái)觀(guān)察和分析芯片的工作狀態(tài),檢查是否有功能錯誤或性能問(wèn)題,如果有,就需要返回到前面的步驟進(jìn)行修改和優(yōu)化。
四、FPGA的設計方法和技巧
FPGA的設計方法有兩種:自上而下和自下而上。自上而下是指從整體功能出發(fā),逐步細化到各個(gè)模塊,再實(shí)現每個(gè)模塊的細節。這種方法有利于保持設計的一致性和完整性,但可能導致資源浪費和性能降低。自下而上是指從最基本的模塊開(kāi)始,逐步組合成復雜的功能,再整合到整體設計中。這種方法有利于優(yōu)化資源和性能,但可能導致設計的復雜度和難度增加。無(wú)論采用哪種方法,都需要注意以下幾個(gè)技巧:
1)遵循良好的編碼規范:編碼規范是指一套約定俗成的編寫(xiě)HDL代碼的規則和習慣,它可以提高代碼的可讀性、可維護性和可重用性,也可以避免一些常見(jiàn)的錯誤和問(wèn)題。一些常用的編碼規范有:使用有意義的變量名、注釋和空格;使用一致的縮進(jìn)和對齊方式;使用明確的賦值語(yǔ)句和運算符優(yōu)先級;使用合理的信號類(lèi)型和范圍;使用同步復位和時(shí)鐘邊沿觸發(fā)等。
2)使用層次化和模塊化的結構:層次化和模塊化是指將一個(gè)復雜的設計分解為若干個(gè)相對簡(jiǎn)單的子模塊,然后將這些子模塊按照一定的邏輯關(guān)系連接起來(lái),形成一個(gè)完整的設計。這樣做可以提高設計的清晰度和可管理性,也可以方便地進(jìn)行測試、修改和重用。一些常用的層次化和模塊化的方法有:使用頂層模塊、中間層模塊和底層模塊;使用總線(xiàn)、接口和協(xié)議;使用庫、包和組件等。
3)利用參數化和生成語(yǔ)句:參數化和生成語(yǔ)句是指使用一些特殊的語(yǔ)法或關(guān)鍵字來(lái)定義一些可變的參數或條件,然后根據這些參數或條件來(lái)生成不同的代碼或結構。這樣做可以提高代碼的靈活性和通用性,也可以減少代碼的冗余和重復。一些常用的參數化和生成語(yǔ)句有:使用generic、parameter、define等定義參數;使用for loop、generate、case等生成結構等。
4)避免時(shí)序冒險和組合邏輯回路:時(shí)序冒險是指由于信號在不同路徑上傳輸延遲不同,導致輸出信號在一個(gè)時(shí)鐘周期內發(fā)生多次跳變或錯誤變化的現象。組合邏輯回路是指由于信號在多個(gè)組合邏輯門(mén)之間形成環(huán)路,導致輸出信號依賴(lài)于自身狀態(tài)而不穩定或振蕩的現象。這些現象都會(huì )影響FPGA的正確性和穩定性,甚至導致硬件損壞或故障。一些常用的避免時(shí)序冒險和組合邏輯回路的方法有:使用同步設計原則;使用觸發(fā)器、鎖存器、寄存器等存儲元件;使用延遲器、濾波器、去抖動(dòng)器等處理元件;使用狀態(tài)機、計數器、定時(shí)器等控制元件等。
5)使用有效的調試手段:調試是指在設計過(guò)程中檢查和修正錯誤或問(wèn)題的過(guò)程,它是保證FPGA正確工作的重要環(huán)節。調試可以分為軟件調試和硬件調試兩種。軟件調試是指在仿真環(huán)境中使用一些工具或方法來(lái)觀(guān)察和分析FPGA的運行情況,找出潛在的錯誤或問(wèn)題。硬件調試是指在實(shí)際的硬件設備上使用一些工具或方法來(lái)觀(guān)察和分析FPGA的運行情況,找出實(shí)際的錯誤或問(wèn)題。一些常用的調試手段有:使用斷點(diǎn)、單步執行、變量監視、波形顯示等軟件工具;使用示波器、邏輯分析儀、信號發(fā)生器等硬件工具;使用測試平臺、測試向量、測試套件等測試方法等。
五、FPGA技術(shù)研發(fā)趨勢
如今,FPGA技術(shù)依然在不斷演進(jìn),主要從以下四個(gè)維度在不斷突破研發(fā)瓶頸。首先,制程技術(shù)的進(jìn)步:制程技術(shù)是影響FPGA性能、功耗、成本和可靠性的重要因素。隨著(zhù)制程技術(shù)的不斷發(fā)展,FPGA可以采用更小的晶體管尺寸,從而提高集成度、降低功耗、縮小芯片面積、提高運行速度和信號完整性。目前,主流的FPGA廠(chǎng)商如賽靈思(Xilinx)和英特爾(Intel)已經(jīng)推出了基于7nm和10nm工藝的FPGA產(chǎn)品,未來(lái)還有望進(jìn)入5nm甚至3nm工藝。
第二,系統級集成的需求:隨著(zhù)應用領(lǐng)域的不斷拓展,FPGA需要與其他類(lèi)型的芯片進(jìn)行系統級集成,以提供更強大和更靈活的功能。例如,在人工智能、云計算、邊緣計算等領(lǐng)域,FPGA需要與CPU、GPU、DSP、ASIC等芯片進(jìn)行協(xié)同計算,以提高性能和效率。為了實(shí)現系統級集成,FPGA需要采用更先進(jìn)的封裝技術(shù),如2.5D或3D堆疊技術(shù),以實(shí)現高密度、高帶寬和低延遲的互連。
第三,平臺化和可編程性的提升:為了滿(mǎn)足不同應用場(chǎng)景和用戶(hù)需求,FPGA需要提供更高層次的抽象和可編程性,以降低開(kāi)發(fā)門(mén)檻和時(shí)間。例如,賽靈思推出了ACAP(Adaptive Compute Acceleration Platform)平臺,它是一種新型的FPGA架構,可以通過(guò)軟件工具和庫來(lái)配置和優(yōu)化不同類(lèi)型的計算引擎,如邏輯、存儲、DSP、AI等。ACAP平臺可以實(shí)現更快速、更靈活、更智能的計算加速。
第四,新興應用領(lǐng)域的驅動(dòng):隨著(zhù)科技的進(jìn)步和社會(huì )的發(fā)展,FPGA面臨著(zhù)新興應用領(lǐng)域的挑戰和機遇。例如,在5G通信、物聯(lián)網(wǎng)、自動(dòng)駕駛、醫療設備等領(lǐng)域,FPGA需要提供更高的帶寬、更低的延遲、更強的安全性和更好的適應性。為了適應這些應用領(lǐng)域,FPGA需要不斷創(chuàng )新和優(yōu)化其架構、功能和接口。
身為FPGA開(kāi)發(fā)大軍的一員,希望本文給你帶來(lái)了或多或少的幫助。FPGA作為一種靈活、高效的數字電路解決方案,在各個(gè)領(lǐng)域發(fā)揮著(zhù)越來(lái)越重要的作用。未來(lái),我們可以期待更多更先進(jìn)的FPGA應用出現,為我們的生活帶來(lái)更多的改變和便利。