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

2.4至(zhì)簡設計(jì)規範--明(míng)德揚科教(minyingyiyuan.com)

發(fà)布(bù)时(shí)間(jiān):2021-08-22   作者(zhě):admin 浏覽量(liàng):
第(dì)二(èr)篇(piān) FPGA至(zhì)簡設計(jì)原理

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

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

1、本(běn)視頻詳细(xì)講解(jiě)了(le)如(rú)何正(zhèng)确的(de)看(kàn)懂 信(xìn)号(hào)波(bō)形


  第(dì)四(sì)章(zhāng) FPGA至(zhì)簡設計(jì)法規範


第(dì)1节(jié) 波(bō)形图(tú)規則

    至(zhì)簡設計(jì)法曾在(zài)D觸發(fà)器的(de)相關(guān)知識講解(jiě)中(zhōng),詳细(xì)的(de)描述了(le)如(rú)何看(kàn)FPGA信(xìn)号(hào)的(de)波(bō)形。針(zhēn)对(duì)波(bō)形的(de)規則,只(zhī)需記(jì)住一(yī)點(diǎn):时(shí)鐘(zhōng)上(shàng)升(shēng)沿看(kàn)信(xìn)号(hào),看(kàn)到(dào)的(de)是(shì)信(xìn)号(hào)變(biàn)化(huà)前(qián)的(de)值。这(zhè)是(shì)什麼(me)意(yì)思(sī)呢?就(jiù)是(shì)说(shuō)在(zài)每一(yī)个(gè)时(shí)鐘(zhōng)上(shàng)升(shēng)沿查看(kàn)信(xìn)号(hào)时(shí),如(rú)果(guǒ)信(xìn)号(hào)的(de)值發(fà)生(shēng)了(le)改變(biàn),那(nà)麼(me)此(cǐ)时(shí)的(de)信(xìn)号(hào)值为(wèi)信(xìn)号(hào)改變(biàn)前(qián)的(de)值。還(huán)沒(méi)有(yǒu)理解(jiě)或(huò)者(zhě)非(fēi)常感(gǎn)興趣的(de)朋友,可(kě)以(yǐ)查找(zhǎo)对(duì)應(yìng)章(zhāng)节(jié)仔细(xì)学習相關(guān)內(nèi)容。

    下(xià)面(miàn)来(lái)舉例说(shuō)明(míng)一(yī)下(xià),观察图(tú)2.4-1中(zhōng)第(dì)4个(gè)时(shí)鐘(zhōng)上(shàng)升(shēng)沿相應(yìng)的(de)信(xìn)号(hào)變(biàn)化(huà)可(kě)以(yǐ)看(kàn)到(dào)在(zài)第(dì)4个(gè)时(shí)鐘(zhōng)上(shàng)升(shēng)沿,信(xìn)号(hào)a和(hé)信(xìn)号(hào)c發(fà)生(shēng)了(le)改變(biàn)。信(xìn)号(hào)a由(yóu)1變(biàn)为(wèi)0,信(xìn)号(hào)c由(yóu)0變(biàn)为(wèi)1,此(cǐ)时(shí)的(de)信(xìn)号(hào)值應(yìng)該看(kàn)變(biàn)化(huà)前(qián)的(de)值,因(yīn)此(cǐ)在(zài)第(dì)4个(gè)时(shí)鐘(zhōng)上(shàng)升(shēng)沿信(xìn)号(hào)a的(de)值为(wèi)1,信(xìn)号(hào)c的(de)值为(wèi)0。再来(lái)观察第(dì)5个(gè)时(shí)鐘(zhōng)的(de)上(shàng)升(shēng)沿,可(kě)以(yǐ)看(kàn)出(chū)信(xìn)号(hào)b和(hé)信(xìn)号(hào)c發(fà)生(shēng)了(le)改變(biàn)。同(tóng)樣(yàng)的(de),此(cǐ)时(shí)信(xìn)号(hào)值为(wèi)變(biàn)化(huà)前(qián)的(de)值,即信(xìn)号(hào)b的(de)值为(wèi)1,信(xìn)号(hào)c的(de)值也(yě)为(wèi)1
                              

图(tú)2.4-1波(bō)形图(tú)規則示例1

再来(lái)看(kàn)图(tú)2.4-2,在(zài)第(dì)5个(gè)时(shí)鐘(zhōng)上(shàng)升(shēng)沿处观察信(xìn)号(hào)dout和(hé)信(xìn)号(hào)cnt的(de)值。根(gēn)據(jù)規則可(kě)知信(xìn)号(hào)要(yào)取(qǔ)變(biàn)化(huà)之前(qián)的(de)值,即信(xìn)号(hào)dout取(qǔ)值为(wèi)1,同(tóng)樣(yàng)的(de)道(dào)理,信(xìn)号(hào)cnt的(de)取(qǔ)值同(tóng)樣(yàng)为(wèi)1,并不(bù)是(shì)2
图(tú)2.4-2波(bō)形图(tú)規則示例2

    以(yǐ)上(shàng)就(jiù)是(shì)观察波(bō)形的(de)規則,只(zhī)要(yào)記(jì)住在(zài)不(bù)确定(dìng)的(de)信(xìn)号(hào)处均選擇前(qián)面(miàn)的(de)信(xìn)号(hào),就(jiù)一(yī)定(dìng)不(bù)会(huì)出(chū)錯。當然,該方(fāng)法的(de)使用(yòng)前(qián)提(tí)是(shì)所(suǒ)有(yǒu)信(xìn)号(hào)都是(shì)同(tóng)步信(xìn)号(hào)且波(bō)形是(shì)理想(xiǎng)的(de)波(bō)形,不(bù)然一(yī)切(qiè)都是(shì)空談。該方(fāng)法的(de)具體(tǐ)原理解(jiě)釋可(kě)以(yǐ)參考学習至(zhì)簡設計(jì)法D觸發(fà)器中(zhōng)波(bō)形查看(kàn)的(de)相關(guān)內(nèi)容。

第(dì)2节(jié) 計(jì)數器規範

    計(jì)數器設計(jì)是(shì)FPGA設計(jì)的(de)核心(xīn),計(jì)數器架構是(shì)FPGA設計(jì)最(zuì)常用(yòng)的(de)架構之一(yī),也(yě)是(shì)至(zhì)簡設計(jì)法的(de)核心(xīn)部(bù)分(fēn)。計(jì)數器架構并不(bù)難,只(zhī)要(yào)認真(zhēn)学習这(zhè)部(bù)分(fēn)內(nèi)容,相信(xìn)廣大初学者(zhě)也(yě)能(néng)掌握FPGA設計(jì)的(de)精髓。本(běn)書(shū)在(zài)这(zhè)里(lǐ)也(yě)会(huì)提(tí)供通(tòng)过(guò)一(yī)些項目練習来(lái)進(jìn)行鞏固学習。

本(běn)章(zhāng)主(zhǔ)要(yào)介紹至(zhì)簡設計(jì)法的(de)計(jì)數器規則。

    下(xià)面(miàn)是(shì)至(zhì)簡設計(jì)法的(de)計(jì)數器模板樣(yàng)式,其包(bāo)括三(sān)段(duàn):計(jì)數器的(de)always語(yǔ)句(jù),加1条(tiáo)件(jiàn)的(de)定(dìng)義以(yǐ)及(jí)結束(shù)条(tiáo)件(jiàn)的(de)定(dìng)義。

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
  
cnt<= 0;
  
    end
  
    else if(加1条(tiáo)件(jiàn)) begin
  
        if(結束(shù)条(tiáo)件(jiàn))
  
cnt<= 0;
  
        else
  
cnt<= cnt + 1;
  
    end
  
end
  
assign 加1条(tiáo)件(jiàn) = ;
  
assign 結束(shù)条(tiáo)件(jiàn) = 加1条(tiáo)件(jiàn)&&cnt==(計(jì)數个(gè)數)-1;

  
計(jì)數器規則1:計(jì)數器逐一(yī)考慮三(sān)要(yào)素,初值、加1条(tiáo)件(jiàn)和(hé)結束(shù)值;
  
  • 任何計(jì)數器都有(yǒu)三(sān)个(gè)要(yào)素:初值、加1条(tiáo)件(jiàn)和(hé)結束(shù)值。
  • 初值:計(jì)數器的(de)默認值或(huò)者(zhě)開(kāi)始計(jì)數的(de)值。
  • 加1条(tiáo)件(jiàn):計(jì)數器執行加1的(de)条(tiáo)件(jiàn)。
  • 結束(shù)值:計(jì)數器計(jì)數周期(qī)的(de)最(zuì)後(hòu)一(yī)个(gè)值。
  • 設計(jì)計(jì)數器,要(yào)逐一(yī)考慮这(zhè)三(sān)个(gè)要(yào)素,一(yī)般是(shì)先(xiān)考慮初值、再考慮加1条(tiáo)件(jiàn),最(zuì)後(hòu)再考慮結束(shù)值。


  
計(jì)數器規則2:計(jì)數初值必須为(wèi)0
  
  • 計(jì)數器的(de)默認值和(hé)計(jì)數器的(de)初始值一(yī)定(dìng)要(yào)为(wèi)0,这(zhè)是(shì)至(zhì)簡設計(jì)法規範的(de)統一(yī)要(yào)求。衆所(suǒ)周知,一(yī)般編程語(yǔ)言計(jì)數都是(shì)從0開(kāi)始的(de),0計(jì)第(dì)1个(gè)數,1計(jì)第(dì)2个(gè)數,以(yǐ)此(cǐ)類(lèi)推。至(zhì)簡設計(jì)法也(yě)參考这(zhè)種(zhǒng)做法,計(jì)數器從0開(kāi)始進(jìn)行計(jì)數。
  • 所(suǒ)有(yǒu)計(jì)數器都統一(yī)從0開(kāi)始計(jì)數有(yǒu)助于(yú)同(tóng)学们(men)閱读(dú)理解(jiě)、方(fāng)便使用(yòng),如(rú)此(cǐ)一(yī)来(lái),同(tóng)学们(men)不(bù)需要(yào)從头(tóu)看(kàn)具體(tǐ)代(dài)碼就(jiù)能(néng)清(qīng)楚这(zhè)个(gè)數值的(de)含義。


  
計(jì)數器規則3:只(zhī)有(yǒu)在(zài)加1条(tiáo)件(jiàn)有(yǒu)效时(shí),才能(néng)表(biǎo)示計(jì)數器的(de)計(jì)數值。
  
假定(dìng)加1条(tiáo)件(jiàn)为(wèi)add_cnt,計(jì)數器當前(qián)值为(wèi)cnt,則
  • add_cnt&&cnt==x-1表(biǎo)示計(jì)數器計(jì)數到(dào)x个(gè)。
  • cnt==x-1不(bù)能(néng)表(biǎo)示計(jì)數器計(jì)數到(dào)x个(gè)。
計(jì)數器是(shì)從0開(kāi)始計(jì)數的(de),因(yīn)此(cǐ)計(jì)數器的(de)默認值即初始值是(shì)0。那(nà)麼(me)當計(jì)數器的(de)值为(wèi)0时(shí)要(yào)如(rú)何區(qū)分(fēn)这(zhè)是(shì)開(kāi)始計(jì)數的(de)第(dì)1个(gè)值,還(huán)是(shì)并未計(jì)數的(de)默認值呢?
这(zhè)種(zhǒng)情(qíng)況下(xià)可(kě)以(yǐ)通(tòng)过(guò)加1条(tiáo)件(jiàn)来(lái)進(jìn)行區(qū)分(fēn)。當加1条(tiáo)件(jiàn)无效时(shí),計(jì)數器值为(wèi)0表(biǎo)示未開(kāi)始計(jì)數,此(cǐ)时(shí)的(de)0为(wèi)默認值;當加1条(tiáo)件(jiàn)有(yǒu)效时(shí),計(jì)數器值为(wèi)0表(biǎo)示計(jì)的(de)第(dì)1个(gè)數。同(tóng)理,當cnt==x-1,不(bù)能(néng)表(biǎo)示計(jì)數到(dào)x;只(zhī)有(yǒu)當cnt==x-1且加1条(tiáo)件(jiàn)有(yǒu)效时(shí),才表(biǎo)示計(jì)數到(dào)x。
因(yīn)此(cǐ),當add_cnt&&cnt==5-1时(shí),表(biǎo)示計(jì)數到(dào)5个(gè)。而(ér)當add_cnt==0&&cnt==5-1时(shí),不(bù)能(néng)表(biǎo)示計(jì)數到(dào)5个(gè)。

  
計(jì)數器規則4:結束(shù)条(tiáo)件(jiàn)必須同(tóng)时(shí)滿足加1条(tiáo)件(jiàn),且結束(shù)值必須是(shì)x-1的(de)形式;
  

計(jì)數器的(de)結束(shù)条(tiáo)件(jiàn)必須同(tóng)时(shí)滿足加1条(tiáo)件(jiàn)。假定(dìng)add_cnt为(wèi)加1条(tiáo)件(jiàn),cnt为(wèi)當前(qián)計(jì)數器值,如(rú)果(guǒ)要(yào)計(jì)5个(gè)數,那(nà)麼(me)結束(shù)值應(yìng)該是(shì)4,但是(shì)結束(shù)条(tiáo)件(jiàn)并不(bù)是(shì)cnt==4,而(ér)是(shì)add_cnt&&cnt==4。因(yīn)为(wèi)根(gēn)據(jù)規則3可(kě)知cnt==4不(bù)能(néng)表(biǎo)示計(jì)數到(dào)5个(gè),只(zhī)有(yǒu)add_cnt&&cnt==4时(shí),才表(biǎo)示計(jì)數到(dào)5个(gè)。
为(wèi)了(le)更(gèng)好(hǎo)地(dì)閱读(dú)代(dài)碼,至(zhì)簡設計(jì)法規定(dìng)結束(shù)值必須是(shì)x-1的(de)形式。即add_cnt&&cnt==4要(yào)写成(chéng)add_cnt&&cnt==5-1。这(zhè)里(lǐ)的(de)“5”表(biǎo)示計(jì)數數量(liàng),“-1”則是(shì)固定(dìng)格式。有(yǒu)了(le)这(zhè)个(gè)約定(dìng)後(hòu)計(jì)數的(de)邊(biān)界直(zhí)观清(qīng)晰。至(zhì)簡設計(jì)法多(duō)年(nián)的(de)項目实踐發(fà)現(xiàn):无論多(duō)麼(me)有(yǒu)經(jīng)验(yàn)的(de)工程师(shī),对(duì)于(yú)邊(biān)界值總(zǒng)会(huì)要(yào)多(duō)花一(yī)些心(xīn)思(sī)来(lái)考慮。因(yīn)此(cǐ),至(zhì)簡設計(jì)法索性(xìng)就(jiù)制定(dìng)了(le)这(zhè)个(gè)規則使得工程师(shī)不(bù)需要(yào)再考慮邊(biān)界条(tiáo)件(jiàn)。

  
計(jì)數器規則5:當取(qǔ)某个(gè)數时(shí),assign形式必須为(wèi):(加1条(tiáo)件(jiàn))&&cnt==計(jì)數值-1);
  
當要(yào)從計(jì)數器取(qǔ)某个(gè)數时(shí),例如(rú)要(yào)取(qǔ)計(jì)數器第(dì)5个(gè)數,很容易就(jiù)写成(chéng)cnt==5-1,这(zhè)一(yī)写法是(shì)不(bù)正(zhèng)确的(de)。正(zhèng)确的(de)写法是(shì)(加1条(tiáo)件(jiàn))&&(cnt==計(jì)數值-1),如(rú)add_cnt&&cnt==5-1。原因(yīn)可(kě)以(yǐ)參考計(jì)數器規則3的(de)说(shuō)明(míng)。

  
計(jì)數器規則6:計(jì)數結束(shù)後(hòu),計(jì)數器的(de)值必須恢複默認值0
  
每轮計(jì)數器周期(qī)結束(shù)後(hòu),計(jì)數器必須變(biàn)回(huí)0,这(zhè)是(shì)为(wèi)了(le)使計(jì)數器能(néng)够循环(huán)重(zhòng)複計(jì)數。

  
計(jì)數器規則7:若需要(yào)限定(dìng)範圍,推薦使用(yòng)“>=”和(hé)“<”两(liǎng)種(zhǒng)符号(hào);
  
邊(biān)界值的(de)設計(jì)通(tòng)常都要(yào)花費一(yī)些心(xīn)思(sī),而(ér)且容易出(chū)錯。为(wèi)此(cǐ),至(zhì)簡設計(jì)法規範約定(dìng),如(rú)果(guǒ)需要(yào)限定(dìng)範圍时(shí),推薦使用(yòng)“>=”和(hé)“<”两(liǎng)種(zhǒng)符号(hào)。例如(rú)要(yào)取(qǔ)前(qián)8个(gè)數,那(nà)麼(me)就(jiù)取(qǔ)cnt>=0&&cnt<8。注意(yì),一(yī)定(dìng)是(shì)“大于(yú)等于(yú)”和(hé)“小于(yú)”符号(hào),而(ér)不(bù)能(néng)使用(yòng)“大于(yú)”、“小于(yú)等于(yú)”符号(hào)。
該規則參考編程里(lǐ)的(de)for循环(huán)語(yǔ)句(jù)。假如(rú)要(yào)循环(huán)8次(cì),for循环(huán)的(de)条(tiáo)件(jiàn)通(tòng)常会(huì)写成(chéng)“i=0;i<8;i++”,0为(wèi)開(kāi)始值,8为(wèi)循环(huán)个(gè)數。當然,也(yě)可(kě)以(yǐ)写成(chéng)“i=0;i<=7;i++”,但这(zhè)些數字(zì)的(de)意(yì)義就(jiù)變(biàn)得令人(rén)費解(jiě)了(le),虽然知道(dào)7是(shì)從8-1得来(lái)的(de),但此(cǐ)时(shí)“-1”就(jiù)顯得画(huà)蛇添足,在(zài)設計(jì)中(zhōng)不(bù)必多(duō)此(cǐ)一(yī)舉。

  
計(jì)數器規則8:設計(jì)步驟是(shì),先(xiān)写計(jì)數器的(de)always段(duàn),条(tiáo)件(jiàn)用(yòng)名字(zì)代(dài)替;然後(hòu)用(yòng)assign写出(chū)加1条(tiáo)件(jiàn);最(zuì)後(hòu)用(yòng)assign写出(chū)結束(shù)条(tiáo)件(jiàn)。
  
至(zhì)簡設計(jì)法規定(dìng)計(jì)數器代(dài)碼包(bāo)括三(sān)段(duàn)。
第(dì)一(yī)段(duàn),写出(chū)計(jì)數器的(de)always段(duàn)。
模板如(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
  
cnt<= 0;
  
    end
  
    else if(加1条(tiáo)件(jiàn)) begin
  
        if(結束(shù)条(tiáo)件(jiàn))
  
cnt<= 0;
  
        else
  
cnt<= cnt + 1;
  
    end
  
end

同(tóng)学们(men)有(yǒu)沒(méi)有(yǒu)發(fà)現(xiàn)上(shàng)述模板的(de)特(tè)點(diǎn)?这(zhè)个(gè)模板只(zhī)需要(yào)填两(liǎng)項內(nèi)容:加1条(tiáo)件(jiàn)和(hé)結束(shù)条(tiáo)件(jiàn)。假定(dìng)加1条(tiáo)件(jiàn)为(wèi)add_cnt,結束(shù)条(tiáo)件(jiàn)为(wèi)end_cnt,則代(dài)碼變(biàn)成(chéng):
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
  
cnt<= 0;
  
    end
  
    else if(add_cnt) begin
  
        if(end_cnt)
  
cnt<= 0;
  
        else
  
cnt<= cnt + 1;
  
    end
  
end

至(zhì)此(cǐ)就(jiù)完成(chéng)了(le)該always的(de)設計(jì),是(shì)不(bù)是(shì)很簡單?只(zhī)要(yào)确定(dìng)好(hǎo)条(tiáo)件(jiàn)命名,就(jiù)完成(chéng)了(le)这(zhè)段(duàn)設計(jì)代(dài)碼。

第(dì)二(èr)段(duàn),用(yòng)assign写出(chū)加1条(tiáo)件(jiàn)。

在(zài)此(cǐ)階(jiē)段(duàn),只(zhī)需要(yào)确認好(hǎo)計(jì)數器的(de)加1条(tiáo)件(jiàn)。假設計(jì)數器的(de)加1条(tiáo)件(jiàn)为(wèi)a=2,則代(dài)碼为(wèi):
1
assign  add_cnt= a==2;

第(dì)三(sān)段(duàn),用(yòng)assign写出(chū)結束(shù)条(tiáo)件(jiàn)。

在(zài)此(cǐ)階(jiē)段(duàn)只(zhī)需要(yào)确認好(hǎo)計(jì)數器的(de)結束(shù)值。參考計(jì)數器規則5的(de)要(yào)求,結束(shù)条(tiáo)件(jiàn)的(de)形式一(yī)定(dìng)是(shì):(加1条(tiáo)件(jiàn))&&cnt==計(jì)數值-1)。假設計(jì)數器的(de)要(yào)計(jì)數10个(gè),則代(dài)碼为(wèi):
1
assign  end_cnt=  add_cnt&&cnt==10-1;

至(zhì)此(cǐ)就(jiù)完成(chéng)了(le)計(jì)數器代(dài)碼的(de)設計(jì)。回(huí)顧一(yī)下(xià),这(zhè)段(duàn)代(dài)碼特(tè)點(diǎn)就(jiù)是(shì):每次(cì)只(zhī)考慮一(yī)件(jiàn)事(shì),按照这(zhè)一(yī)要(yào)求可(kě)以(yǐ)很容易地(dì)完成(chéng)代(dài)碼設計(jì)。

  
計(jì)數器規則9:加1条(tiáo)件(jiàn)必須與(yǔ)計(jì)數器嚴格对(duì)齊,其他(tā)信(xìn)号(hào)一(yī)律與(yǔ)計(jì)數器对(duì)齊。
  
在(zài)設計(jì)中(zhōng)虽然对(duì)計(jì)數器進(jìn)行編碼,但一(yī)般計(jì)數器并不(bù)是(shì)最(zuì)終(zhōng)目的(de),最(zuì)終(zhōng)目的(de)是(shì)各(gè)種(zhǒng)輸出(chū)信(xìn)号(hào)。設計(jì)計(jì)數器是(shì)为(wèi)了(le)方(fāng)便産生(shēng)这(zhè)些輸出(chū)信(xìn)号(hào)(包(bāo)括中(zhōng)間(jiān)信(xìn)号(hào)),并且能(néng)够從計(jì)數器獲取(qǔ)變(biàn)化(huà)条(tiáo)件(jiàn)。例如(rú)信(xìn)号(hào)dout在(zài)計(jì)數到(dào)6时(shí)拉高(gāo),則其變(biàn)1条(tiáo)件(jiàn)是(shì):add_cnt&&cnt==6-1。
假設有(yǒu)两(liǎng)个(gè)信(xìn)号(hào):dout0在(zài)計(jì)數到(dào)6时(shí)拉高(gāo),dout1在(zài)計(jì)數到(dào)7时(shí)拉高(gāo)。一(yī)種(zhǒng)設計(jì)方(fāng)法是(shì)dout0的(de)變(biàn)1条(tiáo)件(jiàn)是(shì)add_cnt&&cnt==6-1,dout1的(de)變(biàn)1条(tiáo)件(jiàn)設定(dìng)为(wèi)dout0==1,这(zhè)樣(yàng)dout1就(jiù)是(shì)間(jiān)接與(yǔ)計(jì)數器对(duì)齊。至(zhì)簡設計(jì)法不(bù)建議采用(yòng)这(zhè)種(zhǒng)方(fāng)法,在(zài)設計(jì)中(zhōng)建議信(xìn)号(hào)一(yī)律與(yǔ)計(jì)數器对(duì)齊,dout1的(de)變(biàn)1条(tiáo)件(jiàn)應(yìng)該改为(wèi):add_cnt&&cnt==7-1。

  
計(jì)數器規則10:命名必須符合規範,比如(rú):add_cnt表(biǎo)示加1条(tiáo)件(jiàn);end_cnt表(biǎo)示結束(shù)条(tiáo)件(jiàn)。
  
如(rú)无特(tè)别说(shuō)明(míng)計(jì)數器的(de)命名都要(yào)符合規範,加1条(tiáo)件(jiàn)的(de)前(qián)綴为(wèi)“add_”,結束(shù)条(tiáo)件(jiàn)的(de)前(qián)綴为(wèi)“end_”

  
計(jì)數器規則11:減1計(jì)數器暫时(shí)不(bù)用(yòng)。
  
減1計(jì)數器在(zài)項目中(zhōng)應(yìng)用(yòng)也(yě)較为(wèi)廣泛。但至(zhì)簡設計(jì)法建議在(zài)学習階(jiē)段(duàn)暫时(shí)不(bù)用(yòng)減1計(jì)數器,進(jìn)入(rù)公司或(huò)者(zhě)已經(jīng)在(zài)做項目的(de)情(qíng)況下(xià)根(gēn)據(jù)公司具體(tǐ)要(yào)求而(ér)定(dìng)。
以(yǐ)上(shàng)就(jiù)是(shì)至(zhì)簡設計(jì)法的(de)計(jì)數器規則。計(jì)數看(kàn)似簡單,但要(yào)用(yòng)好(hǎo)卻并非(fēi)易事(shì)。至(zhì)簡設計(jì)法強(qiáng)調,真(zhēn)正(zhèng)掌握計(jì)數器的(de)使用(yòng)需要(yào)多(duō)实踐,至(zhì)簡設計(jì)法也(yě)会(huì)为(wèi)提(tí)供大量(liàng)的(de)实踐項目進(jìn)行練習,從而(ér)讓同(tóng)学们(men)掌握、搞透計(jì)數器的(de)設計(jì)。


第(dì)3节(jié) 狀态機(jī)規範

    狀态機(jī)是(shì)數字(zì)電(diàn)路(lù)設計(jì)中(zhōng)的(de)一(yī)个(gè)非(fēi)常重(zhòng)要(yào)組成(chéng)部(bù)分(fēn),也(yě)是(shì)貫穿于(yú)整个(gè)設計(jì)始終(zhōng)的(de)最(zuì)基本(běn)設計(jì)思(sī)想(xiǎng)和(hé)設計(jì)方(fāng)法。在(zài)現(xiàn)代(dài)數字(zì)系(xì)統設計(jì)中(zhōng)狀态機(jī)的(de)設計(jì)对(duì)系(xì)統的(de)高(gāo)速性(xìng)能(néng)、高(gāo)可(kě)靠性(xìng)、高(gāo)稳定(dìng)性(xìng)都具有(yǒu)決定(dìng)性(xìng)的(de)作用(yòng)。熟練掌握狀态機(jī)的(de)設計(jì)後(hòu)在(zài)數字(zì)電(diàn)路(lù)的(de)設計(jì)中(zhōng)必能(néng)达(dá)到(dào)事(shì)半功倍的(de)效果(guǒ)。

前(qián)一(yī)节(jié)中(zhōng)介紹了(le)計(jì)數器的(de)規範。其实計(jì)數器本(běn)質(zhì)上(shàng)也(yě)可(kě)以(yǐ)認为(wèi)是(shì)一(yī)个(gè)狀态機(jī),只(zhī)不(bù)过(guò)計(jì)數器是(shì)用(yòng)數字(zì)来(lái)區(qū)分(fēn)不(bù)同(tóng)狀态而(ér)已。

那(nà)麼(me)在(zài)設計(jì)中(zhōng)什麼(me)时(shí)候使用(yòng)計(jì)數器,什麼(me)时(shí)候会(huì)使用(yòng)狀态機(jī)呢?

如(rú)果(guǒ)是(shì)順序处理或(huò)是(shì)簡單的(de)流程控制,例如(rú)其步驟是(shì)0->1->2->3->0,这(zhè)个(gè)时(shí)候用(yòng)計(jì)數器实現(xiàn)是(shì)最(zuì)便捷的(de)。但是(shì)在(zài)複雜的(de)流程控制场合,例如(rú)其步驟是(shì)0->1->5->2->4,其跳轉(zhuǎn)順序是(shì)亂序的(de)时(shí)候,就(jiù)應(yìng)該利用(yòng)狀态機(jī)来(lái)設計(jì)。
規範的(de)狀态機(jī)代(dài)碼可(kě)以(yǐ)极(jí)大地(dì)提(tí)高(gāo)設計(jì)效率,在(zài)減少(shǎo)狀态出(chū)錯可(kě)能(néng)的(de)同(tóng)时(shí)縮短(duǎn)調試时(shí)間(jiān),從而(ér)設計(jì)出(chū)稳健的(de)系(xì)統。
至(zhì)簡設計(jì)法從項目实踐和(hé)培訓經(jīng)验(yàn)出(chū)發(fà),總(zǒng)結出(chū)一(yī)套(tào)科学的(de)、适用(yòng)于(yú)狀态機(jī)設計(jì)的(de)方(fāng)法,也(yě)稱之为(wèi)狀态機(jī)架構八(bā)步法。

狀态機(jī)架構八(bā)步法具有(yǒu)如(rú)下(xià)优點(diǎn):
  •   通(tòng)用(yòng)的(de)設計(jì)方(fāng)法,无論是(shì)簡單還(huán)是(shì)複雜的(de)狀态機(jī)均能(néng)按照此(cǐ)法進(jìn)行設計(jì);
  •   步驟清(qīng)晰易懂,每步只(zhī)考慮一(yī)个(gè)問(wèn)題(tí),易于(yú)掌握和(hé)使用(yòng);
  •   狀态機(jī)代(dài)碼嚴谨規範,不(bù)容易出(chū)錯;
  •   設計(jì)出(chū)的(de)狀态機(jī)結構簡單且稳健。


  
狀态機(jī)規則1:使用(yòng)四(sì)段(duàn)式写法。
  
四(sì)段(duàn)式不(bù)是(shì)指四(sì)段(duàn)always代(dài)碼,而(ér)是(shì)指四(sì)段(duàn)程序。另(lìng)外(wài)需要(yào)注意(yì)四(sì)段(duàn)式的(de)狀态機(jī)并非(fēi)一(yī)成(chéng)不(bù)變(biàn),而(ér)是(shì)会(huì)根(gēn)據(jù)輸出(chū)信(xìn)号(hào)的(de)个(gè)數進(jìn)行調整。四(sì)段(duàn)式的(de)写法可(kě)參照至(zhì)簡設計(jì)法GVIM特(tè)色(sè)指令Ztj産生(shēng)的(de)狀态機(jī)模板。

第(dì)一(yī)段(duàn),同(tóng)步时(shí)序的(de)always模块(kuài),格式化(huà)描述次(cì)态遷移到(dào)現(xiàn)态寄存器。
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
always@(posedge clk or negedge rst_n)begin
  
     if(!rst_n)begin
  
state_c<= IDLE;
  
     end
  
     else begin
  
state_c<= state_n;
  
     end
  
end

第(dì)二(èr)段(duàn),組合邏輯的(de)always模块(kuài),描述狀态轉(zhuǎn)移判斷条(tiáo)件(jiàn)。注意(yì),轉(zhuǎn)移条(tiáo)件(jiàn)用(yòng)信(xìn)号(hào)来(lái)表(biǎo)示,信(xìn)号(hào)名要(yào)按至(zhì)簡設計(jì)法規則来(lá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
  
30
  
31
  
32
  
33
  
34
  
35
always@(*)begin
  
    case(state_c)
  
IDLE:begin
  
            if(idle2s1_start)begin
  
state_n = S1;
  
            end
  
            else begin
  
state_n = state_c;
  
            end
  
        end
  
        S1:begin
  
            if(s12s2_start)begin
  
state_n = S2;
  
            end
  
            else begin
  
state_n = state_c;
  
            end
  
        end
  
        S2:begin
  
            if(s22idl)begin
  
state_n = IDLE;
  
            end
  
            else begin
  
state_n = state_c;
  
            end
  
        end
  
default:begin
  
state_n = IDLE;
  
        end
  
endcase
  
end
  
  
assign idle2s1_start =  state_c==IDLE && ;
  
assign  s12s2_start  =state_c==S1   && ;
  
assign  s22idl_start  =state_c==S2   && ;

第(dì)三(sān)段(duàn),用(yòng)assign定(dìng)義轉(zhuǎn)移条(tiáo)件(jiàn)。注意(yì),条(tiáo)件(jiàn)一(yī)定(dìng)要(yào)加上(shàng)現(xiàn)态。
1
  
2
  
3
assign idle2s1_start = state_c==IDLE  && ;
  
assign s12s2_start  =state_c==S1   && ;
  
assign s22idl_start  =state_c==S2   && ;

第(dì)四(sì)段(duàn),設計(jì)輸出(chū)信(xìn)号(hào)。至(zhì)簡設計(jì)法規範要(yào)求一(yī)段(duàn)always代(dài)碼設計(jì)一(yī)个(gè)信(xìn)号(hào),因(yīn)此(cǐ)有(yǒu)多(duō)少(shǎo)个(gè)輸出(chū)信(xìn)号(hào)就(jiù)有(yǒu)多(duō)少(shǎo)段(duàn)always代(dài)碼。
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
always  @(posedge clk or negedge rst_n)begin
  
     if(!rst_n)begin
  
        out1 <=1'b0   
  
     end
  
     else if(state_c==S1)begin
  
        out1 <= 1'b1;
  
     end
  
     else begin
  
        out1 <= 1'b0;
  
     end
  
end


  
狀态機(jī)規則2:四(sì)段(duàn)式狀态機(jī)第(dì)一(yī)段(duàn)写法不(bù)變(biàn)。
  

設計(jì)狀态機(jī)时(shí)所(suǒ)有(yǒu)四(sì)段(duàn)式狀态機(jī)模板的(de)第(dì)一(yī)段(duàn)除了(le)名字(zì)外(wài)的(de)代(dài)碼都可(kě)以(yǐ)直(zhí)接用(yòng),不(bù)需要(yào)進(jìn)行改動(dòng)。

  
狀态機(jī)規則3:第(dì)二(èr)段(duàn)的(de)狀态轉(zhuǎn)移条(tiáo)件(jiàn)用(yòng)信(xìn)号(hào)来(lái)表(biǎo)示。
  

設計(jì)狀态機(jī)时(shí),至(zhì)簡設計(jì)法要(yào)求四(sì)段(duàn)式狀态機(jī)的(de)第(dì)二(èr)段(duàn)中(zhōng)用(yòng)信(xìn)号(hào)名来(lái)表(biǎo)示轉(zhuǎn)移条(tiáo)件(jiàn),而(ér)无須直(zhí)接写出(chū)具體(tǐ)的(de)轉(zhuǎn)移条(tiáo)件(jiàn)。
用(yòng)信(xìn)号(hào)名表(biǎo)示的(de)好(hǎo)处是(shì)後(hòu)續修改时(shí)只(zhī)需改動(dòng)信(xìn)号(hào)的(de)名字(zì),并且方(fāng)便根(gēn)據(jù)狀态機(jī)的(de)命名修改对(duì)應(yìng)的(de)跳轉(zhuǎn)条(tiáo)件(jiàn)。

  
狀态機(jī)規則4:用(yòng)assign将狀态轉(zhuǎn)移条(tiáo)件(jiàn)写成(chéng)XX2XX_start的(de)形式。
  

狀态機(jī)規則3要(yào)求轉(zhuǎn)移条(tiáo)件(jiàn)用(yòng)信(xìn)号(hào)名来(lái)表(biǎo)示,这(zhè)樣(yàng)一(yī)来(lái)設計(jì)师(shī)就(jiù)要(yào)編写很多(duō)信(xìn)号(hào)名稱,这(zhè)也(yě)是(shì)設計(jì)师(shī)工作中(zhōng)的(de)一(yī)大困擾。因(yīn)此(cǐ)至(zhì)簡設計(jì)法制定(dìng)此(cǐ)規則:将狀态轉(zhuǎn)移的(de)条(tiáo)件(jiàn)信(xìn)号(hào)用(yòng)xx2xx_start的(de)形式表(biǎo)示。

例如(rú)有(yǒu)三(sān)个(gè)狀态IDLE、READ、WRITE,若從IDLE跳轉(zhuǎn)到(dào)READ狀态,其跳轉(zhuǎn)条(tiáo)件(jiàn)可(kě)以(yǐ)命名为(wèi):idle2read_start;若從IDLE跳轉(zhuǎn)到(dào)WRITE,其跳轉(zhuǎn)条(tiáo)件(jiàn)可(kě)以(yǐ)命名为(wèi):idle2write_start。
这(zhè)个(gè)命名方(fāng)式既能(néng)够解(jiě)決命名的(de)困擾,又能(néng)直(zhí)接從信(xìn)号(hào)名看(kàn)出(chū)信(xìn)号(hào)的(de)作用(yòng)。至(zhì)簡設計(jì)法提(tí)出(chū)并主(zhǔ)张(zhāng)所(suǒ)有(yǒu)信(xìn)号(hào)都用(yòng)对(duì)應(yìng)意(yì)義的(de)字(zì)母来(lái)命名,达(dá)到(dào)“見(jiàn)名知義”的(de)效果(guǒ)。後(hòu)續章(zhāng)节(jié)中(zhōng)還(huán)会(huì)提(tí)及(jí)至(zhì)簡設計(jì)法關(guān)于(yú)信(xìn)号(hào)命名的(de)規範,需要(yào)多(duō)加注意(yì)。

  
狀态機(jī)規則5:assign定(dìng)義狀态轉(zhuǎn)移条(tiáo)件(jiàn)信(xìn)号(hào)时(shí),必須加上(shàng)當前(qián)狀态。
  

狀态機(jī)的(de)第(dì)二(èr)段(duàn)代(dài)碼中(zhōng)使用(yòng)信(xìn)号(hào)名来(lái)表(biǎo)示轉(zhuǎn)移条(tiáo)件(jiàn),在(zài)代(dài)碼後(hòu)則需用(yòng)assign对(duì)相應(yìng)信(xìn)号(hào)進(jìn)行定(dìng)義。注意(yì),定(dìng)義这(zhè)个(gè)轉(zhuǎn)移条(tiáo)件(jiàn)信(xìn)号(hào)时(shí)必須加上(shàng)當前(qián)狀态,以(yǐ)避免因(yīn)两(liǎng)个(gè)不(bù)同(tóng)狀态由(yóu)同(tóng)一(yī)種(zhǒng)變(biàn)化(huà)条(tiáo)件(jiàn)發(fà)生(shēng)轉(zhuǎn)移而(ér)導致(zhì)錯誤。
例如(rú):
1
  
2
  
3
assign idle2s1_start = state_c==IDLE  && XX;
  
assign s12s2_start  =state_c==S1   && XX;
  
assign s22idl_start  =state_c==S2   && XX;

  
狀态機(jī)規則6:狀态不(bù)變(biàn)时(shí)使用(yòng)state_n = state_c。
  

至(zhì)簡設計(jì)法項目和(hé)培訓实踐統計(jì)發(fà)現(xiàn):編写狀态機(jī)代(dài)碼时(shí)有(yǒu)很大一(yī)部(bù)分(fēn)錯誤是(shì)複制粘贴过(guò)程出(chū)錯造成(chéng)的(de),很多(duō)同(tóng)学会(huì)出(chū)現(xiàn)複制其他(tā)狀态的(de)代(dài)碼时(shí)忘記(jì)修改狀态的(de)錯誤。

此(cǐ)外(wài),也(yě)有(yǒu)一(yī)部(bù)分(fēn)同(tóng)学写第(dì)二(èr)段(duàn)狀态機(jī)时(shí),容易把狀态保持(chí)不(bù)變(biàn)写與(yǔ)state_n= state_n。这(zhè)个(gè)写法是(shì)錯誤的(de),因(yīn)为(wèi)組合邏輯只(zhī)有(yǒu)鎖存器才能(néng)有(yǒu)保持(chí)電(diàn)路(lù),而(ér)數字(zì)電(diàn)路(lù)中(zhōng)通(tòng)常不(bù)希望出(chū)現(xiàn)鎖存器。
为(wèi)此(cǐ),至(zhì)簡設計(jì)法規定(dìng),其四(sì)段(duàn)式狀态機(jī)的(de)第(dì)二(èr)段(duàn),狀态不(bù)變(biàn)时(shí)使用(yòng)state_n= state-_c。如(rú)下(xià)所(suǒ)示,可(kě)以(yǐ)自(zì)行对(duì)比。这(zhè)樣(yàng)写不(bù)但可(kě)以(yǐ)減少(shǎo)出(chū)錯的(de)可(kě)能(néng),還(huán)可(kě)以(yǐ)減少(shǎo)調試的(de)时(shí)間(jiān)。

1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
IDLE:begin
  
   if(idle2s1_start)begin
  
state_n = S1;
  
   end
  
   else begin
  
state_n = state_c;
  
   end
  
end
IDLE:begin
  
   if(idle2s1_start)begin
  
state_n = S1;
  
   end
  
   else begin
  
state_n = IDLE;
  
   end
  
end

第(dì)4节(jié) 接口(kǒu)規範

    在(zài)确定(dìng)模块(kuài)劃(huà)分(fēn)後(hòu)需要(yào)明(míng)确模块(kuài)的(de)端口(kǒu)以(yǐ)及(jí)模块(kuài)間(jiān)的(de)數據(jù)交互。至(zhì)簡設計(jì)法在(zài)实際項目經(jīng)验(yàn)中(zhōng)總(zǒng)結得出(chū)了(le)一(yī)般模块(kuài)端口(kǒu)的(de)信(xìn)号(hào)規範。完成(chéng)項目模块(kuài)劃(huà)分(fēn)後(hòu),可(kě)以(yǐ)在(zài)确定(dìng)端口(kǒu)及(jí)數據(jù)流向(xiàng)时(shí)參考使用(yòng)。

                                       表(biǎo)2.4- 1 端口(kǒu)信(xìn)号(hào)規範
  
信(xìn)号(hào)
  
说(shuō)明(míng)
  
clk
  
模块(kuài)工作时(shí)鐘(zhōng)
  
rst_n
  
系(xì)統複位信(xìn)号(hào),低電(diàn)平有(yǒu)效
  
en
  
en有(yǒu)两(liǎng)種(zhǒng)用(yòng)法:
  
1.使能(néng)命令信(xìn)号(hào),類(lèi)似于(yú)vld,其值为(wèi)1时(shí)表(biǎo)示一(yī)个(gè)命令有(yǒu)效;
  
2. 使能(néng)狀态指示,其值为(wèi)1时(shí)表(biǎo)示处于(yú)使能(néng)狀态。
  
vld
  
數據(jù)有(yǒu)效标(biāo)志指示信(xìn)号(hào),表(biǎo)示當前(qián)的(de)data數據(jù)有(yǒu)效。注意(yì),vld不(bù)僅表(biǎo)示了(le)數據(jù)有(yǒu)效,而(ér)且還(huán)表(biǎo)示了(le)其有(yǒu)效次(cì)數。时(shí)鐘(zhōng)收(shōu)到(dào)多(duō)少(shǎo)个(gè)vld=1,就(jiù)表(biǎo)示有(yǒu)多(duō)少(shǎo)个(gè)數據(jù)有(yǒu)效
  
data
  
數據(jù)總(zǒng)線(xiàn)。輸入(rù)一(yī)般名稱为(wèi)din,輸出(chū)一(yī)般名稱为(wèi)dout。類(lèi)似的(de)信(xìn)号(hào)還(huán)有(yǒu)addr,len等
  
err
  
整个(gè)報文(wén)錯誤指示,在(zài)eop=1且vld=1有(yǒu)效时(shí)才有(yǒu)效
  
sop
  
報文(wén)起始指示信(xìn)号(hào),用(yòng)于(yú)表(biǎo)示有(yǒu)效報文(wén)數據(jù)的(de)第(dì)一(yī)个(gè)數據(jù),當vld=1时(shí)此(cǐ)信(xìn)号(hào)有(yǒu)效
  
eop
  
報文(wén)結束(shù)指示信(xìn)号(hào),用(yòng)于(yú)表(biǎo)示有(yǒu)效報文(wén)數據(jù)的(de)最(zuì)後(hòu)一(yī)个(gè)數據(jù),當vld=1时(shí)此(cǐ)信(xìn)号(hào)有(yǒu)效
  
rdy
  
模块(kuài)準備好(hǎo)信(xìn)号(hào),用(yòng)于(yú)模块(kuài)之間(jiān)控制數據(jù)發(fà)送速度(dù)
  
例如(rú)模块(kuài)A發(fà)數據(jù)給(gěi)模块(kuài)B,則
  
rdy信(xìn)号(hào)由(yóu)模块(kuài)B産生(shēng),連(lián)到(dào)模块(kuài)A(該信(xìn)号(hào)对(duì)于(yú)B是(shì)輸出(chū)信(xìn)号(hào),对(duì)于(yú)A是(shì)輸入(rù)信(xìn)号(hào));
  
B要(yào)确保rdy産生(shēng)正(zhèng)确,當此(cǐ)信(xìn)号(hào)为(wèi)1时(shí),B一(yī)定(dìng)能(néng)接收(shōu)數據(jù);
  
A要(yào)确保僅在(zài)rdy=1时(shí)才發(fà)送數據(jù)。



第(dì)5节(jié) FIFO規範

FIFOFirst Input First Output),即先(xiān)入(rù)先(xiān)出(chū)隊列。在(zài)計(jì)算機(jī)中(zhōng)先(xiān)入(rù)先(xiān)出(chū)隊列是(shì)一(yī)種(zhǒng)傳統的(de)按序執行方(fāng)法,先(xiān)完成(chéng)并引退(tuì)先(xiān)進(jìn)入(rù)的(de)指令,随後(hòu)跟着執行第(dì)二(èr)条(tiáo)指令(这(zhè)些指令是(shì)指計(jì)算機(jī)在(zài)響應(yìng)用(yòng)戶操作的(de)程序代(dài)碼,对(duì)用(yòng)戶而(ér)言是(shì)透明(míng)的(de))。

在(zài)數字(zì)電(diàn)路(lù)設計(jì)中(zhōng)提(tí)到(dào)的(de)FIFO实際是(shì)指FIFO存儲器,其主(zhǔ)要(yào)用(yòng)于(yú)數據(jù)緩存和(hé)异(yì)步处理。當然FIFO存儲器緩存數據(jù)也(yě)遵循先(xiān)入(rù)先(xiān)出(chū)的(de)原則。由(yóu)于(yú)微電(diàn)子技術(shù)的(de)飛速發(fà)展(zhǎn),新一(yī)代(dài)FIFO芯片(piàn)容量(liàng)越来(lái)越大,體(tǐ)積越来(lái)越小,價格越来(lái)越便宜。因(yīn)其靈活、方(fāng)便、高(gāo)效的(de)特(tè)性(xìng),FIFO芯片(piàn)逐漸在(zài)高(gāo)速數據(jù)采集、高(gāo)速數據(jù)处理、高(gāo)速數據(jù)傳輸以(yǐ)及(jí)多(duō)機(jī)处理系(xì)統中(zhōng)得到(dào)越来(lái)越廣泛的(de)應(yìng)用(yòng)。

FIFO本(běn)質(zhì)是(shì)一(yī)个(gè)RAM,其與(yǔ)普通(tòng)存儲器的(de)區(qū)别是(shì)沒(méi)有(yǒu)外(wài)部(bù)读(dú)/写地(dì)址線(xiàn),使用(yòng)起来(lái)非(fēi)常簡單。但FIFO只(zhī)能(néng)順序的(de)写入(rù)數據(jù),再順序的(de)读(dú)出(chū)數據(jù),其數據(jù)地(dì)址由(yóu)內(nèi)部(bù)读(dú)写指針(zhēn)自(zì)動(dòng)加1完成(chéng),无法像普通(tòng)存儲器那(nà)樣(yàng)可(kě)以(yǐ)由(yóu)地(dì)址線(xiàn)来(lái)对(duì)某个(gè)指定(dìng)地(dì)址的(de)數據(jù)進(jìn)行读(dú)取(qǔ)或(huò)写入(rù)。

  
FIFO規則1:使用(yòng)Show-ahead读(dú)模式。
  


FIFO读(dú)操作一(yī)般有(yǒu)两(liǎng)種(zhǒng)使用(yòng)模式:Normal和(hé)Show-ahead模式。其中(zhōng)Normal模式是(shì)读(dú)使能(néng)有(yǒu)效後(hòu)的(de)下(xià)一(yī)拍读(dú)出(chū)相應(yìng)數據(jù),如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)2.4-3Normal模式时(shí)序图(tú)

而(ér)Show-ahead模式是(shì)先(xiān)進(jìn)行數據(jù)輸出(chū),在(zài)读(dú)使能(néng)有(yǒu)效时(shí)对(duì)FIFO輸出(chū)數據(jù)進(jìn)行更(gèng)新。即FIFO中(zhōng)的(de)第(dì)一(yī)个(gè)數據(jù)輸出(chū)在(zài)總(zǒng)線(xiàn)上(shàng),在(zài)读(dú)使能(néng)信(xìn)号(hào)到(dào)来(lái)的(de)下(xià)一(yī)拍直(zhí)接輸出(chū)第(dì)二(èr)个(gè)數據(jù),如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)2.4-4Show-ahead模式时(shí)序图(tú)

至(zhì)簡設計(jì)法推薦使用(yòng)Show-ahead模式,因(yīn)为(wèi)在(zài)这(zhè)種(zhǒng)模式下(xià)可(kě)以(yǐ)将读(dú)使能(néng)信(xìn)号(hào)與(yǔ)读(dú)出(chū)數據(jù)當做有(yǒu)效信(xìn)号(hào)和(hé)數據(jù)来(lái)使用(yòng),只(zhī)要(yào)读(dú)使能(néng)有(yǒu)效則对(duì)應(yìng)的(de)數據(jù)就(jiù)始終(zhōng)有(yǒu)效。

  
FIFO規則2:读(dú)写隔離規則。
  

     FIFO读(dú)写隔離規則是(shì)至(zhì)簡設計(jì)法經(jīng)过(guò)长期(qī)的(de)实踐總(zǒng)結出(chū)来(lái)的(de)經(jīng)验(yàn)規則。
读(dú)写隔離規則是(shì)指:FIFO的(de)读(dú)、写控制是(shì)独立的(de),两(liǎng)者(zhě)之間(jiān)除了(le)共(gòng)用(yòng)FIFO進(jìn)行信(xìn)息操作外(wài),不(bù)能(néng)有(yǒu)任何信(xìn)息傳遞。因(yīn)此(cǐ),既不(bù)能(néng)根(gēn)據(jù)FIFO的(de)读(dú)狀态或(huò)读(dú)出(chū)的(de)數據(jù)来(lái)決定(dìng)写行为(wèi),也(yě)不(bù)能(néng)根(gēn)據(jù)FIFO的(de)写狀态和(hé)写入(rù)的(de)數據(jù)来(lái)決定(dìng)读(dú)行为(wèi),如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)2.4-5读(dú)写隔離規則图(tú)
下(xià)面(miàn)通(tòng)过(guò)舉例来(lái)幫助理解(jiě)读(dú)写隔離規則。

假定(dìng)需要(yào)設計(jì)一(yī)个(gè)模块(kuài)将輸入(rù)的(de)報文(wén)保存到(dào)FIFO中(zhōng),報文(wén)完整保存後(hòu)再将其读(dú)出(chū),并輸給(gěi)下(xià)遊模块(kuài)。那(nà)麼(me)如(rú)何确定(dìng)何时(shí)才能(néng)保存完一(yī)个(gè)完整報文(wén)呢?可(kě)以(yǐ)知道(dào)收(shōu)到(dào)din_eop时(shí)表(biǎo)示報文(wén)已經(jīng)完整保存,那(nà)麼(me)能(néng)否可(kě)以(yǐ)使用(yòng)din_eop作为(wèi)读(dú)FIFO的(de)開(kāi)始条(tiáo)件(jiàn)呢?答(dá)案(àn)是(shì)不(bù)允许的(de)。
如(rú)果(guǒ)以(yǐ)din_eop作为(wèi)读(dú)開(kāi)始的(de)条(tiáo)件(jiàn),如(rú)下(xià)图(tú)所(suǒ)示。先(xiān)後(hòu)輸入(rù)一(yī)个(gè)6字(zì)节(jié)和(hé)3字(zì)节(jié)的(de)報文(wén),當收(shōu)到(dào)第(dì)1个(gè)報文(wén)的(de)din_eop时(shí)開(kāi)始读(dú)FIFO數據(jù)并輸出(chū)。由(yóu)于(yú)輸入(rù)數據(jù)量(liàng)为(wèi)6,則輸出(chū)數據(jù)量(liàng)也(yě)6,那(nà)麼(me)就(jiù)要(yào)6个(gè)时(shí)鐘(zhōng)来(lái)处理。然而(ér)在(zài)第(dì)2个(gè)報文(wén)的(de)din_eop有(yǒu)效时(shí),按照原理判斷應(yìng)該可(kě)以(yǐ)读(dú)取(qǔ)第(dì)2个(gè)報文(wén)并輸出(chū)了(le),但是(shì)此(cǐ)时(shí)由(yóu)于(yú)第(dì)1个(gè)報文(wén)還(huán)沒(méi)有(yǒu)处理完,无法处理第(dì)2个(gè)報文(wén),導致(zhì)第(dì)2个(gè)報文(wén)被(bèi)舍棄,數據(jù)出(chū)錯。
图(tú)2.4-6連(lián)續收(shōu)到(dào)两(liǎng)个(gè)報文(wén)
可(kě)以(yǐ)看(kàn)出(chū)不(bù)可(kě)以(yǐ)使用(yòng)din_eop来(lái)作为(wèi)读(dú)開(kāi)始的(de)条(tiáo)件(jiàn),其根(gēn)本(běn)的(de)原因(yīn)是(shì):數據(jù)是(shì)要(yào)緩存後(hòu)輸出(chū)的(de),同(tóng)樣(yàng)的(de),din_eop这(zhè)个(gè)信(xìn)号(hào)也(yě)需要(yào)緩存。

基于(yú)这(zhè)一(yī)原因(yīn)提(tí)出(chū)用(yòng)双(shuāng)FIFO架構的(de)概念,如(rú)图(tú)2.4-7。感(gǎn)興趣的(de)同(tóng)学可(kě)以(yǐ)对(duì)至(zhì)簡設計(jì)法中(zhōng)双(shuāng)FIFO架構的(de)具體(tǐ)介紹進(jìn)行学習。
图(tú)2.4-7双(shuāng)FIFO架構

  
FIFO規則3:读(dú)使能(néng)必須判斷空狀态,并且用(yòng)組合邏輯産生(shēng)。
  

rdreq必須由(yóu)組合邏輯産生(shēng),其原因(yīn)與(yǔ)empty有(yǒu)關(guān)。下(xià)面(miàn)来(lái)说(shuō)明(míng)rdreq和(hé)empty的(de)關(guān)系(xì),假設FIFO存有(yǒu)3个(gè)字(zì)节(jié)數據(jù),現(xiàn)采用(yòng)Show-ahead模式对(duì)其進(jìn)行读(dú)操作,将所(suǒ)存的(de)所(suǒ)有(yǒu)數據(jù)读(dú)出(chū)来(lái)。相應(yìng)信(xìn)号(hào)波(bō)形下(xià)图(tú)所(suǒ)示。
图(tú)2.4-8信(xìn)号(hào)波(bō)形图(tú)

從图(tú)中(zhōng)可(kě)以(yǐ)看(kàn)出(chū)在(zài)a时(shí)刻FIFO已經(jīng)为(wèi)空,但由(yóu)于(yú)電(diàn)路(lù)存在(zài)一(yī)定(dìng)延时(shí),empty變(biàn)为(wèi)高(gāo)電(diàn)平需要(yào)經(jīng)曆一(yī)段(duàn)时(shí)間(jiān)。

如(rú)果(guǒ)用(yòng)时(shí)序邏輯産生(shēng)rdreq,如(rú)图(tú)中(zhōng)虛線(xiàn)所(suǒ)示。在(zài)a时(shí)刻empty为(wèi)0則表(biǎo)示FIFO中(zhōng)還(huán)有(yǒu)數據(jù)(但实際已經(jīng)为(wèi)空),因(yīn)此(cǐ)rdreq還(huán)要(yào)保持(chí)一(yī)个(gè)时(shí)鐘(zhōng)周期(qī),在(zài)FIFO为(wèi)空的(de)情(qíng)況下(xià)要(yào)再读(dú)取(qǔ)一(yī)个(gè)數據(jù),读(dú)操作就(jiù)会(huì)出(chū)錯。如(rú)果(guǒ)用(yòng)組合邏輯産生(shēng)rdreq,如(rú)图(tú)中(zhōng)实線(xiàn)所(suǒ)示。當empty为(wèi)1时(shí),rdreq马上(shàng)拉低則不(bù)会(huì)出(chū)現(xiàn)读(dú)取(qǔ)空FIFO这(zhè)樣(yàng)的(de)錯誤。

  
FIFO規則4:处理報文(wén)时(shí),把指示信(xìn)号(hào)與(yǔ)數據(jù)一(yī)起存入(rù)FIFO。
  

通(tòng)过(guò)一(yī)个(gè)例子来(lái)说(shuō)明(míng)該規則。現(xiàn)要(yào)求設計(jì)一(yī)个(gè)模块(kuài),需先(xiān)将輸入(rù)報文(wén)存儲到(dào)內(nèi)部(bù)FIFO中(zhōng),等待适當时(shí)機(jī)将報文(wén)數據(jù)原封(fēng)不(bù)動(dòng)地(dì)送給(gěi)下(xià)遊模块(kuài)。注意(yì),傳送时(shí)需要(yào)同(tóng)时(shí)輸出(chū)報文(wén)數據(jù)、報文(wén)头(tóu)和(hé)報文(wén)尾指示信(xìn)号(hào),时(shí)序如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)2.4-9報文(wén)輸出(chū)輸入(rù)时(shí)序

假定(dìng)輸入(rù)的(de)報文(wén)din是(shì)8’h128’h348’h568’h78和(hé)8’h9a,其中(zhōng)8’h12是(shì)報文(wén)头(tóu)數據(jù),8’h9a是(shì)報文(wén)尾數據(jù)。則輸出(chū)的(de)報文(wén)dout同(tóng)樣(yàng)應(yìng)为(wèi)8’h128’h348’h568’h78和(hé)8’h9a,且8’h12是(shì)報文(wén)头(tóu)數據(jù),8’h9a是(shì)報文(wén)尾數據(jù)。
根(gēn)據(jù)一(yī)般思(sī)路(lù),可(kě)以(yǐ)生(shēng)成(chéng)一(yī)个(gè)8位宽(kuān)度(dù)的(de)FIFO,然後(hòu)将din數據(jù)保存到(dào)FIFO中(zhōng)。读(dú)出(chū)FIFO的(de)數據(jù)賦給(gěi)dout。但是(shì)怎麼(me)産生(shēng)dout_sop和(hé)dout_eop信(xìn)号(hào)呢?

实際上(shàng)FIFO不(bù)僅可(kě)以(yǐ)保存“數據(jù)”,也(yě)可(kě)以(yǐ)保存“指示信(xìn)号(hào)”,因(yīn)此(cǐ)可(kě)以(yǐ)将數據(jù)和(hé)对(duì)應(yìng)的(de)“指示信(xìn)号(hào)值”一(yī)起写入(rù)FIFO。如(rú)要(yào)生(shēng)成(chéng)一(yī)个(gè)10位宽(kuān)度(dù)的(de)FIFO,保存到(dào)FIFO的(de)數據(jù)應(yìng)是(shì){din,din_sop,din_eop},如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)2.4-10 FIFO作为(wèi)報文(wén)傳輸緩存

FIFO写入(rù)的(de)第(dì)1个(gè)數據(jù)是(shì)10’b0001001010,即第(dì)1个(gè)數8’h12以(yǐ)及(jí)此(cǐ)时(shí)的(de)din_sop(值为(wèi)1)和(hé)din_eop(值为(wèi)0)。第(dì)2个(gè)數據(jù)是(shì)10’b0011010000,即第(dì)2个(gè)數8’h34以(yǐ)及(jí)此(cǐ)时(shí)的(de)din_sop(值为(wèi)0)和(hé)din_eop(值为(wèi)0)。依此(cǐ)類(lèi)推,最(zuì)後(hòu)一(yī)个(gè)數是(shì)10’b1001101001,即8’h9a以(yǐ)及(jí)此(cǐ)时(shí)的(de)din_sop(值为(wèi)0)和(hé)din_eop(值为(wèi)1)。

利用(yòng)該方(fāng)法写入(rù)數據(jù)很容易産生(shēng)dout_sop和(hé)dout_eop信(xìn)号(hào)。如(rú)果(guǒ)FIFO读(dú)出(chū)的(de)數據(jù)最(zuì)低位为(wèi)1則表(biǎo)示这(zhè)是(shì)報文(wén)的(de)最(zuì)後(hòu)一(yī)个(gè)數據(jù),此(cǐ)时(shí)dout_eop为(wèi)1;如(rú)果(guǒ)其次(cì)低位为(wèi)1則表(biǎo)示这(zhè)是(shì)報文(wén)的(de)第(dì)一(yī)个(gè)數據(jù),此(cǐ)时(shí)dout_sop为(wèi)1
此(cǐ)種(zhǒng)方(fāng)式還(huán)可(kě)以(yǐ)判斷報文(wén)的(de)開(kāi)始和(hé)結束(shù),從而(ér)用(yòng)于(yú)其他(tā)判斷。

  
FIFO規則4:读(dú)写时(shí)鐘(zhōng)不(bù)同(tóng)时(shí),必須用(yòng)异(yì)步FIFO。
  

FIFO按时(shí)鐘(zhōng)分(fēn)可(kě)以(yǐ)分(fēn)为(wèi)同(tóng)步FIFO和(hé)异(yì)步FIFO。
同(tóng)步FIFO:指读(dú)时(shí)鐘(zhōng)和(hé)写时(shí)鐘(zhōng)都相同(tóng)的(de)FIFO。同(tóng)步FIFO內(nèi)部(bù)沒(méi)有(yǒu)异(yì)步处理,因(yīn)此(cǐ)結構簡單,資源占用(yòng)較少(shǎo)。
异(yì)步FIFO是(shì)指读(dú)时(shí)鐘(zhōng)和(hé)写时(shí)鐘(zhōng)可(kě)以(yǐ)不(bù)同(tóng)的(de)FIFO。异(yì)步FIFO內(nèi)部(bù)有(yǒu)專門(mén)的(de)异(yì)步处理電(diàn)路(lù),处理读(dú)、写信(xìn)号(hào)的(de)交互,因(yīn)此(cǐ)异(yì)步FIFO結構複雜,占用(yòng)資源較大。
   拓展(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⁥⁠⁢

⁧⁨⁥⁨