顯示器因為其輸出信息量大,輸出形式多樣等特點已經成為現在大多數設計的常用輸出設備。在 FPGA 的設計中可以使用很少的資源,就產生 VGA 各種控制信號。這個示例在 RHicSP2200B FPGA 開發板/學習板上使用 VGA 接口在顯示器上顯示了文字以及簡單的圖形,可以作為VGA 顯示設計的參考。
顯示器術語
像素與分辨率
顯示器的顯示方式有兩種 : A/N(Alphabet/Number:字符/數字)顯示方式 和 APA(All Point Addressable:全點尋址) 顯示方式,即文本顯示方式和圖形顯示方 式。A/N 方式已淘汰不用,目前微機都采用 APA 圖形方式。
顯示器上輸出的一切信息,包括數值、 文字、表格、圖象、動畫等等,都是由光點(即像素)構成的。組成屏幕顯示畫面的最小單位是像素,像素之間的最小距離為點距(Pitch)。點距越小像素密度越大,畫面越 清晰。顯示器的點距有 0.31mm、0.28mm、0.24mm、0.22mm 等多種。
分辨率指整屏顯示的像素的多少,是衡量顯示器的一個常用指標。這同屏幕尺寸及點距密切相關,可用屏幕實際顯示的尺寸與 點距相除來近似求得。點距為 0.28mm 的 15 英寸顯示器,分辨率最高為 1024×768。
顯示器尺寸
顯示器屏幕尺寸以對角線來度量,常用的顯示器有 14、15、17、19、21 英寸等。 顯示器水平方向長度與垂直方向高度之比 一般為 4:3。
掃描頻率
顯示器采用光柵掃描方式,即轟擊熒光屏的電子束在 CRT 屏幕上從左到右(受水 平同步信號 HSYNC 控制)、從上到下(受 垂直同步信號 VSYNC 控制)做有規律的移動。光柵掃描又分逐行掃描和隔行掃描。電子束采用光柵掃描方式,從屏幕左上角一點 開始,向右逐點進行掃描,形成一條水平線;到達最右端后,又回到下一條水平線的左 端,重復上面的過程;當電子束完成右下角一點的掃描后,形成一幀。此后,電子束又回到左上方起點,開始下一幀的掃描。這種 方法也就是常說的逐行掃描顯示。
而隔行掃描指電子束在掃描時每隔一 行掃一線,完成一屏后再返回來掃描剩下的 線,這與電視機的原理一樣。隔行掃描的顯示器比逐行掃描閃爍得更厲害,也會讓使用者的眼睛更疲勞。目前微機所用顯示器幾乎都是逐行掃描。
完成一行掃描所需時間稱為水平掃描時間,其倒數稱為行頻率;完成一幀(整屏) 掃描所需的時間稱為垂直掃描時間,其倒數為垂直掃描頻率,又稱刷新頻率,即刷新一屏的頻率。常見的有 60Hz、75Hz 等,標準 VGA 顯示的場頻60Hz,行頻為31.5kHz。
顯示帶寬
帶寬則指顯示器可以處理的頻率范圍。如果 60Hz 刷新頻率的 VGA 方式,其帶寬達 640×480×60=18.4MHz;70Hz 刷新頻率1024×768 分辨率的 SVGA 方式,其帶寬達1024×768×70=55.1MHz。
早期的顯示器頻率固定。現在流行的多 屏顯示器采用自動跟蹤技術,使顯示器的掃描頻率自動與顯示卡的輸出同步,達到較寬的適用范圍。
顯示卡術語
一個像素點可有多種顏色,由表示該像素的二進位數(又稱像素的位寬)決定。像 素位寬為 8bit,則每個像素有 28=256 種顏 色;位寬為16bit 則有 216=65536 種顏色, 位寬為 24bit 則有 224 即一千七百多萬種顏色。顯示卡內的D/A(數/模)轉換電路將每 個像素的位寬(二進位整數)轉換成對應亮度的 R、G、B(紅、綠、藍)模擬信號,控制屏幕上相應的三色熒光點發光,產生所要求的顏色。
隨著 PC 機的不斷更新換代,顯示控制卡(即顯示適配器)的標準也不斷發展。從最初的 MDA(單色顯示適配器)→CGA(彩色圖形顯示適配器)→EGA(增強型圖形適配器)→VGA(視頻圖形陣列適配器)。VGA 一改以前顯示卡采用的數字視頻信號輸出,而用模擬視頻信號輸出,VGA 卡內的 D/A 轉換器將數字信號轉換為控制 R、G、B 三 原色的模擬信號,使像素色彩變化非常平滑,更適合人的視覺感受。
性能高于VGA 并與之兼容的顯示適配 卡有 TVGA 和 SVGA。隨著 Windows 的普及和對快速度、多色彩、高分辨率的需要, 一些廠家在 SVGA 芯片中增加更多的硬件 來支持 Windows 的加速,這類顯示適配器一般被稱作 AVGA(Accelerated VGA:加速VGA)。目前大多數微機上的顯示卡都屬于 AVGA 類型。
顯示卡主要由圖形處理芯片、視頻存儲器及 BIOS 芯片等組成。一般 AVGA 類型顯示卡的控制器由單塊 AVGA 芯片充當,其中包含的圖形加速控制器對提升圖形功能至關重要。
顯示卡的性能主要取決于卡上使用的圖形芯片。早期的圖形芯片沒有幀緩沖器,有關幀的操作都要由 CPU去處理,降低了顯示速度?,F在多數顯示卡上都設置具有圖形處理功能的加速芯片,可處理像 Windows類型的圖形任務而減少 CPU 參與。更高級的顯示卡上有協處理器,可大大減免 CPU 的處理和參與。
利用視頻存儲器 VRAM 儲存顯示數據,可減少甚至免去訪問系統主存,加快顯示速度。 640×480-16色VGA顯示一屏需640×480×Log216/8=154KB 顯示存儲器,1024×768 真彩顯示一屏則需1024×768×24÷8≈2.3MB。 顯示卡插在系統板的擴展槽內,通過電纜連接到機箱背面的15 針D 型插座連接器上。某些高檔的主板內置了顯示卡的功能。 CRT 顯示器背面有一個與顯示器連接好的視頻電纜,電纜的末端是 15針插入式連接器,使用時將它直接插入主機機箱背面的 15孔D 型插座上即可。
VGA 時序設計
在 VGA 中,水平同步脈沖在光柵掃描 線需要回到水平開始位置也就是屏幕的左邊的時候插入,垂直同步脈沖在光柵掃描線需要回到垂直開始位置也就是屏幕的上方的時候插入。復合同步脈沖是水平同步脈沖與垂直同步信號的組合。RGB 為像素數據,在沒有圖像投射到屏幕時插入消隱信號,當消隱有效時,RGB 信號無效。
水平時序
在水平時序中,包括以下幾個時序參數:水平同步脈沖寬度;水平同步脈沖結束到水平門的開始之間的寬度;一個視頻行可視區域的寬度;一個完整的視頻行的寬度,從水平同步脈沖的開始到下一個水平同步脈沖的開始。
垂直時序
在垂直時序與水平時序類似,包括以下幾個不同的時序參數:垂直同步脈沖寬度; 垂直同步結束到垂直門的開始之間的寬度; 一個視頻幀可是區域的寬度;一個完整視頻幀的寬度,從垂直同步脈沖到下一個垂直同步脈沖的開始。
組合視頻幀時序
視頻幀由 vlen 個視頻行組成,每一行由 hlen 個像素,水平門與垂直門的“與”函數 即為可是區域,圖像的其他區域為消隱區。 目前存在很多種不同VGA 模式,以下就常見的各種模式種參數進行說明,給出 VGA 模式中各種時序參數可以參考。
表 1 水平時序
說明:有效時間包括 6 列過掃描邊界列,有些時序表將這幾列加在后沿和前沿中
表 2 垂直時序
說明:有效時間包括 4 行過掃描邊界行,有些時序表中將這幾行加在后沿和前沿中。
*當有效時間增加時,它超過了 vsync 信號的上升沿,因此前沿為-1
在實際設計中如何通過不同的系統頻率確定適當的顯示模式 ? 例如在 RhicSP2200 開發板中FPGA 的系統時鐘頻率為 50MHz。這個時鐘頻率可以用來設計 顯示 800X600 模式,為了顯示器顯示效果好,采用場頻(刷新頻率)75Hz,那么幀長可以確定為 666,而行總長設計為 1000 像素。
根據以上所述,我們可以設計如Examples1類似HDL代碼,使用這段代碼在Valid 有效期間對RGB 中 Blue 兩位賦值1,得到一個藍色屏幕顯示邊界如圖1 所示。
色彩原理
RGB 色彩模式是工業界的一種顏色標準,是通過對紅(R)、綠(G)、藍(B)三個顏色 通道的變化以及它們相互之間的疊加來得到各式各樣的顏色的,RGB 即是代表紅、 綠、藍三個通道的顏色,通過三種基本顏色亮度值從 0“255 不同產生出其他各種顏色,這種模式叫加色模式。為什么叫加色模式呢,舉個例子,通常使用的電視屏幕和電腦 屏幕上的顯示就是這樣的模式,在沒有圖象時,屏幕是黑的,若R,G,B 三色亮度都為255 時混合疊加打在屏幕上時則顯示成白色。就是加起來是白色的意思,叫加色模式。這個標準幾乎包括了人類視力所能感知的所有顏色,是目前運用最廣的顏色系統之 一。
而與我們電腦相關的地方,就是目前的顯示器大都是采用了 RGB 顏色標準,這就是為什么它對我們來說這么重要了。
在顯示器上,是通過電子槍打在屏幕的紅、綠、藍三色發光極上來產生色彩的,目前的電腦一般都能顯示 32 位顏色,約有一百萬種以上的顏色。如果說它所顯示的顏色 還不能完全吻合自然界中的某種色彩的話,那已經幾乎是我們肉眼所不能分辯出來的了。
而 RhicSP2200 開發板系統中每一個色 彩都是使 用 2bit 來 表示的,因 此可見 RhicSP2200 系統可以出現64 種不同的顏 色。其他色彩的使用請在實際工作中更多的加以體會。
顯示
通過以上的講述,已經可以在計算機顯示器上顯示一個有顏色的區域了,在這個小節中我們再舉一個簡單的例子,在顯示器中顯示兩個鑲嵌的正方形,字符等顯示與其類似,可以參考瑞芯科技其他設計示例。 例如我們可以在 xpos 與 ypos 的某一區間給 RGB 信號賦不同的值將得到如圖2 所示的顯示效果。
例子 1:使用 50MHz 時鐘頻率產生的 VGA 同步脈沖以及視頻有效信號
module sync_gen_50m(
rst_n,// synthesis attribute clock_buffer of rst_n is ibufg;
clk,
hsync,
vsync,
valid,
x_cnt,
y_cnt
);
input rst_n ;
input clk ;
output hsync ;
output vsync ;
output valid ;
output [9:0] x_cnt ;
output [9:0] y_cnt ;
reg hsync ;
reg vsync ;
reg valid ;
reg [9:0] x_cnt ;
reg [9:0] y_cnt ;
always @ ( posedge clkornegedge rst_n )
if ( !rst_n )
x_cnt <= 10‘d0;
else if ( x_cnt == 10’d1000 )
x_cnt <= 10‘d0;
else
x_cnt <= x_cnt + 1’b1;
always @ ( posedge clkornegedge rst_n )
if ( !rst_n )
y_cnt <= 10‘d0;
else if ( y_cnt == 10’d665 )
y_cnt <= 10‘d0;
else if ( x_cnt == 10’d1000 )
y_cnt <= y_cnt + 1‘b1;
always @ ( posedge clkornegedge rst_n )
if ( !rst_n )
begin
hsync <= 1’b0;
vsync <= 1‘b0;
end
else
begin
hsync <= x_cnt <= 10’d50;
vsync <= y_cnt <= 10‘d6;
end
always @ ( posedge clkornegedge rst_n )
if ( !rst_n )
valid <= 1’b0;
else
valid <= ( ( x_cnt > 10‘d180 ) && ( x_cnt < 10’d980) &&
( y_cnt > 10‘d35) && ( y_cnt < 10’d635) );
endmodule
-
FPGA
+關注
關注
1629文章
21729瀏覽量
603010 -
顯示器
+關注
關注
21文章
4970瀏覽量
139927 -
頻率
+關注
關注
4文章
1494瀏覽量
59212
發布評論請先 登錄
相關推薦
評論