VGA彩條信號顯示控制器設(shè)計-電子自動化課程報告_第1頁
VGA彩條信號顯示控制器設(shè)計-電子自動化課程報告_第2頁
VGA彩條信號顯示控制器設(shè)計-電子自動化課程報告_第3頁
VGA彩條信號顯示控制器設(shè)計-電子自動化課程報告_第4頁
VGA彩條信號顯示控制器設(shè)計-電子自動化課程報告_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

.電子設(shè)計自動化課程設(shè)計報告學(xué)生姓名: 學(xué) 號: 課設(shè)題目: VGA彩條信號顯示控制器設(shè)計 同組人: 電子設(shè)計自動化課程設(shè)計報告郝欣欣一、課程設(shè)計內(nèi)容1、 使用Verilog語言和Modelsim仿真器完成可顯示橫彩條、豎彩條、棋盤格相間的VGA控制器的設(shè)計和驗證2、 設(shè)計并驗證可顯示英語單詞”HIT”的VGA控制器3、 使用Quartus II和SOPC實驗箱驗證設(shè)計的正確性4、 Verilog代碼要符合微電子中心編碼標(biāo)準(zhǔn)二、FPGA原理CPLD、FPGA是在PAL、GAL等基礎(chǔ)上發(fā)展起來的一種具有豐富的可編程I/O引腳、邏輯宏單元、門電路以及RAM空間的可編程邏輯器件,幾乎所有應(yīng)用門陣列、PLD和中小規(guī)模通用數(shù)字集成電路的場合均可應(yīng)用FPGA和CPLD器件。CPLD的設(shè)計是基于乘積項選擇矩陣來實現(xiàn)的,而FPGA基于查找表來設(shè)計的。查找表就是實現(xiàn)將輸入信號的各種組合功能以一定的次序?qū)懭隦AM中,然后在輸入信號的作用下,輸出特定的函數(shù)運算結(jié)果。其結(jié)構(gòu)圖如圖1所示:圖1. FPGA查找表單元一個N輸入查找表 (LUT,Look Up Table)可以實現(xiàn)N個輸入變量的任何邏輯功能,如 N輸入“與”、 N輸入“異或”等。輸入多于N個的函數(shù)、方程必須分開用幾個查找表( LUT)實現(xiàn)(如圖2所示)。 圖2 FPGA查找表單元內(nèi)部結(jié)構(gòu)該系統(tǒng)設(shè)計中,F(xiàn)PGA芯片用的是ALTERA公司的EP1K30QC208-2,它的系統(tǒng)結(jié)構(gòu)如圖3所示。它由若干個邏輯單元和中央布線池加I/O端口構(gòu)成圖3 EP1K30QC208內(nèi)部結(jié)構(gòu)三、VGA接口VGA的全稱為Video Graphic Array,即顯示繪圖陣列。在PC行業(yè)發(fā)展的初期,VGA以其支持在640X480的較高分辨率下同時顯示16種色彩或256種灰度,同時在320X240分辨率下可以同時顯示256種顏色的良好特性得到廣泛支持。后來,廠商們紛紛在VGA基礎(chǔ)上加以擴充,如將顯存提高至1M并使其支持更高分辨率如800X600或1024X768,這些擴充的模式就稱之為VESA(Video Electronics Standards Association,視頻電子標(biāo)準(zhǔn)協(xié)會)的Super VGA模式,簡稱SVGA,現(xiàn)在的顯卡和顯示器都支持SVGA模式。圖4 VGA接口VGA接口就是顯卡上輸出模擬信號的接口,也叫D-Sub接口。VGA接口是一種D型接口,上面共有15針空,分成三排,每排五個。VGA接口是顯卡上應(yīng)用最為廣泛的接口類型,絕大多數(shù)的顯卡都帶有此種接口。表1 VGA管腳定義管腳定義1紅基色 red 2綠基色 green 3藍(lán)基色 blue4地址碼 ID Bit5自測試 (各家定義不同)6紅地7綠地8藍(lán)地9保留(各家定義不同)10數(shù)字地11地址碼12地址碼13行同步14場同步15地址碼 (各家定義不同)通過模擬VGA接口和計算機連接的顯示器的工作原理,是計算機內(nèi)部以數(shù)字方式生成的顯示圖像信息,被顯卡中的數(shù)字/模擬轉(zhuǎn)換器轉(zhuǎn)變?yōu)镽、G、B三原色信號和行、場同步信號,信號通過電纜傳輸?shù)斤@示設(shè)備中。對于模擬顯示設(shè)備,如模擬CRT顯示器,信號被直接送到相應(yīng)的處理電路,驅(qū)動控制顯像管生成圖像。而對于LCD、DLP等數(shù)字顯示設(shè)備,顯示設(shè)備中需配置相應(yīng)的A/D(模擬/數(shù)字)轉(zhuǎn)換器,將模擬信號轉(zhuǎn)變?yōu)閿?shù)字信號。在經(jīng)過D/A和A/D2次轉(zhuǎn)換后,不可避免地造成了一些圖像細(xì)節(jié)的損失。VGA接口應(yīng)用于CRT顯示器無可厚非,但用于連接液晶之類的顯示設(shè)備,則轉(zhuǎn)換過程的圖像損失會使顯示效果略微下降。CRT顯示器因為設(shè)計制造上的原因,只能接受模擬信號輸入,也就是我們?yōu)槭裁丛贑RT顯示器上只看到VGA接口的原因。四、VGA顯示接口原理計算機顯示器的顯示有許多標(biāo)準(zhǔn),常見的有VGA、SVGA等。本系統(tǒng)采用FPGA來實現(xiàn)圖像顯示控制器,這在產(chǎn)品開發(fā)設(shè)計中有許多實際應(yīng)用。常見的彩色顯示器,一般由CRT(陰極射線管)構(gòu)成,彩色是由G、R、B(綠:Green,紅:Red,藍(lán):Blue)三基色組成。顯示是用逐行掃描的方式解決,陰極射線槍發(fā)出電子束打在涂有熒光粉的熒光屏上,產(chǎn)生GRB三基色,合成一個彩色像素。掃描從屏幕的左上方開始,從左到右,從上到下,進行掃描,每掃完一行,電子束回到屏幕的左邊下一行的起始位置,在這期間,CRT對電子束進行消隱,每行結(jié)束時,用行同步信號進行行同步;掃描完所有行,用場同步信號進行場同步,并使掃描回到屏幕的左上方,同時進行場消隱,預(yù)備下一場的掃描。對于普通的VGA顯示器,其引出線共含5個信號:G、R、B:三基色信號;HS:行同步信號;VS:場同步信號。對于5個信號的時序驅(qū)動,對于VGA顯示器要嚴(yán)格遵循“VGA工業(yè)標(biāo)準(zhǔn)”,即64048060Hz模式。通常我們用的顯示器都滿足工業(yè)標(biāo)準(zhǔn),因此我們設(shè)計VGA控制器時要參考顯示器的技術(shù)規(guī)格。圖5是VGA行掃描、場掃描的時序圖:圖5 VGA行掃描、場掃描時序圖表2 VGA參考時序設(shè)計VGA工業(yè)標(biāo)準(zhǔn)所要求的頻率:時鐘頻率(Clock frequency):25.175MHz(像素輸出的頻率);行頻(Line frequency):31469Hz;場頻(Field frequency):59.94Hz(每秒圖像刷新頻率)。五、FPGA的設(shè)計實現(xiàn)設(shè)計VGA圖像顯示控制需要注意兩個問題:一個是時序的驅(qū)動,這是完成設(shè)計的關(guān)鍵,時序稍有偏差,顯示必然不正常,甚至?xí)p壞彩色顯示器;另一個是VGA信號的電平驅(qū)動。顯示控制器設(shè)計提示:顯示器的技術(shù)規(guī)格提供的行頻一般都滿足在30-45KHz(保守數(shù)據(jù)),場頻一般滿足在50-75Hz(保守數(shù)據(jù)),針對以上保守數(shù)據(jù),我們以30KHz的行頻進行掃描時所需時鐘頻率為:30KHz800(行周期)=24MHz,則場頻為:30KHz525(場周期)=57.14Hz,針對實驗箱的條件,可以用12MHz的信號經(jīng)過倍頻(EP1K30QC208-2芯片特有的功能,在MaxPlusII軟件中調(diào)用參數(shù)可設(shè)置兆功能元件庫mega_lpm的CLKLOCK元件來倍頻)來產(chǎn)生24MHz的時鐘頻率,參考設(shè)計的頂層文件如下圖所示:圖6.VGA接口實現(xiàn)頂視圖VGACORE模塊包含了掃描時序產(chǎn)生模塊、圖像描述模塊。時序產(chǎn)生模塊的設(shè)計可參考圖5所示來設(shè)計,圖像描述模塊主要通過640480個像素點來描述圖像。如本項設(shè)計的彩條信號發(fā)生器可通過圖像描述模塊產(chǎn)生如下表所示的3種顯示模式,共6種顯示變化的圖像。表3 VGA圖形編碼1行彩條1:白黃青綠品紅藍(lán)黑2:黑藍(lán)紅品綠青黃白2豎彩條1:白黃青綠品紅藍(lán)黑2:黑藍(lán)紅品綠青黃白3棋盤格1:棋盤格顯示模式12:棋盤格顯示模式2上表顏色對應(yīng)的編碼為:表4 VGA顏色編碼顏 色黑藍(lán)紅品綠青黃白G00001111R00110011B01010101在設(shè)計完彩條信號發(fā)生器的基礎(chǔ)上很容易完成漢字/圖像的設(shè)計。由于本設(shè)計是對視頻數(shù)據(jù)進行處理,用普通的設(shè)計方法(不使用專用芯片),在單芯片上實現(xiàn)是不可思議的,而在此用FPGA設(shè)計,輕松地達到了面積和速度上的要求。六、程序及仿真(一)、管腳分配本設(shè)計采用主板上的VGA接口實驗?zāi)J剑耗J?時鐘及控制clk-pin_29 clock9 實驗要求采用12M的時鐘rst-pin_240 鍵8,低電平有效,作為使能信號MD -pin_233 鍵1,模式選擇信號,共有6種模式顯示器輸出R -pin_180 PIO29G -pin_181 PIO30B -pin_182 PIO31HS -pin_183 PIO32VS -pin_185 PIO34(二)、彩條發(fā)生器程序?qū)崿F(xiàn)及仿真1、主程序module vga(clk_25m,rst_n,/系統(tǒng)控制hsync,vsync,vga_rgb,MD/ VGA控制);input clk_25m;/ 25MHzinput rst_n;/低電平復(fù)位input MD;/ FPGA與VGA接口信號output hsync;/行同步信號output vsync;/場同步信號output2:0 vga_rgb;/-/ 坐標(biāo)計數(shù)reg9:0 x_cnt;/行坐標(biāo)reg9:0 y_cnt;/列坐標(biāo)always (posedge clk_25m or negedge rst_n)if(!rst_n) x_cnt = 10d0;else if(x_cnt = 10d799) x_cnt = 10d0;else x_cnt = x_cnt+1b1;always (posedge clk_25m or negedge rst_n)if(!rst_n) y_cnt = 10d0;else if(y_cnt = 10d524) y_cnt = 10d0;else if(x_cnt = 10d799) y_cnt = y_cnt+1b1;/-/ 產(chǎn)生VGA場同步,行同步信號reg hsync_r,vsync_r; always (posedge clk_25m or negedge rst_n)if(!rst_n) hsync_r = 1b1;else if(x_cnt = 10d0) hsync_r = 1b0;/產(chǎn)生hsync信號else if(x_cnt = 10d96) hsync_r = 1b1;always (posedge clk_25m or negedge rst_n)if(!rst_n) vsync_r = 1b1; else if(y_cnt = 10d0) vsync_r = 1b0;/產(chǎn)生vsync信號else if(y_cnt = 10d2) vsync_r = 1b1;assign hsync = hsync_r;assign vsync = vsync_r;/-/有效顯示標(biāo)志位產(chǎn)生reg valid_yr;/行顯示有效信號always (posedge clk_25m or negedge rst_n)if(!rst_n) valid_yr = 1b0;else if(y_cnt = 10d32) valid_yr = 1b1;else if(y_cnt = 10d512) valid_yr = 1b0;wire valid_y = valid_yr;reg valid_r;/ VGA有效顯示區(qū)標(biāo)志位always (posedge clk_25m or negedge rst_n)if(!rst_n) valid_r = 1b0;else if(x_cnt = 10d141) & valid_y) valid_r = 1b1;else if(x_cnt = 10d781) & valid_y) valid_r = 1b0;wire valid = valid_r;wire9:0 x_dis;/橫坐標(biāo)顯示有效區(qū)域相對坐標(biāo)值0-639wire9:0 y_dis;/豎坐標(biāo)顯示有效區(qū)域相對坐標(biāo)值0-479assign x_dis = x_cnt - 10d142;assign y_dis = y_cnt - 10d33;/-/-reg2:0 cnt;always (posedge MD or negedge rst_n) beginif(!rst_n)cnt = 3d0;else if(cnt=3d5)cnt=3d0;elsecnt=cnt+3d1;end/- / VGA色彩信號產(chǎn)生/*RGB = 000 黑色 RGB = 100 紅色 = 001 藍(lán)色 = 101紫色 = 010 綠色 = 110黃色 = 011 青色 = 111白色*/-reg2:0 vga_rgb;always( posedge clk_25m)beginif(!valid) vga_rgb = 10d0 & x_dis 10d80) vga_rgb = 10d80 & x_dis 10d160) vga_rgb = 10d160 & x_dis 10d240) vga_rgb = 10d240 & x_dis 10d320) vga_rgb = 10d320 & x_dis 10d400) vga_rgb = 10d400 & x_dis 10d480) vga_rgb = 10d480 & x_dis 10d560) vga_rgb = 10d560 & x_dis 10d640) vga_rgb = 10d0 & x_dis 10d80) vga_rgb = 10d80 & x_dis 10d160) vga_rgb = 10d160 & x_dis 10d240) vga_rgb = 10d240 & x_dis 10d320) vga_rgb = 10d320 & x_dis 10d400) vga_rgb = 10d400 & x_dis 10d480) vga_rgb = 10d480 & x_dis 10d560) vga_rgb = 10d560 & x_dis 10d640) vga_rgb = 10d0 & y_dis 10d60) vga_rgb = 10d60 & y_dis 10d120) vga_rgb = 10d120 & y_dis 10d180) vga_rgb = 10d180 & y_dis 10d240) vga_rgb = 10d240 & y_dis 10d300) vga_rgb = 10d300 & y_dis 10d360) vga_rgb = 10d360 & y_dis 10d420) vga_rgb = 10d420 & y_dis 10d480) vga_rgb = 10d0 & y_dis 10d60) vga_rgb = 10d60 & y_dis 10d120) vga_rgb = 10d120 & y_dis 10d180) vga_rgb = 10d180 & y_dis 10d240) vga_rgb = 10d240 & y_dis 10d300) vga_rgb = 10d300 & y_dis 10d360) vga_rgb = 10d360 & y_dis 10d420) vga_rgb = 10d420 & y_dis 10d480) vga_rgb = 10d0 & y_dis 10d60) vga_rgb = 10d60 & y_dis 10d120) vga_rgb = 10d120 & y_dis 10d180) vga_rgb = 10d180 & y_dis 10d240) vga_rgb = 10d240 & y_dis 10d300) vga_rgb = 10d300 & y_dis 10d360) vga_rgb = 10d360 & y_dis 10d420) vga_rgb = 10d420 & y_dis 10d480) vga_rgb = 3d7; end 10d80,10d160,10d240,10d320,10d400,10d480,10d560,10d640: vga_rgb = 10d0 & y_dis 10d60) vga_rgb = 10d60 & y_dis 10d120) vga_rgb = 10d120 & y_dis 10d180) vga_rgb = 10d180 & y_dis 10d240) vga_rgb = 10d240 & y_dis 10d300) vga_rgb = 10d300 & y_dis 10d360) vga_rgb = 10d360 & y_dis 10d420) vga_rgb = 10d420 & y_dis 10d480) vga_rgb = 3d0; end 10d80,10d160,10d240,10d320,10d400,10d480,10d560,10d640: vga_rgb = vga_rgb+3d1; /每80個橫坐標(biāo)像素點后顯示色彩數(shù)據(jù)增1變化 default: ; endcaseendendendendmodule2、驗證程序timescale 1 ns/ 1 psmodule tb_vga ();reg t_clk_25m;reg t_rst_n; wire t_hsync;wire 2:0 t_vga_rgb;wire t_vsync; wire t_MD; vgahct dut( .clk_25m(t_clk_25m), .hsync(t_hsync), .rst_n(t_rst_n), .vga_rgb(t_vga_rgb), .vsync(t_vsync), .MD(t_MD);initial begin t_clk_25m=0;t_rst_n=1;t)MD=0;#20;t_rst_n=0; #50; t_rst_n=1; $display(Running testbench); #10000000000 $stop; endalways #0.04 t_clk_25m=t_clk_25m; always #200 t_MD=t_MD; endmodule3、仿真波形(三)、字符顯示程序及仿真1、主程序timescale 1ns / 1psmodule vga_char(clk_25m,rst_n,/系統(tǒng)控制hsync,vsync,vga_rgb/ VGA控制);input clk_25m;/ 25MHzinput rst_n;/低電平復(fù)位/ FPGA與VGA接口信號output hsync;/行同步信號output vsync;/場同步信號output2:0 vga_rgb;/-/ 坐標(biāo)計數(shù)reg9:0 x_cnt;/行坐標(biāo)reg9:0 y_cnt;/列坐標(biāo)always (posedge clk_25m or negedge rst_n)if(!rst_n) x_cnt = 10d0;else if(x_cnt = 10d799) x_cnt = 10d0;else x_cnt = x_cnt+1b1;always (posedge clk_25m or negedge rst_n)if(!rst_n) y_cnt = 10d0;else if(y_cnt = 10d524) y_cnt = 10d0;else if(x_cnt = 10d799) y_cnt = y_cnt+1b1;/-/ VGA場同步,行同步信號reg hsync_r,vsync_r;/同步信號 always (posedge clk_25m or negedge rst_n)if(!rst_n) hsync_r = 1b1;else if(x_cnt = 10d0) hsync_r = 1b0;/產(chǎn)生hsync信號else if(x_cnt = 10d96) hsync_r = 1b1;always (posedge clk_25m or negedge rst_n)if(!rst_n) vsync_r = 1b1; else if(y_cnt = 10d0) vsync_r = 1b0;/產(chǎn)生vsync信號else if(y_cnt = 10d2) vsync_r = 1b1;assign hsync = hsync_r;assign vsync = vsync_r;/-/有效顯示標(biāo)志位產(chǎn)生reg valid_yr;/行顯示有效信號always (posedge clk_25m or negedge rst_n)if(!rst_n) valid_yr = 1b0;else if(y_cnt = 10d32) valid_yr = 1b1;else if(y_cnt = 10d512) valid_yr = 1b0;wire valid_y = valid_yr;reg valid_r;/ VGA有效顯示區(qū)標(biāo)志位always (posedge clk_25m or negedge rst_n)if(!rst_n) valid_r = 1b0;else if(x_cnt = 10d141) & valid_y) valid_r = 1b1;else if(x_cnt = 10d781) & valid_y) valid_r = 1b0;wire valid = valid_r;/wire9:0 x_dis;/橫坐標(biāo)顯示有效區(qū)域相對坐標(biāo)值0-639wire9:0 y_dis;/豎坐標(biāo)顯示有效區(qū)域相對坐標(biāo)值0-479/assign x_dis = x_cnt - 10d142;assign y_dis = y_cnt - 10d33;/-/- / VGA色彩信號產(chǎn)生/*RGB = 000 黑色RGB = 100紅色= 001 藍(lán)色= 101紫色= 010綠色= 110黃色= 011青色= 111白色*/*HIT字模參數(shù)*/parameter char_line0=24h000000, char_line1=24h000000, char_line2=24h000000, char_line3=24he77cfe, char_line4=24h421092, char_line5=24h421010, char_line6=24h421010, char_line7=24h421010, char_line8=24h7e1010, char_line9=24h421010, char_linea=24h421010, char_lineb=24h421010, char_linec=24h421010, char_lined=24he77c38, char_linee=24h000000, char_linef=24h000000;reg4:0 char_bit;/顯示位計算always (posedge clk_25m or negedge rst_n)if(!rst_n) char_bit = 5h1f;else if(x_cnt = 10d442) char_bit 10d442 & x_cnt 10d466) char_bit = char_bit-1b1;/依次顯示后面的數(shù)據(jù)reg2:0 vga_rgb;/ VGA色彩顯示寄存器always (posedge clk_25m)if(!valid) vga_rgb 10d442 & x_cnt 10d467) begincase(y_dis)10d231: if(char_line0char_bit) vga_rgb = 3b100;/紅色 else vga_rgb = 3b010;/綠色10d232: if(char_line1char_bit) vga_rgb = 3b100;/紅色 else vga_rgb = 3b010;/綠色10d233: if(char_line2char_bit) vga_rgb = 3b100;/紅色 else vga_rgb = 3b010;/綠色10d234: if(char_line3char_bit) vga_rgb = 3b100;/紅色 else vga_rgb = 3b010;/綠色10d235: if(char_line4char_bit) vga_rgb = 3b100;/紅色 else vga_rgb = 3b010;/綠色10d236: if(char_line5char_bit) vga_rgb = 3b100;/紅色 else vga_rgb = 3b010;/綠色10d237: if(char_line6char_bit) vga_rgb = 3b100;/紅色 else vga_rgb = 3b010;/綠色10d238: if(char_line7char_bit) vga_rgb = 3b100;/紅色 else vga_rgb = 3b010;/綠色10d239: if(char_line8char_bit) vga_rgb = 3b100;/紅色 else vga_rgb = 3b010;/綠色10d240: if(char_line9char_bit) vga_rgb = 3b100;/紅色 else vga_rgb = 3b010;/綠色10d241: if(char_lineachar_bit) vga_rgb = 3b100;/紅色 else vga_rgb = 3b010;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論