99在线精品免费视频九九视-99在线精品视频-99在线精品视频免费观里-99在线精品视频在线观看-99在线免费播放



官方論壇
官方淘寶
官方博客
微信公眾號
點擊聯系吳工 點擊聯系周老師
您的當前位置:主頁 > FPGA入門基礎 >

至簡設計法之VGA接口設計-明德揚科教(mdy-edu.com)

發布時間:2019-12-10   作者:admin 瀏覽量:


VGA(Video Graphics Array)IBM1987年隨PS/2機一起推出的一種視頻傳輸標準,當時具有分辨率高、顯示速率快、顏色豐富等優點,在彩色顯示器領域得到了廣泛的應用。

VGA接口就是顯卡上輸出模擬信號的接口,也叫D-Sub接口。VGA接口是一種D型口,上面共有15針空,分成三排,每排五個。VGA接口是目前中低端電腦配置上的主流口。

VGA顯示中,FPGA需要產生5個信號:RGB三基色信號,行同步信號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個重要的信號,其中RGB是數據信號;HSVS是控制信號。

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

fpga

2-27 FPGA與顯示器的結構圖

明德揚的第二代開發板,R3位數字信號組成VGA_R0VGA_R1VGA_R2G3位數字信號組成(VGA_G0VGA_G1VGA_G2);B2位數字信號組成(VGA_B0VGA_B1)。并通過電壓進行分壓,而得到不同的電平。實際電路如圖2-28

fpga培訓

2-28開發板RGB數模轉換電路圖

2. VGA顯示

1顯示原理

通用VGA顯示卡系統主要由控制電路、顯示緩存區和視頻BIOS程序三個部分組成。控制電路主要完成時序發生、顯示緩沖區數據操作、主時鐘選擇和DA轉換等功能;顯示緩沖區提供顯示數據緩存空間;視頻BIOS作為控制程序固化在顯示卡的ROM中。

實現VGA顯示,除了實現時序控制,還必須有其他功能單元的支持才能實現完整的圖像顯示。

1控制器:VGA顯示有多種模式,需要通過控制器實現模式間切換,還需要對顯示的內容進行接收、處理和顯示。所以控制器的性能越高,數據更新和顯示效果就越好。顯示數據緩存區:VGA顯示要求顯存速度快、容量大。讀速度要達到65MHz以下,存儲容量至少要2MB。可采用高速SRAMSDRAM作為顯示數據緩存。
2數模轉換器DACVGA顯示對數模轉換DAC有如下要求:一是高速轉換,轉換的速度應該在80MHz或以上;二是同步性好,能保證 RGB三路信號的同步性;三是有相應的精度。可選擇一種包括38位高速DA的專用視頻芯片。

3數據源及其接口:要提高VGA顯示的效率,就要不斷更新數據,同時還要保證實時性,因此需要非常高的接口速度。VGA顯示卡雖可達到100Mbps的數據更新速度,但是一般設備、特別是嵌入式設備達不到這么高的速度,而且大多數情況下也不需要這么高的數據更新率。目前常用接口為EPP接口、USB接口、 TCP/IPRS232C/485等。其中TCP/IPEPP接口和USB接口是基于計算機的,速度較快;TCP/IPRS232C/485是基于網絡通信的接口,其中RS485速度雖慢,但應用廣泛且容易實現遠程控制。

2掃描方式

顯示器采用光柵掃描方式,即轟擊熒光屏的電子束在CRT屏幕上從左到右(受水平同步信號 HSYNC 控制)、從上到下(受垂直同步信號 VSYNC 控制)做有規律的移動。電子束采用光柵掃描方式,從屏幕左上角一點開始,向右逐點進行掃描,形成一條水平線;到達最右端后,又回到下一條水平線的左端,重復上面的過程;當電子束完成右下角一點的掃描后,形成一幀。此后,電子束又回到左上方起點,開始下一幀的掃描。這種方法也就是常說的逐行掃描顯示。

3掃描頻率

完成一行掃描的時間稱為水平掃描時間,其倒數稱為行頻率;完成一幀(整屏)掃描的時間稱為垂直掃描時間,其倒數稱為場頻率,即刷新一屏的頻率,常見的有60Hz75Hz等等。標準的VGA顯示的場頻60Hz

4數據寬度和格式

如果VGA顯示真彩色BMP圖像,則需要RGB三個分量各8位,即24位表示一個像素值,很多情況下還采用32位表示一個像素值。為了節省顯存的存儲空間,可采用高彩色圖像,即每個像素值由16位表示,RGB三個分量分別使用5位、6位、5位,比真彩色圖像數據量減少一半,同時又能滿足顯示效果。

5SRAM地址的產生方法

主時鐘作為像素點計數脈沖信號,同時提供顯存SRAM的讀信號和DA轉換時鐘,它所驅動的計數器的輸出端作為讀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最方便,每個時鐘送一個數據。

fpga培訓 fpga培訓


4. VGA接口項目

屏幕分辨率為640/480,刷新速率為60Hz,要求在屏幕中間顯示一個200*200的綠色方塊,屏幕其他地方均為黑色

硬件培訓

2-29 顯示效果圖

1明確功能

明確VGA接口的行信號時序圖

fpga月薪

明確VGA接口的場信號時序圖:

fpga前景

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 計數結構圖


因為從復位后開始,hysvys不斷循環產生波形,其順序為同步脈沖、顯示后沿、顯示時序段和顯示前沿,所以使用計數器hs_cntvs_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定義特殊點

按要求,本題是黑色區域和綠色區域的組合,因此我們要定義好兩個區域的邊界。

fpga求職

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至簡設計法計數器代碼

 1 always @(posedge clk or negedge rst_n)begin
 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

完整代碼:

 1 //按照第六步第3點,寫出hys的代碼
 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技術資訊:明德揚科教

了解>>至簡設計法




  •   
  •   
  •   
  •  
  • FPGA教育領域第一品牌
  • 咨詢熱線:020-39002701
  • 技術交流Q群:544453837
主站蜘蛛池模板: 黄色免费片 | 黑人巨大进入美女深处的视频 | 国产精品三级在线观看 | 永久免费mv网站入口 | 久久三级毛片 | 精品国产丝袜自在线拍国 | 综合久久久久6亚洲综合 | 日本免费在线一区 | 亚洲六月丁香六月婷婷花 | 成人黄页网站 | 国产精品一卡二卡三卡 | 色播视频在线观看免费 | 久久香蕉国产在产线看观看 | 最新国产三级在线不卡视频 | 深夜福利国产精品亚洲尤物 | 国产制服丝袜在线观看 | 国产日韩欧美一区二区 | 精品免费视在线视频观看 | 国产亚洲精品自在线观看 | 亚洲不卡在线视频 | 国产福利免费视频 | 亚洲欧美久久久久久久久久爽网站 | 黄色大毛片 | 亚洲欧美一区二区三区四区 | 日韩欧美国产一区二区三区四区 | 亚洲免费午夜视频 | 日韩精品久久久久影院 | 九九线精品视频 | 中文日产国产精品久久 | 成人娱乐网 | 国产精品搭讪系列在线观看 | 国产九九精品 | 日本不卡高清中文字幕免费 | 亚洲欧美日韩国产精品26u | 伊人久久综合影院 | 国产美女主播一级成人毛片 | 自拍视频在线观看视频精品 | 久久午夜精品2区 | 国产精品国产三级在线专区 | 日本黄色大片 | 久久久精|