⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ 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.8 數字(zì)时(shí)鐘(zhōng)設計(jì)

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

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

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

1.至(zhì)簡原理與(yǔ)應(yìng)用(yòng)配套(tào)的(de)案(àn)例文(wén)檔
2.使用(yòng)6个(gè)數碼管(guǎn)实現(xiàn)數字(zì)时(shí)鐘(zhōng)功能(néng),與(yǔ)數字(zì)时(shí)鐘(zhōng)相同(tóng),該功能(néng)可(kě)以(yǐ)顯示00:00:00到(dào)23:59:59範圍的(de)时(shí)間(jiān)。
3. 这(zhè)是(shì)ALTERA入(rù)門(mén)学習案(àn)例文(wén)檔

1項目背景

數字(zì)时(shí)鐘(zhōng)用(yòng)數字(zì)電(diàn)路(lù)技術(shù)实現(xiàn)时(shí)、分(fēn)、秒(miǎo)計(jì)时(shí)顯示的(de)裝(zhuāng)置。用(yòng)數字(zì)同(tóng)时(shí)顯示时(shí),分(fēn),秒(miǎo)的(de)精确时(shí)間(jiān),并能(néng)实現(xiàn)準确校(xiào)时(shí)。與(yǔ)傳統表(biǎo)盤式機(jī)械式时(shí)鐘(zhōng)相比,具有(yǒu)更(gèng)高(gāo)的(de)準确性(xìng)和(hé)直(zhí)观性(xìng),且无機(jī)械裝(zhuāng)置,具有(yǒu)更(gèng)长的(de)使用(yòng)壽命。不(bù)僅如(rú)此(cǐ),還(huán)具備體(tǐ)積小、重(zhòng)量(liàng)輕(qīng)、抗干(gàn)擾能(néng)力強(qiáng)、对(duì)环(huán)境要(yào)求高(gāo)、高(gāo)精确性(xìng)、容易開(kāi)發(fà)等特(tè)性(xìng)。本(běn)案(àn)例将詳细(xì)介紹用(yòng)至(zhì)簡設計(jì)法实現(xiàn)數字(zì)时(shí)鐘(zhōng)的(de)功能(néng)。


2 設計(jì)目标(biāo)

本(běn)工程使用(yòng)6个(gè)數碼管(guǎn)实現(xiàn)數字(zì)时(shí)鐘(zhōng)功能(néng)。該功能(néng)與(yǔ)數字(zì)时(shí)鐘(zhōng)相同(tóng),即從00:00:00一(yī)直(zhí)到(dào)23:59:59

上(shàng)板效果(guǒ)图(tú)如(rú)下(xià)图(tú)所(suǒ)示。

图(tú) 288


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

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

新建目录(lù):D:mdy_bookmy_shizhong在(zài)該目录(lù)中(zhōng),新建一(yī)个(gè)名为(wèi)my_shizong.v的(de)文(wén)件(jiàn),并用(yòng)GVIM打(dǎ)開(kāi),開(kāi)始編写代(dài)碼。

我(wǒ)们(men)要(yào)实現(xiàn)的(de)功能(néng),概括起来(lái)就(jiù)是(shì)控制8个(gè)數碼管(guǎn),讓其中(zhōng)2个(gè)數碼管(guǎn)常滅,其他(tā)6个(gè)數碼顯示不(bù)同(tóng)的(de)數字(zì)。要(yào)控制8个(gè)數碼管(guǎn),就(jiù)需要(yào)控制位選信(xìn)号(hào),即FPGA要(yào)輸出(chū)一(yī)个(gè)8位的(de)位選信(xìn)号(hào),設为(wèi)seg_sel,其中(zhōng)seg_sel[0]对(duì)應(yìng)數碼管(guǎn)0seg_sel[1]对(duì)應(yìng)數碼管(guǎn)1,以(yǐ)此(cǐ)類(lèi)推,seg_sel[7]对(duì)應(yìng)數碼管(guǎn)7

要(yào)顯示不(bù)同(tóng)的(de)數字(zì),就(jiù)需要(yào)控制段(duàn)選信(xìn)号(hào),不(bù)需要(yào)用(yòng)到(dào)DP,一(yī)共(gòng)有(yǒu)7根(gēn)線(xiàn),即FPGA要(yào)輸出(chū)一(yī)个(gè)7位的(de)段(duàn)選信(xìn)号(hào),設为(wèi)seg_mentseg_ment[6]~segm_ment[0]分(fēn)别对(duì)應(yìng)數碼管(guǎn)的(de)abcdefg(注意(yì)对(duì)應(yìng)順序)。

我(wǒ)们(men)還(huán)需要(yào)时(shí)鐘(zhōng)信(xìn)号(hào)和(hé)複位信(xìn)号(hào)来(lái)進(jìn)行工程控制。

綜上(shàng)所(suǒ)述,我(wǒ)们(men)这(zhè)个(gè)工程需要(yào)4个(gè)信(xìn)号(hào),时(shí)鐘(zhōng)clk,複位rst_n,輸出(chū)的(de)位選信(xìn)号(hào)seg_sel和(hé)輸出(chū)的(de)段(duàn)選信(xìn)号(hào)seg_ment

器件(jiàn)

信(xìn)号(hào)線(xiàn)

信(xìn)号(hào)線(xiàn)

FPGA管(guǎn)脚

內(nèi)部(bù)信(xìn)号(hào)

U6,U7

SEG_E

SEG0

Y6

seg_ment[2]

SEG_DP

SEG1

W6

未用(yòng)到(dào)

SEG_G

SEG2

Y7

seg_ment[0]

SEG_F

SEG3

W7

seg_ment[1]

SEG_D

SEG4

P3

seg_ment[3]

SEG_C

SEG5

P4

seg_ment[4]

SEG_B

SEG6

R5

seg_ment[5]

SEG_A

SEG7

T3

seg_ment[6]

DIG1

DIG_EN1

T4

seg_sel[0]

DIG2

DIG_EN2

V4

seg_sel[1]

DIG3

DIG_EN3

V3

seg_sel[2]

DIG4

DIG_EN4

Y3

seg_sel[3]

DIG5

DIG_EN5

Y8

seg_sel[4]

DIG6

DIG_EN6

W8

seg_sel[5]

DIG7

DIG_EN7

W10

seg_sel[6]

DIG8

DIG_EN8

Y10

seg_sel[7]

X1

SYS_CLK

G1

clk

K1

SYS_RST

AB12

rst_n

module的(de)名稱定(dìng)義为(wèi)my_shizhong。并且我(wǒ)们(men)已經(jīng)知道(dào)該模块(kuài)有(yǒu)4个(gè)信(xìn)号(hào):clkrst_nseg_sel和(hé)seg_ment,代(dài)碼如(rú)下(xià):

1

2

3

4

5

6

module my_shizhong(

clk     ,

rst_n   ,

seg_sel ,

seg_ment

);

其中(zhōng)clkrst_n是(shì)1位的(de)輸入(rù)信(xìn)号(hào),seg_sel是(shì)8位的(de)輸出(chū)信(xìn)号(hào),seg_ment是(shì)7位的(de)輸出(chū)信(xìn)号(hào),根(gēn)據(jù)此(cǐ),補充輸入(rù)輸出(chū)端口(kǒu)定(dìng)義。代(dài)碼如(rú)下(xià):

1

2

3

4

input       clk     ;

input       rst_n   ;

output[7:0] seg_sel ;

output[6:0] seg_ment;


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

我(wǒ)们(men)先(xiān)分(fēn)析要(yào)实現(xiàn)的(de)功能(néng),我(wǒ)们(men)用(yòng)m_gm_sf_gf_ss_gs_s分(fēn)别表(biǎo)示秒(miǎo)鐘(zhōng)个(gè)位、秒(miǎo)鐘(zhōng)十(shí)位、分(fēn)鐘(zhōng)个(gè)位、分(fēn)鐘(zhōng)十(shí)位、小时(shí)个(gè)位和(hé)小时(shí)十(shí)位所(suǒ)表(biǎo)示的(de)數字(zì)值,m_g_sm_s_sf_g_sf_s_ss_g_ss_s_s分(fēn)别表(biǎo)示秒(miǎo)鐘(zhōng)个(gè)位、秒(miǎo)鐘(zhōng)十(shí)位、分(fēn)鐘(zhōng)个(gè)位、分(fēn)鐘(zhōng)十(shí)位、小时(shí)个(gè)位和(hé)小时(shí)十(shí)位所(suǒ)表(biǎo)示數碼管(guǎn)段(duàn)選值。

數碼管(guǎn)0顯示的(de)是(shì)秒(miǎo)个(gè)位值,則翻譯成(chéng)信(xìn)号(hào)就(jiù)是(shì)seg_sel的(de)值为(wèi)8’b1111_1110seg_ment的(de)值为(wèi):m_g_s。數碼管(guǎn)1顯示秒(miǎo)十(shí)位,也(yě)就(jiù)是(shì)说(shuō)seg_sel的(de)值为(wèi)8’b1111_1101seg_ment的(de)值为(wèi)m_s_s。以(yǐ)此(cǐ)類(lèi)推,數碼管(guǎn)5顯示小时(shí)十(shí)位,也(yě)就(jiù)是(shì)seg_sel的(de)值为(wèi)8’b1101_1111seg_ment的(de)值为(wèi)s_s_s

图(tú) 289

那(nà)麼(me)seg_ment和(hé)seg_sel多(duō)久變(biàn)化(huà)一(yī)次(cì)呢?我(wǒ)们(men)就(jiù)需要(yào)用(yòng)到(dào)數碼管(guǎn)動(dòng)态掃描原理了(le)。

數碼管(guǎn)動(dòng)态顯示接口(kǒu)是(shì)應(yìng)用(yòng)最(zuì)为(wèi)廣泛的(de)一(yī)種(zhǒng)顯示方(fāng)式之一(yī),動(dòng)态驅動(dòng)是(shì)将所(suǒ)有(yǒu)數碼管(guǎn)的(de)8个(gè)顯示笔(bǐ)劃(huà)"a,b,c,d,e,f,g,dp"的(de)同(tóng)名端連(lián)在(zài)一(yī)起,另(lìng)外(wài)为(wèi)每个(gè)數碼管(guǎn)的(de)公共(gòng)极(jí)COM增加位選通(tòng)控制電(diàn)路(lù),位選通(tòng)由(yóu)各(gè)自(zì)独立的(de)I/O線(xiàn)控制,當要(yào)輸出(chū)字(zì)形碼时(shí),所(suǒ)有(yǒu)數碼管(guǎn)都接收(shōu)到(dào)相同(tóng)的(de)字(zì)形碼,但究竟是(shì)哪个(gè)數碼管(guǎn)会(huì)顯示出(chū)字(zì)形,取(qǔ)決于(yú)單片(piàn)機(jī)对(duì)位選通(tòng)COM端電(diàn)路(lù)的(de)控制,所(suǒ)以(yǐ)我(wǒ)们(men)只(zhī)要(yào)将需要(yào)顯示的(de)數碼管(guǎn)的(de)選通(tòng)控制打(dǎ)開(kāi),該位就(jiù)顯示出(chū)字(zì)形,沒(méi)有(yǒu)選通(tòng)的(de)數碼管(guǎn)就(jiù)不(bù)会(huì)亮(liàng)。通(tòng)过(guò)分(fēn)时(shí)轮流控制各(gè)个(gè)數碼管(guǎn)的(de)的(de)COM端,就(jiù)使各(gè)个(gè)數碼管(guǎn)轮流受控顯示,这(zhè)就(jiù)是(shì)動(dòng)态驅動(dòng)。在(zài)轮流顯示过(guò)程中(zhōng),每位數碼管(guǎn)的(de)點(diǎn)亮(liàng)时(shí)間(jiān)为(wèi)12ms,由(yóu)于(yú)人(rén)的(de)視覺暫留現(xiàn)象(xiàng)及(jí)發(fà)光(guāng)二(èr)极(jí)管(guǎn)的(de)餘輝效應(yìng),盡管(guǎn)实際上(shàng)各(gè)位數碼管(guǎn)并非(fēi)同(tóng)时(shí)點(diǎn)亮(liàng),但只(zhī)要(yào)掃描的(de)速度(dù)足够快(kuài),給(gěi)人(rén)的(de)印(yìn)象(xiàng)就(jiù)是(shì)一(yī)組稳定(dìng)的(de)顯示數據(jù),不(bù)会(huì)有(yǒu)閃爍感(gǎn),動(dòng)态顯示的(de)效果(guǒ)和(hé)静(jìng)态顯示是(shì)一(yī)樣(yàng)的(de),能(néng)够节(jié)省(shěng)大量(liàng)的(de)I/O端口(kǒu),而(ér)且功耗更(gèng)低。

也(yě)就(jiù)是(shì)说(shuō),只(zhī)要(yào)刷新时(shí)間(jiān)为(wèi)1~2ms,那(nà)麼(me)人(rén)眼(yǎn)看(kàn)起来(lái)就(jiù)似乎是(shì)所(suǒ)有(yǒu)數碼管(guǎn)都在(zài)顯示。因(yīn)为(wèi)我(wǒ)们(men)把这(zhè)个(gè)刷新时(shí)間(jiān)定(dìng)为(wèi)2ms,也(yě)就(jiù)是(shì)如(rú)下(xià)图(tú)。

图(tú) 290

由(yóu)波(bō)形图(tú)可(kě)知,我(wǒ)们(men)需要(yào)1个(gè)計(jì)數器用(yòng)来(lái)計(jì)算2毫(háo)秒(miǎo)的(de)时(shí)間(jiān)。本(běn)工程的(de)工作时(shí)鐘(zhōng)是(shì)50MHz,即周期(qī)为(wèi)20ns,計(jì)數器計(jì)數到(dào)2_000_000/20=100_000个(gè),我(wǒ)们(men)就(jiù)能(néng)知道(dào)2毫(háo)秒(miǎo)时(shí)間(jiān)到(dào)了(le)。另(lìng)外(wài),由(yóu)于(yú)該計(jì)數器是(shì)不(bù)停地(dì)計(jì)數,永遠(yuǎn)不(bù)停止的(de),可(kě)以(yǐ)認为(wèi)加1条(tiáo)件(jiàn)一(yī)直(zhí)有(yǒu)效,可(kě)写成(chéng):assign add_cnt0==1。綜上(shàng)所(suǒ)述,該計(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==100_000-1 ;

再次(cì)观察波(bō)形图(tú),我(wǒ)们(men)發(fà)現(xiàn)依次(cì)是(shì)顯示的(de)是(shì)m_g_sm_s_sf_g_sf_s_ss_g_s和(hé)s_s_s,一(yī)共(gòng)6个(gè),循环(huán)進(jìn)行顯示。这(zhè)说(shuō)明(míng)還(huán)需要(yào)另(lìng)外(wài)一(yī)个(gè)計(jì)數器来(lái)表(biǎo)示第(dì)幾(jǐ)个(gè)。該計(jì)數器每隔2ms1,因(yīn)此(cǐ)加1条(tiáo)件(jiàn)为(wèi)end_cnt0。該計(jì)數器一(yī)共(gòng)要(yào)數6次(cì)。所(suǒ)以(yǐ)代(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==6-1 ;

有(yǒu)了(le)两(liǎng)个(gè)計(jì)數器,我(wǒ)们(men)来(lái)思(sī)考輸出(chū)信(xìn)号(hào)seg_sel的(de)變(biàn)化(huà)。概括起来(lái),在(zài)第(dì)1次(cì)的(de)时(shí)候輸出(chū)值为(wèi)8’hfe;在(zài)第(dì)2次(cì)的(de)时(shí)候輸出(chū)值为(wèi)8’hfd;以(yǐ)此(cǐ)類(lèi)推,在(zài)第(dì)6次(cì)的(de)时(shí)候輸出(chū)值为(wèi)8’hdf。我(wǒ)们(men)用(yòng)信(xìn)号(hào)cnt1来(lái)代(dài)替第(dì)幾(jǐ)次(cì),也(yě)就(jiù)是(shì):當cnt1==0的(de)时(shí)候,輸出(chū)值为(wèi)8’hfe;在(zài)cnt1==1的(de)时(shí)候輸出(chū)值为(wèi)8’hfd;以(yǐ)此(cǐ)類(lèi)推,在(zài)cnt1==5的(de)时(shí)候輸出(chū)值为(wèi)8’hdf。再進(jìn)一(yī)步翻譯成(chéng)代(dài)碼,就(jiù)變(biàn)成(chéng)如(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

always  @(posedge clk or negedge rst_n)begin

if(rst_n==1'b0)begin

seg_sel <= 8'hfe;

end

else if(cnt1==0) begin

seg_sel <= 8'hfe;

end

else if(cnt1==1) begin

seg_sel <= 8'hfd;

end

else if(cnt1==2) begin

seg_sel <= 8'hfb;

end

else if(cnt1==3) begin

seg_sel <= 8'hf7;

end

else if(cnt1==4) begin

seg_sel <= 8'hef;

end

else if(cnt1==5) begin

seg_sel <= 8'hdf;

end

end

或(huò)者(zhě)可(kě)以(yǐ)簡写成(chéng):

1

2

3

4

5

6

7

8

always  @(posedge clk or negedge rst_n)begin

if(rst_n==1'b0)begin

seg_sel <= 8'hfe ;

end

else begin

seg_sel <= ~(8'b1<

end

end

对(duì)上(shàng)面(miàn)代(dài)碼解(jiě)釋一(yī)下(xià),第(dì)131行是(shì)指先(xiān)将8’b1向(xiàng)左(zuǒ)移位,再取(qǔ)反(fǎn)後(hòu)的(de)值,賦給(gěi)seg_sel。假設此(cǐ)时(shí)cnt1等于(yú)0,那(nà)麼(me)8’b1<<0的(de)結果(guǒ)是(shì)8’b0000_0001,取(qǔ)反(fǎn)的(de)值为(wèi)8’hfe;假設cnt1等于(yú)3,那(nà)麼(me)8’b1<<3的(de)結果(guǒ)为(wèi)8’b000_1000,取(qǔ)反(fǎn)後(hòu)的(de)結果(guǒ)为(wèi)8’b1111_0111,即8’hf7。與(yǔ)第(dì)一(yī)種(zhǒng)写法的(de)結果(guǒ)都是(shì)相同(tóng)的(de)。

我(wǒ)们(men)来(lái)思(sī)考輸出(chū)信(xìn)号(hào)seg_ment的(de)變(biàn)化(huà)。seg_ment的(de)值,是(shì)m_gm_sf_gf_ss_g和(hé)s_s等數值分(fēn)别譯碼成(chéng)數碼管(guǎn)顯示的(de)信(xìn)号(hào)m_g_sm_s_sf_g_sf_s_ss_g_s和(hé)s_s_s。我(wǒ)们(men)一(yī)種(zhǒng)做法,是(shì)将數值分(fēn)别轉(zhuǎn)成(chéng)譯碼信(xìn)号(hào),然後(hòu)再挑選出(chū)来(lái)給(gěi)seg_ment。如(rú)下(xià)面(miàn)的(de)原理图(tú):

图(tú) 291

我(wǒ)们(men)還(huán)可(kě)以(yǐ)是(shì)先(xiān)可(kě)以(yǐ)選擇哪一(yī)組數據(jù),選出(chū)来(lái)後(hòu)再做譯碼,其原理图(tú)如(rú)下(xià):

图(tú) 292

对(duì)比两(liǎng)个(gè)原理图(tú),可(kě)以(yǐ)發(fà)現(xiàn),实現(xiàn)同(tóng)樣(yàng)的(de)功能(néng),第(dì)二(èr)个(gè)原理图(tú)比第(dì)一(yī)个(gè),少(shǎo)了(le)5个(gè)譯碼電(diàn)路(lù)。这(zhè)是(shì)一(yī)个(gè)簡單的(de)例子,说(shuō)明(míng)实現(xiàn)一(yī)个(gè)功能(néng),可(kě)以(yǐ)有(yǒu)很多(duō)種(zhǒng)方(fāng)法,方(fāng)法各(gè)有(yǒu)优勢,能(néng)用(yòng)較少(shǎo)的(de)資源、較快(kuài)的(de)速度(dù)实現(xiàn)功能(néng),这(zhè)就(jiù)是(shì)設計(jì)师(shī)的(de)能(néng)力,也(yě)是(shì)FPGA設計(jì)的(de)魅力所(suǒ)在(zài)。

我(wǒ)们(men)采用(yòng)第(dì)二(èr)種(zhǒng)实現(xiàn)方(fāng)案(àn)。設計(jì)一(yī)个(gè)信(xìn)号(hào)sel_data,表(biǎo)示從6个(gè)數據(jù)中(zhōng)選擇的(de)信(xìn)号(hào),之後(hòu)再做譯碼。波(bō)形图(tú)更(gèng)新如(rú)下(xià):

图(tú) 293

sel_data的(de)值有(yǒu)可(kě)能(néng)为(wèi)0~9中(zhōng)的(de)任意(yì)數字(zì),这(zhè)些數字(zì)都要(yào)轉(zhuǎn)成(chéng)數碼管(guǎn)的(de)段(duàn)選信(xìn)号(hào)。下(xià)表(biǎo)列出(chū)不(bù)同(tóng)數字(zì)对(duì)應(yìng)的(de)段(duàn)選信(xìn)号(hào)值。

數字(zì)

共(gòng)陽abcdefg

2進(jìn)制

共(gòng)陽abcdefg

16進(jìn)制

共(gòng)陰abcdefg

2進(jìn)制

共(gòng)陰abcdefg

16進(jìn)制

0

7b0000001

7h01

7b 1111110

7h7e

1

7b 1001111

7h4f

7b 0110000

7h30

2

7b 0010010

7h12

7b 1101101

7h6d

3

7b 0000110

7h06

7b 1111001

7h79

4

7b 1001100

7h4c

7b 0110011

7h33

5

7b 0100100

7h24

7b 1011011

7h5b

6

7b 0100000

7h20

7b 1011111

7h3f

7

7b 0001111

7h0f

7b 1110000

7h70

8

7b 0000000

7h00

7b 1111111

7h7f

9

7b 0000100

7h04

7b 1111011

7h7b

明(míng)德揚開(kāi)發(fà)板使用(yòng)的(de)是(shì)共(gòng)陽數碼管(guǎn)。根(gēn)據(jù)上(shàng)表(biǎo),可(kě)写出(chū)下(xià)面(miàn)代(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

30

31

32

33

34

35

always  @(posedgeclk or negedgerst_n)begin

if(rst_n==1'b0)begin

seg_ment<= 7'h01;

end

else if(sel_data==0)begin

seg_ment<= 7'h01;

end

else if(sel_data==1)begin

seg_ment<= 7'h4f;

end

else if(sel_data==2)begin

seg_ment<= 7'h12;

end

else if(sel_data==3)begin

seg_ment<= 7'h06;

end

else if(sel_data==4)begin

seg_ment<= 7'h4c;

end

else if(sel_data==5)begin

seg_ment<= 7'h24;

end

else if(sel_data==6)begin

seg_ment<= 7'h20;

end

else if(sel_data==7)begin

seg_ment<= 7'h0f;

end

else if(sel_data==8)begin

seg_ment<= 7'h00;

end

else if(sel_data==9)begin

seg_ment<= 7'h04;

end

end

當然,也(yě)可(kě)以(yǐ)写成(chéng)case的(de)形式,結果(guǒ)都是(shì)一(yī)樣(yàng)的(de)。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

always@(posedge clk or negedge rst_n)begin

if(rst_n==1'b0)begin

segment<= 7'h00;

end

else  begin

case (sel_data)

0 : segment <= 7'h01;

1 : segment <= 7'h4f;

2 : segment <= 7'h12;

3 : segment <= 7'h06;

4 : segment <= 7'h4c;

5 : segment <= 7'h24;

6 : segment <= 7'h20;

7 : segment <= 7'h0f;

8 : segment <= 7'h00;

9 : segment <= 7'h04;

default : segment <= 7'h00;

endcase

end

end

sel_datam_gm_sf_gf_ss_g和(hé)s_s中(zhōng)選取(qǔ)。當cnt1=0,即數碼管(guǎn)0顯示时(shí),sel_data的(de)值为(wèi)m_g;當cnt1=1,即數碼管(guǎn)1顯示时(shí),sel_data的(de)值为(wèi)m_s;當cnt1=2,即數碼管(guǎn)2顯示时(shí),sel_data的(de)值为(wèi)f_g;當cnt1=3,即數碼管(guǎn)3顯示时(shí),sel_data的(de)值为(wèi)f_s;當cnt1=4,即數碼管(guǎn)4顯示时(shí),sel_data的(de)值为(wèi)s_g;當cnt1=5,即數碼管(guǎn)5顯示时(shí),sel_data的(de)值为(wèi)s_s。为(wèi)此(cǐ),sel_data的(de)代(dài)碼为(wèi):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

always  @(*)begin

if(cnt1==0)

sel_data = m_g;

else if(cnt1==1)

sel_data = m_s;

else if(cnt1==2)

sel_data = f_g;

else if(cnt1==3)

sel_data = f_s;

else if(cnt1==4)

sel_data = s_g;

else

sel_data = s_s;

end

接下(xià)来(lái)我(wǒ)们(men)設計(jì)m_gm_sf_gf_ss_g和(hé)s_s信(xìn)号(hào),按照常識,秒(miǎo)个(gè)位m_g的(de)變(biàn)化(huà)規律如(rú)下(xià):

图(tú) 294

秒(miǎo)个(gè)位的(de)數據(jù)是(shì)012~90这(zhè)樣(yàng)有(yǒu)規律的(de)加1變(biàn)化(huà),很明(míng)顯可(kě)以(yǐ)看(kàn)出(chū)这(zhè)个(gè)m_g其实就(jiù)是(shì)一(yī)个(gè)計(jì)數器,并且这(zhè)个(gè)計(jì)數器每隔1秒(miǎo)时(shí)間(jiān)才變(biàn)化(huà)加1一(yī)次(cì)。1秒(miǎo)时(shí)間(jiān)計(jì)时(shí)也(yě)需要(yào)一(yī)个(gè)計(jì)數器,設为(wèi)cnt2,則cnt2是(shì)一(yī)直(zhí)加1的(de),即可(kě)以(yǐ)写成(chéng)assign add_cnt2 = 1cnt2要(yào)數1秒(miǎo)时(shí)間(jiān),本(běn)工程的(de)工作时(shí)鐘(zhōng)是(shì)50MHz,即周期(qī)为(wèi)20ns,計(jì)數器計(jì)數到(dào)1_000_000_000/20=50_000_000个(gè),我(wǒ)们(men)就(jiù)能(néng)知道(dào)1秒(miǎo)时(shí)間(jiān)到(dào)了(le),所(suǒ)以(yǐ)cnt1的(de)周期(qī)是(shì) 50_000_000个(gè)。有(yǒu)了(le)cnt1,我(wǒ)们(men)就(jiù)知道(dào)m_g这(zhè)个(gè)計(jì)數器的(de)加1条(tiáo)件(jiàn)是(shì)1秒(miǎo)时(shí)間(jiān)到(dào)了(le),即end_cnt2==1,要(yào)計(jì)數10个(gè)。綜上(shàng)所(suǒ)述,可(kě)以(yǐ)写出(chū)cnt2和(hé)m_g的(de)代(dài)碼如(rú)下(xià):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

always @(posedgeclk or negedgerst_n)begin

if(!rst_n)begin

cnt2 <= 0;

end

else if(add_cnt2)begin

if(end_cnt2)

cnt2 <= 0;

else

cnt2 <= cnt2 + 1;

end

end

assign add_cnt2 = 1;

assign end_cnt2 = add_cnt2 && cnt2==50_000_000-1 ;


1

2

3

4

5

6

7

8

9

10

11

12

13

always @(posedgeclk or negedgerst_n) begin

if (rst_n==0) begin

m_g<= 0;

end

else if(add_m_g) begin

if(end_m_g)

m_g<= 0;

else

m_g<= m_g+1 ;

end

end

assign add_m_g = end_cnt2;

assign end_m_g = add_m_g&&m_g == 10 -1 ;

接下(xià)来(lái)思(sī)考秒(miǎo)十(shí)位m_sm_s的(de)變(biàn)化(huà)情(qíng)況如(rú)下(xià):

图(tú) 295

m_s秒(miǎo)十(shí)位的(de)指示,很明(míng)顯每隔10秒(miǎo)就(jiù)会(huì)加1,很明(míng)顯,m_s也(yě)是(shì)一(yī)个(gè)計(jì)數器,加1条(tiáo)件(jiàn)是(shì)10秒(miǎo)时(shí)間(jiān)到(dào),也(yě)就(jiù)是(shì)end_m_g。該計(jì)數器周期(qī)性(xìng)是(shì)數6个(gè)。所(suǒ)以(yǐ)代(dài)碼如(rú)下(xià):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

always @(posedgeclk or negedgerst_n)begin

if(!rst_n)begin

m_s<= 0;

end

else if(add_m_s)begin

if(end_m_s)

m_s<= 0;

else

m_s<= m_s + 1;

end

end

assign add_m_s = end_m_g;

assign end_m_s = add_m_s&&m_s==6-1 ;

接下(xià)来(lái)思(sī)考分(fēn)个(gè)位f_gf_g的(de)變(biàn)化(huà)情(qíng)況如(rú)下(xià):

图(tú) 296

f_g分(fēn)个(gè)位的(de)指示,很明(míng)顯每隔1分(fēn)鐘(zhōng)即60秒(miǎo)就(jiù)会(huì)加1,很明(míng)顯,f_g也(yě)是(shì)一(yī)个(gè)計(jì)數器,加1条(tiáo)件(jiàn)是(shì)60秒(miǎo)时(shí)間(jiān)到(dào),也(yě)就(jiù)是(shì)end_m_s。該計(jì)數器周期(qī)性(xìng)是(shì)數10个(gè)。所(suǒ)以(yǐ)代(dài)碼如(rú)下(xià):

1

2

3

4

5

6

7

8

9

10

11

12

13

always @(posedgeclk or negedgerst_n) begin

if (rst_n==0) begin

f_g<= 0;

end

else if(add_f_g) begin

if(end_f_g)

f_g<= 0;

else

f_g<= f_g+1 ;

end

end

assign add_f_g = end_m_s;

assign end_f_g = add_f_g&&f_g == 10 -1 ;

接下(xià)来(lái)思(sī)考分(fēn)十(shí)位f_sf_s的(de)變(biàn)化(huà)情(qíng)況如(rú)下(xià):

图(tú) 297

f_s分(fēn)十(shí)位的(de)指示,很明(míng)顯每隔10分(fēn)鐘(zhōng)就(jiù)会(huì)加1,很明(míng)顯,f_s也(yě)是(shì)一(yī)个(gè)計(jì)數器,加1条(tiáo)件(jiàn)是(shì)10分(fēn)鐘(zhōng)到(dào),也(yě)就(jiù)是(shì)end_f_g。該計(jì)數器周期(qī)性(xìng)是(shì)數6个(gè)。所(suǒ)以(yǐ)代(dài)碼如(rú)下(xià):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

always @(posedgeclk or negedgerst_n)begin

if(!rst_n)begin

f_s<= 0;

end

else if(add_f_s)begin

if(end_f_s)

f_s<= 0;

else

f_s<= f_s + 1;

end

end

assign add_f_s = end_f_g;

assign end_f_s = add_f_s&&f_s==6-1 ;

接下(xià)来(lái)思(sī)考小时(shí)个(gè)位s_gs_g的(de)變(biàn)化(huà)情(qíng)況如(rú)下(xià):

图(tú) 298

s_g小时(shí)个(gè)位的(de)指示,很明(míng)顯每隔1小时(shí)即6分(fēn)鐘(zhōng)就(jiù)会(huì)加1,很明(míng)顯,s_g也(yě)是(shì)一(yī)个(gè)計(jì)數器,加1条(tiáo)件(jiàn)是(shì)1小时(shí)也(yě)就(jiù)是(shì)60分(fēn)鐘(zhōng)时(shí)間(jiān)到(dào),也(yě)就(jiù)是(shì)end_f_g

接下(xià)来(lái)我(wǒ)们(men)需要(yào)好(hǎo)好(hǎo)思(sī)考这(zhè)个(gè)小时(shí)个(gè)位,它(tā)的(de)周期(qī)是(shì)多(duō)少(shǎo)。有(yǒu)读(dú)者(zhě)認为(wèi)是(shì)10个(gè),因(yīn)为(wèi)是(shì)小时(shí)个(gè)位会(huì)從0~9这(zhè)樣(yàng)變(biàn)化(huà);有(yǒu)读(dú)者(zhě)認为(wèi)是(shì)24个(gè),因(yīn)为(wèi)一(yī)共(gòng)是(shì)24小时(shí);有(yǒu)读(dú)者(zhě)認为(wèi)是(shì)4个(gè),因(yīn)为(wèi)小时(shí)个(gè)位会(huì)從0~4變(biàn)化(huà)。

認为(wèi)是(shì)24小时(shí)的(de)读(dú)者(zhě),沒(méi)有(yǒu)認識到(dào)我(wǒ)们(men)只(zhī)是(shì)看(kàn)小时(shí)个(gè)位的(de)變(biàn)化(huà),而(ér)不(bù)是(shì)小时(shí)个(gè)位和(hé)小时(shí)十(shí)位整體(tǐ),整體(tǐ)才是(shì)24小时(shí)。我(wǒ)们(men)盯着小时(shí)个(gè)位,会(huì)發(fà)現(xiàn)它(tā)是(shì)这(zhè)麼(me)一(yī)个(gè)規律:0~90~90~30~90~90~3。因(yīn)此(cǐ)正(zhèng)确的(de)答(dá)案(àn)是(shì),有(yǒu)时(shí)候周期(qī)是(shì)10,有(yǒu)时(shí)候是(shì)4,也(yě)就(jiù)是(shì)说(shuō)周期(qī)性(xìng)会(huì)變(biàn)的(de)。按照明(míng)德揚的(de)變(biàn)量(liàng)法,設其周期(qī)是(shì)x,則可(kě)以(yǐ)写出(chū)s_g的(de)代(dài)碼如(rú)下(xià),而(ér)x是(shì)怎麼(me)来(lái),我(wǒ)们(men)先(xiān)不(bù)考慮,後(hòu)期(qī)再说(shuō)。

1

2

3

4

5

6

7

8

9

10

11

12

13

always @(posedgeclk or negedgerst_n) begin

if (rst_n==0) begin

s_g<= 0;

end

else if(add_s_g) begin

if(end_s_g)

s_g<= 0;

else

s_g<= s_g+1 ;

end

end

assign add_s_g = end_f_s;

assign end_s_g = add_s_g&&s_g == x -1 ;

接下(xià)来(lái)思(sī)考小时(shí)十(shí)位s_ss_s的(de)變(biàn)化(huà)情(qíng)況如(rú)下(xià):

图(tú) 299

s_s小时(shí)十(shí)位的(de)指示,很明(míng)顯當小时(shí)个(gè)位要(yào)清(qīng)零(líng)时(shí)(注意(yì)不(bù)是(shì)每隔10小时(shí)),s_s就(jiù)会(huì)加1,很明(míng)顯,s_s也(yě)是(shì)一(yī)个(gè)計(jì)數器,加1条(tiáo)件(jiàn)是(shì)小时(shí)个(gè)位要(yào)清(qīng)零(líng)了(le),也(yě)就(jiù)是(shì)end_s_g。該計(jì)數器周期(qī)性(xìng)是(shì)數3个(gè)。所(suǒ)以(yǐ)代(dài)碼如(rú)下(xià):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

always @(posedgeclk or negedgerst_n)begin

if(!rst_n)begin

s_s<= 0;

end

else if(add_s_s)begin

if(end_s_s)

s_s<= 0;

else

s_s<= s_s + 1;

end

end

assign add_s_s = end_s_g;

assign end_s_s = add_s_s&&s_s==3-1 ;

最(zuì)後(hòu),我(wǒ)们(men)再考慮x,也(yě)就(jiù)是(shì)小时(shí)个(gè)位的(de)周期(qī)性(xìng)是(shì)多(duō)少(shǎo),并取(qǔ)決于(yú)什麼(me)因(yīn)素。我(wǒ)们(men)可(kě)以(yǐ)發(fà)現(xiàn),小时(shí)个(gè)位是(shì)0~90~90~30~90~90~3,也(yě)就(jiù)是(shì)周期(qī)性(xìng)是(shì)10或(huò)者(zhě)是(shì)4。至(zhì)于(yú)是(shì)10還(huán)是(shì)4,則取(qǔ)決于(yú)小时(shí)十(shí)位,即s_s。當时(shí)鐘(zhōng)的(de)小时(shí)十(shí)位顯示为(wèi)2时(shí),小时(shí)个(gè)位只(zhī)要(yào)數到(dào)3就(jiù)行了(le),沒(méi)有(yǒu)25點(diǎn)的(de)。綜上(shàng)所(suǒ)術(shù),發(fà)s_s为(wèi)2时(shí),x=4,否則x=10。所(suǒ)以(yǐ)x的(de)代(dài)碼如(rú)下(xià):

1

2

3

4

5

6

always  @(*)begin

if(s_s==2)

x = 4;

else

x = 10;

end

此(cǐ)次(cì),主(zhǔ)體(tǐ)程序已經(jīng)完成(chéng)。接下(xià)来(lái)是(shì)将module補充完整。


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

接下(xià)来(lái)定(dìng)義信(xìn)号(hào)類(lèi)型。

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)100_000,需要(yào)用(yòng)17根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)17位。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ě)11个(gè)線(xiàn)表(biǎo)示即可(kě)。因(yīn)此(cǐ)代(dài)碼如(rú)下(xià):

1

2

3

reg  [16:0]     cnt0     ;

wire            add_cnt0 ;

wire            end_cnt0 ;

cnt1是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)regcnt1計(jì)數的(de)最(zuì)大值为(wèi)6,需要(yào)用(yòng)3根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)3位。add_cnt1和(hé)end_cnt1都是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。并且其值是(shì)0或(huò)者(zhě)11根(gēn)線(xiàn)表(biǎo)示即可(kě)。因(yīn)此(cǐ)代(dài)碼如(rú)下(xià):

1

2

3

reg  [2:0]      cnt1    ;

wire            add_cnt1;

wire            end_cnt1;

seg_sel是(shì)用(yòng)always方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)reg,其一(yī)共(gòng)有(yǒu)8根(gēn)線(xiàn),即位宽(kuān)为(wèi)8。因(yīn)此(cǐ)代(dài)碼如(rú)下(xià):

1

reg  [ 7:0]  seg_sel  ;

seg_ ment是(shì)用(yòng)always方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)reg,其一(yī)共(gòng)有(yǒu)7根(gēn)線(xiàn),即位宽(kuān)为(wèi)7。因(yīn)此(cǐ)代(dài)碼如(rú)下(xià):

1

reg   [ 6:0]  seg_ment ;

sel_data是(shì)用(yòng)always設計(jì)的(de),所(suǒ)以(yǐ)類(lèi)型为(wèi)wire。其最(zuì)大值为(wèi)9,所(suǒ)以(yǐ)需要(yào)4位位宽(kuān)。代(dài)碼如(rú)下(xià):

1

reg  [ 3:0]   sel_data  ;

cnt2是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)regcnt2計(jì)數的(de)最(zuì)大值为(wèi)50_000_000,需要(yào)用(yòng)26根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)26位。add_cnt2和(hé)end_cnt2都是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。并且其值是(shì)0或(huò)者(zhě)11个(gè)線(xiàn)表(biǎo)示即可(kě)。因(yīn)此(cǐ)代(dài)碼如(rú)下(xià):

1

2

3

reg  [25:0]     cnt2     ;

wire            add_cnt2 ;

wire            end_cnt2 ;

m_g是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)regm_g計(jì)數的(de)最(zuì)大值为(wèi)9,需要(yào)用(yòng)4根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)4位。add_m_g和(hé)end_m_g都是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。并且其值是(shì)0或(huò)者(zhě)11个(gè)線(xiàn)表(biǎo)示即可(kě)。因(yīn)此(cǐ)代(dài)碼如(rú)下(xià):

1

2

3

reg  [ 3:0]     m_g      ;

wire            add_m_g  ;

wire            end_m_g  ;

m_s是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)regm_s計(jì)數的(de)最(zuì)大值为(wèi)5,需要(yào)用(yòng)3根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)3位。add_m_s和(hé)end_m_s都是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。并且其值是(shì)0或(huò)者(zhě)11个(gè)線(xiàn)表(biǎo)示即可(kě)。因(yīn)此(cǐ)代(dài)碼如(rú)下(xià):

1

2

3

reg  [ 2:0]     m_s      ;

wire            add_m_s  ;

wire            end_m_s  ;

f_g是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)regf_g計(jì)數的(de)最(zuì)大值为(wèi)9,需要(yào)用(yòng)4根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)4位。add_f_g和(hé)end_f_g都是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。并且其值是(shì)0或(huò)者(zhě)11个(gè)線(xiàn)表(biǎo)示即可(kě)。因(yīn)此(cǐ)代(dài)碼如(rú)下(xià):

1

2

3

reg  [ 3:0]     f_g      ;

wire            add_f_g  ;

wire            end_f_g  ;

f_s是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)regf_s計(jì)數的(de)最(zuì)大值为(wèi)5,需要(yào)用(yòng)3根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)3位。add_f_s和(hé)end_f_s都是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。并且其值是(shì)0或(huò)者(zhě)11个(gè)線(xiàn)表(biǎo)示即可(kě)。因(yīn)此(cǐ)代(dài)碼如(rú)下(xià):

1

2

3

reg  [ 2:0]     f_s      ;

wire            add_f_s  ;

wire            end_f_s  ;

s_g是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)regs_g計(jì)數的(de)最(zuì)大值为(wèi)9,需要(yào)用(yòng)4根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)4位。add_s_g和(hé)end_s_g都是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。并且其值是(shì)0或(huò)者(zhě)11个(gè)線(xiàn)表(biǎo)示即可(kě)。因(yīn)此(cǐ)代(dài)碼如(rú)下(xià):

1

2

3

reg  [ 3:0]     s_g      ;

wire            add_s_g  ;

wire            end_s_g  ;

s_s是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)regs_s計(jì)數的(de)最(zuì)大值为(wèi)2,需要(yào)用(yòng)2根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)2位。add_s_s和(hé)end_s_s都是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。并且其值是(shì)0或(huò)者(zhě)11个(gè)線(xiàn)表(biǎo)示即可(kě)。因(yīn)此(cǐ)代(dài)碼如(rú)下(xià):

1

2

3

reg  [ 1:0]    s_s      ;

wire            add_s_s  ;

wire            end_s_s  ;

x是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)regx計(jì)數的(de)最(zuì)大值为(wèi)10,需要(yào)用(yòng)4根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)4位。

1

reg  [ 3:0]     x        ;

至(zhì)此(cǐ),整个(gè)代(dài)碼的(de)設計(jì)工作已經(jīng)完成(chéng)。

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

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

module my_shizhong(

clk     ,

rst_n   ,

seg_sel ,

seg_ment

);

input       clk     ;

input       rst_n   ;

output[7:0] seg_sel ;

output[6:0] seg_ment;

reg  [ 7:0]  seg_sel  ;

reg   [ 6:0]  seg_ment ;

reg  [16:0]     cnt0     ;

wire            add_cnt0 ;

wire            end_cnt0 ;

reg  [2:0]     cnt1    ;

wire            add_cnt1;

wire            end_cnt1;

reg  [25:0]     cnt2     ;

wire            add_cnt2 ;

wire            end_cnt2 ;

reg  [ 3:0]     m_g      ;

wire            add_m_g  ;

wire            end_m_g  ;

reg  [ 2:0]     m_s      ;

wire            add_m_s  ;

wire            end_m_s  ;

reg  [ 3:0]     f_g      ;

wire            add_f_g  ;

wire            end_f_g  ;

reg  [ 2:0]     f_s      ;

wire            add_f_s  ;

wire            end_f_s  ;

reg  [ 3:0]     s_g      ;

wire            add_s_g  ;

wire            end_s_g  ;

reg  [ 1:0]     s_s      ;

wire            add_s_s  ;

wire            end_s_s  ;

reg  [ 3:0]   sel_data  ;

reg  [ 3:0]     x        ;

always @(posedgeclk or negedgerst_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==100_000-1 ;

always @(posedgeclk or negedgerst_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==6-1 ;

always  @(posedgeclk or negedgerst_n)begin

if(rst_n==1'b0)begin

seg_sel<= 8'hfe;

end

else if(cnt1==0)begin

seg_sel<= 8'hfe;

end

else if(cnt1==1)begin

seg_sel<= 8'hfd;

end

else if(cnt1==2)begin

seg_sel<= 8'hfb;

end

else if(cnt1==3)begin

seg_sel<= 8'hf7;

end

else if(cnt1==4)begin

seg_sel<= 8'hef;

end

else if(cnt1==5)begin

seg_sel<= 8'hdf;

end

end

always  @(*)begin

if(cnt1==0)

sel_data = m_g;

else if(cnt1==1)

sel_data = m_s;

else if(cnt1==2)

sel_data = f_g;

else if(cnt1==3)

sel_data = f_s;

else if(cnt1==4)

sel_data = s_g;

else

sel_data = s_s;

end

always  @(posedgeclk or negedgerst_n)begin

if(rst_n==1'b0)begin

seg_ment<= 7'h01;

end

else if(sel_data==0)begin

seg_ment<= 7'h01;

end

else if(sel_data==1)begin

seg_ment<= 7'h4f;

end

else if(sel_data==2)begin

seg_ment<= 7'h12;

end

else if(sel_data==3)begin

seg_ment<= 7'h06;

end

else if(sel_data==4)begin

seg_ment<= 7'h4c;

end

else if(sel_data==5)begin

seg_ment<= 7'h24;

end

else if(sel_data==6)begin

seg_ment<= 7'h20;

end

else if(sel_data==7)begin

seg_ment<= 7'h0f;

end

else if(sel_data==8)begin

seg_ment<= 7'h00;

end

else if(sel_data==9)begin

seg_ment<= 7'h04;

end

end

always @(posedgeclk or negedgerst_n)begin

if(!rst_n)begin

cnt2 <= 0;

end

else if(add_cnt2)begin

if(end_cnt2)

cnt2 <= 0;

else

cnt2 <= cnt2 + 1;

end

end

assign add_cnt2 = 1;

assign end_cnt2 = add_cnt2 && cnt2==50_000_000-1 ;

always @(posedgeclk or negedgerst_n) begin

if (rst_n==0) begin

m_g<= 0;

end

else if(add_m_g) begin

if(end_m_g)

m_g<= 0;

else

m_g<= m_g+1 ;

end

end

assign add_m_g = end_cnt2;

assign end_m_g = add_m_g&&m_g == 10 -1 ;

always @(posedgeclk or negedgerst_n)begin

if(!rst_n)begin

m_s<= 0;

end

else if(add_m_s)begin

if(end_m_s)

m_s<= 0;

else

m_s<= m_s + 1;

end

end

assign add_m_s = end_m_g;

assign end_m_s = add_m_s&&m_s==6-1 ;

always @(posedgeclk or negedgerst_n) begin

if (rst_n==0) begin

f_g<= 0;

end

else if(add_f_g) begin

if(end_f_g)

f_g<= 0;

else

f_g<= f_g+1 ;

end

end

assign add_f_g = end_m_s;

assign end_f_g = add_f_g&&f_g == 10 -1 ;

always @(posedgeclk or negedgerst_n)begin

if(!rst_n)begin

f_s<= 0;

end

else if(add_f_s)begin

if(end_f_s)

f_s<= 0;

else

f_s<= f_s + 1;

end

end

assign add_f_s = end_f_g;

assign end_f_s = add_f_s&&f_s==6-1 ;

always @(posedgeclk or negedgerst_n) begin

if (rst_n==0) begin

s_g<= 0;

end

else if(add_s_g) begin

if(end_s_g)

s_g<= 0;

else

s_g<= s_g+1 ;

end

end

assign add_s_g = end_f_s;

assign end_s_g = add_s_g&&s_g == x -1 ;

always @(posedgeclk or negedgerst_n)begin

if(!rst_n)begin

s_s<= 0;

end

else if(add_s_s)begin

if(end_s_s)

s_s<= 0;

else

s_s<= s_s + 1;

end

end

assign add_s_s = end_s_g;

assign end_s_s = add_s_s&&s_s==3-1 ;

always  @(*)begin

if(s_s==2)

x = 4;

else

x = 10;

end

endmodule

下(xià)一(yī)步是(shì)新建工程和(hé)上(shàng)板查看(kàn)現(xiàn)象(xiàng)。


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

4.1 新建工程

首先(xiān)在(zài)d盤中(zhōng)創建名为(wèi)“my_shizhong”的(de)工程文(wén)件(jiàn)夾,将写的(de)代(dài)碼命名为(wèi)“my_shizhong.v,頂层模块(kuài)名为(wèi)“my_shizhong”。

图(tú) 300

图(tú) 301

然後(hòu)打(dǎ)開(kāi)QuartusⅡ,點(diǎn)擊File下(xià)拉列表(biǎo)中(zhōng)的(de)New Project Wzard...新建工程選項。

图(tú) 302

3.再出(chū)現(xiàn)的(de)界面(miàn)中(zhōng)直(zhí)接點(diǎn)擊Next

图(tú) 303

4.之後(hòu)出(chū)現(xiàn)的(de)是(shì)工程文(wén)件(jiàn)夾、工程名、頂层模块(kuài)名設置界面(miàn)。按照之前(qián)的(de)命名進(jìn)行填写,然後(hòu)點(diǎn)擊Next,在(zài)出(chū)現(xiàn)的(de)界面(miàn)選擇empty project

图(tú) 304

图(tú) 305

5.之後(hòu)是(shì)文(wén)件(jiàn)添加界面(miàn)。添加之前(qián)写的(de)“my_shizhong.v”文(wén)件(jiàn),點(diǎn)擊右(yòu)側的(de)“Add”按鈕,之後(hòu)文(wén)件(jiàn)還(huán)会(huì)出(chū)現(xiàn)在(zài)下(xià)方(fāng)大方(fāng)框里(lǐ),之後(hòu)點(diǎn)擊“Next”。

图(tú) 306

器件(jiàn)型号(hào)選擇界面(miàn)。在(zài)上(shàng)方(fāng)紅(hóng)色(sè)箭头(tóu)处選擇Cyclone E,在(zài)中(zhōng)間(jiān)紅(hóng)色(sè)箭头(tóu)处選擇EP4CE15F23C8,然後(hòu)點(diǎn)擊“Next”。

图(tú) 307

EDA工具界面(miàn)。直(zhí)接點(diǎn)擊“Next”。

图(tú) 308

8.之後(hòu)出(chū)現(xiàn)的(de)界面(miàn),點(diǎn)擊“Finish”。

图(tú) 309


4.2 綜合

1.新建工程步驟完成(chéng)後(hòu),就(jiù)会(huì)出(chū)現(xiàn)以(yǐ)下(xià)界面(miàn)。選中(zhōng)要(yào)編譯的(de)文(wén)件(jiàn),點(diǎn)擊編譯按鈕。

图(tú) 310

2.編譯成(chéng)功後(hòu)会(huì)出(chū)現(xiàn)一(yī)下(xià)界面(miàn)。

图(tú) 311


4.3 配置管(guǎn)脚

图(tú) 312

在(zài)菜單欄中(zhōng),選中(zhōng)Assignments,然後(hòu)選擇Pin Planner,就(jiù)会(huì)弹出(chū)配置管(guǎn)脚的(de)窗(chuāng)口(kǒu)。

图(tú) 313

在(zài)配置窗(chuāng)口(kǒu)最(zuì)下(xià)方(fāng)中(zhōng)的(de)location一(yī)列,參考下(xià)表(biǎo)中(zhōng)最(zuì)右(yòu)两(liǎng)列配置好(hǎo)FPGA管(guǎn)脚。

器件(jiàn)

信(xìn)号(hào)線(xiàn)

信(xìn)号(hào)線(xiàn)

FPGA管(guǎn)脚

內(nèi)部(bù)信(xìn)号(hào)

U6,U7

SEG_E

SEG0

Y6

seg_ment[2]

SEG_DP

SEG1

W6

未用(yòng)到(dào)

SEG_G

SEG2

Y7

seg_ment[0]

SEG_F

SEG3

W7

seg_ment[1]

SEG_D

SEG4

P3

seg_ment[3]

SEG_C

SEG5

P4

seg_ment[4]

SEG_B

SEG6

R5

seg_ment[5]

SEG_A

SEG7

T3

seg_ment[6]

DIG1

DIG_EN1

T4

seg_sel[0]

DIG2

DIG_EN2

V4

seg_sel[1]

DIG3

DIG_EN3

V3

seg_sel[2]

DIG4

DIG_EN4

Y3

seg_sel[3]

DIG5

DIG_EN5

Y8

seg_sel[4]

DIG6

DIG_EN6

W8

seg_sel[5]

DIG7

DIG_EN7

W10

seg_sel[6]

DIG8

DIG_EN8

Y10

seg_sel[7]

X1

SYS_CLK

G1

clk

K1

SYS_RST

AB12

rst_n

配置完成(chéng)後(hòu),關(guān)閉Pin Planner,软(ruǎn)件(jiàn)自(zì)動(dòng)会(huì)保存管(guǎn)脚配置信(xìn)息。


4.4 再次(cì)綜合

图(tú) 314

在(zài)菜單欄中(zhōng),選中(zhōng)Processing,然後(hòu)選擇Start Compilation,再次(cì)对(duì)整个(gè)工程進(jìn)行編譯和(hé)綜合。

图(tú) 315

出(chū)現(xiàn)上(shàng)面(miàn)的(de)界面(miàn),就(jiù)说(shuō)明(míng)編譯綜合成(chéng)功。


4.5 連(lián)接開(kāi)發(fà)板

图(tú)中(zhōng),下(xià)载器接入(rù)電(diàn)腦USB接口(kǒu),電(diàn)源接入(rù)電(diàn)源,然後(hòu)摁下(xià)藍(lán)色(sè)開(kāi)關(guān)。

图(tú) 316


4.6 上(shàng)板

1.双(shuāng)擊Tasks一(yī)欄中(zhōng)”Program Device”。

图(tú) 317

2.会(huì)出(chū)現(xiàn)如(rú)下(xià)界面(miàn),點(diǎn)擊add file添加.sof文(wén)件(jiàn),點(diǎn)擊“Start”,会(huì)在(zài)“Progress”出(chū)顯示進(jìn)度(dù)。

图(tú) 318

3.進(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)。


   拓展(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⁥⁠⁢

⁧⁨⁥⁨