From d7022d2d559d5145b89c0eccd51223d36e33c8f2 Mon Sep 17 00:00:00 2001 From: galmes Date: Mon, 5 Apr 2004 06:21:46 +0000 Subject: GPIO : Passage de gpio au fonctionnement des interruptions avec 2 registres. Ce fichier a été testé sur carte et fonctionne correctement. --- 2004/n/fpga/src/gpio/gpio.vhd | 80 ++++++++++++++++++++++++++++++++----------- 1 file changed, 60 insertions(+), 20 deletions(-) (limited to '2004/n/fpga/src/gpio/gpio.vhd') diff --git a/2004/n/fpga/src/gpio/gpio.vhd b/2004/n/fpga/src/gpio/gpio.vhd index 7ada162..32a9227 100644 --- a/2004/n/fpga/src/gpio/gpio.vhd +++ b/2004/n/fpga/src/gpio/gpio.vhd @@ -1,7 +1,12 @@ -- gpio.vhd -- Eurobot 2004 : APB Team -- Auteur : Pierre-André Galmes --- Fichier modèle pour la déclaration de module. +-- General Purpose Public Output. + +-- Caractéristiques : +-- paramétrage de chaque pin en entrée ou sortie. +-- paramétrage de la détection des interruptions (front montant et/ou +-- descendant). library ieee; use ieee.std_logic_1164.all; @@ -13,7 +18,7 @@ use work.nono_const.all; entity gpio is port( rst : in std_logic; - clk_i : in std_logic; -- clock du bus isa + clk_b : in std_logic; -- clock de bus clk_m : in std_logic; -- master clock rw : in std_logic; -- read (0) / write (1) TODO ?? interrupt : out std_logic; @@ -22,7 +27,8 @@ entity gpio is -- chip select cs_reg_data : in std_logic; cs_reg_direction : in std_logic; - cs_reg_it_mask : in std_logic; + cs_reg_it_up_mask : in std_logic; + cs_reg_it_down_mask : in std_logic; cs_read_output : in std_logic ); end entity; @@ -31,6 +37,8 @@ architecture RTL of gpio is -- Définition des composants utilisés. +-- TODO : CONtinuer à partir d'ICICICICCICIC + -- Registre. component reg_rw is port ( @@ -43,7 +51,7 @@ component reg_rw is ); end component; --- ET bit à bit à sortie trhee state. +-- ET bit à bit à sortie three state. component gpio_direction is port ( direction_mask : in T_DATA; @@ -52,8 +60,19 @@ component gpio_direction is ); end component; --- détecteur d'interruption 8 bits. -component gpio_it_detect is +-- détecteur de changement d'état sur front descendant 8 bits. +component gpio_it_detect_down 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; + +-- détecteur de changement d'état sur front montant 8 bits. +component gpio_it_detect_up is port ( clk : in std_logic; rst : in std_logic; @@ -66,8 +85,6 @@ end component; -- Composant three-state. component tristate is port ( - rst : std_logic; - clk : std_logic; enable : in std_logic; data_in : in T_DATA; data_out : out T_DATA @@ -78,9 +95,12 @@ end component; -- clk, rst... sont définis dans l'entity du GPIO. -- signal bus_direction_mask : T_DATA; -signal bus_it_mask : T_DATA; +signal bus_it_up_mask : T_DATA; +signal bus_it_down_mask : T_DATA; signal bus_reg_data : T_DATA; signal rst_it : std_logic; +signal it_up : std_logic; +signal it_down : std_logic; begin @@ -89,7 +109,7 @@ begin -- Reg_direction_mask : reg_rw port map ( - clk_i, + clk_b, rst, rw, cs_reg_direction, @@ -100,7 +120,7 @@ port map ( -- Reg_data : reg_rw port map ( - clk_i, + clk_b, rst, rw, cs_reg_data, @@ -109,21 +129,30 @@ port map ( ); -- -Reg_it_mask : reg_rw +Reg_it_up_mask : reg_rw +port map ( + clk_b, + rst, + rw, + cs_reg_it_up_mask, + bus_data, + bus_it_up_mask +); + +-- +Reg_it_down_mask : reg_rw port map ( - clk_i, + clk_b, rst, rw, - cs_reg_it_mask, + cs_reg_it_down_mask, bus_data, - bus_it_mask + bus_it_down_mask ); -- read_output : tristate port map ( - rst, - clk_i, cs_read_output, io_output, bus_data @@ -141,13 +170,24 @@ port map ( rst_it <= rst or cs_read_output; -- -it_detector : gpio_it_detect +it_up_detector : gpio_it_detect_up +port map ( + clk_m, + rst_it, + io_output, + bus_it_up_mask, + it_up +); + +it_down_detector : gpio_it_detect_down port map ( clk_m, rst_it, io_output, - bus_it_mask, - interrupt + bus_it_down_mask, + it_down ); + +interrupt <= it_up or it_down; end RTL; -- cgit v1.2.3