作者:郝旭帥??校對:陸輝
大俠好,歡迎來到FPGA技術(shù)江湖,江湖偌大,相見即是緣分。大俠可以關(guān)注FPGA技術(shù)江湖,在“闖蕩江湖”、"行俠仗義"欄里獲取其他感興趣的資源,或者一起煮酒言歡。
大俠好,歡迎來到FPGA技術(shù)江湖。本系列將帶來FPGA的系統(tǒng)性學習,從最基本的數(shù)字電路基礎開始,最詳細操作步驟,最直白的言語描述,手把手的“傻瓜式”講解,讓電子、信息、通信類專業(yè)學生、初入職場小白及打算進階提升的職業(yè)開發(fā)者都可以有系統(tǒng)性學習的機會。
系統(tǒng)性的掌握技術(shù)開發(fā)以及相關(guān)要求,對個人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對大家有所幫助。后續(xù)會陸續(xù)更新 Xilinx 的 Vivado、ISE 及相關(guān)操作軟件的開發(fā)的相關(guān)內(nèi)容,學習FPGA設計方法及設計思想的同時,實操結(jié)合各類操作軟件,會讓你在技術(shù)學習道路上無比的順暢,告別技術(shù)學習小BUG卡破腦殼,告別目前忽悠性的培訓誘導,真正的去學習去實戰(zhàn)應用,這種快樂試試你就會懂的。話不多說,上貨。
FPGA芯片簡介
在介紹FPGA芯片之前,首先介紹一下等效電路。
先解釋一下“等效”。
等效是指效用相同。通俗的解釋就是不關(guān)心過程,結(jié)果是相同的。
圖1 :行走路徑圖
舉例說明:小明現(xiàn)在在A點,想要到C點去。從圖1中我們簡單分析出,可以是A點 —> B點 —> C點,也可以A點 —> D點 —> C點。如果小明不嫌棄累的話,也可以A點 —> B點 —> A點 —> D點 —> C點。在我們不考慮不過程的情況下,只考慮最后小明的位置,那么無論哪種方案,最終的結(jié)果都是相同的。
在做電路的設計和分析的時候,我們也經(jīng)常引入等效的概念,來解決復雜的問題。例如:諾頓定理(Nortons ?theorem)和戴維南定理(Thevenin's ?theorem)。在這里這兩個定理不做過多介紹,有興趣的讀者可以自行查詢。
黑盒測試也稱功能測試,它是通過測試來檢測每個功能是否都能正常使用。在測試中,把程序看作一個不能打開的黑盒子,在完全不考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部特性的情況下,在程序接口進行測試,它只檢查程序功能是否按照需求規(guī)格說明書的規(guī)定正常使用,程序是否能適當?shù)亟邮蛰斎霐?shù)據(jù)而產(chǎn)生正確的輸出信息。黑盒測試著眼于程序外部結(jié)構(gòu),不考慮內(nèi)部邏輯結(jié)構(gòu),主要針對軟件界面和軟件功能進行測試。
黑盒測試是以用戶的角度,從輸入數(shù)據(jù)與輸出數(shù)據(jù)的對應關(guān)系出發(fā)進行測試的。很明顯,如果外部特性本身設計有問題或規(guī)格說明的規(guī)定有誤,用黑盒測試方法是發(fā)現(xiàn)不了的。
圖2 :某數(shù)字電路模型
已知圖2-1所示數(shù)字電路為組合邏輯,經(jīng)過測試后,得出如下功能表(真值表)。
圖3 :功能表
根據(jù)對功能表的分析,可以認定圖2所示數(shù)字電路完成了二輸入與門的功能。那這個電路里面一定是一個二輸入與門嗎?答案是:不一定。
圖4 :利用兩個與非門構(gòu)成的與門
利用兩個與非門按照圖2-4的方式連接,就可以構(gòu)成一個“與門”。所以我們只能說圖2所示數(shù)字電路只是完成了二輸入與門的功能,不能說明內(nèi)部就是一個二輸入的與門;或者說圖2所示數(shù)字電路等效為二輸入與門。
在數(shù)字組合邏輯電路設計時,給出真值表后,容易得出一個布爾表達式。布爾表達式我們可以化簡,化簡的每個階段,我們都可以做出對應的電路圖。那么這些電路都是等效電路,只是電路延遲可能會有細微的差距。
在學習數(shù)字電路基礎時,布爾表達式化簡完后,經(jīng)常讓我們化簡為與非的形式,也就是說最后的電路都要用與非門來實現(xiàn)?這件事情怎么證明呢?
基本邏輯的門電路有很多,例如:與門、非門、或門、與非門、異或門、或非門等等。但是最最基本的門電路只有三種:與門、非門、或門,其他的門電路或者復雜電路都可以由這三種基本電路所構(gòu)成。只要證明與非門可以實現(xiàn)這三種邏輯門的功能就可以證明與非門可以實現(xiàn)所有的電路功能。
在圖4中已經(jīng)證明與非門可以實現(xiàn)與門。下面給出與非門實現(xiàn)或門(圖5)和與非門實現(xiàn)非門(圖6)。
圖5 :利用三個與非門構(gòu)成的或門
圖6 :利用一個與非門構(gòu)成的非門
通過之前的敘述可以證明,與非門可以實現(xiàn)任何數(shù)字邏輯。
所有的數(shù)字組合邏輯的功能,都可以用一個真值表來確定,我們利用一些方法,將真值表對應的邏輯功能,用電路的方式實現(xiàn)出來,就組成了數(shù)字電路。我們回過頭來,看一下真值表,我們可以把真值表看做是一個查找表,怎么查找呢?把輸入的電平值作為查表的依據(jù),然后得出對應的結(jié)果值即可。
在做設計時,經(jīng)常會需要一個多路選擇器,下面我們以二選一多路選擇器為例。
圖7 :二選一多路選擇器示意圖
當S=0時,Y=A;當S=1時,Y=B。根據(jù)已知功能,列出真值表(圖2-8)。
圖8 :二選一多路選擇器的真值表
根據(jù)數(shù)字組合邏輯電路的設計方法,首先做出布爾表達式,經(jīng)過化簡,得出簡化后的布爾表達式,最后做出電路。
如果需要一個二選一多路選擇器的等效電路,不關(guān)心內(nèi)部是如何實現(xiàn)的。那么我們設計時,只需要考慮實現(xiàn)真值表的功能即可。當我們把真值表看做查找表時,A、B、S都是輸入,任意指定一組值,都可以得出后面對應的Y即可。
下面解釋一種器件:存儲器。
存儲器(Memory)是現(xiàn)代信息技術(shù)中用于保存信息的記憶設備。它根據(jù)控制器指定的位置存入和取出信息。
圖9 :存儲器模型
存儲器中被分為了很多“小格子”,每一個“小格子”里面都可以放下很多的二進制數(shù)碼。每個小格子都會有自己獨特的標識,就像我們的門牌號一樣,每個屋都是不同的。邏輯功能是當外部輸入一個“門牌號”,對應的“小格子”里面的二進制數(shù)碼就會輸出。
存儲器中的“小格子”的數(shù)量,在制造時,就已經(jīng)確定?!靶「褡印钡臄?shù)量確定了,那么“門牌號”的形勢也就被確定了。例:我們有100個房間,我們只有兩個十進制的數(shù)碼就可以表示了,00至99。在存儲器中,“門牌號”也只能用二進制數(shù)來表示,例如:有4個“小格子”,那么“門牌號”就要用兩個二進制碼來表示,00~11。每個“小格子”里面存放的二進制數(shù)的個數(shù),在制造時,也就確定好了。
通常我們把“門牌號”稱為地址,“小格子”稱為單個地址的存儲空間,每個“小格子”能放下的二進制數(shù)碼的個數(shù)稱為“存儲器的存儲位寬”。
制作一個擁有8個地址,單個地址空間為1個二進制數(shù)碼的存儲器。此時,地址碼應該有三位,每個地址對應的存儲二進制數(shù)碼 的個數(shù)為1個。要求:000地址中,放入0;001地址中,放入0;010地址中,放入1;011地址中,放入1;100地址中,放入0;101地址中,放入1;110地址中,放入0;111地址中,放入1;
圖10 :存儲器示意圖
按照我們存儲器的邏輯功能,給與地址,存儲器就會給出對應地址中所存放的數(shù)據(jù)。那么存儲器的功能表如下:
圖11 :存儲器的功能表
將存儲器的功能表圖11和二選一多路選擇器的真值表圖8相對比,我們會發(fā)現(xiàn),除了自定義的信號名稱不相同外,邏輯功能是相同的。那么也就是說,在黑盒設計時,我們可以將一個帶有預設值的存儲器放進去,它所對外的功能,也是可以實現(xiàn)二選一多路選擇器的。此時,我們可以帶有預設值的存儲器可以等效為二選一多路選擇器。
仔細觀察,我們發(fā)現(xiàn),任意真值表都可以用存儲器來等效。那也就是說,存儲器電路可以等效為任意組合邏輯的電路。
存儲器電路的優(yōu)勢:不用做任何邏輯化簡,不受基本邏輯門電路的樣式限制,可以很快的得出最終的電路功能。如果存儲器可以任意修改預設值的話,那么同一個存儲器就可以隨著不同的預設值等效為各類的電路。如果是基本門電路構(gòu)成的話,就需要受到數(shù)量和樣式的限制。
存儲器電路的劣勢:對于簡單的門電路,用存儲器實現(xiàn)是一種浪費。存儲器電路也是一種相對復雜的電路。另外存儲器電路的延遲一般偏大,原因同上。
在做數(shù)字組合邏輯電路設計時,如果采用門電路的設計方式,需要更新電路功能時,就需要重新布置電路結(jié)構(gòu),更換基本電路元器件;如果采用存儲器等效的設計方式,只需要更改預設值即可。這種方法為我們做電路升級提供了一個很好的解決途徑。
FPGA(Field-Programmable Gate Array),即現(xiàn)場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎上進一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點。
在介紹FPGA芯片結(jié)構(gòu)之前,首先就FPGA和單片機做一個簡單的對比。
單片機是一種微處理器,類似于電腦CPU。它的電路是固定的,是通過軟件編程語言描述軟件指令控制微處理器進行工作;它的所有指令都是微處理器順序執(zhí)行的;
圖12 :某單片機結(jié)構(gòu)圖
FPGA是一種半定制電路。它的電路也是固定的,但是可以通過硬件編程語言描述電路功能,重新配置電路功能,得到我們想要的電路的等效電路;它的所有功能都是利用電路來直接實現(xiàn)的,所有的功能都是可以并行執(zhí)行。
圖13 :與門邏輯功能示意圖
要求實現(xiàn)兩路信號的與操作,將結(jié)果作為一路信號輸出。那么在單片機中和FPGA中都是如何實現(xiàn)此功能的呢?
在單片機中,假設我們已經(jīng)將對應的變量和引腳已經(jīng)分配結(jié)束。我們會編寫如下一段代碼:
CPU會首先去讀取A管腳的電平值,放入到自己的通用寄存器。然后讀取B管腳的電平值放入到自己的通用寄存器。然后將兩個電平值進行相與,結(jié)果寫入通用寄存器。最后將存放結(jié)果的通用寄存器的值存入到Y(jié)管腳對應的寄存器。每一步都需要很久的時間。
在FPGA內(nèi)部會形成一個存儲器的等效電路(與門),直接將A管腳電平和B管腳的電平相與的結(jié)果用線連接到Y(jié)管腳了。
有些人可能不太明白,覺得這兩個是相同的。都是取兩個電平,然后把結(jié)果輸送出去。不一樣的地方有兩個:
第一:單片機執(zhí)行是順序的,也就是說,每個時刻只能做一件事情。假設A管腳被取完電平后,突然降低一段時間,然后又拉高了。但是此時CPU去取B管腳電平或者輸送結(jié)果到Y(jié)管腳了。那么整個設計將不會察覺到A管腳被拉低了一段時間。在FPGA中,都是直接線連接的,沒有任何控制邏輯,任何的變化都會直接反映到電路的結(jié)果上。
第二:由于單片機的執(zhí)行時順序的,也就是有一個時間表,每一個時刻干什么規(guī)定好的。而FPGA是純邏輯實現(xiàn),每時每刻所有的電路都在工作。速度上要比單片機快很多。
所以FPGA的本質(zhì)實現(xiàn)是靠自己的邏輯功能電路來實現(xiàn),單片機是靠控制CPU,讓CPU單個控制各個邏輯功能電路順序?qū)崿F(xiàn)的。
在數(shù)字電路基礎中,我們知道,所有的數(shù)字電路都是由組合邏輯和時序邏輯構(gòu)成,而時序邏輯是由組合邏輯和時序邏輯器件構(gòu)成。所以數(shù)字電路是由組合邏輯和時序邏輯器件構(gòu)成。
電路的重新配置按照現(xiàn)在的技術(shù)還實現(xiàn)不了。例如:有一個asic,現(xiàn)在想要他換一種功能,這是現(xiàn)在實現(xiàn)不了的,因為其中的電路是固定的,并且沒有重新配置的功能。
如果想要電路能夠重新配置,在上一節(jié)中敘述存儲器等效電路時,我們了解到存儲器電路預設不同的值是可以完成不同的電路功能。
在FPGA中,由一定的存儲器等效電路和時序邏輯器件構(gòu)成最小單元。那么此單元可以被配置成為組合邏輯、時序邏輯。
圖14 :CYCLONE IV E 可編程最小單元示意圖
CYCLONE IV E是INTEL FPGA中CYCLONE系列的第四代。在上圖中,四輸入查找表(Four – Input LUT)其實就是一個有16存儲空間,每個存儲空間只有1個二進制數(shù)字的存儲器,LUT(Look Up Table)就是查找表。設置合理的預設值,就可以實現(xiàn)一定的數(shù)字組合邏輯電路功能。
那為什么要固定為16存儲器空間呢?如果我們要實現(xiàn)一個5輸入的與門,那16個存儲空間就不夠用了。那么此時我們應該怎么辦?
其實也很簡單,只需要將5輸入的與門分為一個四輸入的與門,然后把結(jié)果和另外一個輸入進行相與即可。對于存儲器電路也可以這樣做。
如果可以級聯(lián)的話,那么做成2輸入的是不是也可以的。原則上是可以的,但是如果我們實現(xiàn)的邏輯功能比較復雜的話,那么就會級聯(lián)特別長,延時就會很大。那做成1000輸入的話,是不是就好了,再復雜的話,都不用級聯(lián)??墒窃谠O計時,我們做的不僅僅是復雜邏輯,還有很多的不復雜的,那么一個二輸入與門的設計也要占用一個1000輸入,那就得不償失了。所以經(jīng)過衡量,最終設計者將輸入做成了4輸入的查找表。
經(jīng)過不斷的發(fā)展,F(xiàn)PGA在各個場合的應用越來越多,所做的設計越來越復雜,要求的延遲越來越小。于是新出的FPGA系列擁有更多的輸入查找表。
在圖2-14中,后面還有一個時序邏輯器件。這個時序邏輯器件是FPGA廠商直接做到FPGA內(nèi)部的,我們設計電路時,不需要設計,只需要調(diào)用出來即可。
由此,我們就可以實現(xiàn)組合邏輯和時序邏輯的一個小部分了。但是復雜的設計,往往是需要級聯(lián)的。
圖15 :CYCLONE IV 中結(jié)構(gòu)示意圖
LAB中包含了很多最小可編程單元,這些可編程單元完成電路的一部分功能。然后通過各種interconnect(連線)互聯(lián),最終實現(xiàn)我們想要的復雜的邏輯功能。
通過可編程單元和連線資源就可以完成各種電路功能,但是最終還是在芯片內(nèi)部,為了能夠和外部的芯片進行通信,一定會需要IO單元。
圖16 :CYCLONE IV的IO單元
在IO單元中,我們可以發(fā)現(xiàn)整個IO單元可以被配置為輸入、輸出、輸入出。并且其中可以是否配置上拉電阻,以及電路延遲等等功能。
FPGA的IO數(shù)量較多,在需要同時控制多個外設時,不需要級聯(lián),一致性會比較好。
圖17 :CYCLONE IV E的某塊FPGA的IO供電bank
在FPGA中,內(nèi)部邏輯運行是一種電壓。輸入輸出被分為了好多個塊(bank),每一個塊都可以有自己的電平標準,這就讓FPGA可以在不用轉(zhuǎn)換電路的情況下,驅(qū)動多個不同電壓標準的接口。
在圖17中可以看到FPGA的內(nèi)部邏輯電壓相對較低,所以FPGA的功耗也相對較低。
通過上述的三種結(jié)構(gòu),一個簡單的FPGA芯片就可以實現(xiàn)了。
在FPGA應用時,我們發(fā)現(xiàn)經(jīng)常用到一些緩存和特殊電路,并且對這些電路的要求比較高,用FPGA實現(xiàn)不太現(xiàn)實。那么FPGA就會將其集成到FPGA內(nèi)部,用大量的互聯(lián)資源引出接口,供給內(nèi)部邏輯進行控制或者通信。
設計者可以利用FPGA的資源實現(xiàn)CPU的功能,構(gòu)成SOPC。
現(xiàn)在的很多FPGA將ARM的硬核放入到自己內(nèi)部,構(gòu)成SOC。
本文只是簡單介紹FPGA內(nèi)部結(jié)構(gòu),后續(xù)在設計時,需要詳細了解結(jié)構(gòu)時,會單獨列出來詳細講解。有興趣的同學可以自己查詢FPGA的介紹文檔。
FPGA是一種芯片,有很多的廠商都在生產(chǎn)和銷售,下面簡要介紹幾個廠家以及他們的芯片。
Intel FPGA
Altera公司(阿爾特拉)自二十年前發(fā)明世界上第一個可編程邏輯器件開始,秉承了創(chuàng)新的傳統(tǒng),是世界上“可編程芯片系統(tǒng)”(SOPC)解決方案倡導者。Altera結(jié)合帶有軟件工具的可編程邏輯技術(shù)、知識產(chǎn)權(quán)(IP)和技術(shù)服務,在世界范圍內(nèi)為14,000多個客戶提供高質(zhì)量的可編程解決方案。我們新產(chǎn)品系列將可編程邏輯的內(nèi)在優(yōu)勢——靈活性、產(chǎn)品及時面市——和更高級性能以及集成化結(jié)合在一起,專為滿足當今大范圍的系統(tǒng)需求而開發(fā)設計。
在2015年12月Intel斥資167億美元收購Altera公司。至此,我們將Altera FPGA更名為Intel FPGA。
Intel FPGA的主流FPGA分為兩大類,一種側(cè)重低成本應用,容量中等,性能可以滿足一般的邏輯設計要求,如Cyclone系列;還有一種側(cè)重于高性能應用,容量大,性能能滿足各類高端應用,如Startix、Arria系列等,用戶可以根據(jù)自己實際應用要求進行選擇。在性能可以滿足的情況下,優(yōu)先選擇低成本器件。
Xilinx FPGA
Xilinx(賽靈思)是全球領先的可編程邏輯完整解決方案的供應商。Xilinx研發(fā)、制造并銷售范圍廣泛的高級集成電路、軟件設計工具以及作為預定義系統(tǒng)級功能的IP(Intellectual Property)核??蛻羰褂肵ilinx及其合作伙伴的自動化軟件工具和IP核對器件進行編程,從而完成特定的邏輯操作。
Xilinx的主流FPGA分為兩大類,一種側(cè)重低成本應用,容量中等,性能可以滿足一般的邏輯設計要求,如Spartan系列;還有一種側(cè)重于高性能應用,容量大,性能能滿足各類高端應用,如Virtex系列,用戶可以根據(jù)自己實際應用要求進行選擇。在性能可以滿足的情況下,優(yōu)先選擇低成本器件。
繼Xilinx正式向外界發(fā)布其推出全球首顆28nm制程的Kintex-7后,該公司推出7系列四款芯片Artix-7、Kintex-7、Virtex-7和Zynq的FPGA芯片,以及圍繞7系列的開發(fā)資源。
Actel FPGA
ACTEL公司成立于1985年,位于美國紐約。之前的20多年里,ACTEL一直效力于美國軍工和航空領域,并禁止對外出售。國內(nèi)一些特殊領域的企業(yè)都是采用其它途徑購買軍工級型號。目前ACTEL開始逐漸轉(zhuǎn)向民用和商用,除了反熔絲系列外,還推出可重復擦除的ProASIC3系列(針對汽車、工業(yè)控制、軍事航空行業(yè))。
Lattice FPGA
萊迪思(Lattice)半導體公司提供業(yè)界最廣范圍的現(xiàn)場可編程門陣列(FPGA)、可編程邏輯器件(PLD)及其相關(guān)軟件,包括現(xiàn)場可編程系統(tǒng)芯片(FPSC)、復雜的可編程邏輯器件(CPLD),可編程混合信號產(chǎn)品(ispPAC?)和可編程數(shù)字互連器件(ispGDX?)。
國產(chǎn)FPGA
京微齊力、西安智多晶微電子、紫光國微、高云等等,他們都擁有自己的FPGA系列芯片。
FPGA的廠商有很多,但是基本的內(nèi)部結(jié)構(gòu)和開發(fā)流程是比較接近了,只要掌握一種FPGA的開發(fā)方式,其他的FPGA開發(fā)就會容易上手很多。
目前學習FPGA設計,使用INTEL FPGA和Xilinx FPGA的居多,這兩家的FPGA芯片也是應用最多的。
系統(tǒng)設計師可以根據(jù)需要通過可編輯的連接把FPGA內(nèi)部的邏輯塊連接起來,就好像一個電路試驗板被放在了一個芯片里。一個出廠后的成品FPGA的邏輯塊和連接可以按照設計者而改變,所以FPGA可以完成所需要的邏輯功能。
FPGA的特點有以下幾點:
- 采用FPGA設計ASIC電路(專用集成電路),用戶不需要投片生產(chǎn),就能得到合用的芯片。FPGA可做其它全定制或半定制ASIC電路的中試樣片。FPGA內(nèi)部有豐富的觸發(fā)器和I/O引腳。FPGA是ASIC電路中設計周期最短、開發(fā)費用最低、風險最小的器件之一。FPGA采用高速CMOS工藝,功耗低,可以與CMOS、TTL電平兼容。
可以說,F(xiàn)PGA芯片是小批量系統(tǒng)提高系統(tǒng)集成度、可靠性的最佳選擇之一。
FPGA的應用大可分為以下幾種:
數(shù)據(jù)采集領域:自然界的大部分信號是模擬信號,在高速采集時,信息無法直接傳入MCU或者DSP。此時,需要FPGA進行一定的轉(zhuǎn)換和速率匹配。
邏輯接口領域:CPU在于外界通信時,需要各種專門的接口,而接口電路所引入的接口電路很龐大。加入FPGA,就可以CPU與FPGA做單獨通信,由FPGA實現(xiàn)其他各種接口的擴展。
電平接口領域:不同的器件支持的電平不盡相同,如果需要連接各種接口時,就需要各種接口標準或者轉(zhuǎn)換電路。對于FPGA來說,F(xiàn)PGA分為不同的BANK,可以直接支持不同的電平標準。
數(shù)字信號處理領域:通信、圖像等領域近些年對計算量提出了更高的要求,F(xiàn)PGA支持并行計算,可以大大縮短計算的時間。
IC設計領域:IC在設計時,首先會使用FPGA設計出基礎的電路模型進行各種理論驗證,等驗證通過后,才會進行IC制造等等。
通過上述的敘述,了解FPGA內(nèi)部都是使用等效電路實現(xiàn)功能,那么它的速度是不是趕不上ASIC?
既然要做對比,就要說明一部分情況。例:如果是同等工藝條件下,F(xiàn)PGA是沒有ASIC跑的快。各大FPGA廠商都是利用世界先進工藝做出的片子,如果某些應用類型公司嘗試利用的最先進工藝做片子,那么風險比較高,費用也比較昂貴,如果采用成熟工藝去做片子,那么asic的速度不一定會有FPGA速度快。