⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ 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.8VGA顯示顔色(sè)--明(míng)德揚科教(minyingyiyuan.com)

發(fà)布(bù)时(shí)間(jiān):2021-08-22   作者(zhě):admin 浏覽量(liàng):
第(dì)三(sān)篇(piān) FPGA至(zhì)簡設計(jì)項目实踐   

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

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

1、至(zhì)簡原理與(yǔ)應(yìng)用(yòng)配套(tào)的(de)案(àn)例和(hé)PPT講解(jiě)
2、本(běn)設計(jì)需要(yào)通(tòng)过(guò)VGA線(xiàn)将顯示器和(hé)開(kāi)發(fà)板進(jìn)行連(lián)接,FPGA在(zài)連(lián)接成(chéng)功後(hòu)産生(shēng)640*480分(fēn)辨率,刷新頻率为(wèi)60Hz的(de)VGA时(shí)序,实現(xiàn)在(zài)屏幕上(shàng)顯示紅(hóng)色(sè)。步驟性(xìng)教学;

3、Altera和(hé)Xilinx入(rù)門(mén)学習例文(wén)檔


      第(dì)八(bā)章(zhāng) VGA顯示顔色(sè)

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

1.1 VGA介紹

Video Graphics ArrayVGA)視頻图(tú)形阵(zhèn)列是(shì)IBM公司在(zài)1987年(nián)随着PS/2一(yī)起推出(chū)的(de)使用(yòng)模拟信(xìn)号(hào)的(de)一(yī)種(zhǒng)視頻傳輸标(biāo)準。其在(zài)當时(shí)具有(yǒu)分(fēn)辨率高(gāo)、顯示速率快(kuài)、顔色(sè)豐富等优點(diǎn),因(yīn)而(ér)在(zài)彩色(sè)顯示器領域得到(dào)了(le)廣泛的(de)應(yìng)用(yòng)。虽然对(duì)于(yú)現(xiàn)今的(de)个(gè)人(rén)電(diàn)腦市(shì)场来(lái)说(shuō)該标(biāo)準已經(jīng)十(shí)分(fēn)过(guò)时(shí),但VGA仍然是(shì)衆多(duō)制造商所(suǒ)共(gòng)同(tóng)支持(chí)的(de)一(yī)个(gè)标(biāo)準。在(zài)加载自(zì)己的(de)独特(tè)驅動(dòng)程序之前(qián),个(gè)人(rén)電(diàn)腦都必須支持(chí)VGA的(de)标(biāo)準。例如(rú),微软(ruǎn)Windows系(xì)列産品的(de)開(kāi)機(jī)画(huà)面(miàn)仍然使用(yòng)VGA顯示模式,这(zhè)也(yě)说(shuō)明(míng)該标(biāo)準在(zài)顯示标(biāo)準中(zhōng)的(de)重(zhòng)要(yào)性(xìng)和(hé)兼容性(xìng)。

目前(qián),VGA技術(shù)主(zhǔ)要(yào)應(yìng)用(yòng)于(yú)基于(yú)VGA顯示卡(kǎ)的(de)計(jì)算機(jī)、笔(bǐ)記(jì)本(běn)電(diàn)腦等設備,而(ér)少(shǎo)用(yòng)于(yú)要(yào)求顯示彩色(sè)高(gāo)分(fēn)辨率图(tú)像又沒(méi)有(yǒu)必要(yào)使用(yòng)計(jì)算機(jī)的(de)設備中(zhōng)。部(bù)分(fēn)嵌入(rù)式的(de)VGA顯示系(xì)統可(kě)以(yǐ)在(zài)不(bù)使用(yòng)VGA顯示卡(kǎ)和(hé)計(jì)算機(jī)的(de)情(qíng)況下(xià)实現(xiàn)VGA图(tú)像的(de)顯示和(hé)控制,該系(xì)統具有(yǒu)成(chéng)本(běn)低、結構簡單、應(yìng)用(yòng)靈活的(de)优點(diǎn),可(kě)廣泛應(yìng)用(yòng)于(yú)超市(shì)、車站、飛機(jī)场等公共(gòng)场所(suǒ)的(de)廣告宣傳和(hé)提(tí)示信(xìn)息顯示,也(yě)可(kě)應(yìng)用(yòng)于(yú)工廠(chǎng)車間(jiān)生(shēng)産过(guò)程中(zhōng)的(de)操作信(xìn)息顯示,還(huán)能(néng)以(yǐ)多(duō)媒體(tǐ)形式應(yìng)用(yòng)于(yú)日(rì)常的(de)生(shēng)活中(zhōng)。

1.2 VGA管(guǎn)脚
VGA接口(kǒu)是(shì)一(yī)種(zhǒng)D型接口(kǒu),采用(yòng)非(fēi)对(duì)稱分(fēn)布(bù)的(de)15pin 連(lián)接方(fāng)式,如(rú)下(xià)图(tú)所(suǒ)示,共(gòng)有(yǒu)15針(zhēn),分(fēn)成(chéng)3排,每排5个(gè)孔。这(zhè)是(shì)顯卡(kǎ)中(zhōng)應(yìng)用(yòng)最(zuì)为(wèi)廣泛的(de)接口(kǒu)類(lèi)型,絕大多(duō)數顯卡(kǎ)都带(dài)有(yǒu)此(cǐ)種(zhǒng)接口(kǒu),可(kě)以(yǐ)傳輸紅(hóng)、綠(lǜ)、藍(lán)模拟信(xìn)号(hào)以(yǐ)及(jí)同(tóng)步信(xìn)号(hào)(水(shuǐ)平和(hé)垂直(zhí)信(xìn)号(hào))
                              
图(tú)3.8-1VGA插針(zhēn)图(tú)

图(tú)3.8-2VGA插座图(tú)

在(zài)VGA接头(tóu)上(shàng)一(yī)般会(huì)156101115等标(biāo)明(míng)每个(gè)接口(kǒu)的(de)編号(hào)。如(rú)果(guǒ)沒(méi)有(yǒu)这(zhè)一(yī)編号(hào)則按照下(xià)图(tú)所(suǒ)示進(jìn)行編号(hào)。VGA接口(kǒu)共(gòng)有(yǒu)15根(gēn)針(zhēn),其对(duì)應(yìng)接口(kǒu)定(dìng)義如(rú)下(xià):
1、紅(hóng)基色(sè) red
2、綠(lǜ)基色(sè) green
3、藍(lán)基色(sè) blue
4、地(dì)址碼 ID Bit(也(yě)有(yǒu)部(bù)分(fēn)是(shì)RES,或(huò)者(zhě)为(wèi)ID2顯示器标(biāo)示位2
5、自(zì)测試 ( 各(gè)家(jiā)定(dìng)義不(bù)同(tóng) )(一(yī)般为(wèi)GND
6、紅(hóng)地(dì)
7、綠(lǜ)地(dì)
8、藍(lán)地(dì)
9、保留 ( 各(gè)家(jiā)定(dìng)義不(bù)同(tóng) )
10、數字(zì)地(dì)
11、地(dì)址碼(ID0顯示器标(biāo)示位0
12、地(dì)址碼(ID1顯示器标(biāo)示位1
13、行同(tóng)步
14、场同(tóng)步
15、地(dì)址碼 ( ID3或(huò)顯示器标(biāo)示位3 )
图(tú)3.8-3 VGA接口(kǒu)管(guǎn)脚定(dìng)義

在(zài)進(jìn)行FPGA邏輯設計(jì)时(shí)主(zhǔ)要(yào)關(guān)注的(de)信(xìn)号(hào)是(shì)紅(hóng)基色(sè)、綠(lǜ)基色(sè)、藍(lán)基色(sè)、行同(tóng)步和(hé)场同(tóng)步信(xìn)号(hào),其他(tā)信(xìn)号(hào)在(zài)進(jìn)行原理图(tú)和(hé)PCB設計(jì)时(shí)才需要(yào)關(guān)注。FPGA通(tòng)过(guò)控制紅(hóng)基色(sè)、綠(lǜ)基色(sè)、藍(lán)基色(sè)、行同(tóng)步和(hé)场同(tóng)步信(xìn)号(hào)这(zhè)5个(gè)接口(kǒu),就(jiù)能(néng)讓顯示器顯示豐富的(de)色(sè)彩和(hé)各(gè)種(zhǒng)視頻图(tú)像。

1.3 VGA色(sè)彩原理
在(zài)中(zhōng)学的(de)物(wù)理課中(zhōng)同(tóng)学们(men)可(kě)能(néng)做过(guò)棱鏡(jìng)的(de)試验(yàn),通(tòng)过(guò)棱鏡(jìng)後(hòu)白光(guāng)被(bèi)分(fēn)解(jiě)成(chéng)多(duō)種(zhǒng)顔色(sè)逐漸过(guò)渡的(de)色(sè)谱,依次(cì)为(wèi)紅(hóng)、橙、黃、綠(lǜ)、青(qīng)、藍(lán)、紫,这(zhè)就(jiù)是(shì)可(kě)見(jiàn)光(guāng)谱。而(ér)人(rén)的(de)眼(yǎn)睛就(jiù)像一(yī)个(gè)三(sān)色(sè)接收(shōu)器的(de)體(tǐ)系(xì),在(zài)可(kě)見(jiàn)光(guāng)谱中(zhōng)人(rén)眼(yǎn)对(duì)紅(hóng)、綠(lǜ)、藍(lán)最(zuì)为(wèi)敏感(gǎn),在(zài)視覺接收(shōu)时(shí)大多(duō)數的(de)顔色(sè)可(kě)以(yǐ)通(tòng)过(guò)紅(hóng)、綠(lǜ)、藍(lán)三(sān)色(sè)按照不(bù)同(tóng)的(de)比例合成(chéng)産生(shēng)。同(tóng)樣(yàng)地(dì),絕大多(duō)數的(de)單色(sè)光(guāng)也(yě)可(kě)以(yǐ)分(fēn)解(jiě)成(chéng)紅(hóng)綠(lǜ)藍(lán)三(sān)種(zhǒng)色(sè)光(guāng),这(zhè)就(jiù)是(shì)色(sè)度(dù)学最(zuì)基本(běn)的(de)原理,即三(sān)基色(sè)原理。三(sān)種(zhǒng)基色(sè)相互独立,任何一(yī)種(zhǒng)基色(sè)都不(bù)能(néng)由(yóu)其它(tā)两(liǎng)種(zhǒng)基色(sè)合成(chéng)。紅(hóng)綠(lǜ)藍(lán)就(jiù)是(shì)三(sān)基色(sè),这(zhè)三(sān)種(zhǒng)顔色(sè)合成(chéng)的(de)顔色(sè)範圍最(zuì)为(wèi)廣泛,而(ér)按照不(bù)同(tóng)的(de)比例的(de)紅(hóng)綠(lǜ)藍(lán)三(sān)基色(sè)相加合成(chéng)的(de)混色(sè)被(bèi)稱为(wèi)相加混色(sè)。

三(sān)基色(sè)的(de)顔色(sè)編碼如(rú)下(xià)所(suǒ)示:

表(biǎo)3.8-1三(sān)基色(sè)顔色(sè)編碼
顔色(sè)
黑(hēi)
藍(lán)
紅(hóng)
綠(lǜ)
青(qīng)
  
R
  
  
0
  
  
0
  
  
1
  
  
1
  
  
0
  
  
0
  
  
1
  
  
1
  
  
G
  
  
0
  
  
0
  
  
0
  
  
0
  
  
1
  
  
1
  
  
1
  
  
1
  
  
B
  
  
0
  
  
1
  
  
0
  
  
1
  
  
0
  
  
1
  
  
0
  
  
1
  

從上(shàng)表(biǎo)可(kě)以(yǐ)看(kàn)出(chū)RBG一(yī)共(gòng)有(yǒu)8組合,即可(kě)以(yǐ)産生(shēng)8種(zhǒng)顔色(sè)。然而(ér)顯示器顯示的(de)色(sè)彩非(fēi)常豐富,要(yào)遠(yuǎn)遠(yuǎn)多(duō)于(yú)8種(zhǒng)顔色(sè),这(zhè)又是(shì)如(rú)何做到(dào)的(de)呢?

对(duì)于(yú)顯示器来(lái)说(shuō),RGB三(sān)个(gè)信(xìn)号(hào)其实是(shì)模拟信(xìn)号(hào),其電(diàn)壓的(de)高(gāo)低可(kě)以(yǐ)表(biǎo)示出(chū)顔色(sè)的(de)深淺。利用(yòng)这(zhè)一(yī)原理,就(jiù)可(kě)以(yǐ)産生(shēng)豐富的(de)色(sè)彩。例如(rú),如(rú)果(guǒ)R=3.3VG=0VB=0V,則顯示器会(huì)顯示非(fēi)常鮮豔的(de)紅(hóng)色(sè)。如(rú)果(guǒ)G和(hé)B仍然是(shì)0V,而(ér)R改为(wèi)1.8V,則顯示器会(huì)顯示比較淺的(de)紅(hóng)色(sè)。RGB的(de)電(diàn)壓範圍從0~3.3V,将其任意(yì)組合就(jiù)可(kě)以(yǐ)表(biǎo)示出(chū)豐富的(de)顔色(sè)了(le)。

1.4 顯示器掃描方(fāng)式
通(tòng)过(guò)控制紅(hóng)綠(lǜ)藍(lán)三(sān)基色(sè)可(kě)以(yǐ)确定(dìng)一(yī)个(gè)像素的(de)顔色(sè),但衆所(suǒ)周知一(yī)幅图(tú)像是(shì)由(yóu)非(fēi)常多(duō)的(de)像素組成(chéng)的(de)。例如(rú)640*480分(fēn)辨率的(de)图(tú)像則是(shì)由(yóu)480行、每行640个(gè)像素組合起来(lái)顯示的(de)图(tú)像。如(rú)果(guǒ)顯示器想(xiǎng)要(yào)顯示这(zhè)樣(yàng)一(yī)幅图(tú)像,就(jiù)需要(yào)控制顯示器的(de)掃描槍将每一(yī)个(gè)像素对(duì)應(yìng)的(de)顔色(sè)顯示出(chū)来(lái),且需要(yào)控制像素快(kuài)速變(biàn)化(huà),使人(rén)眼(yǎn)認为(wèi)所(suǒ)有(yǒu)像素同(tóng)时(shí)顯示,從而(ér)达(dá)到(dào)顯示器顯示图(tú)像的(de)效果(guǒ)。

CRT 顯示器的(de)控制框图(tú)如(rú)下(xià)图(tú)所(suǒ)示:
图(tú)3.8-4顯示器掃描原理

顯示器采用(yòng)光(guāng)栅掃描方(fāng)式,即轟擊荧光(guāng)屏的(de)電(diàn)子束(shù)在(zài)CRT屏幕上(shàng)從左(zuǒ)到(dào)右(yòu)(受水(shuǐ)平同(tóng)步信(xìn)号(hào)HSYNC控制)、從上(shàng)到(dào)下(xià)(受垂直(zhí)同(tóng)步信(xìn)号(hào)VSYNC控制)做有(yǒu)規律的(de)移動(dòng)。電(diàn)子束(shù)采用(yòng)光(guāng)栅掃描方(fāng)式,從屏幕左(zuǒ)上(shàng)角(jiǎo)一(yī)點(diǎn)開(kāi)始,向(xiàng)右(yòu)逐點(diǎn)進(jìn)行掃描,形成(chéng)一(yī)条(tiáo)水(shuǐ)平線(xiàn);在(zài)到(dào)达(dá)最(zuì)右(yòu)端後(hòu),回(huí)到(dào)下(xià)一(yī)条(tiáo)水(shuǐ)平線(xiàn)的(de)最(zuì)左(zuǒ)端重(zhòng)複上(shàng)面(miàn)的(de)过(guò)程;當電(diàn)子束(shù)完成(chéng)右(yòu)下(xià)角(jiǎo)一(yī)點(diǎn)的(de)掃描後(hòu),完成(chéng)一(yī)幀图(tú)像掃描。随後(hòu),電(diàn)子束(shù)再次(cì)回(huí)到(dào)左(zuǒ)上(shàng)方(fāng)起點(diǎn)開(kāi)始下(xià)一(yī)幀的(de)掃描。这(zhè)種(zhǒng)方(fāng)法即为(wèi)常说(shuō)的(de)逐行掃描顯示,通(tòng)俗来(lái)講就(jiù)是(shì)顯示器是(shì)從左(zuǒ)上(shàng)角(jiǎo)的(de)第(dì)一(yī)个(gè)像素模块(kuài)開(kāi)始,從左(zuǒ)到(dào)右(yòu),從上(shàng)到(dào)下(xià),一(yī)块(kuài)一(yī)块(kuài)的(de)快(kuài)速顯示,從而(ér)实現(xiàn)了(le)一(yī)幅静(jìng)止画(huà)面(miàn),这(zhè)幅静(jìng)止画(huà)面(miàn)在(zài)視頻中(zhōng)稱之为(wèi)一(yī)幀,連(lián)續的(de)幀就(jiù)会(huì)産成(chéng)動(dòng)画(huà)的(de)效果(guǒ)。

1.5 VGA时(shí)序
行同(tóng)步信(xìn)号(hào)的(de)时(shí)序如(rú)下(xià)图(tú)所(suǒ)示。可(kě)以(yǐ)看(kàn)出(chū)行同(tóng)步信(xìn)号(hào)周期(qī)性(xìng)地(dì)産生(shēng)高(gāo)低電(diàn)平,可(kě)将其分(fēn)为(wèi)4个(gè)階(jiē)段(duàn):同(tóng)步脈沖a、顯示後(hòu)沿b、顯示區(qū)域c和(hé)顯示前(qián)沿d。同(tóng)步脈沖a代(dài)表(biǎo)新一(yī)行的(de)掃描開(kāi)始,同(tóng)时(shí)也(yě)是(shì)上(shàng)一(yī)行掃描的(de)結束(shù)。顯示时(shí)序c是(shì)真(zhēn)正(zhèng)图(tú)像的(de)顯示區(qū)域,在(zài)此(cǐ)階(jiē)段(duàn),像素逐个(gè)顯示出(chū)来(lái),即在(zài)这(zhè)一(yī)階(jiē)段(duàn)控制紅(hóng)、綠(lǜ)、藍(lán)三(sān)基色(sè)信(xìn)号(hào)輸出(chū)对(duì)應(yìng)像素的(de)RGB值。顯示後(hòu)沿b和(hé)顯示前(qián)沿d这(zhè)两(liǎng)个(gè)階(jiē)段(duàn)是(shì)消隐时(shí)刻,此(cǐ)时(shí)要(yào)求紅(hóng)、綠(lǜ)、藍(lán)三(sān)基色(sè)信(xìn)号(hào)都为(wèi)0

图(tú)3.8-5 VGA行同(tóng)步信(xìn)号(hào)时(shí)序

通(tòng)俗来(lái)講即行同(tóng)步信(xìn)号(hào)先(xiān)産生(shēng)一(yī)段(duàn)低電(diàn)平的(de)同(tóng)步脈沖表(biǎo)示“这(zhè)一(yī)行要(yào)開(kāi)始了(le)”。此(cǐ)处可(kě)能(néng)存在(zài)疑慮:为(wèi)什麼(me)要(yào)有(yǒu)这(zhè)一(yī)段(duàn)同(tóng)步脈沖呢?從图(tú)3.8- 4的(de)顯示器掃描原理图(tú)中(zhōng)可(kě)以(yǐ)看(kàn)出(chū),電(diàn)子束(shù)的(de)行進(jìn)路(lù)徑是(shì)從左(zuǒ)上(shàng)角(jiǎo)開(kāi)始,由(yóu)左(zuǒ)到(dào)右(yòu)一(yī)个(gè)點(diǎn)一(yī)个(gè)點(diǎn)的(de)移動(dòng)。當一(yī)行掃描完畢後(hòu),電(diàn)子束(shù)則需要(yào)從最(zuì)右(yòu)邊(biān)回(huí)到(dào)最(zuì)左(zuǒ)邊(biān)開(kāi)始下(xià)一(yī)行的(de)掃描,这(zhè)一(yī)移動(dòng)的(de)时(shí)間(jiān)即为(wèi)同(tóng)步脈沖a

在(zài)同(tóng)步脈沖a結束(shù)後(hòu),信(xìn)号(hào)由(yóu)0變(biàn)1迎来(lái)一(yī)个(gè)上(shàng)升(shēng)沿,進(jìn)入(rù)顯示信(xìn)号(hào)。这(zhè)段(duàn)顯示信(xìn)号(hào)包(bāo)含顯示後(hòu)沿b、顯示时(shí)序c和(hé)顯示前(qián)沿d三(sān)部(bù)分(fēn),其中(zhōng)只(zhī)有(yǒu)顯示时(shí)序c是(shì)真(zhēn)正(zhèng)可(kě)以(yǐ)顯示像素的(de),即在(zài)这(zhè)一(yī)段(duàn)需要(yào)輸出(chū)有(yǒu)效的(de)RGB的(de)值,從而(ér)保證顯示效果(guǒ)。
场同(tóng)步信(xìn)号(hào)的(de)时(shí)序與(yǔ)行同(tóng)步信(xìn)号(hào)相似,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.8-6VGA场同(tóng)步信(xìn)号(hào)时(shí)序

场同(tóng)步信(xìn)号(hào)也(yě)是(shì)周期(qī)性(xìng)地(dì)産生(shēng)高(gāo)低電(diàn)平,同(tóng)樣(yàng)可(kě)以(yǐ)分(fēn)成(chéng)4个(gè)階(jiē)段(duàn):同(tóng)步脈沖a、顯示後(hòu)沿b、顯示區(qū)域c和(hé)顯示前(qián)沿d。但需要(yào)注意(yì)的(de)是(shì),场同(tóng)步信(xìn)号(hào)的(de)變(biàn)化(huà)單位是(shì)“一(yī)行”,即一(yī)个(gè)“场同(tóng)步脈沖”时(shí)間(jiān)內(nèi)包(bāo)含多(duō)个(gè)“行脈沖周期(qī)”。

为(wèi)了(le)避免读(dú)者(zhě)錯誤理解(jiě),这(zhè)里(lǐ)再次(cì)強(qiáng)調一(yī)下(xià)VGA的(de)时(shí)序。
1、场同(tóng)步的(de)變(biàn)化(huà)是(shì)以(yǐ)“一(yī)行”为(wèi)單位的(de)。例如(rú),假定(dìng)一(yī)行时(shí)間(jiān)是(shì)800个(gè)时(shí)鐘(zhōng),场同(tóng)步脈沖a的(de)值为(wèi)2,則场同(tóng)步脈沖的(de)时(shí)間(jiān)是(shì)2*800=1600个(gè)时(shí)鐘(zhōng)。
2、真(zhēn)正(zhèng)的(de)顯示區(qū)域是(shì)场同(tóng)步信(xìn)号(hào)处于(yú)顯示區(qū)域且行同(tóng)步信(xìn)号(hào)也(yě)处于(yú)顯示區(qū)域的(de)部(bù)分(fēn),其他(tā)區(qū)域中(zhōng)紅(hóng)、綠(lǜ)、藍(lán)基色(sè)都要(yào)給(gěi)低電(diàn)平。即场同(tóng)步信(xìn)号(hào)和(hé)行同(tóng)步信(xìn)号(hào)均处于(yú)顯示區(qū)域的(de)时(shí)候,才是(shì)真(zhēn)正(zhèng)的(de)顯示區(qū)域。

在(zài)進(jìn)行时(shí)序观察时(shí),同(tóng)学们(men)不(bù)僅要(yào)關(guān)注其變(biàn)化(huà)點(diǎn),還(huán)要(yào)關(guān)注持(chí)續的(de)时(shí)間(jiān)。那(nà)麼(me)行、场同(tóng)步四(sì)个(gè)階(jiē)段(duàn)中(zhōng)的(de)持(chí)續时(shí)間(jiān)分(fēn)别是(shì)多(duō)少(shǎo)呢?下(xià)面(miàn)是(shì)常見(jiàn)分(fēn)辨率的(de)相應(yìng)參數。

表(biǎo)3.8-2常見(jiàn)分(fēn)辨率參數
  
分(fēn)辨率
  
行/列
同(tóng)步脈沖
顯示後(hòu)沿
顯示區(qū)域
顯示前(qián)沿
幀长
單位
640*480
  
/60Hz
96
48
640
16
800
基準时(shí)鐘(zhōng)
2
33
480
10
525
800*600
  
/72Hz
120
64
800
56
1040
基準时(shí)鐘(zhōng)
6
23
600
37
666
800*600
  
/60Hz
128
88
800
40
1056
基準时(shí)鐘(zhōng)
4
23
600
1
628
1024*768
  
/60Hz
136
160
1024
24
1344
基準时(shí)鐘(zhōng)
6
29
768
3
806

以(yǐ)640*480/60Hz为(wèi)例,这(zhè)一(yī)指标(biāo)代(dài)表(biǎo)刷新頻率为(wèi)60Hz,分(fēn)辨率为(wèi)640X480。标(biāo)準VGA顯示驅動(dòng)中(zhōng)刷新頻率60 Hz即为(wèi)1秒(miǎo)顯示60幅图(tú)像。

此(cǐ)外(wài),從上(shàng)表(biǎo)中(zhōng)可(kě)以(yǐ)看(kàn)出(chū),在(zài)該分(fēn)辨率下(xià)行同(tóng)步信(xìn)号(hào)的(de)同(tóng)步脈沖是(shì)96个(gè)基準时(shí)鐘(zhōng),顯示後(hòu)沿是(shì)48个(gè)基準时(shí)鐘(zhōng),顯示區(qū)域是(shì)640个(gè)基準时(shí)鐘(zhōng),顯示前(qián)沿是(shì)16个(gè)基準时(shí)鐘(zhōng),通(tòng)过(guò)相加可(kě)以(yǐ)得出(chū)一(yī)行一(yī)共(gòng)有(yǒu)800个(gè)基準时(shí)鐘(zhōng)。該分(fēn)辨率下(xià)的(de)场同(tóng)步信(xìn)号(hào)的(de)同(tóng)步脈沖是(shì)2行(2*800个(gè)基準时(shí)鐘(zhōng)),顯示後(hòu)沿是(shì)33行(33*800个(gè)基準时(shí)鐘(zhōng)),顯示區(qū)域为(wèi)480行(480*800个(gè)基準时(shí)鐘(zhōng)),顯示前(qián)沿为(wèi)10行(10*800个(gè)基準时(shí)鐘(zhōng)),共(gòng)計(jì)525行(525*800个(gè)基準时(shí)鐘(zhōng))。

那(nà)麼(me)基準时(shí)鐘(zhōng)又是(shì)多(duō)少(shǎo)呢?由(yóu)于(yú)1秒(miǎo)顯示60幅图(tú)像,所(suǒ)以(yǐ)一(yī)幅图(tú)像顯示的(de)时(shí)間(jiān)是(shì)1/60秒(miǎo)。由(yóu)于(yú)一(yī)幅图(tú)像占用(yòng)了(le)525*800个(gè)基準时(shí)鐘(zhōng),則基準时(shí)鐘(zhōng)周期(qī) = 1/60/525*800)秒(miǎo),約为(wèi)39.6825ns。因(yīn)此(cǐ),基準时(shí)鐘(zhōng)頻率約为(wèi)25.175 MHz,在(zài)本(běn)設計(jì)中(zhōng)取(qǔ)25M

有(yǒu)些读(dú)者(zhě)可(kě)能(néng)对(duì)于(yú)行同(tóng)步信(xìn)号(hào)與(yǔ)场同(tóng)步信(xìn)号(hào)還(huán)是(shì)不(bù)太理解(jiě),在(zài)这(zhè)里(lǐ)将两(liǎng)个(gè)信(xìn)号(hào)融合在(zài)一(yī)起解(jiě)釋一(yī)下(xià)。每一(yī)行的(de)掃描需要(yào)行同(tóng)步信(xìn)号(hào),且每一(yī)行中(zhōng)都具有(yǒu)同(tóng)步脈沖a,顯示後(hòu)沿b,顯示时(shí)序c和(hé)顯示前(qián)沿d四(sì)个(gè)階(jiē)段(duàn),完成(chéng)一(yī)行掃描後(hòu)再進(jìn)入(rù)到(dào)下(xià)一(yī)行再次(cì)重(zhòng)複同(tóng)樣(yàng)的(de)四(sì)个(gè)階(jiē)段(duàn),这(zhè)一(yī)过(guò)程为(wèi)行同(tóng)步。将範圍擴大,點(diǎn)動(dòng)成(chéng)線(xiàn)即为(wèi)行,線(xiàn)動(dòng)成(chéng)面(miàn)即为(wèi)场。场同(tóng)步中(zhōng)和(hé)行同(tóng)步一(yī)樣(yàng)依旧(jiù)分(fēn)为(wèi)四(sì)个(gè)階(jiē)段(duàn),同(tóng)步脈沖a,顯示後(hòu)沿b,顯示时(shí)序c和(hé)顯示前(qián)沿d。因(yīn)此(cǐ)就(jiù)有(yǒu)了(le)如(rú)图(tú)3.8- 6所(suǒ)示的(de)时(shí)序图(tú),场同(tóng)步的(de)單位就(jiù)为(wèi)行同(tóng)步。

这(zhè)也(yě)是(shì)最(zuì)終(zhōng)選取(qǔ)的(de)顯示區(qū)域需要(yào)行同(tóng)步和(hé)场同(tóng)步都处于(yú)顯示时(shí)序c中(zhōng)的(de)原因(yīn)。試想(xiǎng)一(yī)下(xià),如(rú)果(guǒ)行同(tóng)步处于(yú)顯示脈沖c的(de)位置,但是(shì)场同(tóng)步還(huán)处于(yú)同(tóng)步脈沖a的(de)位置,在(zài)这(zhè)一(yī)狀态下(xià)无法完成(chéng)图(tú)像的(de)顯示。同(tóng)理,如(rú)果(guǒ)场同(tóng)步处于(yú)顯示脈沖c的(de)位置,但是(shì)行同(tóng)步处于(yú)同(tóng)步脈沖a的(de)位置,也(yě)同(tóng)樣(yàng)无法顯示图(tú)像。这(zhè)是(shì)一(yī)个(gè)包(bāo)含與(yǔ)被(bèi)包(bāo)含的(de)關(guān)系(xì),在(zài)场同(tóng)步脈沖c位置的(de)时(shí)候,包(bāo)含了(le)很多(duō)个(gè)时(shí)序四(sì)个(gè)脈沖的(de)行同(tóng)步,而(ér)只(zhī)有(yǒu)在(zài)行同(tóng)步中(zhōng)也(yě)处于(yú)同(tóng)步脈沖c的(de)位置时(shí)才可(kě)以(yǐ)真(zhēn)正(zhèng)顯示图(tú)像。

1.6 至(zhì)簡設計(jì)法VGA原理图(tú)
FPGA是(shì)數字(zì)芯片(piàn),其管(guǎn)脚輸出(chū)的(de)都是(shì)0和(hé)1的(de)數字(zì)信(xìn)号(hào),只(zhī)有(yǒu)高(gāo)電(diàn)平和(hé)低電(diàn)平。因(yīn)此(cǐ)如(rú)果(guǒ)要(yào)控制RGB電(diàn)壓的(de)高(gāo)低從而(ér)实現(xiàn)顯示器彩色(sè)画(huà)面(miàn)的(de)顯示,則必須用(yòng)到(dào)數轉(zhuǎn)換DA芯片(piàn),利用(yòng)數字(zì)信(xìn)号(hào)控制數模轉(zhuǎn)換芯片(piàn)的(de)輸入(rù)端,從而(ér)讓其輸出(chū)不(bù)同(tóng)幅度(dù)的(de)電(diàn)壓值。

如(rú)下(xià)图(tú)所(suǒ)示,FPGA産生(shēng)RGB三(sān)種(zhǒng)信(xìn)号(hào),此(cǐ)时(shí)的(de)RGB都是(shì)多(duō)位數字(zì)信(xìn)号(hào),将RGB信(xìn)号(hào)傳送給(gěi)DA芯片(piàn),DA会(huì)根(gēn)據(jù)这(zhè)一(yī)數字(zì)信(xìn)号(hào)産生(shēng)不(bù)同(tóng)電(diàn)壓的(de)模拟信(xìn)号(hào)rgb。此(cǐ)时(shí)只(zhī)要(yào)将模拟信(xìn)号(hào)rgb連(lián)到(dào)顯示器上(shàng)即可(kě)顯示豐富的(de)顔色(sè)。

在(zài)这(zhè)里(lǐ),读(dú)者(zhě)只(zhī)需了(le)解(jiě)FPGA通(tòng)过(guò)數字(zì)信(xìn)号(hào)控制DA芯片(piàn),DA芯片(piàn)就(jiù)可(kě)以(yǐ)産生(shēng)不(bù)同(tóng)電(diàn)平即可(kě)。關(guān)有(yǒu)DA芯片(piàn)的(de)介紹可(kě)以(yǐ)參考至(zhì)簡設計(jì)法中(zhōng)DA轉(zhuǎn)換的(de)相關(guān)內(nèi)容。

图(tú)3.8-7VGA數模轉(zhuǎn)換原理

至(zhì)簡設計(jì)法教学板中(zhōng)VGA接口(kǒu)的(de)原理图(tú)如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)3.8-8教学板VGA接口(kǒu)原理图(tú)

其中(zhōng),行同(tóng)步管(guǎn)脚連(lián)接信(xìn)号(hào)VGA_HSYNC,场同(tóng)步信(xìn)号(hào)連(lián)接信(xìn)号(hào)VGA_VSYNC,紅(hóng)基管(guǎn)脚連(lián)接VGA_RED,藍(lán)基管(guǎn)脚連(lián)接信(xìn)号(hào)VGA_BLUE,綠(lǜ)基管(guǎn)脚連(lián)接信(xìn)号(hào)VGA_GREEN

VGA_HSYNC和(hé)VGA_VSYNC信(xìn)号(hào)的(de)另(lìng)一(yī)端連(lián)接到(dào)FPGA的(de)C20和(hé)D20管(guǎn)脚上(shàng)。
图(tú)3.8-9VGA信(xìn)号(hào)與(yǔ)FPGA連(lián)接图(tú)

綜上(shàng)所(suǒ)述,FPGA控制管(guǎn)脚C20和(hé)D20的(de)輸出(chū),從而(ér)控制VGA接口(kǒu)的(de)行、场同(tóng)步。

再来(lái)看(kàn)VGA_REDVGA_BLUE和(hé)VGA_GREEN信(xìn)号(hào),其原理图(tú)如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)3.8-10電(diàn)阻实現(xiàn)數模轉(zhuǎn)換网(wǎng)絡

從图(tú)中(zhōng)可(kě)以(yǐ)看(kàn)出(chū),VGA_RED是(shì)VGA_R0~VGA_R4與(yǔ)電(diàn)阻并聯産生(shēng)的(de),VGA_GREEN是(shì)VGA_G0~VGA_G5與(yǔ)電(diàn)阻并聯産生(shēng),VGA_BLUE是(shì)VGA_B0~VGA_B4與(yǔ)電(diàn)阻并聯産生(shēng)。而(ér)VGA_R0~VGA_R4VGA_G0~VGA_G5VGA_B0~VGA_B4是(shì)連(lián)接到(dào)FPGA管(guǎn)脚的(de)數字(zì)信(xìn)号(hào),每个(gè)信(xìn)号(hào)都只(zhī)有(yǒu)0V和(hé)3.3V两(liǎng)種(zhǒng)可(kě)能(néng)。那(nà)麼(me)FPGA可(kě)以(yǐ)通(tòng)过(guò)控制这(zhè)些信(xìn)号(hào)来(lái)控制VGA紅(hóng)基、綠(lǜ)基和(hé)藍(lán)基管(guǎn)脚的(de)電(diàn)壓。

以(yǐ)利用(yòng)VGA_R0~VGA_R4産生(shēng)VGA_RED的(de)電(diàn)壓值为(wèi)例。
VGA_RED電(diàn)壓 = (VGA_R0/2 + VGA_R1/4 + VGA_R2/8 + VGA_R3/16 + VGA_R4/32)*3.3V
VGA_GREEN電(diàn)壓 = (VGA_G0/2 + VGA_G1/4 + VGA_G2/8 + VGA_G3/16 +VGA_G4/32+VGA_G5/64)*3.3V
VGA_BLUE電(diàn)壓 = (VGA_B0/2 + VGA_B1/4 + VGA_B2/8 + VGA_B3/16 + VGA_B4/32)*3.3V

至(zhì)簡設計(jì)法教学板利用(yòng)電(diàn)阻网(wǎng)絡代(dài)替DA芯片(piàn)来(lái)産生(shēng)不(bù)同(tóng)幅度(dù)電(diàn)壓。其信(xìn)号(hào)與(yǔ)管(guǎn)脚的(de)对(duì)應(yìng)關(guān)系(xì)及(jí)本(běn)設計(jì)所(suǒ)用(yòng)顔色(sè)的(de)对(duì)應(yìng)信(xìn)号(hào)值如(rú)表(biǎo)3.8- 4所(suǒ)示。
图(tú)3.8-11VGA信(xìn)号(hào)與(yǔ)FPGA連(lián)接

表(biǎo)3.8-3信(xìn)号(hào)與(yǔ)FPGA管(guǎn)脚对(duì)應(yìng)關(guān)系(xì)
  
電(diàn)阻网(wǎng)絡轉(zhuǎn)換後(hòu)
  
信(xìn)号(hào)線(xiàn)
  
信(xìn)号(hào)線(xiàn)
FPGA管(guǎn)脚
VGA_RED
VGA_R4
E11
VGA_R3
C10
VGA_R2
D10
VGA_R1
E9
VGA_R0
E10
VGA_GREEN
VGA_G5
D15
VGA_G4
C17
VGA_G3
C19
VGA_G2
E12
VGA_G1
C13
VGA_G0
E15
VGA_BLUE
VGA_B4
D13
VGA_B3
E13
VGA_B2
D17
VGA_B1
E16
VGA_B0
C15
VGA_HSYNC
VGA_HSYNC
C20
VGA_VSYNC
VGA_VSYNC
D20

表(biǎo)3.8-4本(běn)設計(jì)使用(yòng)顔色(sè)的(de)相應(yìng)信(xìn)号(hào)值
  
本(běn)設計(jì)使用(yòng)的(de)顔色(sè)
  
VGA_R4~R0
VGA_G5~G0
VGA_B4~B0
白色(sè)
5’b11111
6’b111111
5’b11111
黑(hēi)色(sè)
5’b0
6’b0
5’b0
藍(lán)色(sè)
5’b0
6’b0
5’b11111
綠(lǜ)色(sè)
5’b0
6’b111111
5’b0
紅(hóng)色(sè)
5’b11111
6’b0
5’b0
第(dì)2节(jié) 設計(jì)目标(biāo)
了(le)解(jiě)了(le)VGA的(de)顯示原理後(hòu)来(lái)進(jìn)行本(běn)次(cì)設計(jì):通(tòng)过(guò)VGA進(jìn)行不(bù)同(tóng)顔色(sè)顯示。按照至(zhì)簡設計(jì)法的(de)思(sī)路(lù),在(zài)進(jìn)行設計(jì)之前(qián)首先(xiān)應(yìng)明(míng)确設計(jì)目标(biāo)。明(míng)确了(le)設計(jì)目标(biāo)後(hòu),後(hòu)續的(de)每一(yī)步操作都是(shì)圍繞設計(jì)目标(biāo)進(jìn)行展(zhǎn)開(kāi)。如(rú)果(guǒ)沒(méi)有(yǒu)牢記(jì)設計(jì)目标(biāo)就(jiù)開(kāi)始動(dòng)手(shǒu)進(jìn)行实踐操作,最(zuì)終(zhōng)的(de)作品也(yě)是(shì)東(dōng)拼西(xī)湊的(de)産物(wù),一(yī)旦在(zài)設計(jì)过(guò)程中(zhōng)出(chū)現(xiàn)了(le)問(wèn)題(tí)就(jiù)需要(yào)花費大量(liàng)的(de)精力進(jìn)行尋找(zhǎo)修複。建議初学者(zhě)在(zài)開(kāi)始学習时(shí)就(jiù)養成(chéng)良好(hǎo)的(de)設計(jì)習慣,才能(néng)在(zài)後(hòu)續的(de)職業生(shēng)涯中(zhōng)受益。

本(běn)設計(jì)需要(yào)通(tòng)过(guò)VGA連(lián)接線(xiàn)将顯示器和(hé)開(kāi)發(fà)板進(jìn)行連(lián)接,FPGA在(zài)連(lián)接成(chéng)功後(hòu)産生(shēng)640*480分(fēn)辨率,刷新頻率为(wèi)60Hz的(de)VGA时(shí)序,使顯示器産生(shēng)顯示一(yī)幅完整的(de)紅(hóng)色(sè)图(tú)像。顯示器一(yī)般都具有(yǒu)分(fēn)辨率自(zì)适應(yìng)功能(néng),无須設置就(jiù)能(néng)識别不(bù)同(tóng)分(fēn)辨率的(de)图(tú)像。本(běn)設計(jì)的(de)相應(yìng)參數參見(jiàn)表(biǎo)3.8-5中(zhōng)的(de)第(dì)一(yī)行,該表(biǎo)中(zhōng)常用(yòng)分(fēn)辨率的(de)VGA对(duì)應(yìng)时(shí)序參數并不(bù)是(shì)随意(yì)選定(dìng)的(de),而(ér)是(shì)國(guó)際通(tòng)用(yòng)标(biāo)準,每个(gè)關(guān)于(yú)VGA的(de)設計(jì)工程都需要(yào)遵守这(zhè)一(yī)标(biāo)準。这(zhè)里(lǐ)需要(yào)注意(yì)的(de)是(shì):行的(de)單位为(wèi)“基準时(shí)鐘(zhōng)”,即頻率为(wèi)25MHz、周期(qī)为(wèi)40ns的(de)时(shí)鐘(zhōng),列的(de)單位則为(wèi)“行”,請读(dú)者(zhě)朋友们(men)一(yī)定(dìng)要(yào)準确區(qū)分(fēn)。

表(biǎo)3.8-5常見(jiàn)分(fēn)辨率參數
  
分(fēn)辨率
  
行/列
同(tóng)步脈沖
顯示後(hòu)沿
顯示區(qū)域
顯示前(qián)沿
幀长
單位
640*480
  
/60Hz
96
48
640
16
800
基準时(shí)鐘(zhōng)
2
33
480
10
525
800*600
  
/72Hz
120
64
800
56
1040
基準时(shí)鐘(zhōng)
6
23
600
37
666
800*600
  
/60Hz
128
88
800
40
1056
基準时(shí)鐘(zhōng)
4
23
600
1
628
1024*768
  
/60Hz
136
160
1024
24
1344
基準时(shí)鐘(zhōng)
6
29
768
3
806

設計(jì)完成(chéng)後(hòu),使用(yòng)VGA線(xiàn)将開(kāi)發(fà)板與(yǔ)顯示器相連(lián),連(lián)接示意(yì)图(tú)如(rú)下(xià)所(suǒ)示。
图(tú)3.8-12教学板連(lián)接示意(yì)图(tú)

上(shàng)板後(hòu)顯示器展(zhǎn)示效果(guǒ)图(tú)如(rú)下(xià)图(tú)所(suǒ)示,不(bù)同(tóng)的(de)顯示器会(huì)有(yǒu)一(yī)定(dìng)的(de)色(sè)差,需要(yào)以(yǐ)实際顯示情(qíng)況为(wèi)主(zhǔ)。想(xiǎng)要(yào)观看(kàn)連(lián)接後(hòu)演示視頻效果(guǒ)的(de)读(dú)者(zhě)朋友,可(kě)以(yǐ)登陸至(zhì)簡設計(jì)法官网(wǎng)观看(kàn)学習:old.mdy-edu.com/xxxx
图(tú)3.8-13VGA顯示顔色(sè)效果(guǒ)图(tú)

第(dì)3节(jié) 設計(jì)实現(xiàn)
确定(dìng)了(le)設計(jì)目标(biāo)後(hòu),本(běn)書(shū)会(huì)逐步分(fēn)析講解(jiě)工程的(de)制作步驟。建議初学者(zhě)認真(zhēn)学習每一(yī)步,因(yīn)为(wèi)这(zhè)里(lǐ)分(fēn)享給(gěi)同(tóng)学们(men)的(de)不(bù)僅僅是(shì)案(àn)例,還(huán)有(yǒu)在(zài)操作过(guò)程中(zhōng)的(de)一(yī)些設計(jì)理念及(jí)原理。當然本(běn)書(shū)也(yě)会(huì)分(fēn)享一(yī)些至(zhì)簡設計(jì)法的(de)設計(jì)技巧,希望每一(yī)位读(dú)者(zhě)都可(kě)以(yǐ)具備独立設計(jì)工程的(de)能(néng)力。當然已經(jīng)擁有(yǒu)扎实的(de)功底、只(zhī)是(shì)想(xiǎng)要(yào)根(gēn)據(jù)步驟完成(chéng)項目的(de)读(dú)者(zhě)朋友们(men)可(kě)以(yǐ)跳过(guò)此(cǐ)部(bù)分(fēn),直(zhí)接進(jìn)入(rù)第(dì)五(wǔ)节(jié)中(zhōng)的(de)簡略版操作步驟分(fēn)享。

3.1 頂层信(xìn)号(hào)
新建目录(lù):D:mdy_bookcolor_exec1,并該目录(lù)中(zhōng),新建一(yī)个(gè)名为(wèi)color_exec1.v的(de)文(wén)件(jiàn)。用(yòng)GVIM打(dǎ)開(kāi)後(hòu)開(kāi)始編写代(dài)碼。这(zhè)里(lǐ)建議初学者(zhě)一(yī)定(dìng)要(yào)按照本(běn)書(shū)提(tí)供的(de)文(wén)件(jiàn)路(lù)徑以(yǐ)及(jí)文(wén)件(jiàn)名進(jìn)行設置,避免後(hòu)面(miàn)出(chū)現(xiàn)未知錯誤。
第(dì)一(yī)步應(yìng)确定(dìng)頂层信(xìn)号(hào)。分(fēn)析設計(jì)目标(biāo)可(kě)知:本(běn)設計(jì)中(zhōng)FPGA会(huì)産生(shēng)VGA时(shí)序,即控制VGA_R4~R0VGA_G5~G0VGA_B4~B0VGA_HSYNC和(hé)VGA_VSYNC,從而(ér)使顯示器顯示紅(hóng)色(sè)。其中(zhōng),FPGA可(kě)根(gēn)據(jù)时(shí)序産生(shēng)高(gāo)低電(diàn)平從而(ér)控制VGA_HSYNC和(hé)VGA_VSYNC。由(yóu)于(yú)本(běn)設計(jì)需要(yào)的(de)顯示的(de)顔色(sè)數據(jù)是(shì)固定(dìng)的(de)紅(hóng)色(sè),因(yīn)此(cǐ)通(tòng)过(guò)FPGA自(zì)身(shēn)産生(shēng)而(ér)不(bù)需要(yào)外(wài)部(bù)輸入(rù)图(tú)像的(de)數據(jù)。在(zài)FPGA的(de)設計(jì)中(zhōng)可(kě)以(yǐ)定(dìng)義輸出(chū)信(xìn)号(hào)hys表(biǎo)示行同(tóng)步,定(dìng)義輸出(chū)信(xìn)号(hào)vys表(biǎo)示场同(tóng)步,定(dìng)義一(yī)个(gè)16位的(de)信(xìn)号(hào)lcd_rgb来(lái)進(jìn)行RGB輸出(chū),其中(zhōng)lcd_rgb[15:11]表(biǎo)示VGA_R4~0lcd_rgb[10:5]表(biǎo)示VGA_G5~0lcd_rgb[4:0]表(biǎo)示VGA_B4~0。當然,本(běn)設計(jì)中(zhōng)還(huán)需要(yào)时(shí)鐘(zhōng)信(xìn)号(hào)clk和(hé)複位信(xìn)号(hào)rst_n来(lái)進(jìn)行工程控制。

綜上(shàng)所(suǒ)述,此(cǐ)設計(jì)共(gòng)需要(yào)五(wǔ)个(gè)信(xìn)号(hào):时(shí)鐘(zhōng)信(xìn)号(hào)clk、複位信(xìn)号(hào)rst_n、场同(tóng)步信(xìn)号(hào)vys、行同(tóng)步信(xìn)号(hào)hys和(hé)16位的(de)RGB輸出(chū)信(xìn)号(hào)lcd_rgb。信(xìn)号(hào)和(hé)硬(yìng)件(jiàn)的(de)对(duì)應(yìng)關(guān)系(xì)如(rú)下(xià)表(biǎo)所(suǒ)示。

表(biǎo)3.8-6信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)
  
器件(jiàn)
  
電(diàn)阻网(wǎng)絡轉(zhuǎn)換後(hòu)
  
信(xìn)号(hào)線(xiàn)
信(xìn)号(hào)線(xiàn)
FPGA管(guǎn)脚
FPGA工程信(xìn)号(hào)
CN1
VGA_RED
VGA_R4
E11
lcd_rgb[15]
VGA_R3
C10
lcd_rgb[14]
VGA_R2
D10
lcd_rgb[13]
VGA_R1
E9
lcd_rgb[12]
VGA_R0
E10
lcd_rgb[11]
VGA_GREEN
VGA_G5
D15
lcd_rgb[10]
VGA_G4
C17
lcd_rgb[9]
VGA_G3
C19
lcd_rgb[8]
VGA_G2
E12
lcd_rgb[7]
VGA_G1
C13
lcd_rgb[6]
VGA_G0
E15
lcd_rgb[5]
VGA_BLUE
VGA_B4
D13
lcd_rgb[4]
VGA_B3
E13
lcd_rgb[3]
VGA_B2
D17
lcd_rgb[2]
VGA_B1
E16
lcd_rgb[1]
VGA_B0
C15
lcd_rgb[0]
VGA_HSYNC
VGA_HSYNC
C20
hys
VGA_VSYNC
VGA_VSYNC
D20
vys
X1
SYS_CLK
G1
clk
K1
SYS_RST
AB12
rst_n

通(tòng)过(guò)以(yǐ)上(shàng)分(fēn)析可(kě)以(yǐ)写出(chū)頂层信(xìn)号(hào)代(dài)碼:将module的(de)名稱定(dìng)義为(wèi)color_exec1,已知該模块(kuài)有(yǒu)五(wǔ)个(gè)信(xìn)号(hào):clkrst_nlcd_hslcd_vs和(hé)lcd_rgb,将與(yǔ)外(wài)部(bù)相連(lián)接的(de)輸入(rù)/輸出(chū)信(xìn)号(hào)列出(chū),從而(ér)实現(xiàn)信(xìn)号(hào)與(yǔ)管(guǎn)脚的(de)連(lián)接。具體(tǐ)頂层代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
module color_exec1(
  
clk   ,
  
rst_n   ,
  
lcd_hs   ,
  
lcd_vs   ,
  
lcd_rgb
  
     );

随後(hòu)聲明(míng)信(xìn)号(hào)的(de)輸入(rù)輸出(chū)屬性(xìng),模块(kuài)中(zhōng)需要(yào)聲明(míng)这(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)。信(xìn)号(hào)若为(wèi)輸入(rù)的(de)話(huà)則聲明(míng)其为(wèi)input,若为(wèi)輸出(chū)則聲明(míng)其为(wèi)ouput。在(zài)本(běn)設計(jì)中(zhōng),由(yóu)于(yú)clk是(shì)外(wài)部(bù)的(de)晶振輸入(rù)給(gěi)FPGA的(de),因(yīn)此(cǐ)在(zài)FPGA中(zhōng)clk是(shì)輸入(rù)信(xìn)号(hào)input;同(tóng)樣(yàng)地(dì),rst_n是(shì)外(wài)部(bù)按鍵給(gěi)FPGA的(de),在(zài)FPGA中(zhōng)同(tóng)樣(yàng)为(wèi)輸入(rù)信(xìn)号(hào)inputlcd_hslcd_vs和(hé)lcd_rgb是(shì)FPGA輸出(chū)給(gěi)顯示器的(de),因(yīn)此(cǐ)是(shì)輸出(chū)信(xìn)号(hào)output。其中(zhōng)clkrst_nlcd_hslcd_vs的(de)值都是(shì)0或(huò)者(zhě)1,用(yòng)一(yī)根(gēn)線(xiàn)表(biǎo)示即可(kě),即位宽(kuān)为(wèi)1lcd_rgb信(xìn)号(hào)的(de)位宽(kuān)为(wèi)为(wèi)16位。根(gēn)據(jù)以(yǐ)上(shàng)分(fēn)析補充輸入(rù)輸出(chū)端口(kǒu)定(dìng)義,其具體(tǐ)代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
input                   clk  ;
  
input                   rst_n  ;
  
output                  lcd_hs  ;
  
output                  lcd_vs  ;
  
output   [15:0]          lcd_rgb       ;
3.2 信(xìn)号(hào)設計(jì)
分(fēn)析設計(jì)目标(biāo)可(kě)知,首先(xiān)需要(yào)設計(jì)行同(tóng)步信(xìn)号(hào)hys,其时(shí)序图(tú)表(biǎo)示如(rú)下(xià):
图(tú)3.8-14VGA行同(tóng)步时(shí)序

根(gēn)據(jù)时(shí)序图(tú)可(kě)以(yǐ)看(kàn)出(chū)hys是(shì)一(yī)个(gè)周期(qī)性(xìng)進(jìn)行高(gāo)低變(biàn)化(huà)的(de)脈沖。根(gēn)據(jù)設計(jì)目标(biāo)得知图(tú)像分(fēn)辨率選定(dìng)为(wèi)640*480,因(yīn)此(cǐ)使用(yòng)下(xià)表(biǎo)中(zhōng)的(de)640*480分(fēn)辨率的(de)相應(yìng)參數。即同(tóng)步脈沖a的(de)时(shí)間(jiān)是(shì)96个(gè)基準时(shí)鐘(zhōng),顯示後(hòu)沿b的(de)时(shí)間(jiān)是(shì)48个(gè)基準时(shí)鐘(zhōng)周期(qī),顯示时(shí)序c的(de)时(shí)間(jiān)是(shì)640个(gè)基準时(shí)鐘(zhōng),顯示前(qián)沿的(de)时(shí)間(jiān)是(shì)16个(gè)基準时(shí)鐘(zhōng),共(gòng)計(jì)800个(gè)基準时(shí)鐘(zhōng)(800=96+48+640+16)。

表(biǎo)3.8-5常見(jiàn)分(fēn)辨率參數
  
分(fēn)辨率
  
行/列
同(tóng)步脈沖
顯示後(hòu)沿
顯示區(qū)域
顯示前(qián)沿
幀长
單位
640*480
  
/60Hz
96
48
640
16
800
基準时(shí)鐘(zhōng)
2
33
480
10
525
800*600
  
/72Hz
120
64
800
56
1040
基準时(shí)鐘(zhōng)
6
23
600
37
666
800*600
  
/60Hz
128
88
800
40
1056
基準时(shí)鐘(zhōng)
4
23
600
1
628
1024*768
  
/60Hz
136
160
1024
24
1344
基準时(shí)鐘(zhōng)
6
29
768
3
806

这(zhè)里(lǐ)需要(yào)注意(yì),一(yī)个(gè)基準时(shí)鐘(zhōng)是(shì)40ns,而(ér)至(zhì)簡設計(jì)法開(kāi)發(fà)板的(de)时(shí)鐘(zhōng)周期(qī)是(shì)20ns,因(yīn)此(cǐ)基于(yú)至(zhì)簡設計(jì)法開(kāi)發(fà)板的(de)VGA工程設計(jì)中(zhōng),采用(yòng)2个(gè)时(shí)鐘(zhōng)代(dài)表(biǎo)一(yī)个(gè)基準时(shí)鐘(zhōng)。在(zài)图(tú)中(zhōng)補充对(duì)應(yìng)的(de)时(shí)間(jiān)信(xìn)号(hào),带(dài)有(yǒu)时(shí)間(jiān)信(xìn)号(hào)的(de)时(shí)序图(tú)如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)3.8-15带(dài)时(shí)間(jiān)信(xìn)息的(de)VGA行同(tóng)步时(shí)序

根(gēn)據(jù)至(zhì)簡設計(jì)法的(de)理論,分(fēn)析波(bō)形图(tú)和(hé)設計(jì)目标(biāo)後(hòu)可(kě)以(yǐ)得到(dào)本(běn)設計(jì)的(de)計(jì)數器架構:本(běn)設計(jì)需要(yào)使用(yòng)2个(gè)計(jì)數器,一(yī)个(gè)計(jì)數器cnt0用(yòng)来(lái)計(jì)數基準时(shí)間(jiān),另(lìng)一(yī)个(gè)計(jì)數器cnt1用(yòng)来(lái)計(jì)數hys的(de)行长度(dù)。

先(xiān)来(lái)讨論用(yòng)于(yú)計(jì)數基準时(shí)間(jiān)的(de)計(jì)數器cnt0。至(zhì)簡設計(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)确定(dìng)計(jì)數器cnt0的(de)加1条(tiáo)件(jiàn):由(yóu)于(yú)該計(jì)數器在(zài)不(bù)停地(dì)計(jì)數,是(shì)永遠(yuǎn)不(bù)停止的(de),因(yīn)此(cǐ)可(kě)以(yǐ)認为(wèi)其加1条(tiáo)件(jiàn)始終(zhōng)有(yǒu)效,可(kě)写成(chéng):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ǐ)繼續的(de)進(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)。

接下(xià)来(lái)确定(dìng)計(jì)數器cnt0的(de)計(jì)數數量(liàng),前(qián)文(wén)分(fēn)析中(zhōng)可(kě)知2个(gè)时(shí)鐘(zhōng)周期(qī)等于(yú)1个(gè)基準时(shí)鐘(zhōng),所(suǒ)以(yǐ)計(jì)數器cnt0的(de)計(jì)數數量(liàng)为(wèi)2

确定(dìng)好(hǎo)了(le)加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ǐ)节(jié)省(shěng)編写代(dài)碼的(de)时(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”,點(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.8-16至(zhì)簡設計(jì)法調用(yòng)計(jì)數器代(dài)碼模板

補充完整後(hòu)得到(dào)計(jì)數基準时(shí)間(jiān)的(de)計(jì)數器cnt0代(dài)碼如(rú)下(xià)。
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
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== 2 -1;

接着讨論用(yòng)于(yú)計(jì)數hys长度(dù)的(de)計(jì)數器cnt1。根(gēn)據(jù)設計(jì)目标(biāo)可(kě)知一(yī)行需要(yào)800个(gè)基準时(shí)鐘(zhōng),因(yīn)此(cǐ)其計(jì)數數量(liàng)为(wèi)800。前(qián)文(wén)設計(jì)中(zhōng)已經(jīng)确定(dìng)一(yī)个(gè)基準时(shí)鐘(zhōng)可(kě)以(yǐ)用(yòng)end_cnt0表(biǎo)示。因(yīn)此(cǐ)計(jì)數器cnt1的(de)加1条(tiáo)件(jiàn)为(wèi)“end_cnt0”,可(kě)写成(chéng):assign add_cnt1 = end_cnt0。繼續調用(yòng)至(zhì)簡設計(jì)法模板,在(zài)命令模式下(xià)輸入(rù)“:Mdyjsq”,點(diǎn)擊回(huí)車,就(jiù)調出(chū)了(le)对(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
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==800-1 ;

确定(dìng)了(le)計(jì)數器cnt0和(hé)cnt1hys信(xìn)号(hào)的(de)設計(jì)則有(yǒu)了(le)对(duì)齊的(de)对(duì)象(xiàng)。從时(shí)序图(tú)可(kě)以(yǐ)發(fà)現(xiàn),hys有(yǒu)两(liǎng)个(gè)變(biàn)化(huà)點(diǎn),一(yī)个(gè)是(shì)cnt1數到(dào)96个(gè)基準时(shí)鐘(zhōng)时(shí),同(tóng)步脈沖a結束(shù),信(xìn)号(hào)由(yóu)0變(biàn)1出(chū)現(xiàn)一(yī)个(gè)上(shàng)升(shēng)沿;另(lìng)一(yī)个(gè)是(shì)當cnt1數到(dào)800个(gè)基準时(shí)鐘(zhōng)时(shí),信(xìn)号(hào)由(yóu)1變(biàn)0出(chū)現(xiàn)下(xià)降沿。下(xià)面(miàn)将其翻譯成(chéng)代(dài)碼,在(zài)編輯模式下(xià)輸入(rù)“Shixu2”,調用(yòng)至(zhì)簡設計(jì)法模板,将模板補充完整得到(dào)场同(tóng)步信(xìn)号(hào)的(de)代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
always  @(posedge clk or negedge rst_n)begin
  
    if(rst_n==1'b0)begin
  
hys<=  0;
  
    end
  
    else if(add_cnt1 &&  cnt1==96-1)begin
  
hys<= 1;
  
    end
  
else if(end_cnt1)begin
  
hys<=  0;
  
    end
  
end

接下(xià)来(lái)讨論vys信(xìn)号(hào)的(de)設計(jì),根(gēn)據(jù)設計(jì)目标(biāo)可(kě)以(yǐ)得到(dào)VGA场同(tóng)步信(xìn)号(hào)的(de)时(shí)序图(tú)如(rú)下(xià)所(suǒ)示:
图(tú)3.8-17VGA场同(tóng)步时(shí)序

可(kě)以(yǐ)看(kàn)出(chū)vys也(yě)是(shì)一(yī)个(gè)周期(qī)性(xìng)地(dì)進(jìn)行高(gāo)低變(biàn)化(huà)的(de)脈沖,本(běn)設計(jì)中(zhōng)图(tú)像分(fēn)辨率選定(dìng)为(wèi)640*480,因(yīn)此(cǐ)使用(yòng)表(biǎo)3.8- 5中(zhōng)的(de)640*480分(fēn)辨率的(de)相應(yìng)參數。同(tóng)步脈沖a的(de)时(shí)間(jiān)是(shì)2行,顯示後(hòu)沿b的(de)时(shí)間(jiān)是(shì)33行,顯示时(shí)序c的(de)时(shí)間(jiān)是(shì)480行,顯示前(qián)沿的(de)时(shí)間(jiān)是(shì)10行,共(gòng)計(jì)525行。这(zhè)里(lǐ)需要(yào)注意(yì),行的(de)單位为(wèi)“基準时(shí)鐘(zhōng)”,前(qián)面(miàn)的(de)設計(jì)中(zhōng)使用(yòng)計(jì)數器cnt0表(biǎo)示一(yī)个(gè)基準时(shí)鐘(zhōng),cnt1表(biǎo)示一(yī)行。由(yóu)于(yú)场同(tóng)步信(xìn)号(hào)是(shì)的(de)單位是(shì)“行”,因(yīn)此(cǐ)可(kě)以(yǐ)使用(yòng)cnt1来(lái)輔助完成(chéng)场同(tóng)步信(xìn)号(hào)的(de)表(biǎo)示;cnt1計(jì)數結束(shù)則代(dài)表(biǎo)一(yī)“行”結束(shù)。
在(zài)场同(tóng)步信(xìn)号(hào)中(zhōng)補充时(shí)間(jiān)信(xìn)号(hào),得到(dào)带(dài)有(yǒu)时(shí)間(jiān)信(xìn)号(hào)的(de)时(shí)序图(tú)如(rú)下(xià)所(suǒ)示。
图(tú)3.8-18带(dài)时(shí)間(jiān)信(xìn)息的(de)VGA场同(tóng)步时(shí)序

分(fēn)析时(shí)序图(tú)發(fà)現(xiàn),若要(yào)産生(shēng)这(zhè)一(yī)时(shí)序還(huán)需要(yào)1个(gè)計(jì)數器,将産生(shēng)这(zhè)一(yī)时(shí)序的(de)計(jì)數器命名为(wèi)cnt2。前(qián)文(wén)強(qiáng)調过(guò)vys的(de)單位是(shì)行,因(yīn)此(cǐ)該計(jì)數器是(shì)用(yòng)来(lái)計(jì)數行的(de)數量(liàng)。因(yīn)此(cǐ)cnt2的(de)加1条(tiáo)件(jiàn)是(shì)一(yī)行結束(shù),前(qián)文(wén)定(dìng)義了(le)cnt1代(dài)表(biǎo)一(yī)行結束(shù),因(yīn)此(cǐ)計(jì)數器cnt2的(de)加1条(tiáo)件(jiàn)即为(wèi)“end_cnt1”,可(kě)写成(chéng):assign add_cnt2 = end_cnt1。分(fēn)析时(shí)序图(tú)可(kě)以(yǐ)知道(dào),該計(jì)數器的(de)周期(qī)为(wèi)525。将cnt2的(de)設計(jì)翻譯为(wèi)代(dài)碼表(biǎo)示,繼續調用(yòng)至(zhì)簡設計(jì)法模板,在(zài)命令模式下(xià)輸入(rù)“:Mdyjsq”,點(diǎn)擊回(huí)車,調出(chū)了(le)对(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
always  @(posedge clk or negedge rst_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 = end_cnt1;
  
assign  end_cnt2 = add_cnt2 && cnt2==525-1 ;

确定(dìng)了(le)計(jì)數器cnt2,則vys信(xìn)号(hào)的(de)設計(jì)就(jiù)有(yǒu)了(le)对(duì)齊的(de)对(duì)象(xiàng)。從时(shí)序图(tú)可(kě)以(yǐ)看(kàn)出(chū)vys有(yǒu)两(liǎng)个(gè)變(biàn)化(huà)點(diǎn),一(yī)个(gè)是(shì)cnt2數到(dào)2个(gè)时(shí),信(xìn)号(hào)值由(yóu)0變(biàn)1;另(lìng)一(yī)个(gè)是(shì)當cnt2數到(dào)525个(gè)时(shí),信(xìn)号(hào)值由(yóu)1變(biàn)0。下(xià)面(miàn)将vys信(xìn)号(hào)翻譯成(chéng)代(dài)碼,在(zài)編輯模式下(xià)輸入(rù)“Shixu2”,調用(yòng)至(zhì)簡設計(jì)法模板後(hòu)将其補充完整,得到(dào)场同(tóng)步信(xìn)号(hào)的(de)代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
always  @(posedge clk or negedge rst_n)begin
  
    if(!rst_n)begin
  
vys<=  1'b0;
  
    end
  
    else if(add_cnt2 &&cnt2 == 2 -  1)begin
  
vys<=  1'b1;
  
    end
  
    else if(end_cnt2)begin
  
vys<=  1'b0;
  
    end
  
end

最(zuì)後(hòu)還(huán)需要(yào)設計(jì)lcd_rgb信(xìn)号(hào)。設計(jì)目标(biāo)中(zhōng)可(kě)知顯示器需要(yào)顯示的(de)顔色(sè)为(wèi)紅(hóng)色(sè),即lcd_rgb輸出(chū)的(de)值为(wèi)“16’b11111_000000_00000”。这(zhè)里(lǐ)一(yī)定(dìng)要(yào)注意(yì),設計(jì)目标(biāo)需要(yào)在(zài)顯示區(qū)域才能(néng)将該值賦給(gěi)lcd_rgb,在(zài)其他(tā)區(qū)域要(yào)将lcd_rgb的(de)值設定(dìng)为(wèi)0

前(qián)文(wén)确定(dìng)VGA背景的(de)时(shí)候有(yǒu)说(shuō)明(míng)过(guò)顯示區(qū)域如(rú)何确定(dìng),场同(tóng)步信(xìn)号(hào)处于(yú)顯示區(qū)域且行同(tóng)步信(xìn)号(hào)也(yě)处于(yú)顯示區(qū)域时(shí)才是(shì)真(zhēn)正(zhèng)的(de)顯示區(qū)域,而(ér)其他(tā)區(qū)域中(zhōng)紅(hóng)、綠(lǜ)、藍(lán)基色(sè)都應(yìng)賦值为(wèi)低電(diàn)平时(shí),從而(ér)实現(xiàn)VGA顔色(sè)顯示。

因(yīn)此(cǐ)本(běn)設計(jì)中(zhōng)的(de)顯示區(qū)域即为(wèi)场同(tóng)步信(xìn)号(hào)vys和(hé)行同(tóng)步信(xìn)号(hào)hys都处于(yú)“顯示區(qū)域c”階(jiē)段(duàn)。結合时(shí)序图(tú)可(kě)知,當cnt1大于(yú)(96+48)并且小于(yú)(96+48+640),cnt2大于(yú)(2+33)并且小于(yú)(2+33+480)时(shí),两(liǎng)个(gè)信(xìn)号(hào)都处于(yú)“顯示區(qū)域”。

綜上(shàng)所(suǒ)述,lcd_rgb的(de)信(xìn)号(hào)輸出(chū)为(wèi),當在(zài)顯示區(qū)域时(shí)輸出(chū)“16’b11111_000000_00000”,否則輸出(chū)0,将其翻譯成(chéng)代(dài)碼如(rú)下(xià)所(suǒ)示:
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
always  @(posedge clk or negedge rst_n)begin
  
    if(rst_n==1'b0)begin
  
lcd_rgb<=  16'h0;
  
    end
  
    else if((cnt1>=(96+48)  &&cnt1<(96+48+640))&& (cnt2>=(2+33)  &&cnt2<(2+33+480)))begin
  
lcd_rgb<= 16'b11111_000000_00000;
  
    end
  
    else begin
  
lcd_rgb<=  0;
  
    end
  
end

至(zhì)此(cǐ),主(zhǔ)體(tǐ)程序已經(jīng)完成(chéng),接下(xià)来(lái)带(dài)領同(tóng)学们(men)将module補充完整。如(rú)果(guǒ)充分(fēn)理解(jiě)了(le)VGA的(de)工作原理,就(jiù)会(huì)發(fà)現(xiàn)利用(yòng)FPGA完成(chéng)VGA图(tú)像顯示還(huán)是(shì)非(fēi)常容易的(de)。截止到(dào)这(zhè)里(lǐ)如(rú)果(guǒ)有(yǒu)读(dú)者(zhě)還(huán)存在(zài)不(bù)能(néng)完全(quán)理解(jiě)的(de)部(bù)分(fēn),建議可(kě)以(yǐ)認真(zhēn)学習本(běn)設計(jì)的(de)項目背景章(zhāng)节(jié),更(gèng)加透徹的(de)学習一(yī)下(xià)VGA的(de)原理。将原理理解(jiě)透徹後(hòu),在(zài)進(jìn)行後(hòu)續幾(jǐ)个(gè)案(àn)例的(de)設計(jì)时(shí)也(yě)会(huì)覺得更(gèng)加輕(qīng)松。

3.3 信(xìn)号(hào)定(dìng)義
接下(xià)来(lái)将module補充完整,首先(xiān)来(lái)定(dìng)義信(xìn)号(hào)類(lèi)型。再次(cì)強(qiáng)調,在(zài)進(jìn)行reg和(hé)wire的(de)判斷的(de)时(shí)候,總(zǒng)容易存在(zài)多(duō)餘的(de)聯想(xiǎng),比如(rú)認为(wèi)reg就(jiù)是(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型都是(shì)并无關(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)。

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)1,需要(yào)用(yòng)1根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)1位。
add_cnt0和(hé)end_cnt0都是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。其值是(shì)0或(huò)者(zhě)1,用(yòng)1根(gēn)線(xiàn)表(biǎo)示即可(kě)。
編輯模式下(xià)輸入(rù)“Reg1”“Wire1”可(kě)調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(dài)碼如(rú)下(xià):
1
reg    [0: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)800,那(nà)如(rú)何确定(dìng)該值对(duì)應(yìng)的(de)位宽(kuān)是(shì)多(duō)少(shǎo)呢?至(zhì)簡設計(jì)法在(zài)这(zhè)里(lǐ)分(fēn)享一(yī)个(gè)非(fēi)常实用(yòng)的(de)技巧,打(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)。利用(yòng)这(zhè)一(yī)方(fāng)法将cnt1的(de)最(zuì)大計(jì)數器800輸入(rù)到(dào)計(jì)算器中(zhōng),如(rú)下(xià)图(tú)所(suǒ)示,可(kě)以(yǐ)看(kàn)出(chū)其位宽(kuān)为(wèi)10。本(běn)設計(jì)的(de)數位比較小,这(zhè)種(zhǒng)方(fāng)法在(zài)後(hòu)續遇到(dào)比較大的(de)數字(zì)时(shí)会(huì)方(fāng)便很多(duō),也(yě)不(bù)容易出(chū)錯。

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

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è)線(xiàn)表(biǎo)示即可(kě)。編輯模式下(xià)輸入(rù)“Wire1”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(dài)碼如(rú)下(xià):
1
reg    [9:0]           cnt1  ;
  
wire                   add_cnt1;
  
wire                   end_cnt1;

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)525,需要(yào)用(yòng)10根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)10位。

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ě)1,用(yòng)1根(gēn)線(xiàn)表(biǎo)示即可(kě)。編輯模式下(xià)輸入(rù)“Wire1”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(dài)碼如(rú)下(xià):
  
reg    [9:0]            cnt2  ;
  
wire                   add_cnt2;
  
wire                   end_cnt2;
  

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

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

至(zhì)此(cǐ),整个(gè)代(dài)碼的(de)設計(jì)工作已經(jīng)完成(chéng)。回(huí)顧一(yī)下(xià)本(běn)工程的(de)整个(gè)代(dài)碼設計(jì),可(kě)以(yǐ)發(fà)現(xiàn)一(yī)共(gòng)需要(yào)3个(gè)計(jì)數器,这(zhè)里(lǐ)同(tóng)樣(yàng)分(fēn)享一(yī)个(gè)至(zhì)簡設計(jì)法代(dài)碼模板,在(zài)“GVIM”中(zhōng)使用(yòng)快(kuài)捷命令“Jsq3”可(kě)以(yǐ)調出(chū)3个(gè)計(jì)數器的(de)模板,調出(chū)的(de)“Jsq3”模板如(rú)下(xià)图(tú)所(suǒ)示,補充完整後(hòu)可(kě)以(yǐ)得到(dào)完整的(de)計(jì)數器代(dài)碼。
图(tú)3.8-20至(zhì)簡設計(jì)法調用(yòng)3个(gè)計(jì)數器模板

最(zuì)終(zhōng)得到(dào)整个(gè)工程的(de)代(dài)碼如(rú)下(xià):
1
  
2
  
module color_exec1(
  
clk   ,
  
rst_n   ,
  
lcd_hs   ,
  
lcd_vs   ,
  
lcd_rgb
  
     );
  
  
input                   clk  ;
  
input                   rst_n  ;
  
output                  lcd_hs  ;
  
output                  lcd_vs  ;
  
output   [15:0]          lcd_rgb       ;
  
  
reg     [0:0]           cnt0  ;
  
wire                   add_cnt0;
  
wire                   end_cnt0;
  
  
reg     [9:0]           cnt1  ;
  
wire                   add_cnt1;
  
wire                   end_cnt1;
  
reg     [9:0]            cnt2  ;
  
wire                   add_cnt2;
  
wire                   end_cnt2;
  
reg     [15:0]     lcd_rgb;
  
  
reg                    hys  ;
  
reg                    vys  ;
  
  
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== 2 -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==800-1 ;
  
  
always @(posedge clk or negedge  rst_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 = end_cnt1;
  
assign end_cnt2 = add_cnt2 &&  cnt2==525-1 ;
  
  
always   @(posedge clk or negedge rst_n)begin
  
    if(rst_n==1'b0)begin
  
hys<= 0;
  
     end
  
     else if(add_cnt1 && cnt1==96-1)begin
  
hys<= 1;
  
     end
  
     else if(end_cnt1)begin
  
hys<= 0;
  
     end
  
end
  
  
always   @(posedge clk or negedge rst_n)begin
  
     if(!rst_n)begin
  
vys<= 1'b0;
  
     end
  
     else if(add_cnt2 && cnt2 == 2 - 1)begin
  
vys<= 1'b1;
  
     end
  
     else if(end_cnt2)begin
  
vys<= 1'b0;
  
     end
  
end
  
  
always   @(posedge clk or negedge rst_n)begin
  
     if(rst_n==1'b0)begin
  
lcd_rgb<= 16'h0;
  
     end
  
     else if((cnt1>=(96+48) &&cnt1<(96+48+640))&&  (cnt2>=(2+33) &&cnt2<(2+33+480)))begin
  
lcd_rgb<= 16'b11111_111111_00000;
  
     end
  
     else begin
  
lcd_rgb<= 0;
  
     end
  
end
  
  
endmodule
下(xià)一(yī)步是(shì)新建工程和(hé)上(shàng)板查看(kàn)現(xiàn)象(xiàng)。

第(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.8-21Quartus新建工程
随後(hòu)会(huì)出(chū)現(xiàn)Quartus新建工程介紹,如(rú)下(xià)图(tú)所(suǒ)示,直(zhí)接點(diǎn)擊“Next”。
图(tú)3.8-22Quartus新建工程介紹

此(cǐ)时(shí)会(huì)出(chū)現(xiàn)工程文(wén)件(jiàn)夾、工程名、頂层模块(kuài)名設置界面(miàn),如(rú)图(tú)3.8- 23所(suǒ)示。設置目录(lù)为(wèi):D:/mdy_book/color_exec1,工程名和(hé)頂层名为(wèi)color_exec1。再次(cì)強(qiáng)調,为(wèi)了(le)避免初学者(zhě)在(zài)後(hòu)續操作中(zhōng)發(fà)生(shēng)程序跳出(chū)未知錯誤的(de)問(wèn)題(tí),強(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.8-23QUARTUS新建工程設置名稱

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

接下(xià)来(lái)進(jìn)行文(wén)件(jiàn)添加,其界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示。點(diǎn)擊右(yòu)側的(de)“Add”按鈕,選擇之前(qián)写好(hǎo)的(de)“color_exec1.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.8-25QUARTUS添加文(wén)件(jiàn)

图(tú)3.8- 26为(wèi)芯片(piàn)選擇页(yè)面(miàn),選擇“Cyclone E”,在(zài)芯片(piàn)型号(hào)選擇处選擇“EP4CE15F23C8”,之後(hòu)點(diǎn)擊“Next”。
图(tú)3.8-26QUARTUS選擇芯片(piàn)型号(hào)

图(tú)3.8- 27为(wèi)QUARTUS設置工具界面(miàn),,不(bù)必做任何修改,直(zhí)接點(diǎn)擊“Next”。
图(tú)3.8-27QUARTUS設置工具界面(miàn)
下(xià)图(tú)为(wèi)QUARTUS新建工程彙總(zǒng)界面(miàn),可(kě)以(yǐ)看(kàn)到(dào)新建工程的(de)彙總(zǒng)情(qíng)況,點(diǎn)擊“Finish”完成(chéng)新建工程。
图(tú)3.8-28QUARTUS新建工程彙總(zǒng)界面(miàn)
4.2 綜合
新建工程步驟完成(chéng)後(hòu),就(jiù)会(huì)出(chū)現(xiàn)如(rú)下(xià)图(tú)所(suǒ)示的(de) QUARTUS新建工程後(hòu)界面(miàn)
图(tú)3.8-29QUARTUS新建工程後(hòu)界面(miàn)
點(diǎn)擊編譯按鈕,可(kě)以(yǐ)对(duì)整个(gè)工程進(jìn)行編譯。編譯成(chéng)功的(de)界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)3.8-30QUARTUS編譯後(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.8-31QUARTUS配置管(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.8- 6中(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)配置的(de)結果(guǒ)如(rú)图(tú)3.8-32。配置完成(chéng)後(hòu),關(guān)閉Pin Planner,软(ruǎn)件(jiàn)自(zì)動(dòng)会(huì)保存管(guǎn)脚配置信(xìn)息。
表(biǎo)3.8 - 6信(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.8-32 QUARTUS配置管(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ú)图(tú)3.8- 33所(suǒ)示。
图(tú)3.8-33QUARTUS編譯選項

當出(chū)現(xiàn)如(rú)下(xià)图(tú)所(suǒ)示的(de)QUARTUS編譯成(chéng)功标(biāo)志,則说(shuō)明(míng)編譯綜合成(chéng)功。
图(tú)3.8-34QUARTUS編譯成(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)源,将開(kāi)發(fà)板的(de)VGA口(kǒu)連(lián)接到(dào)一(yī)台(tái)顯示器上(shàng),然後(hòu)按下(xià)下(xià)方(fāng)藍(lán)色(sè)開(kāi)關(guān),硬(yìng)件(jiàn)連(lián)接完畢。
图(tú)3.8-35開(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)擊“add file”添加“.sof”文(wén)件(jiàn)後(hòu)點(diǎn)擊“Start”,会(huì)在(zài)“Progress”出(chū)現(xiàn)顯示進(jìn)度(dù)。
图(tú)3.8-36QUARTUS界面(miàn)
QUARTUS下(xià)载程序界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示,當進(jìn)度(dù)条(tiáo)到(dào)100%提(tí)示成(chéng)功後(hòu),即可(kě)在(zài)顯示器上(shàng)观察到(dào)相應(yìng)的(de)現(xiàn)象(xiàng)。
图(tú)3.8-37QUARTUS下(xià)载程序界面(miàn)

進(jìn)度(dù)条(tiáo)提(tí)示成(chéng)功後(hòu),如(rú)果(guǒ)操作无誤此(cǐ)时(shí)可(kě)以(yǐ)在(zài)顯示器上(shàng)看(kàn)到(dào)640*480像素的(de)紅(hóng)色(sè)顯示區(qū)域。如(rú)果(guǒ)沒(méi)有(yǒu)顯示成(chéng)功,就(jiù)需要(yào)返回(huí)檢查一(yī)下(xià)連(lián)接是(shì)否到(dào)位,代(dài)碼是(shì)否編写正(zhèng)确。如(rú)果(guǒ)无法自(zì)己完成(chéng)錯誤排查的(de)話(huà),可(kě)以(yǐ)重(zhòng)新按照步驟操作一(yī)遍(biàn),相信(xìn)一(yī)定(dìng)会(huì)达(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_bookcolor_exec1。在(zài)該目录(lù)中(zhōng),新建一(yī)个(gè)名为(wèi)color_exec1.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)脚的(de)对(duì)應(yìng)關(guān)系(xì)見(jiàn)表(biǎo)3.8- 6
表(biǎo)3.8 - 6信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)
  
器件(jiàn)
  
電(diàn)阻网(wǎng)絡轉(zhuǎn)換後(hòu)
  
信(xìn)号(hào)線(xiàn)
信(xìn)号(hào)線(xiàn)
FPGA管(guǎn)脚
FPGA工程信(xìn)号(hào)
CN1
VGA_RED
VGA_R4
E11
lcd_rgb[15]
VGA_R3
C10
lcd_rgb[14]
VGA_R2
D10
lcd_rgb[13]
VGA_R1
E9
lcd_rgb[12]
VGA_R0
E10
lcd_rgb[11]
VGA_GREEN
VGA_G5
D15
lcd_rgb[10]
VGA_G4
C17
lcd_rgb[9]
VGA_G3
C19
lcd_rgb[8]
VGA_G2
E12
lcd_rgb[7]
VGA_G1
C13
lcd_rgb[6]
VGA_G0
E15
lcd_rgb[5]
VGA_BLUE
VGA_B4
D13
lcd_rgb[4]
VGA_B3
E13
lcd_rgb[3]
VGA_B2
D17
lcd_rgb[2]
VGA_B1
E16
lcd_rgb[1]
VGA_B0
C15
lcd_rgb[0]
VGA_HSYNC
VGA_HSYNC
C20
hys
VGA_VSYNC
VGA_VSYNC
D20
vys
X1
SYS_CLK
G1
clk
K1
SYS_RST
AB12
rst_n
写出(chū)頂层信(xìn)号(hào)代(dài)碼:
1
  
2
  
3
  
4
  
5
  
6
  
7
module color_exec1(
  
clk   ,
  
rst_n   ,
  
lcd_hs   ,
  
lcd_vs   ,
  
lcd_rgb
  
     );
聲明(míng)輸入(rù)輸出(chū)屬性(xìng):
1
  
2
  
3
  
4
  
5
input                   clk  ;
  
input                   rst_n  ;
  
output                  lcd_hs  ;
  
output                  lcd_vs  ;
  
output   [15:0]          lcd_rgb       ;
5.1.2信(xìn)号(hào)設計(jì)
首先(xiān)進(jìn)行架構設計(jì)。設計(jì)目标(biāo)中(zhōng)确定(dìng)顯示器中(zhōng)需要(yào)顯示640*480分(fēn)辨率的(de)图(tú)像,因(yīn)此(cǐ)使用(yòng)下(xià)表(biǎo)中(zhōng)的(de)第(dì)一(yī)種(zhǒng)分(fēn)辨率:

表(biǎo)3.8-5常見(jiàn)分(fēn)辨率參數
  
分(fēn)辨率
  
行/列
同(tóng)步脈沖
顯示後(hòu)沿
顯示區(qū)域
顯示前(qián)沿
幀长
單位
640*480
  
/60Hz
96
48
640
16
800
基準时(shí)鐘(zhōng)
2
33
480
10
525
800*600
  
/72Hz
120
64
800
56
1040
基準时(shí)鐘(zhōng)
6
23
600
37
666
800*600
  
/60Hz
128
88
800
40
1056
基準时(shí)鐘(zhōng)
4
23
600
1
628
1024*768
  
/60Hz
136
160
1024
24
1344
基準时(shí)鐘(zhōng)
6
29
768
3
806

根(gēn)據(jù)設計(jì)目标(biāo)得到(dào)VGA行同(tóng)步时(shí)序图(tú)如(rú)下(xià)所(suǒ)示:
图(tú)3.8-15带(dài)时(shí)間(jiān)信(xìn)息的(de)VGA行同(tóng)步时(shí)序

設計(jì)計(jì)數器架構,表(biǎo)示計(jì)數基準时(shí)間(jiān)的(de)計(jì)數器cnt0代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
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== 2 -1;

表(biǎo)示計(jì)數hys长度(dù)的(de)計(jì)數器cnt1代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
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==800-1 ;

設計(jì)行同(tóng)步信(xìn)号(hào)的(de)代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
always   @(posedge clk or negedge rst_n)begin
  
     if(rst_n==1'b0)begin
  
hys<= 0;
  
     end
  
     else if(add_cnt1 && cnt1==96-1)begin
  
hys<= 1;
  
     end
  
               else if(end_cnt1)begin
  
hys<= 0;
  
     end
  
end

設計(jì)VGA场同(tóng)步时(shí)序計(jì)數器cnt2代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
always @(posedge clk or negedge  rst_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 = end_cnt1;
  
assign end_cnt2 = add_cnt2 &&  cnt2==525-1 ;

场同(tóng)步信(xìn)号(hào)的(de)代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
always   @(posedge clk or negedge rst_n)begin
  
     if(!rst_n)begin
  
vys<= 1'b0;
  
     end
  
     else if(add_cnt2 &&cnt2 == 2 - 1)begin
  
vys<= 1'b1;
  
     end
  
     else if(end_cnt2)begin
  
vys<= 1'b0;
  
     end
  
end

設計(jì)lcd_rgb信(xìn)号(hào)代(dài)碼如(rú)下(xià):
1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
always   @(posedge clk or negedge rst_n)begin
  
     if(rst_n==1'b0)begin
  
lcd_rgb<= 16'h0;
  
     end
  
     else if((cnt1>=(96+48) &&cnt1<(96+48+640))&&  (cnt2>=(2+33) &&cnt2<(2+33+480)))begin
  
lcd_rgb<= 16'b11111_000000_00000;
  
     end
  
     else begin
  
lcd_rgb<= 0;
  
     end
  
end

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

5.1.3信(xìn)号(hào)定(dìng)義
首先(xiān)定(dìng)義信(xìn)号(hào)類(lèi)型,cnt0add_cnt0 和(hé) end_cnt0的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
reg     [0:0]           cnt0  ;
  
wire                   add_cnt0;
  
wire                   end_cnt0;

cnt1add_cnt1和(hé)end_cnt1的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
reg     [9:0]           cnt1  ;
  
wire                   add_cnt1;
  
wire                   end_cnt1;
cnt2add_cnt2和(hé)end_cnt2的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
  
reg     [9:0]            cnt2  ;
  
wire                   add_cnt2;
  
wire                   end_cnt2;
  
lcd_rgb的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
reg     [15:0]          lcd_rgb;
hys和(hé)vys的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
1
  
2
reg                    hys  ;
  
reg                    vys  ;
至(zhì)此(cǐ),整个(gè)代(dài)碼的(de)設計(jì)工作已經(jīng)完成(chéng)。最(zuì)終(zhōng)得到(dào)完整的(de)設計(jì)代(dài)碼如(rú)下(xià):
1
  
2
  
module color_exec1(
  
clk   ,
  
rst_n   ,
  
lcd_hs   ,
  
lcd_vs   ,
  
lcd_rgb
  
     );
  
  
input                   clk  ;
  
input                   rst_n  ;
  
output                  lcd_hs  ;
  
output                  lcd_vs  ;
  
output   [15:0]          lcd_rgb       ;
  
  
reg     [0:0]           cnt0  ;
  
wire                   add_cnt0;
  
wire                   end_cnt0;
  
  
reg     [9:0]           cnt1  ;
  
wire                   add_cnt1;
  
wire                   end_cnt1;
  
reg     [9:0]            cnt2  ;
  
wire                   add_cnt2;
  
wire                   end_cnt2;
  
reg     [15:0]     lcd_rgb;
  
  
reg                    hys  ;
  
reg                    vys  ;
  
  
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== 2 -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==800-1 ;
  
  
always @(posedge clk or negedge  rst_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 = end_cnt1;
  
assign end_cnt2 = add_cnt2 &&  cnt2==525-1 ;
  
  
always   @(posedge clk or negedge rst_n)begin
  
     if(rst_n==1'b0)begin
  
hys<= 0;
  
     end
  
     else if(add_cnt1 && cnt1==96-1)begin
  
hys<= 1;
  
     end
  
     else if(end_cnt1)begin
  
hys<= 0;
  
     end
  
end
  
  
always   @(posedge clk or negedge rst_n)begin
  
     if(!rst_n)begin
  
vys<= 1'b0;
  
     end
  
     else if(add_cnt2 && cnt2 == 2 - 1)begin
  
vys<= 1'b1;
  
     end
  
     else if(end_cnt2)begin
  
vys<= 1'b0;
  
     end
  
end
  
  
always   @(posedge clk or negedge rst_n)begin
  
     if(rst_n==1'b0)begin
  
lcd_rgb<= 16'h0;
  
     end
  
     else if((cnt1>=(96+48) &&cnt1<(96+48+640))&&  (cnt2>=(2+33) &&cnt2<(2+33+480)))begin
  
lcd_rgb<= 16'b11111_111111_00000;
  
     end
  
     else begin
  
lcd_rgb<= 0;
  
     end
  
end
  
  
endmodule
下(xià)一(yī)步是(shì)新建工程和(hé)上(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.8-21Quartus新建工程
直(zhí)接點(diǎn)擊“Next”。
图(tú)3.8-22Quartus新建工程介紹
此(cǐ)时(shí)出(chū)現(xiàn)的(de)是(shì)工程文(wén)件(jiàn)夾、工程名、頂层模块(kuài)名設置界面(miàn)(目录(lù)为(wèi):D:/mdy_book/color_exec1,工程名和(hé)頂层名为(wèi)color_exec1),完成(chéng)設置後(hòu)點(diǎn)擊“Next”。
图(tú)3.8-23QUARTUS新建工程設置名稱
選擇“Empty project”後(hòu)點(diǎn)擊“Next”。
图(tú)3.8-24QUARTUS新建工程類(lèi)型
點(diǎn)擊右(yòu)側的(de)“Add”按鈕,選擇“color_exec1.v”文(wén)件(jiàn)後(hòu)點(diǎn)擊“Next”,完成(chéng)文(wén)件(jiàn)添加。
图(tú)3.8-25QUARTUS添加文(wén)件(jiàn)
对(duì)芯片(piàn)型号(hào)進(jìn)行選擇,在(zài)“Device family”選項中(zhōng)選擇“Cyclone E”,“Available devices”選項中(zhōng)選擇“EP4CE15F23C8”,随後(hòu)點(diǎn)擊“Next”。
图(tú)3.8-26QUARTUS選擇芯片(piàn)型号(hào)
直(zhí)接點(diǎn)擊“Next”。
图(tú)3.8-27QUARTUS設置工具界面(miàn)
點(diǎn)擊“Finish”,完成(chéng)新建工程。
图(tú)3.8-28QUARTUS新建工程彙總(zǒng)界面(miàn)
5.2.2綜合
新建工程後(hòu)界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示,點(diǎn)擊“編譯”。
图(tú)3.8-29QUARTUS新建工程後(hòu)界面(miàn)
編譯成(chéng)功如(rú)下(xià)图(tú)所(suǒ)示。
图(tú)3.8-30QUARTUS編譯後(hòu)界面(miàn)
5.3 配置管(guǎn)脚
進(jìn)行管(guǎn)脚配置,在(zài)菜單欄中(zhōng)點(diǎn)擊“Assignments”後(hòu)點(diǎn)擊“Pin Planner”,此(cǐ)时(shí)会(huì)弹出(chū)配置管(guǎn)脚的(de)窗(chuāng)口(kǒu)。
图(tú)3.8-31 QUARTUS配置管(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.8-32QUARTUS配置管(guǎn)脚
5.3.1再次(cì)綜合
在(zài)此(cǐ)打(dǎ)開(kāi)“QUARTUS”软(ruǎn)件(jiàn),在(zài)菜單欄中(zhōng)選擇“Processing”,随後(hòu)點(diǎn)擊“StartCompilation”再次(cì)進(jìn)行綜合。
图(tú)3.8-33QUARTUS編譯選項
出(chū)現(xiàn) QUARTUS 編譯成(chéng)功标(biāo)志时(shí)表(biǎo)示此(cǐ)次(cì)編譯成(chéng)功。
图(tú)3.8-34QUARTUS編譯成(chéng)功标(biāo)志
5.3.2連(lián)接開(kāi)發(fà)板
下(xià)载器接入(rù)電(diàn)腦 USB 接口(kǒu),将開(kāi)發(fà)板接上(shàng)電(diàn)源,開(kāi)發(fà)板的(de)VGA口(kǒu)連(lián)接到(dào)一(yī)台(tái)顯示器上(shàng)後(hòu)按下(xià)藍(lán)色(sè)開(kāi)關(guān)。
图(tú)3.8-35開(kāi)發(fà)板連(lián)接图(tú)
5.3.3上(shàng)板
打(dǎ)開(kāi) QUARTUS 界面(miàn)後(hòu)單擊“  ”图(tú)标(biāo):
图(tú)3.8-36QUARTUS界面(miàn)

點(diǎn)擊“add file”,添加.sof文(wén)件(jiàn)完成(chéng)添加後(hòu)點(diǎn)擊“Start”,在(zài)“Progress”中(zhōng)会(huì)顯示進(jìn)度(dù),當進(jìn)度(dù)条(tiáo)顯示“100%”为(wèi)成(chéng)功,可(kě)观察顯示器現(xiàn)象(xiàng)。
图(tú)3.8-37QUARTUS下(xià)载程序界面(miàn)

第(dì)6节(jié) 擴展(zhǎn)練習
至(zhì)此(cǐ),VGA顯示顔色(sè)設計(jì)已經(jīng)完成(chéng),相信(xìn)同(tóng)学们(men)已經(jīng)可(kě)以(yǐ)完全(quán)掌握这(zhè)一(yī)設計(jì)。那(nà)麼(me)在(zài)掌握这(zhè)項工程後(hòu)可(kě)以(yǐ)多(duō)做一(yī)些思(sī)考,嘗試在(zài)工程原理不(bù)變(biàn)的(de)基礎上(shàng)進(jìn)行一(yī)定(dìng)的(de)數據(jù)調整,試着改變(biàn)图(tú)像顯示區(qū)域或(huò)者(zhě)改變(biàn)顯示顔色(sè)等參數,挑戰一(yī)下(xià)独立完成(chéng)多(duō)个(gè)設計(jì)。也(yě)欢迎有(yǒu)更(gèng)多(duō)思(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⁥⁠⁢

⁧⁨⁥⁨