⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ 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.5數碼管(guǎn)動(dòng)态掃描--明(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):001600000017

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

1.至(zhì)簡原理與(yǔ)應(yìng)用(yòng)配套(tào)的(de)案(àn)例文(wén)檔
2.实現(xiàn)開(kāi)發(fà)板上(shàng)數碼管(guǎn)顯示的(de)功能(néng),使8个(gè)數碼管(guǎn)有(yǒu)規律的(de)按照时(shí)間(jiān)進(jìn)行顯示。複位後(hòu),數碼管(guǎn)0顯示數字(zì)“0”;1秒(miǎo)後(hòu),數碼管(guǎn)1顯示數字(zì)"1";再1秒(miǎo)後(hòu),數碼管(guǎn)2顯示數字(zì)"2";以(yǐ)此(cǐ)類(lèi)推,每隔疫苗(miáo)變(biàn)化(huà)一(yī)次(cì),最(zuì)後(hòu)當數碼管(guǎn)7顯示數字(zì)"7"後(hòu)再次(cì)回(huí)到(dào)數碼管(guǎn)0顯示"0";按这(zhè)樣(yàng)的(de)規律循环(huán)。
3. 这(zhè)是(shì)ALTERA入(rù)門(mén)学習案(àn)例文(wén)檔

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


    第(dì)五(wǔ)章(zhāng) 數碼管(guǎn)動(dòng)态掃描


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

   led數碼管(guǎn)(LED Segment Displays)是(shì)由(yóu)多(duō)个(gè)發(fà)光(guāng)二(èr)极(jí)管(guǎn)封(fēng)裝(zhuāng)在(zài)一(yī)起的(de)器件(jiàn),这(zhè)些二(èr)极(jí)管(guǎn)組成(chéng)“8”字(zì)型,在(zài)內(nèi)部(bù)完成(chéng)引線(xiàn)連(lián)接,只(zhī)引出(chū)它(tā)们(men)的(de)各(gè)个(gè)笔(bǐ)劃(huà)和(hé)公共(gòng)電(diàn)极(jí)。一(yī)般来(lái)说(shuō),led數碼管(guǎn)常用(yòng)段(duàn)數为(wèi)7段(duàn),如(rú)下(xià)图(tú)中(zhōng)所(suǒ)示的(de)abcdefg,有(yǒu)的(de)數碼管(guǎn)還(huán)会(huì)添加一(yī)个(gè)小數點(diǎn),如(rú)图(tú)中(zhōng)的(de)h所(suǒ)示。
                              
图(tú)3.5-18位數碼管(guǎn)

數碼管(guǎn)可(kě)以(yǐ)通(tòng)过(guò)驅動(dòng)電(diàn)路(lù)来(lái)驅動(dòng)內(nèi)部(bù)的(de)各(gè)个(gè)段(duàn)碼,從而(ér)顯示出(chū)需要(yào)的(de)數字(zì)。發(fà)光(guāng)二(èr)极(jí)管(guǎn)單元(yuán)按照連(lián)接方(fāng)式可(kě)分(fēn)为(wèi)共(gòng)陽极(jí)數碼管(guǎn)和(hé)共(gòng)陰极(jí)數碼管(guǎn)。其中(zhōng),将所(suǒ)有(yǒu)發(fà)光(guāng)二(èr)极(jí)管(guǎn)的(de)陽极(jí)連(lián)接到(dào)一(yī)起形成(chéng)公共(gòng)陽极(jí)(COM)的(de)數碼管(guǎn)为(wèi)共(gòng)陽极(jí)數碼管(guǎn)。在(zài)應(yìng)用(yòng)时(shí)應(yìng)将共(gòng)陽极(jí)數碼管(guǎn)的(de)公共(gòng)极(jí)COM接到(dào)+5V,當某一(yī)字(zì)段(duàn)發(fà)光(guāng)二(èr)极(jí)管(guǎn)的(de)陰极(jí)为(wèi)低電(diàn)平时(shí),該字(zì)段(duàn)點(diǎn)亮(liàng),當某一(yī)字(zì)段(duàn)的(de)陰极(jí)为(wèi)高(gāo)電(diàn)平时(shí),該字(zì)段(duàn)不(bù)亮(liàng)。例如(rú),當共(gòng)陽极(jí)數碼管(guǎn)的(de)abcdefg值分(fēn)别是(shì)1001111时(shí),即bc字(zì)段(duàn)亮(liàng),其他(tā)字(zì)段(duàn)不(bù)亮(liàng)时(shí),數碼管(guǎn)顯示數字(zì)“1”。反(fǎn)之,将所(suǒ)有(yǒu)發(fà)光(guāng)二(èr)极(jí)管(guǎn)的(de)陰极(jí)連(lián)接到(dào)一(yī)起形成(chéng)公共(gòng)陰极(jí)(COM)的(de)數碼管(guǎn)为(wèi)共(gòng)陰极(jí)數碼管(guǎn)。在(zài)應(yìng)用(yòng)时(shí)應(yìng)将共(gòng)陰极(jí)數碼管(guǎn)的(de)公共(gòng)极(jí)COM接到(dào)地(dì)線(xiàn)GND上(shàng),當某一(yī)字(zì)段(duàn)發(fà)光(guāng)二(èr)极(jí)管(guǎn)的(de)陽极(jí)为(wèi)高(gāo)電(diàn)平时(shí),該字(zì)段(duàn)點(diǎn)亮(liàng),當某一(yī)字(zì)段(duàn)的(de)陽极(jí)为(wèi)低電(diàn)平时(shí),該字(zì)段(duàn)不(bù)亮(liàng)。

根(gēn)據(jù)共(gòng)陽极(jí)、共(gòng)陰极(jí)數碼管(guǎn)的(de)工作原理可(kě)得,數碼管(guǎn)顯示數字(zì)0到(dào)9对(duì)應(yìng)的(de)abcdefg值如(rú)下(xià)表(biǎo)所(suǒ)示。

表(biǎo)3.5- 1 數碼管(guǎn)顯示數字(zì)與(yǔ)字(zì)段(duàn)值的(de)对(duì)應(yìng)關(guān)系(xì)
  
顯示
  
數字(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
7’b0000001
7’h01
7’b 1111110
7’h7e
1
7’b 1001111
7’h4f
7’b 0110000
7’h30
2
7’b 0010010
7’h12
7’b 1101101
7’h6d
3
7’b 0000110
7’h06
7’b 1111001
7’h79
4
7’b 1001100
7’h4c
7’b 0110011
7’h33
5
7’b 0100100
7’h24
7’b 1011011
7’h5b
6
7’b 0100000
7’h20
7’b 1011111
7’h3f
7
7’b 0001111
7’h0f
7’b 1110000
7’h70
8
7’b 0000000
7’h00
7’b 1111111
7’h7f
9
7’b 0000100
7’h04
7’b 1111011
7’h7b

LED數碼管(guǎn)的(de)正(zhèng)常顯示需要(yào)驅動(dòng)電(diàn)路(lù)来(lái)驅動(dòng)數碼管(guǎn)的(de)各(gè)个(gè)碼段(duàn),根(gēn)據(jù)數碼管(guǎn)驅動(dòng)方(fāng)式的(de)不(bù)同(tóng),可(kě)以(yǐ)将其分(fēn)为(wèi)静(jìng)态式和(hé)動(dòng)态式两(liǎng)類(lèi)。

静(jìng)态驅動(dòng)是(shì)指每个(gè)數碼管(guǎn)的(de)每一(yī)个(gè)段(duàn)碼都通(tòng)过(guò)一(yī)个(gè)單片(piàn)機(jī)的(de)I/O端口(kǒu)進(jìn)行驅動(dòng),或(huò)使用(yòng)如(rú)BCD碼二(èr)-十(shí)進(jìn)制譯碼器譯碼進(jìn)行驅動(dòng),也(yě)稱直(zhí)流驅動(dòng)。静(jìng)态驅動(dòng)編程簡單,顯示亮(liàng)度(dù)高(gāo),但占用(yòng)的(de)I/O端口(kǒu)多(duō):如(rú)果(guǒ)想(xiǎng)要(yào)驅動(dòng)5个(gè)數碼管(guǎn)静(jìng)态顯示則需要(yào)5×8=40根(gēn)I/O端口(kǒu)来(lái)完成(chéng)驅動(dòng),而(ér)一(yī)个(gè)89S51單片(piàn)機(jī)可(kě)用(yòng)的(de)I/O端口(kǒu)才32个(gè)。如(rú)此(cǐ)一(yī)来(lái),在(zài)实際應(yìng)用(yòng)中(zhōng)則必須增加譯碼驅動(dòng)器進(jìn)行驅動(dòng),從而(ér)增加了(le)硬(yìng)件(jiàn)電(diàn)路(lù)的(de)複雜性(xìng)。

由(yóu)于(yú)静(jìng)态驅動(dòng)的(de)这(zhè)一(yī)缺點(diǎn),LED數碼管(guǎn)動(dòng)态顯示接口(kǒu)應(yìng)用(yòng)更(gèng)廣。動(dòng)态驅動(dòng)是(shì)将所(suǒ)有(yǒu)數碼管(guǎn)的(de)8个(gè)顯示字(zì)段(duàn)"abcdefgh"的(de)同(tóng)名端連(lián)接在(zài)一(yī)起,此(cǐ)外(wài)每个(gè)數碼管(guǎn)的(de)公共(gòng)极(jí)COM需增加由(yóu)各(gè)自(zì)独立I/O線(xiàn)控制的(de)位選通(tòng)控制電(diàn)路(lù)。當要(yào)輸出(chū)某一(yī)字(zì)形碼时(shí),所(suǒ)有(yǒu)數碼管(guǎn)都会(huì)接收(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)控制。只(zhī)需将顯示數碼管(guǎn)的(de)選通(tòng)控制打(dǎ)開(kāi),該位就(jiù)会(huì)顯示出(chū)字(zì)形,而(ér)沒(méi)有(yǒu)選通(tòng)的(de)數碼管(guǎn)并不(bù)会(huì)點(diǎn)亮(liàng)。綜上(shàng)所(suǒ)述,動(dòng)态驅動(dòng)是(shì)通(tòng)过(guò)分(fēn)时(shí)轮流控制各(gè)數碼管(guǎn)的(de)COM端,使各(gè)个(gè)數碼管(guǎn)轮流受控顯示。在(zài)这(zhè)一(yī)过(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)各(gè)位數碼管(guǎn)并非(fēi)同(tóng)时(shí)點(diǎn)亮(liàng),但只(zhī)要(yào)掃描速度(dù)足够快(kuài),人(rén)们(men)观察到(dào)的(de)就(jiù)是(shì)一(yī)組稳定(dìng)的(de)顯示數據(jù),而(ér)不(bù)会(huì)産生(shēng)閃爍感(gǎn)。在(zài)顯示效果(guǒ)上(shàng),動(dòng)态顯示和(hé)静(jìng)态顯示相同(tóng)的(de),但動(dòng)态顯示不(bù)僅能(néng)够节(jié)省(shěng)大量(liàng)的(de)I/O端口(kǒu),而(ér)且功耗更(gèng)低。

至(zhì)簡設計(jì)法開(kāi)發(fà)板上(shàng)一(yī)共(gòng)有(yǒu)24位的(de)共(gòng)陽數碼管(guǎn),也(yě)就(jiù)是(shì)说(shuō)一(yī)共(gòng)有(yǒu)8个(gè)共(gòng)陽數碼管(guǎn)。數碼管(guǎn)的(de)配置電(diàn)路(lù)如(rú)下(xià)。
图(tú)3.5-2教学板數碼管(guǎn)原理图(tú)

图(tú)中(zhōng)的(de)SEG_ASEG_B~SEG_DP是(shì)段(duàn)選信(xìn)号(hào),8个(gè)數碼管(guǎn)共(gòng)用(yòng)。

DIG1~DIG8是(shì)位選信(xìn)号(hào),與(yǔ)8个(gè)數碼管(guǎn)分(fēn)别对(duì)應(yìng)。當位選信(xìn)号(hào)为(wèi)0时(shí),段(duàn)選信(xìn)号(hào)的(de)值将賦給(gěi)相應(yìng)數碼管(guǎn)。例如(rú)DIG3信(xìn)号(hào)为(wèi)0則表(biǎo)示将段(duàn)選信(xìn)号(hào)SEG_A~SEG_DP的(de)值賦給(gěi)數碼管(guǎn)3
信(xìn)号(hào)SEG_A~SEG_DPDIG1~DIG8,都與(yǔ)電(diàn)阻進(jìn)行連(lián)接,如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)3.5-3教学板數碼管(guǎn)連(lián)接電(diàn)阻

由(yóu)此(cǐ)可(kě)見(jiàn),SEG_A~SEG_DP由(yóu)SEG0~SEG7産生(shēng),DIG1~DIG8由(yóu)DIG_EN1~DIG_EN8産生(shēng)。而(ér)SEG0~SEG7和(hé)DIG_EN1~DIG_EN8都直(zhí)接與(yǔ)FPGA的(de)IO相連(lián),如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)3.5-4FPGA與(yǔ)數碼管(guǎn)信(xìn)号(hào)連(lián)接图(tú)

这(zhè)些信(xìn)号(hào)與(yǔ)FPGA管(guǎn)脚的(de)对(duì)應(yìng)關(guān)系(xì)如(rú)下(xià)表(biǎo)。FPGA通(tòng)过(guò)控制相應(yìng)的(de)管(guǎn)脚,從而(ér)实現(xiàn)对(duì)數碼管(guǎn)顯示的(de)控制。

表(biǎo)3.5- 2 信(xìn)号(hào)線(xiàn)與(yǔ)管(guǎn)脚的(de)關(guān)系(xì)
  
信(xìn)号(hào)線(xiàn)
  
信(xìn)号(hào)線(xiàn)
FPGA管(guǎn)脚
SEG_E
SEG0
Y6
SEG_DP
SEG1
W6
SEG_G
SEG2
Y7
SEG_F
SEG3
W7
SEG_D
SEG4
P3
SEG_C
SEG5
P4
SEG_B
SEG6
R5
SEG_A
SEG7
T3
DIG1
DIG_EN1
T4
DIG2
DIG_EN2
V4
DIG3
DIG_EN3
V3
DIG4
DIG_EN4
Y3
DIG5
DIG_EN5
Y8
DIG6
DIG_EN6
W8
DIG7
DIG_EN7
W10
DIG8
DIG_EN8
Y10


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

按照至(zhì)簡設計(jì)法的(de)設計(jì)特(tè)色(sè),在(zài)開(kāi)始一(yī)个(gè)新的(de)設計(jì)之前(qián)應(yìng)明(míng)确設計(jì)目标(biāo)。設計(jì)目标(biāo)是(shì)整个(gè)設計(jì)的(de)核心(xīn)靈魂,後(hòu)續的(de)每个(gè)步驟與(yǔ)操作都是(shì)圍繞設計(jì)目标(biāo)進(jìn)行展(zhǎn)開(kāi)。至(zhì)簡設計(jì)法的(de)原理很簡單,即每一(yī)个(gè)步驟和(hé)思(sī)路(lù)都力求簡單快(kuài)捷,明(míng)确設計(jì)目标(biāo)就(jiù)是(shì)为(wèi)了(le)确保後(hòu)續的(de)每个(gè)階(jiē)段(duàn)都有(yǒu)意(yì)義,而(ér)不(bù)去(qù)進(jìn)行不(bù)必要(yào)的(de)工程。这(zhè)一(yī)做法可(kě)以(yǐ)少(shǎo)走(zǒu)很多(duō)彎路(lù),尤其对(duì)于(yú)初学者(zhě)来(lái)说(shuō),好(hǎo)習慣的(de)養成(chéng)可(kě)以(yǐ)为(wèi)以(yǐ)後(hòu)的(de)工程师(shī)生(shēng)涯带(dài)来(lái)无限的(de)方(fāng)便。所(suǒ)以(yǐ)再次(cì)強(qiáng)調,在(zài)開(kāi)始設計(jì)前(qián)一(yī)定(dìng)要(yào)将設計(jì)目标(biāo)分(fēn)析透徹,認真(zhēn)思(sī)考本(běn)次(cì)設計(jì)最(zuì)終(zhōng)想(xiǎng)要(yào)实現(xiàn)什麼(me)目的(de),达(dá)到(dào)什麼(me)效果(guǒ),然後(hòu)再投入(rù)到(dào)設計(jì)中(zhōng)去(qù)。

本(běn)次(cì)設計(jì)需要(yào)实現(xiàn)開(kāi)發(fà)板上(shàng)數碼管(guǎn)顯示的(de)功能(néng),使个(gè)數碼管(guǎn)有(yǒu)規律的(de)按照时(shí)間(jiān)進(jìn)行顯示。複位後(hòu),數碼管(guǎn) 0 顯示數字(zì)“0”;秒(miǎo)後(hòu),數碼管(guǎn) 1 顯示數字(zì)“1”;再秒(miǎo)後(hòu),數碼管(guǎn) 2 顯示數字(zì)“2”;以(yǐ)此(cǐ)類(lèi)推,每隔 1 秒(miǎo)變(biàn)化(huà)一(yī)次(cì),最(zuì)後(hòu)當數碼管(guǎn) 7 顯示數字(zì)“7”後(hòu)再次(cì)回(huí)到(dào)數碼管(guǎn)0顯示“0”,按照这(zhè)樣(yàng)的(de)顯示規律循环(huán)往複。

本(běn)設計(jì)的(de)上(shàng)板效果(guǒ)图(tú)如(rú)下(xià)图(tú)所(suǒ)示,也(yě)可(kě)以(yǐ)登陸至(zhì)簡設計(jì)法官方(fāng)网(wǎng)站观看(kàn)上(shàng)板演示視頻效果(guǒ):old.mdy-edu.com/xxxx
        
图(tú)3.5-5數碼管(guǎn)動(dòng)态掃描效果(guǒ)图(tú)
第(dì)3节(jié) 設計(jì)实現(xiàn)

在(zài)設計(jì)的(de)实現(xiàn)階(jiē)段(duàn)本(běn)書(shū)会(huì)按照步驟和(hé)原理分(fēn)析進(jìn)行案(àn)例实現(xiàn)的(de)分(fēn)享,考慮到(dào)初学者(zhě)的(de)需要(yào),此(cǐ)部(bù)分(fēn)的(de)內(nèi)容会(huì)比較詳细(xì)。如(rú)果(guǒ)基礎知識掌握得比較牢靠,只(zhī)想(xiǎng)学習此(cǐ)設計(jì)的(de)步驟,可(kě)以(yǐ)跳过(guò)此(cǐ)部(bù)分(fēn),直(zhí)接進(jìn)入(rù)後(hòu)面(miàn)章(zhāng)节(jié)中(zhōng)的(de)簡化(huà)版步驟分(fēn)享。对(duì)于(yú)初学者(zhě)来(lái)说(shuō),建議不(bù)要(yào)選擇捷徑,一(yī)定(dìng)按照詳细(xì)分(fēn)析的(de)內(nèi)容進(jìn)行学習,只(zhī)有(yǒu)掌握好(hǎo)基礎知識,才可(kě)以(yǐ)從容的(de)独立完成(chéng)項目設計(jì)。

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

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

分(fēn)析設計(jì)目标(biāo)可(kě)知,本(běn)設計(jì)需要(yào)控制8个(gè)數碼管(guǎn),讓其顯示不(bù)同(tóng)的(de)數字(zì)。通(tòng)过(guò)前(qián)文(wén)分(fēn)析的(de)LED數碼管(guǎn)顯示原理可(kě)以(yǐ)得知:如(rú)果(guǒ)想(xiǎng)要(yào)控制8个(gè)數碼管(guǎn),則需控制位選信(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

控制數碼管(guǎn)的(de)不(bù)同(tóng)數字(zì)顯示需要(yào)通(tòng)过(guò)控制每个(gè)數碼管(guǎn)上(shàng)的(de)7个(gè)字(zì)段(duàn),即通(tòng)过(guò)控制段(duàn)選信(xìn)号(hào)可(kě)以(yǐ)实現(xiàn)數碼管(guǎn)不(bù)同(tóng)數字(zì)的(de)顯示,此(cǐ)处由(yóu)于(yú)只(zhī)需顯示數字(zì),无需用(yòng)到(dào)“h”子段(duàn),因(yīn)此(cǐ)一(yī)共(gòng)有(yǒu)7个(gè)子段(duàn),即FPGA要(yào)輸出(chū)一(yī)个(gè)7位的(de)段(duàn)選信(xìn)号(hào),将其設为(wèi)seg_ment。其中(zhōng)seg_ment[6]~segm_ment[0]分(fēn)别对(duì)應(yìng)數碼管(guǎn)的(de)abcdefg字(zì)段(duàn)(注意(yì)对(duì)應(yìng)順序)。當然,除位選信(xìn)号(hào)和(hé)段(duàn)選信(xìn)号(hào)外(wài),設計(jì)中(zhōng)進(jìn)行工程控制的(de)时(shí)鐘(zhōng)信(xìn)号(hào)和(hé)複位信(xìn)号(hào)也(yě)同(tóng)樣(yàng)必不(bù)可(kě)少(shǎo)。

綜上(shàng)所(suǒ)述,本(běn)設計(jì)一(yī)共(gòng)需要(yào)4个(gè)信(xìn)号(hào):时(shí)鐘(zhōng)信(xìn)号(hào)clk,複位信(xìn)号(hào)rst_n,輸出(chū)的(de)位選信(xìn)号(hào)seg_sel和(hé)輸出(chū)的(de)段(duàn)選信(xìn)号(hào)seg_ment。信(xìn)号(hào)和(hé)硬(yìng)件(jiàn)管(guǎn)脚的(de)对(duì)應(yìng)關(guān)系(xì)如(rú)下(xià)表(biǎo)所(suǒ)示。

表(biǎo)3.5 - 3信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)
  
器件(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_seg,已知該模块(kuài)有(yǒu)4个(gè)信(xìn)号(hào):clkrst_nseg_sel和(hé)seg_ment。在(zài)頂层信(xìn)号(hào)代(dài)碼中(zhōng)需要(yào)将與(yǔ)外(wài)部(bù)相連(lián)接的(de)輸入(rù)/輸出(chū)信(xìn)号(hào)列出(chū),從而(ér)实現(xiàn)信(xìn)号(hào)與(yǔ)管(guǎn)脚的(de)連(lián)接,其具體(tǐ)代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
module  my_seg(
  
rst_n  ,
  
clk  ,
  
seg_sel  ,
  
                 segment         
  
             );

随後(hòu)对(duì)信(xìn)号(hào)輸入(rù)輸出(chū)屬性(xìng)進(jìn)行聲明(míng),指出(chū)这(zhè)一(yī)信(xìn)号(hào)对(duì)于(yú)FPGA来(lái)说(shuō)屬于(yú)輸入(rù)信(xìn)号(hào)還(huán)是(shì)輸出(chū)信(xìn)号(hào),若为(wèi)輸入(rù)信(xìn)号(hào)則聲明(míng)其为(wèi)input,若为(wèi)輸出(chū)信(xìn)号(hào)則聲明(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)1位的(de)輸入(rù)信(xìn)号(hào)input;同(tóng)樣(yàng)地(dì),rst_n是(shì)外(wài)部(bù)按鍵給(gěi)FPGA的(de),因(yīn)此(cǐ)在(zài)FPGA中(zhōng)rst_n也(yě)为(wèi)1位的(de)輸入(rù)信(xìn)号(hào)inputseg_sel是(shì)FPGA控制數碼管(guǎn)亮(liàng)滅的(de)信(xìn)号(hào),因(yīn)此(cǐ)seg_sel是(shì)8位的(de)輸出(chū)信(xìn)号(hào)outputseg_ment是(shì)FPGA控制數碼管(guǎn)顯示數字(zì)內(nèi)容的(de)信(xìn)号(hào),因(yīn)此(cǐ)seg_ment是(shì)7位的(de)輸出(chū)信(xìn)号(hào)output,綜上(shàng)所(suǒ)述,其具體(tǐ)代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
input                    clk         ;
  
input                    rst_n           ;
  
output  [ 7:0]            seg_sel  ;
  
output  [ 6:0]            segment       ;
3.2 信(xìn)号(hào)設計(jì)

在(zài)設計(jì)信(xìn)号(hào)之前(qián),先(xiān)按照至(zhì)簡設計(jì)法的(de)思(sī)路(lù)来(lái)進(jìn)行架構設計(jì)。分(fēn)析需要(yào)实現(xiàn)的(de)功能(néng)为(wèi):第(dì)1秒(miǎo)时(shí)數碼管(guǎn)0顯示數字(zì)“0”,其餘數碼管(guǎn)不(bù)顯示任何數字(zì);第(dì)2秒(miǎo)时(shí)數碼管(guǎn)1顯示數字(zì)“1”,其餘數碼管(guǎn)同(tóng)樣(yàng)不(bù)顯示任何數字(zì);第(dì)3秒(miǎo)时(shí)數碼管(guǎn)3顯示數字(zì)“3”,其餘數碼管(guǎn)不(bù)顯示數字(zì);以(yǐ)此(cǐ)類(lèi)推,第(dì)八(bā)秒(miǎo)數碼管(guǎn)7顯示數字(zì)“7”,循环(huán)往複。

将現(xiàn)象(xiàng)翻譯成(chéng)信(xìn)号(hào)表(biǎo)示如(rú)下(xià):
第(dì)1秒(miǎo),數碼管(guǎn)0顯示數字(zì)“0”,即seg_sel的(de)值为(wèi)8’b1111_1110seg_ment的(de)值为(wèi)7’b000_0001
第(dì)2秒(miǎo),數碼管(guǎn)1顯示數字(zì)“1”,即seg_sel的(de)值为(wèi)8’b1111_1101seg_ment的(de)值为(wèi)7’b100_1111
第(dì)3秒(miǎo),數碼管(guǎn)2顯示數字(zì)“2”,即seg_sel的(de)值为(wèi)8’b1111_1011seg_ment的(de)值为(wèi)7’b001_0010
第(dì)4秒(miǎo),數碼管(guǎn)3顯示數字(zì)“3”,即seg_sel的(de)值为(wèi)8’b1111_0111seg_ment的(de)值为(wèi)7’b000_0110
第(dì)5秒(miǎo),數碼管(guǎn)4顯示數字(zì)“4”,即seg_sel的(de)值为(wèi)8’b1110_1111seg_ment的(de)值为(wèi)7’b100_1100
第(dì)6秒(miǎo),數碼管(guǎn)5顯示數字(zì)“5”,即seg_sel的(de)值为(wèi)8’b1101_1111seg_ment的(de)值为(wèi)7’b010_0100
第(dì)7秒(miǎo),數碼管(guǎn)6顯示數字(zì)“6”,即seg_sel的(de)值为(wèi)8’b1011_1111seg_ment的(de)值为(wèi)7’b010_0000
第(dì)8秒(miǎo),數碼管(guǎn)7顯示數字(zì)“7”,即seg_sel的(de)值为(wèi)8’b0111_1111seg_ment的(de)值为(wèi)7’b000_1111
第(dì)九秒(miǎo),回(huí)到(dào)數碼管(guǎn)0顯示數字(zì)“0”,以(yǐ)此(cǐ)進(jìn)行循环(huán)。

總(zǒng)結發(fà)現(xiàn),數碼管(guǎn)每隔1秒(miǎo)進(jìn)行變(biàn)化(huà),且8个(gè)數碼管(guǎn)轮流顯示。通(tòng)过(guò)分(fēn)析可(kě)以(yǐ)画(huà)出(chū)信(xìn)号(hào)波(bō)形示意(yì)图(tú)如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)3.5-6數碼管(guǎn)動(dòng)态掃描实現(xiàn)架構

通(tòng)过(guò)seg_sel和(hé)seg_seg信(xìn)号(hào)的(de)變(biàn)化(huà)波(bō)形图(tú)可(kě)以(yǐ)看(kàn)出(chū):顯示第(dì)1个(gè)數字(zì)时(shí),seg_sel=8’hfeseg_ment=7’h01,該狀态会(huì)持(chí)續1秒(miǎo);顯示第(dì)2个(gè)數字(zì)时(shí),seg_sel=8’hfdseg_ment=7’h4f,同(tóng)樣(yàng)持(chí)續1秒(miǎo);以(yǐ)此(cǐ)類(lèi)推,到(dào)第(dì)8个(gè)數字(zì)时(shí),持(chí)續1秒(miǎo)seg_sel=8’h7fseg_ment=7’h0f。随後(hòu)進(jìn)入(rù)新一(yī)轮循环(huán),再次(cì)重(zhòng)複seg_sel=8’hfeseg_ment=7’h01的(de)1秒(miǎo)持(chí)續。

根(gēn)據(jù)波(bō)形图(tú)分(fēn)析可(kě)以(yǐ)得到(dào)本(běn)設計(jì)的(de)計(jì)數器架構:本(běn)設計(jì)一(yī)共(gòng)需要(yào)两(liǎng)个(gè)計(jì)數器,一(yī)个(gè)計(jì)數器用(yòng)来(lái)計(jì)算1秒(miǎo)的(de)时(shí)間(jiān),另(lìng)一(yī)个(gè)計(jì)數器用(yòng)来(lái)計(jì)算1秒(miǎo)的(de)次(cì)數,即这(zhè)是(shì)第(dì)幾(jǐ)个(gè)1秒(miǎo)。

来(lái)思(sī)考一(yī)下(xià):既然設計(jì)目标(biāo)为(wèi)1秒(miǎo)改變(biàn)一(yī)次(cì)狀态,为(wèi)什麼(me)除了(le)1秒(miǎo)的(de)計(jì)數器之外(wài),還(huán)要(yào)設計(jì)數第(dì)幾(jǐ)个(gè)的(de)計(jì)數器,这(zhè)樣(yàng)豈不(bù)是(shì)更(gèng)麻(má)煩吗?实際上(shàng)增加計(jì)數器的(de)操作正(zhèng)是(shì)運用(yòng)了(le)至(zhì)簡設計(jì)法的(de)道(dào)理,讓信(xìn)号(hào)代(dài)碼更(gèng)加有(yǒu)条(tiáo)理并便于(yú)設計(jì)师(shī)确定(dìng)位置。

舉个(gè)生(shēng)活中(zhōng)常見(jiàn)的(de)例子,如(rú)下(xià)图(tú)所(suǒ)示,将8个(gè)數碼管(guǎn)一(yī)次(cì)顯示循环(huán)看(kàn)做樓层,把每1秒(miǎo)改變(biàn)一(yī)次(cì)的(de)狀态記(jì)作門(mén)牌(pái)号(hào),即第(dì)1秒(miǎo)、第(dì)2秒(miǎo)、第(dì)3秒(miǎo)在(zài)一(yī)层樓一(yī)对(duì)應(yìng)1号(hào)2号(hào)3号(hào),以(yǐ)此(cǐ)類(lèi)推。如(rú)果(guǒ)只(zhī)用(yòng)一(yī)个(gè)計(jì)數器的(de)話(huà),那(nà)麼(me)一(yī)樓門(mén)牌(pái)号(hào)为(wèi)12345678,二(èr)樓門(mén)牌(pái)号(hào)則为(wèi)9101112131415161718,三(sān)樓以(yǐ)此(cǐ)類(lèi)推。这(zhè)種(zhǒng)只(zhī)有(yǒu)用(yòng)一(yī)種(zhǒng)計(jì)數單位的(de)方(fāng)法,開(kāi)始确实沒(méi)有(yǒu)太大問(wèn)題(tí),但是(shì)随着樓层的(de)變(biàn)高(gāo),这(zhè)種(zhǒng)計(jì)數方(fāng)式的(de)弊端就(jiù)会(huì)顯露(lù)出(chū)来(lái)。比如(rú)在(zài)这(zhè)種(zhǒng)情(qíng)況下(xià)想(xiǎng)要(yào)找(zhǎo)76号(hào),就(jiù)可(kě)能(néng)需要(yào)很久才能(néng)找(zhǎo)到(dào)。
图(tú)3.5-7單一(yī)門(mén)牌(pái)号(hào)計(jì)數模式

如(rú)果(guǒ)在(zài)一(yī)个(gè)計(jì)數單位的(de)基礎上(shàng)再加一(yī)个(gè)計(jì)數單位,即采用(yòng)两(liǎng)種(zhǒng)技術(shù)模式,一(yī)个(gè)記(jì)樓层,一(yī)个(gè)記(jì)門(mén)牌(pái)号(hào),如(rú)下(xià)图(tú)所(suǒ)示。在(zài)同(tóng)樣(yàng)的(de)門(mén)牌(pái)号(hào)計(jì)數中(zhōng),可(kě)以(yǐ)記(jì)为(wèi)一(yī)樓的(de)12345678号(hào),二(èr)樓的(de)12345678910号(hào),以(yǐ)此(cǐ)類(lèi)推,每一(yī)层都有(yǒu)对(duì)應(yìng)的(de)房(fáng)間(jiān)号(hào)。在(zài)这(zhè)種(zhǒng)計(jì)數模式下(xià),如(rú)果(guǒ)想(xiǎng)要(yào)找(zhǎo)到(dào)七(qī)层6号(hào)房(fáng)間(jiān),不(bù)需要(yào)多(duō)做思(sī)考就(jiù)可(kě)以(yǐ)一(yī)下(xià)就(jiù)定(dìng)位到(dào)正(zhèng)确位置。

图(tú)3.5-8两(liǎng)種(zhǒng)門(mén)牌(pái)号(hào)複合計(jì)數模式

通(tòng)过(guò)案(àn)例可(kě)以(yǐ)确定(dìng)两(liǎng)種(zhǒng)計(jì)數器複合計(jì)數才是(shì)最(zuì)簡單的(de)計(jì)數模式,因(yīn)此(cǐ)本(běn)設計(jì)使用(yòng)一(yī)个(gè)計(jì)數1秒(miǎo)的(de)計(jì)數器cnt0,一(yī)个(gè)表(biǎo)示第(dì)幾(jǐ)个(gè)1秒(miǎo)的(de)計(jì)數器cnt1。这(zhè)樣(yàng)如(rú)果(guǒ)後(hòu)續遇到(dào)問(wèn)題(tí),也(yě)可(kě)以(yǐ)快(kuài)速的(de)定(dìng)位到(dào)相應(yìng)的(de)位置,避免了(le)很多(duō)麻(má)煩。

此(cǐ)外(wài),在(zài)以(yǐ)上(shàng)門(mén)牌(pái)号(hào)計(jì)數案(àn)例中(zhōng),如(rú)果(guǒ)想(xiǎng)要(yào)尋找(zhǎo)每一(yī)层的(de)固定(dìng)位置房(fáng)間(jiān),按照两(liǎng)種(zhǒng)計(jì)數單位複合的(de)模式,用(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。通(tòng)过(guò)这(zhè)種(zhǒng)方(fāng)法可(kě)以(yǐ)通(tòng)过(guò)cnt0和(hé)cnt1来(lái)找(zhǎo)到(dào)任何一(yī)个(gè)房(fáng)間(jiān)。如(rú)果(guǒ)想(xiǎng)找(zhǎo)同(tóng)一(yī)个(gè)位置的(de)房(fáng)間(jiān),也(yě)可(kě)以(yǐ)直(zhí)接用(yòng)cnt0来(lái)表(biǎo)示。例如(rú)cnt0==4可(kě)以(yǐ)統一(yī)表(biǎo)示每层樓的(de)四(sì)号(hào)房(fáng)間(jiān)。但如(rú)果(guǒ)只(zhī)有(yǒu)房(fáng)間(jiān)号(hào)这(zhè)一(yī)計(jì)數模式而(ér)沒(méi)有(yǒu)樓层的(de)話(huà),想(xiǎng)表(biǎo)示每层樓的(de)四(sì)号(hào)房(fáng)間(jiān),則表(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)。

可(kě)見(jiàn)两(liǎng)个(gè)計(jì)數器複合計(jì)數的(de)方(fāng)式并不(bù)是(shì)多(duō)此(cǐ)一(yī)舉,反(fǎn)而(ér)是(shì)最(zuì)适合本(běn)設計(jì)的(de)計(jì)數器方(fāng)案(àn)。不(bù)論是(shì)簡單設計(jì)還(huán)是(shì)複雜設計(jì),至(zhì)簡設計(jì)法都会(huì)全(quán)面(miàn)的(de)考慮設計(jì)需求,在(zài)每一(yī)个(gè)环(huán)节(jié)都会(huì)采用(yòng)最(zuì)适合的(de)設計(jì)方(fāng)案(àn),盡量(liàng)为(wèi)後(hòu)續的(de)步驟減少(shǎo)不(bù)必要(yào)的(de)麻(má)煩。
确定(dìng)了(le)两(liǎng)个(gè)計(jì)數器後(hòu),来(lái)依次(cì)讨論每个(gè)計(jì)數器的(de)实現(xiàn)。至(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)相應(yìng)邏輯,就(jiù)能(néng)完成(chéng)計(jì)數器代(dài)碼設計(jì)。

首先(xiān)讨論計(jì)數器cnt0的(de)加1条(tiáo)件(jiàn):由(yóu)于(yú)該計(jì)數器在(zài)不(bù)停地(dì)計(jì)數,永不(bù)停止,因(yīn)此(cǐ)可(kě)以(yǐ)認为(wèi)其加1条(tiáo)件(jiàn)一(yī)直(zhí)有(yǒu)效,即assign add_cnt0==1。此(cǐ)处可(kě)能(néng)有(yǒu)同(tóng)学存在(zài)疑惑加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),即assign add_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)。

接着讨論計(jì)數器cnt0的(de)計(jì)數數量(liàng):本(běn)工程的(de)工作时(shí)鐘(zhōng)是(shì)50MHz,即周期(qī)为(wèi)20ns,當計(jì)數器計(jì)數到(dào)第(dì)1_000_000_000/20=50_000_000个(gè)时(shí),就(jiù)代(dài)表(biǎo)1秒(miǎo)时(shí)間(jiān)到(dào)了(le)。因(yīn)此(cǐ)因(yīn)此(cǐ)cnt0的(de)計(jì)數數量(liàng)为(wèi)50_000_000

确定(dìng)好(hǎo)加1条(tiáo)件(jiàn)和(hé)計(jì)數數量(liàng)後(hòu)開(kāi)始進(jìn)行代(dài)碼編写。相信(xìn)各(gè)位往常都是(shì)一(yī)行行輸入(rù)代(dài)碼,但是(shì)至(zhì)簡設計(jì)法有(yǒu)一(yī)个(gè)小技巧,可(kě)以(yǐ)为(wèi)同(tóng)学们(men)編写代(dài)碼省(shěng)去(qù)不(bù)少(shǎo)时(shí)間(jiān),并且一(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)了(le)模板,進(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ù)可(kě)以(yǐ)用(yòng)模板編写計(jì)數器代(dài)碼,感(gǎn)受一(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.5-9至(zhì)簡設計(jì)法調用(yòng)計(jì)數器代(dài)碼模板

補充完整後(hòu)得到(dào)計(jì)數器cnt0的(de)代(dài)碼如(rú)下(xià)。
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
always  @(posedge clk or negedge rst_n)begin
  
    if(!rst_n)begin
  
        cnt0 <= 0;
  
    end
  
    else if(add_cnt0)begin
  
        if(end_cnt0)
  
            cnt0 <= 0;
  
        else
  
            cnt0 <= cnt0 + 1;
  
    end
  
end
  
  
assign  add_cnt0 = 1 ;
  
assign  end_cnt0 = add_cnt0 && cnt0==50_000_000-1 ;
下(xià)面(miàn)来(lái)設計(jì)記(jì)录(lù)1秒(miǎo)次(cì)數的(de)計(jì)數器cnt1。該計(jì)數器表(biǎo)示數到(dào)第(dì)幾(jǐ)个(gè)1秒(miǎo),即每完成(chéng)1秒(miǎo)計(jì)數後(hòu)就(jiù)加1,因(yīn)此(cǐ)其加1条(tiáo)件(jiàn)为(wèi)end_cnt0。該計(jì)數器一(yī)共(gòng)要(yào)數8次(cì)進(jìn)入(rù)下(xià)一(yī)个(gè)循环(huán),即計(jì)數數量(liàng)为(wèi)8。繼續調用(yòng)至(zhì)簡設計(jì)法模板,在(zài)命令模式下(xià)輸入(rù)“:Mdyjsq”,點(diǎn)擊回(huí)車後(hòu)調出(chū)对(duì)應(yìng)模板,将“add_cnt1”和(hé)“end_cnt1”補充完整,得到(dào)該計(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
  
        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==8-1 ;

确定(dìng)完两(liǎng)个(gè)計(jì)數器後(hòu)来(lái)思(sī)考輸出(chū)信(xìn)号(hào)seg_sel的(de)變(biàn)化(huà)。根(gēn)據(jù)信(xìn)号(hào)波(bō)形图(tú)得知,第(dì)1秒(miǎo)时(shí)FPGA輸出(chū)值为(wèi)8’hfe;第(dì)2秒(miǎo)时(shí)輸出(chū)值为(wèi)8’hfd;以(yǐ)此(cǐ)類(lèi)推,在(zài)第(dì)8秒(miǎo)时(shí)輸出(chū)值为(wèi)8’h7f。設計(jì)中(zhōng)使用(yòng)cnt1来(lái)表(biǎo)示第(dì)幾(jǐ)个(gè)1秒(miǎo),即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==7时(shí)輸出(chū)值为(wèi)8’h7f。将其翻譯成(chéng)代(dài)碼,調用(yòng)至(zhì)簡設計(jì)法模板,在(zài)編輯模式下(xià)輸入(rù)“Shixu2”,然後(hòu)補充完整,得到(dào)信(xìn)号(hào)seg_sel代(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  @(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
  
    else if(cnt1==6) begin
  
seg_sel<=  8'hbf;
  
    end
  
    else if(cnt1==7) begin
  
seg_sel<=  8'h7f;
  
    end
  
end

观察補充完整的(de)代(dài)碼可(kě)以(yǐ)發(fà)現(xiàn):代(dài)碼表(biǎo)示與(yǔ)文(wén)字(zì)描述基本(běn)上(shàng)是(shì)一(yī)模一(yī)樣(yàng)的(de),这(zhè)其实是(shì)體(tǐ)現(xiàn)了(le)verilog“硬(yìng)件(jiàn)描述語(yǔ)言”的(de)特(tè)點(diǎn)。上(shàng)文(wén)所(suǒ)列代(dài)碼可(kě)以(yǐ)正(zhèng)确实現(xiàn)seg_sel功能(néng),且從实現(xiàn)角(jiǎo)度(dù)和(hé)資源角(jiǎo)度(dù)来(lái)说(shuō)都足以(yǐ)完成(chéng)設計(jì),但依然可(kě)以(yǐ)将其進(jìn)行進(jìn)一(yī)步的(de)概括從而(ér)得到(dào)簡化(huà)版的(de)代(dài)碼。

根(gēn)據(jù)設計(jì)目标(biāo)可(kě)知,第(dì)1个(gè)數碼管(guǎn)顯示“0”时(shí),seg_sel輸出(chū)为(wèi)b8’b1111_1110;第(dì)2个(gè)數碼管(guǎn)顯示“1”时(shí),seg_sel輸出(chū)为(wèi)b8’b1111_1101;第(dì)3个(gè)數碼管(guǎn)顯示“2”时(shí),seg_sel輸出(chū)为(wèi)b8’b1111_1011;第(dì)4个(gè)數碼顯示“3”时(shí),seg_sel輸出(chū)为(wèi)b8’b1111_0111;第(dì)5个(gè)數碼管(guǎn)顯示“4”时(shí),seg_sel輸出(chū)为(wèi)b8’b1110_1111;第(dì)6个(gè)數碼管(guǎn)顯示“5”时(shí),seg_sel輸出(chū)为(wèi)b8’b1101_1111;第(dì)7个(gè)數碼管(guǎn)顯示“6”时(shí),seg_sel輸出(chū)为(wèi)b8’b1011_1111;第(dì)8个(gè)數碼管(guǎn)顯示“7”时(shí),seg_sel輸出(chū)为(wèi)b8’b0111_1111;根(gēn)據(jù)規律可(kě)以(yǐ)發(fà)現(xiàn)每个(gè)控制數碼管(guǎn)的(de)閃亮(liàng)信(xìn)号(hào),其对(duì)應(yìng)數字(zì)“0”都依次(cì)向(xiàng)左(zuǒ)移動(dòng)1位。在(zài)設計(jì)中(zhōng)可(kě)以(yǐ)統一(yī)設为(wèi)将8’b1向(xiàng)左(zuǒ)移位,将其取(qǔ)反(fǎn)後(hòu)的(de)值再賦給(gěi)seg_sel,可(kě)以(yǐ)观察出(chū)每次(cì)左(zuǒ)移的(de)位數和(hé)cnt1的(de)值相等。因(yīn)此(cǐ)可(kě)得以(yǐ)下(xià)代(dài)碼,其中(zhōng)的(de)第(dì)6行即表(biǎo)示先(xiān)将8’b1向(xiàng)左(zuǒ)移位,再取(qǔ)反(fǎn),将該值賦給(gěi)seg_sel

也(yě)可(kě)以(yǐ)带(dài)入(rù)數值計(jì)算一(yī)下(xià),假如(rú)此(cǐ)刻cnt1等于(yú)0,則8’b1<<0的(de)結果(guǒ)是(shì)8’b0000_0001,取(qǔ)反(fǎn)的(de)值为(wèi)8’hfeb8’b1111_1110;假如(rú)此(cǐ)刻cnt1等于(yú)3,則8’b1<<3的(de)結果(guǒ)为(wèi)8’b000_1000,取(qǔ)反(fǎn)後(hòu)的(de)結果(guǒ)为(wèi)8’hf78’b1111_0111。两(liǎng)段(duàn)代(dài)碼的(de)对(duì)比結果(guǒ)相同(tóng),但是(shì)这(zhè)種(zhǒng)方(fāng)法下(xià)代(dài)碼經(jīng)过(guò)簡化(huà),更(gèng)加清(qīng)晰。这(zhè)里(lǐ)同(tóng)樣(yàng)可(kě)以(yǐ)在(zài)編輯模式下(xià)輸入(rù)“Shixu2”,調出(chū)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(dài)碼如(rú)下(xià):
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<<cnt1) ;
  
    end
  
end

最(zuì)後(hòu)来(lái)思(sī)考輸出(chū)信(xìn)号(hào)seg_ment的(de)變(biàn)化(huà)。分(fēn)析波(bō)形图(tú)可(kě)知,在(zài)第(dì)1次(cì)顯示时(shí),其輸出(chū)值为(wèi)7’h01;在(zài)第(dì)2次(cì)顯示时(shí),其輸出(chū)值为(wèi)7’h4f;以(yǐ)此(cǐ)類(lèi)推,在(zài)第(dì)8次(cì)顯示时(shí),其輸出(chū)值为(wèi)7’h0f。用(yòng)計(jì)數器cnt1表(biǎo)示第(dì)幾(jǐ)次(cì)顯示,也(yě)就(jiù)是(shì)说(shuō):當cnt1==0时(shí)seg_ment輸出(chū)值为(wèi)7’h01;在(zài)cnt1==1时(shí)輸出(chū)值为(wèi)7’h4f;以(yǐ)此(cǐ)類(lèi)推,在(zài)cnt1==7时(shí)輸出(chū)值为(wèi)7’h0f。将其翻譯成(chéng)代(dài)碼,在(zài)編輯模式下(xià)“Shixu2”,調出(chū)至(zhì)簡設計(jì)法模板,補充完整後(hòu)的(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  @(posedge clk or negedge rst_n)begin
  
    if(rst_n==1'b0)begin
  
seg_ment<=  7'h01;
  
    end
  
    else if(cnt1==0) begin
  
seg_ment<=  7'h01;
  
    end
  
    else if(cnt1==1) begin
  
seg_ment<=  7'h4f;
  
    end
  
    else if(cnt1==2) begin
  
seg_ment<=  7'h12;
  
    end
  
    else if(cnt1==3) begin
  
seg_ment<=  7'h06;
  
    end
  
    else if(cnt1==4) begin
  
seg_ment<=  7'h4c;
  
    end
  
    else if(cnt1==5) begin
  
seg_ment<=  7'h24;
  
    end
  
    else if(cnt1==6) begin
  
seg_ment<=  7'h20;
  
    end
  
    else if(cnt1==7) begin
  
seg_ment<=  7'h0f;
  
    end
  
end

上(shàng)面(miàn)的(de)代(dài)碼可(kě)以(yǐ)正(zhèng)确实現(xiàn)seg_ment的(de)功能(néng),对(duì)于(yú)本(běn)設計(jì)来(lái)说(shuō)已經(jīng)足够。但進(jìn)一(yī)步思(sī)考可(kě)以(yǐ)發(fà)現(xiàn):該代(dài)碼实現(xiàn)了(le)類(lèi)似譯碼的(de)功能(néng),将數字(zì)設成(chéng)數碼管(guǎn)顯示的(de)值,代(dài)碼中(zhōng)只(zhī)对(duì)0~7進(jìn)行譯碼。为(wèi)了(le)方(fāng)便日(rì)後(hòu)設計(jì),在(zài)这(zhè)里(lǐ)設計(jì)一(yī)个(gè)通(tòng)用(yòng)的(de)譯碼模块(kuài),将0~9都進(jìn)行譯碼。这(zhè)樣(yàng)的(de)話(huà)今後(hòu)遇到(dào)類(lèi)似的(de)工程,就(jiù)可(kě)以(yǐ)随时(shí)調用(yòng)这(zhè)一(yī)代(dài)碼,譯碼模块(kuài)代(dài)碼如(rú)下(xià)所(suǒ)示:
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  @(posedge clk or negedge rst_n)begin
  
    if(rst_n==1'b0)begin
  
seg_ment<=  7'h01;
  
    end
  
    else if(data==0) begin
  
seg_ment<=  7'h01;
  
    end
  
    else if(data==1) begin
  
seg_ment<=  7'h4f;
  
    end
  
    else if(data==2) begin
  
seg_ment<=  7'h12;
  
    end
  
    else if(data==3) begin
  
seg_ment<=  7'h06;
  
    end
  
    else if(data==4) begin
  
seg_ment<=  7'h4c;
  
    end
  
    else if(data==5) begin
  
seg_ment<=  7'h24;
  
    end
  
    else if(data==6) begin
  
seg_ment<=  7'h20;
  
    end
  
    else if(data==7) begin
  
seg_ment<=  7'h0f;
  
    end
  
    else if(data==8) begin
  
seg_ment<=  7'h00;
  
    end
  
    else if(data==9) begin
  
seg_ment<=  7'h04;
  
    end
  
end

在(zài)本(běn)設計(jì)中(zhōng)只(zhī)要(yào)控制data信(xìn)号(hào),即可(kě)实現(xiàn)在(zài)數碼管(guǎn)顯示相應(yìng)數字(zì)。前(qián)文(wén)可(kě)知:當cnt1=0,則數碼管(guǎn)会(huì)顯示0。當cnt1=1,則數碼管(guǎn)会(huì)顯示1。因(yīn)此(cǐ)data信(xìn)号(hào)代(dài)碼如(rú)下(xià):
1
assign  data = cnt1 ;
在(zài)代(dài)碼的(de)最(zuì)後(hòu)一(yī)行写下(xià)endmodule
1
endmodule
至(zhì)此(cǐ),主(zhǔ)體(tǐ)程序已經(jīng)完成(chéng)。

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

接下(xià)来(lái)要(yào)将module補充完整,首先(xiān)来(lái)定(dìng)義信(xìn)号(hào)類(lèi)型。再次(cì)強(qiáng)調,在(zài)進(jìn)行reg和(hé)wire的(de)判斷时(shí),總(zǒng)会(huì)有(yǒu)多(duō)餘的(de)聯想(xiǎng),比如(rú)認为(wèi)reg是(shì)寄存器,wire是(shì)線(xiàn);或(huò)者(zhě)認为(wèi)reg的(de)会(huì)綜合成(chéng)寄存器,wire不(bù)会(huì)綜合成(chéng)寄存器。但是(shì)这(zhè)些其实和(hé)reg型還(huán)是(shì)wire型都并无關(guān)系(xì),在(zài)信(xìn)号(hào)類(lèi)型的(de)判斷时(shí)不(bù)需要(yào)做任何的(de)聯想(xiǎng),只(zhī)要(yào)記(jì)住一(yī)个(gè)規則“用(yòng)always实現(xiàn)的(de)是(shì)reg型,其他(tā)都是(shì)wire型”就(jiù)可(kě)以(yǐ)了(le)。

進(jìn)行類(lèi)型定(dìng)義时(shí),需要(yào)設定(dìng)信(xìn)号(hào)的(de)位宽(kuān)。至(zhì)簡設計(jì)法在(zài)这(zhè)里(lǐ)们(men)分(fēn)享一(yī)个(gè)非(fēi)常实用(yòng)的(de)位宽(kuān)獲取(qǔ)技巧:打(dǎ)開(kāi)計(jì)算器,點(diǎn)擊“查看(kàn)”,選擇“程序員”模式,在(zài)“十(shí)進(jìn)制”下(xià)将信(xìn)号(hào)值輸入(rù)進(jìn)去(qù),就(jiù)会(huì)獲得对(duì)應(yìng)的(de)信(xìn)号(hào)位宽(kuān),如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)3.5-10通(tòng)过(guò)計(jì)算器獲取(qǔ)信(xìn)号(hào)位宽(kuān)

cnt0是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)reg。其計(jì)數的(de)最(zuì)大值为(wèi)50_000_000,通(tòng)过(guò)計(jì)算器可(kě)以(yǐ)得知需要(yào)用(yòng)26根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)26位。add_cnt0和(hé)end_cnt0都是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。其值是(shì)0或(huò)1,用(yòng)1个(gè)線(xiàn)表(biǎo)示即可(kě)。打(dǎ)開(kāi)GVIM,在(zài)編輯模式下(xià)輸入(rù)“Wire1”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(dài)碼表(biǎo)示如(rú)下(xià):
1
  
2
  
3
reg    [25:0]            cnt0        ;
  
wire                     add_cnt0    ;
  
wire                     end_cnt0    ;

同(tóng)理,cnt1是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)reg。其計(jì)數的(de)最(zuì)大值为(wèi)7,需要(yào)用(yòng)3根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)3位。編輯模式下(xià)輸入(rù)“Reg3”調用(yòng)至(zhì)簡設計(jì)法模板并補充完整;
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ě)1,用(yòng)1根(gēn)線(xiàn)表(biǎo)示即可(kě)。編輯模式下(xià)輸入(rù)“Wire1”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(dài)碼表(biǎo)示如(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ào)用(yòng)8根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)为(wèi)8。編輯模式下(xià)輸入(rù)“Reg8”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(dài)碼表(biǎo)示如(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ào)用(yòng)7根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)为(wèi)7,代(dài)碼表(biǎo)示如(rú)下(xià):
1
reg    [ 6:0]            segment       ;

如(rú)果(guǒ)使用(yòng)譯碼電(diàn)路(lù)則会(huì)用(yòng)到(dào)data信(xìn)号(hào)。該信(xìn)号(hào)是(shì)用(yòng)assign設計(jì)的(de),所(suǒ)以(yǐ)類(lèi)型为(wèi)wire,其最(zuì)大值为(wèi)9,位宽(kuān)为(wèi)4。編輯模式下(xià)輸入(rù)“Wire4”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(dài)碼表(biǎo)示如(rú)下(xià):
1
wire  [3:0]    data     ;

至(zhì)此(cǐ),整个(gè)代(dài)碼的(de)設計(jì)工作已經(jīng)完成(chéng)。完整版的(de)工程代(dài)碼如(rú)下(xià):
1
module  my_seg(
  
clk  ,
  
rst_n  ,
  
seg_sel  ,
  
seg_ment
  
);
  
  
input         clk   ;
  
input         rst_n  ;
  
output[7:0]   seg_sel   ;
  
output[6:0]   seg_ment ;
  
  
reg  [25:0]    cnt0     ;
  
wire          add_cnt0 ;
  
wire          end_cnt0 ;
  
reg  [2:0]     cnt1     ;
  
wire          add_cnt1 ;
  
wire          end_cnt1 ;
  
reg  [ 7:0]    seg_sel  ;
  
reg  [ 6:0]    seg_ment ;
  
  
  
always  @(posedge clk or negedge rst_n)begin
  
    if(!rst_n)begin
  
        cnt0 <= 0;
  
    end
  
    else if(add_cnt0)begin
  
        if(end_cnt0)
  
            cnt0 <= 0;
  
        else
  
            cnt0 <= cnt0 + 1;
  
    end
  
end
  
  
assign  add_cnt0 = 1;
  
assign  end_cnt0 = add_cnt0 && cnt0==50_000 -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==8 -1 ;
  
  
  
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
  
    else if(cnt1==6)begin
  
seg_sel<=  8'hbf;
  
    end
  
     else if(cnt1==7)begin
  
seg_sel<=  8'h7f;
  
    end
  
end
  
  
  
always  @(posedge clk or negedge rst_n)begin
  
    if(rst_n==1'b0)begin
  
seg_ment<=  7'h01;
  
    end
  
    else if(cnt1==0)begin
  
seg_ment<=  7'h01;
  
    end
  
    else if(cnt1==1)begin
  
seg_ment<=  7'h4f;
  
    end
  
    else if(cnt1==2)begin
  
seg_ment<=  7'h12;
  
    end
  
    else if(cnt1==3)begin
  
seg_ment<=  7'h06;
  
    end
  
    else if(cnt1==4)begin
  
seg_ment<=  7'h4c;
  
    end
  
    else if(cnt1==5)begin
  
seg_ment<=  7'h24;
  
    end
  
    else if(cnt1==6)begin
  
seg_ment<=  7'h20;
  
    end
  
    else if(cnt1==7)begin
  
seg_ment<=  7'h0f;
  
    end
  
end
  
  
  
endmodule
第(dì)4节(jié) 綜合與(yǔ)上(shàng)板

4.1 新建工程

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

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

此(cǐ)时(shí)会(huì)出(chū)現(xiàn)工程文(wén)件(jiàn)夾、工程名、頂层模块(kuài)名設置界面(miàn),如(rú)图(tú)3.5-13。設置目录(lù)为(wèi):D:/mdy_book/my_seg,工程名和(hé)頂层名为(wèi)my_seg。再次(cì)強(qiáng)調,为(wèi)了(le)避免初学者(zhě)在(zài)後(hòu)續操作中(zhōng)出(chū)現(xiàn)報錯情(qíng)況,強(qiáng)烈建議設置的(de)文(wén)件(jiàn)目录(lù)和(hé)工程名稱與(yǔ)本(běn)書(shū)保持(chí)一(yī)致(zhì)。設置完成(chéng)後(hòu)點(diǎn)擊“Next”。
图(tú)3.5-13QUARTUS新建工程設置名稱

新建工程類(lèi)型設置選擇選擇“Empty project”,如(rú)下(xià)图(tú)所(suǒ)示,然後(hòu)點(diǎn)擊“Next”。
图(tú)3.5-14QUARTUS新建工程類(lèi)型
文(wén)件(jiàn)添加界面(miàn)如(rú)图(tú)3.5- 15所(suǒ)示,點(diǎn)擊右(yòu)側的(de)“Add”按鈕,添加之前(qián)写好(hǎo)的(de)“my_seg.v”文(wén)件(jiàn),可(kě)以(yǐ)看(kàn)到(dào)界面(miàn)下(xià)方(fāng)会(huì)顯示出(chū)文(wén)件(jiàn),随後(hòu)點(diǎn)擊“Next”。
图(tú)3.5-15QUARTUS添加文(wén)件(jiàn)
芯片(piàn)型号(hào)選擇界面(miàn)如(rú)图(tú)3.5- 16所(suǒ)示,選擇“Cyclone E”,在(zài)芯片(piàn)型号(hào)選擇处選擇“EP4CE15F23C8”,點(diǎn)擊“Next”。
图(tú)3.5-16QUARTUS選擇芯片(piàn)型号(hào)
图(tú)3.5- 17为(wèi)QUARTUS設置工具界面(miàn),不(bù)必做任何修改,直(zhí)接點(diǎn)擊“Next”。
图(tú)3.5-17QUARTUS設置工具界面(miàn)
新建工程的(de)彙總(zǒng)情(qíng)況如(rú)下(xià)图(tú)所(suǒ)示,點(diǎn)擊“Finish”後(hòu)完成(chéng)新建工程。
图(tú)3.5-18QUARTUS新建工程彙總(zǒng)界面(miàn)
4.2 綜合

新建工程步驟完成(chéng)後(hòu),就(jiù)会(huì)出(chū)現(xiàn)如(rú)下(xià)所(suǒ)示的(de)QUARTUS界面(miàn)。
图(tú)3.5-19QUARTUS新建工程後(hòu)界面(miàn)
點(diǎn)擊編譯按鈕,可(kě)以(yǐ)对(duì)整个(gè)工程進(jìn)行編譯。編譯成(chéng)功的(de)界面(miàn)如(rú)图(tú)3.5- 20所(suǒ)示。
图(tú)3.5-20QUARTUS編譯後(hòu)界面(miàn)
4.3 配置管(guǎn)脚

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

在(zài)配置窗(chuāng)口(kǒu)最(zuì)下(xià)方(fāng)中(zhōng)的(de)“location”一(yī)列,參考信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì),按照表(biǎo)3.5- 3中(zhōng)最(zuì)右(yòu)两(liǎng)列配置好(hǎo)FPGA管(guǎn)脚。配置管(guǎn)理来(lái)源參見(jiàn)管(guǎn)脚配置环(huán)节(jié),最(zuì)終(zhōng)配置結果(guǒ)如(rú)图(tú)3.5- 22。配置完成(chéng)後(hòu),關(guān)閉“PinPlanner”,软(ruǎn)件(jiàn)自(zì)動(dòng)会(huì)保存管(guǎn)脚配置信(xìn)息。
表(biǎo)3.5 - 3信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)
  
器件(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

图(tú)3.5-22QUARTUS配置管(guǎ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ú)下(xià)图(tú)所(suǒ)示。
图(tú)3.5-23QUARTUS編譯選項

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

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

打(dǎ)開(kāi)QUARTUS界面(miàn),單擊界面(miàn)中(zhōng)的(de)“ ”会(huì)弹出(chū)配置界面(miàn)。在(zài)界面(miàn)中(zhōng)點(diǎn)擊“addfile”添加“.sof”文(wén)件(jiàn)後(hòu)點(diǎn)擊“Start”,会(huì)在(zài)“Progress”出(chū)現(xiàn)顯示進(jìn)度(dù)。
图(tú)3.5-26QUARTUS界面(miàn)
當進(jìn)度(dù)条(tiáo)到(dào)100%时(shí)提(tí)示成(chéng)功,如(rú)下(xià)图(tú)所(suǒ)示,此(cǐ)时(shí)即可(kě)在(zài)開(kāi)發(fà)板上(shàng)观察相應(yìng)的(de)現(xiàn)象(xiàng)。
图(tú)3.5-27QUARTUS下(xià)载程序界面(miàn)
如(rú)果(guǒ)操作沒(méi)有(yǒu)錯誤,此(cǐ)时(shí)可(kě)以(yǐ)观察到(dào)開(kāi)發(fà)板上(shàng)數碼管(guǎn)的(de)數字(zì)每一(yī)秒(miǎo)增加一(yī)个(gè),并且按照從左(zuǒ)到(dào)右(yòu)數碼管(guǎn)的(de)排列依次(cì)顯示。如(rú)果(guǒ)顯示方(fāng)向(xiàng)或(huò)者(zhě)时(shí)間(jiān)錯誤,就(jiù)需要(yào)從头(tóu)開(kāi)始進(jìn)行錯誤排查。如(rú)果(guǒ)无法自(zì)己完成(chéng)錯誤排查的(de)話(huà),可(kě)以(yǐ)重(zhòng)新按照步驟操作一(yī)遍(biàn),相信(xìn)一(yī)定(dìng)可(kě)以(yǐ)达(dá)到(dào)想(xiǎng)要(yào)的(de)效果(guǒ)。

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

这(zhè)里(lǐ)依旧(jiù)会(huì)分(fēn)享簡化(huà)版的(de)步驟,方(fāng)便掌握基礎原理後(hòu)進(jìn)行反(fǎn)複操作複習。

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

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


新建目录(lù):D:mdy_bookmy_seg。在(zài)該目录(lù)中(zhōng),新建一(yī)个(gè)名为(wèi)my_seg.v的(de)文(wén)件(jiàn),用(yòng)GVIM打(dǎ)開(kāi)後(hòu)開(kāi)始編写代(dài)碼。
确定(dìng)頂层信(xìn)号(hào)。工程信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)如(rú)下(xià)表(biǎo)所(suǒ)示:
表(biǎo)3.5 - 3信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)
  
器件(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ū)頂层信(xìn)号(hào)代(dài)碼:
1
  
2
  
3
  
4
  
5
  
6
module  my_seg(
  
rst_n  ,
  
clk  ,
  
seg_sel  ,
  
                 segment         
  
             );
聲明(míng)輸入(rù)輸出(chū)屬性(xìng):
1
  
2
  
3
  
4
input                    clk         ;
  
input                    rst_n           ;
  
output [ 7:0]            seg_sel  ;
  
output [ 6:0]            segment       ;
5.1.2信(xìn)号(hào)設計(jì)

首先(xiān)進(jìn)行架構設計(jì),分(fēn)析設計(jì)目标(biāo)得出(chū)波(bō)形示意(yì)图(tú)如(rú)下(xià)所(suǒ)示:
图(tú)3.5-6數碼管(guǎn)動(dòng)态掃描实現(xiàn)架構
設計(jì)計(jì)數器架構,表(biǎo)示1秒(miǎo)計(jì)數器cnt0的(de)代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
always @(posedge clk or negedge  rst_n)begin
  
    if(!rst_n)begin
  
        cnt0 <= 0;
  
    end
  
    else if(add_cnt0)begin
  
        if(end_cnt0)
  
            cnt0 <= 0;
  
        else
  
            cnt0 <= cnt0 + 1;
  
    end
  
end
  
  
assign add_cnt0 = 1 ;
  
assign end_cnt0 =  add_cnt0 && cnt0==50_000_000-1 ;
表(biǎo)示第(dì)幾(jǐ)个(gè)1秒(miǎo)的(de)計(jì)數器cnt1代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
always @(posedge clk or negedge  rst_n)begin
  
    if(!rst_n)begin
  
        cnt1 <= 0;
  
    end
  
    else if(add_cnt1)begin
  
        if(end_cnt1)
  
            cnt1 <= 0;
  
        else
  
            cnt1 <= cnt1 + 1;
  
    end
  
end
  
  
assign add_cnt1 =  end_cnt0;
  
assign end_cnt1 =  add_cnt1 && cnt1==8-1 ;
設計(jì)輸出(chū)信(xìn)号(hào)seg_sel
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<<cnt1) ;
  
    end
  
end
設計(jì)輸出(chū)信(xìn)号(hào)seg_ment
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  @(posedge clk or negedge rst_n)begin
  
    if(rst_n==1'b0)begin
  
seg_ment<= 7'h01;
  
    end
  
    else if(cnt1==0) begin
  
seg_ment<= 7'h01;
  
    end
  
    else if(cnt1==1) begin
  
seg_ment<= 7'h4f;
  
    end
  
    else if(cnt1==2) begin
  
seg_ment<= 7'h12;
  
    end
  
    else if(cnt1==3) begin
  
seg_ment<= 7'h06;
  
    end
  
    else if(cnt1==4) begin
  
seg_ment<= 7'h4c;
  
    end
  
    else if(cnt1==5) begin
  
seg_ment<= 7'h24;
  
    end
  
    else if(cnt1==6) begin
  
seg_ment<= 7'h20;
  
    end
  
    else if(cnt1==7) begin
  
seg_ment<= 7'h0f;
  
    end
  
end
data代(dài)碼表(biǎo)示如(rú)下(xià):
1
assign data = cnt1 ;
在(zài)代(dài)碼的(de)最(zuì)後(hòu)一(yī)行写下(xià)endmodule
1
endmodule
主(zhǔ)體(tǐ)程序完成(chéng)後(hòu),下(xià)面(miàn)将module補充完整。

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

定(dìng)義信(xìn)号(hào)類(lèi)型。cnt0add_cnt0 和(hé) end_cnt0的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
  
2
  
3
reg    [25:0]            cnt0        ;
  
wire                     add_cnt0    ;
  
wire                     end_cnt0    ;
cnt1add_cnt1和(hé)end_cnt1的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
  
2
  
3
reg    [ 2:0]            cnt1        ;
  
wire                     add_cnt1    ;
  
wire                     end_cnt1    ;
seg_sel的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
reg    [ 7:0]            seg_sel  ;
seg_ ment的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
reg    [ 6:0]            segment       ;
data的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
wire  [3:0]    data     ;
至(zhì)此(cǐ),整个(gè)工程的(de)代(dài)碼的(de)設計(jì)工作已經(jīng)完成(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)软(ruǎn)件(jiàn)Quartus Ⅱ,點(diǎn)擊“File”下(xià)拉列表(biǎo)中(zhōng)的(de)New ProjectWzard...新建工程選項。
图(tú)3.5-11Quartus新建工程
直(zhí)接點(diǎn)擊“Next”。
图(tú)3.5-12Quartus新建工程介紹

此(cǐ)时(shí)会(huì)出(chū)現(xiàn)是(shì)工程文(wén)件(jiàn)夾、工程名、頂层模块(kuài)名設置界面(miàn),設置目录(lù)为(wèi):D:/mdy_book/my_seg,工程名和(hé)頂层名为(wèi)my_seg,完成(chéng)設置後(hòu)點(diǎn)擊“Next”。
图(tú)3.5-13QUARTUS新建工程設置名稱
選擇“Empty project”後(hòu)點(diǎn)擊“Next”。
图(tú)3.5-14QUARTUS新建工程類(lèi)型
點(diǎn)擊右(yòu)側的(de)“Add”按鈕,選擇“my_seg.v”文(wén)件(jiàn),添加文(wén)件(jiàn)後(hòu)點(diǎn)擊“Next”。
图(tú)3.5-15QUARTUS添加文(wén)件(jiàn)

对(duì)芯片(piàn)型号(hào)進(jìn)行選擇:“Devicefamily”選項下(xià)選擇“Cyclone E”,“Available devices”選項下(xià)選擇“EP4CE15F23C8”,随後(hòu)點(diǎn)擊“Next”。
图(tú)3.5-16QUARTUS選擇芯片(piàn)型号(hào)

直(zhí)接點(diǎn)擊“Next”。
图(tú)3.5-17QUARTUS設置工具界面(miàn)
點(diǎn)擊“Finish”,完成(chéng)新建工程。
图(tú)3.5-18QUARTUS新建工程彙總(zǒng)界面(miàn)
5.2.2綜合

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

在(zài)菜單欄點(diǎn)擊“Assignments”後(hòu)點(diǎn)擊“Pin Planner”,此(cǐ)时(shí)会(huì)弹出(chū)配置管(guǎn)脚的(de)窗(chuāng)口(kǒu)。
图(tú)3.5-21QUARTUS配置管(guǎn)脚選項
在(zài)配置窗(chuāng)口(kǒu)“location”根(gēn)據(jù)信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)配置管(guǎn)脚,配置完成(chéng)關(guān)閉“Pin Planner”即可(kě)自(zì)動(dòng)保存配置信(xìn)息。
图(tú)3.5-22QUARTUS配置管(guǎn)脚
5.2.4再次(cì)綜合

打(dǎ)開(kāi)“QUARTUS”软(ruǎn)件(jiàn),在(zài)菜單欄中(zhōng)選擇“Processing”,點(diǎn)擊“StartCompilation”再次(cì)進(jìn)行綜合。
图(tú)3.5-23QUARTUS編譯選項
出(chū)現(xiàn) QUARTUS 編譯成(chéng)功标(biāo)志則表(biǎo)示此(cǐ)次(cì)編譯成(chéng)功。
图(tú)3.5-24QUARTUS編譯成(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.5-25開(kāi)發(fà)板連(lián)接图(tú)
5.2.6上(shàng)板

打(dǎ)開(kāi) QUARTUS 界面(miàn),單擊“ ”图(tú)标(biāo):
图(tú)3.5-26QUARTUS界面(miàn)

點(diǎn)擊“add file”,添加.sof文(wén)件(jiàn),随後(hòu)點(diǎn)擊“Start”。在(zài)“Progress”中(zhōng)会(huì)顯示進(jìn)度(dù),當進(jìn)度(dù)条(tiáo)顯示“100%”表(biǎo)示成(chéng)功,可(kě)在(zài)開(kāi)發(fà)板上(shàng)观察現(xiàn)象(xiàng)。
图(tú)3.5-27QUARTUS下(xià)载程序界面(miàn)
第(dì)6节(jié) 擴展(zhǎn)練習

至(zhì)此(cǐ),數碼管(guǎn)動(dòng)态掃描工程已經(jīng)分(fēn)享完畢,相信(xìn)同(tóng)学们(men)已經(jīng)可(kě)以(yǐ)完全(quán)掌握这(zhè)一(yī)工程。在(zài)掌握工程的(de)基礎上(shàng)可(kě)以(yǐ)多(duō)做一(yī)些思(sī)考,在(zài)工程原理不(bù)變(biàn)的(de)基礎上(shàng)進(jìn)行一(yī)定(dìng)的(de)數據(jù)調整,例如(rú)嘗試改變(biàn)停留时(shí)間(jiān)或(huò)改變(biàn)數碼管(guǎn)的(de)顯示順序,这(zhè)樣(yàng)可(kě)以(yǐ)更(gèng)深刻的(de)掌握案(àn)例。也(yě)欢迎有(yǒu)更(gèng)好(hǎo)思(sī)路(lù)和(hé)想(xiǎng)法的(de)同(tóng)学前(qián)往至(zhì)簡設計(jì)法論壇進(jìn)行讨論。
   拓展(zhǎn)閱读(dú)
⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨