vga/vga_top.v
2024-08-14 15:45:04 -05:00

89 lines
1.9 KiB
Verilog

`timescale 1ns / 1ps
module vga_top
(input wire clk,
input wire rst,
output wire led,
output reg [3:0] red,
output reg [3:0] green,
output reg [3:0] blue,
output wire h_sync,
output wire v_sync
);
reg [26:0] counter;
wire clk270, clk180, clk90, clk0, usr_ref_out;
wire usr_pll_lock_stdy, usr_pll_lock;
CC_PLL #(
.REF_CLK(10.0), // reference input in MHz
.OUT_CLK(25.175), // pll output frequency in MHz
.PERF_MD("ECONOMY"), // LOWPOWER, ECONOMY, SPEED
.LOW_JITTER(1), // 0: disable, 1: enable low jitter mode
.CI_FILTER_CONST(2), // optional CI filter constant
.CP_FILTER_CONST(4) // optional CP filter constant
) pll_inst (
.CLK_REF(clk), .CLK_FEEDBACK(1'b0), .USR_CLK_REF(1'b0),
.USR_LOCKED_STDY_RST(1'b0), .USR_PLL_LOCKED_STDY(usr_pll_lock_stdy), .USR_PLL_LOCKED(usr_pll_lock),
.CLK270(clk270), .CLK180(clk180), .CLK90(clk90), .CLK0(clk0), .CLK_REF_OUT(usr_ref_out)
);
assign led = counter[26];
always @(posedge clk0)
begin
if (!rst) begin
counter <= 0;
end else begin
counter <= counter + 1'b1;
end
end
wire [9:0] h_count;
wire [9:0] v_count;
wire display;
wire h_sync1;
wire v_sync1;
wire rst0 = 0;
vga_spg spg(.clk(clk0),
.rst(rst0),
.h_count(h_count),
.v_count(v_count),
.h_sync(h_sync1),
.v_sync(v_sync1),
.display(display));
reg h_sync2;
reg v_sync2;
assign h_sync = h_sync2;
assign v_sync = v_sync2;
always @(posedge clk0) begin
h_sync2 <= h_sync1;
v_sync2 <= v_sync1;
if (display) begin
if (v_count[3]) begin
red <= 4'd15;
green <= 4'd15;
blue <= 4'd0;
end else begin
red <= 4'd15;
green <= 4'd0;
blue <= 4'd0;
end
end else begin
red <= 4'd0;
green <= 4'd0;
blue <= 4'd0;
end
end
endmodule