3.9VGA顯示矩陣--明德?lián)P科教(1)(mdy-edu.com)
本文的文檔編號(hào):001700000021
需要看對(duì)應(yīng)的視頻,請(qǐng)點(diǎn)擊視頻編號(hào):001700000442
1、至間原理與應(yīng)用配套的案例和PPT講解
2、本設(shè)計(jì)需要通過VGA線將顯示器和開發(fā)板進(jìn)行連接,F(xiàn)PGA在連接成功后產(chǎn)生640*480分辨率,刷新頻率為60Hz的VGA時(shí)序,使得顯示器產(chǎn)生顯示一幅完整的矩陣圖像。這幅矩陣圖像即為顯示屏邊緣上顯示一個(gè)寬為20像素的紅色邊框,在屏幕的中央顯示一個(gè)長為150像素、高為100像素的綠色矩形。步驟性教學(xué);
3、Altera和Xilinx入門學(xué)習(xí)案例文檔
第三篇?FPGA至簡設(shè)計(jì)項(xiàng)目實(shí)踐
??第九章?VGA顯示矩陣
第1節(jié)?項(xiàng)目背景
VGA的顯示背景與原理在上一章“VGA顯示顏色”的案例分享中已經(jīng)有了比較詳細(xì)的解釋,這里就不再進(jìn)行展開講解,如果還有不理解的讀者朋友可以回到上一章中的項(xiàng)目背景部分進(jìn)行閱讀學(xué)習(xí)。
第2節(jié)?設(shè)計(jì)目標(biāo)
上一章實(shí)現(xiàn)了VGA顯示顏色的設(shè)計(jì),這一章中將進(jìn)行更高一級(jí)的設(shè)計(jì)學(xué)習(xí)——VGA顯示矩陣圖像。按照至簡設(shè)計(jì)法的思路,在進(jìn)行設(shè)計(jì)之前首先明確設(shè)計(jì)目標(biāo)。明確了設(shè)計(jì)目標(biāo)后,后續(xù)的每一步操作都是圍繞設(shè)計(jì)目標(biāo)進(jìn)行展開。如果沒有牢記設(shè)計(jì)目標(biāo)就開始動(dòng)手進(jìn)行實(shí)踐操作,最終的作品也是東拼西湊的產(chǎn)物,一旦在設(shè)計(jì)過程中出現(xiàn)了問題就需要花費(fèi)大量的精力進(jìn)行尋找修復(fù)。建議初學(xué)者在開始學(xué)習(xí)時(shí)就養(yǎng)成良好的設(shè)計(jì)習(xí)慣,才能在后續(xù)的職業(yè)生涯中受益。
本設(shè)計(jì)需要通過VGA連接線將顯示器和開發(fā)板進(jìn)行連接,F(xiàn)PGA在連接成功后產(chǎn)生640*480分辨率,刷新頻率為60Hz的VGA時(shí)序,使得顯示器產(chǎn)生顯示一幅完整的矩陣圖像。這幅矩陣圖像即為顯示屏邊緣上顯示一個(gè)寬為20像素的紅色邊框,在屏幕的中央顯示一個(gè)長為150像素、高為100像素的綠色矩形。
顯示器一般都具有分辨率自適應(yīng)功能,無須設(shè)置就能識(shí)別不同分辨率的圖像。本設(shè)計(jì)的相應(yīng)參數(shù)參見表3.9-1中的第一行。其中,行的單位為“基準(zhǔn)時(shí)鐘”,即頻率為25MHz、周期為40ns的時(shí)鐘,列的單位則為“行”,請(qǐng)讀者朋友們一定要注意區(qū)分。
表3.9–1 VGA常用分辨率

設(shè)計(jì)完成后,通過VGA連接線將顯示器和開發(fā)板的VGA接口相連,連接示意圖如下:
圖3.9-1教學(xué)板連接示意圖

上板后顯示器展示效果圖如下圖所示,不同的顯示器會(huì)有一定的色差,需要以實(shí)際顯示情況為主。可以看到顯示屏邊緣上顯示一個(gè)紅色邊框(邊框?qū)挒?0像素),在屏幕的中央顯示一個(gè)綠色矩形(矩形長為150像素,高為100像素),實(shí)現(xiàn)了矩陣圖像。想要觀看連接后演示視頻效果的讀者朋友可以登陸至簡設(shè)計(jì)法官網(wǎng)學(xué)習(xí):www.mdy-edu.com/xxxx。

圖3.9-2VGA顯示矩陣效果圖
第3節(jié)?設(shè)計(jì)實(shí)現(xiàn)
確定了設(shè)計(jì)目標(biāo)后本書會(huì)逐步分析講解工程的制作步驟。建議初學(xué)者認(rèn)真學(xué)習(xí)每一步,因?yàn)檫@里分享給同學(xué)們的不僅僅是案例,還有在操作過程中的一些設(shè)計(jì)理念及原理。當(dāng)然本書也會(huì)分享一些至簡設(shè)計(jì)法的設(shè)計(jì)技巧,最終希望每一位讀者都可以具備獨(dú)立設(shè)計(jì)工程的能力。當(dāng)然已經(jīng)擁有扎實(shí)的功底、只是想要根據(jù)步驟完成項(xiàng)目的讀者朋友們可以跳過此部分,直接進(jìn)入第五節(jié)中的簡略版操作步驟分享。
3.1?頂層接口
新建目錄:D:mdy_book ec_exec1,在該目錄中新建一個(gè)名為rec_exec1.v的文件。用GVIM打開后開始編寫代碼。這里再次強(qiáng)調(diào),初學(xué)者一定要按照本書提供的文件路徑以及文件名進(jìn)行設(shè)置,避免后面出現(xiàn)未知錯(cuò)誤。
分析設(shè)計(jì)目標(biāo)可知,本設(shè)計(jì)中FPGA產(chǎn)生VGA時(shí)序,即控制VGA_R4~R0、VGA_G5~G0、VGA_B4~B0、VGA_HSYNC和VGA_VSYNC,從而使顯示器呈紅色、綠色的矩陣顯示。其中,F(xiàn)PGA可根據(jù)時(shí)序產(chǎn)生高低電平從而控制VGA_HSYNC和VGA_VSYNC。而顏色數(shù)據(jù),由于本設(shè)計(jì)需要的顯示的顏色數(shù)據(jù)是固定的紅色和綠色,可通過FPGA自身產(chǎn)生而不需要外部輸入圖像的數(shù)據(jù)。那么在FPGA的工程設(shè)計(jì)中可以定義輸出信號(hào)hys表示行同步,定義輸出信號(hào)vys表示場同步,定義一個(gè)16位的信號(hào)lcd_rgb進(jìn)行RGB輸出,其中l(wèi)cd_rgb[15:11]表示VGA_R4~0、lcd_rgb[10:5]表示VGA_G5~0、lcd_rgb[4:0]表示VGA_B4~0。當(dāng)然,本設(shè)計(jì)中還需要時(shí)鐘信號(hào)clk和復(fù)位信號(hào)rst_n來進(jìn)行工程控制。
綜上所述,本工程需要五個(gè)信號(hào):時(shí)鐘信號(hào)clk,復(fù)位信號(hào)rst_n,場同步信號(hào)vys、行同步信號(hào)hys和RGB輸出信號(hào)lcd_rgb。信號(hào)和硬件的對(duì)應(yīng)關(guān)系如下表所示。
表3.9 - 2信號(hào)和管腳關(guān)系

通過以上分析可以寫出頂層信號(hào)代碼。將module的名稱定義為color_exec1,已經(jīng)知道該模塊有五個(gè)信號(hào):clk、rst_n、lcd_hs、lcd_vs和lcd_rgb,將與外部相連接的輸入/輸出信號(hào)列出,從而實(shí)現(xiàn)信號(hào)與管腳的連接。具體頂層代碼如下:

隨后聲明信號(hào)的輸入輸出屬性,模塊中需要聲明這一信號(hào)對(duì)于FPGA來說,屬于輸入信號(hào)還是輸出信號(hào)。信號(hào)若為輸入的話則聲明其為input,若為輸出則聲明其為ouput。在本設(shè)計(jì)中,由于clk是外部的晶振輸入給FPGA的,因此在FPGA中clk是輸入信號(hào)input;同樣地,rst_n是外部按鍵輸送給FPGA的,在FPGA中同樣為輸入信號(hào)input;lcd_hs、lcd_vs和lcd_rgb是FPGA輸出給顯示器的,因此其為輸出信號(hào)output,并且其中clk、rst_n、lcd_hs、lcd_vs的值都是0或者1,用一根線即可,lcd_rgb信號(hào)的位寬為16位。根據(jù)以上分析補(bǔ)充輸入輸出端口定義,其具體代碼如下:

3.2?信號(hào)設(shè)計(jì)
分析設(shè)計(jì)目標(biāo)可知,首先需要設(shè)計(jì)行同步信號(hào)hys,其時(shí)序圖表示如下:
圖3.9-3VGA行同步信號(hào)時(shí)序
根據(jù)時(shí)序圖可以看到,hys就是一個(gè)周期性進(jìn)行高低變化的脈沖。根據(jù)設(shè)計(jì)目標(biāo)可知圖像分辨率選定為640*480,因此使用下表中的640*480分辨率的相應(yīng)參數(shù)。即同步脈沖a的時(shí)間是96個(gè)基準(zhǔn)時(shí)鐘,而顯示后沿b的時(shí)間是48個(gè)基準(zhǔn)時(shí)鐘周期,顯示時(shí)序c的時(shí)間是640個(gè)基準(zhǔn)時(shí)鐘,顯示前沿的時(shí)間是16個(gè)基準(zhǔn)時(shí)鐘,共計(jì)800個(gè)基準(zhǔn)時(shí)鐘(800=96+48+640+16)。
表3.9–1 VGA常用分辨率

這里需要注意,一個(gè)基準(zhǔn)時(shí)鐘是40ns,而至簡設(shè)計(jì)法開發(fā)板的時(shí)鐘周期是20ns,因此基于至簡設(shè)計(jì)法開發(fā)板的VGA工程設(shè)計(jì)中,采用2個(gè)時(shí)鐘時(shí)間代表一個(gè)基準(zhǔn)時(shí)鐘時(shí)間。在圖中補(bǔ)充對(duì)應(yīng)的時(shí)間信號(hào),帶有時(shí)間信號(hào)的時(shí)序圖如下圖所示。

圖3.9-4帶時(shí)間信息的VGA行同步信號(hào)時(shí)序
根據(jù)至簡設(shè)計(jì)法的理論,分析波形圖和設(shè)計(jì)目標(biāo)后可以得到本設(shè)計(jì)的計(jì)數(shù)器架構(gòu):本設(shè)計(jì)需要使用2個(gè)計(jì)數(shù)器,一個(gè)計(jì)數(shù)器cnt0用來計(jì)數(shù)一個(gè)基準(zhǔn)時(shí)間,另一個(gè)計(jì)數(shù)器cnt1用來計(jì)數(shù)hys的行長度。
先來討論用于計(jì)數(shù)基準(zhǔn)時(shí)間的cnt0。至簡設(shè)計(jì)法的計(jì)數(shù)器只考慮兩個(gè)因素:加1條件和計(jì)數(shù)數(shù)量,只要確定相應(yīng)邏輯,就能完成計(jì)數(shù)器代碼設(shè)計(jì)。首先確定計(jì)數(shù)器cnt0的加1條件:由于該計(jì)數(shù)器在不停地計(jì)數(shù),永遠(yuǎn)不停止,因此可以認(rèn)為其加1條件是始終有效,可寫成:assign add_cnt0==1。
此處可能有同學(xué)存在疑惑加1條件的概念是什么?這里以停車位來進(jìn)行比喻,一般情況下對(duì)每個(gè)停車位置會(huì)進(jìn)行對(duì)應(yīng)編號(hào),但是如果某個(gè)位置上放置了一塊石頭無法作為停車位時(shí),該位置就不能獲得對(duì)應(yīng)的編號(hào)。反之則可以認(rèn)為停車位編號(hào)的加1條件就是:對(duì)應(yīng)位置上沒有石頭,其可以繼續(xù)的進(jìn)行編號(hào),即assign add_cnt0 =?“沒有石頭”。因此如果在設(shè)計(jì)中計(jì)數(shù)器一直沒有阻礙地進(jìn)行計(jì)數(shù)工作,就可以認(rèn)為加1條件是一直有效的。
接下來確定計(jì)數(shù)器cnt0的計(jì)數(shù)數(shù)量,前文分析中可知2個(gè)時(shí)鐘周期等于1個(gè)基準(zhǔn)時(shí)鐘,所以計(jì)數(shù)器cnt0的計(jì)數(shù)數(shù)量為2。
確定好了加1條件和計(jì)數(shù)數(shù)量后開始進(jìn)行代碼編寫。相信各位往常都是一行行輸入代碼,但是至簡設(shè)計(jì)法有一個(gè)小技巧,可以為大家編寫代碼省去不少時(shí)間,并且一定程度上降低了代碼的出錯(cuò)率。至簡設(shè)計(jì)法將日常代碼中常用到的固定部分做成了模板,進(jìn)行代碼編程時(shí)可以調(diào)用相應(yīng)模板后根據(jù)邏輯輸入對(duì)應(yīng)設(shè)計(jì)的變量將代碼補(bǔ)充完整。這里就可以用模板編寫計(jì)數(shù)器代碼,感受一下這個(gè)炫酷的功能。
打開GVIM,在命令模式下輸入“:Mdyjsq”,點(diǎn)擊回車,就調(diào)出了對(duì)應(yīng)模板,如下圖所示。隨后再將本案例中的變量填到模板里面,就可以得到完整正確的計(jì)數(shù)器代碼。

圖3.9-5至簡設(shè)計(jì)法調(diào)用計(jì)數(shù)器代碼模板
補(bǔ)充完整后得到計(jì)數(shù)基準(zhǔn)時(shí)間的計(jì)數(shù)器cnt0代碼如下。

接著討論用于計(jì)數(shù)hys長度的計(jì)數(shù)器cnt1。根據(jù)設(shè)計(jì)目標(biāo)可知一行需要800個(gè)基準(zhǔn)時(shí)鐘,因此其計(jì)數(shù)數(shù)量為800。前文設(shè)計(jì)中已經(jīng)確定一個(gè)基準(zhǔn)時(shí)鐘可以用end_cnt0表示,因此計(jì)數(shù)器cnt1的加1條件為“end_cnt0”,可寫成:assign add_cnt1 = end_cnt0。繼續(xù)調(diào)用至簡設(shè)計(jì)法模板,在命令模式下輸入“:Mdyjsq”,點(diǎn)擊回車調(diào)出對(duì)應(yīng)模板后將“add_cnt1”和“end_cnt1”補(bǔ)充完整,得到該計(jì)數(shù)器的代碼如下:

確定了計(jì)數(shù)器cnt0和cnt1,hys信號(hào)的設(shè)計(jì)就有了對(duì)齊的對(duì)象。從時(shí)序圖可以發(fā)現(xiàn),hys有兩個(gè)變化點(diǎn),一個(gè)是cnt1數(shù)到96個(gè)基準(zhǔn)時(shí)鐘時(shí),同步脈沖a結(jié)束,信號(hào)由0變1出現(xiàn)一個(gè)上升沿;另一個(gè)是當(dāng)cnt1數(shù)到800個(gè)基準(zhǔn)時(shí)鐘時(shí),信號(hào)由1變0出現(xiàn)下降沿。下面將其翻譯成代碼,在編輯模式下輸入“Shixu2”,調(diào)用至簡設(shè)計(jì)法模板,將模板補(bǔ)充完整后得到場同步信號(hào)的代碼如下:

接下來討論vys信號(hào)的設(shè)計(jì),根據(jù)設(shè)計(jì)目標(biāo)可以得到VGA場同步信號(hào)的時(shí)序圖如下所示:

圖3.9-6VGA場同步信號(hào)時(shí)序
可以看出vys也是一個(gè)周期性地進(jìn)行高低變化的脈沖。本設(shè)計(jì)中圖像分辨率選定為640*480,因此使用表3.9-?1中的640*480分辨率的相應(yīng)參數(shù)。同步脈沖a的時(shí)間是2行的時(shí)間,顯示后沿b的時(shí)間是33行,顯示時(shí)序c的時(shí)間是480行,顯示前沿的時(shí)間是10行,共計(jì)525行(525=2+33+480+10)。這里需要注意:行的單位為“基準(zhǔn)時(shí)鐘”,前文設(shè)計(jì)中使用計(jì)數(shù)器cnt0表示一個(gè)基準(zhǔn)時(shí)鐘,cnt1表示一行。由于場同步信號(hào)是的單位是“行”,因此可以使用cnt1來輔助進(jìn)行場同步信號(hào)的表示,即cnt1計(jì)數(shù)結(jié)束則代表一“行”結(jié)束。
在場同步信號(hào)中補(bǔ)充時(shí)間信號(hào),得到帶有時(shí)間信號(hào)的時(shí)序圖如下所示。

圖3.9-7帶時(shí)間信息的VGA場同步時(shí)序
很顯然,若要產(chǎn)生這一時(shí)序還需要另1個(gè)計(jì)數(shù)器,將該計(jì)數(shù)器命名為cnt2。該計(jì)數(shù)器的作用是計(jì)數(shù)行的數(shù)量,所以cnt2的加1條件為一行結(jié)束,即end_cnt1,可寫成:assign add_cnt2 = end_cnt1。從上圖可知,該計(jì)數(shù)器的計(jì)數(shù)數(shù)量為525。綜上所述得到該計(jì)數(shù)器的代碼如下所示:

確定了計(jì)數(shù)器cnt2,則vys信號(hào)的設(shè)計(jì)就有了對(duì)齊的對(duì)象。從時(shí)序圖可以發(fā)現(xiàn):vys有兩個(gè)變化點(diǎn),一個(gè)是cnt2數(shù)到2個(gè)時(shí),信號(hào)值由0變1;另一個(gè)是當(dāng)cnt2數(shù)到525個(gè)時(shí),信號(hào)值由1變0。下面將vys信號(hào)翻譯成代碼,在編輯模式下輸入“Shixu2”,調(diào)用至簡設(shè)計(jì)法模板,然后補(bǔ)充完整,得到場同步信號(hào)的代碼如下:

圖3.9-8VGA顯示矩陣效果圖
最后還需要設(shè)計(jì)lcd_rgb信號(hào)。從設(shè)計(jì)目標(biāo)可知顯示器中一共需要顯示三種顏色:紅色、綠色和白色。上一章節(jié)中列出了設(shè)計(jì)使用顏色的相應(yīng)信號(hào)值,當(dāng)lcd_rgb等于16’b11111_000000_00000時(shí)表示紅色;lcd_rgb等于16’b00000_111111_00000時(shí)表示綠色;lcd_rgb等于16’b11111_111111_11111時(shí)表示白色。這里一定要注意,設(shè)計(jì)目標(biāo)需要在“顯示區(qū)域”才能進(jìn)行顏色賦值,在其他區(qū)域內(nèi)要將lcd_rgb的值賦值為0。
確定VGA背景的講解部分有講解過顯示區(qū)域如何確定,場同步信號(hào)處于顯示區(qū)域且行同步信號(hào)也處于顯示區(qū)域時(shí)才是真正的顯示區(qū)域,而其他區(qū)域中紅、綠、藍(lán)基色都應(yīng)賦值為低電平時(shí),從而實(shí)現(xiàn)VGA顏色顯示。而針對(duì)本設(shè)計(jì),可以看到為了實(shí)現(xiàn)矩陣顯示,不同顯示區(qū)域顯示顏色不同,因此需要仔細(xì)區(qū)分在什么時(shí)候分別輸出相應(yīng)的顏色賦值。
結(jié)合VGA時(shí)序可以知道行同步信號(hào)的顯示區(qū)域在同步脈沖和顯示后沿之后且在顯示前沿之前,轉(zhuǎn)化為代碼表示即為cnt1>=(96+48)&&cnt1<(96+48+640);場同步信號(hào)的顯示區(qū)域同樣為同步脈沖和顯示后沿之后且顯示前沿之前,轉(zhuǎn)化為代碼表示即為cnt2>=(2+33) &&cnt2<(2+33+480)。顯示器的實(shí)際顯示區(qū)域是行同步信號(hào)和場同步信號(hào)都處于顯示區(qū)域,轉(zhuǎn)化為代碼表示即顯示區(qū)域?yàn)?cnt1>=(96+48)&&cnt1<(96+48+640)),并且(cnt2>=(2+33) &&cnt2<(2+33+480))。
在顯示區(qū)域中包含了紅色區(qū)域、綠色區(qū)域和白色區(qū)域。下面按照VGA顯示矩陣效果圖將其翻譯為代碼表示。
代碼編寫時(shí)可以將紅色區(qū)域看為單獨(dú)的四個(gè)長方形,因此紅色區(qū)域可表示為:
(cnt1>=(96+48)&&cnt1<(96+48+20))?或者
(cnt1>=(96+48+620)&&cnt1<(96+48+640))?或者
(cnt2>= (2+33) &&cnt2<(2+33+20))?或者
? ?? ?? ? (cnt2>= (2+33+460) &&cnt2<(2+33+480))
此時(shí),lcd_rgb的輸出為“16’b11111_000000_00000”;
綠色區(qū)域可以看做一個(gè)完整的長方形,綠色區(qū)域可表示為:
(cnt1>=(96+48+320-75)&&cnt1<(96+48+320+75))?并且
(cnt2>= (2+33+240-50) &&cnt2<(2+33+240+50))
此時(shí),lcd_rgb的輸出為“16’b00000_111111_00000”;
本項(xiàng)目一共需要顯示三種顏色,綠色和紅色區(qū)域已經(jīng)表示出來了,那么白色區(qū)域即為顯示區(qū)域中非紅色區(qū)域并且非綠色區(qū)域的部分,此時(shí)lcd_rgb輸出“16’b11111_111111_11111”。
綜上所述,可以寫出lcd_rgb的代碼如下:

至此,主體程序已經(jīng)完成。
3.3?信號(hào)定義
接下來將module補(bǔ)充完整,首先來定義信號(hào)類型。再次強(qiáng)調(diào),在進(jìn)行reg和wire的判斷的時(shí)候,總?cè)菀状嬖诙嘤嗟穆?lián)想,比如認(rèn)為reg就是寄存器,wire是線;或者認(rèn)為reg會(huì)綜合成寄存器,wire不會(huì)綜合成寄存器。但是這些其實(shí)和reg型還是wire型都并無關(guān)系,在信號(hào)類型的判斷時(shí)不需要做任何的聯(lián)想,只要記住一個(gè)規(guī)則“用always實(shí)現(xiàn)的是reg型,其他都是wire型”就可以了。
cnt0是用always產(chǎn)生的信號(hào),因此類型為reg。cnt0計(jì)數(shù)的最大值為1,需要用1根線表示,即位寬是1位。
add_cnt0和end_cnt0都是用assign方式設(shè)計(jì)的,因此類型為wire。其值是0或者1,用1根線表示即可。
編輯模式下輸入“Reg1”“Wire1”可調(diào)用至簡設(shè)計(jì)法模板,補(bǔ)充完整后得到代碼如下:

cnt1是用always產(chǎn)生的信號(hào),因此類型為reg。cnt1計(jì)數(shù)的最大值為800,那如何確定該值對(duì)應(yīng)的位寬是多少呢?至簡設(shè)計(jì)法在這里分享一個(gè)非常實(shí)用的技巧,打開計(jì)算器,點(diǎn)擊“查看”,選擇“程序員”模式,在“十進(jìn)制”下將信號(hào)值輸入進(jìn)去,就會(huì)獲得對(duì)應(yīng)的信號(hào)位寬。利用這一方法將cnt1的最大計(jì)數(shù)器800輸入到計(jì)算器中,如下圖所示,可以看出其位寬為10。本設(shè)計(jì)的數(shù)位比較小,這種方法在后續(xù)遇到比較大的數(shù)字時(shí)會(huì)方便很多,且不容易發(fā)生錯(cuò)誤。

圖3.9-9通過計(jì)算器獲取信號(hào)位寬
因此可得cnt1定義代碼如下:

add_cnt1和end_cnt1都是用assign方式設(shè)計(jì)的,因此類型為wire,并且其值是0或者1,用1根線表示即可。編輯模式下輸入“Wire1”調(diào)用至簡設(shè)計(jì)法模板,補(bǔ)充完整后得到代碼如下:

cnt2是用always產(chǎn)生的信號(hào),因此類型為reg。cnt2計(jì)數(shù)的最大值為525,需要用10根線表示,即位寬是10位。其具體代碼如下:

add_cnt2和end_cnt2都是用assign方式設(shè)計(jì)的,因此類型為wire,并且其值是0或者1,用1根線表示即可。編輯模式下輸入“Wire1”調(diào)用至簡設(shè)計(jì)法模板,補(bǔ)充完整后得到代碼如下:

lcd_rgb是用always方式設(shè)計(jì)的,因此類型為reg。其位寬是16位,16根線表示即可。編輯模式下輸入“Reg16”調(diào)用至簡設(shè)計(jì)法模板,補(bǔ)充完整后得到代碼如下:

hys和vys是用always方式設(shè)計(jì)的,因此類型為reg,其值是0或1,需要1根線表示即可。編輯模式下輸入“Reg1”調(diào)用至簡設(shè)計(jì)法模板,補(bǔ)充完整后得到代碼如下:

至此,整個(gè)代碼的設(shè)計(jì)工作已經(jīng)完成?;仡櫼幌卤竟こ痰恼麄€(gè)代碼設(shè)計(jì),可以發(fā)現(xiàn)一共需要3個(gè)計(jì)數(shù)器,這里同樣分享一個(gè)至簡設(shè)計(jì)法代碼模板,在“GVIM”中使用快捷命令“Jsq3”可以調(diào)出3個(gè)計(jì)數(shù)器的模板,調(diào)出的“Jsq3”模板如下圖所示,補(bǔ)充完整后可以得到完整的計(jì)數(shù)器代碼。

圖3.9-10至簡設(shè)計(jì)法調(diào)用3個(gè)計(jì)數(shù)器模板
最終得到整個(gè)工程的代碼如下:

下一步是新建工程和上板查看現(xiàn)象。
未完請(qǐng)看3.9VGA顯示矩陣--明德?lián)P科教(2)(mdy-edu.com)