對(duì)于FPGA/DSP概念與特點(diǎn)的分享和總結(jié)
這世界真是瘋了,貌似有人連FPGA原理是什么都不知道就開(kāi)始來(lái)學(xué)習(xí)FPGA了。
DSP就是一個(gè)指令比較獨(dú)特的處理器。它雖然是通用處理器,但是實(shí)際上不怎么“通用”。技術(shù)很牛的人可以用DSP做一臺(tái)電腦出來(lái)跑windows,而實(shí)際上真正這么干的肯定是蠢材。用DSP做信號(hào)處理,比其他種類的處理器要厲害;用DSP做信號(hào)處理之外的事情,卻并不見(jiàn)長(zhǎng)。而且信號(hào)處理的代碼一般需要對(duì)算法很精通的人才能真正寫(xiě)好。
數(shù)據(jù)結(jié)構(gòu)里面的時(shí)間復(fù)雜度和空間復(fù)雜度在這里是一把很?chē)?yán)酷的尺子。 FPGA只不過(guò)披著軟件的外衣,實(shí)際上是硬件。FPGA內(nèi)部有兩層相對(duì)獨(dú)立的電路。使用者“編碼->編譯”后生成一個(gè)映像,這個(gè)映像作用于第一層電路。這層電路之際上就是一個(gè)0,1的開(kāi)關(guān)矩陣,這個(gè)開(kāi)關(guān)矩陣用來(lái)控制第二層工作電路,將第二層工作電路配置成一個(gè)相應(yīng)的處理器。
理論上FPGA可以配置成任何需要的處理器,而實(shí)際上為了盡量少出bug,F(xiàn)PGA開(kāi)發(fā)都使用已經(jīng)開(kāi)發(fā)好的“庫(kù)文件”,也就是把人家能穩(wěn)定工作的電路圖拿過(guò)來(lái)。
因此,對(duì)大多數(shù)FPGA開(kāi)發(fā)者來(lái)說(shuō),F(xiàn)PGA內(nèi)部有幾個(gè)核基本上只能從庫(kù)文件里面選——除非你有能力自己設(shè)計(jì)核心內(nèi)部的電路和核間總線——ram和rom也是用宏來(lái)配置,自己只需要改改外部的專用電路和接線方式等等。
甚至外部的專用電路都有庫(kù)文件,搭個(gè)積木就完事了。玩FPGA真正掙錢(qián)的人是做積木的人,你原創(chuàng)幾個(gè)積木并且能申請(qǐng)專利,迫使人家給你交專利費(fèi),那你這輩子可以衣食無(wú)憂了。
FPGA區(qū)別于ASIC設(shè)計(jì)屬于硬件設(shè)計(jì)的范疇ASIC是硬件全定制FPGA是硬件半定制. 具體來(lái)說(shuō)ASIC整個(gè)電路都由設(shè)計(jì)師設(shè)計(jì)的,用多少資源設(shè)計(jì)多少資源 一般多用于產(chǎn)品設(shè)計(jì). FPGA資源事先由廠商給定,例如Altera Xilinx等都提供不同系列的FPGA芯片,設(shè)計(jì)師可以在給定資源下做硬件設(shè)計(jì)開(kāi)發(fā).
DSP主要用于處理信號(hào),事先算法,特點(diǎn)是多級(jí)流水,可以加快數(shù)據(jù)處理的速度,開(kāi)發(fā)環(huán)境主要是C語(yǔ)言,可以說(shuō)DSP應(yīng)用的范圍更專DSP的設(shè)計(jì). 可以理解為軟件設(shè)計(jì),設(shè)計(jì)師不需要太了解DSP的結(jié)構(gòu).
補(bǔ)充幾個(gè)小概念
DSP愿意就是指數(shù)字信號(hào)處理 只不過(guò)DSP芯片由于主要功能是實(shí)現(xiàn)數(shù)字信號(hào)處理 實(shí)現(xiàn)各種算法 所以簡(jiǎn)稱為DSP(數(shù)字信號(hào)處理器).
FPGA一樣可以做DSP(數(shù)字信號(hào)處理),就意味著可以用FPGA做硬件設(shè)計(jì)來(lái)實(shí)現(xiàn)DSP芯片的功能,當(dāng)然,相比較專業(yè)的DSP芯片 成本太高.
現(xiàn)在除了FPGA和DSP之外還有一個(gè)近幾年熱門(mén)的產(chǎn)品 ARM. ARM主要應(yīng)用與手持設(shè)備和嵌入式產(chǎn)品,幾乎籠罩了90%的市場(chǎng)份額,可以說(shuō)ARM開(kāi)發(fā)也偏向于軟件開(kāi)發(fā),設(shè)計(jì)者主要是講wince系統(tǒng)或者linux系統(tǒng)移植到ARM開(kāi)發(fā)平臺(tái)上,然后做各種軟件應(yīng)用開(kāi)發(fā).
所以 這三個(gè)方向都有其不同的應(yīng)用場(chǎng)合,很難講誰(shuí)更有前途,不過(guò),作為我個(gè)人而言,更喜歡做硬件設(shè)計(jì),所以我選擇FPGA作為自己的方向 FPGA.
主要是給設(shè)計(jì)者提供了一個(gè)硬件平臺(tái) 開(kāi)發(fā)的核心還是需要獨(dú)立的應(yīng)用設(shè)計(jì)和高效的算法設(shè)計(jì) 所以設(shè)計(jì)者應(yīng)該處理好工具的掌握和具體設(shè)計(jì)的區(qū)別 FPGA:并行處理,內(nèi)部資源多 DSP:成本低,低功耗,高性能的處理能力。具有強(qiáng)大的外部通信接口(SCI,SPI,CAN)便于構(gòu)成大的控制系統(tǒng)。
特點(diǎn):
(1)在一個(gè)指令周期內(nèi)可完成一次乘法和一次加法;
(2)程序和數(shù)據(jù)空間分開(kāi),可以同時(shí)訪問(wèn)指令和數(shù)據(jù);
(3)片內(nèi)具有快速RAM,通??赏ㄟ^(guò)獨(dú)立的數(shù)據(jù)總線在兩塊中同時(shí)訪問(wèn);
(4)具有低開(kāi)銷或無(wú)開(kāi)銷循環(huán)及跳轉(zhuǎn)的硬件支持;
(5)快速的中斷處理和硬件I/O支持;
(6)具有在單周期內(nèi)操作的多個(gè)硬件地址產(chǎn)生器;
(7)可以并行執(zhí)行多個(gè)操作;
(8)支持流水線操作,使取指、譯碼和執(zhí)行等操作可以重疊執(zhí)行。
本人認(rèn)為FPGA更有前途,DSP其實(shí)只是個(gè)特殊的處理器,有專用的硬件乘法器,有桶形移位器可以把數(shù)據(jù)從存儲(chǔ)器移到ALU,還有流水線等技術(shù)。
但FPGA同樣可以完成這些功能,并且FPGA是并行工作的,現(xiàn)在很多FPGA內(nèi)部可以使用軟DSP或者硬核的DSP,當(dāng)你的項(xiàng)目需要時(shí)序很?chē)?yán)格的情況非FPGA莫屬。
比如說(shuō)用DSP和USB芯片CY68013進(jìn)行FIFO(同步傳送)數(shù)據(jù)時(shí),IFCLK可以是外部或內(nèi)部,USB芯片在(IFCONFIG的IFCLKSRC里配置)。如果IFCLK使用內(nèi)部的情況下,DSP根本無(wú)法知道我把數(shù)據(jù)送到FIFO數(shù)據(jù)端口后USB芯片內(nèi)部時(shí)鐘過(guò)了多少周期,但FPGA就可以,因?yàn)镕PGA的時(shí)鐘取自于USB芯片的48M輸出,在FPGA內(nèi)部做一個(gè)狀態(tài)機(jī),當(dāng)數(shù)據(jù)送到USB芯片的FIFO數(shù)據(jù)端口時(shí),下一狀態(tài)把SLWR拉低,再下一狀態(tài)拉高,就等于USB內(nèi)部過(guò)了一周期,數(shù)據(jù)就寫(xiě)進(jìn)USB芯片內(nèi)部的FIFO了,我只是舉個(gè)簡(jiǎn)單的例子,很多關(guān)于時(shí)序的案例非FPGA莫屬,DSP做算法快速,成熟,F(xiàn)PGA更有挑戰(zhàn),據(jù)我的經(jīng)驗(yàn),F(xiàn)PGA現(xiàn)在內(nèi)部起碼有很多核是可以用的,這像一個(gè)可配置的單片機(jī),不用的我就不放進(jìn)項(xiàng)目。以ACTEL的FPGA來(lái)說(shuō),用的比較多的軟核是:Core8051S、CoreABC、微處理器軟核,特別說(shuō)明CoreABC占用的空間非常少,可以裁減指令,可以配置數(shù)據(jù)寬度8,16,32,有1組通用輸入端口和輸出端口,可配置堆棧。
CoreDES,CoreAES128,CoreFROM,CoreI2C,CoreGPIO,CoreInterrupt,CoreLPC,CoreSDR,CoreUART,還有很多很多,看這些名字,很多人都知道干什么用的。 關(guān)于DPS,FPGA,AME你如何看待呢?哪個(gè)是你的最愛(ài)?