Después de investigar mucho sobre cómo generar señales VGA y observar algunos ejemplos de código, intenté escribir un simple generador de señales VGA que solo muestra un color sólido en la pantalla. Al ver la simulación, el tiempo parece ser correcto. Cuando está conectado a un monitor, el monitor ni siquiera reconoce que se está generando una señal. Esto me ha dejado perplejo, cualquier ayuda sería apreciada.
Estoy utilizando la información de tiempo que se encuentra aquí: enlace
Generador de pulsos de sincronización:
module VGASyncPulseGenerator(
input clk, //50Mhz input clock
input rst,
output HS, VS, //Sync Pulses
output active //High when active area is being drawn
);
localparam HS_START = 16; // hSync start (end of front porch)
localparam HS_END = 16 + 96; // hSync end (start of back porch)
localparam HA_START = 16 + 96 + 48; // end of back porch
localparam LINE = 800; // Length of entire line;
localparam VS_START = 480 + 10; // vSync start (end of front porch)
localparam VS_END = 6480 + 10 + 2; // vSync end (start of back porck)
localparam VA_START = 0;
localparam FRAME = 525; // Length of entire frame
reg [10:0] hPos = 0;
reg [10:0] vPos = 0;
reg pixelStrobe = 0;
assign HS = ~((hPos >= HS_START) & (hPos < HS_END));
assign VS = ~((vPos >= VS_START) & (vPos < VS_END));
assign active = (hPos >= HA_START) & (vPos >= VA_START);
always @(posedge clk) begin //generate pixel clock at 25MHz
pixelStrobe = ~pixelStrobe;
end
always @(posedge clk) begin
if (pixelStrobe) begin
if (hPos == LINE) begin
hPos <= 0;
vPos <= vPos + 1;
end else hPos <= hPos + 1;
if (vPos == FRAME) vPos <= 0;
end
end
endmodule
Módulo superior:
module VGATest(
input clk, rst,
output HS, VS,
output [4:0] B,
output [5:0] R,
output [4:0] G
);
wire active;
assign R = (active) ? 5'd1 : 5'b0;
assign G = (active) ? 4'd16 : 4'b0;
assign B = (active) ? 4'd1 : 4'b0;
VGASyncPulseGenerator pulseGen(clk, rst, HS, VS, active);
endmodule