<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于STEP FPGA的8色VGA功能驅(qū)動

          基于STEP FPGA的8色VGA功能驅(qū)動

          作者: 時間:2023-12-04 來源:電子森林 收藏

          硬件說明

          VGA(video graphics array)即視頻圖形陣列,是IBM在1987年隨PS/2一起推出的使用模擬信號的一種視頻傳輸標(biāo)準(zhǔn)。VGA接口分公口和母口,如下圖:

          本文引用地址:http://www.ex-cimer.com/article/202312/453513.htm

          VGA接口引腳定義如下:

          一個標(biāo)準(zhǔn)的VGA接口應(yīng)該有以下端口:

          • 紅綠藍(lán)三色信號(RGB)
          • 行場同步信號(HSVS)
          • 以及很多的地屏蔽;

          三色信號都是模擬信號,行場同步信號都是數(shù)字信號;
          對于VGA的接口模擬電壓,為0~0.714V,0代表無色,0.714代表滿色,F(xiàn)PGA輸出3.3V,所以還必須要經(jīng)過DAC的轉(zhuǎn)換。現(xiàn)今有兩種比較成熟的方法:電阻分壓方式和DAC轉(zhuǎn)換方式。
          我們的底板上就是采用的電阻分壓的方式,因VGA顯示器端有75歐的下拉電阻,為了得到0.714V的電壓我們給RGB信號線上串入270歐的電阻,3.3V*75/(270+75)=0.717V。如下

          VGA驅(qū)動顯示器用的是掃描的方式,逐行掃描the HS (Horizontal Synchronization)逐行掃描是掃描從屏幕的左上角一點開始,由左向右逐點掃描,每掃描完一行,電子束回到屏幕的左邊下一行的起始位置,在這期間CRT(陰極射線顯像管)對電子束進(jìn)行消隱,每行結(jié)束時,用行同步信號進(jìn)行同步;當(dāng)掃描完所有行之后形成一幀,用場同步信號進(jìn)行同步,并使掃描回到屏幕左上方,同時進(jìn)行場消隱,開始下一幀。VGA一直在掃描,每一場的掃描包括了若干行掃描,依次循環(huán);
          VGA顯示時序如下:
          VGA顯示區(qū)域和消隱區(qū)域:
          常見的VGA顯示模式:


          Verilog代碼

          // --------------------------------------------------------------------
          // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
          // --------------------------------------------------------------------
          // Module: Param_define
          // 
          // Author: Step
          // 
          // Description: Param_define
          //
          // --------------------------------------------------------------------
          // Code Revision History :
          // --------------------------------------------------------------------
          // Version: |Mod. Date:   |Changes Made:
          // V1.1     |2016/10/30   |Initial ver
          // --------------------------------------------------------------------
          `timescale 1ns / 1ns 
          //VGA顯示器驅(qū)動只需要5個信號即可(行同步、場同步、紅色、綠色、藍(lán)色信號)
          //紅綠藍(lán)三色信號為模擬信號,輸入電壓范圍為0.0V~0.7V
          //VGA時序中行同步和場同步都分為四個階段(同步脈沖、后廊、有效線數(shù)、前廊)
          //VGA顯示有很多模式,每種模式都是有固定的時鐘和時序參數(shù),需要根據(jù)要求控制 
          `ifdef VGA_800X600_60Hz	
          //不同VGA顯示模式相應(yīng)的參數(shù)
          //---------------------------------------------------------------------------
          //-- Horizonal timing information`define HSYNC_A   16'd128	
          // 128`define HSYNC_B   16'd216	
          // 128 + 88	`define HSYNC_C   16'd1016	
          // 128 + 88 + 800`define HSYNC_D   16'd1056	
          // 128 + 88 + 800 + 40 
          //行同步脈沖+后廊+有效線數(shù)+前廊
          //-- Vertical  timing information`define VSYNC_O   16'd4		
          // 4 `define VSYNC_P   16'd27	
          // 4 + 23`define VSYNC_Q   16'd627	
          // 4 + 23 + 600`define VSYNC_R   16'd628	
          // 4 + 23 + 600 + 1 //場同步脈沖+后廊+有效線數(shù)+前廊
          //---------------------------------------------------------------------------
          `endif `ifdef VGA_640X480_85Hz	
          //不同VGA顯示模式相應(yīng)的參數(shù)
          //---------------------------------------------------------------------------
          //-- Horizonal timing information`define HSYNC_A   16'd48	
          // 48`define HSYNC_B   16'd160	
          // 48 + 112`define HSYNC_C   16'd800	
          // 48 + 112 + 640`define HSYNC_D   16'd832	
          // 48 + 112 + 640 + 32 
          //行同步脈沖+后廊+有效線數(shù)+前廊
          //-- Vertical  timing information`define VSYNC_O   16'd3		
          // 3 `define VSYNC_P   16'd28	
          // 3 + 25`define VSYNC_Q   16'd508	
          // 3 + 25 + 480`define VSYNC_R   16'd509	
          // 3 + 25 + 480 + 1 
          //場同步脈沖+后廊+有效線數(shù)+前廊
          //---------------------------------------------------------------------------
          `endif
          // --------------------------------------------------------------------
          // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
          // --------------------------------------------------------------------
          // Module: Vga_Module
          // 
          // Author: Step
          // 
          // Description: Vga_Module
          // 
          // --------------------------------------------------------------------
          // Code Revision History :
          // --------------------------------------------------------------------
          // Version: |Mod. Date:   |Changes Made:
          // V1.1     |2016/10/30   |Initial ver
          // --------------------------------------------------------------------
          `define		VGA_800X600_60Hz	
          //定義使用的VGA顯示模式 
          `ifdef		VGA_800X600_60Hz	//根據(jù)VGA顯示模式的定義調(diào)用相應(yīng)的參數(shù)
          `include	"Param_define.v"	//調(diào)用Param_define.v文件中的全局定義
          `endif	 
          module Vga_Module
          (
          input 					clk_in,				//40MHz系統(tǒng)時鐘
          input 					rst_n_in,			//系統(tǒng)復(fù)位,低有效
          output 	reg				sync_v,				//VGA場同步sync_v
          output 	reg				sync_h,				//VGA行同步sync_h
          output  reg		[2:0]	vga_data			//VGA數(shù)據(jù)MSB~LSB = {R,G,B}
          ); 
          reg 			[15:0] 	x_cnt;
          reg 			[15:0] 	y_cnt;
          reg 					vga_valid;	 //對時鐘計數(shù)標(biāo)識VGA一次行掃描需要的時間
          always @ (posedge clk_in or negedge rst_n_in)
          	if(!rst_n_in) x_cnt <= 16'd0;	//復(fù)位時初始值
          	else if(x_cnt >= `HSYNC_D) x_cnt <= 16'd0;	//一次行掃描需要1056個時鐘(128+88+800+40)
          	else x_cnt <= x_cnt + 1'b1; //對行掃描計數(shù)標(biāo)識VGA一次場掃描需要的時間
          	always @ (posedge clk_in or negedge rst_n_in)
          	if(!rst_n_in) y_cnt <= 16'd0;	//復(fù)位時初始值
          	else if(x_cnt == `HSYNC_D) begin	//每次行掃描時
          		if(y_cnt >= `VSYNC_R) y_cnt <= 16'd0;	//每次場掃描包含628次行掃描
          		else y_cnt <= y_cnt + 1'b1;
          	end else y_cnt <= y_cnt;	
          	//在每次行掃描過程中場掃描計數(shù)器保持不變 
          	//按照顯示模式的參數(shù)產(chǎn)生行同步掃描的脈沖
          	always @ (posedge clk_in or negedge rst_n_in)
          	if(!rst_n_in) sync_h <= 1'b1;
          	else if(x_cnt < `HSYNC_A) sync_h <= 1'b0;	
          	else sync_h <= 1'b1;	 //按照顯示模式的參數(shù)產(chǎn)生場同步掃描的脈沖
          	always @ (posedge clk_in or negedge rst_n_in)
          	if(!rst_n_in) sync_v <= 1'b1;
          	else if(y_cnt < `VSYNC_O) sync_v <= 1'b0;
          	else sync_v <= 1'b1;	 //根據(jù)行場同步信號的有效線數(shù)確定有效顯示區(qū)域
          	always @ (posedge clk_in or negedge rst_n_in)
          	if(!rst_n_in) 
          		vga_valid <= 1'b0;
          	else if((x_cnt > `HSYNC_B) && (x_cnt <`HSYNC_C) && (y_cnt > `VSYNC_P) && (y_cnt < `VSYNC_Q))
          		vga_valid <= 1'b1; //有效顯示區(qū)域中vga_valid標(biāo)志為1
          	else
          		vga_valid <= 1'b0;	 //在VGA有效顯示區(qū)域不同的段顯示不同的顏色
          		always @ (posedge clk_in or negedge rst_n_in)begin
          	if(!rst_n_in) vga_data = 3'b111;
          	else if(vga_valid)begin	//在有效顯示區(qū)域內(nèi)
          		if((x_cnt > `HSYNC_B) && (x_cnt <= `HSYNC_B + 10'd100))					
          			vga_data = 3'b100;			//紅色
          		else if((x_cnt > `HSYNC_B + 10'd100) && (x_cnt <= `HSYNC_B + 10'd200))	
          			vga_data = 3'b010;			//綠色
          		else if((x_cnt > `HSYNC_B + 10'd200) && (x_cnt <= `HSYNC_B + 10'd300))	
          			vga_data = 3'b001;			//藍(lán)色
          		else if((x_cnt > `HSYNC_B + 10'd300) && (x_cnt <= `HSYNC_B + 10'd400))	
          			vga_data = 3'b110;			//黃色
          		else if((x_cnt > `HSYNC_B + 10'd400) && (x_cnt <= `HSYNC_B + 10'd500))	
          			vga_data = 3'b101;			//紫色
          		else if((x_cnt > `HSYNC_B + 10'd500) && (x_cnt <= `HSYNC_B + 10'd600))	
          			vga_data = 3'b011;			//青色
          		else if((x_cnt > `HSYNC_B + 10'd600) && (x_cnt <= `HSYNC_B + 10'd700))	
          			vga_data = 3'b111;			//白色
          		else if((x_cnt > `HSYNC_B + 10'd700) && (x_cnt <= `HSYNC_B + 10'd800))	
          			vga_data = 3'b000;			//黑色
          		else
          			vga_data = 3'b111;			//白色
          	end else
          		vga_data = 3'b111;				//白色end endmodule

          小結(jié)

          本節(jié)主要為大家講解了VGA顯示的原理、時序及軟件設(shè)計,需要大家掌握的同時自己創(chuàng)建工程,通過整個設(shè)計流程,生成FPGA配置文件加載測試。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();