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円液晶も応用すれば簡単にできるはず。とりあえず今度やろ。インバータないし。