FPGA的起源和發展
1985年Xilinx發布了全球首款FPGA芯片——XC2064。在當時那個年代,PC機才剛走出硅谷的實驗室進入商業市場,因特網還只是科學家和政府機構通信的神秘鏈路,無線電話還像磚頭一樣笨重。FPGA芯片在當時似乎并沒有什么用武之地。
早期的FPGA芯片只是用于膠合邏輯,用來連接一些功能復雜的大邏輯塊。不過,從膠合邏輯到算法邏輯再到數字信號處理、高速串行收發器和嵌入式處理器,FPGA已經從配角變成了主角。
FPGA在通信領域上有著極廣泛的應用,就拿現在很火熱的5G網絡來說,幾乎在5G基站里面的每一塊電路板都需要用到FPGA;還有在機器人學習中,FPGA在感知計算的場景下,因為FPGA的硬件并行,所以能同時處理的指令數遠遠大于CPU,根據加州大學洛杉磯分校的實驗結果,FPGA在感知計算場景下處理效率是CPU的30倍。以上兩個都是現在十分熱門的行業,都是十分需要FPGA的支持的。可以看出FPGA這個行業在現在還是很熱門的。并且這個行業的人才缺口也很大,歡迎各位加入FPGA這個大家庭!
FPGA的結構
想成為一名FPGA工程師,對FPGA的結構是必須要掌握的。FPGA芯片主要是:可編程I/O單元、基本可編程邏輯單元、完整的時鐘管理、嵌入塊式RAM、豐富的布線資源、內嵌的底層功能單元和內嵌專用硬件模塊這六部分組成。
基本可編輯邏輯單元
基本可編輯邏輯單元是FPGA可編程邏輯的主體FPGA一般是基于SRAM工藝。其基本可編程邏輯單元幾乎都是由查找表(LUT)和寄存器組成。FPGA內部的LUT一般為4輸入、主要完成純組合邏輯的功能。而內部寄存器結構相當靈活,可以配置為帶同步、異步復位或置位、時鐘使能的觸發器,也可以配置為鎖存器。FPGA一般依賴寄存器完成同步時序的邏輯設計。
比較經典的基本可編程邏輯單元的配置是一個寄存器和一個查找表。但不同廠商的寄存器和查找表的內部結構有一定差異,而且寄存器和查找表的組合模式也不同。主要的三個廠商的可編程邏輯結構為:
(1)Alerta的可編程邏輯單元通常被稱為LE(Logic Element,邏輯單元),由一個Register和一個LUT組成。而Altera的大多數FPGA又將10個LE有機組合起來,構成更大的邏輯功能單元——邏輯陣列模塊(LAB,Logic Array Block),LAB中除了LE還包含LE間的進位鏈、LAB控制信號、局部互連線資源、LUT級聯鏈、寄存器級聯鏈等連線和控制資源。
(2)Xilinx的可編程邏輯單元被稱為Slice,由上下兩部分組成。每部分都由一個Register和一個LUT組成,被稱為LC(Logic Cell,邏輯單元),兩個LC間有一些共用邏輯。可以完成LC之間的配合與級聯。
(3)Lattice的可編程邏輯單元叫PFU(Programmable Function Unit,可編程功能單元),由8個LUT和8—9個Register組成。
可編程IO單元
可編程IO單元通過軟件可以適配不同的電氣標準和物理特性。
內嵌RAM塊
FPGA的內嵌RAM塊可以靈活配置為單端口RAM(SPRAM,Single PortRAM),雙端口RAM(DPRAM,Double PortRAM),偽雙端口RAM(Pseudo DPRAM),CAM(Content Addressable Memory),FIFO(First Input First Output)等常用存儲器結構。
FPGA中沒有專用的ROM硬件資源,實現ROM的思路是對RAM賦予初值,并保持該初值。
CAM,即內容地址存儲器。CAM這種存儲器在其每個存儲單元都包含了一個內嵌的比較邏輯,寫入CAM的數據會和其內部存儲的每一個數據進行比較,并返回與端口相同的所有內部數據的地址。
總之,RAM是一種根據地址讀、寫數據的存儲單元,而CAM返回的是與端口數據相匹配的內部地址。
FPGA內部實現RAM、ROM、CAM、FIFO等存儲結構是基于內嵌RAM塊的,并根據需求自動生成相應的粘合邏輯(GlueLogic)以完成地址和片選等控制邏輯。
Xilinx常見的RAM塊大小是4Kbit和18Kbit兩種結構,LatTIce常用的RAM塊大小是9Kbit,Altera的RAM塊最為靈活,一些高端器件內部同時含有兩種RAM塊結構,分別是M9KRAM(9Kbit),M-144K(144Kbit)。
除了RAM外,Altera、Xilinx和LatTIce的FPGA還可以靈活的將LUT配置成RAM、ROM、FIFO等存儲結構,這種技術被稱為分布式RAM。
豐富的布線資源
布線資源連通FPGA內部所有單元,連線的長度和工藝決定了信號在連線上的驅動能力和傳輸速度。有以下3種布線資源可以利用。
(1)全局性的專用布線資源:用來完成器件內部的全局時鐘和全局復位置位的布線。
(2)長線資源:完成器件Bank間的一些高速信號和一些第二全局時鐘信號的布線。
(3)短線資源:完成基本邏輯單元之間的邏輯互聯和布線。
在基本邏輯單元內部還存在各式各樣的布線資源和專用時鐘、復位等控制信號線。
底層嵌入功能單元
通用程度較高的嵌入功能模塊,如PLL(Phase Locked Loop),DLL(Delay Locked Loop),DSP和CPU等。
Altera芯片集成是PLL,Xilinx芯片主要集成的是DLL,LatTlce的新型FPGA同時集成了PLL和DLL以適應不同需求。
Altera芯片的PLL模塊分為增強型PLL和快速PLL。
Xilinx芯片的DLL的模塊名稱為CLKDLL,在高端FPGA中CLKDLL的增強型模塊為DCM(Digital Clock Manager),數字時鐘管理模塊)。
內嵌專用硬核
內嵌專用硬核的通用性相對較弱,不是所有的FPGA器件都有硬核。
FPGA設計流程
講完了FPGA的結構,接下來說說FPGA的設計流程。FPGA是可編程芯片,所以FPGA的設計方法包括硬件設計和軟件設計兩部分。
硬件包括FPGA的芯片電路、存儲器、輸入輸出接口電路及其他設備,軟件即是相應的HDL程序等。FPGA的設計流程就是利用EDA開發軟件和編程工具對FPGA芯片進行開發的過程。
典型FPGA的開發流程一般包括包括功能定義/器件選型、設計輸入、功能仿真、綜合優化、綜合后仿真、實現、布線后仿真、板級仿真以及芯片編程與調試等主要步驟。
功能定義/器件選型
在FPGA設計項目開始之前,必須有系統功能的定義和模塊的劃分,另外就是要根據任務要求,如系統的功能和復雜度,對工作速度和器件本身的資源、成本、以及連線的可布性等方面進行權衡,選擇合適的設計方案和合適的器件類型。
一般使用自頂向下的辦法,把系統分成若干個基本單元,再把每個基本單元分為下一層次的基本單元,一直這樣做下去,直到能直接用EDA元件庫為止。
設計輸入
設計輸入是將所設計的系統或電路以開發軟件要求的某種形式標示出來并且輸給EDA工具的過程。
最常用的方法有硬件描述語言(HDL)和原理圖輸入方法等。原理圖輸入方式是一種最直接的描述方式,在可編程芯片發展的早期應用比較廣泛,它將所需的器件從元件庫中調出來,畫出原理圖。這種方法雖然直觀并易于仿真,但效率很低,且不易維護,不利于模塊構造和重用。更主要的缺點是可移植性差,當芯片升級后,所有的原理圖都需要作一定的改動。
目前,在實際開發中應用最廣的就是HDL語言輸入法,利用文本描述設計,可以分為普通HDL和行為HDL。普通HDL有ABEL、CUR等,支持邏輯方程、真值表和狀態機等表達方式,主要用于簡單的小型設計。
而在中大型工程中,主要使用行為HDL,其主流語言是Verilog HDL和VHDL。這兩種語言都是美國電氣與電子工程師協會(IEEE)的標準,其共同的突出特點有:語言與芯片工藝無關,利于自頂向下設計,便于模塊的劃分與移植,可移植性好,具有很強的邏輯描述和仿真功能,而且輸入效率很高。
除了這IEEE標準語言外,還有廠商自己的語言。也可以用HDL為主,原理圖為輔的混合設計方式,以發揮兩者的各自特色。
功能定義/器件選型
功能仿真也稱為前仿真。是在編譯之前對用戶所設計的電路進行邏輯功能驗證,此時的仿真沒有延遲信息,僅對初步的功能進行檢測。
仿真前,要先利用波形編輯器和HDL等建立波形文件和測試向量(即將所關心的輸入信號組合成序列),仿真結果將會生成報告文件和輸出信號波形,從中便可以觀察各個節點信號的變化。
如果發現錯誤,則返回設計修改邏輯設計。常用的工具有Model Tech公司的ModelSim、Sysnopsys公司的VCS和Cadence公司的NC-Verilog以及NC-VHDL等軟件。
功能定義/器件選型
所謂綜合就是將較高級抽象層次的描述轉化成較低層次的描述。綜合優化根據目標與要求優化所生成的邏輯連接,使層次設計平面化,供FPGA布局布線軟件進行實現。
就目前的層次來看,綜合優化(Synthesis)是指將設計輸入編譯成由與門、或門、非門、RAM、觸發器等基本邏輯單元組成的邏輯連接網表,而并非真實的門級電路。真實具體的門級電路需要利用FPGA制造商的布局布線功能,根據綜合后生成的標準門級結構網表來產生。為了能轉換成標準的門級結構網表,HDL程序的編寫必須符合特定綜合器所要求的風格。由于門級結構、RTL級的HDL程序的綜合是很成熟的技術,所有的綜合器都可以支持到這一級別的綜合。
常用的綜合工具有Synplicity公司的Synplify / Synplify Pro軟件以及各個FPGA廠家自己推出的綜合開發工具。
綜合后仿真
綜合后仿真檢查綜合結果是否和原設計一致。在仿真時,把綜合生成的標準延時文件反標注到綜合仿真模型中去,可以估計門延時帶來的影響。但這一步驟不能估計線延時,因此和布線后的實際情況還是有一定的差距,并不十分準確。
目前的綜合工具較為成熟,對于一般的設計可以省略這一步,但如果在布局布線后發現電路結構和設計意圖不符,則需要回溯到綜合仿真后來確認問題所在。在功能仿真中介紹的軟件工具一般都支持綜合后仿真。
實現與布局布線
布局布線可以理解為利用實現工具把邏輯映射到目標器件結構的資源中,決定邏輯最佳的布局,選擇邏輯與輸入輸出功能鏈接的布線通道進行連線,并產生相應文件;實現是將綜合生成的邏輯網表配置到具體的FPGA芯片上,布局布線是其中最重要的過程。
布局將邏輯網表中的硬件原語和底層單元合理的配置到芯片內部的固有硬件結構上,并且往往需要在速度最優和面積最優之間做出選擇。
布線根據布局的拓撲結構,利用芯片內部的各種連線資源,合理正確地連接各個元件。目前,FPGA結構非常復雜,特別是在有時序約束條件時,需要利用時序驅動的引擎進行布局布線。布線結束后,軟件會自動生成標高提供有關設計中各部分資源的使用情況。
由于只有FPGA芯片生產廠商對芯片結構最為了解,所以布局布線必須選擇芯片開發商提供的工具。
功能定義/器件選型
時序仿真也稱后仿真,是指將布局布線的延時信息反標注到設計網表中來檢測有無時序違規(即不滿足時序約束條件或器件固有的時序規則,如建立時間、保持時間等)現象。
時序仿真包含的延遲信息最全,也最精確,能較好的反映芯片的實際工作情況。由于芯片的內部延時不一樣,不同的布局布線方案也給延時帶來不同的影響。
因此在布局布線后,通過對系統和各個模塊進行時序仿真,分析其時序關系,估計系統性能,以及檢查和消除競爭冒險是非常有必要的。
板級仿真與驗證
板級仿真主要應用于高速電路設計中,對高速系統的信號完整、電磁干擾等特征進行分析,一般都以第三方工具進行仿真和驗證。
芯片編程與調試
設計的最后一步就是芯片編程與調試。芯片編程是指產生使用的數據文件(位數據流文件,Bitstream Generation),然后將編程數據下載到FPGA芯片中。其中,芯片編程需要滿足一定的條件,如編程電壓、編程時序和編程算法等方面。
邏輯分析儀(Logic Analyzer,LA)是FPGA設計的主要調試工具,但需要引出大量的測試管腳,而且LA價格昂貴。
目前,主流的FPGA芯片生產商都提供了內嵌的在線邏輯分析儀(如Xilinx ISE中的ChipScope、Altera Quartusll中的SignalTapll以及SignalProb)來解決上述矛盾,他們只需要占用芯片少量的邏輯資源,有很高的實用價值。
FPGA設計語言及平臺
在了解了大概的FPGA設計流程之后,設計語言及平臺也是FPGA工程師們必須掌握的東西。
FPGA用的是HDL語言,HDL的全稱是:Hardware Description Language,注意其中D代表的是Description而不是Design。這說明了HDL語言不是用來設計硬件的,僅僅只是用來描述硬件的。
描述這個詞精確的反映了HDL語言的本質,HDL語言是只不過是已知硬件電路的文本表現形式而已,只是將以后的電路用文本的形式描述出來。
在學習HDL時首先要了解的是HDL的可綜合性問題。硬件設計時分幾個層次,每個層次都需要設計。最高層是算法級、向下依次是體系結構級、寄存器傳輸級、門級、物理版圖級。
使用HDL的好處就是我們已經設計好了一個寄存器傳輸級的電路,那么用HDL描述以后轉化為文本形式,剩下的向更低層轉換的時候就可以交給EDA去做了,這就大大降低了工作量,這就是可綜合的概念。也就是在這一層上對硬件單元進行描述可以被EDA工具理解并轉化為更低層的電路。
在編寫或閱讀HDL語言,尤其是可綜合的HDL,應該看到的是語言背后所對應的硬件電路結構。語法方面,HDL語法掌握貴在精,不在多。30%的基本HDL語句可以完成95%以上的電路設計,很多生僻語句不能被所有的綜合軟件支持,在程序移植或者更換平臺時,容易產生兼容性問題,也不利于他人閱讀和修改。建議多用心鉆研常用語句,理解那些語句的含義。
HDL主要有VHDL和Verilog兩種,目前最流行的是Verilog。
VHDL主要用于描述數字系統的結構,行為,功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式和描述風格與句法是十分類似于一般的計算機高級語言。VHDL的程序結構特點是將一項工程設計,或稱設計實體(可以是一個元件,一個電路模塊或一個系統)分成外部(或稱可視部分,及端口)和內部(或稱不可視部分),既涉及實體的內部功能和算法完成部分。在對一個設計實體定義了外部界面后,一旦其內部開發完成后,其他的設計就可以直接調用這個實體。這種將設計實體分成內外部分的概念是VHDL系統設計的基本點。
Verilog就是在用用最廣泛的C語言的基礎上發展起來的一種件描述語言Verilog的最大特點就是易學易用,如果有C語言的編程經驗,可以在一個較短的時間內很快的學習和掌握,因而可以把Verilog內容安排在與ASIC設計等相關課程內部進行講授,由于HDL語言本身是專門面向硬件與系統設計的,這樣的安排可以使學習者同時獲得設計實際電路的經驗。與之相比,VHDL的學習要困難一些。但Verilog HDL較自由的語法,也容易造成初學者犯一些錯誤,這一點要注意。
編輯:hfy
-
FPGA
+關注
關注
1630文章
21761瀏覽量
604385 -
工程師
+關注
關注
59文章
1571瀏覽量
68563 -
可編輯邏輯
+關注
關注
0文章
5瀏覽量
7091
發布評論請先 登錄
相關推薦
評論