-- txserie.vhd -- Eurobot 2004 : APB Team -- Auteur : Pierre Prot -- registre IO adressable sur bus ISA -- MARCHE -- ------------------------------------------- -- Registre générique à brancher sur un bus -- ------------------------------------------- -- -- * on peut écrire ou lire dans le registre depuis le bus : -- . Positionner l'adresse -- . Mettre 'rw' à 1=>read 0=>write -- . Front montant sur 'ck' -- Remarque : on ne peut pas écrire via le bus si 'load' est activé -- * on peut lire la valeur en permanence sur 'output' -- * on peut écrire dans le registre en permanence grâce à 'load'. Cette -- action est prioritaire sur l'écriture via le bus -- . Mettre 'load' à 1 -- . Ecrire dans 'input' (actualisation immédiate) -- . Mettre 'load' à 0 pour latcher library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; use work.nono_const.all; entity regIO is generic(adr : T_ADDRESS); port( bus_data: inout T_DATA; bus_address: in T_ADDRESS; input: in T_DATA; output: out T_DATA; rw: in std_logic; load: in std_logic; ck: in std_logic; rst: in std_logic ); end entity; architecture rtl of regIO is signal REG : T_DATA :=(others => '0'); begin p_w:process(ck,load,input,rst) begin if(ck='1') then if(bus_address=adr) then if(rw='0') then if(load='0') then REG<=bus_data; end if; else -- RW=1 : la CM lit => on écrit sur le bus bus_data<=REG; end if; else bus_data<=(others => 'Z'); end if; else bus_data<=(others => 'Z'); end if; -- chargement : prioritaire sur l'écriture via le bus if(load='1' and not(ck='1' and rw='1')) then REG<=input; end if; -- reset : prioritaire sur tout if(rst'event and rst='1') then REG<=(others => '0'); bus_data<=(others => 'Z'); end if; end process p_w; -- p_load : process(load,input) -- begin -- if(load='1') then -- REG<=input; -- end if; -- end process p_load; -- p_reset : process(rst) -- begin -- if(rst'event and rst='1') then -- REG<=(others => '0'); -- bus_data<=(others => 'Z'); -- end if; -- end process p_reset; output<=REG; end rtl;