VGA原理---利用FPGA在显示屏上实现640*480的图片

1.原理图,VGA原理不同的显示要求有不同的显示协议,对于640*480@60HZ,时钟的频率需要达到25MHZ。

2.xilinx的spartan-6时钟为50MHZ可以利用之前的IP核调用分频器,也可以自己写一个模块。

module rgb_ctrl(
		
		input wire rst_n,
		input wire sclk, 		 //时钟是25M
		
		output reg h_sync,
		output reg v_sync,
		output reg [7:0] rgb_data

);

reg [9:0] h_cnt;
reg [9:0] v_cnt;

parameter H_max=799;
parameter V_max=524;

always@(posedge sclk or negedge rst_n)
		if(!rst_n)
			h_cnt<=10'd0;
		else if(h_cnt==10'd799)
			h_cnt<=10'd0;
			else h_cnt<=h_cnt+1'b1;
			
always@(posedge sclk  or negedge rst_n)
		if(!rst_n)
		v_cnt<=10'd0;
		else if(v_cnt==10'd524&&h_cnt==10'd799)
			v_cnt<=10'd0;
			else if(h_cnt==10'd799)
				v_cnt<=v_cnt+1'b1;
		
				
always@(posedge sclk or negedge rst_n)
		if(!rst_n)
			h_sync<=1'b0;
		else if(h_cnt==96)
			h_sync<=1'b0;
		else if(h_cnt==0)
			h_sync<=1'b1;
			
always@(posedge sclk or negedge rst_n)
		if(!rst_n)
			v_sync<=1'b0;
			else if(v_cnt==10'd1&&h_cnt==10'd799)
			 v_sync<=1'b0;
			else if(v_cnt==10'd524&&h_cnt==10'd799)
			 v_sync<=1'b1;
			 
always@(posedge sclk or negedge rst_n)	
		if(!rst_n)	
			rgb_data<=8'd0;// 
			else if(34<=v_cnt&&v_cnt<=524&&143<=h_cnt&&h_cnt<=783)
				rgb_data<=8'b1110_0000; 
				else 
				rgb_data<=8'd0;
endmodule

//实现三基色全显示always@(posedge sclk or negedge rst_n)	
//		if(!rst_n)	
//			rgb_data<=8'd0;// 
//		else if(34<=v_cnt&&v_cnt<=209&&143<=h_cnt&&h_cnt<=783)
//				rgb_data<=8'b1110_0000; 
//		else if(209<=v_cnt&&v_cnt<=384&&143<=h_cnt&&h_cnt<=783)	
//				rgb_data<=8'b0001_1100; 
//		else if(384<=v_cnt&&v_cnt<=524&&143<=h_cnt&&h_cnt<=783)	
//				rgb_data<=8'b0000_0011;
//		else
//				rgb_data<=8'd0;

3.至于想显示那种颜色,只需要修改rgb_data的数据就可以。

4.仿真图就不P了,但是h_sync和v_sync信号的拉高条件希望自己可以理解透。

猜你喜欢

转载自blog.csdn.net/Headogerz/article/details/81591041