------------------------------------------------------------------------------- -- Titre : registre a decalage -- Projet : ------------------------------------------------------------------------------- -- Fichier : regdec1024.vhd -- Auteur : -- Compagnie : -- Mise a jour : 2000/03/30 -- Platform : -- Compagnie : -- Mise a jour : 2000/03/30 -- Platform : ------------------------------------------------------------------------------- -- Description : Registre optimise pour leonardo -- utilisant des blocs ram synchrones -- look up table ------------------------------------------------------------------------------- -- Modification history : 13/12/2002 adaptation -- 2000/03/30 : creation ------------------------------------------------------------------------------- LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.numeric_std.ALL; ENTITY regdec1024 IS PORT ( SIGNAL e : unsigned(7 DOWNTO 0); -- entree 8 bits SIGNAL s : OUT unsigned(7 DOWNTO 0); -- sortie 8 bits SIGNAL we : IN std_logic; -- autorisation SIGNAL h : IN std_logic); -- horloge END regdec1024; ARCHITECTURE technologique OF regdec1024 IS TYPE matrice IS ARRAY (0 TO 7, 0 TO 64) OF std_logic; SIGNAL connect : matrice; COMPONENT RAM16x1S PORT ( SIGNAL a3, a2, a1, a0, we, wclk, d : IN std_logic; SIGNAL o : OUT std_logic); END COMPONENT; SIGNAL a : unsigned(3 DOWNTO 0); -- adresse interne BEGIN -- technologique L1 : FOR i IN 0 TO 7 GENERATE L2 : FOR j IN 1 TO 64 GENERATE R1 : ram16x1s PORT MAP ( a0 => a(0), a1 => a(1), a2 => a(2), a3 => a(3), we => we, wclk => h, d => connect(i, j-1), o => connect(i, J)); END GENERATE L2; connect(i,0) <= e(i); -- les entrees s(i) <= connect(i, 64); -- les sorties END GENERATE L1; compteur : PROCESS VARIABLE compte : natural RANGE 0 TO 15; BEGIN -- compteur associe WAIT UNTIL rising_edge(h); IF compte < 15 THEN compte := compte + 1; ELSE compte := 0; END IF; a <= To_unsigned(compte,4); END PROCESS compteur; END technologique;