From a5650896d8e038c2938175c9ea92d7a9554f7f02 Mon Sep 17 00:00:00 2001 From: galmes Date: Sun, 29 Feb 2004 16:16:56 +0000 Subject: Déplacement de fichiers. --- 2004/n/fpga/src/decodisa/bch_decodeur4.vhd | 76 ++++++++++++++++++++++++++++++ 2004/n/fpga/src/decodisa/decodeur4.vhd | 51 ++++++++++++++++++++ 2004/n/fpga/src/packages/isa_const.vhd | 33 +++++++++++++ 2004/n/fpga/src/packages/nono_const.vhd | 63 +++++++++++++++++++++++++ 2004/n/fpga/src/registre/reg_rw.vhd | 3 +- 5 files changed, 225 insertions(+), 1 deletion(-) create mode 100644 2004/n/fpga/src/decodisa/bch_decodeur4.vhd create mode 100644 2004/n/fpga/src/decodisa/decodeur4.vhd create mode 100644 2004/n/fpga/src/packages/isa_const.vhd create mode 100644 2004/n/fpga/src/packages/nono_const.vhd diff --git a/2004/n/fpga/src/decodisa/bch_decodeur4.vhd b/2004/n/fpga/src/decodisa/bch_decodeur4.vhd new file mode 100644 index 0000000..2f7ca18 --- /dev/null +++ b/2004/n/fpga/src/decodisa/bch_decodeur4.vhd @@ -0,0 +1,76 @@ +-- bch_decodeur4.vhd +-- Eurobot 2004 : APB Team +-- Auteur : Pierre-André Galmes +-- Test du decodeur4. + +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_decodeur4 is +end bch_decodeur4; + +architecture sim1 of bch_decodeur4 is + + component decodeur4 + 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 : decodeur4 + 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_decodeur4 of bch_decodeur4 is + for sim1 + for all : decodeur4 use entity work.decodeur4(RTL); end for; + end for; +end cf1_bch_decodeur4; + diff --git a/2004/n/fpga/src/decodisa/decodeur4.vhd b/2004/n/fpga/src/decodisa/decodeur4.vhd new file mode 100644 index 0000000..6ecb12e --- /dev/null +++ b/2004/n/fpga/src/decodisa/decodeur4.vhd @@ -0,0 +1,51 @@ +-- decodeur4.vhd +-- Eurobot 2004 : APB Team +-- Auteur : Pierre-André Galmes +-- Décodeur de bus d'addresse pour 4 registres. + +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/packages/isa_const.vhd b/2004/n/fpga/src/packages/isa_const.vhd new file mode 100644 index 0000000..5f5d1d4 --- /dev/null +++ b/2004/n/fpga/src/packages/isa_const.vhd @@ -0,0 +1,33 @@ +-- isa_const.vhd +-- Eurobot 2004 : APB Team +-- Auteur : Pierre-André Galmes +-- Fichier de déclaration de constantes. + +-- RQ : pour une indentation bien sous vim : +-- 1 - ":set shiftwidth=4" +-- 2 - se placer sous "package nono_const is" +-- 3 - tapez : = puis shift+G + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + + +-- Constantes relatives au bus ISA +package isa_const is + + -- Temps d'une période d'horloge sur le bus ISA + constant ISA_CK_PERIOD : time := 50 ns; + + -- Ligne RW : lecture et écriture + constant ISA_READ : std_logic := '0'; + constant ISA_WRITE : std_logic := '1'; + + -- Nombre de bits du bus d'adresse + constant NB_BIT_ADDRESS_ISA : integer := 20; + subtype T_ADDRESS_ISA is std_logic_vector((NB_BIT_ADDRESS_ISA - 1) downto 0); + +end isa_const; + + diff --git a/2004/n/fpga/src/packages/nono_const.vhd b/2004/n/fpga/src/packages/nono_const.vhd new file mode 100644 index 0000000..e7b0454 --- /dev/null +++ b/2004/n/fpga/src/packages/nono_const.vhd @@ -0,0 +1,63 @@ +-- nono_const.vhd +-- Eurobot 2004 : APB Team +-- Auteur : Pierre-André Galmes +-- Fichier de déclaration de constantes. + +-- RQ : pour une indentation bien sous vim : +-- 1 - ":set shiftwidth=4" +-- 2 - se placer sous "package nono_const is" +-- 3 - tapez : = puis shift+G + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + + +-- Constantes relatives +package nono_const is + + -- Temps d'une période d'horloge sur la carte + constant CK_PERIOD : time := 10 ns; + + -- Taille d'une addresse sur la carte + -- RQ : 10 = nb suffisant + -- 12 = 3 digit en héxa + constant NB_BIT_ADDRESS : integer := 10; + + -- Taille des données sur la carte + constant NB_BIT_DATA : integer := 8; + + -- Définition de nouveaux types : T_ADDRESS et T_DATA + --subtype T_ADDRESS is unsigned ((NB_BIT_ADDRESS - 1) downto 0); + --subtype T_DATA is unsigned ((NB_BIT_DATA - 1) downto 0); + subtype T_ADDRESS is std_logic_vector ((NB_BIT_ADDRESS - 1) downto 0); + subtype T_DATA is std_logic_vector ((NB_BIT_DATA - 1) downto 0); + + -- Les différentes banques d'adresses (4 x 256) + -- Rq pour Pierre : ça va influer sur le bloc de gestion du bus + constant START_ADDR_B0 : T_ADDRESS := "0000000000"; + constant START_ADDR_B1 : T_ADDRESS := "0100000000"; + constant START_ADDR_B2 : T_ADDRESS := "1000000000"; + constant START_ADDR_B3 : T_ADDRESS := "1100000000"; + + -- Les addresses des différents registres. + + -- gestion des interruptions + constant A_INTERRUPT_MANAGER : T_ADDRESS := START_ADDR_B0 + x"00"; + -- Bloc d'IO1 + constant A_IO1_REG_DATA : T_ADDRESS := START_ADDR_B0 + x"01"; + constant A_IO1_REG_DIRECTION : T_ADDRESS := START_ADDR_B0 + x"02"; + constant A_IO1_REG_INTERRUPT_MASK : T_ADDRESS := START_ADDR_B0 + x"03"; + constant A_IO1_READ_OUTPUT : T_ADDRESS := START_ADDR_B0 + x"04"; + -- Bloc d'IO2 + constant A_IO2_REG_DATA : T_ADDRESS := START_ADDR_B0 + x"05"; + constant A_IO2_REG_DIRECTION : T_ADDRESS := START_ADDR_B0 + x"06"; + constant A_IO2_REG_INTERRUPT_MASK : T_ADDRESS := START_ADDR_B0 + x"07"; + constant A_IO2_READ_OUTPUT : T_ADDRESS := START_ADDR_B0 + x"08"; + -- Bloc port série + -- Bloc caméra + -- Bloc PWM + -- Bloc I²C + -- Bloc servo-moteurs +end nono_const; diff --git a/2004/n/fpga/src/registre/reg_rw.vhd b/2004/n/fpga/src/registre/reg_rw.vhd index 1c81139..32e940e 100644 --- a/2004/n/fpga/src/registre/reg_rw.vhd +++ b/2004/n/fpga/src/registre/reg_rw.vhd @@ -6,7 +6,8 @@ -- Principe : -- Si (write et enable) alors sauvegarde entrée et copie entrée sur sortie. -- Si (read et enable) alors copie dernière valeur sauvegardée sur entrée. --- Si (pas enable) alors copie dernière valeur sauvegardée sur sortie. +-- Si (pas enable) alors copie dernière valeur sauvegardée sur sortie et +-- entrée en haute impédance. library ieee; use ieee.std_logic_1164.all; -- cgit v1.2.3