summaryrefslogtreecommitdiff
path: root/2004/n/fpga/src/registre/registre.vhd
diff options
context:
space:
mode:
Diffstat (limited to '2004/n/fpga/src/registre/registre.vhd')
-rw-r--r--2004/n/fpga/src/registre/registre.vhd105
1 files changed, 105 insertions, 0 deletions
diff --git a/2004/n/fpga/src/registre/registre.vhd b/2004/n/fpga/src/registre/registre.vhd
new file mode 100644
index 0000000..23a0079
--- /dev/null
+++ b/2004/n/fpga/src/registre/registre.vhd
@@ -0,0 +1,105 @@
+-- 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 : unsigned);
+ port(
+ bus_data: inout unsigned ((NB_BIT_DATA - 1) downto 0);
+ bus_address: in unsigned ((NB_BIT_ADDRESS - 1) downto 0);
+ input: in unsigned(7 downto 0);
+ output: out unsigned(7 downto 0);
+ 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 : unsigned((NB_BIT_DATA - 1) downto 0):=(others => '1');
+
+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') 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;
+
+
+
+
+
+
+