⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ 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ī)

3.2 4位閃爍燈(dēng)設計(jì)--明(míng)德揚科教(minyingyiyuan.com)

發(fà)布(bù)时(shí)間(jiān):2021-08-22   作者(zhě):admin 浏覽量(liàng):

本(běn)文(wén)的(de)文(wén)檔編号(hào):000800000014

1、講解(jiě)了(le)如(rú)何使用(yòng)至(zhì)簡設計(jì)法来(lái)設計(jì)实現(xiàn)4位LED燈(dēng)循环(huán)閃爍的(de)功能(néng),具體(tǐ)功能(néng)位:間(jiān)隔1秒(miǎo),第(dì)N盞LED燈(dēng)亮(liàng)N秒(miǎo)(其中(zhōng),N=1.2.3.4)的(de)功能(néng)

需要(yào)看(kàn)对(duì)應(yìng)的(de)視頻,請點(diǎn)擊視頻編号(hào):000800000045


第(dì)三(sān)篇(piān) FPGA至(zhì)簡設計(jì)項目实踐


   第(dì)二(èr)章(zhāng)  4位閃爍燈(dēng)設計(jì)


第(dì)1节(jié) 項目背景

LED燈(dēng)的(de)相關(guān)理論以(yǐ)及(jí)教学板的(de)原理图(tú)已經(jīng)在(zài)第(dì)一(yī)个(gè)案(àn)例《1位閃爍燈(dēng)》中(zhōng)進(jìn)行了(le)比較詳细(xì)的(de)講解(jiě),这(zhè)里(lǐ)就(jiù)不(bù)再贅述,如(rú)果(guǒ)有(yǒu)需要(yào)可(kě)以(yǐ)返回(huí)上(shàng)一(yī)章(zhāng)進(jìn)行閱读(dú)学習。

第(dì)2节(jié) 設計(jì)目标(biāo)

開(kāi)始進(jìn)行新的(de)設計(jì)之前(qián),依旧(jiù)先(xiān)要(yào)明(míng)确本(běn)設計(jì)的(de)功能(néng)目标(biāo),这(zhè)也(yě)是(shì)本(běn)書(shū)以(yǐ)及(jí)至(zhì)簡設計(jì)法的(de)特(tè)别之处。通(tòng)过(guò)对(duì)上(shàng)一(yī)个(gè)案(àn)例的(de)学習領悟也(yě)可(kě)以(yǐ)意(yì)識到(dào)明(míng)确設計(jì)目标(biāo)的(de)重(zhòng)要(yào)性(xìng),後(hòu)續設計(jì)的(de)每一(yī)个(gè)步驟都應(yìng)該根(gēn)據(jù)功能(néng)目标(biāo)有(yǒu)進(jìn)行針(zhēn)对(duì)性(xìng)的(de)逐步展(zhǎn)開(kāi)。至(zhì)簡設計(jì)法的(de)这(zhè)一(yī)方(fāng)法讓每一(yī)段(duàn)代(dài)碼每一(yī)个(gè)步驟都有(yǒu)其相應(yìng)作用(yòng)。反(fǎn)之,在(zài)設計(jì)中(zhōng)如(rú)果(guǒ)沒(méi)有(yǒu)明(míng)确設計(jì)目标(biāo),而(ér)是(shì)按照自(zì)己的(de)想(xiǎng)法東(dōng)一(yī)錘子、西(xī)一(yī)榔头(tóu),可(kě)能(néng)最(zuì)終(zhōng)要(yào)花費成(chéng)倍的(de)时(shí)間(jiān)才能(néng)做出(chū)同(tóng)樣(yàng)的(de)成(chéng)果(guǒ)。所(suǒ)以(yǐ)再次(cì)強(qiáng)調,在(zài)設計(jì)目标(biāo)确立这(zhè)一(yī)步驟一(yī)定(dìng)不(bù)要(yào)偷懒,要(yào)認真(zhēn)思(sī)考一(yī)下(xià)本(běn)次(cì)設計(jì)最(zuì)終(zhōng)目标(biāo)是(shì)什麼(me),希望达(dá)到(dào)什麼(me)效果(guǒ),明(míng)确目标(biāo)後(hòu)再進(jìn)行設計(jì)实操才能(néng)起到(dào)事(shì)半功倍的(de)效果(guǒ)。

本(běn)工程使用(yòng)4个(gè)LED燈(dēng)(LED1~LED4)来(lái)实現(xiàn)閃爍燈(dēng)的(de)功能(néng)。具體(tǐ)功能(néng)要(yào)求为(wèi):首先(xiān)LED1暗(àn)1秒(miǎo),接着亮(liàng)1秒(miǎo)後(hòu)變(biàn)暗(àn);接着LED2暗(àn)1秒(miǎo),亮(liàng)2秒(miǎo)後(hòu)變(biàn)暗(àn);随後(hòu)LED3暗(àn)1秒(miǎo),亮(liàng)3秒(miǎo)後(hòu)變(biàn)暗(àn);最(zuì)後(hòu)LED4暗(àn)1秒(miǎo),亮(liàng)4秒(miǎo)後(hòu)變(biàn)暗(àn);至(zhì)此(cǐ)一(yī)个(gè)循环(huán)結束(shù),随後(hòu)按照此(cǐ)規律進(jìn)行循环(huán)往複。也(yě)就(jiù)是(shì)说(shuō),四(sì)个(gè)LED燈(dēng)依次(cì)循环(huán)閃爍,具體(tǐ)閃爍要(yào)求为(wèi):隔1秒(miǎo),亮(liàng)N秒(miǎo),N的(de)變(biàn)化(huà)为(wèi):1234秒(miǎo),然後(hòu)再次(cì)進(jìn)入(rù)循环(huán)。閃爍燈(dēng)變(biàn)化(huà)功能(néng)图(tú)如(rú)图(tú)3.2-1所(suǒ)示,上(shàng)板後(hòu)的(de)效果(guǒ)展(zhǎn)示可(kě)參見(jiàn)图(tú)3.2-2。可(kě)以(yǐ)登录(lù)至(zhì)簡設計(jì)法官方(fāng)网(wǎng)站观看(kàn)上(shàng)板後(hòu)的(de)演示視頻:old.mdy-edu.com/xxxx
                             

图(tú)3.2-14位閃爍燈(dēng)功能(néng)图(tú)
   
图(tú)3.2-24位閃爍燈(dēng)效果(guǒ)图(tú)
第(dì)3节(jié) 設計(jì)实現(xiàn)

與(yǔ)上(shàng)个(gè)案(àn)例相同(tóng),下(xià)面(miàn)会(huì)詳细(xì)的(de)按照步驟和(hé)思(sī)考邏輯進(jìn)行工程的(de)逐步分(fēn)析。如(rú)果(guǒ)知識掌握比較牢靠、只(zhī)想(xiǎng)練習設計(jì)工程,可(kě)以(yǐ)跳过(guò)此(cǐ)部(bù)分(fēn),直(zhí)接進(jìn)入(rù)第(dì)五(wǔ)节(jié)“簡化(huà)版步驟分(fēn)享”進(jìn)行实操練習。依旧(jiù)建議初学者(zhě)不(bù)要(yào)選擇捷徑,按照詳细(xì)思(sī)路(lù)一(yī)步步学習分(fēn)析打(dǎ)好(hǎo)基礎,在(zài)掌握思(sī)想(xiǎng)原理之後(hòu),再按照操作步驟反(fǎn)複進(jìn)行实踐。

3.1 頂层信(xìn)号(hào)

新建目录(lù):D:mdy_bookhuxiled,并在(zài)該目录(lù)中(zhōng),新建一(yī)个(gè)名为(wèi)huxiled.v的(de)文(wén)件(jiàn)。用(yòng)GVIM打(dǎ)開(kāi)該文(wén)件(jiàn)後(hòu)開(kāi)始編写代(dài)碼。这(zhè)里(lǐ)再強(qiáng)調一(yī)下(xià),建議初学者(zhě)按照本(běn)書(shū)提(tí)供的(de)文(wén)件(jiàn)路(lù)徑以(yǐ)及(jí)文(wén)件(jiàn)名進(jìn)行設置,避免不(bù)必要(yào)的(de)錯誤。

首先(xiān)應(yìng)确定(dìng)頂层信(xìn)号(hào)。由(yóu)設計(jì)目标(biāo)可(kě)知控制相應(yìng)LED燈(dēng)亮(liàng)或(huò)滅需要(yào)FPGA産生(shēng)一(yī)个(gè)信(xìn)号(hào)并将此(cǐ)信(xìn)号(hào)傳送至(zhì)LED燈(dēng)。想(xiǎng)控制LED燈(dēng)滅,則令FPGA輸出(chū)信(xìn)号(hào)为(wèi)1,想(xiǎng)控制LED燈(dēng)亮(liàng),則令FPGA輸出(chū)信(xìn)号(hào)为(wèi)0。根(gēn)據(jù)目标(biāo)可(kě)知需要(yào)分(fēn)别控制4个(gè)LED燈(dēng)亮(liàng)或(huò)滅,对(duì)應(yìng)地(dì)需要(yào)FPGA産生(shēng)4个(gè)信(xìn)号(hào)。假定(dìng)这(zhè)4个(gè)信(xìn)号(hào)分(fēn)别为(wèi)led0led1led2和(hé)led3,将其分(fēn)别與(yǔ)相應(yìng)LED燈(dēng)連(lián)接。操作中(zhōng)如(rú)果(guǒ)想(xiǎng)控制LED0亮(liàng),LED1~3滅,則應(yìng)控制FPGA輸出(chū)的(de)led0信(xìn)号(hào)为(wèi)0led1~3信(xìn)号(hào)都为(wèi)1

硬(yìng)件(jiàn)電(diàn)路(lù)图(tú)的(de)連(lián)接關(guān)系(xì)如(rú)下(xià)表(biǎo)所(suǒ)示,可(kě)以(yǐ)看(kàn)到(dào)本(běn)工程中(zhōng)LED0連(lián)接的(de)FPGA管(guǎn)脚为(wèi)AA4,对(duì)應(yìng)FPGA工程信(xìn)号(hào)为(wèi)led0LED1連(lián)接的(de)FPGA管(guǎn)脚为(wèi)AB4,对(duì)應(yìng)FPGA工程信(xìn)号(hào)为(wèi)led1LED2連(lián)接的(de)FPGA管(guǎn)脚为(wèi)AA5,对(duì)應(yìng)FPGA工程信(xìn)号(hào)为(wèi)led2LED3燈(dēng)連(lián)接的(de)FPGA管(guǎn)脚为(wèi)AB8,对(duì)應(yìng)的(de)FPGA工程信(xìn)号(hào)为(wèi)led3。工程的(de)时(shí)鐘(zhōng)管(guǎn)脚为(wèi)G1,对(duì)應(yìng)FPGA工程信(xìn)号(hào)为(wèi)clk,複位管(guǎn)脚为(wèi)AB12,对(duì)應(yìng)FPGA工程信(xìn)号(hào)为(wèi)rst_n。由(yóu)此(cǐ)可(kě)見(jiàn),本(běn)工程一(yī)共(gòng)需要(yào)六(liù)个(gè)信(xìn)号(hào):时(shí)鐘(zhōng)信(xìn)号(hào)clk、複位信(xìn)号(hào)rst_n以(yǐ)及(jí)四(sì)个(gè)LED燈(dēng)的(de)控制信(xìn)号(hào)led0led1led2和(hé)led3

表(biǎo)3.2-1信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)
  
器件(jiàn)
  
原理图(tú)信(xìn)号(hào)
FPGA管(guǎn)脚
FPGA工程信(xìn)号(hào)
  
LED0
  
LED1_NET
AA4
led0
  
LED1
  
LED2_NET
AB4
led1
  
LED2
  
LED3_NET
AA5
led2
  
LED3
  
LED4_NET
AB8
led3
  
X1
  
SYS_CLK
G1
clk
  
K1
  
SYS_RST
AB12
rst_n

基于(yú)此(cǐ)可(kě)以(yǐ)完成(chéng)頂层信(xìn)号(hào)代(dài)碼的(de)編写,将module的(de)名稱定(dìng)義为(wèi)huxiled。在(zài)頂层信(xìn)号(hào)代(dài)碼中(zhōng)需要(yào)将與(yǔ)外(wài)部(bù)相連(lián)接的(de)輸入(rù)/輸出(chū)信(xìn)号(hào)列出(chū),從而(ér)实現(xiàn)信(xìn)号(hào)與(yǔ)管(guǎn)脚的(de)連(lián)接,其具體(tǐ)代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
module huxiled(
  
clk  ,
  
rst_n  ,
  
    led0    ,
  
    led1    ,
  
    led2    ,
  
     led3
  
     );

随後(hòu)对(duì)信(xìn)号(hào)的(de)輸入(rù)輸出(chū)屬性(xìng)進(jìn)行聲明(míng),指出(chū)对(duì)于(yú)FPGA来(lái)说(shuō)这(zhè)一(yī)信(xìn)号(hào)屬于(yú)輸入(rù)還(huán)是(shì)輸出(chū),若为(wèi)輸入(rù)聲明(míng)則为(wèi)input,若为(wèi)輸出(chū)聲明(míng)則为(wèi)output。在(zài)本(běn)設計(jì)中(zhōng)由(yóu)于(yú)clk是(shì)外(wài)部(bù)晶振輸送給(gěi)FPGA的(de),因(yīn)此(cǐ)对(duì)于(yú)FPGA来(lái)说(shuō)clk为(wèi)輸入(rù)信(xìn)号(hào)input。同(tóng)樣(yàng)地(dì),rst_n是(shì)外(wài)部(bù)按鍵給(gěi)FPGA的(de),在(zài)FPGA中(zhōng)也(yě)为(wèi)輸入(rù)信(xìn)号(hào)input。同(tóng)时(shí)可(kě)知led0led1led2led3四(sì)个(gè)信(xìn)号(hào)是(shì)FPGA産生(shēng)以(yǐ)实現(xiàn)对(duì)相應(yìng)四(sì)个(gè)LED燈(dēng)的(de)控制,因(yīn)此(cǐ)led0led1led2led3为(wèi)輸出(chū)信(xìn)号(hào)output。根(gēn)據(jù)这(zhè)些信(xìn)息将輸入(rù)輸出(chū)端口(kǒu)定(dìng)義補充完整,其代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
input               clk  ;
  
input               rst_n  ;
  
  
output              led0   ;
  
output              led1   ;
  
output              led2   ;
  
output              led3   ;
3.2 信(xìn)号(hào)設計(jì)

在(zài)進(jìn)行架構設計(jì)前(qián)再次(cì)分(fēn)析一(yī)下(xià)功能(néng)需求,首先(xiān) LED1暗(àn)1秒(miǎo),亮(liàng)1秒(miǎo)變(biàn)暗(àn);接着LED2暗(àn)1秒(miǎo),亮(liàng)2秒(miǎo)後(hòu)變(biàn)暗(àn);随後(hòu)LED3暗(àn)1秒(miǎo),亮(liàng)3秒(miǎo)後(hòu)變(biàn)暗(àn);最(zuì)後(hòu)LED4暗(àn)1秒(miǎo),亮(liàng)4秒(miǎo)後(hòu)變(biàn)暗(àn),如(rú)此(cǐ)循环(huán)往複。分(fēn)析需求可(kě)以(yǐ)看(kàn)出(chū):當一(yī)个(gè)LED燈(dēng)亮(liàng)时(shí),其餘LED燈(dēng)都屬于(yú)滅的(de)狀态。如(rú)果(guǒ)将四(sì)个(gè)LED燈(dēng)看(kàn)成(chéng)一(yī)个(gè)整體(tǐ)循环(huán),可(kě)以(yǐ)把功能(néng)需求翻譯成(chéng):LED0複位後(hòu),滅1秒(miǎo),亮(liàng)1秒(miǎo)後(hòu)滅12秒(miǎo);LED1複位後(hòu),滅3秒(miǎo),亮(liàng)2秒(miǎo)後(hòu)滅9秒(miǎo);LED2複位後(hòu),滅6秒(miǎo),亮(liàng)3秒(miǎo)後(hòu)滅5秒(miǎo);LED3,滅10秒(miǎo)後(hòu)亮(liàng)4秒(miǎo),四(sì)个(gè)LED燈(dēng)以(yǐ)此(cǐ)为(wèi)規律循环(huán)往複。

下(xià)面(miàn)将以(yǐ)上(shàng)邏輯翻譯成(chéng)信(xìn)号(hào)来(lái)進(jìn)行理解(jiě):
複位後(hòu),信(xìn)号(hào)led0=1持(chí)續1秒(miǎo),接着讓led0=0持(chí)續1秒(miǎo),然後(hòu)讓led0=1持(chí)續12秒(miǎo),循环(huán)往複。
複位後(hòu),信(xìn)号(hào)led1=1持(chí)續3秒(miǎo),接着讓led1=0持(chí)續2秒(miǎo),然後(hòu)讓led1=1持(chí)續9秒(miǎo),循环(huán)往複。
複位後(hòu),信(xìn)号(hào)led2=1持(chí)續6秒(miǎo),接着讓led2=0持(chí)續3秒(miǎo),然後(hòu)讓led2=1持(chí)續5秒(miǎo),循环(huán)往複。
複位後(hòu),信(xìn)号(hào)led3=1持(chí)續10秒(miǎo),接着讓led3=0持(chí)續4秒(miǎo),循环(huán)往複。
以(yǐ)此(cǐ)为(wèi)規律的(de)信(xìn)号(hào)波(bō)形图(tú)如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)3.2-34位閃爍燈(dēng)波(bō)形图(tú)

從波(bō)形图(tú)中(zhōng)可(kě)看(kàn)出(chū)信(xìn)号(hào)led0~led3的(de)變(biàn)化(huà)單位最(zuì)小是(shì)1秒(miǎo),并且4个(gè)信(xìn)号(hào)都是(shì)以(yǐ)14秒(miǎo)为(wèi)一(yī)个(gè)周期(qī)進(jìn)行循环(huán)往複。这(zhè)樣(yàng)的(de)情(qíng)況下(xià),至(zhì)簡設計(jì)法的(de)思(sī)路(lù)是(shì)使用(yòng)2个(gè)計(jì)數器,其中(zhōng)1个(gè)計(jì)數器用(yòng)来(lái)确定(dìng)1秒(miǎo)的(de)时(shí)間(jiān),另(lìng)1个(gè)計(jì)數器用(yòng)来(lái)計(jì)1秒(miǎo)的(de)次(cì)數從而(ér)确定(dìng)一(yī)个(gè)循环(huán)即14秒(miǎo)的(de)时(shí)間(jiān)。这(zhè)两(liǎng)个(gè)計(jì)數器的(de)使用(yòng)为(wèi)led0~led3的(de)變(biàn)化(huà)时(shí)間(jiān)确定(dìng)了(le)标(biāo)準。

本(běn)設計(jì)中(zhōng)将計(jì)算1秒(miǎo)次(cì)數的(de)計(jì)數器命名为(wèi)cnt0。至(zhì)簡設計(jì)法的(de)設計(jì)規則中(zhōng)有(yǒu)講过(guò),計(jì)數器的(de)設計(jì)只(zhī)考慮两(liǎng)个(gè)因(yīn)素:加1条(tiáo)件(jiàn)和(hé)計(jì)數數量(liàng)。只(zhī)要(yào)确定(dìng)好(hǎo)相應(yìng)邏輯,就(jiù)能(néng)完成(chéng)計(jì)數器代(dài)碼設計(jì)。本(běn)工程的(de)工作时(shí)鐘(zhōng)是(shì)50MHz,时(shí)鐘(zhōng)周期(qī)即20ns,當計(jì)數器計(jì)數到(dào)1_000_000_000/20=50_000_000个(gè)的(de)时(shí)候就(jiù)意(yì)味着1秒(miǎo)时(shí)間(jiān)計(jì)时(shí)結束(shù)。該計(jì)數器始終(zhōng)不(bù)停地(dì)進(jìn)行計(jì)數,因(yīn)此(cǐ)可(kě)以(yǐ)認为(wèi)其加1条(tiáo)件(jiàn)是(shì)一(yī)直(zhí)有(yǒu)效的(de),可(kě)写成(chéng):assignadd_cnt0==1

可(kě)能(néng)会(huì)有(yǒu)同(tóng)学提(tí)出(chū)疑問(wèn):加1条(tiáo)件(jiàn)的(de)概念是(shì)什麼(me)?这(zhè)里(lǐ)以(yǐ)停車位来(lái)進(jìn)行比喻,一(yī)般情(qíng)況下(xià)对(duì)每个(gè)停車位置会(huì)進(jìn)行对(duì)應(yìng)編号(hào),但是(shì)如(rú)果(guǒ)某个(gè)位置上(shàng)放(fàng)置了(le)一(yī)块(kuài)石(dàn)头(tóu)无法作为(wèi)停車位时(shí),該位置就(jiù)不(bù)能(néng)獲得对(duì)應(yìng)的(de)編号(hào)。反(fǎn)之則可(kě)以(yǐ)認为(wèi)停車位編号(hào)的(de)加1条(tiáo)件(jiàn)就(jiù)是(shì):对(duì)應(yìng)位置上(shàng)沒(méi)有(yǒu)石(dàn)头(tóu),其可(kě)以(yǐ)繼續進(jìn)行編号(hào),即assignadd_cnt0 = “沒(méi)有(yǒu)石(dàn)头(tóu)。因(yīn)此(cǐ)如(rú)果(guǒ)在(zài)設計(jì)中(zhōng)計(jì)數器一(yī)直(zhí)沒(méi)有(yǒu)阻礙地(dì)進(jìn)行計(jì)數工作,則可(kě)以(yǐ)認为(wèi)加1条(tiáo)件(jiàn)是(shì)一(yī)直(zhí)有(yǒu)效的(de)。

以(yǐ)往進(jìn)行代(dài)碼編写这(zhè)一(yī)步驟时(shí)都是(shì)一(yī)行行的(de)輸入(rù)相應(yìng)代(dài)碼。至(zhì)簡設計(jì)法在(zài)这(zhè)里(lǐ)提(tí)供一(yī)个(gè)小技巧,在(zài)节(jié)省(shěng)編写代(dài)碼的(de)时(shí)間(jiān)的(de)同(tóng)时(shí)在(zài)一(yī)定(dìng)程度(dù)上(shàng)降低了(le)代(dài)碼的(de)出(chū)錯率。至(zhì)簡設計(jì)法将日(rì)常代(dài)碼中(zhōng)常用(yòng)到(dào)的(de)固定(dìng)部(bù)分(fēn)制作成(chéng)模板,進(jìn)行代(dài)碼編程时(shí)可(kě)以(yǐ)調用(yòng)相應(yìng)模板後(hòu)根(gēn)據(jù)邏輯輸入(rù)对(duì)應(yìng)設計(jì)的(de)變(biàn)量(liàng)将代(dài)碼補充完整。此(cǐ)处就(jiù)可(kě)以(yǐ)用(yòng)模板編写計(jì)數器代(dài)碼,下(xià)面(miàn)带(dài)領同(tóng)学们(men)一(yī)起来(lái)学習一(yī)下(xià)这(zhè)个(gè)炫酷的(de)功能(néng)。

打(dǎ)開(kāi)GVIM工具,在(zài)命令模式下(xià)輸入(rù)“:Mdyjsq”,點(diǎn)擊回(huí)車後(hòu)調出(chū)了(le)对(duì)應(yìng)模板,如(rú)下(xià)图(tú)所(suǒ)示。之後(hòu)再将本(běn)案(àn)例中(zhōng)的(de)變(biàn)量(liàng)填到(dào)模板里(lǐ)面(miàn),就(jiù)可(kě)以(yǐ)得到(dào)完整正(zhèng)确的(de)計(jì)數器代(dài)碼。

图(tú)3.2-4至(zhì)簡設計(jì)法調用(yòng)計(jì)數器代(dài)碼模板

按照上(shàng)文(wén)方(fāng)法調出(chū)計(jì)數器模板後(hòu),将本(běn)案(àn)例中(zhōng)的(de)變(biàn)量(liàng)填到(dào)模板里(lǐ)面(miàn),得到(dào)計(jì)數器cnt0的(de)完整代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
always @(posedge clk or negedge rst_n)begin
  
     if(!rst_n)begin
  
         cnt0 <= 0;
  
     end
  
     else if(add_cnt0)begin
  
         if(end_cnt0)
  
            cnt0 <= 0;
  
         else
  
            cnt0 <= cnt0 + 1;
  
     end
  
end
  
  
assign add_cnt0 = 1 ;
  
assign end_cnt0 = add_cnt0 &&  cnt0== 50_000_000-1 ;

同(tóng)樣(yàng)的(de),需要(yào)确定(dìng)用(yòng)于(yú)計(jì)时(shí)14秒(miǎo)計(jì)數器的(de)加1条(tiáo)件(jiàn)和(hé)計(jì)數數量(liàng),将該計(jì)數器命名为(wèi)cnt1。該計(jì)數器的(de)值每隔1秒(miǎo)進(jìn)行加1操作,因(yīn)此(cǐ)其加一(yī)条(tiáo)件(jiàn)为(wèi)cnt0結束(shù),用(yòng)代(dài)碼表(biǎo)示即为(wèi)end_cnt0。根(gēn)據(jù)設計(jì)目标(biāo)可(kě)知計(jì)數器cnt1用(yòng)于(yú)确定(dìng)周期(qī)时(shí)間(jiān),閃爍燈(dēng)的(de)一(yī)个(gè)周期(qī)是(shì)14秒(miǎo),因(yīn)此(cǐ)該計(jì)數器的(de)計(jì)數數量(liàng)應(yìng)为(wèi)14
此(cǐ)处可(kě)以(yǐ)繼續調用(yòng)代(dài)碼模板,在(zài)GVIM的(de)命令模式下(xià)輸入(rù)“:Mdyjsq”,點(diǎn)擊回(huí)車調出(chū)計(jì)數器模板後(hòu)将“add_cnt1”和(hé)“end_cnt1”補充完整,得到(dào)代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
always @(posedge clk or negedge rst_n)begin  
  
     if(!rst_n)begin
  
         cnt1 <= 0;
  
     end
  
     else if(add_cnt1)begin
  
         if(end_cnt1)
  
            cnt1 <= 0;
  
         else
  
            cnt1 <= cnt1 + 1;
  
     end
  
end
  
  
assign add_cnt1 = end_cnt0;
  
assign end_cnt1 = add_cnt1 &&  cnt1==14-1 ;

确定(dìng)好(hǎo)两(liǎng)个(gè)計(jì)數器的(de)代(dài)碼後(hòu)請同(tóng)学们(men)思(sī)考一(yī)下(xià)四(sì)个(gè)led輸出(chū)信(xìn)号(hào)的(de)變(biàn)化(huà)。根(gēn)據(jù)設計(jì)目标(biāo)可(kě)知,LED燈(dēng)具有(yǒu)两(liǎng)種(zhǒng)狀态:亮(liàng)和(hé)滅。对(duì)應(yìng)地(dì),四(sì)个(gè)led輸出(chū)信(xìn)号(hào)也(yě)两(liǎng)个(gè)變(biàn)化(huà)點(diǎn):變(biàn)0和(hé)變(biàn)1。下(xià)面(miàn)依次(cì)对(duì)四(sì)个(gè)led信(xìn)号(hào)變(biàn)化(huà)的(de)原因(yīn)進(jìn)行判斷,可(kě)以(yǐ)結合图(tú)3.2-3中(zhōng)的(de)波(bō)形進(jìn)行思(sī)考。首先(xiān)来(lái)确定(dìng)led0,根(gēn)據(jù)設計(jì)目标(biāo)可(kě)以(yǐ)發(fà)現(xiàn):led0變(biàn)0的(de)原因(yīn)是(shì)計(jì)數器完成(chéng)了(le)1秒(miǎo)計(jì)时(shí),即當add_cnt1 && cnt1==1-1时(shí),时(shí)間(jiān)过(guò)去(qù)了(le)一(yī)秒(miǎo),led0的(de)值變(biàn)为(wèi)0来(lái)控制LED0點(diǎn)亮(liàng)。而(ér)led0變(biàn)1的(de)原因(yīn)則是(shì)計(jì)數器完成(chéng)2秒(miǎo)时(shí)間(jiān)計(jì)时(shí),即add_cnt1 && cnt1==2-1时(shí),led0的(de)值變(biàn)为(wèi)1從而(ér)控制LED0熄滅。在(zài)GVIM的(de)編輯模式下(xià)輸入(rù)“Shixu2”回(huí)車,調用(yòng)至(zhì)簡設計(jì)法模板,将代(dài)碼補充完整後(hòu)得到(dào)led0信(xìn)号(hào)的(de)代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
always   @(posedge clk or negedge rst_n)begin
  
     if(rst_n==1'b0)begin
  
         led0 <= 1 ;
  
     end
  
     else if(add_cnt1 && cnt1==1-1)begin
  
         led0 <= 0 ;
  
     end
  
     else if(add_cnt1 && cnt1==2-1)begin
  
         led0 <= 1 ;
  
     end
  
end

下(xià)面(miàn)来(lái)思(sī)考輸出(chū)信(xìn)号(hào)led1的(de)變(biàn)化(huà)原因(yīn)。同(tóng)理,led1的(de)值變(biàn)0的(de)原因(yīn)是(shì)計(jì)數到(dào)3秒(miǎo)时(shí)間(jiān),即add_cnt1 &&cnt1==3-1时(shí),led1的(de)值變(biàn)为(wèi)0從而(ér)控制LED1點(diǎn)亮(liàng)。led1變(biàn)1的(de)原因(yīn)則是(shì)計(jì)數到(dào)5秒(miǎo)时(shí)間(jiān),即add_cnt1 &&cnt1==5-1时(shí),led1的(de)值變(biàn)为(wèi)1從而(ér)控制LED1熄滅。打(dǎ)開(kāi)GVIM,在(zài)編輯模式下(xià)輸入(rù)“Shixu2”回(huí)車後(hòu)調用(yòng)至(zhì)簡設計(jì)法模板,将代(dài)碼補充完整後(hòu)得到(dào)led1信(xìn)号(hào)的(de)代(dài)碼如(rú)下(xià)所(suǒ)示:
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
always   @(posedge clk or negedge rst_n)begin
  
     if(rst_n==1'b0)begin
  
         led1 <= 1 ;
  
     end
  
     else if(add_cnt1 && cnt1==3-1)begin
  
         led1 <= 0 ;
  
     end
  
     else if(add_cnt1 && cnt1==5-1)begin
  
         led1 <= 1 ;
  
     end
  
end

同(tóng)樣(yàng)的(de)邏輯来(lái)思(sī)考輸出(chū)信(xìn)号(hào)led2的(de)變(biàn)化(huà)。led2變(biàn)0的(de)原因(yīn)是(shì)計(jì)數到(dào)6秒(miǎo)时(shí)間(jiān),也(yě)就(jiù)是(shì)add_cnt1 &&cnt1==6-1时(shí),led2的(de)值變(biàn)为(wèi)0從而(ér)控制LED2點(diǎn)亮(liàng)。led2變(biàn)1的(de)原因(yīn)則是(shì)數到(dào)9秒(miǎo)时(shí)間(jiān),即add_cnt1 &&cnt1==9-1时(shí),led2的(de)值變(biàn)为(wèi)1從而(ér)控制LED2熄滅。打(dǎ)開(kāi)GVIM,在(zài)編輯模式下(xià)輸入(rù)“Shixu2”回(huí)車,調用(yòng)至(zhì)簡設計(jì)法模板,将代(dài)碼補充完整後(hòu)得到(dào)led2信(xìn)号(hào)的(de)代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
always   @(posedge clk or negedge rst_n)begin
  
     if(rst_n==1'b0)begin
  
         led2 <= 1 ;
  
     end
  
     else if(add_cnt1 && cnt1==6-1)begin
  
         led2 <= 0 ;
  
     end
  
     else if(add_cnt1 && cnt1==9-1)begin
  
         led2 <= 1 ;
  
     end
  
end

最(zuì)後(hòu)确定(dìng)輸出(chū)信(xìn)号(hào)led3的(de)變(biàn)化(huà)。led3變(biàn)0的(de)原因(yīn)是(shì)計(jì)數到(dào)10秒(miǎo)时(shí)間(jiān),也(yě)就(jiù)是(shì)add_cnt1 &&cnt1==10-1时(shí),led2的(de)值變(biàn)为(wèi)0從而(ér)控制LED2點(diǎn)亮(liàng)。變(biàn)1的(de)原因(yīn)是(shì)計(jì)數到(dào)14秒(miǎo)时(shí)間(jiān),即add_cnt1 && cnt1==14-1,也(yě)就(jiù)是(shì)end_cnt1时(shí),led3的(de)值變(biàn)为(wèi)1從而(ér)控制LED2熄滅。在(zài)GVIM的(de)編輯模式下(xià)輸入(rù)“Shixu2”回(huí)車,調用(yòng)至(zhì)簡設計(jì)法模板,将代(dài)碼補充完整後(hòu)得到(dào)led0信(xìn)号(hào)的(de)代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
always   @(posedge clk or negedge rst_n)begin
  
     if(rst_n==1'b0)begin
  
         led3 <= 1 ;
  
     end
  
     else if(add_cnt1 && cnt1==10-1)begin
  
         led3 <= 0 ;
  
     end
  
     else if(end_cnt1)begin
  
         led3 <= 1 ;
  
     end
  
end

至(zhì)此(cǐ),主(zhǔ)體(tǐ)程序已經(jīng)完成(chéng)。如(rú)果(guǒ)对(duì)四(sì)个(gè)輸出(chū)信(xìn)号(hào)代(dài)碼的(de)設計(jì)還(huán)存有(yǒu)疑慮,可(kě)以(yǐ)結合波(bō)形图(tú)再次(cì)着重(zhòng)了(le)解(jiě)一(yī)下(xià)設計(jì)目标(biāo),重(zhòng)新整理思(sī)路(lù),完全(quán)吸收(shōu)設計(jì)目标(biāo)後(hòu)再進(jìn)行代(dài)碼編写。反(fǎn)複領会(huì)吸收(shōu)一(yī)定(dìng)会(huì)有(yǒu)所(suǒ)收(shōu)獲。

3.3 信(xìn)号(hào)定(dìng)義

下(xià)面(miàn)需要(yào)将module補充完整,首先(xiān)要(yào)做的(de)是(shì)定(dìng)義信(xìn)号(hào)的(de)類(lèi)型。在(zài)这(zhè)里(lǐ)再次(cì)強(qiáng)調,在(zài)進(jìn)行reg和(hé)wire類(lèi)型判斷的(de)时(shí)候,總(zǒng)会(huì)有(yǒu)多(duō)餘的(de)聯想(xiǎng),比如(rú)認为(wèi)reg就(jiù)是(shì)寄存器,wire是(shì)線(xiàn);或(huò)者(zhě)認为(wèi)reg類(lèi)型会(huì)綜合成(chéng)寄存器,wire類(lèi)型不(bù)会(huì)綜合成(chéng)寄存器。实際上(shàng)这(zhè)些與(yǔ)信(xìn)号(hào)是(shì)reg型還(huán)是(shì)wire型都沒(méi)有(yǒu)關(guān)系(xì)。至(zhì)簡設計(jì)法建議不(bù)要(yào)進(jìn)行任何聯想(xiǎng),只(zhī)遵從一(yī)个(gè)規則:“用(yòng)always实現(xiàn)的(de)是(shì)reg型,其他(tā)都是(shì)wire型”。

進(jìn)行信(xìn)号(hào)定(dìng)義时(shí),除了(le)信(xìn)号(hào)的(de)類(lèi)型還(huán)需要(yào)确定(dìng)信(xìn)号(hào)的(de)位宽(kuān)。至(zhì)簡設計(jì)法在(zài)这(zhè)里(lǐ)分(fēn)享一(yī)个(gè)非(fēi)常实用(yòng)的(de)獲取(qǔ)信(xìn)号(hào)位宽(kuān)的(de)技巧:打(dǎ)開(kāi)計(jì)算器,點(diǎn)擊“查看(kàn)”,選擇“程序員”模式,在(zài)“十(shí)進(jìn)制”下(xià)輸入(rù)數字(zì)後(hòu)就(jiù)会(huì)獲得对(duì)應(yìng)的(de)信(xìn)号(hào)位宽(kuān)。

图(tú)3.2-5通(tòng)过(guò)計(jì)算器獲取(qǔ)信(xìn)号(hào)位宽(kuān)

cnt0是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)regcnt0計(jì)數的(de)最(zuì)大值为(wèi)50_000_000。如(rú)图(tú)3.2-5所(suǒ)示,通(tòng)过(guò)計(jì)算器可(kě)以(yǐ)得知該信(xìn)号(hào)需要(yào)用(yòng)26根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)26位。代(dài)碼表(biǎo)示如(rú)下(xià):
1
reg     [25:0]  cnt0  ;

同(tóng)樣(yàng)的(de),cnt1也(yě)是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)regcnt1計(jì)數的(de)最(zuì)大值为(wèi)8,需要(yào)用(yòng)4根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)4位。編輯狀态下(xià)輸入(rù)“Reg4”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(dài)碼表(biǎo)示如(rú)下(xià):
1
reg     [ 3:0]  cnt1  ;

add_cnt0和(hé)end_cnt0都是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。其值是(shì)0或(huò)者(zhě)1,用(yòng)1根(gēn)線(xiàn)表(biǎo)示即可(kě),即位宽(kuān)为(wèi)1。編輯模式下(xià)輸入(rù)“Wire1”調用(yòng)模板,補充完整後(hòu)得到(dào)代(dài)碼表(biǎo)示如(rú)下(xià):
1
  
2
wire      add_cnt0  ;
  
wire      end_cnt0  ;

add_cnt1和(hé)end_cnt1也(yě)是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。其值是(shì)0或(huò)者(zhě)1,用(yòng)1根(gēn)線(xiàn)表(biǎo)示即可(kě),即位宽(kuān)为(wèi)1。編輯模式下(xià)輸入(rù)“Wire1”調用(yòng)模板,補充完整後(hòu)得到(dào)代(dài)碼表(biǎo)示如(rú)下(xià):
1
  
2
wire      add_cnt1  ;
  
wire      end_cnt1  ;

led0led1led2led3是(shì)用(yòng)always方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)reg。其值是(shì)0或(huò)者(zhě)1,用(yòng)1根(gēn)線(xiàn)表(biǎo)示即可(kě)。編輯模式下(xià)輸入(rù)“Reg1”調用(yòng)模板,補充完整後(hòu)得到(dào)代(dài)碼表(biǎo)示如(rú)下(xià):
1
  
2
  
3
  
4
reg         led0     ;
  
reg         led1     ;
  
reg         led2     ;
  
reg         led3     ;
整个(gè)代(dài)碼的(de)設計(jì)工作至(zhì)此(cǐ)已經(jīng)完成(chéng),完整的(de)工程代(dài)碼如(rú)下(xià)所(suǒ)示:
1
module huxiled(
  
clk  ,
  
rst_n  ,
  
      led0        ,
  
      led1        ,
  
      led2        ,
  
      led3           
  
);
  
  
input        clk   ;
  
input        rst_n   ;
  
output       led0     ;
  
output       led1     ;
  
output       led2     ;
  
output       led3     ;
  
  
reg   [25:0]  cnt0    ;
  
wire         add_cnt0;
  
wire         end_cnt0;
  
  
reg   [ 3:0]  cnt1    ;
  
wire         add_cnt1;
  
wire         end_cnt1;
  
reg          led0    ;
  
reg          led1    ;
  
reg          led2    ;
  
reg          led3    ;
  
  
  
always @(posedge clk or negedge rst_n)begin
  
     if(!rst_n)begin
  
         cnt0 <= 0;
  
     end
  
     else if(add_cnt0)begin
  
         if(end_cnt0)
  
            cnt0 <= 0;
  
         else
  
            cnt0 <= cnt0 + 1;
  
     end
  
end
  
  
assign add_cnt0 = 1;
  
assign end_cnt0 = add_cnt0 &&  cnt0==50_000_000 - 1 ;
  
  
always @(posedge clk or negedge rst_n)begin  
  
     if(!rst_n)begin
  
         cnt1 <= 0;
  
     end
  
     else if(add_cnt1)begin
  
         if(end_cnt1)
  
            cnt1 <= 0;
  
         else
  
            cnt1 <= cnt1 + 1;
  
    end
  
end
  
  
assign add_cnt1 = end_cnt0;
  
assign end_cnt1 = add_cnt1 &&  cnt1==14-1 ;
  
  
always   @(posedge clk or negedge rst_n)begin
  
     if(rst_n==1'b0)begin
  
         led0 <= 1;
  
     end
  
     else if(add_cnt1 && cnt1==1-1)begin
  
         led0 <= 0;
  
     end
  
     else if(add_cnt1 && cnt1==2-1)begin
  
         led0 <= 1;
  
     end
  
end
  
  
always   @(posedge clk or negedge rst_n)begin
  
     if(rst_n==1'b0)begin
  
         led1 <= 1;
  
     end
  
     else if(add_cnt1 && cnt1==3-1)begin
  
         led1 <= 0;
  
     end
  
     else if(add_cnt1 && cnt1==5-1)begin
  
         led1 <= 1;
  
     end
  
end
  
  
always   @(posedge clk or negedge rst_n)begin
  
     if(rst_n==1'b0)begin
  
         led2 <= 1;
  
     end
  
     else if(add_cnt1 && cnt1==6-1)begin
  
         led2 <= 0;
  
     end
  
     else if(add_cnt1 && cnt1==9-1)begin
  
         led2 <= 1;
  
     end
  
end
  
  
always   @(posedge clk or negedge rst_n)begin
  
     if(rst_n==1'b0)begin
  
         led3 <= 1;
  
     end
  
     else if(add_cnt1 && cnt1==10-1)begin
  
         led3 <= 0;
  
     end
  
     else if(end_cnt1)begin
  
         led3 <= 1;
  
     end
  
end
  
  
endmodule
第(dì)4节(jié) 綜合與(yǔ)上(shàng)板

4.1 新建工程

打(dǎ)開(kāi)软(ruǎn)件(jiàn)Quartus Ⅱ,點(diǎn)擊“File”下(xià)拉列表(biǎo)中(zhōng)的(de)New Project Wzard...新建工程選項,如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)3.2-6Quartus新建工程

随後(hòu)会(huì)出(chū)現(xiàn)图(tú)3.2-7所(suǒ)示的(de)Quartus新建工程介紹,直(zhí)接點(diǎn)擊“Next”:
图(tú)3.2-7Quartus新建工程介紹

此(cǐ)时(shí)出(chū)現(xiàn)的(de)是(shì)工程文(wén)件(jiàn)夾、工程名、頂层模块(kuài)名設置界面(miàn),如(rú)图(tú)3.2-8所(suǒ)示。注意(yì)目录(lù)为(wèi):D:/mdy_book/huxiled,工程名和(hé)頂层名为(wèi)huxiled。这(zhè)里(lǐ)再次(cì)進(jìn)行強(qiáng)調,为(wèi)了(le)避免初学者(zhě)使用(yòng)过(guò)程中(zhōng)出(chū)現(xiàn)報錯情(qíng)況,強(qiáng)烈建議按照本(běn)書(shū)的(de)工程名和(hé)文(wén)件(jiàn)名進(jìn)行設置,設置完成(chéng)後(hòu)點(diǎn)擊Next。
图(tú)3.2-8QUARTUS新建工程設置名稱

新建工程類(lèi)型設置選擇“Empty project”,如(rú)下(xià)图(tú)所(suǒ)示,然後(hòu)點(diǎn)擊“Next”。
图(tú)3.2-9QUARTUS新建工程類(lèi)型

文(wén)件(jiàn)添加界面(miàn)如(rú)图(tú)3.2-10所(suǒ)示,點(diǎn)擊右(yòu)側的(de)“Add”按鈕,選擇已經(jīng)写好(hǎo)的(de)“huxiled.v”文(wén)件(jiàn),此(cǐ)时(shí)文(wén)件(jiàn)会(huì)在(zài)下(xià)方(fāng)顯示出(chū)来(lái),随後(hòu)點(diǎn)擊“Next”。
图(tú)3.2-10QUARTUS添加文(wén)件(jiàn)

芯片(piàn)型号(hào)選擇界面(miàn)如(rú)图(tú)3.2-11所(suǒ)示,選擇“Cyclone ⅣE”,在(zài)芯片(piàn)型号(hào)選擇处選擇“EP4CE15F23C8”,之後(hòu)點(diǎn)擊“Next”。
图(tú)3.2-11QUARTUS選擇芯片(piàn)型号(hào)

图(tú)3.2-12为(wèi)QUARTUS設置工具界面(miàn),不(bù)必做任何修改,直(zhí)接點(diǎn)擊“Next”即可(kě)。
图(tú)3.2-12QUARTUS設置工具界面(miàn)

新建工程的(de)彙總(zǒng)情(qíng)況如(rú)图(tú)3.2-13所(suǒ)示,點(diǎn)擊“Finish”完成(chéng)新建工程。
图(tú)3.2-13QUARTUS新建工程彙總(zǒng)界面(miàn)

4.2 綜合

新建工程步驟完成(chéng)後(hòu),QUARTUS界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)3.2-14QUARTUS新建工程後(hòu)界面(miàn)
點(diǎn)擊編譯按鈕,可(kě)以(yǐ)对(duì)整个(gè)工程進(jìn)行編譯,編譯成(chéng)功後(hòu)的(de)界面(miàn)如(rú)图(tú)3.2-15所(suǒ)示。
图(tú)3.2-15QUARTUS編譯後(hòu)界面(miàn)

4.3 配置管(guǎn)脚

下(xià)面(miàn)需要(yào)对(duì)相應(yìng)管(guǎn)脚進(jìn)行配置。如(rú)图(tú)3.2-16所(suǒ)示,在(zài)菜單欄中(zhōng)選中(zhōng)Assignments後(hòu)選擇Pin Planner,随後(hòu)配置管(guǎn)脚的(de)窗(chuāng)口(kǒu)就(jiù)会(huì)弹出(chū)。
图(tú)3.2-16QUARTUS配置管(guǎn)脚選項

在(zài)配置窗(chuāng)口(kǒu)最(zuì)下(xià)方(fāng)中(zhōng)的(de)“location”一(yī)列,參考信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì),按照表(biǎo)3.2-1中(zhōng)最(zuì)右(yòu)两(liǎng)列配置好(hǎo)FPGA管(guǎn)脚。此(cǐ)处配置管(guǎn)理来(lái)源的(de)選擇在(zài)最(zuì)開(kāi)始的(de)管(guǎn)脚配置設計(jì)环(huán)节(jié)中(zhōng)進(jìn)行了(le)講解(jiě),最(zuì)終(zhōng)配置的(de)結果(guǒ)見(jiàn)图(tú)3.2-17。配置完成(chéng)後(hòu),關(guān)閉“Pin Planner”,软(ruǎn)件(jiàn)自(zì)動(dòng)会(huì)保存管(guǎn)脚配置信(xìn)息。
表(biǎo)3.2-1信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)
  
器件(jiàn)
  
原理图(tú)信(xìn)号(hào)
FPGA管(guǎn)脚
FPGA工程信(xìn)号(hào)
  
LED0
  
LED1_NET
AA4
led0
  
LED1
  
LED2_NET
AB4
led1
  
LED2
  
LED3_NET
AA5
led2
  
LED3
  
LED4_NET
AB8
led3
  
X1
  
SYS_CLK
G1
clk
  
K1
  
SYS_RST
AB12
rst_n
图(tú)3.2-17QUARTUS配置管(guǎn)脚

4.4 再次(cì)綜合

再次(cì)打(dǎ)開(kāi)“QUARTUS”软(ruǎn)件(jiàn),在(zài)菜單欄中(zhōng)選中(zhōng)“Processing”,然後(hòu)選擇“Start Compilation”,再次(cì)对(duì)整个(gè)工程進(jìn)行編譯和(hé)綜合,如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)3.2-18QUARTUS編譯選項

當出(chū)現(xiàn)如(rú)下(xià)图(tú)所(suǒ)示的(de)編譯成(chéng)功标(biāo)志时(shí),说(shuō)明(míng)已經(jīng)編譯綜合成(chéng)功。
图(tú)3.2-19QUARTUS編譯成(chéng)功标(biāo)志
4.5 連(lián)接開(kāi)發(fà)板

完成(chéng)編譯後(hòu)開(kāi)始進(jìn)行上(shàng)板調試操作,按照下(xià)图(tú)的(de)方(fāng)式将下(xià)载器接入(rù)電(diàn)腦USB接口(kǒu),接上(shàng)開(kāi)發(fà)板電(diàn)源後(hòu)按下(xià)開(kāi)發(fà)板下(xià)方(fāng)藍(lán)色(sè)開(kāi)關(guān),硬(yìng)件(jiàn)連(lián)接完畢。
图(tú)3.2-204位閃爍燈(dēng)開(kāi)發(fà)板連(lián)接图(tú)
4.6 上(shàng)板

如(rú)下(xià)图(tú)所(suǒ)示,單擊QUARTUS界面(miàn)中(zhōng)的(de) ,弹出(chū)配置界面(miàn)。
图(tú)3.2-21QUARTUS界面(miàn)
随後(hòu)點(diǎn)擊“add file”添加“.sof”文(wén)件(jiàn),點(diǎn)擊“Start”,在(zài)“Progress”中(zhōng)会(huì)顯示出(chū)進(jìn)度(dù)。
图(tú)3.2-22QUARTUS下(xià)载程序界面(miàn)

如(rú)图(tú)3.2-22所(suǒ)示,當“Progress”進(jìn)度(dù)条(tiáo)中(zhōng)提(tí)示成(chéng)功即可(kě)在(zài)開(kāi)發(fà)板上(shàng)观察到(dào)相應(yìng)的(de)現(xiàn)象(xiàng)。如(rú)果(guǒ)按照步驟正(zhèng)确完成(chéng)了(le)設計(jì),此(cǐ)时(shí)会(huì)看(kàn)到(dào)四(sì)个(gè)LED燈(dēng)轮流開(kāi)始閃爍,且每次(cì)持(chí)續的(de)时(shí)間(jiān)按照增加一(yī)秒(miǎo)的(de)規律,四(sì)个(gè)LED燈(dēng)依次(cì)閃爍循环(huán)往複,若观察到(dào)这(zhè)一(yī)現(xiàn)象(xiàng)則可(kě)以(yǐ)判斷此(cǐ)次(cì)設計(jì)成(chéng)功。如(rú)果(guǒ)无法正(zhèng)常顯示或(huò)者(zhě)未按設計(jì)閃爍的(de)情(qíng)況,則需要(yào)回(huí)过(guò)头(tóu)来(lái)進(jìn)行排查錯誤。如(rú)果(guǒ)反(fǎn)複思(sī)考後(hòu)依然无法找(zhǎo)到(dào)錯誤,建議静(jìng)下(xià)心(xīn)来(lái)重(zhòng)新操作一(yī)遍(biàn),熟能(néng)生(shēng)巧,多(duō)次(cì)实踐後(hòu)自(zì)然而(ér)然就(jiù)可(kě)以(yǐ)迅速發(fà)現(xiàn)問(wèn)題(tí)并且解(jiě)決問(wèn)題(tí)。

第(dì)5节(jié) 簡化(huà)版步驟分(fēn)享

同(tóng)樣(yàng)这(zhè)里(lǐ)也(yě)会(huì)分(fēn)享簡化(huà)版的(de)步驟,方(fāng)便複習以(yǐ)及(jí)反(fǎn)複实操。

5.1 設計(jì)实現(xiàn)

5.1.1 頂层信(xìn)号(hào)

新建目录(lù):D:mdy_bookhuxiled。在(zài)該目录(lù)中(zhōng),新建一(yī)个(gè)名为(wèi)“huxiled.v”的(de)文(wén)件(jiàn),并用(yòng)GVIM打(dǎ)開(kāi),開(kāi)始編写代(dài)碼。
确定(dìng)頂层信(xìn)号(hào)。工程信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)如(rú)下(xià)图(tú):
表(biǎo)3.2-1信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)
  
器件(jiàn)
  
原理图(tú)信(xìn)号(hào)
FPGA管(guǎn)脚
FPGA工程信(xìn)号(hào)
  
LED0
  
LED1_NET
AA4
led0
  
LED1
  
LED2_NET
AB4
led1
  
LED2
  
LED3_NET
AA5
led2
  
LED3
  
LED4_NET
AB8
led3
  
X1
  
SYS_CLK
G1
clk
  
K1
  
SYS_RST
AB12
rst_n
写出(chū)頂层信(xìn)号(hào)代(dài)碼:
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
module  huxiled(
  
clk  ,
  
rst_n  ,
  
    led0    ,
  
    led1    ,
  
    led2    ,
  
    led3
  
    );

聲明(míng)輸入(rù)輸出(chū)屬性(xìng):
1
  
2
  
3
  
4
  
5
  
6
  
7
input               clk  ;
  
input               rst_n  ;
  
  
output              led0   ;
  
output              led1   ;
  
output              led2   ;
  
output              led3   ;
5.1.2 信(xìn)号(hào)設計(jì)
首先(xiān)進(jìn)行架構設計(jì)。根(gēn)據(jù)設計(jì)需求得出(chū)波(bō)形图(tú)如(rú)下(xià)所(suǒ)示。
图(tú)3.2-34位閃爍燈(dēng)波(bō)形图(tú)

設計(jì)計(jì)數器架構,表(biǎo)示計(jì)时(shí)1秒(miǎo)的(de)計(jì)數器cnt0代(dài)碼如(rú)下(xià)所(suǒ)示:
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
always  @(posedge clk or negedge rst_n)begin
  
    if(!rst_n)begin
  
        cnt0 <= 0;
  
    end
  
    else if(add_cnt0)begin
  
        if(end_cnt0)
  
            cnt0 <= 0;
  
        else
  
            cnt0 <= cnt0 + 1;
  
    end
  
end
  
  
assign  add_cnt0 = 1 ;
  
assign  end_cnt0 = add_cnt0 && cnt0== 50_000_000-1 ;

表(biǎo)示計(jì)时(shí)一(yī)次(cì)循环(huán)(14秒(miǎo))的(de)計(jì)數器cnt1代(dài)碼如(rú)下(xià)所(suǒ)示:
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
always  @(posedge clk or negedge rst_n)begin
  
    if(!rst_n)begin
  
        cnt1 <= 0;
  
    end
  
    else if(add_cnt1)begin
  
        if(end_cnt1)
  
            cnt1 <= 0;
  
        else
  
            cnt1 <= cnt1 + 1;
  
    end
  
end
  
  
assign  add_cnt1 = end_cnt0;
  
assign  end_cnt1 = add_cnt1 && cnt1==14-1 ;

設計(jì)led0信(xìn)号(hào)代(dài)碼:
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
always  @(posedge clk or negedge rst_n)begin
  
    if(rst_n==1'b0)begin
  
        led0 <= 1 ;
  
    end
  
    else if(add_cnt1 &&  cnt1==1-1)begin
  
        led0 <= 0 ;
  
    end
  
    else if(add_cnt1 &&  cnt1==2-1)begin
  
        led0 <= 1 ;
  
    end
  
end

設計(jì)led1信(xìn)号(hào)代(dài)碼:
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
always  @(posedge clk or negedge rst_n)begin
  
    if(rst_n==1'b0)begin
  
        led1 <= 1 ;
  
    end
  
    else if(add_cnt1 &&  cnt1==3-1)begin
  
        led1 <= 0 ;
  
    end
  
    else if(add_cnt1 &&  cnt1==5-1)begin
  
        led1 <= 1 ;
  
    end
  
end

設計(jì)led2信(xìn)号(hào)代(dài)碼:
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
always  @(posedge clk or negedge rst_n)begin
  
    if(rst_n==1'b0)begin
  
        led2 <= 1 ;
  
    end
  
    else if(add_cnt1 &&  cnt1==6-1)begin
  
        led2 <= 0 ;
  
    end
  
    else if(add_cnt1 &&  cnt1==9-1)begin
  
        led2 <= 1 ;
  
    end
  
end

設計(jì)led3信(xìn)号(hào)代(dài)碼:
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
always  @(posedge clk or negedge rst_n)begin
  
    if(rst_n==1'b0)begin
  
        led3 <= 1 ;
  
    end
  
    else if(add_cnt1 &&  cnt1==10-1)begin
  
        led3 <= 0 ;
  
    end
  
    else if(end_cnt1)begin
  
        led3 <= 1 ;
  
    end
  
end
       主(zhǔ)體(tǐ)程序完成(chéng)後(hòu)将module補充完整。

5.1.3 信(xìn)号(hào)定(dìng)義
对(duì)信(xìn)号(hào)進(jìn)行類(lèi)型定(dìng)義,其中(zhōng)cnt0 信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
reg    [28:0]   cnt0  ;
add_cnt0和(hé) end_cnt0 信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
  
2
wire     add_cnt0   ;
  
wire     end_cnt0   ;
cnt1信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
reg    [ 3:0]   cnt1  ;
add_cnt1和(hé) end_cnt1 信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
  
2
wire     add_cnt1   ;
  
wire     end_cnt1   ;
led0、led1、led2、led3信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
  
2
  
3
  
4
reg         led0     ;
  
reg         led1     ;
  
reg         led2     ;
  
reg         led3     ;
至(zhì)此(cǐ),整个(gè)代(dài)碼的(de)設計(jì)工作完成(chéng),後(hòu)續應(yìng)对(duì)代(dài)碼進(jìn)行編譯綜合以(yǐ)及(jí)上(shàng)板查看(kàn)現(xiàn)象(xiàng)。

5.2 綜合與(yǔ)上(shàng)板

5.2.1 新建工程

打(dǎ)開(kāi)Quartus Ⅱ,點(diǎn)擊File下(xià)拉列表(biǎo)中(zhōng)的(de)New Project Wzard...新建工程選項。
图(tú)3.2- 6Quartus新建工程
點(diǎn)擊“Next”。
图(tú)3.2-7Quartus新建工程介紹
此(cǐ)时(shí)会(huì)出(chū)現(xiàn)工程文(wén)件(jiàn)夾、工程名、頂层模块(kuài)名設置界面(miàn),完成(chéng)設置後(hòu)點(diǎn)擊“Next”。
图(tú)3.2-8QUARTUS新建工程設置名稱
選擇“Empty project”後(hòu)點(diǎn)擊“Next”。

图(tú)3.2- 9QUARTUS新建工程類(lèi)型
點(diǎn)擊右(yòu)側的(de)“Add”按鈕後(hòu)添加“huxiled.v”文(wén)件(jiàn),點(diǎn)擊“Next”。
图(tú)3.2-10QUARTUS添加文(wén)件(jiàn)
在(zài)“Device family”選項中(zhōng)選擇“Cyclone ⅣE”,“Available devices”選項下(xià)選擇“EP4CE15F23C8”,随後(hòu)點(diǎn)擊“Next”。
图(tú)3.2-11QUARTUS選擇芯片(piàn)型号(hào)
直(zhí)接點(diǎn)擊“Next”。
图(tú)3.2-12QUARTUS設置工具界面(miàn)
點(diǎn)擊“Finish”,完成(chéng)新建工程。
图(tú)3.2-13QUARTUS新建工程彙總(zǒng)界面(miàn)
5.2.2 綜合

新建工程後(hòu)界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示,點(diǎn)擊“編譯”按鈕。
图(tú)3.2-14QUARTUS新建工程後(hòu)界面(miàn)
編譯成(chéng)功界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)3.2-15QUARTUS編譯後(hòu)界面(miàn)
5.2.3 配置管(guǎn)脚

在(zài)菜單欄點(diǎn)擊“Assignments”後(hòu)點(diǎn)擊“Pin Planner”随後(hòu)会(huì)弹出(chū)配置管(guǎn)脚的(de)窗(chuāng)口(kǒu)。
图(tú)3.2-16QUARTUS配置管(guǎn)脚選項
在(zài)配置窗(chuāng)口(kǒu)“location”配置管(guǎn)脚,配置完成(chéng)關(guān)閉“Pin Planner”即可(kě)自(zì)動(dòng)保存配置信(xìn)息。
图(tú)3.2-17QUARTUS配置管(guǎn)脚
5.2.4 再次(cì)綜合

打(dǎ)開(kāi)“QUARTUS”软(ruǎn)件(jiàn),在(zài)菜單欄中(zhōng)選擇“Processing”,點(diǎn)擊“Start Compilation”後(hòu)再次(cì)進(jìn)行綜合。
图(tú)3.2-18QUARTUS編譯選項
出(chū)現(xiàn) QUARTUS 編譯成(chéng)功标(biāo)志則表(biǎo)示此(cǐ)次(cì)編譯成(chéng)功。
图(tú)3.2-19QUARTUS編譯成(chéng)功标(biāo)志
5.2.5 連(lián)接開(kāi)發(fà)板

将下(xià)载器接入(rù)電(diàn)腦 USB 接口(kǒu),開(kāi)發(fà)板接上(shàng)電(diàn)源後(hòu)按下(xià)藍(lán)色(sè)開(kāi)關(guān)。
图(tú)3.2-204位閃爍燈(dēng)開(kāi)發(fà)板連(lián)接图(tú)
5.2.6 上(shàng)板

打(dǎ)開(kāi) QUARTUS 界面(miàn)後(hòu)單擊“  ”图(tú)标(biāo)。
图(tú)3.2-21QUARTUS界面(miàn)

點(diǎn)擊“add file”添加.sof文(wén)件(jiàn),随後(hòu)點(diǎn)擊“Start”。“Progress”会(huì)顯示當前(qián)進(jìn)度(dù),當進(jìn)度(dù)条(tiáo)顯示“100%”为(wèi)成(chéng)功,可(kě)在(zài)開(kāi)發(fà)板观察此(cǐ)时(shí)現(xiàn)象(xiàng)。
图(tú)3.2-22QUARTUS下(xià)载程序界面(miàn)

第(dì)6节(jié) 擴展(zhǎn)練習

至(zhì)此(cǐ)整个(gè)4位閃爍燈(dēng)設計(jì)就(jiù)分(fēn)享完畢了(le),这(zhè)里(lǐ)也(yě)可(kě)以(yǐ)基于(yú)此(cǐ)例展(zhǎn)開(kāi)思(sī)考,可(kě)以(yǐ)自(zì)己嘗試更(gèng)改LED亮(liàng)燈(dēng)时(shí)間(jiān)或(huò)者(zhě)四(sì)个(gè)LED燈(dēng)的(de)亮(liàng)燈(dēng)順序。嘗試進(jìn)行更(gèng)多(duō)的(de)設計(jì),也(yě)欢迎有(yǒu)更(gèng)好(hǎo)思(sī)路(lù)和(hé)想(xiǎng)法的(de)同(tóng)学前(qián)往至(zhì)簡設計(jì)法論壇進(jìn)行交流讨論。
   拓展(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⁥⁠⁢

⁧⁨⁥⁨