-- 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 port( cs: in std_logic; bus_data: inout T_DATA:=(others => 'Z'); 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(rst='1') then REG<=(others => '0'); elsif(ck'event and ck='1') then if(cs='1') then if(rw='0' and load='0') then REG<=bus_data; end if; end if; end if; -- chargement : prioritaire sur l'écriture via le bus -- if(load='1' and not(ck='1' and rw='1')) then if(load='1') then REG<=input; end if; end process; bus_data<=REG when (rw='1' and cs='1' and rst='0') else (others => 'Z'); output<=REG; end rtl;