本(běn)文(wén)的(de)文(wén)檔編号(hào):001500000028
需要(yào)看(kàn)对(duì)應(yìng)的(de)視頻,請點(diǎn)擊視頻編号(hào):001000000047
1、本(běn)章(zhāng)主(zhǔ)要(yào)介紹了(le)FPGA的(de)概念、基本(běn)結構,以(yǐ)及(jí)FPGA芯片(piàn)的(de)架構和(hé)工作原理(數據(jù)存儲以(yǐ)及(jí)配置方(fāng)式)。
2、这(zhè)是(shì)ALTERA和(hé)VIVADO文(wén)檔
第(dì)一(yī)章(zhāng) FPGA簡介
1 什麼(me)是(shì)FPGA
FPGA的(de)官方(fāng)解(jiě)釋是(shì) : Field-Programmable Gate Array,即現(xiàn)场可(kě)編程門(mén)阵(zhèn)列,它(tā)是(shì)在(zài)PAL、GAL、CPLD(不(bù)用(yòng)读(dú)系(xì)列)等可(kě)編程器件(jiàn)的(de)基礎上(shàng)進(jìn)一(yī)步發(fà)展(zhǎn)的(de)産物(wù)。它(tā)是(shì)作为(wèi)專用(yòng)集成(chéng)電(diàn)路(lù)(ASIC)領域中(zhōng)的(de)一(yī)種(zhǒng)半定(dìng)制電(diàn)路(lù)而(ér)出(chū)現(xiàn)的(de),既解(jiě)決了(le)定(dìng)制電(diàn)路(lù)的(de)不(bù)足,又克(kè)服(fú)了(le)原有(yǒu)可(kě)編程器件(jiàn)門(mén)電(diàn)路(lù)數有(yǒu)限的(de)缺點(diǎn)。
可(kě)以(yǐ)将FPGA理解(jiě)为(wèi)大量(liàng)的(de)邏輯門(mén)阵(zhèn)列,用(yòng)戶可(kě)以(yǐ)自(zì)由(yóu)組合以(yǐ)实現(xiàn)不(bù)同(tóng)的(de)電(diàn)路(lù)功能(néng),即FPGA的(de)可(kě)編程特(tè)性(xìng)。相比于(yú)馮諾依曼結構的(de)CPU、GPU等通(tòng)用(yòng)处理器,FPGA具有(yǒu)效率更(gèng)高(gāo)速度(dù)更(gèng)快(kuài)的(de)优點(diǎn);相比于(yú)專職專用(yòng)的(de)ASIC,FPGA則具有(yǒu)開(kāi)發(fà)難度(dù)小,開(kāi)發(fà)周期(qī)更(gèng)短(duǎn)的(de)优勢,更(gèng)适用(yòng)于(yú)複雜多(duō)變(biàn)的(de)數據(jù)中(zhōng)心(xīn)等應(yìng)用(yòng)
但是(shì)FPGA也(yě)不(bù)是(shì)万(wàn)能(néng)的(de),优勢有(yǒu)时(shí)候也(yě)是(shì)劣勢。虽然FPGA相比于(yú)CPU效率更(gèng)高(gāo)、功耗更(gèng)低的(de)特(tè)點(diǎn),但是(shì)易于(yú)開(kāi)發(fà)程度(dù)遠(yuǎn)遠(yuǎn)不(bù)如(rú)CPU;虽然相比ASIC開(kāi)發(fà)周期(qī)更(gèng)短(duǎn),但是(shì)也(yě)存在(zài)着資源浪費,成(chéng)本(běn)过(guò)高(gāo)、性(xìng)能(néng)較差的(de)問(wèn)題(tí),不(bù)能(néng)真(zhēn)正(zhèng)的(de)替代(dài)ASIC。
2 FPGA的(de)工作原理
由(yóu)于(yú)FPGA要(yào)反(fǎn)複燒写,所(suǒ)以(yǐ)他(tā)实現(xiàn)組合邏輯的(de)結構不(bù)能(néng)像ASIC那(nà)樣(yàng)通(tòng)过(guò)固定(dìng)的(de)與(yǔ)非(fēi)門(mén)来(lái)完成(chéng),而(ér)只(zhī)能(néng)采用(yòng)一(yī)種(zhǒng)抑郁反(fǎn)複配置的(de)結構。查找(zhǎo)表(biǎo)(LUT)可(kě)以(yǐ)很好(hǎo)地(dì)滿足这(zhè)一(yī)要(yào)求,目前(qián)主(zhǔ)流FPGA都采用(yòng)了(le)基于(yú)SRAM工藝的(de)查找(zhǎo)表(biǎo)結構。通(tòng)过(guò)燒写文(wén)件(jiàn)改變(biàn)查找(zhǎo)表(biǎo)內(nèi)容的(de)方(fāng)法来(lái)实現(xiàn)对(duì)FPGA的(de)重(zhòng)複配置。
根(gēn)據(jù)數字(zì)電(diàn)路(lù)的(de)基本(běn)知識可(kě)以(yǐ)知道(dào),对(duì)于(yú)一(yī)个(gè)n輸入(rù)的(de)邏輯運算,不(bù)管(guǎn)是(shì)與(yǔ)或(huò)非(fēi)運算還(huán)是(shì)异(yì)或(huò)運算等等,最(zuì)多(duō)只(zhī)可(kě)能(néng)存在(zài)2n種(zhǒng)結果(guǒ)。所(suǒ)以(yǐ)如(rú)果(guǒ)事(shì)先(xiān)将相應(yìng)的(de)結果(guǒ)存放(fàng)在(zài)一(yī)个(gè)存儲單元(yuán),就(jiù)相當于(yú)实現(xiàn)了(le)與(yǔ)非(fēi)門(mén)電(diàn)路(lù)的(de)功能(néng)。FPGA的(de)原理就(jiù)是(shì)如(rú)此(cǐ),他(tā)通(tòng)过(guò)燒写文(wén)件(jiàn)去(qù)配置查找(zhǎo)表(biǎo)的(de)內(nèi)容,從而(ér)在(zài)相同(tóng)的(de)電(diàn)路(lù)情(qíng)況下(xià)实現(xiàn)了(le)不(bù)同(tóng)的(de)邏輯功能(néng)。
查找(zhǎo)表(biǎo)(Look-Up-Table)簡稱为(wèi)LUT,LUT本(běn)質(zhì)上(shàng)就(jiù)是(shì)一(yī)个(gè)RAM。目前(qián)FPGA中(zhōng)多(duō)实用(yòng)4輸入(rù)的(de)LUT,所(suǒ)以(yǐ)每一(yī)个(gè)LUT可(kě)以(yǐ)看(kàn)成(chéng)一(yī)个(gè)有(yǒu)4位地(dì)址線(xiàn)的(de)RAM。當用(yòng)戶通(tòng)过(guò)原理图(tú)或(huò)HDL語(yǔ)言描述了(le)一(yī)个(gè)邏輯電(diàn)路(lù)以(yǐ)後(hòu),FPGA開(kāi)發(fà)软(ruǎn)件(jiàn)会(huì)自(zì)動(dòng)計(jì)算邏輯電(diàn)路(lù)的(de)所(suǒ)有(yǒu)可(kě)能(néng)結果(guǒ),并把真(zhēn)值表(biǎo)(即結果(guǒ))事(shì)先(xiān)写入(rù)RAM,这(zhè)樣(yàng),每輸入(rù)一(yī)个(gè)信(xìn)号(hào)進(jìn)行邏輯運算就(jiù)等于(yú)輸入(rù)一(yī)个(gè)地(dì)址進(jìn)行查找(zhǎo)表(biǎo),找(zhǎo)出(chū)相應(yìng)的(de)內(nèi)容,然後(hòu)輸出(chū)即可(kě)。
以(yǐ)实現(xiàn)y=(a&b)|c的(de)功能(néng)为(wèi)例。如(rú)果(guǒ)是(shì)ASIC,下(xià)面(miàn)就(jiù)是(shì)基本(běn)的(de)实現(xiàn)結構:
图(tú) 1
而(ér)在(zài)FPGA,用(yòng)戶首先(xiān)写出(chū)“y=(a&b)|c”代(dài)碼,软(ruǎn)件(jiàn)工具(QUARTUS、ISE或(huò)VIVADO)分(fēn)析这(zhè)一(yī)行代(dài)碼,得出(chū)a、b、c不(bù)同(tóng)值下(xià)(共(gòng)8種(zhǒng)不(bù)同(tóng)值),y的(de)值分(fēn)别是(shì)多(duō)少(shǎo)。

然後(hòu)软(ruǎn)件(jiàn)工具将結果(guǒ)写到(dào)LUT上(shàng),從而(ér)实現(xiàn)了(le)該代(dài)碼的(de)功能(néng)。下(xià)图(tú)就(jiù)是(shì)FPGA的(de)实現(xiàn)基本(běn)結構。LUT就(jiù)像一(yī)个(gè)RAM,abc則相當于(yú)地(dì)址,通(tòng)过(guò)abc的(de)地(dì)址就(jiù)得读(dú)到(dào)值賦給(gěi)y。
图(tú) 2
3 更(gèng)为(wèi)複雜的(de)FPGA架構
赛靈思(sī)公司在(zài)1985年(nián)推出(chū)的(de)第(dì)一(yī)块(kuài)FPGA—XC2064包(bāo)含8×8=64的(de)邏輯块(kuài)阵(zhèn)列,每个(gè)邏輯块(kuài)包(bāo)含一(yī)个(gè)四(sì)輸入(rù)查找(zhǎo)表(biǎo)及(jí)其它(tā)一(yī)些簡單功能(néng)。由(yóu)于(yú)它(tā)们(men)的(de)容量(liàng)非(fēi)常有(yǒu)限,因(yīn)此(cǐ)早(zǎo)期(qī)的(de)FPGA只(zhī)用(yòng)来(lái)執行一(yī)些相对(duì)簡單的(de)任务,比如(rú)集中(zhōng)一(yī)些胶(jiāo)合邏輯,或(huò)实現(xiàn)基本(běn)的(de)狀态機(jī)。
随着时(shí)間(jiān)的(de)推移和(hé)工藝节(jié)點(diǎn)的(de)進(jìn)步,FPGA的(de)容量(liàng)和(hé)性(xìng)能(néng)不(bù)斷得到(dào)提(tí)高(gāo),功耗卻不(bù)斷的(de)下(xià)降。直(zhí)到(dào)大約2006年(nián)以(yǐ)前(qián)廣泛使用(yòng)的(de)一(yī)直(zhí)是(shì)四(sì)輸入(rù)查找(zhǎo)表(biǎo),一(yī)些高(gāo)端器件(jiàn)可(kě)能(néng)使用(yòng)六(liù)、七(qī)或(huò)八(bā)輸入(rù)的(de)查找(zhǎo)表(biǎo)。这(zhè)些大家(jiā)夥可(kě)能(néng)被(bèi)用(yòng)作一(yī)个(gè)大的(de)查找(zhǎo)表(biǎo),或(huò)分(fēn)裂成(chéng)许多(duō)更(gèng)小的(de)功能(néng),比如(rú)两(liǎng)个(gè)四(sì)輸入(rù)的(de)查找(zhǎo)表(biǎo)或(huò)一(yī)个(gè)三(sān)輸入(rù)一(yī)个(gè)五(wǔ)輸入(rù)的(de)查找(zhǎo)表(biǎo)。在(zài)实際的(de)高(gāo)端器件(jiàn)中(zhōng),这(zhè)種(zhǒng)可(kě)編程構造可(kě)以(yǐ)描述相當于(yú)百(bǎi)万(wàn)級(有(yǒu)时(shí)甚至(zhì)千(qiān)万(wàn)級)的(de)原始邏輯門(mén)。
如(rú)果(guǒ)某个(gè)邏輯功能(néng)(比方(fāng)说(shuō)計(jì)數器)是(shì)用(yòng)FPGA的(de)可(kě)編程構造实現(xiàn)的(de),那(nà)麼(me)这(zhè)个(gè)功能(néng)可(kě)以(yǐ)被(bèi)说(shuō)成(chéng)“软(ruǎn)功能(néng)”,我(wǒ)们(men)稱之为(wèi)软(ruǎn)內(nèi)核。相比之下(xià),如(rú)果(guǒ)某个(gè)功能(néng)是(shì)直(zhí)接用(yòng)芯片(piàn)实現(xiàn)的(de),則被(bèi)说(shuō)成(chéng)“硬(yìng)功能(néng)”,我(wǒ)们(men)一(yī)般稱之为(wèi)硬(yìng)內(nèi)核。软(ruǎn)內(nèi)核的(de)优勢在(zài)于(yú),你可(kě)以(yǐ)讓它(tā)们(men)做你想(xiǎng)讓它(tā)们(men)做的(de)任何事(shì),注意(yì),是(shì)數字(zì)功能(néng),不(bù)包(bāo)括模拟功能(néng)。硬(yìng)內(nèi)核的(de)优勢是(shì)它(tā)们(men)占用(yòng)較少(shǎo)的(de)矽片(piàn)面(miàn)積,具有(yǒu)較高(gāo)的(de)性(xìng)能(néng),并且功耗較低,并且硬(yìng)內(nèi)核可(kě)用(yòng)于(yú)实現(xiàn)模拟功能(néng)。例如(rú)鎖相环(huán)的(de)倍頻功能(néng),这(zhè)需要(yào)用(yòng)于(yú)模拟電(diàn)路(lù),所(suǒ)以(yǐ)这(zhè)一(yī)部(bù)分(fēn)是(shì)在(zài)FPGA內(nèi)部(bù)用(yòng)硬(yìng)件(jiàn)来(lái)实現(xiàn)的(de)。
4 带(dài)嵌入(rù)式处理器的(de)FPGA
我(wǒ)们(men)可(kě)以(yǐ)用(yòng)FPGA中(zhōng)的(de)普通(tòng)可(kě)編程構造做的(de)事(shì)情(qíng)之一(yī)是(shì),使用(yòng)其中(zhōng)的(de)一(yī)部(bù)分(fēn)实現(xiàn)一(yī)个(gè)或(huò)多(duō)个(gè)软(ruǎn)处理器內(nèi)核。當然,你可(kě)以(yǐ)实現(xiàn)不(bù)同(tóng)規模的(de)处理器。舉例来(lái)说(shuō),你可(kě)以(yǐ)創建一(yī)个(gè)或(huò)多(duō)个(gè)8位的(de)处理器,加上(shàng)一(yī)个(gè)或(huò)多(duō)个(gè)16位或(huò)32位的(de)软(ruǎn)处理器—所(suǒ)有(yǒu)处理器都在(zài)同(tóng)一(yī)器件(jiàn)中(zhōng)。
如(rú)果(guǒ)FPGA供應(yìng)商希望提(tí)供一(yī)个(gè)占用(yòng)較少(shǎo)矽片(piàn)面(miàn)積、消耗較低功率但性(xìng)能(néng)更(gèng)高(gāo)的(de)处理器,解(jiě)決方(fāng)案(àn)是(shì)将它(tā)实現(xiàn)为(wèi)硬(yìng)內(nèi)核。現(xiàn)在(zài)流行的(de)ZYNQ,就(jiù)是(shì)由(yóu)赛靈思(sī)公司推出(chū)的(de),內(nèi)部(bù)集成(chéng)了(le)ARM硬(yìng)核的(de)FPGA芯片(piàn)。考慮下(xià)面(miàn)所(suǒ)示这(zhè)个(gè)例子:
图(tú) 3
图(tú)4:一(yī)種(zhǒng)新的(de)SoC FPGA
这(zhè)个(gè)芯片(piàn)完全(quán)以(yǐ)硬(yìng)內(nèi)核方(fāng)式实現(xiàn)的(de)双(shuāng)路(lù)ARM Cortex-A9微控制器子系(xì)統(運行时(shí)鐘(zhōng)高(gāo)达(dá)1GHz,包(bāo)含浮點(diǎn)引擎,片(piàn)上(shàng)緩存,計(jì)數器,定(dìng)时(shí)器等),以(yǐ)及(jí)種(zhǒng)類(lèi)廣泛的(de)硬(yìng)內(nèi)核接口(kǒu)功能(néng)(SPI,I2C,CAN等),還(huán)有(yǒu)一(yī)个(gè)硬(yìng)內(nèi)核的(de)動(dòng)态內(nèi)存控制器,所(suǒ)有(yǒu)这(zhè)些組件(jiàn)都利用(yòng)大量(liàng)傳統的(de)可(kě)編程構造和(hé)大量(liàng)的(de)通(tòng)用(yòng)輸入(rù)輸出(chū)(GPIO)引脚進(jìn)行了(le)性(xìng)能(néng)增強(qiáng)。
如(rú)果(guǒ)需要(yào)高(gāo)速、高(gāo)性(xìng)能(néng)的(de)处理器,并且需要(yào)实現(xiàn)邏輯編程时(shí),傳統的(de)方(fāng)法是(shì)在(zài)電(diàn)路(lù)板上(shàng)放(fàng)置处理器(如(rú)ARM、DSP等)和(hé)FPGA,ARM或(huò)者(zhě)DSP工程师(shī)实現(xiàn)软(ruǎn)件(jiàn)部(bù)分(fēn),FPGA工程师(shī)实現(xiàn)可(kě)編程邏輯部(bù)分(fēn),两(liǎng)者(zhě)協同(tóng)合作。現(xiàn)在(zài)最(zuì)新的(de)方(fāng)案(àn),就(jiù)可(kě)以(yǐ)使用(yòng)ZYNQ一(yī)个(gè)芯片(piàn),以(yǐ)更(gèng)低的(de)功耗、更(gèng)高(gāo)的(de)速度(dù)实現(xiàn)上(shàng)面(miàn)的(de)功能(néng)。
如(rú)果(guǒ)是(shì)ZYNQ單芯片(piàn)方(fāng)案(àn),是(shì)不(bù)是(shì)意(yì)味着只(zhī)需要(yào)软(ruǎn)件(jiàn)工程师(shī)或(huò)者(zhě)FPGA工程师(shī)独立工作就(jiù)可(kě)以(yǐ)了(le)呢?笔(bǐ)者(zhě)現(xiàn)时(shí)所(suǒ)了(le)解(jiě)的(de)情(qíng)況是(shì):FPGA工程师(shī)負責搭建周邊(biān)電(diàn)路(lù),如(rú)ARM的(de)接口(kǒu)、时(shí)鐘(zhōng)配置等,還(huán)負責可(kě)編程邏輯部(bù)分(fēn)的(de)開(kāi)發(fà)。而(ér)软(ruǎn)件(jiàn)部(bù)分(fēn)仍然還(huán)是(shì)软(ruǎn)件(jiàn)工程师(shī)負責。这(zhè)主(zhǔ)要(yào)原因(yīn)是(shì),FPGA邏輯開(kāi)發(fà)和(hé)软(ruǎn)件(jiàn)開(kāi)發(fà)都是(shì)專業性(xìng)比較強(qiáng)的(de)技能(néng),非(fēi)常少(shǎo)的(de)工程师(shī)能(néng)同(tóng)时(shí)掌握这(zhè)两(liǎng)个(gè)技能(néng)。當然,这(zhè)里(lǐ)说(shuō)的(de)掌握性(xìng)能(néng),是(shì)專業性(xìng)的(de)、能(néng)應(yìng)用(yòng)到(dào)企業項目的(de)技能(néng),只(zhī)是(shì)接觸一(yī)下(xià)的(de)不(bù)算。
5 編程方(fāng)式
FPGA是(shì)由(yóu)存放(fàng)在(zài)片(piàn)內(nèi)的(de)RAM来(lái)設置其工作狀态的(de),因(yīn)此(cǐ)工作室(shì)需要(yào)对(duì)片(piàn)內(nèi)RAM進(jìn)行編程。用(yòng)戶可(kě)根(gēn)據(jù)不(bù)同(tóng)的(de)配置模式,采用(yòng)不(bù)同(tóng)的(de)編程方(fāng)式。FPGA有(yǒu)如(rú)下(xià)幾(jǐ)種(zhǒng)配置模式:
1、并行模式:并行PROM、Flash配置FPGA;
2、主(zhǔ)從模式:一(yī)片(piàn)PROM配置多(duō)片(piàn)FPGA;
3、串行模式:串行PROM配置FPGA;
4、外(wài)設模式:将FPGA作为(wèi)微处理器的(de)外(wài)設,由(yóu)微处理器对(duì)其編程。
目前(qián),FPGA市(shì)场占有(yǒu)率最(zuì)高(gāo)的(de)两(liǎng)大公司Xlinx和(hé)Altera生(shēng)産的(de)FPGA都是(shì)基于(yú)SRAM工藝的(de),需要(yào)在(zài)使用(yòng)时(shí)外(wài)接一(yī)个(gè)片(piàn)外(wài)存儲器以(yǐ)保存程序。上(shàng)電(diàn)时(shí),FPGA将外(wài)部(bù)存儲其中(zhōng)的(de)數據(jù)读(dú)入(rù)片(piàn)內(nèi)RAM,完成(chéng)配置後(hòu),進(jìn)入(rù)工作狀态;掉電(diàn)後(hòu)FPGA恢複为(wèi)白片(piàn),內(nèi)部(bù)邏輯消失。这(zhè)樣(yàng)FPGA不(bù)僅能(néng)反(fǎn)複使用(yòng),還(huán)无需專門(mén)的(de)FPGA編程器,只(zhī)需通(tòng)用(yòng)的(de)EPROM、PROM編程器即可(kě)。








