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