summaryrefslogtreecommitdiff
path: root/2004/n/fpga/src/gpio/reg_io.vhd
diff options
context:
space:
mode:
Diffstat (limited to '2004/n/fpga/src/gpio/reg_io.vhd')
-rw-r--r--2004/n/fpga/src/gpio/reg_io.vhd35
1 files changed, 17 insertions, 18 deletions
diff --git a/2004/n/fpga/src/gpio/reg_io.vhd b/2004/n/fpga/src/gpio/reg_io.vhd
index 951c56d..43416e4 100644
--- a/2004/n/fpga/src/gpio/reg_io.vhd
+++ b/2004/n/fpga/src/gpio/reg_io.vhd
@@ -1,15 +1,20 @@
-- reg_io.vhd
-- Eurobot 2004 : APB Team
-- Auteur : Pierre-André Galmes
--- Registre dont on peut lire les valeurs sur data_out.
---
+-- 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;
@@ -17,13 +22,11 @@ use work.nono_const.all;
entity reg_io is
port (
rst : in std_logic;
-
- -- XXX : savoir si read = 0 ou 1 !!
- rw : in std_logic; -- read (0) / write (1)
+ rw : in std_logic; -- read (ISA_READ) / write (ISA_WRITE)
enable : in std_logic;
- data_in : inout T_DATA;
- data_out : inout T_DATA
- --data_direction : in T_DATA
+ 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;
@@ -32,26 +35,22 @@ architecture BEHAV of reg_io is
signal REG : T_DATA;
begin
-- process
- process (rst, rw, enable, data_in)
+ process (rst, rw, enable, data_f_in, data_b_in)
begin
if (rst = '1') then
REG <= x"00";
- -- data_in <= "ZZZZZZZZ";
else
if (enable = '1') then
if (rw = ISA_WRITE) then
- REG <= data_in;
- -- data_out <= REG;
+ REG <= data_f_in;
elsif (rw = ISA_READ) then
- data_in <= data_out;
- -- data_in <= REG;
+ data_f_in <= data_b_in;
end if;
else
- data_in <= "ZZZZZZZZ";
- -- data_out <= REG;
+ data_f_in <= "ZZZZZZZZ";
end if;
end if;
end process;
- data_out <= "ZZZZZZZZ" when (rw = ISA_READ and enable = '1') else REG;
+ data_out <= REG;
end BEHAV;