Estoy tratando de hacer que VGA funcione en mi tablero Altera DE0 usando Verilog, pero no he tenido mucha suerte. Tiene los mismos pines que una interfaz VGA normal, excepto que el rojo, el verde y el azul tienen 4 bits cada uno. Aquí está la lógica que he estado tratando de usar para obtener un color sólido para mostrar:
module solid_color (clk, vga_h_sync, vga_v_sync, R, G, B);
input clk;
output vga_h_sync;
output vga_v_sync;
output [3:0] R;
output [3:0] G;
output [3:0] B;
reg [9:0] CounterX;
reg [8:0] CounterY;
wire CounterXmaxed = (CounterX==767);
always @(posedge clk)
if(CounterXmaxed)
CounterX <= 0;
else
CounterX <= CounterX + 1;
always @(posedge clk)
if(CounterXmaxed)
CounterY <= CounterY + 1;
reg vga_HS, vga_VS;
always @(posedge clk)
begin
vga_HS <= (CounterX[9:4]==0); // active for 16 clocks
vga_VS <= (CounterY==0); // active for 768 clocks
end
assign vga_h_sync = ~vga_HS;
assign vga_v_sync = ~vga_VS;
assign R = 15;
assign G = 15;
assign B = 15;
endmodule
Cuando intento ejecutarlo, recibo un mensaje en el monitor que dice que este modo de visualización no es compatible.
Esto está adaptado de enlace . Sin embargo, esta versión pretende estar diseñada para pantallas de 640x480 mientras que mi monitor es 1280x1024. ¿Es este el problema? Si es así, ¿cómo adaptaría esto para ajustarlo al tamaño del monitor aumentado? (el reloj que estoy usando es de 50 MHz)
EDITAR: Agregué en un módulo divisor de reloj de la siguiente manera para cambiar la señal de reloj inicial a 25 MHz:
module divide_clock_by_two(in_clk, out_clk);
input in_clk;
output out_clk;
reg out_clk;
always @(posedge in_clk)
out_clk <= ~out_clk;
endmodule
Sin embargo, el monitor ahora solo muestra una pantalla en negro, no aparece ningún mensaje sobre un modo incorrecto.