vga/vga_fb.v
2024-08-15 03:14:44 -05:00

71 lines
1.3 KiB
Verilog

module vga_fb
(input wire clk,
input wire rst,
output reg [3:0] red,
output reg [3:0] green,
output reg [3:0] blue,
output reg h_sync,
output reg v_sync,
output wire [9:0] h_count,
output wire [9:0] v_count,
output wire display,
output reg [18:0] addr
);
wire h_sync1;
wire v_sync1;
vga_spg spg(.clk(clk),
.rst(rst),
.h_count(h_count),
.v_count(v_count),
.h_sync(h_sync1),
.v_sync(v_sync1),
.display(display));
//reg [18:0] addr;
reg clk2;
always @(posedge clk) begin
if (rst)
clk2 <= 1'b0;
else
clk2 <= ~clk2;
if (rst || v_sync1) begin
addr <= 0;
end else if (display) begin
if (clk2)
if (addr < 76799)
addr <= addr + 1;
else
addr <= 0;
end
end
wire read = 1'b1;
wire [11:0] rdata;
vga_mem mem(.clk(clk),
.read(read),
.addr(addr),
.rdata(rdata));
always @(posedge clk) begin
h_sync <= !h_sync1;
v_sync <= !v_sync1;
if (display) begin
red <= rdata[11:8];
green <= rdata[7:4];
blue <= rdata[3:0];
end else begin
red <= 4'd0;
green <= 4'd0;
blue <= 4'd0;
end
end
endmodule