Depuración de la conexión FPGA VGA

1

Quiero mostrar imágenes en la pantalla y para hacer esto, utilicé este git y esto < a href="https://eewiki.net/pages/viewpage.action?pageId=15925278#VGAController(VHDL)-SignalTiming"> article como referencias. Las especificaciones de mi pantalla son 1280x1024, incluidos los píxeles del porche, las dimensiones son 1688x1066. De esto derivé la frecuencia de píxeles necesaria.

107.96MHz = 1688 x 1066 x 60

Para generar un reloj de 108MHz, usé Altera PLL con un reloj de referencia de 50MHz.

Mis tiempos calculados para v_sync y h_sync son 16.7ms y 15.66us respectivamente.

ValoresparaVGA_SYNC_NyVGA_BLANK_NUséconstantesqueseusaroneneseartículodeeewiki,aunquenohabíamuchainformaciónsobreestosparámetros.HeleídolahojadedatosADV7123,peroesonomeayudómucho.

VGA_R[7..0]<=4-bitredpixelvalueVGA_G[7..0]<=4-bitgreenpixelvalueVGA_B[7..0]<=4-bitbluepixelvalueVGA_CLK<=108MHzVGA_SYNC_N<='0'VGA_BLANK_N<='1'

Esteeseldiagramaqueusécomoreferencia

yesteesmidiagramaRTL

ElflashdefábricadelDe1SocFPGAmuestraunfondodepantallaatravésdelVGA.MedíesassalidasVGAconunosciloscopioyobtuvetiemposyamplitudesparavariasseñalesylasusocomounacomparacióndemispropiosvalores.

vsync=16.6ms,3.3Vhsync=33us,3.3VRGBoutputs=between1.2Vand1.6V

ParpadeéFPGAconmiintentodemostrarcosasyuséelalcancedenuevo.Lostiemposmedidoscoincidenconmidiseño,peronocoincidenconlostiemposelegidosporelstockflashparamostrarcosas.Soncorrectos,mientrasquelosvaloresdecolorquerealmentenopuedodecir.Enmicódigo,siestablecetodoslosvaloresRGBen0,elresultadoesunruidocon100mVpk-pk.

vsync=16.6ms,3.3Vhsync=15.7us,3.3VRGBoutputs=around180mV

NoséporquémisalidaAD7123es~180mVcuandouncolordadoestáconfiguradoen'1',perolasalidadelmismocolorserá~1.5Vcuandoseusaelflashdefábrica.Mistiemposvsyncyhsynccoincidenconlosajustesteóricoscalculados,perosondiferentesalosvaloresmedidosenelflashdefábrica.VGADACtienesolo3entradassincolorynosécómopuedoforzarloparaqueemitaunúnicovaloranalógicoqueseamayora180mV.TutorialqueestabasiguiendoenYouTube,esetipoparecíapodermostrarcosasenlapantallasintenerqueinvolucraraVGA_CLK,VGA_SYNC_NyVGA_BLANK_Nyteníalamismaresolucióndepantallayplacadedesarrolloqueyo.

Heverificadounpardevecesquemisasignacionesenelplanificadordepinessoncorrectas.

Nopuedoseguirelcaminocorrectoparadepurarestoaúnmás.Sialguienpuedeseñalarlosflujosenmirazonamientoosugerirmequécosaspodríahaberhechomalohaberpasadoporaltoyaqueestoyrealmenteatascadoynosécómoprogresar.

Mipreguntaes:¿QuémefaltaenmidiseñoquemeimpidainterconectarunciclónconunasalidaVGA?

Aquíestámicódigoencasodequealguienpuedadetectarunerrorevidentequenopuedo.

ControladorVGA

libraryieee;useieee.std_logic_1164.all;useieee.numeric_std.all;ENTITYVGAISPORT(CLOCK_50MHz:INSTD_LOGIC_VECTOR(1downto0);VGA_HS,VGA_VS:OUTSTD_LOGIC;VGA_CLK:OUTSTD_LOGIC;SW:STD_LOGIC_VECTOR(1downto0);KEY:STD_LOGIC_VECTOR(3DOWNTO0);VGA_R,VGA_B,VGA_G:OUTSTD_LOGIC_VECTOR(3downto0);n_b:OUTSTD_LOGIC;--VGA_BLANK_Nn_s:OUTSTD_LOGIC;--VGA_SYNC_N);ENDVGA;ARCHITECTUREMAINOFVGAISSIGNALVGACLK,RESET,HSYNC:STD_LOGIC;componentpll_50_to_108isport(clk_in_clk:instd_logic:='X';--clkclk_out_clk:outstd_logic;--clkreset_1_reset:instd_logic:='X'--reset);endcomponentpll_50_to_108;COMPONENTSYNCISPORT(CLK:INSTD_LOGIC;HSYNC:OUTSTD_LOGIC;VSYNC:OUTSTD_LOGIC;R:OUTSTD_LOGIC_VECTOR(3downto0);G:OUTSTD_LOGIC_VECTOR(3downto0);B:OUTSTD_LOGIC_VECTOR(3downto0);KEYS:INSTD_LOGIC_VECTOR(3DOWNTO0);S:INSTD_LOGIC_VECTOR(1downto0));ENDCOMPONENTSYNC;BEGINVGA_CLK<=VGACLK;n_b<='1';n_s<='0';C1:pll_50_to_108PORTMAP(CLOCK_50MHz(0),VGACLK,RESET);C2:SYNCPORTMAP(VGACLK,VGA_HS,VGA_VS,VGA_R,VGA_G,VGA_B,"0000","00");

 END MAIN;

SYNC

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.my.all;

ENTITY SYNC IS
PORT(
    CLK: IN STD_LOGIC;
    HSYNC: OUT STD_LOGIC:='1';
    VSYNC: OUT STD_LOGIC:='1';
    R: OUT STD_LOGIC_VECTOR(3 downto 0);
    G: OUT STD_LOGIC_VECTOR(3 downto 0);
    B: OUT STD_LOGIC_VECTOR(3 downto 0);
    KEYS: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
    S: IN STD_LOGIC_VECTOR(1 downto 0)
);
END SYNC;

ARCHITECTURE MAIN OF SYNC IS
-----1280x1024 @ 60 Hz pixel clock 108 MHz
SIGNAL RGB: STD_LOGIC_VECTOR(3 downto 0);
SIGNAL SQ_X1,SQ_Y1: INTEGER RANGE 0 TO 1688:=500;
SIGNAL SQ_X2,SQ_Y2: INTEGER RANGE 0 TO 1688:=600;
SIGNAL DRAW1,DRAW2:STD_LOGIC:='0';
SIGNAL HPOS: INTEGER RANGE 0 TO 1688:=0;
SIGNAL VPOS: INTEGER RANGE 0 TO 1066:=0;
BEGIN

PROCESS(CLK)
BEGIN
    IF(CLK'EVENT AND CLK='1')THEN

        -- turn all the pixels
        if((HPOS>408 and HPOS <1100) or (VPOS>42 and VPOS<600)) then
            R<=(others=>'1');
            G<=(others=>'1');
            B<=(others=>'1');
        else
            R<=(others=>'0');
            G<=(others=>'0');
            B<=(others=>'0');
        end if;


        IF(HPOS<1688)THEN
            HPOS<=HPOS+1;
        ELSE
            HPOS<=0;
            IF(VPOS<1066)THEN
                VPOS<=VPOS+1;
            ELSE
                VPOS<=0;                
            END IF;
        END IF; 

        -- turn off pixels at the porches
        IF((HPOS>0 AND HPOS<408) OR (VPOS>0 AND VPOS<42))THEN
            R<=(others=>'0');
            G<=(others=>'0');
            B<=(others=>'0');
        END IF;     

        IF(HPOS>48 AND HPOS<160)THEN    --  HSYNC
            HSYNC<='0';
        ELSE
            HSYNC<='1';
        END IF;
        IF(VPOS>0 AND VPOS<4)THEN   --  VSYNC
            VSYNC<='0';
        ELSE
            VSYNC<='1';
        END IF;
     END IF;
 END PROCESS;
 END MAIN;
    
pregunta mega_creamery

0 respuestas

Lea otras preguntas en las etiquetas