El controlador FPGA VGA no funciona

0

No estoy realmente seguro de lo que está mal con mi código de abajo para un vga. Todo lo que quiero que haga el programa es mostrar un color sólido en el monitor. Quiero usar los interruptores de mi tarjeta para cambiar el color que se muestra. Ejecuté la simulación y todas las señales hsync y vsync parecen ser las esperadas. Cuando enciendo los interruptores, aparece un breve pulso de color en la pantalla y luego se apaga. ¿Alguien sabe qué está mal con este código?

module vga(output reg [3:0] red, green, blue,
           input [15:0] sw,
           output hsync, vsync, 
           input clk);
    wire vga_clk; //25.203 Mhz
    vga_clk_gen gen(.clk_in1(clk), .clk_out1(vga_clk));

    reg [9:0] hpx = 0, vpx = 0;
    reg [9:0] next_hpx, next_vpx;
    reg [3:0] next_red, next_green, next_blue;

    assign hsync = !(hpx >= 660 && hpx <= 756);
    assign vsync = !(vpx >= 494 && vpx <= 495);

    always @(posedge vga_clk) begin
        hpx <= next_hpx;
        vpx <= next_vpx;
        red <= next_red;
        green <= next_green;
        blue <= next_blue;
    end

    always @* begin
        next_red = sw[3:0];
        next_blue = sw[7:4];
        next_green = sw[11:8];
        next_vpx = vpx;

        if(hpx == 800) begin
            next_hpx = 0;
            if(vpx == 525)
                next_vpx = 0;
            else
                next_vpx = vpx + 1;
        end else begin
            next_hpx = hpx + 1;
        end
    end
endmodule
    
pregunta chasep255

1 respuesta

3

La señal VGA debe estar en blanco (en negro) mientras hsync o vsync están activos. Muchos monitores utilizarán los niveles de señal durante los períodos de sincronización para calibrar un "nivel de negro", lo que llevaría al comportamiento que está describiendo.

    
respondido por el duskwuff

Lea otras preguntas en las etiquetas