VGAのテスト

なんかおもったより簡単だった。
Sakai Hiroaki's Home Page
こちらのサイトを参考にやらせてもらった。
こんな感じに出力

ちなみに下の黒いのは液晶自体の傷なのでしょうがない。
とりあえずソース

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date:    13:21:46 07/06/2008 
// Design Name: 
// Module Name:    vga_test_top 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////
module vga_test_top(CLK, VGA_R, VGA_G, VGA_B, VGA_HSYNC, VGA_VSYNC);
	input CLK;
	output VGA_R;
	output VGA_G;
	output VGA_B;
	output VGA_HSYNC;
	output VGA_VSYNC;
	 
	reg [9:0] hcount;
	reg [9:0] vcount;
	reg [2:0] rgb;
	reg hsync,vsync;
	reg [6:0] chg_count;
	 
	assign VGA_HSYNC = hsync;
	assign VGA_VSYNC = vsync;
	assign VGA_R = rgb[0];
	assign VGA_G = rgb[1];
	assign VGA_B = rgb[2];
	 
	wire CLKDV_OUT;	//25Mhz
	wire CLK0;			//50Mhz
	 
	parameter H_ACTIVE_PIXEL_LIMIT = 640;
	parameter H_FPORCH_PIXEL_LIMIT = 656; // 640+16
	parameter H_SYNC_PIXEL_LIMIT   = 752; // 640+16+96
	parameter H_BPORCH_PIXEL_LIMIT = 800; // 640+16+96+48

	parameter V_ACTIVE_LINE_LIMIT = 480;
	parameter V_FPORCH_LINE_LIMIT = 490; // 480+10
	parameter V_SYNC_LINE_LIMIT   = 492; // 480+10+2
	parameter V_BPORCH_LINE_LIMIT = 521; // 480+10+2+29



// Instantiate the module
VGA_DCM vgaclk (
    .CLKIN_IN(CLK), 
    .RST_IN(), 
    .CLKDV_OUT(CLKDV_OUT), 
    .CLKIN_IBUFG_OUT(), 
    .CLK0_OUT(CLK0), 
    .LOCKED_OUT()
    );
	 
	always @(posedge CLKDV_OUT)
	begin
		//カウンタ
		if(hcount == H_BPORCH_PIXEL_LIMIT )
		begin
			hcount <= 0;
			if(vcount == V_BPORCH_LINE_LIMIT ) vcount <= 0;
			else vcount <= vcount + 1;
		end
		else 
		begin
			hcount <= hcount + 1;
		end
		
		//描画
		if(hcount < H_ACTIVE_PIXEL_LIMIT &&
			vcount < V_ACTIVE_LINE_LIMIT) // 描画領域
		begin
			//とりあえず決めうち
			if(chg_count == 79)
			begin
				rgb <= rgb + 1;
				chg_count <= 0;
			end
			else 
				chg_count <= chg_count + 1;
		end
		
		//hsync制御タイミング
		case (hcount)
		H_ACTIVE_PIXEL_LIMIT:
		begin
			rgb <= 3'd0;
			chg_count <= 0;
		end
		H_FPORCH_PIXEL_LIMIT:
			hsync <= 0;
		H_SYNC_PIXEL_LIMIT:
			hsync <= 1;
		endcase
		
		//vsync制御タイミング
		case (vcount)
		V_ACTIVE_LINE_LIMIT:
			;
		V_FPORCH_LINE_LIMIT:
			vsync <= 0;
		V_SYNC_LINE_LIMIT:
			vsync <= 1;
		endcase
		
		
	end

endmodule

ucf

#PACE: Start of Constraints generated by PACE

#PACE: Start of PACE I/O Pin Assignments
NET "CLK"  LOC = "C9"  | IOSTANDARD = LVCMOS33 | PERIOD = 20.000 HIGH 50%;
NET "VGA_B"  LOC = "G15"  | IOSTANDARD = LVTTL | SLEW = FAST | DRIVE = 8;
NET "VGA_G"  LOC = "H15"  | IOSTANDARD = LVTTL | SLEW = FAST | DRIVE = 8;
NET "VGA_HSYNC"  LOC = "F15"  | IOSTANDARD = LVTTL | SLEW = FAST | DRIVE = 8;
NET "VGA_R"  LOC = "H14"  | IOSTANDARD = LVTTL | SLEW = FAST | DRIVE = 8;
NET "VGA_VSYNC"  LOC = "F14"  | IOSTANDARD = LVTTL | SLEW = FAST | DRIVE = 8;

#PACE: Start of PACE Area Constraints

#PACE: Start of PACE Prohibit Constraints

#PACE: End of Constraints generated by PACE

これができたんんで秋月の300円液晶も応用すれば簡単にできるはず。とりあえず今度やろ。インバータないし。