vivado实现VGA
vivado實現VGA
VGA原理
VGA 的英文全稱是Video Graphic Array,即顯示繪圖陣列。 VGA 支持在640X480 的較高分辨率下同時顯示16種色彩或256 種灰度,同時在320X240 分辨率下可以同時顯示256 種顏色。肉眼對顏色的敏感遠大于分辨率,所以即使分辨率較低圖像依然生動鮮明。 VGA 由于良好的性能迅速開始流行,廠商們紛紛在VGA 基礎上加以擴充,如將顯存提高至1M 并使其支持更高分辨率如800X600或1024X768,這些擴充的模式就稱之為VESA(Video Electronics Standards Association,視頻電子標準協會) 的Super VGA 模式,簡稱SVGA,現在的顯卡和顯示器都支持SVGA 模式。不管是VGA 還是SVGA,使用的連線都是15針的梯形插頭,傳輸模擬信號。
VGA接口信號
目前大多數計算機與外部顯示設備之間都是通過模擬VGA 接口連接,計算機內部以數字方式生成的顯示圖像信息,被顯卡中的數字/模擬轉換器轉變為R、G、 B三原色信號和行、場同步信號,信號通過電纜傳輸到顯示設備中。本例中,VGA 接口是標準的15 針接口,有五個接口信號。
行同步(水平同步)與場同步(垂直同步)
為了實現發送端與接受端圖像各點一一正確對應,發送端與接收端的掃描必須同步。同步脈沖是周期穩定,邊沿陡峭的脈沖。按我國電視標準,行同步脈沖的頻率等于行頻為15.625KHZ,行周期為64us。在電視技術中常以64us 作為時間單位,并以H 表示,即1H=64us。場同步脈沖頻率等于場頻為50HZ,場周期為20ms,312.5H。行同步脈沖寬度為4.7us 左右,場同步脈沖寬度為2.5~3H。
Verilog代碼實現VGA
輸入信號分別為: clk、 switch。 clk 是時鐘信號, switch 是選擇模式信號,分別對應橫彩條、豎彩條及兩種棋盤格。
module vga( clock, switch, disp_RGB, hsync, vsync ); input clock; //系統輸入時鐘 100MHz input [1:0]switch; output [2:0]disp_RGB; //VGA 數據輸出 output hsync; //VGA 行同步信號output vsync; //VGA 場同步信號 reg [9:0] hcount; //VGA 行掃描計數器 reg [9:0] vcount; //VGA 場掃描計數器 reg [2:0] data; reg [2:0] h_dat; reg [2:0] v_dat; reg flag; reg [1:0]cnt; wire hcount_ov; wire vcount_ov; wire dat_act; wire hsync; wire vsync; reg vga_clk; //VGA 行、場掃描時序參數表 parameter hsync_end = 10'd95, hdat_begin = 10'd143, hdat_end = 10'd783, hpixel_end = 10'd799, vsync_end = 10'd1, vdat_begin = 10'd34, vdat_end = 10'd514, vline_end = 10'd524; always @(posedge clock) beginif(cnt==3)cnt <= 0;elsecnt <= cnt + 1;endalways @(posedge clock) beginif(cnt < 2)vga_clk <= 1;elsevga_clk <= 0;end //************************VGA 驅動部分*******************************//行掃描 always @(posedge vga_clk)beginif (hcount_ov)hcount <= 10'd0;elsehcount <= hcount + 10'd1;end assign hcount_ov = (hcount == hpixel_end); //場掃描 always @(posedge vga_clk)beginif (hcount_ov)beginif (vcount_ov)vcount <= 10'd0;elsevcount <= vcount + 10'd1;endend assign vcount_ov = (vcount == vline_end); //數據、同步信號輸 assign dat_act = ((hcount >= hdat_begin) && (hcount < hdat_end)) && ((vcount >= vdat_begin) && (vcount < vdat_end)); assign hsync = (hcount > hsync_end); assign vsync = (vcount > vsync_end); assign disp_RGB = (dat_act) ? data : 3'h00; //************************顯示數據處理部分*******************************// always @(posedge vga_clk)begincase(switch[1:0])2'd0: data <= h_dat; //選擇橫彩條2'd1: data <= v_dat; //選擇豎彩條2'd2: data <= (v_dat ^ h_dat); //產生棋盤格2'd3: data <= (v_dat ~^ h_dat); //產生棋盤格endcaseend always @(posedge vga_clk) //產生豎彩條 beginif(hcount < 223)v_dat <= 3'h7; //白else if(hcount < 303)v_dat <= 3'h6; //黃else if(hcount < 383)v_dat <= 3'h5; //青else if(hcount < 463)v_dat <= 3'h4; //綠else if(hcount < 543)v_dat <= 3'h3; //紫else if(hcount < 623)v_dat <= 3'h2; //紅else if(hcount < 703)v_dat <= 3'h1; //藍elsev_dat <= 3'h0; //黑end always @(posedge vga_clk) //產生橫彩條 beginif(vcount < 94)h_dat <= 3'h7; //白else if(vcount < 154)h_dat <= 3'h6; //黃else if(vcount < 214)h_dat <= 3'h5; //青else if(vcount < 274)h_dat <= 3'h4; //綠else if(vcount < 334)h_dat <= 3'h3; //紫else if(vcount < 394)h_dat <= 3'h2; //紅else if(vcount < 454)h_dat <= 3'h1; //藍elseh_dat <= 3'h0; //黑end endmodule總結
以上是生活随笔為你收集整理的vivado实现VGA的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图片也要查重了?期刊用AI审论文防造假,
- 下一篇: Nat Biotechnol | 大神李