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