------------------------------------------------------------------------------- -- Titre : camera pgm -- Projet : ------------------------------------------------------------------------------- -- Fichier : camerapgm.vhd -- Auteur : NOUEL Patrice -- Compagnie : -- Mise a jour : 2000/10/24 -- Platform : ------------------------------------------------------------------------------- -- Description : -- ------------------------------------------------------------------------------- -- Modification history : -- 2000/10/24 : creation ------------------------------------------------------------------------------- LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.numeric_std.ALL; LIBRARY std; USE std.textio.ALL; ENTITY camerapgm IS GENERIC (nom_fichier : string := "lena.pgm"; en_tete : IN string := "P2"; largeur : IN natural := 512; hauteur : IN natural := 512 ; couleur_max : IN natural := 255); PORT ( pixel : OUT unsigned( 7 DOWNTO 0 ) ; -- pixels h : IN std_logic); -- horloge pour appeller la sortie END camerapgm ; ARCHITECTURE sans_tableau OF camerapgm IS BEGIN -- sans_tableau lecture : PROCESS FILE fichier : text IS IN nom_fichier; VARIABLE index : natural := 0; VARIABLE ligne : line; VARIABLE donnee : natural; VARIABLE entete : string (1 TO 2); -- on attend P3 ou P2 VARIABLE nx : natural := 15; -- nombre de caracteres par ligne VARIABLE ny : natural; -- nombre de lignes; VARIABLE max : natural; -- intensite max VARIABLE bon : boolean; CONSTANT nbr_pixels : natural := largeur * hauteur ; -- 512 * 512 = 262144 BEGIN -- PROCESS charger ASSERT false REPORT "debut de lecture du fichier " SEVERITY note; readline(fichier, ligne); -- ouverture du fichier image read(ligne,entete,bon); ASSERT bon REPORT "l'en-tete n'est pas trouvee" SEVERITY error; ASSERT entete = en_tete REPORT "en-tete incorrecte" SEVERITY error ; readline(fichier, ligne); -- 1 ligne de commentaire readline(fichier, ligne); read(ligne,nx,bon); ASSERT bon REPORT "erreur de format sur nx" SEVERITY error; ASSERT nx = largeur REPORT "Dimension de ligne incorrect" SEVERITY error; read(ligne,ny,bon); ASSERT bon REPORT "erreur de format sur ny" SEVERITY error; ASSERT ny = hauteur REPORT "Nombre de lignes incorrect" SEVERITY error; readline(fichier, ligne); read(ligne,max,bon); ASSERT bon REPORT "erreur de format sur max" SEVERITY error; ASSERT max = couleur_max REPORT "niveau max de couleur incorrect" SEVERITY error; index := 0; l1: WHILE NOT ENDFILE(fichier) LOOP readline(fichier, ligne); read(ligne,donnee, bon); WHILE bon LOOP WAIT UNTIL rising_edge(h); -- pour synchroniser index := index + 1; pixel <= to_unsigned(donnee,8); IF index = nbr_pixels /4 THEN ASSERT false REPORT "Patience ... plus que 75%" SEVERITY note; END IF; IF index = nbr_pixels /2 THEN ASSERT false REPORT "Patience ... plus que 50%" SEVERITY note; END IF; IF index = nbr_pixels *3 /4 THEN ASSERT false REPORT "Patience ... plus que 25%" SEVERITY note; END IF; read(ligne,donnee, bon); END LOOP; END LOOP; ASSERT false REPORT "Ouf !!, c'est fini" SEVERITY note; ASSERT index = nbr_pixels REPORT "Nombre de pixels incorrect" SEVERITY error; WAIT; END PROCESS; END sans_tableau;