-- *********************************************** -- * * -- Générateur de synchro Vidéo pour mire * -- * CCIR601 * -- * J. WEISS, octobre 2001 * -- * * -- * Sorties : * -- * Comptage des pixels et des lignes * -- * Signaux de synchro : F, V, H * -- *********************************************** LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; ENTITY GENE_SYNC IS PORT ( CK27M : IN STD_LOGIC; -- Horloge 27 MHz PIXEL : OUT UNSIGNED (10 DOWNTO 0); LIGNE : OUT UNSIGNED (9 DOWNTO 0); SCLR : IN STD_LOGIC; -- Reset synchrone F : OUT STD_LOGIC; -- Synchronisation (Frame) V : OUT STD_LOGIC; -- Synchronisation (Vertical) H : OUT STD_LOGIC -- Synchronisation (Horizontal) ); END GENE_SYNC; ARCHITECTURE a OF GENE_SYNC IS SIGNAL Pixel_Int : INTEGER RANGE 0 to 2047; SIGNAL Ligne_Int : INTEGER RANGE 0 to 1023; CONSTANT Lg_Ligne : INTEGER := 2*864; CONSTANT Deb_Ligne : INTEGER := Lg_Ligne - 2*718; CONSTANT Top_A : INTEGER := 3 ; CONSTANT Deb_A : INTEGER := 21; CONSTANT Fin_A : INTEGER := 313; CONSTANT Top_B : INTEGER := Top_A + 312; CONSTANT Deb_B : INTEGER := Deb_A + 312; CONSTANT Fin_B : INTEGER := Fin_A + 312; BEGIN -- Comptage des pixels (1440 par ligne) PROCESS (CK27M) BEGIN IF (CK27M'EVENT AND CK27M = '1') THEN If SCLR = '1' THEN Pixel_Int <= 0; ELSE IF PIXEL_Int < Lg_Ligne-1 THEN Pixel_Int <= Pixel_Int + 1; ELSE Pixel_Int <= 0; END IF; IF Pixel_Int < Deb_Ligne THEN H <= '1'; ELSE H <= '0'; END IF; END IF; -- Comptage des lignes IF PIXEL_Int = Deb_Ligne THEN IF Ligne_Int = Fin_B-1 THEN Ligne_Int <= 0; ELSE Ligne_Int <= Ligne_Int + 1; END IF; END IF; -- Extraction des synchros F et V IF (Ligne_Int >= Deb_A AND Ligne_Int <= Fin_A) OR (Ligne_Int >= Deb_B AND Ligne_Int <= Fin_B) THEN V <= '0'; ELSE V <= '1'; END IF; IF Ligne_Int >= Top_A AND Ligne_Int <= Top_B THEN F <= '1'; ELSE F <= '0'; END IF; END IF; END PROCESS; PIXEL <= CONV_UNSIGNED(Pixel_Int,11); LIGNE <= CONV_UNSIGNED(Ligne_Int,10); END a;