⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ 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.1至(zhì)簡設計(jì)項目实踐1位閃爍燈(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):000800000013

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

1、講解(jiě)了(le)如(rú)何使用(yòng)至(zhì)簡設計(jì)法来(lái)时(shí)序1位LED燈(dēng)間(jiān)隔1秒(miǎo),亮(liàng)N秒(miǎo)(其中(zhōng)N=1 .2. …. 9)的(de)功能(néng)


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


   第(dì)一(yī)章(zhāng)  1位閃爍燈(dēng)設計(jì)

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

    發(fà)光(guāng)二(èr)极(jí)管(guǎn)(Light EmittingDiode,LED)是(shì)一(yī)種(zhǒng)能(néng)够将電(diàn)能(néng)轉(zhuǎn)化(huà)为(wèi)可(kě)見(jiàn)光(guāng)的(de)固态半導體(tǐ)器件(jiàn),其核心(xīn)是(shì)一(yī)个(gè)整个(gè)被(bèi)环(huán)氧樹(shù)脂封(fēng)裝(zhuāng)起来(lái)的(de)半導體(tǐ)晶片(piàn)。晶片(piàn)的(de)一(yī)端附在(zài)一(yī)个(gè)支架上(shàng)为(wèi)負极(jí),另(lìng)一(yī)端連(lián)接電(diàn)源为(wèi)正(zhèng)极(jí)。

    半導體(tǐ)晶片(piàn)由(yóu)P型半導體(tǐ)和(hé)N型半導體(tǐ)两(liǎng)部(bù)分(fēn)組成(chéng),其中(zhōng)P型半導體(tǐ)中(zhōng)空穴占主(zhǔ)導地(dì)位,而(ér)N型半導體(tǐ)的(de)主(zhǔ)要(yào)部(bù)分(fēn)是(shì)電(diàn)子。當这(zhè)两(liǎng)種(zhǒng)半導體(tǐ)連(lián)接起来(lái)时(shí),两(liǎng)者(zhě)之間(jiān)形成(chéng)了(le)一(yī)个(gè)P-N結。當電(diàn)流經(jīng)由(yóu)導線(xiàn)作用(yòng)于(yú)該半導體(tǐ)晶片(piàn)时(shí),自(zì)由(yóu)電(diàn)子從N型區(qū)擴散(sàn)到(dào)P型區(qū)跟空穴複合,其会(huì)以(yǐ)光(guāng)子的(de)形式發(fà)出(chū)能(néng)量(liàng),这(zhè)就(jiù)是(shì)LED燈(dēng)産生(shēng)光(guāng)源的(de)原因(yīn)。光(guāng)的(de)波(bō)长即为(wèi)LED的(de)燈(dēng)光(guāng)顔色(sè),其由(yóu)形成(chéng)P-N結的(de)材料決定(dìng),不(bù)同(tóng)的(de)材料可(kě)以(yǐ)使LED可(kě)以(yǐ)發(fà)出(chū)不(bù)同(tóng)顔色(sè)的(de)光(guāng)。随着研究的(de)深入(rù),如(rú)今LED已經(jīng)可(kě)以(yǐ)直(zhí)接發(fà)出(chū)紅(hóng)、黃、藍(lán)、綠(lǜ)、青(qīng)、橙、紫、白色(sè)等多(duō)種(zhǒng)顔色(sè)的(de)光(guāng)。

    LED起初被(bèi)用(yòng)作儀器儀表(biǎo)的(de)指示光(guāng)源,後(hòu)来(lái)各(gè)種(zhǒng)光(guāng)色(sè)的(de)LED在(zài)交通(tòng)信(xìn)号(hào)燈(dēng)和(hé)大面(miàn)積顯示屏中(zhōng)得到(dào)了(le)廣泛應(yìng)用(yòng)并産生(shēng)了(le)很好(hǎo)的(de)經(jīng)濟效益和(hé)社会(huì)效益。以(yǐ)12英寸(cùn)的(de)紅(hóng)色(sè)交通(tòng)信(xìn)号(hào)燈(dēng)为(wèi)例,美國(guó)原本(běn)使用(yòng)的(de)光(guāng)源是(shì)长壽命、低光(guāng)視效能(néng)的(de)140瓦(wǎ)白熾燈(dēng),可(kě)産生(shēng)2000流明(míng)的(de)白光(guāng)。但是(shì)經(jīng)紅(hóng)色(sè)濾光(guāng)片(piàn)後(hòu),光(guāng)損失率高(gāo)达(dá)90%,只(zhī)剩下(xià)200流明(míng)的(de)紅(hóng)光(guāng)。而(ér)Lumileds公司采用(yòng)18个(gè)紅(hóng)色(sè)LED光(guāng)源後(hòu)發(fà)現(xiàn):在(zài)産生(shēng)同(tóng)樣(yàng)光(guāng)效的(de)前(qián)提(tí)下(xià),該類(lèi)光(guāng)源包(bāo)括電(diàn)路(lù)損失在(zài)內(nèi)共(gòng)耗電(diàn)14瓦(wǎ),與(yǔ)傳統白熾光(guāng)光(guāng)源相比耗能(néng)減少(shǎo)了(le)十(shí)倍,这(zhè)一(yī)光(guāng)源的(de)使用(yòng)为(wèi)社会(huì)做出(chū)了(le)巨大贡獻。除此(cǐ)之外(wài)汽車信(xìn)号(hào)燈(dēng)也(yě)是(shì)LED光(guāng)源的(de)重(zhòng)要(yào)應(yìng)用(yòng)領域之一(yī)。

    而(ér)在(zài)日(rì)常生(shēng)活中(zhōng)人(rén)们(men)往往更(gèng)需要(yào)白色(sè)光(guāng)源以(yǐ)滿足照明(míng)需求,1998年(nián)基于(yú)这(zhè)一(yī)需求成(chéng)功開(kāi)發(fà)了(le)發(fà)白光(guāng)的(de)LED,这(zhè)種(zhǒng)LEDGaN芯片(piàn)和(hé)钇铝石(dàn)榴石(dàn)(YAG)封(fēng)裝(zhuāng)在(zài)一(yī)起做成(chéng)。其中(zhōng)GaN芯片(piàn)發(fà)藍(lán)光(guāng)(λp=465nmWd=30nm),高(gāo)温(wēn)燒結制成(chéng)的(de)含Ce3+的(de)YAG荧光(guāng)粉受此(cǐ)藍(lán)光(guāng)激發(fà)後(hòu)發(fà)出(chū)黃色(sè)光(guāng)射,其峰(fēng)值为(wèi)550nm。藍(lán)光(guāng)LED基片(piàn)安(ān)裝(zhuāng)在(zài)碗(wǎn)形反(fǎn)射腔中(zhōng),覆蓋以(yǐ)混有(yǒu)約200-500nm的(de)YAG樹(shù)脂薄层。 LED基片(piàn)發(fà)出(chū)的(de)一(yī)部(bù)分(fēn)藍(lán)光(guāng)被(bèi)荧光(guāng)粉吸收(shōu),另(lìng)一(yī)部(bù)分(fēn)藍(lán)光(guāng)與(yǔ)荧光(guāng)粉發(fà)出(chū)的(de)黃光(guāng)混合,從而(ér)可(kě)以(yǐ)得到(dào)白光(guāng)。对(duì)于(yú)InGaN/YAG白色(sè)LED,通(tòng)过(guò)改變(biàn)YAG荧光(guāng)粉的(de)化(huà)学組成(chéng)和(hé)調节(jié)荧光(guāng)粉层的(de)厚度(dù),可(kě)以(yǐ)獲得色(sè)温(wēn)3500-10000K的(de)各(gè)色(sè)白光(guāng)。这(zhè)種(zhǒng)通(tòng)过(guò)藍(lán)光(guāng)LED得到(dào)白光(guāng)的(de)方(fāng)法,構造簡單、成(chéng)本(běn)低廉、技術(shù)成(chéng)熟度(dù)高(gāo),因(yīn)此(cǐ)運用(yòng)最(zuì)为(wèi)廣泛。

    基于(yú)LED燈(dēng)的(de)原理,本(běn)書(shū)制作了(le)1位閃爍燈(dēng)工程,感(gǎn)興趣的(de)話(huà)可(kě)以(yǐ)根(gēn)據(jù)步驟自(zì)己進(jìn)行实操練習。

    從图(tú)3.1-1可(kě)以(yǐ)看(kàn)到(dào),至(zhì)簡設計(jì)法的(de)教学板一(yī)共(gòng)有(yǒu)8个(gè)可(kě)以(yǐ)發(fà)出(chū)綠(lǜ)光(guāng)的(de)LED燈(dēng)。图(tú)中(zhōng)左(zuǒ)邊(biān)的(de)LED1~LED8是(shì)教学板上(shàng)LED燈(dēng)的(de)丝(sī)印(yìn),右(yòu)邊(biān)的(de)LED1~LED8_NET为(wèi)信(xìn)号(hào)線(xiàn)名。此(cǐ)标(biāo)注是(shì)为(wèi)了(le)更(gèng)好(hǎo)的(de)理解(jiě)設計(jì),而(ér)在(zài)实際的(de)開(kāi)發(fà)板中(zhōng)不(bù)顯示这(zhè)些信(xìn)号(hào)線(xiàn)。

    LED燈(dēng)两(liǎng)端分(fēn)别連(lián)接了(le)3.3V的(de)高(gāo)電(diàn)平和(hé)LED1~LED8_NET信(xìn)号(hào)線(xiàn)。當LED1~LED8_NET为(wèi)高(gāo)電(diàn)平时(shí),電(diàn)流无法導通(tòng),LED燈(dēng)不(bù)發(fà)光(guāng);反(fǎn)之,當LED1~LED8_NET是(shì)低電(diàn)平时(shí),電(diàn)流流通(tòng),此(cǐ)时(shí)LED燈(dēng)發(fà)光(guāng)。因(yīn)此(cǐ)只(zhī)要(yào)控制了(le)信(xìn)号(hào)LED1~LED8_NET的(de)電(diàn)平情(qíng)況,就(jiù)相當于(yú)控制了(le)LED燈(dēng)發(fà)光(guāng)的(de)情(qíng)況。

                              
图(tú)3.1-1開(kāi)發(fà)板LED原理图(tú)
    那(nà)麼(me)信(xìn)号(hào)線(xiàn)LED1~LED8_NET又連(lián)到(dào)哪里(lǐ)呢?從下(xià)图(tú)可(kě)以(yǐ)發(fà)現(xiàn)这(zhè)些信(xìn)号(hào)都連(lián)接到(dào)了(le)FPGA的(de)管(guǎn)脚上(shàng)。

图(tú)3.1-2開(kāi)發(fà)板LED信(xìn)号(hào)連(lián)接图(tú)

    表(biǎo)3.1-1为(wèi)開(kāi)發(fà)板上(shàng)实際信(xìn)号(hào)管(guǎn)脚的(de)对(duì)應(yìng)關(guān)系(xì),例如(rú)信(xìn)号(hào)線(xiàn)LED1連(lián)接到(dào)了(le)FPGA的(de)AA4管(guǎn)脚上(shàng)。從表(biǎo)中(zhōng)可(kě)以(yǐ)看(kàn)到(dào)LED1~LED8_NET分(fēn)别與(yǔ)FPGA的(de)8个(gè)管(guǎn)脚相連(lián),因(yīn)而(ér)LED1~LED8_NET处于(yú)高(gāo)低電(diàn)平以(yǐ)及(jí)LED燈(dēng)是(shì)否發(fà)光(guāng)最(zuì)終(zhōng)取(qǔ)決于(yú)FPGA管(guǎn)脚的(de)輸出(chū)。舉例说(shuō)明(míng),如(rú)果(guǒ)想(xiǎng)要(yào)控制LED7号(hào)燈(dēng),只(zhī)需調整LED7連(lián)接的(de)FPGA管(guǎn)脚AB14的(de)輸出(chū)就(jiù)可(kě)以(yǐ)了(le)。當輸出(chū)为(wèi)高(gāo)電(diàn)平时(shí)LED7燈(dēng)滅,當輸出(chū)为(wèi)低電(diàn)平,LED7燈(dēng)亮(liàng)。8个(gè)LED燈(dēng)各(gè)自(zì)对(duì)應(yìng)一(yī)个(gè)管(guǎn)脚,因(yīn)此(cǐ)这(zhè)8个(gè)LED燈(dēng)都是(shì)由(yóu)FPGA独立進(jìn)行控制。

表(biǎo)3.1-1LED和(hé)FPGA管(guǎn)脚關(guān)系(xì)
  
教学板丝(sī)印(yìn)
  
信(xìn)号(hào)線(xiàn)
FPGA管(guǎn)脚
LED1
LED1_NET
AA4
LED2
LED2_NET
AB4
LED3
LED3_NET
AA5
LED4
LED4_NET
AB6
LED5
LED5_NET
AA10
LED6
LED6_NET
AB13
LED7
LED7_NET
AB14
LED8
LED8_NET
AB16
第(dì)2节(jié) 設計(jì)目标(biāo)
    确定(dìng)設計(jì)的(de)功能(néng)目标(biāo)是(shì)至(zhì)簡設計(jì)法的(de)一(yī)大特(tè)别之处,只(zhī)有(yǒu)对(duì)設計(jì)的(de)功能(néng)目标(biāo)有(yǒu)一(yī)定(dìng)的(de)理解(jiě)和(hé)預期(qī),才能(néng)進(jìn)一(yī)步地(dì)讨論如(rú)何進(jìn)行代(dài)碼設計(jì)和(hé)实現(xiàn)。也(yě)就(jiù)是(shì)说(shuō),後(hòu)續設計(jì)中(zhōng)每一(yī)个(gè)步驟都是(shì)圍繞着設計(jì)目标(biāo)的(de)实現(xiàn)来(lái)針(zhēn)对(duì)性(xìng)的(de)展(zhǎn)開(kāi)。如(rú)果(guǒ)对(duì)于(yú)設計(jì)目标(biāo)一(yī)知半解(jiě),連(lián)最(zuì)終(zhōng)想(xiǎng)要(yào)什麼(me)都无法确定(dìng),那(nà)麼(me)後(hòu)續設計(jì)的(de)思(sī)路(lù)就(jiù)難以(yǐ)形成(chéng)體(tǐ)系(xì)化(huà)的(de)思(sī)考模式,只(zhī)能(néng)一(yī)味接收(shōu)碎片(piàn)式的(de)知識。設計(jì)目标(biāo)就(jiù)像大樓的(de)設計(jì)图(tú),如(rú)果(guǒ)想(xiǎng)要(yào)掌握完整的(de)案(àn)例設計(jì),需要(yào)静(jìng)下(xià)心(xīn)来(lái)從明(míng)确設計(jì)目标(biāo)開(kāi)始一(yī)步步细(xì)细(xì)咀嚼,逐步掌握,才可(kě)以(yǐ)真(zhēn)正(zhèng)做到(dào)事(shì)半功倍。因(yīn)此(cǐ),在(zài)每个(gè)設計(jì)前(qián)本(běn)書(shū)会(huì)确定(dìng)設計(jì)的(de)功能(néng)目标(biāo),從而(ér)更(gèng)好(hǎo)的(de)完成(chéng)設計(jì)。

    本(běn)工程使用(yòng)1个(gè)LED燈(dēng)(LED1)来(lái)实現(xiàn)閃爍燈(dēng)功能(néng)。工程的(de)工作时(shí)鐘(zhōng)为(wèi)50MHz,即时(shí)鐘(zhōng)周期(qī)为(wèi)20ns。當LED1連(lián)接的(de)管(guǎn)脚AA4輸出(chū)低電(diàn)平时(shí),LED1燈(dēng)亮(liàng),輸出(chū)高(gāo)電(diàn)平时(shí),LED1燈(dēng)滅。具體(tǐ)功能(néng)要(yào)求为(wèi):隔1秒(miǎo),亮(liàng)N秒(miǎo)。N的(de)變(biàn)化(huà)为(wèi):123,……,9秒(miǎo),之後(hòu)再次(cì)進(jìn)入(rù)循环(huán),如(rú)图(tú)3.1-3所(suǒ)示。上(shàng)板後(hòu)的(de)效果(guǒ)展(zhǎn)示可(kě)參見(jiàn)图(tú)3.1-4。可(kě)以(yǐ)登录(lù)至(zhì)簡設計(jì)法官方(fāng)网(wǎng)站观看(kàn)上(shàng)板後(hòu)的(de)演示視頻:old.mdy-edu.com/xxxx
图(tú)3.1-3 1位閃爍燈(dēng)功能(néng)图(tú)

图(tú)3.1-4 1位閃爍燈(dēng)的(de)效果(guǒ)图(tú)
第(dì)3节(jié) 設計(jì)实現(xiàn)
    下(xià)面(miàn)会(huì)詳细(xì)地(dì)介紹本(běn)設計(jì)的(de)实現(xiàn)方(fāng)法并对(duì)一(yī)些基本(běn)的(de)設計(jì)理念和(hé)思(sī)路(lù)進(jìn)行詳细(xì)地(dì)说(shuō)明(míng)。如(rú)果(guǒ)已經(jīng)基本(běn)掌握至(zhì)簡設計(jì)法理念,且有(yǒu)一(yī)定(dìng)独立实操基礎,可(kě)以(yǐ)選擇直(zhí)接跳至(zhì)第(dì)五(wǔ)节(jié)“簡化(huà)版步驟分(fēn)享”按照步驟進(jìn)行設計(jì)实操。當然,還(huán)是(shì)建議初学者(zhě)打(dǎ)好(hǎo)基礎,按照分(fēn)析一(yī)步步掌握思(sī)想(xiǎng)原理後(hòu)再按照操作步驟反(fǎn)複实踐練習。

3.1 頂层信(xìn)号(hào)
    新建目录(lù):D:mdy_bookmy_led,并在(zài)此(cǐ)目录(lù)中(zhōng)新建一(yī)个(gè)名为(wèi)my_led.v的(de)文(wén)件(jiàn)。用(yòng)GVIM打(dǎ)開(kāi)該文(wén)件(jiàn)後(hòu)開(kāi)始編写代(dài)碼。在(zài)这(zhè)里(lǐ)建議初学者(zhě)按照本(běn)書(shū)提(tí)供的(de)路(lù)徑名和(hé)文(wén)件(jiàn)名使用(yòng),不(bù)要(yào)進(jìn)行其它(tā)更(gèng)改。因(yīn)为(wèi)在(zài)更(gèng)改过(guò)程中(zhōng)可(kě)能(néng)会(huì)出(chū)現(xiàn)中(zhōng)文(wén)路(lù)徑、空格路(lù)徑等非(fēi)法路(lù)徑的(de)問(wèn)題(tí),或(huò)者(zhě)有(yǒu)些文(wén)件(jiàn)名更(gèng)改後(hòu)会(huì)出(chū)現(xiàn)報錯等現(xiàn)象(xiàng),而(ér)初学者(zhě)并不(bù)能(néng)很好(hǎo)地(dì)發(fà)現(xiàn)并解(jiě)決这(zhè)些問(wèn)題(tí)。因(yīn)此(cǐ)建議先(xiān)按照要(yào)求更(gèng)名保存,在(zài)多(duō)次(cì)進(jìn)行工程練習,熟悉了(le)各(gè)个(gè)步驟後(hòu),再進(jìn)行更(gèng)名的(de)操作。这(zhè)个(gè)地(dì)方(fāng)不(bù)要(yào)想(xiǎng)當然,按部(bù)就(jiù)班地(dì)细(xì)心(xīn)操作就(jiù)会(huì)可(kě)以(yǐ)避免後(hòu)續問(wèn)題(tí)的(de)出(chū)現(xiàn)。

    下(xià)面(miàn)来(lái)确定(dìng)頂层信(xìn)号(hào)。由(yóu)設計(jì)目标(biāo)可(kě)知,想(xiǎng)要(yào)控制1个(gè)LED燈(dēng)亮(liàng)或(huò)滅需要(yào)FPGA産生(shēng)一(yī)个(gè)信(xìn)号(hào)。假定(dìng)这(zhè)一(yī)信(xìn)号(hào)为(wèi)led,将其連(lián)接到(dào)LED燈(dēng)上(shàng)。如(rú)果(guǒ)要(yào)控制LED燈(dēng)滅,FPGA将信(xìn)号(hào)led輸出(chū)为(wèi)1,控制LED燈(dēng)亮(liàng),FPGA将信(xìn)号(hào)led輸出(chū)为(wèi)0。硬(yìng)件(jiàn)電(diàn)路(lù)图(tú)的(de)連(lián)接關(guān)系(xì)如(rú)表(biǎo)3.1- 2所(suǒ)示,可(kě)以(yǐ)看(kàn)到(dào)本(běn)工程中(zhōng)LED1燈(dēng)連(lián)接的(de)FPGA管(guǎn)脚为(wèi)AA4,对(duì)應(yìng)的(de)FPGA工程信(xìn)号(hào)为(wèi)led。工程的(de)时(shí)鐘(zhōng)管(guǎn)脚为(wèi)G1,对(duì)應(yìng)FPGA工程信(xìn)号(hào)为(wèi)clk。工程的(de)複位管(guǎn)脚为(wèi)G1,对(duì)應(yìng)FPGA工程信(xìn)号(hào)为(wèi)rst_n。由(yóu)此(cǐ)可(kě)見(jiàn),工程中(zhōng)一(yī)共(gòng)需要(yào)三(sān)个(gè)信(xìn)号(hào):时(shí)鐘(zhōng)clk,複位rst_n以(yǐ)及(jí)輸出(chū)信(xìn)号(hào)led

表(biǎo)3.1-2信(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)
LED1
LED1_NET
AA4
led
X1
SYS_CLK
G1
clk
K1
SYS_RST
AB12
rst_n

    将module的(de)名稱定(dìng)義为(wèi)my_led,在(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ǐ)頂层信(xìn)号(hào)代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
module my_led(
  
clk,
  
rst_n ,
  
     led
  
     );
   
    随後(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ǐ)在(zài)FPGA中(zhōng)clk为(wèi)輸入(rù)信(xìn)号(hào)input。同(tóng)樣(yàng)地(dì),rst_n是(shì)外(wài)部(bù)按鍵給(gěi)FPGA的(de)信(xìn)号(hào),因(yīn)此(cǐ)在(zài)FPGA中(zhōng)rst_n也(yě)为(wèi)輸入(rù)信(xìn)号(hào)input。同(tóng)时(shí)可(kě)知led是(shì)FPGA輸出(chū)控制LED1顯示的(de),因(yīn)此(cǐ)led为(wèi)輸出(chū)信(xìn)号(hào)output。其具體(tǐ)聲明(míng)代(dài)碼如(rú)下(xià):
1
  
2
  
3
input               clk  ;
  
input               rst_n  ;
  
output              led    ;
3.2 信(xìn)号(hào)設計(jì)


    随後(hòu)需要(yào)对(duì)架構進(jìn)行設計(jì)。首先(xiān)将項目实現(xiàn)功能(néng)用(yòng)波(bō)形图(tú)表(biǎo)示出(chū)来(lái),詳细(xì)的(de)分(fēn)析一(yī)下(xià)設計(jì)需求。LED燈(dēng)的(de)變(biàn)化(huà)規律是(shì)暗(àn)1秒(miǎo),亮(liàng)N秒(miǎo),其中(zhōng)N的(de)變(biàn)化(huà)为(wèi):123、……、9秒(miǎo),然後(hòu)再次(cì)從1秒(miǎo)開(kāi)始循环(huán)。将此(cǐ)現(xiàn)象(xiàng)轉(zhuǎn)換为(wèi)信(xìn)号(hào),即为(wèi)信(xìn)号(hào)led=1持(chí)續1秒(miǎo)後(hòu)信(xìn)号(hào)led=0持(chí)續N秒(miǎo),其中(zhōng)N的(de)變(biàn)化(huà)是(shì):123、……、9秒(miǎo),如(rú)图(tú)3.1-5所(suǒ)示。可(kě)以(yǐ)看(kàn)出(chū)在(zài)第(dì)一(yī)次(cì)亮(liàng)暗(àn)过(guò)程中(zhōng),led=1持(chí)續暗(àn)了(le)1秒(miǎo)後(hòu)led=0持(chí)續亮(liàng)了(le)1秒(miǎo),共(gòng)計(jì)2秒(miǎo)时(shí)間(jiān)。在(zài)第(dì)二(èr)次(cì)亮(liàng)暗(àn)过(guò)程中(zhōng),led=1持(chí)續暗(àn)了(le)1秒(miǎo)後(hòu)led=0持(chí)續亮(liàng)2秒(miǎo),共(gòng)計(jì)3秒(miǎo)时(shí)間(jiān)。以(yǐ)此(cǐ)類(lèi)推,到(dào)第(dì)9次(cì)时(shí),led=1持(chí)續1秒(miǎo)後(hòu)led=0持(chí)續了(le)9秒(miǎo),共(gòng)計(jì)10秒(miǎo)时(shí)間(jiān)。随後(hòu)以(yǐ)此(cǐ)为(wèi)規律進(jìn)行循环(huán)往複。

图(tú)3.1-51位閃爍燈(dēng)的(de)波(bō)形图(tú)

    根(gēn)據(jù)波(bō)形图(tú)可(kě)以(yǐ)完成(chéng)本(běn)項目計(jì)數器的(de)架構設計(jì)。本(běn)項目一(yī)共(gòng)需要(yào)两(liǎng)个(gè)計(jì)數器,其中(zhōng)一(yī)个(gè)計(jì)數器用(yòng)来(lái)計(jì)算时(shí)間(jiān),另(lìng)一(yī)个(gè)用(yòng)来(lái)計(jì)算次(cì)數。本(běn)書(shū)使用(yòng)計(jì)數器cnt1来(lái)記(jì)录(lù)次(cì)數變(biàn)化(huà),另(lìng)一(yī)个(gè)計(jì)數器cnt0来(lái)記(jì)录(lù)每一(yī)次(cì)的(de)工作时(shí)間(jiān),这(zhè)樣(yàng)做会(huì)方(fāng)便後(hòu)續的(de)代(dài)碼設計(jì)。在(zài)这(zhè)里(lǐ)来(lái)思(sī)考一(yī)下(xià),为(wèi)什麼(me)不(bù)能(néng)只(zhī)用(yòng)一(yī)个(gè)时(shí)間(jiān)計(jì)數器,按照2秒(miǎo)、5秒(miǎo)、9秒(miǎo)、14秒(miǎo)……这(zhè)樣(yàng)增加秒(miǎo)數的(de)方(fāng)法来(lái)進(jìn)行設計(jì)呢?在(zài)实際的(de)代(dài)碼操作中(zhōng),这(zhè)樣(yàng)設計(jì)虽然只(zhī)使用(yòng)了(le)一(yī)个(gè)計(jì)數器,但其計(jì)算方(fāng)法卻是(shì)非(fēi)常麻(má)煩的(de)。舉个(gè)生(shēng)活中(zhōng)常見(jiàn)的(de)例子,如(rú)下(xià)图(tú)所(suǒ)示,把每一(yī)次(cì)的(de)循环(huán)看(kàn)做樓层,把每一(yī)秒(miǎo)的(de)計(jì)數看(kàn)做門(mén)牌(pái)号(hào)。按照一(yī)種(zhǒng)計(jì)數模式来(lái)計(jì)數的(de)話(huà),若一(yī)樓的(de)門(mén)牌(pái)号(hào)为(wèi)12345678,二(èr)樓的(de)門(mén)牌(pái)号(hào)則为(wèi)9101112131415161718,後(hòu)續樓层以(yǐ)此(cǐ)類(lèi)推。按照这(zhè)種(zhǒng)方(fāng)式進(jìn)行計(jì)數,如(rú)果(guǒ)需要(yào)尋找(zhǎo)到(dào)47号(hào)房(fáng)間(jiān),可(kě)能(néng)需要(yào)動(dòng)腦筋計(jì)算很久才可(kě)以(yǐ)定(dìng)位到(dào)。反(fǎn)之,使用(yòng)两(liǎng)種(zhǒng)計(jì)數模式:一(yī)个(gè)計(jì)數器对(duì)應(yìng)樓层,另(lìng)一(yī)个(gè)对(duì)應(yìng)門(mén)牌(pái)号(hào)。那(nà)麼(me)一(yī)樓的(de)門(mén)牌(pái)号(hào)則为(wèi)一(yī)樓的(de)12345678,二(èr)樓的(de)門(mén)牌(pái)号(hào)为(wèi)二(èr)樓的(de)12345678910,以(yǐ)此(cǐ)類(lèi)推。一(yī)共(gòng)有(yǒu)多(duō)少(shǎo)层,每一(yī)层都有(yǒu)对(duì)應(yìng)的(de)房(fáng)間(jiān)号(hào)就(jiù)会(huì)一(yī)目了(le)然。假如(rú)想(xiǎng)要(yào)尋找(zhǎo)六(liù)层7号(hào)房(fáng)間(jiān)就(jiù)会(huì)輕(qīng)而(ér)易舉。同(tóng)樣(yàng)的(de)道(dào)理,在(zài)本(běn)工程設計(jì)中(zhōng)使用(yòng)一(yī)个(gè)計(jì)數器表(biǎo)示次(cì)數,另(lìng)一(yī)个(gè)計(jì)數器     
表(biǎo)示时(shí)間(jiān),这(zhè)樣(yàng)在(zài)後(hòu)續遇到(dào)問(wèn)題(tí)时(shí)就(jiù)可(kě)以(yǐ)快(kuài)速的(de)找(zhǎo)到(dào)問(wèn)題(tí)代(dài)碼,而(ér)无需逐个(gè)推算。
图(tú)3.1-6門(mén)牌(pái)号(hào)計(jì)數示例

    同(tóng)樣(yàng)是(shì)上(shàng)面(miàn)的(de)案(àn)例,如(rú)果(guǒ)想(xiǎng)要(yào)尋找(zhǎo)每一(yī)层的(de)固定(dìng)位置房(fáng)間(jiān),同(tóng)樣(yàng)可(kě)以(yǐ)利用(yòng)两(liǎng)種(zhǒng)計(jì)數模式:用(yòng)cnt0来(lái)表(biǎo)示房(fáng)間(jiān)号(hào),其範圍是(shì)0-9,用(yòng)cnt1来(lái)表(biǎo)示樓层号(hào),其範圍是(shì)0-1。利用(yòng)这(zhè)一(yī)方(fāng)法可(kě)以(yǐ)通(tòng)过(guò)cnt0和(hé)cnt1两(liǎng)个(gè)計(jì)數器来(lái)找(zhǎo)到(dào)任何一(yī)个(gè)房(fáng)間(jiān)。这(zhè)樣(yàng)做的(de)另(lìng)一(yī)好(hǎo)处是(shì):如(rú)果(guǒ)想(xiǎng)找(zhǎo)到(dào)同(tóng)一(yī)个(gè)位置的(de)房(fáng)間(jiān),就(jiù)可(kě)以(yǐ)直(zhí)接用(yòng)cnt0来(lái)統一(yī)進(jìn)行表(biǎo)示。例如(rú)cnt0==4可(kě)以(yǐ)統一(yī)表(biǎo)示每层樓的(de)四(sì)号(hào)房(fáng)間(jiān)。而(ér)在(zài)只(zhī)有(yǒu)房(fáng)間(jiān)号(hào)这(zhè)一(yī)單一(yī)計(jì)數模式而(ér)沒(méi)有(yǒu)樓层計(jì)數的(de)情(qíng)況下(xià),如(rú)果(guǒ)想(xiǎng)表(biǎo)示每层樓的(de)四(sì)号(hào)房(fáng)間(jiān)則需要(yào)表(biǎo)示方(fāng)式为(wèi)“cnt0==4”、“cnt0=12”,更(gèng)高(gāo)樓层以(yǐ)此(cǐ)類(lèi)推。两(liǎng)種(zhǒng)表(biǎo)現(xiàn)形式的(de)難易程度(dù)顯而(ér)易見(jiàn)。

    借(jiè)鉴同(tóng)樣(yàng)的(de)思(sī)想(xiǎng)用(yòng)于(yú)LED燈(dēng)的(de)設計(jì)工程中(zhōng),根(gēn)據(jù)目标(biāo)可(kě)知需要(yào)LED燈(dēng)第(dì)1秒(miǎo)不(bù)亮(liàng),而(ér)後(hòu)面(miàn)N秒(miǎo)亮(liàng),循环(huán)往複。從波(bō)形图(tú)中(zhōng)也(yě)可(kě)以(yǐ)看(kàn)出(chū)任何一(yī)次(cì)亮(liàng)暗(àn)都是(shì)在(zài)第(dì)一(yī)秒(miǎo)結束(shù)的(de)节(jié)點(diǎn)拉低,依據(jù)使用(yòng)两(liǎng)个(gè)計(jì)數單位的(de)方(fāng)法,統一(yī)将每次(cì)循环(huán)的(de)第(dì)一(yī)秒(miǎo)表(biǎo)示为(wèi)“add_cnt0 && cnt0==50_000_000-1”。

    在(zài)这(zhè)種(zhǒng)无限循环(huán)的(de)工程中(zhōng),數據(jù)会(huì)像滾雪(xuě)球一(yī)樣(yàng)越滾越大,此(cǐ)时(shí)只(zhī)要(yào)一(yī)个(gè)节(jié)點(diǎn)出(chū)現(xiàn)了(le)問(wèn)題(tí),就(jiù)需要(yào)花費大量(liàng)的(de)时(shí)間(jiān)去(qù)查找(zhǎo)修複。通(tòng)过(guò)增加一(yī)个(gè)次(cì)數計(jì)數器的(de)方(fāng)法将此(cǐ)項目閉合在(zài)一(yī)个(gè)固定(dìng)的(de)循环(huán)中(zhōng)就(jiù)可(kě)以(yǐ)巧妙的(de)避開(kāi)了(le)这(zhè)一(yī)問(wèn)題(tí),大大減輕(qīng)了(le)排查錯誤的(de)難度(dù)。学会(huì)这(zhè)種(zhǒng)思(sī)考方(fāng)式後(hòu)在(zài)对(duì)項目進(jìn)行頂层設計(jì)时(shí)可(kě)以(yǐ)更(gèng)加全(quán)面(miàn)的(de)考慮問(wèn)題(tí),從而(ér)为(wèi)項目選擇最(zuì)合适的(de)展(zhǎn)現(xiàn)形式。

    回(huí)到(dào)本(běn)項目中(zhōng),本(běn)項目采用(yòng)計(jì)數器cnt0来(lái)計(jì)算时(shí)間(jiān),如(rú)計(jì)2秒(miǎo)、3秒(miǎo)等。工作时(shí)鐘(zhōng)为(wèi)50MHz,即周期(qī)为(wèi)1s/50MHz=20ns,通(tòng)过(guò)时(shí)間(jiān)換算關(guān)系(xì)可(kě)知2s=2_000_000_000ns,因(yīn)此(cǐ)當計(jì)數器計(jì)數到(dào)2_000_000_000/20=100_000_000个(gè)时(shí)就(jiù)代(dài)表(biǎo)着2秒(miǎo)时(shí)間(jiān)到(dào)了(le)。按照此(cǐ)方(fāng)法依次(cì)類(lèi)推,在(zài)第(dì)2次(cì)亮(liàng)暗(àn)控制时(shí)計(jì)數器數到(dào)150_000_000个(gè)时(shí)代(dài)表(biǎo)計(jì)时(shí)3秒(miǎo)。第(dì)4次(cì)亮(liàng)暗(àn)控制时(shí)數到(dào)200_000_000个(gè)时(shí)代(dài)表(biǎo)計(jì)时(shí)4秒(miǎo)……,第(dì)9次(cì)时(shí),數到(dào)500_000_000个(gè)时(shí)就(jiù)表(biǎo)示10秒(miǎo)时(shí)間(jiān)計(jì)时(shí)結束(shù)。

    前(qián)文(wén)讨論中(zhōng)说(shuō)明(míng)了(le)本(běn)設計(jì)需要(yào)2个(gè)計(jì)數器,現(xiàn)在(zài)就(jiù)来(lái)讨論一(yī)下(xià)每个(gè)計(jì)數器的(de)实現(xiàn)方(fāng)法。至(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ì)。

    首先(xiān)来(lái)讨論时(shí)間(jiān)計(jì)數器cnt0的(de)加1条(tiáo)件(jiàn):該計(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):assign add_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ì)數工作,就(jiù)可(kě)以(yǐ)認为(wèi)加1条(tiáo)件(jiàn)是(shì)一(yī)直(zhí)有(yǒu)效的(de)。

    下(xià)面(miàn)讨論一(yī)下(xià)时(shí)間(jiān)計(jì)數器cnt0的(de)計(jì)數數量(liàng):由(yóu)于(yú)第(dì)1次(cì)到(dào)第(dì)9次(cì)的(de)亮(liàng)暗(àn)控制中(zhōng)每次(cì)計(jì)數的(de)时(shí)間(jiān)都各(gè)不(bù)相同(tóng),因(yīn)此(cǐ)可(kě)以(yǐ)考慮使用(yòng)變(biàn)量(liàng)法。在(zài)設計(jì)中(zhōng)變(biàn)量(liàng)法的(de)選用(yòng)邏輯非(fēi)常簡單:當循环(huán)周期(qī)的(de)个(gè)數不(bù)同(tóng)时(shí)就(jiù)可(kě)以(yǐ)選擇變(biàn)量(liàng)法来(lái)進(jìn)行設計(jì)。本(běn)設計(jì)中(zhōng)使用(yòng)x表(biǎo)示計(jì)數器cnt0的(de)計(jì)數數量(liàng),後(hòu)續会(huì)对(duì)x的(de)值進(jìn)行詳细(xì)展(zhǎn)開(kāi)。

    進(jìn)行代(dài)碼編写这(zhè)一(yī)步驟时(shí),以(yǐ)往都是(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)碼補充完整。这(zhè)里(lǐ)就(jiù)使用(yòng)模板編写計(jì)數器代(dài)碼,学習一(yī)下(xià)这(zhè)个(gè)炫酷的(de)功能(néng)。

    打(dǎ)開(kāi)GVIM工具,在(zài)命令模式下(xià)輸入(rù)“:Mdyjsq”後(hòu)點(diǎn)擊回(huí)車就(jiù)調出(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.1-7至(zhì)簡設計(jì)法調用(yòng)計(jì)數器代(dài)碼模板

    按照上(shàng)文(wén)方(fāng)法,可(kě)以(yǐ)得到(dào)該时(shí)間(jiān)計(jì)數器的(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== x-1;

    同(tóng)樣(yàng)的(de),需要(yào)确定(dìng)次(cì)數計(jì)數器cnt1的(de)加1条(tiáo)件(jiàn)和(hé)計(jì)數數量(liàng):可(kě)以(yǐ)看(kàn)到(dào)每當cnt0完成(chéng)一(yī)个(gè)周期(qī)後(hòu)計(jì)數器cnt1就(jiù)会(huì)加1,因(yīn)此(cǐ)cnt1的(de)加1条(tiáo)件(jiàn)即为(wèi)cnt0的(de)結束(shù)計(jì)數,其代(dài)碼表(biǎo)示为(wèi)end_cnt0。此(cǐ)外(wài),從設計(jì)目标(biāo)中(zhōng)可(kě)以(yǐ)得知每一(yī)周期(qī)內(nèi)次(cì)數計(jì)數器cnt1的(de)計(jì)數數量(liàng)为(wèi)9
在(zài)这(zhè)里(lǐ)可(kě)以(yǐ)繼續調用(yòng)模板,在(zài)GVIM的(de)命令模式下(xià)輸入(rù)“:Mdyjsq”後(hòu)點(diǎn)擊回(huí)車調用(yòng)对(duì)應(yìng)模板後(hòu)将“add_cnt1”和(hé)“end_cnt1”補充完整,得到(dào)代(dài)碼为(wèi):

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==9-1 ;

    确定(dìng)好(hǎo)两(liǎng)个(gè)計(jì)數器後(hòu)来(lái)思(sī)考一(yī)下(xià)輸出(chū)信(xìn)号(hào)led的(de)變(biàn)化(huà)。從設計(jì)目标(biāo)可(kě)以(yǐ)得知led有(yǒu)两(liǎng)个(gè)變(biàn)化(huà)點(diǎn):變(biàn)0和(hé)變(biàn)1。變(biàn)0的(de)原因(yīn)均为(wèi)时(shí)間(jiān)計(jì)數器完成(chéng)到(dào)1秒(miǎo)計(jì)數,也(yě)就(jiù)是(shì)當cnt0數到(dào)1_000_000_000/20=50_000_000个(gè)时(shí),計(jì)时(shí)1秒(miǎo)結束(shù),此(cǐ)时(shí)LED1燈(dēng)为(wèi)燈(dēng)滅狀态。設計(jì)目标(biāo)規定(dìng)燈(dēng)暗(àn)一(yī)秒(miǎo)後(hòu)亮(liàng)燈(dēng),即此(cǐ)时(shí)led信(xìn)号(hào)變(biàn)为(wèi)0。同(tóng)理,變(biàn)1是(shì)因(yīn)为(wèi)完成(chéng)了(le)亮(liàng)燈(dēng)的(de)N秒(miǎo)时(shí)間(jiān),相應(yìng)計(jì)數器完成(chéng)了(le)計(jì)數,即end_cnt0

    依旧(jiù)使用(yòng)至(zhì)簡設計(jì)法模板,在(zài)GVIM編輯模式下(xià)輸入(rù)“Shixu2”回(huí)車,調出(chū)模板,得到(dào)led信(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
  
         led <= 1 ;
  
     end
  
     else if(add_cnt0 && cnt0==50_000_000-1)begin
  
         led <= 0 ;
  
     end
  
     else if(end_cnt0)begin
  
         led <= 1 ;
  
     end
  
end

    最(zuì)後(hòu)来(lái)思(sī)考一(yī)下(xià)計(jì)數器cnt0的(de)計(jì)數數量(liàng)x。前(qián)文(wén)中(zhōng)提(tí)到(dào)这(zhè)種(zhǒng)循环(huán)周期(qī)變(biàn)化(huà)的(de)情(qíng)況要(yào)采用(yòng)變(biàn)量(liàng)法来(lái)完成(chéng)設計(jì),下(xià)面(miàn)先(xiān)同(tóng)樣(yàng)以(yǐ)樓房(fáng)門(mén)牌(pái)号(hào)为(wèi)例来(lái)輔助思(sī)考。假設樓房(fáng)的(de)第(dì)一(yī)层为(wèi)八(bā)个(gè)房(fáng)間(jiān),第(dì)二(èr)层为(wèi)十(shí)个(gè)房(fáng)間(jiān),第(dì)三(sān)层为(wèi)十(shí)五(wǔ)个(gè)房(fáng)間(jiān),第(dì)四(sì)层为(wèi)二(èr)十(shí)个(gè)房(fáng)間(jiān)。如(rú)果(guǒ)想(xiǎng)要(yào)用(yòng)代(dài)碼将这(zhè)種(zhǒng)实際情(qíng)況表(biǎo)示出(chū)来(lái),需要(yào)使用(yòng)至(zhì)簡設計(jì)法中(zhōng)的(de)組合邏輯模板,在(zài)編輯模式下(xià)輸入(rù)“Zuhe”後(hòu)回(huí)車,填写对(duì)應(yìng)条(tiáo)件(jiàn)後(hòu)得到(dào)最(zuì)終(zhōng)代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
always   @(*)begin
  
     if(cnt1==0)begin
  
         x = 8 ;
  
     end
  
     else if(cnt1==1)begin
  
         x = 10 ;
  
     end
  
     else if(cnt1==2)begin
  
         x = 15 ;
  
     end
  
     else begin
  
         x = 20 ;
  
     end
  
end

    这(zhè)里(lǐ)的(de)代(dài)碼設計(jì)需要(yào)着重(zhòng)学習一(yī)下(xià),可(kě)以(yǐ)看(kàn)到(dào)至(zhì)簡設計(jì)法写出(chū)的(de)代(dài)碼非(fēi)常的(de)整潔,邏輯思(sī)維一(yī)目了(le)然,这(zhè)種(zhǒng)写法可(kě)以(yǐ)做到(dào)資源最(zuì)优,并且不(bù)会(huì)出(chū)現(xiàn)BUG,自(zì)己实操的(de)时(shí)候可(kě)以(yǐ)使用(yòng)这(zhè)種(zhǒng)写法。

    同(tóng)樣(yàng)的(de)道(dào)理,在(zài)讨論时(shí)間(jiān)計(jì)數器cnt0的(de)时(shí)候曾經(jīng)得出(chū)結論:“計(jì)數器計(jì)數到(dào)2_000_000_000/20=100_000_000个(gè)时(shí)就(jiù)代(dài)表(biǎo)着2秒(miǎo)計(jì)时(shí)結束(shù)。按照此(cǐ)方(fāng)法依次(cì)類(lèi)推,在(zài)第(dì)2次(cì)亮(liàng)暗(àn)控制时(shí)計(jì)數器數到(dào)150_000_000个(gè)时(shí)代(dài)表(biǎo)3秒(miǎo)計(jì)时(shí)結束(shù)。第(dì)4次(cì)亮(liàng)暗(àn)控制时(shí)數到(dào)200_000_000个(gè)时(shí)代(dài)表(biǎo)4秒(miǎo)計(jì)时(shí)結束(shù)……,至(zhì)第(dì)9次(cì)时(shí),數到(dào)500_000_000个(gè)时(shí)代(dài)表(biǎo)10秒(miǎo)計(jì)时(shí)結束(shù)。”,從中(zhōng)可(kě)以(yǐ)看(kàn)出(chū)cnt0的(de)計(jì)數數量(liàng)與(yǔ)cnt1有(yǒu)關(guān)。第(dì)1次(cì)計(jì)數數量(liàng)为(wèi)100_000_000,第(dì)2次(cì)計(jì)數數量(liàng)为(wèi)150_000_000……,按照这(zhè)樣(yàng)的(de)規律可(kě)以(yǐ)将9次(cì)亮(liàng)暗(àn)对(duì)應(yìng)的(de)x都表(biǎo)示出(chū)来(lái)。在(zài)GVIM的(de)編輯模式下(xià)輸入(rù)“Zuhe”後(hòu)回(huí)車,将对(duì)應(yìng)条(tiáo)件(jiàn)補充完整後(hòu)得到(dào)x的(de)賦值代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
  
20
  
21
  
22
  
23
  
24
  
25
  
26
  
27
  
28
  
29
always   @(*)begin
  
     if(cnt1==0)begin
  
         x = 100_000_000 ;
  
     end
  
     else if(cnt1==1)begin
  
         x = 150_000_000 ;
  
     end
  
     else if(cnt1==2)begin
  
         x = 200_000_000 ;
  
     end
  
     else if(cnt1==3)begin
  
         x = 250_000_000 ;
  
     end
  
     else if(cnt1==4)begin
  
         x = 300_000_000 ;
  
     end
  
     else if(cnt1==5)begin
  
         x = 350_000_000 ;
  
     end
  
     else if(cnt1==6)begin
  
         x = 400_000_000 ;
  
     end
  
     else if(cnt1==7)begin
  
         x = 450_000_000 ;
  
     end
  
     else begin
  
         x = 500_000_000 ;
  
     end
  
end

    至(zhì)此(cǐ),本(běn)設計(jì)的(de)主(zhǔ)體(tǐ)程序已經(jīng)完成(chéng)。回(huí)顧一(yī)下(xià)思(sī)考过(guò)程可(kě)以(yǐ)發(fà)現(xiàn):設計(jì)的(de)每一(yī)步都是(shì)按照設計(jì)目标(biāo)逐步展(zhǎn)開(kāi),看(kàn)似是(shì)在(zài)讨論每个(gè)小問(wèn)題(tí),但其实都是(shì)圍繞設計(jì)目标(biāo)進(jìn)行讨論,这(zhè)也(yě)是(shì)本(běn)書(shū)最(zuì)開(kāi)始強(qiáng)調制定(dìng)和(hé)理解(jiě)設計(jì)目标(biāo)的(de)重(zhòng)要(yào)性(xìng)的(de)原因(yīn)。

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)判斷信(xìn)号(hào)類(lèi)型时(shí)会(huì)感(gǎn)到(dào)很困惑,搞不(bù)清(qīng)楚如(rú)何确定(dìng)reg和(hé)wire。其实大多(duō)數的(de)困惑是(shì)因(yīn)为(wèi)聯想(xiǎng)的(de)太多(duō),例如(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)寄存器,然而(ér)实際上(shàng)这(zhè)些與(yǔ)信(xìn)号(hào)是(shì)reg型還(huán)是(shì)wire型都并无關(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)。

    cnt0是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)reg。根(gēn)據(jù)前(qián)文(wén)計(jì)算可(kě)知cnt0計(jì)數的(de)最(zuì)大值为(wèi)500_000_000,根(gēn)據(jù)至(zhì)簡設計(jì)法的(de)实用(yòng)技巧,打(dǎ)開(kāi)計(jì)算器後(hòu)在(zài)程序員模式十(shí)進(jìn)制下(xià)輸入(rù)500_000_000,如(rú)下(xià)图(tú)所(suǒ)示。可(kě)以(yǐ)看(kàn)出(chū),信(xìn)号(hào)的(de)位宽(kuān)为(wèi)29

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

    綜上(shàng)所(suǒ)述cnt0的(de)定(dìng)義代(dài)碼如(rú)下(xià):
1
reg    [28: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)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(dài)碼表(biǎo)示如(rú)下(xià):
1
  
2
wire      add_cnt0  ;
  
wire      end_cnt0  ;

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

    led是(shì)用(yòng)always方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)regled信(xìn)号(hào)值是(shì)0或(huò)者(zhě)11根(gēn)線(xiàn)表(biǎo)示即可(kě)。編輯模式下(xià)輸入(rù)“Reg1”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(dài)碼表(biǎo)示如(rú)下(xià):
1
reg         led     ;

    x是(shì)用(yòng)always方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)reg。其最(zuì)大值为(wèi)500_000_000,需要(yào)用(yòng)29根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)为(wèi)29。需要(yào)注意(yì)的(de)是(shì):这(zhè)里(lǐ)的(de)x是(shì)使用(yòng)組合邏輯設計(jì)的(de),綜合結果(guǒ)也(yě)不(bù)会(huì)有(yǒu)寄存器,但是(shì)遵循刚刚提(tí)到(dào)的(de)信(xìn)号(hào)判斷原則,x是(shì)用(yòng)always設計(jì)出(chū)来(lái)的(de),所(suǒ)以(yǐ)依旧(jiù)使用(yòng)reg型来(lái)進(jìn)行定(dìng)義。代(dài)碼表(biǎo)示如(rú)下(xià):
1
reg   [28:0]   x       ;

    至(zhì)此(cǐ),整个(gè)代(dài)碼的(de)設計(jì)工作已經(jīng)完成(chéng)。完整版的(de)工程代(dài)碼如(rú)下(xià):
1
module my_led(clk,rst_n,led);
  
  
input    clk  ;
  
input    rst_n  ;
  
output   led     ;
  
  
  
reg [28:0]  cnt0         ;
  
wire     add_cnt0    ;
  
wire     end_cnt0    ;
  
reg [3:0]   cnt1        ;
  
wire     add_cnt1    ;
  
wire     end_cnt1    ;
  
reg [28:0]  x            ;
  
reg      led         ;
  
  
  
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==x-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==9-1 ;
  
  
  
always   @(posedge clk or negedge rst_n)begin
  
     if(rst_n==1'b0)begin
  
         led<=1;
  
     end
  
     else if(add_cnt0 && cnt0==50000000-1)begin
  
         led<=0;
  
     end
  
     else if(end_cnt0)begin
  
         led<=1;
  
     end
  
end
  
  
  
  
  
always   @(*)begin
  
     if(cnt1==0)begin
  
         x=100000000;
  
     end
  
     else if(cnt1==1)begin
  
         x=150000000;
  
     end
  
     else if(cnt1==2)begin
  
         x=200000000;
  
     end
  
     else if(cnt1==3)begin
  
         x=250000000;
  
     end
  
     else if(cnt1==4)begin
  
         x=300000000;
  
     end
  
     else if(cnt1==5)begin
  
         x=350000000;
  
     end
  
     else if(cnt1==6)begin
  
         x=400000000;
  
     end
  
     else if(cnt1==7)begin
  
         x=450000000;
  
     end
  
     else begin
  
         x=500000000;
  
     end
  
end
  
  
endmodule


第(dì)4节(jié) 綜合與(yǔ)上(shàng)板

上(shàng)一(yī)节(jié)完成(chéng)了(le)代(dài)碼的(de)設計(jì),接下(xià)来(lái)需要(yào)对(duì)其進(jìn)行綜合以(yǐ)及(jí)上(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ú)图(tú)3.1-9所(suǒ)示。
图(tú)3.1-9Quartus新建工程界面(miàn)

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

    此(cǐ)时(shí)会(huì)出(chū)現(xiàn)工程文(wén)件(jiàn)夾、工程名、頂层模块(kuài)名設置界面(miàn),如(rú)图(tú)3.1-11所(suǒ)示。注意(yì)目录(lù)为(wèi):D:/mdy_book/my_led,工程名和(hé)頂层名为(wèi)my_led。这(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.1-11QUARTUS新建工程設置名稱

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

图(tú)3.1-13QUARTUS添加文(wén)件(jiàn)

    文(wén)件(jiàn)添加界面(miàn)如(rú)图(tú)3.1-13所(suǒ)示,此(cǐ)时(shí)添加之前(qián)写的(de)“my_led.v”文(wén)件(jiàn),點(diǎn)擊右(yòu)側的(de)“Add”按鈕後(hòu)文(wén)件(jiàn)会(huì)在(zài)下(xià)方(fāng)顯示出(chū)来(lái),随後(hòu)點(diǎn)擊“Next”。
图(tú)3.1-14QUARTUS選擇芯片(piàn)型号(hào)

    芯片(piàn)型号(hào)選擇界面(miàn)如(rú)图(tú)3.1-14所(suǒ)示,選擇“Cyclone E”,在(zài)芯片(piàn)型号(hào)選擇处選擇“EP4CE15F23C8”,然後(hòu)點(diǎn)擊“Next”。
图(tú)3.1-15QUARTUS設置工具界面(miàn)

    QUARTUS設置工具界面(miàn)如(rú)图(tú)3.1-15所(suǒ)示,不(bù)必要(yào)修改,直(zhí)接點(diǎn)擊“Next”。
图(tú)3.1-16QUARTUS新建工程彙總(zǒng)界面(miàn)

图(tú)3.1-16中(zhōng)可(kě)以(yǐ)看(kàn)到(dào)新建工程的(de)彙總(zǒng)情(qíng)況,點(diǎn)擊“Finish”,完成(chéng)新建工程。

4.2 綜合
    新建工程步驟完成(chéng)後(hòu),QUARTUS界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)3.1-17QUARTUS新建工程後(hòu)界面(miàn)

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

4.3 配置管(guǎn)脚
    下(xià)面(miàn)需要(yào)对(duì)相應(yìng)管(guǎn)脚進(jìn)行配置。如(rú)图(tú)3.1-19所(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.1-19QUARTUS配置管(guǎn)脚選項

    在(zài)配置窗(chuāng)口(kǒu)最(zuì)下(xià)方(fāng)中(zhōng)的(de)location一(yī)列,按照表(biǎo)3.1-2中(zhōng)最(zuì)右(yòu)两(liǎng)列進(jìn)行FPGA管(guǎn)脚的(de)配置。此(cǐ)处配置管(guǎn)理来(lái)源的(de)選擇在(zài)最(zuì)開(kāi)始的(de)管(guǎn)脚配置設計(jì)环(huán)节(jié)中(zhōng)有(yǒu)進(jìn)行講解(jiě),最(zuì)終(zhōng)配置的(de)結果(guǒ)見(jiàn)图(tú)3.1-20

表(biǎo)3.1-2信(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)
LED1
LED1_NET
AA4
led
X1
SYS_CLK
G1
clk
K1
SYS_RST
AB12
rst_n
图(tú)3.1-20QUARTUS配置管(guǎn)脚
    配置完成(chéng)後(hòu)關(guān)閉“Pin Planner”,软(ruǎn)件(jiàn)自(zì)動(dòng)会(huì)保存管(guǎn)脚配置信(xìn)息。

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

图(tú)3.1-22QUARTUS編譯成(chéng)功标(biāo)志

當出(chū)現(xiàn)图(tú)3.1-22时(shí)说(shuō)明(míng)編譯綜合成(chéng)功。

4.5 連(lián)接開(kāi)發(fà)板
    完成(chéng)編譯後(hòu)開(kāi)始進(jìn)行上(shàng)板調試操作,首先(xiān)進(jìn)行開(kāi)發(fà)板的(de)連(lián)接。按照图(tú)3.1-23中(zhōng)的(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)。
图(tú)3.1-231位閃爍燈(dēng)開(kāi)發(fà)板連(lián)接图(tú)

4.6 上(shàng)板
    單擊下(xià)图(tú)所(suǒ)示的(de)QUARTUS界面(miàn)中(zhōng)的(de) 按鈕,弹出(chū)配置界面(miàn)。
图(tú)3.1-24QUARTUS界面(miàn)

    随後(hòu)點(diǎn)擊add file後(hòu)添加.sof文(wén)件(jiàn),之後(hòu)點(diǎn)擊“Start”,在(zài)“Progress”会(huì)顯示出(chū)進(jìn)度(dù)。
图(tú)3.1-25QUARTUS下(xià)载程序界面(miàn)

如(rú)图(tú)3.1-25所(suǒ)示,“Progress”進(jìn)度(dù)条(tiáo)中(zhōng)提(tí)示成(chéng)功後(hòu)即可(kě)在(zài)開(kāi)發(fà)板上(shàng)观察到(dào)相應(yìng)的(de)現(xiàn)象(xiàng)。可(kě)以(yǐ)看(kàn)到(dào)開(kāi)發(fà)板上(shàng)的(de)LED燈(dēng)開(kāi)始閃爍,并且按照亮(liàng)一(yī)秒(miǎo)滅一(yī)秒(miǎo),亮(liàng)两(liǎng)秒(miǎo)滅一(yī)秒(miǎo)的(de)規律進(jìn)行循环(huán)閃爍。當观察到(dào)開(kāi)發(fà)板上(shàng)的(de)LED燈(dēng)可(kě)以(yǐ)照常閃爍,并且在(zài)亮(liàng)九秒(miǎo)滅一(yī)秒(miǎo)後(hòu)又回(huí)到(dào)亮(liàng)一(yī)秒(miǎo)滅一(yī)秒(miǎo)的(de)循环(huán)时(shí)就(jiù)可(kě)以(yǐ)判斷此(cǐ)次(cì)实验(yàn)成(chéng)功。如(rú)果(guǒ)出(chū)現(xiàn)LED燈(dēng)不(bù)亮(liàng)或(huò)者(zhě)不(bù)能(néng)按照規律進(jìn)行閃爍等情(qíng)況时(shí),需要(yào)回(huí)头(tóu)思(sī)考檢查問(wèn)題(tí)的(de)出(chū)現(xiàn)點(diǎn),建議可(kě)以(yǐ)多(duō)進(jìn)行幾(jǐ)遍(biàn)操作,不(bù)要(yào)粗(cū)心(xīn),找(zhǎo)到(dào)錯誤點(diǎn)後(hòu)進(jìn)行改正(zhèng)。

第(dì)5节(jié) 簡化(huà)版步驟分(fēn)享
为(wèi)了(le)便于(yú)有(yǒu)基礎的(de)同(tóng)学操作学習,本(běn)書(shū)也(yě)準備了(le)簡化(huà)版的(de)操作步驟。當然对(duì)于(yú)初学者(zhě)来(lái)说(shuō),掌握了(le)各(gè)个(gè)部(bù)分(fēn)原理後(hòu)也(yě)可(kě)以(yǐ)按照下(xià)列方(fāng)法進(jìn)行重(zhòng)複性(xìng)的(de)实验(yàn)操作練習,加強(qiáng)实操能(néng)力。

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

5.1.1頂层信(xìn)号(hào)
    新建目录(lù):D:mdy_bookmy_led。在(zài)該目录(lù)中(zhōng)新建一(yī)个(gè)名为(wèi)my_led.v的(de)文(wén)件(jiàn),用(yòng)GVIM打(dǎ)開(kāi)後(hòu)開(kāi)始編写代(dài)碼。

    确定(dìng)頂层信(xìn)号(hào)。此(cǐ)工程信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)如(rú)下(xià)表(biǎo)所(suǒ)示。
表(biǎo)3.1-2 信(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)
LED1
LED1_NET
AA4
led
X1
SYS_CLK
G1
clk
K1
SYS_RST
AB12
rst_n
    写出(chū)頂层信(xìn)号(hào)代(dài)碼:
1
  
2
  
3
  
4
  
5
module my_led(
  
clk   ,
  
rst_n   ,
  
     led
  
     );
聲明(míng)輸入(rù)輸出(chū)屬性(xìng):
1
  
2
  
3
input               clk  ;
  
input               rst_n  ;
  
output              led    ;


5.1.2信(xìn)号(hào)設計(jì)

    進(jìn)行架構設計(jì)。根(gēn)據(jù)設計(jì)需求画(huà)出(chū)設計(jì)的(de)波(bō)形图(tú):
图(tú)3.1- 41位閃爍燈(dēng)的(de)波(bō)形图(tú)

    設計(jì)計(jì)數器架構,对(duì)表(biǎo)示計(jì)算时(shí)間(jiān)的(de)計(jì)數器cnt0進(jìn)行代(dài)碼設計(jì):

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== x-1;

    对(duì)表(biǎo)示計(jì)算次(cì)數的(de)計(jì)數器cnt1進(jìn)行代(dài)碼設計(jì):

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==9-1 ;
    設計(jì)led信(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
  
         led <= 1 ;
  
     end
  
     else if(add_cnt0 && cnt0==50_000_000-1)begin
  
         led <= 0 ;
  
     end
  
     else if(end_cnt0)begin
  
         led <= 1 ;
  
     end
  
end

    設計(jì)表(biǎo)示計(jì)數器cnt0的(de)循环(huán)次(cì)x的(de)代(dài)碼:
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
  
20
  
21
  
22
  
23
  
24
  
25
  
26
  
27
  
28
  
29
always   @(*)begin
  
     if(cnt1==0)begin
  
         x = 100_000_000 ;
  
     end
  
     else if(cnt1==1)begin
  
         x = 150_000_000 ;
  
     end
  
     else if(cnt1==2)begin
  
         x = 200_000_000 ;
  
     end
  
     else if(cnt1==3)begin
  
         x = 250_000_000 ;
  
     end
  
     else if(cnt1==4)begin
  
         x = 300_000_000 ;
  
     end
  
     else if(cnt1==5)begin
  
         x = 350_000_000 ;
  
     end
  
     else if(cnt1==6)begin
  
         x = 400_000_000 ;
  
     end
  
     else if(cnt1==7)begin
  
         x = 450_000_000 ;
  
     end
  
     else begin
  
         x = 500_000_000 ;
  
     end
  
end
主(zhǔ)體(tǐ)程序完成(chéng)後(hòu)将module補充完整。

5.1.3信(xìn)号(hào)定(dìng)義
    首先(xiān),对(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  ;
    led信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
reg         led     ;
    x信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
reg   [28:0]   x       ;
   
    至(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.1-9Quartus新建工程界面(miàn)

點(diǎn)擊“Next”:
图(tú)3.1-10Quartus新建工程介紹

如(rú)下(xià)图(tú)所(suǒ)示設置工程文(wén)件(jiàn)夾、工程名、頂层模块(kuài)名後(hòu)點(diǎn)擊“Next”。
图(tú)3.1-11QUARTUS新建工程設置名稱

選擇“Empty project”後(hòu)點(diǎn)擊“Next”。
图(tú)3.1-12QUARTUS新建工程類(lèi)型

點(diǎn)擊“Add”選項-後(hòu)添加“my_led.v”文(wén)件(jiàn)後(hòu)點(diǎn)擊“Next”。
图(tú)3.1-13QUARTUS添加文(wén)件(jiàn)

在(zài)“Device family”選項中(zhōng)選擇“Cyclone E”,“Available devices”選項中(zhōng)選擇“EP4CE15F23C8”,随後(hòu)點(diǎn)擊“Next”。
图(tú)3.1-14QUARTUS選擇芯片(piàn)型号(hào)

直(zhí)接點(diǎn)擊“Next”。
图(tú)3.1-15QUARTUS設置工具界面(miàn)

點(diǎn)擊“Finish”後(hòu)完成(chéng)新建工程。
图(tú)3.1-16QUARTUS新建工程彙總(zǒng)界面(miàn)

5.2.2綜合

新建工程後(hòu)界面(miàn)如(rú)图(tú)3.1-17所(suǒ)示,點(diǎn)擊“編譯”按鈕,編譯成(chéng)功後(hòu)界面(miàn)如(rú)图(tú)3.1-18所(suǒ)示。
图(tú)3.1-17QUARTUS新建工程後(hòu)界面(miàn)

图(tú)3.1-18QUARTUS編譯後(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.1-19QUARTUS配置管(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.1-20QUARTUS配置管(guǎn)脚

5.2.4再次(cì)綜合
菜單欄中(zhōng)選擇“Processing”後(hòu)點(diǎn)擊“Start Compilation”再次(cì)進(jìn)行綜合。
图(tú)3.1-21QUARTUS編譯選項

出(chū)現(xiàn)QUARTUS編譯成(chéng)功标(biāo)志即表(biǎo)示此(cǐ)次(cì)編譯成(chéng)功。
图(tú)3.1-22QUARTUS編譯成(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.1-23 1位閃爍燈(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.1-24QUARTUS界面(miàn)

點(diǎn)擊“add file”添加“.sof”文(wén)件(jiàn),随後(hòu)點(diǎn)擊“Start”。“Progress”会(huì)顯示進(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.1-25QUARTUS下(xià)载程序界面(miàn)

第(dì)6节(jié) 擴展(zhǎn)練習
    至(zhì)此(cǐ)整个(gè)1位閃爍燈(dēng)設計(jì)已經(jīng)分(fēn)享完畢,这(zhè)里(lǐ)只(zhī)是(shì)展(zhǎn)示了(le)一(yī)个(gè)案(àn)例,已經(jīng)掌握原理後(hòu)可(kě)以(yǐ)試着進(jìn)行設計(jì)的(de)擴展(zhǎn)延伸。比如(rú)在(zài)同(tóng)樣(yàng)的(de)閃爍燈(dēng)設計(jì)中(zhōng)更(gèng)改閃爍时(shí)間(jiān)再進(jìn)行上(shàng)板嘗試,舉一(yī)反(fǎn)三(sān),既考察了(le)自(zì)己的(de)知識掌握程度(dù),又強(qiáng)化(huà)了(le)自(zì)己的(de)設計(jì)能(néng)力。鼓勵同(tóng)学们(men)对(duì)此(cǐ)設計(jì)進(jìn)行擴展(zhǎn)性(xìng)的(de)思(sī)考和(hé)讨論,有(yǒu)更(gèng)好(hǎo)的(de)思(sī)路(lù)可(kě)以(yǐ)前(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⁥⁠⁢

⁧⁨⁥⁨