From bda579951ddb3205b2e0c00151aef70f0380b302 Mon Sep 17 00:00:00 2001 From: galmes Date: Thu, 26 Feb 2004 13:59:15 +0000 Subject: Ajout d'un décodeur 4 addresses et du mapping du bloc gpio --- 2004/n/fpga/src/gpio/bch_decodeur.vhd | 76 ++++++++++++++ 2004/n/fpga/src/gpio/decodeur.vhd | 51 ++++++++++ 2004/n/fpga/src/gpio/gpio.vhd | 184 ++++++++++++++++++++++++++++++++++ 3 files changed, 311 insertions(+) create mode 100644 2004/n/fpga/src/gpio/bch_decodeur.vhd create mode 100644 2004/n/fpga/src/gpio/decodeur.vhd create mode 100644 2004/n/fpga/src/gpio/gpio.vhd (limited to '2004') diff --git a/2004/n/fpga/src/gpio/bch_decodeur.vhd b/2004/n/fpga/src/gpio/bch_decodeur.vhd new file mode 100644 index 0000000..d2ec51d --- /dev/null +++ b/2004/n/fpga/src/gpio/bch_decodeur.vhd @@ -0,0 +1,76 @@ +-- decodeur.vhd +-- Eurobot 2004 : APB Team +-- Auteur : Pierre-André Galmes +-- Fichier modèle pour la déclaration de module. + +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 bch_decodeur is +end bch_decodeur; + +architecture sim1 of bch_decodeur is + + component decodeur + generic ( + -- adresses des différents registres du module. + A_REG0 : T_ADDRESS; + A_REG1 : T_ADDRESS; + A_REG2 : T_ADDRESS; + A_REG3 : T_ADDRESS + -- si autre choses à déclarer... + ); + port ( + -- TODO : utile la clock ? + --clk : in std_logic; + bus_address : in T_ADDRESS; + enable0 : out std_logic; + enable1 : out std_logic; + enable2 : out std_logic; + enable3 : out std_logic + ); + end component; + + -- définiton des signaux + --signal clk : std_logic := '0'; + signal bus_address : T_ADDRESS; + signal enable0 : std_logic; + signal enable1 : std_logic; + signal enable2 : std_logic; + signal enable3 : std_logic; + +begin + U1 : decodeur + generic map ( + -- Définition des addresses. + A_REG0 => A_IO1_REG_DATA, + A_REG1 => A_IO1_REG_DIRECTION, + A_REG2 => A_IO1_REG_INTERRUPT_MASK, + A_REG3 => A_IO1_READ_OUTPUT + ) + port map ( + bus_address => bus_address, + enable0 => enable0, + enable1 => enable1, + enable2 => enable2, + enable3 => enable3 + ); + + --clk <= not clk after (CK_PERIOD/2); + bus_address <= A_IO1_REG_DIRECTION, + A_IO1_READ_OUTPUT after 3*CK_PERIOD, + A_IO1_REG_INTERRUPT_MASK after 5*CK_PERIOD, + A_IO1_REG_DATA after 7*CK_PERIOD; +end sim1; + +configuration cf1_bch_decodeur of bch_decodeur is + for sim1 + for all : decodeur use entity work.decodeur(RTL); end for; + end for; +end cf1_bch_decodeur; + diff --git a/2004/n/fpga/src/gpio/decodeur.vhd b/2004/n/fpga/src/gpio/decodeur.vhd new file mode 100644 index 0000000..37848ac --- /dev/null +++ b/2004/n/fpga/src/gpio/decodeur.vhd @@ -0,0 +1,51 @@ +-- decodeur4.vhd +-- Eurobot 2004 : APB Team +-- Auteur : Pierre-André Galmes +-- Décodeur 4 addresse. + +library ieee; +use ieee.std_logic_1164.all; + +-- TODO : si on décommente les lignes du dessous, on a des Warning !! Est-ce +-- normal ? Cela vient-il d'un problème de programmation caché ? Est-ce des +-- conflits entre les librairies ? +--use ieee.std_logic_arith.all; +--use ieee.std_logic_unsigned.all; + +use work.nono_const.all; + +entity decodeur is + generic ( + -- adresses des différents registres du module. + A_REG0 : T_ADDRESS; + A_REG1 : T_ADDRESS; + A_REG2 : T_ADDRESS; + A_REG3 : T_ADDRESS + -- si autre choses à déclarer... + ); + port ( + -- TODO : utile la clock ? + --clk : in std_logic; + bus_address : in T_ADDRESS; + enable0 : out std_logic; + enable1 : out std_logic; + enable2 : out std_logic; + enable3 : out std_logic + ); +end entity; + +architecture RTL of decodeur is +begin + +-- process (clk) +-- begin +-- if (clk'event and clk = '1') then +-- end if; +-- end process; + + -- process combinatoire. + enable0 <= '1' when (bus_address = A_REG0) else '0'; + enable1 <= '1' when (bus_address = A_REG1) else '0'; + enable2 <= '1' when (bus_address = A_REG2) else '0'; + enable3 <= '1' when (bus_address = A_REG3) else '0'; +end RTL; diff --git a/2004/n/fpga/src/gpio/gpio.vhd b/2004/n/fpga/src/gpio/gpio.vhd new file mode 100644 index 0000000..90704f3 --- /dev/null +++ b/2004/n/fpga/src/gpio/gpio.vhd @@ -0,0 +1,184 @@ +-- gpio.vhd +-- Eurobot 2004 : APB Team +-- Auteur : Pierre-André Galmes +-- Fichier modèle pour la déclaration de module. + +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 gpio is + generic ( + A_REG_DATA_WRITE : T_ADDRESS; + A_REG_DATA_READ : T_ADDRESS; + A_REG_DIRECTION : T_ADDRESS; + A_REG_INTERRUPT_MASK : T_ADDRESS + ); + port( + rst : in std_logic; + clk_i : in std_logic; -- clock du bus isa + clk_m : in std_logic; -- master clock + rw : in std_logic; -- read (0) / write (1) TODO ?? + interrupt : out std_logic; + bus_address : in T_ADDRESS; + bus_data : inout T_DATA; + io_output : inout T_DATA + ); +end entity; + +architecture RTL of gpio is + +-- Définition des composants utilisés. + +-- Décodeur d'addresses. +component decodeur is + generic ( + -- adresses des différents registres du module. + A_REG0 : T_ADDRESS; + A_REG1 : T_ADDRESS; + A_REG2 : T_ADDRESS; + A_REG3 : T_ADDRESS + ); + port ( + bus_address : in T_ADDRESS; + enable0 : out std_logic; + enable1 : out std_logic; + enable2 : out std_logic; + enable3 : out std_logic + ); +end component; + +-- Registre. +component reg_rw is + port ( + clk : in std_logic; + rst : in std_logic; + rw : in std_logic; -- read (ISA_READ) / write (ISA_WRITE) + enable : in std_logic; + data : inout T_DATA; + data_out : out T_DATA -- data courant + ); +end component; + +-- ET bit à bit à sortie trhee state. +component gpio_direction is + port ( + direction_mask : in T_DATA; + data_in : in T_DATA; + data_out : out T_DATA + ); +end component; + +-- détecteur d'interruption 8 bits. +component gpio_it_detect is + port ( + clk : in std_logic; + rst : in std_logic; + data_in : in T_DATA; + it_mask : in T_DATA; + it_detected : out std_logic + ); +end component; + +-- Composant three-state. +component tristate is + port ( + enable : in std_logic; + data_in : in T_DATA; + data_out : out T_DATA + ); +end component; + +-- définition des signaux. +-- clk, rst... sont définis dans l'entity du GPIO. +-- +signal en_reg_direction : std_logic; +signal en_reg_it_mask : std_logic; +signal en_reg_data : std_logic; +signal en_read_output : std_logic; +-- +signal bus_direction_mask : T_DATA; +signal bus_it_mask : T_DATA; +signal bus_reg_data : T_DATA; + +begin + +-- Mapping des composants. +decod : decodeur +generic map ( + A_IO1_REG_DATA, + A_IO1_REG_DIRECTION, + A_IO1_REG_INTERRUPT_MASK, + A_IO1_READ_OUTPUT +) +port map ( + bus_address, + en_reg_data, + en_reg_direction, + en_reg_it_mask, + en_read_output +); + +-- +Reg_direction_mask : reg_rw +port map ( + clk_m, + rst, + rw, + en_reg_direction, + bus_data, + bus_direction_mask +); + +-- +Reg_data : reg_rw +port map ( + clk_m, + rst, + rw, + en_reg_data, + bus_data, + bus_reg_data +); + +-- +Reg_it_mask : reg_rw +port map ( + clk_m, +rst, +rw, +en_reg_data, +bus_data, +bus_it_mask +); + +-- +read_output : tristate +port map ( + en_read_output, + io_output, + bus_data +); + +-- +gest_direction : gpio_direction +port map ( + bus_direction_mask, + bus_reg_data, + io_output +); + +-- +it_detector : gpio_it_detect +port map ( + clk_m, + rst, + io_output, + bus_it_mask, + interrupt +); + +end RTL; -- cgit v1.2.3