blob: 8517bc96b51dcdece52877aa3bcc28c04df3ac3f [file] [log] [blame]
module HVSync (input clk_vga,
input reset,
output hsync,
output vsync,
output active_pixels,
output reg [9:0] counter_x,
output reg [9:0] counter_y);
// horizontal timings
parameter WIDTH = 640;
parameter H_FPORCH = 16;
parameter H_SYNC = 96;
parameter H_BPORCH = 48;
parameter H_TOTAL = WIDTH + H_FPORCH + H_SYNC + H_BPORCH;
parameter H_MIN_ACTIVE = H_SYNC + H_BPORCH;
parameter H_MAX_ACTIVE = H_SYNC + H_BPORCH + WIDTH;
// vertical timings
parameter HEIGHT = 480;
parameter V_FPORCH = 10;
parameter V_SYNC = 2;
parameter V_BPORCH = 33;
parameter V_TOTAL = HEIGHT + V_FPORCH + V_SYNC + V_BPORCH;
parameter V_MIN_ACTIVE = V_SYNC + V_BPORCH;
parameter V_MAX_ACTIVE = V_SYNC + V_BPORCH + HEIGHT;
wire res_counter_x = reset || (counter_x == H_TOTAL - 1);
wire res_counter_y = reset || (counter_y == V_TOTAL - 1);
always @(posedge clk_vga)
if (res_counter_x)
counter_x <= 0;
else
counter_x <= counter_x + 1;
always @(posedge clk_vga)
begin
if (res_counter_x)
begin
if (res_counter_y)
counter_y <= 0;
else
counter_y <= counter_y + 1;
end
end
assign hsync = (counter_x >= H_SYNC);
assign vsync = (counter_y >= V_SYNC);
assign active_pixels = (counter_x >= H_MIN_ACTIVE && counter_x < H_MAX_ACTIVE) && (counter_y >= V_MIN_ACTIVE && counter_y < V_MAX_ACTIVE);
endmodule