第(dì)二(èr)章(zhāng) FPGA知識大串講02_知識串聯
作者(zhě):潘文(wén)明(míng)
本(běn)文(wén)为(wèi)明(míng)德揚原創文(wén)章(zhāng),轉(zhuǎn)载請注明(míng)出(chū)处!
在(zài)上(shàng)一(yī)篇(piān)文(wén)章(zhāng)中(zhōng),我(wǒ)们(men)概括地(dì)講述了(le)FPGA的(de)一(yī)些学習誤區(qū)。本(běn)文(wén)我(wǒ)们(men)将FPGA的(de)關(guān)鍵知識串聯起来(lái),系(xì)統地(dì)介紹各(gè)个(gè)知識點(diǎn)所(suǒ)处的(de)层次(cì)和(hé)位置,为(wèi)後(hòu)面(miàn)幾(jǐ)仿篇(piān)文(wén)章(zhāng)的(de)詳细(xì)講解(jiě)做好(hǎo)鋪垫(diàn)。
第(dì)1节(jié) FPGA的(de)基本(běn)電(diàn)路(lù)結構
首先(xiān),我(wǒ)们(men)来(lái)講解(jiě)一(yī)下(xià)FPGA的(de)基本(běn)電(diàn)路(lù)結構。請看(kàn)上(shàng)图(tú)中(zhōng)左(zuǒ)邊(biān)紅(hóng)色(sè)方(fāng)框,該方(fāng)框內(nèi)包(bāo)含了(le)組合邏輯電(diàn)路(lù)以(yǐ)及(jí)一(yī)个(gè)D觸發(fà)器。組合邏輯里(lǐ)可(kě)能(néng)是(shì)加法器、減法器、選擇器,甚至(zhì)是(shì)什麼(me)都沒(méi)有(yǒu),就(jiù)是(shì)連(lián)線(xiàn);組合邏輯的(de)輸出(chū)将連(lián)接到(dào)D觸發(fà)器的(de)輸入(rù)端;D觸發(fà)器在(zài)时(shí)鐘(zhōng)的(de)驅動(dòng)下(xià),将組合邏輯的(de)運算結構,輸出(chū)到(dào)D觸發(fà)器的(de)輸出(chū)端。
上(shàng)面(miàn)代(dài)碼在(zài)綜合器的(de)作用(yòng)下(xià),其綜合的(de)FPGA電(diàn)路(lù)結構,也(yě)是(shì)組合邏輯+D觸發(fà)器的(de)形式。其中(zhōng)組合邏輯由(yóu)比較器(cnt==0、cnt==1、cnt==2就(jiù)是(shì)比較器)、選擇器(從1、2、3或(huò)者(zhě)保持(chí)不(bù)變(biàn)中(zhōng)選擇)等組成(chéng);D觸發(fà)器的(de)时(shí)鐘(zhōng)就(jiù)是(shì)代(dài)碼中(zhōng)的(de)clk,輸入(rù)則是(shì)組合邏輯的(de)結果(guǒ),輸出(chū)則是(shì)信(xìn)号(hào)cnt。
有(yǒu)读(dú)者(zhě)可(kě)能(néng)会(huì)对(duì)基本(běn)電(diàn)路(lù)結構有(yǒu)疑問(wèn),難道(dào)所(suǒ)有(yǒu)代(dài)碼都这(zhè)樣(yàng)結構吗?例如(rú)下(xià)面(miàn)代(dài)碼中(zhōng)的(de)add_cnt0和(hé)end_cnt0信(xìn)号(hào),它(tā)是(shì)由(yóu)assign設計(jì)的(de),它(tā)们(men)就(jiù)沒(méi)有(yǒu)D觸發(fà)器。
單純只(zhī)看(kàn)add_cnt0和(hé)end_cnt0的(de)代(dài)碼,貌似是(shì)沒(méi)有(yǒu)D觸發(fà)器,但仔细(xì)看(kàn)第(dì)5行和(hé)第(dì)6行,这(zhè)个(gè)两(liǎng)个(gè)信(xìn)号(hào)是(shì)參與(yǔ)了(le)判斷(事(shì)实就(jiù)是(shì)選擇器),決定(dìng)了(le)D觸發(fà)器的(de)輸出(chū)cnt0。即從add_cnt0到(dào)cnt0之間(jiān),就(jiù)是(shì)組合邏輯+D觸發(fà)器的(de)結構。
FPGA代(dài)碼是(shì)由(yóu)一(yī)个(gè)又一(yī)个(gè)ALWAYS代(dài)碼組成(chéng)的(de),这(zhè)说(shuō)明(míng)FPGA的(de)絕大部(bù)分(fēn)電(diàn)路(lù),就(jiù)是(shì)由(yóu)一(yī)个(gè)又一(yī)个(gè)“組合邏輯+D觸發(fà)器”的(de)電(diàn)路(lù)組合起来(lái)的(de),如(rú)下(xià)图(tú)
上(shàng)面(miàn)这(zhè)種(zhǒng)結構是(shì)我(wǒ)们(men)設計(jì)的(de)基本(běn)單位。这(zhè)種(zhǒng)結構還(huán)有(yǒu)一(yī)種(zhǒng)隐含的(de)意(yì)思(sī):組合邏輯決定(dìng)電(diàn)路(lù)的(de)運算及(jí)功能(néng),D觸發(fà)器就(jiù)像一(yī)个(gè)节(jié)點(diǎn),将運算結果(guǒ)保存下(xià)来(lái),为(wèi)下(xià)一(yī)級運算作準備。FPGA代(dài)碼設計(jì)过(guò)程,就(jiù)像是(shì)設計(jì)一(yī)个(gè)功能(néng),保存一(yī)下(xià),設計(jì)下(xià)一(yī)个(gè)功能(néng),保存一(yī)下(xià)。文(wén)字(zì)難以(yǐ)描述,請读(dú)者(zhě)認真(zhēn)體(tǐ)会(huì)體(tǐ)会(huì)。
還(huán)有(yǒu)注意(yì)的(de)是(shì),上(shàng)面(miàn)推薦的(de)是(shì)“組合邏輯+D觸發(fà)器”結構思(sī)維,不(bù)要(yào)使用(yòng)“D觸發(fà)器+組合邏輯”思(sī)維,这(zhè)種(zhǒng)思(sī)維是(shì)不(bù)正(zhèng)确的(de)。
再看(kàn)上(shàng)图(tú),为(wèi)什麼(me)说(shuō)FPGA代(dài)碼里(lǐ),各(gè)个(gè)ALWAYS是(shì)并行的(de)呢?從上(shàng)图(tú)就(jiù)很容易理解(jiě)了(le)。图(tú)中(zhōng)可(kě)以(yǐ)看(kàn)到(dào),三(sān)个(gè)D觸發(fà)器都連(lián)接时(shí)鐘(zhōng)CLK。當时(shí)鐘(zhōng)CLK的(de)上(shàng)升(shēng)沿的(de)时(shí)候,这(zhè)三(sān)个(gè)D觸發(fà)器将同(tóng)时(shí)受到(dào)此(cǐ)信(xìn)息,同(tóng)时(shí)将D觸發(fà)器的(de)輸入(rù)值給(gěi)到(dào)輸出(chū)。这(zhè)些電(diàn)路(lù)都是(shì)同(tóng)时(shí)工作的(de),不(bù)存在(zài)谁先(xiān)谁後(hòu)的(de)。沒(méi)有(yǒu)所(suǒ)謂说(shuō)这(zhè)个(gè)電(diàn)路(lù)在(zài)工作,另(lìng)一(yī)个(gè)不(bù)在(zài)工作的(de)情(qíng)況。
这(zhè)个(gè)就(jiù)是(shì)FPGA 的(de)基本(běn)電(diàn)路(lù)結構,读(dú)者(zhě)务必做到(dào)非(fēi)常清(qīng)楚这(zhè)个(gè)電(diàn)路(lù)結構,这(zhè)是(shì)我(wǒ)们(men)後(hòu)面(miàn)描述的(de)一(yī)个(gè)重(zhòng)要(yào)基礎。
第(dì)2节(jié) FPGA的(de)知識點(diǎn)
我(wǒ)们(men)在(zài)FPGA基礎電(diàn)路(lù)結構图(tú)的(de)基礎,将FPGA的(de)所(suǒ)有(yǒu)知識點(diǎn)串聯起来(lái),然後(hòu)通(tòng)过(guò)4篇(piān)文(wén)章(zhāng),逐一(yī)進(jìn)行詳细(xì)的(de)講解(jiě)。
1. 先(xiān)講述組合邏輯部(bù)分(fēn)。組合邏輯是(shì)由(yóu)加法器、減法器、比較器、選擇器等電(diàn)路(lù)組成(chéng)的(de),所(suǒ)以(yǐ)一(yī)開(kāi)始我(wǒ)们(men)要(yào)理解(jiě)組合邏輯的(de)電(diàn)路(lù)有(yǒu)哪些類(lèi)型;然後(hòu)據(jù)此(cǐ)掌握这(zhè)些類(lèi)型的(de)VERILOG代(dài)碼的(de)写法;接下(xià)来(lái)讨論这(zhè)些組合邏輯的(de)时(shí)序,引出(chū)組合邏輯才有(yǒu)的(de)競争和(hé)冒险現(xiàn)象(xiàng),最(zuì)後(hòu)提(tí)出(chū)競争和(hé)冒险的(de)解(jiě)決方(fāng)法。
2. 完成(chéng)組合邏輯的(de)講述後(hòu),我(wǒ)们(men)将讨論D觸發(fà)器。首先(xiān)会(huì)講解(jiě)D觸發(fà)器的(de)結構,進(jìn)而(ér)会(huì)講述D觸發(fà)器的(de)时(shí)序,讨論D觸發(fà)器时(shí)序與(yǔ)組合邏輯的(de)异(yì)同(tóng)。從D觸發(fà)器时(shí)序中(zhōng),有(yǒu)一(yī)个(gè)非(fēi)常重(zhòng)要(yào)的(de)概念:建立时(shí)間(jiān)和(hé)保持(chí)时(shí)間(jiān)。如(rú)果(guǒ)建立时(shí)間(jiān)和(hé)保持(chí)时(shí)間(jiān)不(bù)滿足,就(jiù)会(huì)有(yǒu)一(yī)个(gè)叫亞稳态的(de)情(qíng)況。亞稳态有(yǒu)什麼(me)危害,亞稳态出(chū)現(xiàn)的(de)场合有(yǒu)哪些。在(zài)明(míng)确了(le)出(chū)現(xiàn)的(de)场合後(hòu),就(jiù)要(yào)想(xiǎng)辦(bàn)法解(jiě)決亞稳态問(wèn)題(tí),提(tí)出(chū)了(le)亞稳态的(de)解(jiě)決方(fāng)法。其解(jiě)決方(fāng)法分(fēn)两(liǎng)種(zhǒng):一(yī)種(zhǒng)是(shì)單一(yī)信(xìn)号(hào),也(yě)就(jiù)是(shì)一(yī)比特(tè)信(xìn)号(hào)的(de)解(jiě)決方(fāng)法;還(huán)有(yǒu)一(yī)種(zhǒng)是(shì)多(duō)比特(tè)信(xìn)号(hào)的(de)解(jiě)決方(fāng)法。
3. 講完了(le)D觸發(fà)器之後(hòu),我(wǒ)们(men)将把組合邏輯和(hé)D觸發(fà)器聯合起来(lái)。前(qián)面(miàn)已經(jīng)講魔神,組合邏輯+D觸發(fà)器是(shì)一(yī)个(gè)正(zhèng)确的(de)的(de)電(diàn)路(lù)結構。有(yǒu)正(zhèng)确,那(nà)麼(me)就(jiù)不(bù)正(zhèng)确,根(gēn)據(jù)收(shōu)集读(dú)者(zhě)的(de)反(fǎn)饋情(qíng)況,我(wǒ)们(men)列出(chū)了(le)一(yī)些經(jīng)常会(huì)犯的(de)、不(bù)合理的(de)結構。之後(hòu)将讨論这(zhè)个(gè)基本(běn)結構的(de)时(shí)序;接下(xià)来(lái)是(shì)講述如(rú)何用(yòng)VERILOG来(lái)实現(xiàn)。实現(xiàn)的(de)話(huà),就(jiù)有(yǒu)行为(wèi)描述以(yǐ)及(jí)狀态機(jī)的(de)实現(xiàn)这(zhè)幾(jǐ)種(zhǒng)方(fāng)法了(le)。
4. 最(zuì)後(hòu)一(yī)部(bù)分(fēn),我(wǒ)们(men)将單独对(duì)时(shí)鐘(zhōng)進(jìn)行講解(jiě)。时(shí)鐘(zhōng)是(shì)FPGA的(de)一(yī)个(gè)基礎,是(shì)一(yī)个(gè)很重(zhòng)要(yào)的(de)概念,是(shì)FPGA設計(jì)的(de)重(zhòng)點(diǎn)和(hé)難點(diǎn)。首先(xiān)我(wǒ)们(men)将講述时(shí)鐘(zhōng)的(de)概念;然後(hòu)是(shì)时(shí)鐘(zhōng)抖動(dòng)SKEW和(hé)时(shí)鐘(zhōng)頻率。經(jīng)常有(yǒu)被(bèi)問(wèn)到(dào):我(wǒ)这(zhè)个(gè)電(diàn)腦CPU能(néng)跑1G,他(tā)那(nà)个(gè)電(diàn)腦CPU能(néng)跑2G,这(zhè)就(jiù)是(shì)使用(yòng)頻率。那(nà)这(zhè)个(gè)頻率取(qǔ)決于(yú)什麼(me)因(yīn)素,为(wèi)什麼(me)有(yǒu)些跑得快(kuài),有(yǒu)些跑得慢(màn)?这(zhè)个(gè)問(wèn)題(tí)将引出(chū)關(guān)鍵路(lù)徑的(de)概念。为(wèi)了(le)提(tí)高(gāo)时(shí)鐘(zhōng)頻率,我(wǒ)们(men)可(kě)以(yǐ)怎麼(me)做?流水(shuǐ)線(xiàn)的(de)設計(jì)!!!
以(yǐ)上(shàng)就(jiù)是(shì)我(wǒ)们(men)FPGA 的(de)所(suǒ)有(yǒu)知識點(diǎn),将其展(zhǎn)示到(dào)一(yī)张(zhāng)图(tú),方(fāng)便读(dú)者(zhě)使用(yòng)。

温(wēn)馨提(tí)示:明(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):








