⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vga_ctr.v

📁 利用fpga实现vga解码
💻 V
字号:




module vga(
	input clk,
	input rst_n,
	input [2:0] RGB,
	output Rgb_valid,
	output hsync,//行同步信号
	output vsync,//场同步信号
	output vga_r,
	output vga_g,
	output vga_b
	);
//--------------------------------------------------

reg[9:0] x_cnt;      //行坐标(这里包括了行同步、后沿、有效数据区、前沿)

reg[9:0] y_cnt;      //列坐标(这里包括了场同步、后沿、有效数据区、前沿)
always @ (posedge clk or negedge rst_n)
       if(!rst_n) x_cnt <= 10'd0;
       else if(x_cnt == 10'd1000) x_cnt <= 10'd0;           //行计数只记到1000
       else x_cnt <= x_cnt+1'b1;

always @ (posedge clk or negedge rst_n)
       if(!rst_n) y_cnt <= 10'd0;
       else if(y_cnt == 10'd665) y_cnt <= 10'd0;             //场同步只记到665
       else if(x_cnt == 10'd1000) y_cnt <= y_cnt+1'b1;//每计数完一行,场同步就加一

//--------------------------------------------------
wire valid;      //有效数据显示区标志,就是你在液晶屏幕上可以看到的区域
/*要说明的一点是,当坐标不处于有效显示区时,R、G、B三原色信号接的电平都必须拉底(0)*/
assign valid = (x_cnt > 10'd180) && (x_cnt < 10'd980)

                                   && (y_cnt > 10'd35) && (y_cnt < 10'd635);

wire[9:0] xpos,ypos;    //有效显示区坐标

assign xpos = x_cnt-10'd180;
assign ypos = y_cnt-10'd35;
//--------------------------------------------------

reg hsync_r,vsync_r;

always @ (posedge clk or negedge rst_n)
   if (!rst_n) begin
              hsync_r <= 1'b0;
      vsync_r <= 1'b0;
      end
   else begin
      hsync_r <= x_cnt <= 10'd50;  //产生hsync信号(行同步)
      vsync_r <= y_cnt <= 10'd6;   //产生vsync信号(场同步)
      end

assign hsync = hsync_r;
assign vsync = vsync_r;

assign {vga_r, vga_g, vga_b} = valid ? RGB : 3'b000;
assign Rgb_valid = valid;

/*
assign vga_r = valid ? 1 : 1'b0;
assign vga_g = valid ? 1 : 1'b0;
assign vga_b = valid ? 0 : 1'b0;   
*/
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -