FPGA的本質(zhì)是設(shè)計(jì)一顆芯片,其開發(fā)劉成是通過(guò)verilog等硬件描述語(yǔ)言通過(guò)EDA工具編譯、綜合、布局布線成為下載文件,最終加載到FPGA器件中去,完成所實(shí)現(xiàn)的功能。而硬件描述語(yǔ)言描述的就是組合邏輯和時(shí)序邏輯電路,度和邏輯就是與、非、或組成的電路,而時(shí)序電路就是觸發(fā)器。在FPGA中,組合邏輯的變成了查找表的工作,于是所有的數(shù)字電路轉(zhuǎn)化成為查找表和寄存器,這便是FPGA的基礎(chǔ),查找表負(fù)責(zé)邏輯實(shí)現(xiàn),寄存器存儲(chǔ)電路狀態(tài)。現(xiàn)代FPGA內(nèi)部除了查找表和寄存器之外,還有RAM塊,用于存儲(chǔ)大量的數(shù)據(jù)塊,這樣可以節(jié)省芯片實(shí)現(xiàn)的面積。FPGA內(nèi)部的時(shí)序電路需要時(shí)鐘的輸入,通常FPGA內(nèi)部需要的時(shí)鐘種類較多,因此需要在片內(nèi)產(chǎn)生相關(guān)的時(shí)鐘,因此時(shí)鐘管理單元DCM/PLL也是必不可少的內(nèi)部部件。除此之外,F(xiàn)PGA內(nèi)部還包括接口I/O,可分為普通I/O和高速I/O,次外還有各種各樣的硬核。
FPGA的英文翻譯過(guò)來(lái)是現(xiàn)場(chǎng)可編程門陣列,這是相對(duì)于ASIC來(lái)說(shuō)的,ASIC硬件也可以可做是門陣列,但是它是非可編程的器件,流片完成之后功能就固化了。但是FPGA 的可編程性在于其能夠重新下載配置文件,來(lái)改變其內(nèi)在的功能。兩者在前端開發(fā)流程上并無(wú)二致。FPGA作為一種器件,技術(shù)主要壟斷在ALTERA和XILINX這兩大公司手中。
(一)FPGA架構(gòu)
一個(gè)完整的嵌入式系統(tǒng)中由單獨(dú)一個(gè)FPGA組成的情況較少,通常由多個(gè)器件組合完成,例如CPU+FPGA。通常是由一個(gè)FPGA+ARM,ARM負(fù)責(zé)軟件配置管理,界面輸入外設(shè)操作,F(xiàn)PGA負(fù)責(zé)大數(shù)據(jù)量運(yùn)算,可看做CPU的專用協(xié)處理器來(lái)使用,也常會(huì)用于擴(kuò)展外部接口。常用的架構(gòu)有ARM+FPGA,DSP+FPG A,或者網(wǎng)絡(luò)處理器+FPGA等,這些架構(gòu)形成構(gòu)成整個(gè)高速嵌入式設(shè)備的處理形態(tài)。實(shí)現(xiàn)高速處理方面,CPU的發(fā)展趨勢(shì)是多核。FPGA的熱門應(yīng)用有:
1)網(wǎng)絡(luò)存儲(chǔ)產(chǎn)片
2)高速網(wǎng)絡(luò)設(shè)備
3)4G通信等設(shè)備:對(duì)于新一代通信基站的信號(hào)處理,F(xiàn)PGA+DSP陣列的架構(gòu)就是絕配。
總之,沒有完美的架構(gòu),只有合適的組合。
(二)器件互聯(lián)
系統(tǒng)架構(gòu)確定之后,下一步就是FPGA和各器件的互聯(lián)問(wèn)題。通常來(lái)說(shuō),CPU和FPGA的互聯(lián)問(wèn)題主要取決于兩個(gè)要素:
1)CPU所支持的接口
2)交互的業(yè)務(wù)
通常FPGA一般支持與CPU連接的數(shù)字接口,其常用的有EMIF,PCI,網(wǎng)口,DDR等接口。作為總線類接口,F(xiàn)PGA通常作為從設(shè)備與CPU連接,CPU作為主設(shè)備通過(guò)訪問(wèn)直接映射的地址對(duì)FPGA進(jìn)行訪問(wèn)。通常總線訪問(wèn)分為同步訪問(wèn)和異步訪問(wèn)。CPU手冊(cè)中會(huì)對(duì)信號(hào)定義時(shí)序控制有著詳細(xì)的說(shuō)明,F(xiàn)PGA根據(jù)這些詳細(xì)的說(shuō)明來(lái)說(shuō)實(shí)現(xiàn)相應(yīng)的邏輯。同時(shí)CPU還會(huì)對(duì)訪問(wèn)時(shí)序進(jìn)行設(shè)置,例如設(shè)置建立時(shí)間、保持時(shí)間、最快時(shí)鐘。對(duì)于總線型的訪問(wèn)來(lái)說(shuō),數(shù)據(jù)信號(hào)通常為三態(tài),用于輸入輸出,這種設(shè)計(jì)目的減少外部連線的總數(shù)。總線訪問(wèn)優(yōu)勢(shì)是直接映射到系統(tǒng)的地址區(qū)間,訪問(wèn)較為直觀,但相對(duì)傳輸速率不高,主要原因如下:
1)受制總線訪問(wèn)間隔,即兩次訪問(wèn)中間的空閑狀態(tài)
2)不支持雙向傳輸,并且FPGA主動(dòng)對(duì)CPU發(fā)起操作是,只有中斷處理一種方式。
這種總線型操作特點(diǎn)可以使其用作系統(tǒng)的管理操作,例如FPGA內(nèi)部寄存器的配置,運(yùn)行過(guò)程中所需參數(shù)配置,以及數(shù)據(jù)量較小的信息交互等操作。這些操作數(shù)據(jù)量和所需帶寬合適,可應(yīng)對(duì)普通的嵌入式系統(tǒng)的需求處理。而對(duì)于大數(shù)據(jù)流量的數(shù)據(jù)交互,一般采用專用的總線交互,其特點(diǎn)支持雙向傳輸,總線傳輸速率較快。
(三)FPGA特點(diǎn)
FPGA最大的特點(diǎn)在于其靈活性:
1)I/O的靈活性,可以通過(guò)其I/O組成各種接口與各種器件連接,并且支持不同的電器特性。
2)內(nèi)部存儲(chǔ)器靈活,可以通過(guò)IP生成工具生成各種深度和寬度的RAM和FIFO
3)邏輯的靈活性,內(nèi)部邏輯可生成各種類型IP
(四)架構(gòu)設(shè)計(jì)
1)流驅(qū)動(dòng)式
對(duì)于一個(gè)FPGA的架構(gòu)設(shè)計(jì),其首先需要考慮的就是性能,其次就是接口設(shè)計(jì)。一般架構(gòu)設(shè)計(jì)是采用數(shù)據(jù)流驅(qū)動(dòng)方式實(shí)現(xiàn)的,通常來(lái)說(shuō)應(yīng)用于IP領(lǐng)域、存儲(chǔ)領(lǐng)域、數(shù)字處理領(lǐng)域等較大型FPGA設(shè)計(jì)都是數(shù)據(jù)流驅(qū)動(dòng)式架構(gòu),主要包括輸入接口單元,主處理單元,輸出接口單元,還可能包括輔助處理單元、外部存儲(chǔ)單元,這些單元之間一般采用流水式處理,即數(shù)據(jù)處理完之后數(shù)據(jù)打包發(fā)下一級(jí)處理。其中數(shù)據(jù)輸入輸出可能有多個(gè),此時(shí)需要架構(gòu)內(nèi)部實(shí)現(xiàn)數(shù)據(jù)的交換。
2)穩(wěn)定性:設(shè)計(jì)一定能夠進(jìn)行正常工作
3)時(shí)鐘域復(fù)位:復(fù)位一般采用異步復(fù)位同步釋放的方式。
4)并行與復(fù)用:并行可以提過(guò)處理速度,復(fù)用可以節(jié)省資源。最終的設(shè)計(jì)取決于對(duì)設(shè)計(jì)處理能力和邏輯數(shù)量的權(quán)衡。
5)流水線處理:簡(jiǎn)化設(shè)計(jì);時(shí)序優(yōu)化。但是流水設(shè)計(jì)對(duì)于帶反饋的設(shè)計(jì)無(wú)能為力,強(qiáng)加流水設(shè)計(jì)的話有可能會(huì)浪費(fèi)邏輯和設(shè)計(jì)。
(五)FPGA中一些常用內(nèi)部資源
1)FIFO設(shè)計(jì):作為FPGA中內(nèi)部資源的一個(gè)常用器件,最常見與異步時(shí)鐘域劃分和緩沖數(shù)據(jù),但不僅限于此。簡(jiǎn)化設(shè)計(jì)、減少耦合、輸入輸出接口固定,便于仿真和驗(yàn)證,都是使用FIFO的好處。
2)RAM:通常實(shí)例化RAM中,一種是BLOCK RAM,一種是分布式RAM,前者可以提供較大的存儲(chǔ)空間,后者提供較小的存儲(chǔ)空間。
(五)coding原則
1)注釋:好的代碼必須有注釋,注釋至少包括文件注釋、端口注釋和功能語(yǔ)句注釋。好的注釋,可以提高代碼的可讀性,可維護(hù)性。
2)語(yǔ)句:所寫語(yǔ)句一定是可綜合的,在FPGA設(shè)計(jì)中無(wú)外乎就是時(shí)序邏輯和組合邏輯。組合邏輯是即可生效的,時(shí)序邏輯是時(shí)鐘的下一拍起效。
3)阻塞與非阻塞賦值:一般情況下,組合邏輯用的是阻塞賦值,時(shí)序邏輯用的是非阻塞賦值。
4)注意避免鎖存器的生成:鎖存器最容易產(chǎn)生在always(*)模塊,所有的分支條件都要描述并且賦值,狀態(tài)機(jī)中的default狀態(tài)也不要忘記。
(六)接口設(shè)計(jì)
在進(jìn)行設(shè)計(jì)的時(shí)候,需要一個(gè)接口模塊,首先需要明確以下問(wèn)題:
1)同步接口還是異步接口?
2)有哪些信號(hào),功能是什么?
3)信號(hào)之間的時(shí)序關(guān)系是什么?
4)傳遞的效率什么?
這些問(wèn)題的答案一般都會(huì)在datasheet中給出,一般設(shè)計(jì)一個(gè)接口模塊,必然與其他硬件電路相連接。加入外部連接接口是總線接口,至少包括以下卻不限于以下信號(hào):
1)地址:能夠支持的最大地址空間,數(shù)據(jù)和地址是否復(fù)用?
2)數(shù)據(jù):一般讀數(shù)據(jù)和寫數(shù)據(jù)復(fù)用同一接口
3)讀寫命令
4)是否支持突發(fā)傳輸
5)同步還是異步
6)控制信號(hào)之間的相位關(guān)系以及建立時(shí)間和保持時(shí)間的要求
(6)學(xué)會(huì)總線設(shè)計(jì)
PC時(shí)代,壟斷江湖的是微軟和INTel,而在移動(dòng)互聯(lián)網(wǎng)時(shí)代,最具有潛質(zhì)的就是谷歌的ANDROID系統(tǒng)和ARM芯片。因此作為ARM處理做片上互聯(lián)的AMBA總線標(biāo)準(zhǔn)成為業(yè)界應(yīng)用最廣泛的標(biāo)準(zhǔn)。
AMBA總線實(shí)際是三個(gè)標(biāo)準(zhǔn)的集合,分別為AHB,ASB,APB。ASB已經(jīng)逐漸被AHB取代,現(xiàn)在使用最廣泛的是AHB和APB總線,以及最新擴(kuò)展的AXI總線。如圖為AHB和APB在一個(gè)嵌入式系統(tǒng)中的應(yīng)用場(chǎng)景。
??
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1629文章
21748瀏覽量
603853 -
cpu
+關(guān)注
關(guān)注
68文章
10872瀏覽量
211993 -
接口
+關(guān)注
關(guān)注
33文章
8612瀏覽量
151292 -
時(shí)序電路
+關(guān)注
關(guān)注
1文章
114瀏覽量
21711 -
觸發(fā)器
+關(guān)注
關(guān)注
14文章
2000瀏覽量
61185
原文標(biāo)題:FPGA相關(guān)知識(shí)系統(tǒng)介紹
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論