⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨


官方(fāng)論壇
官方(fāng)淘寶(bǎo)
官方(fāng)博客
微信(xìn)公衆号(hào)
點(diǎn)擊聯系(xì)吴工 點(diǎn)擊聯系(xì)周老(lǎo)师(shī)
您的(de)當前(qián)位置:主(zhǔ)页(yè)-old > 教程中(zhōng)心(xīn) > 認識FPGA >

談一(yī)談FPGA研發(fà)心(xīn)得

發(fà)布(bù)时(shí)間(jiān):2023-06-30   作者(zhě):fpga王子 浏覽量(liàng):
首先(xiān)来(lái)说(shuō):
FPGA是(shì)一(yī)種(zhǒng)器件(jiàn)。其英文(wén)名 feild programable gate arry 。很长,但不(bù)通(tòng)俗。通(tòng)俗来(lái)说(shuō),是(shì)一(yī)種(zhǒng)功能(néng)強(qiáng)大似乎无所(suǒ)不(bù)能(néng)的(de)器件(jiàn)。通(tòng)常用(yòng)于(yú)通(tòng)信(xìn)、网(wǎng)絡、图(tú)像处理、工業控制等不(bù)同(tóng)領域的(de)器件(jiàn)。就(jiù)像ARM、DSP等嵌入(rù)式器件(jiàn)一(yī)樣(yàng),成(chéng)为(wèi)无數碼農碼工们(men)情(qíng)感(gǎn)傾瀉而(ér)出(chū)的(de)代(dài)碼真(zhēn)正(zhèng)獲得生(shēng)命的(de)地(dì)方(fāng)。只(zhī)不(bù)过(guò),一(yī)樣(yàng)的(de)編程,卻是(shì)不(bù)一(yī)樣(yàng)的(de)思(sī)想(xiǎng)。嵌入(rù)式软(ruǎn)件(jiàn)人(rén)員看(kàn)到(dào)的(de)是(shì)C。而(ér)FPGA工程师(shī)看(kàn)到(dào)是(shì)硬(yìng)件(jiàn)描述語(yǔ)言,verilog或(huò)VHDL。软(ruǎn)件(jiàn)看(kàn)到(dào)是(shì)函(hán)數、对(duì)象(xiàng)、重(zhòng)構。FPGA工程师(shī)則是(shì)模块(kuài)、流水(shuǐ)、複用(yòng)。從現(xiàn)象(xiàng)上(shàng)看(kàn),都是(shì)代(dài)碼到(dào)下(xià)载程序再到(dào)硬(yìng)件(jiàn)上(shàng)運行。不(bù)能(néng)只(zhī)看(kàn)現(xiàn)象(xiàng)而(ér)忽略本(běn)質(zhì)。FPGA 開(kāi)發(fà)本(běn)質(zhì)上(shàng)是(shì)設計(jì)一(yī)颗(kē)IC,“**的(de)身(shēn)子,丫鬟的(de)命”不(bù)是(shì)所(suǒ)有(yǒu)verilog/VHDL代(dài)碼,都能(néng)獲得青(qīng)睐去(qù)流片(piàn)成(chéng)为(wèi)真(zhēn)正(zhèng)的(de)芯片(piàn),而(ér)更(gèng)多(duō)的(de)則成(chéng)为(wèi)運行在(zài)FPGA器件(jiàn)上(shàng),成(chéng)为(wèi)完成(chéng)相同(tóng)功能(néng)的(de)替代(dài)品。其实現(xiàn)的(de)功能(néng)卻一(yī)點(diǎn)也(yě)不(bù)遜色(sè)于(yú)百(bǎi)万(wàn)身(shēn)價流片(piàn)的(de)近(jìn)親。從而(ér)成(chéng)为(wèi)独樹(shù)一(yī)幟的(de)行業。
FPGA開(kāi)發(fà)的(de)流程,是(shì)通(tòng)过(guò)verilog/VHDL等硬(yìng)件(jiàn)描述語(yǔ)言通(tòng)过(guò)EDA工具編譯、綜合、布(bù)局(jú)布(bù)線(xiàn)成(chéng)为(wèi)下(xià)载文(wén)件(jiàn),最(zuì)終(zhōng)加载到(dào)FPGA器件(jiàn)中(zhōng)去(qù),完成(chéng)所(suǒ)实現(xiàn)的(de)功能(néng)。那(nà)硬(yìng)件(jiàn)描述語(yǔ)言描述的(de)是(shì)什麼(me)?这(zhè)里(lǐ)描述的(de)就(jiù)是(shì)組合邏輯電(diàn)路(lù)和(hé)时(shí)序邏輯電(diàn)路(lù)。組合邏輯電(diàn)路(lù)就(jiù)是(shì)大家(jiā)所(suǒ)熟知的(de) 與(yǔ)門(mén)、或(huò)門(mén)、非(fēi)門(mén)。时(shí)序邏輯電(diàn)路(lù)則是(shì)觸發(fà)器。數字(zì)芯片(piàn)上(shàng)絕大部(bù)分(fēn)邏輯都是(shì)这(zhè)两(liǎng)種(zhǒng)邏輯实現(xiàn)的(de)。也(yě)就(jiù)是(shì)基本(běn)上(shàng)每个(gè)電(diàn)子行業的(de)人(rén)所(suǒ)学过(guò)的(de)數字(zì)電(diàn)路(lù)。順便说(shuō)一(yī)下(xià),感(gǎn)謝香農大师(shī),在(zài)其碩士畢業論文(wén)<繼電(diàn)器與(yǔ)開(kāi)關(guān)電(diàn)路(lù)的(de)符号(hào)分(fēn)析>就(jiù)奠定(dìng)了(le)數字(zì)電(diàn)路(lù)的(de)的(de)根(gēn)基。只(zhī)不(bù)过(guò)在(zài)FPGA中(zhōng),與(yǔ)或(huò)非(fēi)的(de)操作變(biàn)成(chéng)了(le)查找(zhǎo)表(biǎo)的(de)操作。于(yú)是(shì)所(suǒ)有(yǒu)的(de)數字(zì)電(diàn)路(lù)變(biàn)成(chéng)了(le)查找(zhǎo)表(biǎo)和(hé)寄存器,这(zhè)就(jiù)構成(chéng)了(le)FPGA的(de)基礎。查找(zhǎo)表(biǎo)負責邏輯实現(xiàn),寄存器存儲電(diàn)路(lù)狀态。二(èr)者(zhě)配合,双(shuāng)劍合璧,天(tiān)衣(yī)无縫。这(zhè)是(shì)最(zuì)初的(de)FPGA的(de)雛形。 現(xiàn)代(dài)FPGA內(nèi)部(bù)出(chū)了(le)查找(zhǎo)表(biǎo)和(hé)寄存器之外(wài),還(huán)有(yǒu)RAM块(kuài),用(yòng)于(yú)存儲大量(liàng)的(de)數據(jù)块(kuài),这(zhè)是(shì)因(yīn)为(wèi)RAM块(kuài)較寄存器来(lái)存儲大量(liàng)數據(jù)更(gèng)能(néng)节(jié)省(shěng)芯片(piàn)实現(xiàn)的(de)面(miàn)積。FPGA內(nèi)部(bù)的(de)时(shí)序電(diàn)路(lù)則需要(yào)时(shí)鐘(zhōng)的(de)輸入(rù),通(tòng)常FPGA內(nèi)部(bù)需要(yào)时(shí)鐘(zhōng)種(zhǒng)類(lèi)較多(duō),因(yīn)此(cǐ)需要(yào)在(zài)片(piàn)內(nèi)産生(shēng)所(suǒ)需的(de)的(de)相關(guān)的(de)时(shí)鐘(zhōng),如(rú)不(bù)同(tóng)頻率,不(bù)同(tóng)相位的(de)时(shí)鐘(zhōng),因(yīn)此(cǐ)时(shí)鐘(zhōng)管(guǎn)理單元(yuán)DCM/PLL也(yě)是(shì)必不(bù)可(kě)少(shǎo)的(de)內(nèi)部(bù)部(bù)件(jiàn)。除此(cǐ)之外(wài),FPGA內(nèi)部(bù)還(huán)包(bāo)括接口(kǒu)I/O,I/O分(fēn)为(wèi)普通(tòng)I/O和(hé)高(gāo)速I/O,高(gāo)速I/O支持(chí)例如(rú)高(gāo)速的(de)SERDES,用(yòng)于(yú)实現(xiàn)XAUI,PCIE等高(gāo)速接口(kǒu),这(zhè)些接口(kǒu)動(dòng)辄幾(jǐ)Gbps到(dào)10Gbps以(yǐ)上(shàng)。此(cǐ)外(wài)種(zhǒng)類(lèi)多(duō)種(zhǒng)多(duō)樣(yàng)的(de)硬(yìng)核IP也(yě)是(shì)各(gè)FPGA廠(chǎng)商差异(yì)化(huà)競争利器,例如(rú)POWERPC、ARM等硬(yìng)核IP。從而(ér)構成(chéng)CPU+FPGA于(yú)一(yī)體(tǐ)的(de)集可(kě)編程性(xìng)和(hé)可(kě)重(zhòng)構的(de)处理平台(tái)。因(yīn)此(cǐ),相对(duì)来(lái)所(suǒ),FPGA虽然發(fà)展(zhǎn)有(yǒu)二(èr)三(sān)十(shí)年(nián)的(de)曆史,其基本(běn)架構一(yī)直(zhí)不(bù)變(biàn)不(bù)大。
回(huí)到(dào)問(wèn)題(tí)開(kāi)始的(de)地(dì)方(fāng),FPGA的(de)英文(wén)翻譯过(guò)来(lái)是(shì)現(xiàn)场可(kě)編程門(mén)阵(zhèn)列。这(zhè)是(shì)相对(duì)ASIC来(lái)说(shuō)的(de),ASIC的(de)硬(yìng)件(jiàn)也(yě)可(kě)看(kàn)做是(shì)門(mén)阵(zhèn)列,但是(shì)其是(shì)非(fēi)可(kě)編程的(de)器件(jiàn)。流片(piàn)完成(chéng)其功能(néng)就(jiù)固化(huà)了(le),而(ér)FPGA的(de)可(kě)編程性(xìng)就(jiù)在(zài)其能(néng)够重(zhòng)新下(xià)载配置文(wén)件(jiàn),来(lái)改變(biàn)其內(nèi)在(zài)的(de)功能(néng),这(zhè)就(jiù)是(shì)其可(kě)編程性(xìng)的(de)由(yóu)来(lái)。從前(qián)端開(kāi)發(fà)流程来(lái)说(shuō),FPGA和(hé)ASIC開(kāi)發(fà)并无二(èr)至(zhì)。由(yóu)于(yú)ASIC開(kāi)發(fà)一(yī)次(cì)性(xìng)投入(rù)成(chéng)本(běn)較高(gāo),FPGA无疑是(shì)一(yī)種(zhǒng)經(jīng)濟的(de)替代(dài)方(fāng)案(àn),用(yòng)于(yú)实現(xiàn)的(de)高(gāo)速的(de)數據(jù)并行处理。如(rú)業务能(néng)够支撐大規模應(yìng)用(yòng)并且協議固化(huà),則能(néng)够分(fēn)攤成(chéng)本(běn)的(de)ASIC实現(xiàn)就(jiù)有(yǒu)成(chéng)本(běn)的(de)优勢。
FPGA作为(wèi)一(yī)種(zhǒng)器件(jiàn),技術(shù)上(shàng)主(zhǔ)要(yào)壟斷在(zài)少(shǎo)數大公司手(shǒu)中(zhōng),那(nà)就(jiù)是(shì)双(shuāng)巨头(tóu)ALTERA和(hé)XILINX。除此(cǐ)之外(wài)還(huán)有(yǒu)一(yī)些份額相对(duì)較小的(de)公司,例如(rú)ACTEL和(hé)LATTICE。不(bù)止是(shì)FPGA的(de)硬(yìng)件(jiàn)芯片(piàn),其配套(tào)的(de)EDA工具技術(shù)壁(bì)壘更(gèng)高(gāo)。因(yīn)此(cǐ)相对(duì)于(yú)CPU来(lái)说(shuō),FPGA的(de)國(guó)産化(huà)更(gèng)不(bù)乐(lè)观,不(bù)过(guò)已經(jīng)有(yǒu)國(guó)內(nèi)的(de)廠(chǎng)商来(lái)從事(shì)这(zhè)一(yī)行業,例如(rú)國(guó)微和(hé)京(jīng)微雅格等,也(yě)在(zài)一(yī)些细(xì)分(fēn)市(shì)场上(shàng)推出(chū)自(zì)己的(de)FPGA産品。
FPGA和(hé)他(tā)那(nà)些小夥伴们(men) (一(yī)) 系(xì)統架構組成(chéng)
通(tòng)常来(lái)講,“一(yī)个(gè)好(hǎo)漢三(sān)个(gè)幫”,一(yī)个(gè)完整的(de)嵌入(rù)式系(xì)統中(zhōng)由(yóu)單独一(yī)个(gè)FPGA使用(yòng)的(de)情(qíng)況較少(shǎo)。通(tòng)常由(yóu)多(duō)个(gè)器件(jiàn)組合完成(chéng),例如(rú)由(yóu)一(yī)个(gè)FPGA+CPU来(lái)構成(chéng)。通(tòng)常为(wèi)一(yī)个(gè)FPGA+ARM,ARM負責软(ruǎn)件(jiàn)配置管(guǎn)理,界面(miàn)輸入(rù)外(wài)設操作等操作,FPGA負責大數據(jù)量(liàng)運算,可(kě)以(yǐ)看(kàn)做CPU的(de)專用(yòng)協处理器来(lái)使用(yòng),也(yě)常会(huì)用(yòng)于(yú)擴展(zhǎn)外(wài)部(bù)接口(kǒu)。常用(yòng)的(de)有(yǒu)ARM+FPGA,DSP+FPGA,或(huò)者(zhě)网(wǎng)絡处理器+FPGA等種(zhǒng)種(zhǒng)架構形式,这(zhè)些架構形式構成(chéng)整个(gè)高(gāo)速嵌入(rù)式設備的(de)处理形态。
不(bù)得不(bù)说(shuō)的(de)是(shì),随着技術(shù)的(de)進(jìn)步,現(xiàn)在(zài)CPU中(zhōng)集成(chéng)的(de)單元(yuán)也(yě)随之增加,例如(rú)TI的(de)“达(dá)芬奇”架構的(de)处理器內(nèi)部(bù)通(tòng)常由(yóu)ARM+DSP構成(chéng)。同(tóng)时(shí)异(yì)構的(de)处理器形态業逐漸流行,如(rú)ARM9+ARM7的(de)結構。这(zhè)類(lèi)一(yī)个(gè)主(zhǔ)要(yào)处理系(xì)統(ARM9)外(wài)带(dài)輔助处理系(xì)統(ARM7)的(de)設計(jì),同(tóng)樣(yàng)成(chéng)为(wèi)現(xiàn)在(zài)处理器設計(jì)的(de)流行方(fāng)向(xiàng)。主(zhǔ)处理系(xì)統運行嵌入(rù)式操作系(xì)統,而(ér)輔助处理單元(yuán)則專注某一(yī)些的(de)專用(yòng)領域的(de)处理。这(zhè)些系(xì)統的(de)應(yìng)用(yòng)減少(shǎo)了(le)FPGA作为(wèi)CPU協处理單元(yuán)的(de)領域。因(yīn)为(wèi)畢竟FPGA相比ARM等流行嵌入(rù)式处理器價格要(yào)相对(duì)較高(gāo)。
在(zài)这(zhè)種(zhǒng)情(qíng)形下(xià),FPGA的(de)廠(chǎng)商似乎也(yě)感(gǎn)受到(dào)了(le)壓力,不(bù)約而(ér)同(tóng)推出(chū)了(le)带(dài)ARM硬(yìng)核的(de)FPGA,例如(rú)ALTERA的(de) 和(hé)XILINX的(de)ZYNQ和(hé)ALTERA的(de)SOC FPGA。这(zhè)是(shì)即是(shì)互相競争的(de)需要(yào),也(yě)是(shì)同(tóng)衆多(duō)CPU廠(chǎng)商一(yī)掰手(shǒu)腕的(de)傑總(zǒng)。即使在(zài)这(zhè)两(liǎng)種(zhǒng)在(zài)趨勢下(xià),經(jīng)典的(de)处理器+FPGA的(de)設計(jì)仍然可(kě)看(kàn)做为(wèi)高(gāo)性(xìng)能(néng)嵌入(rù)式系(xì)統的(de)典型配置。
經(jīng)典的(de)处理器+FPGA的(de)配置中(zhōng)有(yǒu)多(duō)種(zhǒng)的(de)架構形式,即多(duō)个(gè)处理器單元(yuán),可(kě)能(néng)是(shì)ARM,MIPS,或(huò)者(zhě)DSP,FPGA也(yě)可(kě)能(néng)是(shì)多(duō)片(piàn)的(de)配置,具體(tǐ)架構形式于(yú)具體(tǐ)处理的(de)業务相關(guān)和(hé)目标(biāo)設備的(de)定(dìng)位也(yě)相關(guān)。因(yīn)为(wèi)FPGA作为(wèi)簡單業务流大數據(jù)量(liàng)的(de)处理形态仍然是(shì)CPU无可(kě)比拟的(de)优勢,FPGA內(nèi)部(bù)可(kě)以(yǐ)開(kāi)發(fà)大量(liàng)業务數據(jù)并行,從而(ér)实現(xiàn)高(gāo)速的(de)數據(jù)处理。
在(zài)实現(xiàn)高(gāo)速处理方(fāng)面(miàn),CPU的(de)另(lìng)一(yī)个(gè)發(fà)展(zhǎn)趨勢是(shì)多(duō)核,多(duō)核处理器也(yě)能(néng)处理大數據(jù)量(liàng)的(de)業务的(de)并行,例如(rú)業界TERILA已推出(chū)64核的(de)多(duō)核处理器,采用(yòng)MIPS处理器,通(tòng)过(guò)二(èr)維MASH网(wǎng)絡連(lián)接在(zài)一(yī)起,形成(chéng)NOC的(de)結構。在(zài)性(xìng)能(néng)上(shàng)已經(jīng)和(hé)現(xiàn)有(yǒu)的(de)高(gāo)速FPGA的(de)处理能(néng)力上(shàng)不(bù)相上(shàng)下(xià)。但是(shì)多(duō)核处理器的(de)不(bù)得不(bù)说(shuō)的(de)問(wèn)題(tí)就(jiù)是(shì),同(tóng)一(yī)業务流分(fēn)配到(dào)多(duō)核处理上(shàng)後(hòu),如(rú)需交互,例如(rú)訪問(wèn)同(tóng)一(yī)資源,就(jiù)会(huì)造成(chéng)读(dú)写的(de)緩存一(yī)致(zhì)的(de)問(wèn)題(tí),解(jiě)決的(de)这(zhè)一(yī)問(wèn)題(tí)的(de)天(tiān)然思(sī)路(lù)是(shì)加鎖,即在(zài)變(biàn)量(liàng)訪問(wèn)上(shàng)加自(zì)旋鎖,但是(shì)带(dài)来(lái)的(de)問(wèn)題(tí)就(jiù)是(shì)处理性(xìng)能(néng)的(de)急劇下(xià)降。而(ér)FPGA无論并行处理和(hé)同(tóng)一(yī)變(biàn)量(liàng)的(de)訪問(wèn),都可(kě)以(yǐ)變(biàn)成(chéng)工程师(shī)的(de)設計(jì)水(shuǐ)平的(de)問(wèn)題(tí),沒(méi)有(yǒu)原理性(xìng)的(de)挑戰。
沒(méi)有(yǒu)一(yī)種(zhǒng)器件(jiàn)可(kě)以(yǐ)滿足全(quán)人(rén)類(lèi)的(de)衆多(duō)需求,因(yīn)此(cǐ)不(bù)用(yòng)担心(xīn)FPGA沒(méi)有(yǒu)用(yòng)武之地(dì)。必定(dìng)是(shì)一(yī)系(xì)列産品的(de)組合。下(xià)面(miàn)主(zhǔ)要(yào)介紹一(yī)下(xià)FPGA可(kě)以(yǐ)作为(wèi)現(xiàn)今热(rè)門(mén)场景的(de)幾(jǐ)種(zhǒng)應(yìng)用(yòng)。
(1)网(wǎng)絡存儲産品,特(tè)别是(shì)現(xiàn)在(zài)的(de)NAS,或(huò)者(zhě)SAN設備上(shàng),其存儲的(de)时(shí)間(jiān)、接口(kǒu)、安(ān)全(quán)性(xìng)等都要(yào)求較高(gāo),而(ér)FPGA无論处理性(xìng)能(néng)還(huán)是(shì)擴展(zhǎn)接口(kǒu)的(de)能(néng)力都使其在(zài)这(zhè)一(yī)領域大有(yǒu)作为(wèi)。現(xiàn)在(zài)高(gāo)端FPGA單片(piàn)就(jiù)可(kě)以(yǐ)擴展(zhǎn)32个(gè)或(huò)者(zhě)更(gèng)多(duō)4G或(huò)者(zhě)8G的(de)FC接口(kǒu)。并且其協議处理相对(duì)的(de)固定(dìng),也(yě)使FPGA在(zài)这(zhè)一(yī)領域有(yǒu)大量(liàng)的(de)可(kě)能(néng)應(yìng)用(yòng)。
(2)高(gāo)速网(wǎng)絡設備,現(xiàn)在(zài)高(gāo)速网(wǎng)絡設備10G、40/100G以(yǐ)太网(wǎng)設備領域,同(tóng)樣(yàng)FPGA也(yě)是(shì)關(guān)鍵的(de)处理部(bù)件(jiàn)。特(tè)别是(shì)IPv6的(de)商用(yòng)化(huà)及(jí)大數據(jù)对(duì)于(yú)基礎設施的(de)高(gāo)要(yào)求,都使这(zhè)一(yī)領域的(de)处理應(yìng)用(yòng)会(huì)逐漸廣泛,这(zhè)一(yī)領域通(tòng)常是(shì)高(gāo)速网(wǎng)絡处理器(NP)+FPGA的(de)典型架構。
(3)4G等通(tòng)信(xìn)設備,对(duì)于(yú)新一(yī)代(dài)通(tòng)信(xìn)基站的(de)信(xìn)号(hào)处理,FPGA+DSP阵(zhèn)列的(de)架構就(jiù)是(shì)絕配。特(tè)别是(shì)在(zài)專用(yòng)处理芯片(piàn)面(miàn)世之前(qián),这(zhè)樣(yàng)的(de)架構可(kě)以(yǐ)保證新一(yī)代(dài)通(tòng)信(xìn)基礎設施的(de)迅速研發(fà)和(hé)部(bù)署(shǔ)。
沒(méi)有(yǒu)完美的(de)架構,只(zhī)有(yǒu)合适的(de)組合,各(gè)種(zhǒng)芯片(piàn)和(hé)架構都是(shì)为(wèi)應(yìng)用(yòng)服(fú)务,互相的(de)滲透是(shì)趨勢,也(yě)是(shì)必然。FPGA相对(duì)处理器的(de)可(kě)編程領域,仍然屬于(yú)小衆(虽然人(rén)數也(yě)不(bù)少(shǎo))。但是(shì)正(zhèng)像一(yī)則笑話(huà)所(suǒ)说(shuō):大腿虽然比根(gēn)命根(gēn)子粗(cū),但決沒(méi)有(yǒu)命子重(zhòng)要(yào)。这(zhè)算開(kāi)个(gè)玩笑。FPGA的(de)实現(xiàn)为(wèi)以(yǐ)後(hòu)的(de)芯片(piàn)化(huà)留下(xià)了(le)许多(duō)可(kě)能(néng)和(hé)想(xiǎng)象(xiàng)空間(jiān),從而(ér)在(zài)應(yìng)用(yòng)大量(liàng)爆發(fà)时(shí)通(tòng)过(guò)芯片(piàn)化(huà)来(lái)大幅降低成(chéng)本(běn),这(zhè)这(zhè)也(yě)正(zhèng)是(shì)其他(tā)可(kě)編程器件(jiàn)所(suǒ)不(bù)能(néng)比拟的(de)。
FPGA和(hé)他(tā)那(nà)些小夥伴们(men) (二(èr)) 器件(jiàn)互聯
系(xì)統架構确定(dìng),下(xià)一(yī)步就(jiù)是(shì)FPGA與(yǔ)各(gè)組成(chéng)器件(jiàn)之間(jiān)互聯的(de)問(wèn)題(tí)了(le)。通(tòng)常来(lái)说(shuō),CPU和(hé)FPGA的(de)互聯接口(kǒu),主(zhǔ)要(yào)取(qǔ)決两(liǎng)个(gè)要(yào)素:
(1)CPU所(suǒ)支持(chí)的(de)接口(kǒu)。
(2)交互的(de)業务。
通(tòng)常来(lái)说(shuō),FPGA一(yī)般支持(chí)與(yǔ)CPU連(lián)接的(de)數字(zì)接口(kǒu),其常用(yòng)的(de)有(yǒu)EMIF,PCI,PCI-E,UPP,网(wǎng)口(kǒu)(MII/GMII/RGMII),DDR等接口(kǒu)。作为(wèi)總(zǒng)線(xiàn)類(lèi)接口(kǒu),FPGA通(tòng)常作为(wèi)從設備與(yǔ)CPU連(lián)接,CPU作为(wèi)主(zhǔ)設備通(tòng)过(guò)訪問(wèn)直(zhí)接映射的(de)地(dì)址对(duì)FPGA進(jìn)行訪問(wèn)。根(gēn)據(jù)是(shì)否有(yǒu)时(shí)鐘(zhōng)同(tóng)步,通(tòng)常總(zǒng)線(xiàn)訪問(wèn)分(fēn)为(wèi)同(tóng)步或(huò)异(yì)步的(de)總(zǒng)線(xiàn),根(gēn)據(jù)CPU外(wài)部(bù)總(zǒng)線(xiàn)協議有(yǒu)所(suǒ)不(bù)同(tóng),但數據(jù)、地(dì)址、控制信(xìn)号(hào)基本(běn)是(shì)總(zǒng)線(xiàn)訪問(wèn)類(lèi)型中(zhōng)總(zǒng)線(xiàn)信(xìn)号(hào)所(suǒ)不(bù)能(néng)省(shěng)略的(de)。CPU手(shǒu)册中(zhōng)会(huì)对(duì)信(xìn)号(hào)定(dìng)義和(hé)时(shí)序控制有(yǒu)着詳细(xì)的(de)说(shuō)明(míng),FPGA需要(yào)根(gēn)據(jù)这(zhè)些詳细(xì)说(shuō)明(míng)来(lái)实現(xiàn)相應(yìng)的(de)邏輯。同(tóng)时(shí)CPU還(huán)可(kě)以(yǐ)对(duì)訪問(wèn)时(shí)序進(jìn)行設置,比如(rú)最(zuì)快(kuài)时(shí)鐘(zhōng),甚至(zhì)所(suǒ)需的(de)最(zuì)小建立时(shí)間(jiān)和(hé)保持(chí)时(shí)間(jiān),这(zhè)些一(yī)般CPU都可(kě)以(yǐ)進(jìn)行設置,而(ér)这(zhè)些具體(tǐ)參數,不(bù)僅影響FPGA的(de)实現(xiàn),也(yě)決定(dìng)總(zǒng)線(xiàn)訪問(wèn)的(de)速度(dù)和(hé)效率。对(duì)于(yú)同(tóng)步總(zǒng)線(xiàn),只(zhī)需要(yào)根(gēn)據(jù)輸入(rù)时(shí)鐘(zhōng)進(jìn)行采樣(yàng)处理即可(kě),但对(duì)于(yú)异(yì)步總(zǒng)線(xiàn),則需要(yào)的(de)对(duì)進(jìn)入(rù)的(de)控制信(xìn)号(hào)進(jìn)行同(tóng)步化(huà)处理,通(tòng)常处理方(fāng)式是(shì)寄存两(liǎng)拍,去(qù)掉毛(máo)刺。因(yīn)此(cǐ)用(yòng)于(yú)采樣(yàng)的(de)时(shí)鐘(zhōng)就(jiù)與(yǔ)CPU所(suǒ)設置的(de)總(zǒng)線(xiàn)參數相關(guān),如(rú)采樣(yàng)时(shí)鐘(zhōng)較低,等控制信(xìn)号(hào)稳定(dìng)後(hòu)在(zài)譯碼後(hòu)輸出(chū),一(yī)个(gè)總(zǒng)線(xiàn)操作周期(qī)的(de)时(shí)間(jiān)就(jiù)会(huì)相对(duì)較长,其处理的(de)效率也(yě)相对(duì)較低;假如(rú)采樣(yàng)时(shí)鐘(zhōng)过(guò)快(kuài),則对(duì)關(guān)鍵路(lù)徑又是(shì)一(yī)个(gè)挑戰,因(yīn)此(cǐ)合理設定(dìng)采樣(yàng)頻率,便于(yú)接口(kǒu)的(de)移植并接口(kǒu)的(de)效率是(shì)設計(jì)的(de)關(guān)鍵點(diǎn)和(hé)平衡點(diǎn)。
对(duì)于(yú)總(zǒng)線(xiàn)型的(de)訪問(wèn)来(lái)说(shuō),數據(jù)信(xìn)号(hào)通(tòng)常为(wèi)三(sān)态信(xìn)号(hào),用(yòng)于(yú)輸入(rù)和(hé)輸出(chū)。这(zhè)種(zhǒng)設計(jì)的(de)目的(de)是(shì)为(wèi)了(le)減少(shǎo)外(wài)部(bù)連(lián)線(xiàn)的(de)數量(liàng)。因(yīn)为(wèi)數據(jù)信(xìn)号(hào)相对(duì)較多(duō)一(yī)般为(wèi)8/16/32位數據(jù)總(zǒng)線(xiàn)。總(zǒng)線(xiàn)的(de)訪問(wèn)的(de)优勢是(shì)直(zhí)接映射到(dào)系(xì)統的(de)地(dì)址區(qū)間(jiān),訪問(wèn)較为(wèi)直(zhí)观。但相对(duì)傳輸速率不(bù)高(gāo),通(tòng)常在(zài)幾(jǐ)十(shí)到(dào)100Mbps以(yǐ)下(xià)。这(zhè)種(zhǒng)原因(yīn)的(de)造成(chéng)主(zhǔ)要(yào)为(wèi)以(yǐ)下(xià)因(yīn)素(1)受制總(zǒng)線(xiàn)訪問(wèn)的(de)間(jiān)隔,總(zǒng)線(xiàn)操作周期(qī)等因(yīn)素,總(zǒng)線(xiàn)訪問(wèn)間(jiān)隔即两(liǎng)次(cì)訪問(wèn)之間(jiān)總(zǒng)線(xiàn)空閑的(de)时(shí)間(jiān),而(ér)總(zǒng)線(xiàn)操作周期(qī)为(wèi)從發(fà)起到(dào)相應(yìng)的(de)时(shí)間(jiān)。(2)不(bù)支持(chí)双(shuāng)向(xiàng)傳輸,并且FPGA需主(zhǔ)動(dòng)發(fà)起对(duì)CPU操作时(shí),一(yī)般只(zhī)有(yǒu)發(fà)起CPU的(de)中(zhōng)斷处理一(yī)種(zhǒng)方(fāng)式。这(zhè)種(zhǒng)總(zǒng)線(xiàn)型操作特(tè)點(diǎn),使其可(kě)以(yǐ)用(yòng)作系(xì)統的(de)管(guǎn)理操作,例如(rú)FPGA內(nèi)部(bù)寄存器配置,運行过(guò)程中(zhōng)所(suǒ)需參數配置,以(yǐ)及(jí)數據(jù)流量(liàng)較小的(de)信(xìn)息交互等操作。这(zhè)些操作數據(jù)量(liàng)和(hé)所(suǒ)需带(dài)宽(kuān)适中(zhōng),可(kě)以(yǐ)應(yìng)对(duì)普通(tòng)的(de)嵌入(rù)式系(xì)統的(de)处理需求。
对(duì)于(yú)大數據(jù)流量(liàng)的(de)數據(jù)交互,一(yī)般采用(yòng)專用(yòng)的(de)總(zǒng)線(xiàn)交互,其特(tè)點(diǎn)是(shì),支持(chí)双(shuāng)向(xiàng)傳輸,總(zǒng)線(xiàn)傳輸速率較快(kuài),例如(rú)GMII/RGMII、Upp、專用(yòng)LVDS接口(kǒu),及(jí)SERDES接口(kǒu)。專用(yòng)SERDES接口(kǒu)一(yī)般支持(chí)的(de)有(yǒu)PCI-E,XAUI,SGMII,SATA,Interlaken接口(kǒu)等接口(kǒu)。GMII/RGMII,專用(yòng)LVDS接口(kǒu)一(yī)般处理在(zài)1GbpS一(yī)下(xià)的(de)業务形式,而(ér)PCI-E,根(gēn)據(jù)其型号(hào)不(bù)同(tóng),支持(chí)幾(jǐ)Gbps的(de)傳輸速率。而(ér)XAUI可(kě)支持(chí)到(dào)10Gbps的(de)傳輸速率,lnterlaken接口(kǒu)可(kě)支持(chí)到(dào)40Gbps的(de)業务傳輸。
对(duì)于(yú)不(bù)同(tóng)所(suǒ)需的(de)業务形式及(jí)处理器的(de)類(lèi)型,則可(kě)選擇相應(yìng)的(de)接口(kǒu)形式,来(lái)傳輸具體(tǐ)的(de)業务。現(xiàn)今主(zhǔ)流FPGA中(zhōng)都提(tí)供的(de)各(gè)種(zhǒng)接口(kǒu)的(de)IP。選擇FPGA與(yǔ)各(gè)型CPU互聯接口(kǒu),一(yī)般選擇主(zhǔ)流的(de)應(yìng)用(yòng)交互方(fāng)案(àn),特(tè)殊的(de)接口(kǒu)缺少(shǎo)支撐IP,導致(zhì)開(kāi)發(fà)、調試、維護和(hé)兼容性(xìng)的(de)成(chéng)本(běn)都較大,同(tóng)时(shí)注意(yì)系(xì)統的(de)持(chí)續演進(jìn)的(de)需要(yào),如(rú)只(zhī)在(zài)本(běn)項目使用(yòng)一(yī)次(cì),而(ér)下(xià)一(yī)項目或(huò)開(kāi)發(fà)階(jiē)段(duàn)已摒棄此(cǐ)類(lèi)接口(kǒu),則需提(tí)前(qián)規劃(huà)技術(shù)路(lù)線(xiàn)。畢竟一(yī)个(gè)稳定(dìng)、高(gāo)效的(de)接口(kǒu)互聯是(shì)一(yī)个(gè)項目成(chéng)功的(de)基礎。
不(bù)是(shì)所(suǒ)有(yǒu)的(de)嵌入(rù)式系(xì)統都需要(yào)“高(gāo)大上(shàng)”的(de)接口(kǒu)形式,各(gè)類(lèi)低速的(de)稳定(dìng)接口(kǒu)也(yě)同(tóng)樣(yàng)在(zài)FPGA的(de)接口(kǒu)互聯中(zhōng)有(yǒu)着重(zhòng)要(yào)的(de)角(jiǎo)色(sè),其中(zhōng)UART、SPI、I2C等連(lián)接形式也(yě)非(fēi)常的(de)常見(jiàn)。畢竟,一(yī)个(gè)优秀的(de)設計(jì)不(bù)是(shì)“高(gāo)大上(shàng)”的(de)堆(duī)積,而(ér)是(shì)对(duì)需求最(zuì)小成(chéng)本(běn)的(de)滿足。适合的(de)才是(shì)最(zuì)美的(de)。
靈活性(xìng)的(de)陷阱
如(rú)果(guǒ)说(shuō)用(yòng)一(yī)个(gè)词来(lái)描述FPGA的(de)特(tè)性(xìng),靈活性(xìng)肯定(dìng)名列前(qián)茅。
FPGA的(de)靈活性(xìng)在(zài)于(yú):
(一(yī))I/O的(de)靈活性(xìng),其可(kě)以(yǐ)通(tòng)过(guò)其I/O組成(chéng)各(gè)種(zhǒng)接口(kǒu)與(yǔ)各(gè)種(zhǒng)器件(jiàn)連(lián)接,并且支持(chí)不(bù)同(tóng)的(de)電(diàn)气(qì)特(tè)性(xìng)。
(二(èr))內(nèi)部(bù)存儲器靈活性(xìng),可(kě)以(yǐ)通(tòng)过(guò)IP生(shēng)成(chéng)工具生(shēng)成(chéng)各(gè)種(zhǒng)深度(dù)和(hé)宽(kuān)度(dù)的(de)RAM或(huò)者(zhě)FIFO等。
(三(sān))邏輯的(de)靈活性(xìng),內(nèi)部(bù)邏輯通(tòng)可(kě)生(shēng)成(chéng)的(de)各(gè)種(zhǒng)類(lèi)型IP。
对(duì)于(yú)I/O接口(kǒu)来(lái)说(shuō),FPGA的(de)I/O可(kě)以(yǐ)支持(chí)不(bù)同(tóng)類(lèi)型的(de)電(diàn)平和(hé)驅動(dòng)能(néng)力,各(gè)I/O未定(dìng)義之前(qián)其地(dì)位平等,例如(rú)一(yī)个(gè)數據(jù)信(xìn)号(hào)可(kě)将其約束(shù)在(zài)任意(yì)引脚,只(zhī)要(yào)其電(diàn)平符合連(lián)接的(de)規範。因(yīn)此(cǐ)硬(yìng)件(jiàn)工程师(shī)基于(yú)这(zhè)種(zhǒng)認識,在(zài)PCB布(bù)線(xiàn)时(shí),基于(yú)布(bù)線(xiàn)需要(yào),便調整其布(bù)線(xiàn)的(de)順序,例如(rú)互換两(liǎng)个(gè)信(xìn)号(hào)的(de)位置。通(tòng)常情(qíng)況上(shàng),这(zhè)種(zhǒng)調整是(shì)沒(méi)有(yǒu)任何問(wèn)題(tí)的(de)。但是(shì)随着FPGA的(de)接口(kǒu)IP核硬(yìng)核化(huà)的(de)趨勢,逐漸由(yóu)很多(duō)的(de)接口(kǒu)IP不(bù)能(néng)支持(chí)这(zhè)種(zhǒng)調整。例如(rú)对(duì)于(yú)較早(zǎo)的(de)SDRAM或(huò)者(zhě)DDRSDRAM来(lái)说(shuō),在(zài)xilinx和(hé)ALTERA的(de)FPGA上(shàng),其數據(jù)、地(dì)址信(xìn)号(hào)等都是(shì)可(kě)調的(de)。但是(shì)随着DDR2,DDR3接口(kǒu)的(de)出(chū)現(xiàn),其IP接口(kǒu),只(zhī)能(néng)支持(chí)在(zài)某个(gè)BANK并且例化(huà)結束(shù)後(hòu)直(zhí)接生(shēng)成(chéng)相應(yìng)的(de)約束(shù)文(wén)件(jiàn),而(ér)这(zhè)些的(de)改動(dòng)将会(huì)導致(zhì)布(bù)局(jú)布(bù)線(xiàn)的(de)錯誤。另(lìng)一(yī)些例子則是(shì)一(yī)些高(gāo)速SERDES的(de)組合。例如(rú)对(duì)于(yú)XAUI接口(kǒu)来(lái)说(shuō),其硬(yìng)核IP(ALTERA)上(shàng)就(jiù)不(bù)支持(chí)4組SERDES的(de)順序互換,这(zhè)将会(huì)影響其硬(yìng)核FCS的(de)編碼。如(rú)果(guǒ)板級連(lián)接上(shàng)與(yǔ)PHY的(de)順序與(yǔ)FPGA例化(huà)IP的(de)約束(shù)不(bù)一(yī)致(zhì),則其硬(yìng)核PCS就(jiù)不(bù)能(néng)布(bù)局(jú)布(bù)線(xiàn)通(tòng)过(guò)(软(ruǎn)核FCS可(kě)以(yǐ)支持(chí)調整)。这(zhè)種(zhǒng)靈活性(xìng)認識導致(zhì)硬(yìng)件(jiàn)板級互聯的(de)問(wèn)題(tí)可(kě)謂屢見(jiàn)不(bù)鮮,特(tè)别是(shì)系(xì)統複雜度(dù)的(de)上(shàng)升(shēng),板級連(lián)線(xiàn)的(de)增加,将会(huì)導致(zhì)設計(jì)人(rén)員疏忽從而(ér)掉入(rù)“靈活性(xìng)的(de)陷阱”。解(jiě)決此(cǐ)類(lèi)問(wèn)題(tí)的(de)方(fāng)法。包(bāo)括(1)預評估,在(zài)設計(jì)之前(qián)就(jiù)在(zài)FPGA上(shàng)評估所(suǒ)需的(de)接口(kǒu)的(de)邏輯占用(yòng)、約束(shù)位置、时(shí)鐘(zhōng)需求等等,預先(xiān)評估給(gěi)系(xì)統設計(jì)提(tí)供相應(yìng)的(de)數據(jù)支撐和(hé)設計(jì)參考。(2)沟(gōu)通(tòng),对(duì)于(yú)設計(jì)的(de)變(biàn)更(gèng),要(yào)進(jìn)行有(yǒu)效沟(gōu)通(tòng),不(bù)能(néng)使铁(tiě)路(lù)警察,各(gè)管(guǎn)一(yī)段(duàn)。(3)設計(jì)評審,虽然老(lǎo)套(tào),但每个(gè)环(huán)节(jié)上(shàng)的(de)評審能(néng)有(yǒu)效減少(shǎo)掉入(rù)類(lèi)似陷阱的(de)幾(jǐ)率。
对(duì)于(yú)內(nèi)部(bù)存儲資源,大多(duō)數FPGA工程师(shī)就(jiù)是(shì)拿来(lái)就(jiù)用(yòng)的(de)狀态。而(ér)缺少(shǎo)整體(tǐ)內(nèi)部(bù)memory規劃(huà),一(yī)般来(lái)说(shuō),对(duì)于(yú)單端口(kǒu)、双(shuāng)端口(kǒu)、假双(shuāng)端口(kǒu),各(gè)型芯片(piàn)手(shǒu)册中(zhōng)都有(yǒu)明(míng)确的(de)定(dìng)義,例如(rú)xilinx的(de)SPATAN3系(xì)列中(zhōng)最(zuì)小RAM單元(yuán)为(wèi)18K。一(yī)个(gè)RAM例化(huà)最(zuì)小單位就(jiù)是(shì)18K。而(ér)新的(de)器件(jiàn)中(zhōng)最(zuì)小單位一(yī)般为(wèi)9K。也(yě)就(jiù)是(shì)说(shuō)虽然工程师(shī)例化(huà)的(de)較小的(de)RAM,例如(rú)25616.只(zhī)有(yǒu)4K,但是(shì)其也(yě)占用(yòng)一(yī)个(gè)最(zuì)小單元(yuán),根(gēn)據(jù)器件(jiàn)的(de)不(bù)同(tóng)而(ér)不(bù)同(tóng)。而(ér)亂用(yòng)双(shuāng)端口(kǒu)導致(zhì)RAM資源的(de)过(guò)分(fēn)占用(yòng)則是(shì)更(gèng)常見(jiàn)的(de)設計(jì)問(wèn)題(tí)。FPGA內(nèi)部(bù)对(duì)于(yú)單个(gè)RAM能(néng)够支持(chí)的(de)真(zhēn)双(shuāng)端口(kǒu)是(shì)有(yǒu)限制的(de)。舉例说(shuō)明(míng),对(duì)于(yú)ALTERA的(de)9K的(de)存儲單元(yuán)一(yī)般支持(chí)51218的(de)双(shuāng)端口(kǒu)RAM。但如(rú)果(guǒ)是(shì)一(yī)个(gè)25632的(de)双(shuāng)端口(kǒu)則需要(yào)占用(yòng)2个(gè)9K的(de)存儲RAM。也(yě)就(jiù)是(shì)说(shuō),RAM器件(jiàn)的(de)能(néng)力是(shì)有(yǒu)限的(de),这(zhè)取(qǔ)決于(yú)RAM的(de)外(wài)部(bù)互聯線(xiàn)是(shì)有(yǒu)限的(de),以(yǐ)刚才说(shuō)的(de)25632的(de)双(shuāng)端口(kǒu)RAM来(lái)说(shuō),其需要(yào)數據(jù)線(xiàn)就(jiù)是(shì)64根(gēn)(双(shuāng)端口(kǒu)),对(duì)于(yú)單个(gè)RAM的(de)連(lián)線(xiàn)資源来(lái)说(shuō),这(zhè)是(shì)FPGA內(nèi)部(bù)邏輯資源難以(yǐ)承受的(de)。所(suǒ)以(yǐ)根(gēn)據(jù)器件(jiàn)特(tè)定(dìng),合理規劃(huà)內(nèi)部(bù)memory資源,才能(néng)在(zài)最(zuì)大限度(dù)的(de)达(dá)到(dào)高(gāo)效的(de)利用(yòng)。
FPGA內(nèi)部(bù)可(kě)以(yǐ)例化(huà)各(gè)型IP,基于(yú)IP的(de)複用(yòng)的(de)可(kě)以(yǐ)大大增加研發(fà)的(de)進(jìn)度(dù)。但是(shì)各(gè)種(zhǒng)IP的(de)互聯之間(jiān)則需对(duì)IP的(de)特(tè)性(xìng)了(le)解(jiě)清(qīng)楚,明(míng)确IP是(shì)否为(wèi)業务所(suǒ)需的(de)IP。有(yǒu)的(de)IP和(hé)工程所(suǒ)需可(kě)能(néng)只(zhī)是(shì)名稱一(yī)致(zhì),但其功能(néng)卻不(bù)是(shì)你想(xiǎng)要(yào)的(de)。例如(rú)网(wǎng)口(kǒu)IP在(zài)MII連(lián)接方(fāng)式下(xià),是(shì)用(yòng)于(yú)FPGA連(lián)接PHY的(de)操作。如(rú)果(guǒ)FPGA與(yǔ)CPU通(tòng)过(guò)MII連(lián)接,現(xiàn)有(yǒu)的(de)IP則難以(yǐ)滿足需求。这(zhè)是(shì)因(yīn)为(wèi)MII連(lián)接PHY其所(suǒ)有(yǒu)的(de)时(shí)鐘(zhōng)都是(shì)PHY提(tí)供的(de)。CPU的(de)設計(jì)也(yě)是(shì)與(yǔ)PHY連(lián)接,其时(shí)鐘(zhōng)也(yě)有(yǒu)PHY提(tí)供。而(ér)如(rú)果(guǒ)二(èr)者(zhě)連(lián)接,就(jiù)變(biàn)成(chéng)都等着对(duì)方(fāng)提(tí)供时(shí)鐘(zhōng),則就(jiù)變(biàn)成(chéng)沒(méi)有(yǒu)时(shí)鐘(zhōng)。这(zhè)種(zhǒng)調試問(wèn)題(tí)相对(duì)来(lái)说(shuō)容易解(jiě)決,不(bù)过(guò)在(zài)系(xì)統規劃(huà)是(shì),就(jiù)需要(yào)对(duì)整个(gè)IP是(shì)否能(néng)够滿足系(xì)統的(de)設計(jì)要(yào)求,有(yǒu)着明(míng)确的(de)判斷。
靈活性(xìng)是(shì)FPGA最(zuì)大的(de)特(tè)性(xìng),在(zài)設計(jì)中(zhōng)避開(kāi)那(nà)些靈活性(xìng)的(de)陷阱,才能(néng)從FPGA整體(tǐ)上(shàng)提(tí)升(shēng)設計(jì)能(néng)力,而(ér)不(bù)是(shì)做只(zhī)会(huì)写Verilog的(de)碼農。畢竟FPGA設計(jì)不(bù)是(shì)软(ruǎn)件(jiàn)設計(jì),其最(zuì)終(zhōng)要(yào)成(chéng)为(wèi)變(biàn)成(chéng)硬(yìng)件(jiàn)承载的(de),每一(yī)行語(yǔ)句(jù)都要(yào)考慮其綜合後(hòu)的(de)電(diàn)路(lù),才能(néng)真(zhēn)正(zhèng)領会(huì)FPGA設計(jì)的(de)精髓。
“合抱之木(mù),生(shēng)于(yú)毫(háo)末(mò);九层之台(tái),起于(yú)壘土(tǔ);千(qiān)里(lǐ)之行,始于(yú)足下(xià)。” 老(lǎo)子《道(dào)德經(jīng)》

对(duì)于(yú)新手(shǒu)来(lái)说(shuō),如(rú)何上(shàng)手(shǒu)調試FPGA是(shì)關(guān)鍵的(de)一(yī)步。
对(duì)于(yú)每一(yī)个(gè)新設計(jì)的(de)FPGA板卡(kǎ),也(yě)需要(yào)從零(líng)開(kāi)始調試。
那(nà)麼(me)如(rú)何開(kāi)始調試?
下(xià)面(miàn)介紹一(yī)種(zhǒng)簡易的(de)調試方(fāng)法。
(1) 至(zhì)少(shǎo)設定(dìng)一(yī)个(gè)輸入(rù)时(shí)鐘(zhōng) input sys_clk;
(2) 設定(dìng)輸出(chū) output [N-1:0] led;
(3)設定(dìng)32位計(jì)數器 reg [31:0] led_cnt;
(4) 时(shí)鐘(zhōng)驅動(dòng)計(jì)數器開(kāi)始工作
always@(posedge sys_clk)
led_cnt <= led_cnt + 1
(5)輸出(chū)led信(xìn)号(hào)。
assign led = led_cnt[M:N];
程序完成(chéng)。
(6)設定(dìng)管(guǎn)教約束(shù)
如(rú)果(guǒ)为(wèi)XILINX FPGA ,在(zài)UCF文(wén)件(jiàn)中(zhōng) NET “sys_clk” LOC = 管(guǎn)脚名稱
如(rú)果(guǒ)为(wèi)ALTERA FPGA ,在(zài)QSF文(wén)件(jiàn)中(zhōng),添加 set_location_assignment 管(guǎn)脚名稱 -to sys_clk
其他(tā)管(guǎn)脚,可(kě)依次(cì)類(lèi)推。
(7)編譯,布(bù)局(jú)、布(bù)線(xiàn),生(shēng)成(chéng)配置文(wén)件(jiàn)。
XILINX 生(shēng)成(chéng)BIT文(wén)件(jiàn)。
ALTERA 生(shēng)成(chéng)SOF文(wén)件(jiàn)
(8)連(lián)接JTAG,下(xià)载相應(yìng)的(de)配置文(wén)件(jiàn)。
(9)观察是(shì)否閃燈(dēng)(肉(ròu)眼(yǎn)可(kě)見(jiàn))。
關(guān)于(yú)閃燈(dēng)的(de)解(jiě)釋如(rú)下(xià):
assign led = led_cnt[M:N]; led_cnt 为(wèi)32bit的(de)信(xìn)号(hào),需要(yào)幾(jǐ)个(gè)閃燈(dēng),則根(gēn)據(jù)輸入(rù)时(shí)鐘(zhōng)的(de)頻率和(hé)肉(ròu)眼(yǎn)能(néng)够分(fēn)辨的(de)时(shí)間(jiān)(100ms)。如(rú)輸出(chū)时(shí)鐘(zhōng)为(wèi)25Mhz。則閃燈(dēng)看(kàn)見(jiàn)的(de)位置能(néng)够分(fēn)批到(dào)10hz。需分(fēn)頻2.5M= 32‘h2625A0,因(yīn)此(cǐ),則需要(yào)輸出(chū)至(zhì)少(shǎo)为(wèi)led_cnt[21]位,才能(néng)看(kàn)到(dào)閃燈(dēng)。

虽然程序簡單,但是(shì),通(tòng)过(guò)調試可(kě)以(yǐ)确認:
(1)首先(xiān)可(kě)确定(dìng)JTAG下(xià)载器的(de)正(zhèng)确連(lián)接,能(néng)够正(zhèng)常下(xià)载下(xià)载文(wén)件(jiàn)。如(rú)不(bù)能(néng),常見(jiàn)問(wèn)題(tí)包(bāo)括
(一(yī))檢查是(shì)否安(ān)裝(zhuāng)驅動(dòng)。
(二(èr))下(xià)载器是(shì)否由(yóu)紅(hóng)燈(dēng)變(biàn)成(chéng)黃燈(dēng)/綠(lǜ)燈(dēng)。如(rú)紅(hóng)燈(dēng)亮(liàng)一(yī)般情(qíng)況下(xià),JTAG的(de)與(yǔ)電(diàn)路(lù)板VCC沒(méi)有(yǒu)供電(diàn)。
(三(sān))檢查JTAG連(lián)接的(de)線(xiàn)序。
(四(sì))檢查JTAG電(diàn)路(lù),檢查原理图(tú)上(shàng)TMS,TDI,TDO的(de)上(shàng)拉和(hé)下(xià)拉電(diàn)阻是(shì)否與(yǔ)datasheet中(zhōng)一(yī)致(zhì)。
通(tòng)过(guò)以(yǐ)上(shàng)四(sì)種(zhǒng)方(fāng)式,可(kě)排除絕大部(bù)分(fēn)JTAG下(xià)载的(de)錯誤。
(2)可(kě)以(yǐ)判斷晶振是(shì)否起振,下(xià)载後(hòu)无燈(dēng)閃。
(一(yī))首先(xiān),示波(bō)器查看(kàn)晶振頻率,观察晶振的(de)輸出(chū),如(rú)无輸出(chū),查看(kàn)晶振的(de)電(diàn)源和(hé)地(dì)信(xìn)号(hào),如(rú)電(diàn)源正(zhèng)常,而(ér)晶振无反(fǎn)應(yìng),則更(gèng)換晶振。
(二(èr))如(rú)无示波(bō)器,也(yě)有(yǒu)替代(dài)的(de)方(fāng)法,通(tòng)过(guò)嵌入(rù)式邏輯分(fēn)析儀抓信(xìn)号(hào)(任意(yì)信(xìn)号(hào))。如(rú)邏輯分(fēn)析儀點(diǎn)擊采樣(yàng)後(hòu)无反(fǎn)應(yìng),則无时(shí)鐘(zhōng)輸入(rù)。
这(zhè)是(shì)因(yīn)为(wèi)邏輯分(fēn)析儀也(yě)需要(yào)时(shí)鐘(zhōng)進(jìn)行邏輯值的(de)存儲。
(3)如(rú)正(zhèng)常下(xià)载後(hòu)閃燈(dēng),證明(míng)該FPGA板卡(kǎ)硬(yìng)件(jiàn)設計(jì)上(shàng)能(néng)够达(dá)到(dào)最(zuì)低限度(dù)的(de)FPGA調試狀态。
最(zuì)後(hòu),说(shuō)明(míng)一(yī)下(xià),为(wèi)什麼(me)是(shì)閃燈(dēng)而(ér)不(bù)是(shì)亮(liàng)燈(dēng)的(de)程序,这(zhè)是(shì)因(yīn)为(wèi),首先(xiān)閃燈(dēng)可(kě)以(yǐ)判斷外(wài)部(bù)晶振工作正(zhèng)常,并且由(yóu)于(yú)LED等通(tòng)常为(wèi)上(shàng)拉,也(yě)就(jiù)是(shì)说(shuō)邏輯值0表(biǎo)示燈(dēng)亮(liàng),而(ér)也(yě)不(bù)排除某硬(yìng)件(jiàn)工程师(shī)非(fēi)要(yào)下(xià)拉。邏輯1表(biǎo)示亮(liàng)。因(yīn)此(cǐ)采用(yòng)閃燈(dēng)更(gèng)加方(fāng)便。
問(wèn)題(tí):为(wèi)什麼(me)LED燈(dēng)值为(wèi)什麼(me)要(yào)上(shàng)拉?
这(zhè)是(shì)因(yīn)为(wèi):LED上(shàng)拉後(hòu),需要(yào)燈(dēng)亮(liàng)时(shí)電(diàn)流由(yóu)外(wài)部(bù)電(diàn)源提(tí)供,而(ér)下(xià)拉,燈(dēng)亮(liàng)时(shí)電(diàn)流由(yóu)芯片(piàn)的(de)CMOS電(diàn)路(lù)驅動(dòng)。这(zhè)種(zhǒng)在(zài)設計(jì)中(zhōng)應(yìng)避免。
勿用(yòng)諱言,現(xiàn)在(zài)國(guó)內(nèi)FPGA開(kāi)發(fà)還(huán)处于(yú)小作坊的(de)開(kāi)發(fà)階(jiē)段(duàn),一(yī)般都是(shì)三(sān)、四(sì)个(gè)人(rén),七(qī)八(bā)台(tái)機(jī)器.小作坊如(rú)何也(yě)能(néng)做出(chū)大成(chéng)果(guǒ)。这(zhè)是(shì)每个(gè)FPGA工程师(shī)都要(yào)面(miàn)臨的(de)問(wèn)題(tí)。架構設計(jì)是(shì)面(miàn)臨的(de)第(dì)一(yī)關(guān)。經(jīng)常有(yǒu)这(zhè)樣(yàng)的(de)項目,需求分(fēn)析,架構設計(jì)匆匆忙忙,号(hào)稱一(yī)两(liǎng)个(gè)月(yuè)開(kāi)發(fà)完畢,实際上(shàng)維護項目就(jiù)花了(le)一(yī)年(nián)半时(shí)間(jiān)。主(zhǔ)要(yào)包(bāo)括幾(jǐ)个(gè)問(wèn)題(tí),一(yī),性(xìng)能(néng)不(bù)滿足需求。二(èr),設計(jì)頻繁變(biàn)更(gèng)。三(sān),系(xì)統不(bù)稳定(dìng),調試問(wèn)題(tí)不(bù)收(shōu)斂。
磨刀(dāo)不(bù)誤砍柴工,FPGA設計(jì)的(de)需求分(fēn)析是(shì)整个(gè)設計(jì)第(dì)一(yī)步。如(rú)何将系(xì)統的(de)功能(néng)需求,轉(zhuǎn)換成(chéng)FPGA的(de)設計(jì)需求,是(shì)FPGA架構設計(jì)的(de)首要(yào)問(wèn)題(tí)。首先(xiān), 需要(yào)明(míng)确劃(huà)分(fēn)软(ruǎn)件(jiàn)和(hé)硬(yìng)件(jiàn)的(de)邊(biān)界。软(ruǎn)件(jiàn)主(zhǔ)要(yào)处理輸入(rù)輸出(chū)、界面(miàn)顯示、系(xì)統管(guǎn)理、設備維護。而(ér)FPGA則負責大數據(jù)流的(de)处理。
如(rú)果(guǒ)使用(yòng)幾(jǐ)百(bǎi)元(yuán)FPGA实現(xiàn)了(le)一(yī)个(gè)十(shí)幾(jǐ)元(yuán)單片(piàn)機(jī)就(jiù)能(néng)完成(chéng)的(de)功能(néng),就(jiù)算实現(xiàn)的(de)非(fēi)常完美,那(nà)麼(me)这(zhè)是(shì)一(yī)个(gè)什麼(me)樣(yàng)的(de)神設計(jì)?任何一(yī)个(gè)項目都要(yào)考慮成(chéng)本(běn),研發(fà)成(chéng)本(běn)、物(wù)料成(chéng)本(běn)、維護成(chéng)本(běn)等等。FPGA的(de)使用(yòng)位置必定(dìng)是(shì)其他(tā)器件(jiàn)難以(yǐ)企及(jí)的(de)优勢。
因(yīn)此(cǐ)对(duì)于(yú)一(yī)个(gè)FPGA架構設計(jì),其首先(xiān)需要(yào)考慮就(jiù)是(shì)性(xìng)能(néng),如(rú)沒(méi)有(yǒu)性(xìng)能(néng)的(de)需求,其他(tā)的(de)处理器ARM就(jiù)可(kě)能(néng)替代(dài)其功能(néng)。其次(cì)就(jiù)是(shì)接口(kǒu),用(yòng)于(yú)处理器擴展(zhǎn)其沒(méi)有(yǒu)的(de)接口(kǒu),作为(wèi)高(gāo)速接口(kǒu)轉(zhuǎn)換。最(zuì)後(hòu),需要(yào)考慮就(jiù)是(shì)可(kě)維護性(xìng),FPGA的(de)調試是(shì)非(fēi)常耗时(shí)的(de),一(yī)个(gè)大型的(de)FPGA的(de)編譯时(shí)間(jiān)在(zài)幾(jǐ)小时(shí)甚至(zhì)更(gèng)高(gāo)(通(tòng)过(guò)嵌入(rù)式分(fēn)析儀抓信(xìn)号(hào),每天(tiān)工作8小时(shí),只(zhī)能(néng)分(fēn)析两(liǎng)到(dào)三(sān)次(cì))。而(ér)软(ruǎn)件(jiàn)調試只(zhī)需make,編譯时(shí)間(jiān)以(yǐ)秒(miǎo)来(lái)記(jì)(这(zhè)个(gè)問(wèn)題(tí)可(kě)以(yǐ)通(tòng)过(guò)提(tí)升(shēng)編譯服(fú)务器性(xìng)能(néng)改善而(ér)不(bù)能(néng)消失,本(běn)質(zhì)上(shàng)要(yào)考慮可(kě)测性(xìng)設計(jì))。如(rú)果(guǒ)不(bù)考慮維護性(xìng)和(hé)可(kě)测性(xìng),調試成(chéng)本(běn)和(hé)壓力就(jiù)非(fēi)常之大。
通(tòng)常,FPGA的(de)大部(bù)分(fēn)架構設計(jì)可(kě)以(yǐ)采用(yòng)數據(jù)流驅動(dòng)的(de)方(fāng)式来(lái)实現(xiàn),例子1,假設一(yī)个(gè)实現(xiàn)視頻解(jiě)壓縮FPGA的(de)設計(jì),輸入(rù)是(shì)无線(xiàn)接口(kǒu),輸出(chū)为(wèi)顯示屏。那(nà)麼(me)輸入(rù)輸出(chū)的(de)接口(kǒu)基本(běn)就(jiù)能(néng)确定(dìng)。以(yǐ)數據(jù)流为(wèi)驅動(dòng)可(kě)以(yǐ)粗(cū)略劃(huà)分(fēn),輸入(rù)接口(kǒu)->解(jiě)壓縮模块(kuài)->視頻轉(zhuǎn)換模块(kuài)->顯示接口(kǒu)。如(rú)需要(yào)視頻緩沖,則确定(dìng)是(shì)否需要(yào)連(lián)接外(wài)部(bù)存儲器。那(nà)就(jiù)需要(yào)确認在(zài)什麼(me)位置進(jìn)行數據(jù)的(de)緩沖。通(tòng)过(guò)要(yào)支持(chí)顯示的(de)画(huà)面(miàn)的(de)質(zhì)量(liàng),就(jiù)能(néng)确認最(zuì)大碼流,同(tóng)樣(yàng)可(kě)以(yǐ)計(jì)算視頻解(jiě)壓模块(kuài)和(hé)轉(zhuǎn)換模块(kuài)的(de)計(jì)算能(néng)力,從而(ér)導出(chū)所(suǒ)需的(de)內(nèi)部(bù)總(zǒng)線(xiàn)宽(kuān)度(dù),系(xì)統頻率,以(yǐ)及(jí)子模块(kuài)个(gè)數等等。例子2,某支持(chí)通(tòng)过(guò)有(yǒu)線(xiàn)電(diàn)視网(wǎng)上(shàng)网(wǎng)電(diàn)視IP网(wǎng)關(guān),同(tóng)樣(yàng)也(yě)是(shì)輸入(rù)的(de)普通(tòng)IP网(wǎng)絡,輸出(chū)为(wèi)有(yǒu)線(xiàn)調試网(wǎng)的(de)調試解(jiě)調器。将IP報文(wén)等长填充後(hòu),在(zài)固定(dìng)时(shí)隙內(nèi)送入(rù)有(yǒu)線(xiàn)電(diàn)視网(wǎng)中(zhōng),同(tóng)樣(yàng)也(yě)是(shì)基于(yú)數據(jù)流驅動(dòng)的(de)方(fāng)式。
數據(jù)流驅動(dòng)式架構,可(kě)以(yǐ)作为(wèi)FPGA設計(jì)中(zhōng)一(yī)个(gè)最(zuì)重(zhòng)要(yào)的(de)架構。通(tòng)常来(lái)说(shuō)應(yìng)用(yòng)于(yú)IP領域、存儲領域、數字(zì)处理領域等較大型FPGA設計(jì)都是(shì)數據(jù)流驅動(dòng)式架構,主(zhǔ)要(yào)包(bāo)括輸入(rù)接口(kǒu)單元(yuán),主(zhǔ)处理單元(yuán),輸出(chū)接口(kǒu)單元(yuán)。還(huán)可(kě)能(néng)包(bāo)括,輔助处理單元(yuán)、外(wài)部(bù)存儲單元(yuán)。这(zhè)些單元(yuán)之間(jiān)一(yī)般采用(yòng)流水(shuǐ)式处理,即处理完畢後(hòu),數據(jù)打(dǎ)包(bāo)發(fà)完下(xià)一(yī)級处理。其中(zhōng)輸入(rù)輸出(chū)可(kě)能(néng)有(yǒu)多(duō)个(gè),此(cǐ)时(shí)還(huán)需要(yào)架構內(nèi)部(bù)实現(xiàn)數據(jù)的(de)交換。
另(lìng)一(yī)種(zhǒng)較为(wèi)常用(yòng)的(de)架構方(fāng)式为(wèi)調用(yòng)式架構,即一(yī)般FPGA通(tòng)过(guò)标(biāo)準接口(kǒu)如(rú)PCI、PCI-E,CPCI,PCI-X,EMIF等等。各(gè)種(zhǒng)接口(kǒu),FPGA內(nèi)部(bù)实現(xiàn)某一(yī)加速單元(yuán),如(rú)視頻加速,數據(jù)处理,格式轉(zhuǎn)換等操作。这(zhè)種(zhǒng)結構基本(běn)基本(běn)圍繞FPGA接口(kǒu)、加速單元(yuán)展(zhǎn)開(kāi),屬于(yú)數據(jù)的(de)反(fǎn)饋類(lèi)型,即处理完數據(jù)又反(fǎn)饋回(huí)接口(kǒu)模块(kuài)。
其他(tā)虽然各(gè)型各(gè)樣(yàng),如(rú)SOPC,如(rú)各(gè)型接口(kǒu),但本(běn)質(zhì)上(shàng)其都是(shì)为(wèi)上(shàng)述架構服(fú)务的(de),或(huò)做配置管(guǎn)理替代(dài)外(wài)部(bù)CPU,或(huò)在(zài)數據(jù)流中(zhōng)間(jiān)傳遞中(zhōng)間(jiān)參數。或(huò)在(zài)內(nèi)部(bù)实現(xiàn)CPU+協处理器的(de)架構,因(yīn)此(cǐ)说(shuō),无他(tā)變(biàn)化(huà)。
孫子兵法雲(yún):“兵无常勢,水(shuǐ)无常形”。但是(shì)对(duì)于(yú)一(yī)種(zhǒng)設計(jì)技術(shù)来(lái)说(shuō),沒(méi)有(yǒu)一(yī)種(zhǒng)固定(dìng)演進(jìn)的(de)架構和(hé)設計(jì),那(nà)麼(me)項目的(de)整个(gè)設計(jì)层次(cì)總(zǒng)是(shì)推到(dào)重(zhòng)来(lái),從本(běn)質(zhì)上(shàng)说(shuō),就(jiù)是(shì)一(yī)種(zhǒng)低水(shuǐ)平重(zhòng)複。如(rú)果(guǒ)總(zǒng)結規律,提(tí)煉共(gòng)性(xìng),才能(néng)在(zài)提(tí)升(shēng)設計(jì)层次(cì),在(zài)小作坊中(zhōng)取(qǔ)得大成(chéng)果(guǒ)。
架構設計(jì)漫談(二(èr))稳定(dìng)壓倒一(yī)切(qiè)
敏捷開(kāi)發(fà)宣言中(zhōng),有(yǒu)一(yī)条(tiáo)定(dìng)律是(shì)“可(kě)以(yǐ)工作的(de)软(ruǎn)件(jiàn)勝过(guò)面(miàn)面(miàn)俱到(dào)的(de)文(wén)檔”。如(rú)何定(dìng)義可(kě)可(kě)以(yǐ)工作的(de),这(zhè)就(jiù)是(shì)需求确定(dìng)後(hòu)架構設計(jì)的(de)首要(yào)問(wèn)題(tí)。而(ér)大部(bù)分(fēn)看(kàn)这(zhè)句(jù)話(huà)的(de)同(tóng)志更(gèng)喜欢後(hòu)半句(jù),用(yòng)于(yú)作为(wèi)不(bù)写文(wén)檔的(de)借(jiè)口(kǒu)。
FPGA的(de)架構設計(jì)最(zuì)首先(xiān)可(kě)以(yǐ)确定(dìng)就(jiù)是(shì)外(wài)接接口(kǒu),就(jiù)像以(yǐ)前(qián)说(shuō)的(de),稳定(dìng)可(kě)靠的(de)接口(kǒu)是(shì)成(chéng)功的(de)一(yī)半。接口(kǒu)的(de)選擇需要(yào)考慮幾(jǐ)个(gè)問(wèn)題(tí)。
1, 有(yǒu)无外(wài)部(bù)成(chéng)熟IP。一(yī)般来(lái)说(shuō),ALTERA和(hé)XILINX都提(tí)供大量(liàng)的(de)接口(kǒu)IP,采用(yòng)这(zhè)些IP能(néng)够提(tí)升(shēng)研發(fà)進(jìn)度(dù),但不(bù)同(tóng)IP在(zài)不(bù)同(tóng)FPGA上(shàng)需要(yào)不(bù)同(tóng)license,这(zhè)个(gè)需要(yào)通(tòng)过(guò)代(dài)理商来(lái)獲得(中(zhōng)國(guó)國(guó)情(qíng),软(ruǎn)件(jiàn)是(shì)不(bù)賣(mài)錢(qián)的(de))。
2, 自(zì)研接口(kǒu)IP,能(néng)否滿足时(shí)間(jiān)、進(jìn)度(dù)、稳定(dìng)性(xìng)、及(jí)兼容性(xìng)的(de)要(yào)求。
案(àn)例1設計(jì)一(yī)个(gè)网(wǎng)絡接口(kǒu)在(zài)邏輯設計(jì)上(shàng)相对(duì)簡單,比如(rú)MII接口(kǒu)等同(tóng)于(yú)4bit數據(jù)線(xiàn)的(de)25MHZ樣(yàng),而(ér)RGMII可(kě)以(yǐ)使用(yòng)双(shuāng)沿125Mhz的(de)采樣(yàng)專用(yòng)的(de)双(shuāng)沿采樣(yàng)寄存器完成(chéng)(使用(yòng)寄存器原語(yǔ))。但是(shì)如(rú)何支持(chí)與(yǔ)不(bù)同(tóng)PHY連(lián)接一(yī)个(gè)兼容性(xìng)問(wèn)題(tí)(所(suǒ)謂設計(jì)挑PHY的(de)問(wèn)題(tí),这(zhè)个(gè)問(wèn)題(tí)後(hòu)面(miàn)詳述)。
案(àn)例2:CPU通(tòng)过(guò)接口(kǒu)連(lián)接FPGA时(shí),如(rú)果(guǒ)CPU此(cǐ)时(shí)软(ruǎn)複位,則有(yǒu)管(guǎn)脚会(huì)上(shàng)拉,此(cǐ)时(shí)如(rú)果(guǒ)該管(guǎn)脚連(lián)接FPGA接口(kǒu)是(shì)控制信(xìn)号(hào)且控制信(xìn)号(hào)高(gāo)電(diàn)平有(yǒu)效,則此(cǐ)时(shí)FPGA邏輯必然出(chū)錯。同(tóng)樣(yàng)FPGA在(zài)配置时(shí),管(guǎn)教輸出(chū)高(gāo)阻,如(rú)此(cǐ)时(shí)CPU上(shàng)電(diàn)且板級電(diàn)路(lù)管(guǎn)脚上(shàng)拉,則同(tóng)樣(yàng)会(huì)導致(zhì)CPU采樣(yàng)出(chū)錯(誤操作的(de)問(wèn)題(tí))。
不(bù)能(néng)只(zhī)是(shì)考慮編写verilog代(dài)碼仿真(zhēn)能(néng)对(duì)就(jiù)行,接口(kǒu)設計(jì)應(yìng)該站在(zài)系(xì)統的(de)角(jiǎo)度(dù)来(lái)看(kàn)問(wèn)題(tí),問(wèn)題(tí)不(bù)是(shì)孤立的(de),還(huán)是(shì)互相聯系(xì)。
設計(jì)中(zhōng),如(rú)果(guǒ)需要(yào)存儲大量(liàng)數據(jù),就(jiù)需要(yào)在(zài)外(wài)部(bù)設計(jì)外(wài)部(bù)存儲器,这(zhè)是(shì)因(yīn)为(wèi)FPGA內(nèi)部(bù)RAM的(de)數量(liàng)是(shì)有(yǒu)限的(de)。是(shì)采用(yòng)SRAM、DDR2、DDR3。这(zhè)就(jiù)需要(yào)綜合考慮存儲數據(jù)大大小,因(yīn)为(wèi)SRAM的(de)容量(liàng)也(yě)有(yǒu)限,但是(shì)其接口(kǒu)簡單,实現(xiàn)簡單方(fāng)便,且读(dú)取(qǔ)延时(shí)較小。DDR2、DDR3的(de)容量(liàng)較大,接口(kǒu)複雜,但FPGA內(nèi)部(bù)有(yǒu)成(chéng)熟IP可(kě)用(yòng),但是(shì)读(dú)取(qǔ)的(de)延时(shí)較大,從發(fà)起读(dú)信(xìn)号(hào)到(dào)读(dú)回(huí)數據(jù)一(yī)般在(zài)十(shí)幾(jǐ)个(gè)时(shí)鐘(zhōng)周期(qī)以(yǐ)上(shàng)。如(rú)果(guǒ)对(duì)數據(jù)时(shí)延有(yǒu)要(yào)求,需要(yào)上(shàng)一(yī)次(cì)存儲數據(jù)作为(wèi)下(xià)一(yī)次(cì)使用(yòng),且數據(jù)量(liàng)不(bù)太大(幾(jǐ)百(bǎi)K到(dào)幾(jǐ)兆(zhào)),則SRAM是(shì)較好(hǎo)的(de)選擇。而(ér)其他(tā)方(fāng)面(miàn)DDR2/DDR3是(shì)較好(hǎo)的(de)選擇。为(wèi)什麼(me)不(bù)用(yòng)SDRAM或(huò)者(zhě)DDR。这(zhè)是(shì)因(yīn)为(wèi)設計(jì)完畢,采購会(huì)告訴你,市(shì)场上(shàng)这(zhè)樣(yàng)老(lǎo)的(de)芯片(piàn)基本(běn)都停産了(le)。
FPGA接口(kǒu)在(zài)設計(jì)選擇的(de)原則就(jiù)是(shì):能(néng)力够用(yòng),簡單易用(yòng)。特(tè)别值得一(yī)提(tí)的(de)是(shì)高(gāo)速SERDES接口(kǒu),最(zuì)好(hǎo)使用(yòng)廠(chǎng)商給(gěi)的(de)參考設計(jì),有(yǒu)硬(yìng)核則不(bù)選擇软(ruǎn)核,测試稳定(dìng)後(hòu),一(yī)定(dìng)要(yào)專門(mén)的(de)位置約束(shù),避免後(hòu)面(miàn)添加的(de)邏輯擁擠後(hòu)影響到(dào)接口(kǒu)时(shí)序,也(yě)可(kě)避免接口(kǒu)設計(jì)人(rén)員與(yǔ)最(zuì)終(zhōng)的(de)邏輯設計(jì)人(rén)員扯皮(不(bù)添加过(guò)多(duō)邏輯,接口(kǒu)是(shì)好(hǎo)用(yòng)的(de))。一(yī)个(gè)分(fēn)析高(gāo)速SERDES的(de)示波(bō)器,采樣(yàng)頻率至(zhì)少(shǎo)20G甚至(zhì)更(gèng)高(gāo)以(yǐ)上(shàng),動(dòng)辄上(shàng)百(bǎi)万(wàn),出(chū)現(xiàn)問(wèn)題(tí),不(bù)一(yī)定(dìng)有(yǒu)硬(yìng)件(jiàn)条(tiáo)件(jiàn)可(kě)調試。

回(huí)到(dào)開(kāi)头(tóu),如(rú)何定(dìng)義“可(kě)用(yòng)的(de)”設計(jì),稳定(dìng)我(wǒ)想(xiǎng)是(shì)前(qián)提(tí),而(ér)接口(kǒu)的(de)稳定(dìng)性(xìng)更(gèng)是(shì)前(qián)提(tí)的(de)前(qián)提(tí)。这(zhè)里(lǐ)稳定(dìng)包(bāo)括,滿負荷邊(biān)界测試,量(liàng)産、环(huán)境試验(yàn)等一(yī)系(xì)列稳定(dìng)可(kě)靠。而(ér)在(zài)架構設計(jì)中(zhōng),就(jiù)選擇成(chéng)熟的(de)接口(kǒu),能(néng)有(yǒu)效的(de)避免後(hòu)續流程中(zhōng)的(de)問(wèn)題(tí),從源头(tóu)保證産品的(de)質(zhì)量(liàng)。



温(wēn)馨提(tí)示:明(míng)德揚2023推出(chū)了(le)全(quán)新課程——
邏輯設計(jì)基本(běn)功修煉課,降低学習FPGA門(mén)檻的(de)同(tóng)时(shí),增加了(le)学習的(de)趣味性(xìng)

http://old.mdy-edu.com/chanpinzhongxin/peixunkecheng/2023/0215/1889.html

點(diǎn)擊→了(le)解(jiě)課程詳情(qíng)


明(míng)德揚除了(le)培訓学習還(huán)有(yǒu)項目承接業务,擅长的(de)項目主(zhǔ)要(yào)包(bāo)括的(de)方(fāng)向(xiàng)有(yǒu)以(yǐ)下(xià)幾(jǐ)个(gè)方(fāng)面(miàn):

1. MIPI視頻拼接
2. SLVS-EC轉(zhuǎn)MIPI接口(kǒu)(IMX472 IMX492)
3. PCIE采集系(xì)統
4. 图(tú)像項目
5. 高(gāo)速多(duō)通(tòng)道(dào)ADDA系(xì)統
6. 基于(yú)FPGA板卡(kǎ)研發(fà)
7. 多(duō)通(tòng)道(dào)高(gāo)靈敏電(diàn)荷放(fàng)大器
8. 射頻前(qián)端

http://old.mdy-edu.com/xmucjie/2023/0201/1865.html

點(diǎn)擊→了(le)解(jiě)項目承接業务詳情(qíng)


需要(yào)了(le)解(jiě)相關(guān)信(xìn)息可(kě)以(yǐ)聯系(xì):吴老(lǎo)师(shī)18022857217



下(xià)一(yī)篇(piān):什麼(me)是(shì)FIFO
   拓展(zhǎn)閱读(dú)
⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨