79 lines
1.7 KiB
Verilog
79 lines
1.7 KiB
Verilog
module sync_vg
|
|
#(
|
|
parameter X_BITS=12, Y_BITS=12
|
|
)
|
|
(
|
|
input wire clk,
|
|
input wire reset,
|
|
|
|
input wire [Y_BITS-1:0] v_total,
|
|
input wire [Y_BITS-1:0] v_fp,
|
|
input wire [Y_BITS-1:0] v_bp,
|
|
input wire [Y_BITS-1:0] v_sync,
|
|
input wire [X_BITS-1:0] h_total,
|
|
input wire [X_BITS-1:0] h_fp,
|
|
input wire [X_BITS-1:0] h_bp,
|
|
input wire [X_BITS-1:0] h_sync,
|
|
input wire [X_BITS-1:0] hv_offset,
|
|
|
|
output reg vs_out,
|
|
output reg hs_out,
|
|
output reg hde_out,
|
|
output reg vde_out,
|
|
output reg [Y_BITS-1:0] v_count_out,
|
|
output reg [X_BITS-1:0] h_count_out,
|
|
output reg [X_BITS-1:0] x_out,
|
|
output reg [Y_BITS-1:0] y_out
|
|
);
|
|
|
|
reg [X_BITS-1:0] h_count;
|
|
reg [Y_BITS-1:0] v_count;
|
|
|
|
/* horizontal counter */
|
|
always @(posedge clk)
|
|
if (reset)
|
|
h_count <= 0;
|
|
else
|
|
if (h_count < h_total - 1)
|
|
h_count <= h_count + 1'd1;
|
|
else
|
|
h_count <= 0;
|
|
|
|
/* vertical counter */
|
|
always @(posedge clk)
|
|
if (reset)
|
|
v_count <= 0;
|
|
else
|
|
if (h_count == h_total - 1)
|
|
begin
|
|
if (v_count == v_total - 1)
|
|
v_count <= 0;
|
|
else
|
|
v_count <= v_count + 1'd1;
|
|
end
|
|
|
|
always @(posedge clk)
|
|
if (reset)
|
|
{ vs_out, hs_out, hde_out, vde_out } <= 0;
|
|
else begin
|
|
hs_out <= ((h_count < h_sync));
|
|
|
|
hde_out <= (h_count >= h_sync + h_bp) && (h_count <= h_total - h_fp - 1);
|
|
vde_out <= (v_count >= v_sync + v_bp) && (v_count <= v_total - v_fp - 1);
|
|
|
|
if ((v_count == 0) && (h_count == hv_offset))
|
|
vs_out <= 1'b1;
|
|
else if ((v_count == v_sync) && (h_count == hv_offset))
|
|
vs_out <= 1'b0;
|
|
|
|
/* H_COUNT_OUT and V_COUNT_OUT */
|
|
h_count_out <= h_count;
|
|
v_count_out <= v_count;
|
|
|
|
/* X and Y coords for a backend pattern generator */
|
|
x_out <= h_count - (h_sync + h_bp);
|
|
y_out <= v_count - (v_sync + v_bp);
|
|
end
|
|
|
|
endmodule
|