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

📄 vgasignal.v

📁 基于FPGA的VGA接口显示程序
💻 V
字号:
/***************************************************
*VGA时序发生器,在VGA显示器上显示条纹图像,
VGA的时序图请查看工程目录下的VGA时序.PDF文档
*
*
*
****************************************************/
module VGAsignal
  (
	CLK,
	MD,
	VGA_HS,
	VGA_VS,
	R,
	G,
	B
  );
  	input CLK;
  	input MD;  //选择色条
	output VGA_HS;  //水平扫描信号
	output VGA_VS;  //垂直扫描信号
	output R,G,B;  //三颜色信号
	
	reg VGA_HS,VGA_VS;
	reg clk_25;
	reg [1:0] MMD;
	reg [10:0] CC;
	reg [10:0] LL;
	reg [3:1] GRBX, GRBY, GRBP;
    
	wire [3:1] GRB;

	
	assign GRB[1] = (GRBP[1] ^ MD) & VGA_HS & VGA_VS;
	assign GRB[2] = (GRBP[2] ^ MD) & VGA_HS & VGA_VS;
	assign GRB[3] = (GRBP[3] ^ MD) & VGA_HS & VGA_VS;
	
	always @ (posedge MD)
	begin
	  if (MD) begin
	     if (MMD == 2'b10) MMD <= 2'b00;
		 else MMD <= MMD + 1'b1;
	  end
	end
	
	always @ (MMD or GRBX or GRBY )
	begin
	  	if (MMD == 2'b00) GRBP <= GRBX;
		else if (MMD == 2'b01) GRBP <= GRBY;
		else if (MMD == 2'b10) GRBP <= (GRBX ^ GRBY);
		else GRBP <= 3'b000;
	end

	always @ (posedge CLK)
	begin
       clk_25 = ~ clk_25;//VGA_CLK 25MHZ
     end
	
/*产生行同步信号HS*/	
always @ (posedge clk_25 or negedge MD)
   begin
	 if(!MD )
	 begin
       CC <=0;
       VGA_HS <= 1'b1;
     end
      else
       begin
       if(CC < 'd800) //VGA_HS = 800 * VGA_CLK
        CC <=  CC + 1'b1;
       else
        CC <= 0;
       if(CC == 'd16)//Te+Tf=16
        VGA_HS <= 1'b0;   
       if(CC == 'd96 + 'd16)//行同步头96个时钟周期
        VGA_HS <= 1'b1;
       end
  end 
	
/*产生行同步信号VS*/	
always @ (posedge VGA_HS or negedge MD)
 begin
	 if (!MD)
	 begin
	  LL <= 0;
	  VGA_VS <= 1'b1;
	 end
	 else
	  begin
	   if (LL < 'd525) //VGA_VS = 525 * VGA_HS
	   LL <= LL + 1'b1;
	   else
	   LL <= 0;
	   if (LL == 'd10)
	   VGA_VS <= 1'b0;
	   if (LL == 'd2 + 'd10)
	   VGA_VS <= 1'b1;
	  end
 end
	   
	
	
	always @ (CC or LL)
	begin
	/*产生彩色竖条*/
		if (CC < 'd240)       GRBX <= 3'b111;
		else if (CC < 'd320)  GRBX <= 3'b110;
		else if (CC < 'd400)  GRBX <= 3'b101;
		else if (CC < 'd480) GRBX <= 3'b100;
		else if (CC < 'd560) GRBX <= 3'b011;
		else if (CC < 'd640) GRBX <= 3'b010;
		else if (CC < 'd720) GRBX <= 3'b001;
		else                 GRBX <= 3'b000;
		/*产生彩色横条*/		
		if (LL < 9'd105)     GRBY <= 3'b111;
		else if (LL < 'd165) GRBY <= 3'b110;
		else if (LL < 'd225) GRBY <= 3'b101;
		else if (LL < 'd285) GRBY <= 3'b100;
		else if (LL < 'd345) GRBY <= 3'b011;
		else if (LL < 'd405) GRBY <= 3'b010;
		else if (LL < 'd465) GRBY <= 3'b001;
		else                 GRBY <= 3'b000;
	end
	
	assign R  = GRB[2];
	assign G  = GRB[3];
	assign B  = GRB[1];
	
	endmodule

⌨️ 快捷键说明

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