VGA(Video Graphics Array)是IBM在1987年隨PS/2機一起推出的一種視頻傳輸標準,當時具有分辨率高、顯示速率快、顏色豐富等優點,在彩色顯示器領域得到了廣泛的應用。
VGA接口就是顯卡上輸出模擬信號的接口,也叫D-Sub接口。VGA接口是一種D型口,上面共有15針空,分成三排,每排五個。VGA接口是目前中低端電腦配置上的主流口。
VGA顯示中,FPGA需要產生5個信號:R、G、B三基色信號,行同步信號HS,場同步信號VS。信號列表如表2-5。
表2.5 VGA信號列表
信號線 |
定義 |
HS |
行同步信號 (3.3V電平) |
VS |
場/幀同步信號(3.3V電平) |
R |
紅基色(0-0.714V模擬信號) |
G |
綠基色(0-0.714V模擬信號) |
B |
藍基色(0-0.714V模擬信號) |
VGA接口圖如下:
圖2-26 VGA接口實物圖
以上接口的5個孔對應著我們FPGA中產生的5個重要的信號,其中R、G、B是數據信號;HS、VS是控制信號。
1. VGA色彩原理
像素是產生各種顏色的基本單元。根據物理學中的混色原理,三色發光的亮度比例適當,可呈現白色。適當的調整發光比例可以出現不同的顏色。
表2.6 三基色顏色編碼表
顏色 |
黑 |
藍 |
紅 |
紫 |
綠 |
青 |
黃 |
白 |
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 |
以上RBG一共有8組合,也就是可以產生8種顏色。但顯示器顯示的色彩卻是非常豐富,遠遠多于8種顏色,這是如何做到的呢?
原因就是對于顯示器來說,RGB三個信號其實是模擬信號,其電平的高低,可以表示顏色的深淺。利用這個原理,我們就可以產生豐富的色彩。為了控制電壓的高低,我們就必須用到DA芯片。例如下圖中,FPGA產生RGB三種信號,這時RGB都是多位的數字信號。DA芯片根據數字信號的值,產生不同電壓的模擬信號rgb。連接框圖如圖2-27
圖2-27 FPGA與顯示器的結構圖
明德揚的第二代開發板,R由3位數字信號組成(VGA_R0,VGA_R1,VGA_R2);G由3位數字信號組成(VGA_G0,VGA_G1,VGA_G2);B由2位數字信號組成(VGA_B0,VGA_B1)。并通過電壓進行分壓,而得到不同的電平。實際電路如圖2-28。
圖2-28開發板RGB數模轉換電路圖
2. VGA顯示
(1)顯示原理
通用VGA顯示卡系統主要由控制電路、顯示緩存區和視頻BIOS程序三個部分組成。控制電路主要完成時序發生、顯示緩沖區數據操作、主時鐘選擇和D/A轉換等功能;顯示緩沖區提供顯示數據緩存空間;視頻BIOS作為控制程序固化在顯示卡的ROM中。
實現VGA顯示,除了實現時序控制,還必須有其他功能單元的支持才能實現完整的圖像顯示。
1)控制器:VGA顯示有多種模式,需要通過控制器實現模式間切換,還需要對顯示的內容進行接收、處理和顯示。所以控制器的性能越高,數據更新和顯示效果就越好。顯示數據緩存區:VGA顯示要求顯存速度快、容量大。讀速度要達到65MHz以下,存儲容量至少要2MB。可采用高速SRAM或SDRAM作為顯示數據緩存。
2)數模轉換器DAC:VGA顯示對數模轉換DAC有如下要求:一是高速轉換,轉換的速度應該在80MHz或以上;二是同步性好,能保證 R、G、B三路信號的同步性;三是有相應的精度。可選擇一種包括3路8位高速D/A的專用視頻芯片。
3)數據源及其接口:要提高VGA顯示的效率,就要不斷更新數據,同時還要保證實時性,因此需要非常高的接口速度。VGA顯示卡雖可達到100Mbps的數據更新速度,但是一般設備、特別是嵌入式設備達不到這么高的速度,而且大多數情況下也不需要這么高的數據更新率。目前常用接口為EPP接口、USB接口、 TCP/IP、RS232C/485等。其中TCP/IP、EPP接口和USB接口是基于計算機的,速度較快;TCP/IP、RS232C/485是基于網絡通信的接口,其中RS485速度雖慢,但應用廣泛且容易實現遠程控制。
(2)掃描方式
顯示器采用光柵掃描方式,即轟擊熒光屏的電子束在CRT屏幕上從左到右(受水平同步信號 HSYNC 控制)、從上到下(受垂直同步信號 VSYNC 控制)做有規律的移動。電子束采用光柵掃描方式,從屏幕左上角一點開始,向右逐點進行掃描,形成一條水平線;到達最右端后,又回到下一條水平線的左端,重復上面的過程;當電子束完成右下角一點的掃描后,形成一幀。此后,電子束又回到左上方起點,開始下一幀的掃描。這種方法也就是常說的逐行掃描顯示。
(3)掃描頻率
完成一行掃描的時間稱為水平掃描時間,其倒數稱為行頻率;完成一幀(整屏)掃描的時間稱為垂直掃描時間,其倒數稱為場頻率,即刷新一屏的頻率,常見的有60Hz,75Hz等等。標準的VGA顯示的場頻60Hz。
(4)數據寬度和格式
如果VGA顯示真彩色BMP圖像,則需要R、G、B三個分量各8位,即24位表示一個像素值,很多情況下還采用32位表示一個像素值。為了節省顯存的存儲空間,可采用高彩色圖像,即每個像素值由16位表示,R、G、B三個分量分別使用5位、6位、5位,比真彩色圖像數據量減少一半,同時又能滿足顯示效果。
(5)讀SRAM地址的產生方法
主時鐘作為像素點計數脈沖信號,同時提供顯存SRAM的讀信號和D/A轉換時鐘,它所驅動的計數器的輸出端作為讀SRAM的低位地址。行同步信號作為行數計數脈沖信號,它所驅動的計數器的輸出端作為讀SRAM的高位地址。由于采用兩片SRAM,所以最高位地址作為SRAM的片選使用。由于信號經過CPLD內部邏輯器件時存在一定的時間延遲,在CPLD產生地址和讀信號讀取數據時,讀信號、地址信號和數據信號不能滿足SRAM讀數據的時序要求。可以利用硬件電路對讀信號進行一定的時序調整,使各信號之間能夠滿足讀SRAM和為DAC輸入數據的時序要求。
3. VGA支持的規格
我們以第一個分辨率640/480來分析,其刷新速率是60Hz,每幅圖像有525行,每行有800個值。也就是說完成一幅圖像約是1s/60=16.6ms,完成一行約為16.6ms/525=31.75us,完成一個像素傳送約來31.75us/800=40ns。因此為了方便設計,接口的時候設為25MHz最方便,每個時鐘送一個數據。
![]() |
![]() |
4. VGA接口項目
屏幕分辨率為640/480,刷新速率為60Hz,要求在屏幕中間顯示一個200*200的綠色方塊,屏幕其他地方均為黑色。
圖2-29 顯示效果圖
(1)明確功能
明確VGA接口的行信號時序圖。
明確VGA接口的場信號時序圖:
圖2-30 VGA接口時序圖
從時序圖我們可以知道,在第33~516個行周期中的第142~787個時鐘周期間,VGA輸入數據有效。另外,根據屏幕分辨率和刷新速率,我們可以得出使用25MHz系統時鐘最適合。
表2.7 信號列表
信號名 |
I/O |
位寬 |
說明 |
clk |
I |
1 |
系統工作時鐘25MHz |
rst_n |
I |
1 |
系統復位信號,低電平有效 |
hys |
O |
1 |
行同步信號 |
vys |
O |
1 |
場同步信號 |
rgb_data |
O |
8 |
輸出顯示的RGB數據 |
(2)功能波形
本項目的功能波形在上一步已經給出,只需要在VGA輸入數據有效期間,根據題目要求把rgb_data變為綠色或黑色即可。
(3)計數結構
圖2-31 計數結構圖
因為從復位后開始,hys與vys不斷循環產生波形,其順序為同步脈沖、顯示后沿、顯示時序段和顯示前沿,所以使用計數器hs_cnt與vs_cnt,分別用于計數clk個數和行周期個數。
(4)加一結束條件
hs_cnt的加一條件:由于hs_cnt在模塊開始工作后不斷計數,因此其加1條件為1;
vs_cnt的加一條件:在hs_cnt計數結束時加1,因此其加1條件為end_hs_cnt;
hs_cnt的結束條件:hs_cnt==800 – 1;
vs_cnt的結束條件:vs_cnt==525 – 1;
(5)定義特殊點
按要求,本題是黑色區域和綠色區域的組合,因此我們要定義好兩個區域的邊界。
圖2-32 特殊點示意圖
圖2-32有幾個特殊點,需要我們記住。
hs_cnt的結束條件:hs_cnt==800-1,定為end_hs_cnt。
vs_cnt的結束條件:vs_cnt==525-1,定為end_vs_cnt。
首先我們從時序圖可知有效區域,為第33~516個行周期中的第142~787個時鐘周期。由于
要在中間顯示綠色,因此先計算屏幕中點位置:
由于綠色方框像素為200*200,即有
除此之外的有效區域其他部分均為黑色。
(6)完整性檢查
1.計數器hs_cnt
hs_cnt的初值:0;
hs_cnt的加1條件:1;
hs_cnt的結束值:計數至hs_cnt==800 - 1;
2.計數器vs_cnt
vs_cnt的初值:0;
vs_cnt的加1條件:end_hs_cnt;
vs_cnt的結束值:計數至vs_cnt==525 - 1;
3.行信號hys
hys的初值:0;
hys由0變1:hs_cnt==10’d95 && add_hs_cnt;
hys由1變0:end_hs_cnt;
4.場信號vys
vys的初值:0;
vys由0變1:vs_cnt==1’d1 && add_vs_cnt;
vys由1變0:end_vs_cnt;
5.RGB數據信號rgb_data
rgb_data的初值:0;
rgb_data有效區域:hs_cnt_add && hs_cnt>=141 && hs_cnt<787 && vs_cnt>=32 && vs_cnt<516;
rgb_data為綠色:在有效區域且hs_cnt>=364 && hs_cnt<564 && vs_cnt>=174 && vs_cnt<374;
rgb_data為黑色:有效區域的其他部分;
(7)至簡設計法計數器代碼
2 if(rst_n==1'b0)begin
3 hs_cnt <= 0;
4 end
5 else if(add_hs_cnt)begin
6 if(end_hs_cnt) begin
7 hs_cnt <= 0;
8 end
9 else begin
10 hs_cnt <= hs_cnt+1;
11 end
12 end
13 end
14
15 assign add_hs_cnt = 1;
16 assign end_hs_cnt = add_hs_cnt&& hs_cnt==800-1;
17
18 always @(posedge clk or negedge rst_n)begin
19 if(rst_n==1'b0)begin
20 vs_cnt <= 0;
21 end
22 else if(add_vs_cnt)begin
23 if(end_vs_cnt) begin
24 vs_cnt <= 0;
25 end
26 else begin
27 vs_cnt <= vs_cnt+1;
28 end
29 end
30 end
31
32 assign add_vs_cnt = end_hs_cnt;
33 assign end_vs_cnt = add_vs_cnt&&vs_cnt==525-1;
34
完整代碼:
2 assign hs_rise = add_hs_cnt && hs_cnt == 10'd95;
3
4 always @(posedge clk or negedge rst_n)begin
5 if(rst_n==1'b0)begin
6 hys <= 1;
7 end
8 else if(hs_rise)begin
9 hys <= 1;
10 end
11 else if(end_hs_cnt)begin
12 hys <= 0;
13 end
14 end
15
16 //按照第六步第4點,寫出vys的代碼
17 assign vs_rise = add_vs_cnt && vs_cnt == 1'd1;
18
19 always @(posedge clk or negedge rst_n)begin
20 if(rst_n==1'b0)begin
21 vys <= 1;
22 end
23 else if(vs_rise)begin
24 vys <= 1;
25 end
26 else if(end_vs_cnt)begin
27 vys <= 0;
28 end
29 end
30
31 //有效區域與顯示綠色區域定義
32 parameter X0 = 141;
33 parameter X1 = 787;
34 parameter Y0 = 32 ;
35 parameter Y1 = 516;
36 parameter X_CENT = 464;
37 parameter Y_CENT = 274;
38 parameter GREEN = 8'b000_111_00;
39 parameter BLACK = 8'b000_000_00;
40
41 assign valid_area = add_hs_cnt&&hs_cnt>=X0 &&hs_cnt<X1&&vs_cnt>=Y0
42 && vs_cnt<Y1;
43 assign green_area = valid_area&&(hs_cnt>=X_CENT-100
44 && hs_cnt<X_CENT+100 && vs_cnt>=Y_CENT-100
45 &&vs_cnt<Y_CENT+100);
46
47 //按照第六步第5點,寫出rgb_data的代碼
48 always @(posedge clk or negedge rst_n)begin
49 if(rst_n==1'b0)begin
50 rgb_data <= 8'h00;
51 end
52 else if(valid_area)begin
53 if(green_area)begin
54 rgb_data <= GREEN;
55 end
56 else begin
57 rgb_data <= BLACK;
58 end
59 end
60 else begin
61 rgb_data <= 8'h00;
62 end
63 end
64
技術交流QQ群:544453837
更多FPGA技術資訊:明德揚科教
了解>>至簡設計法