-- reg_io.vhd -- Eurobot 2004 : APB Team -- Auteur : Pierre-André Galmes -- Registre dont on peut lire les valeurs sur data_out. -- RQ : Ce type de registre a un inconvénient : la haute impédance ! -- TODO : Principe : -- Si (write et enable) alors sauvegarde l'entrée data_f_in et copie -- entrée data_f_in sur sortie. -- Si (read et enable) alors copie entrée data_b_in sur entrée data_f_in. -- Si (pas enable) alors copie dernière valeur sauvegardée sur sortie. library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; use work.isa_const.all; use work.nono_const.all; entity reg_io is port ( rst : in std_logic; rw : in std_logic; -- read (ISA_READ) / write (ISA_WRITE) enable : in std_logic; data_f_in : inout T_DATA; -- forward in = entrée dans le sens direct. data_out : out T_DATA; data_b_in : in T_DATA -- backward in = entrée pour la lecture ); end entity; architecture BEHAV of reg_io is -- signal interne signal REG : T_DATA; begin -- process process (rst, rw, enable, data_f_in, data_b_in) begin if (rst = '1') then REG <= x"00"; else if (enable = '1') then if (rw = ISA_WRITE) then REG <= data_f_in; elsif (rw = ISA_READ) then data_f_in <= data_b_in; end if; else data_f_in <= "ZZZZZZZZ"; end if; end if; end process; data_out <= REG; end BEHAV;