Page 1 sur 1

[VHDL] Debutant ^^

Publié : 22 mai 2006 20:32
par zehle
Bonjour a tous

Je sais pas s'il y a des connaisseurs du langage VHDL, mais bon, comme on dit, qui ne tente rien n'a rien

Voila mon code :

Code du multiplexeur:

Code : Tout sélectionner

library IEEE;
use IEEE.std_logic_1164.all;

entity MUX is
  port (TIME_DATA    : in std_logic_vector(3 downto 0);
        ALARM_DATA   : in std_logic_vector(3 downto 0);
        SHOW_A       : in  std_logic;
        DISPLAY      : out std_logic_vector(3 downto 0));
end MUX;
architecture RTL of MUX is

begin
 
  DISP_MUX: process (TIME_DATA, ALARM_DATA)
  begin
    if SHOW_A = '1' then
      DISPLAY <= ALARM_DATA;
    else 
      DISPLAY <= TIME_DATA;
    end if;
  end process DISP_MUX;
               
end RTL;
Et son testbench (pour tester le fonctionnement du multiplexeur):
Code :

Code : Tout sélectionner

library IEEE;
use IEEE.std_logic_1164.all;

entity TB_MUX is 
end TB_MUX;

architecture BENCH of TB_MUX is

  -- component declaration for MUX
  component MUX
    port (TIME_DATA    : in std_logic_vector(3 downto 0):="0000";
          ALARM_DATA   : in std_logic_vector(3 downto 0);
          SHOW_A       : in  std_logic:='0';
          DISPLAY      : out std_logic_vector(3 downto 0));
  end component;

  -- local signal declarations
  signal TIME_DATA, ALARM_DATA, DISPLAY : std_logic_vector(3 downto 0);
  signal SHOW_A : std_logic;  

begin
  -- component instantiation of MUX
  --SHOW_A <= '0' after 20 ns;
  
  DUT : MUX port map (
  		TIME_DATA => TIME_DATA,
  		ALARM_DATA => ALARM_DATA, 
  		SHOW_A => SHOW_A, 
  		DISPLAY => DISPLAY
  	);
  -- stimulus process
   STIMULUS: process
   begin
      TIME_DATA  <= "0000"; 
      ALARM_DATA <= "1111";
      SHOW_A     <= '0';
      wait for 10 ns;
      SHOW_A     <= '1';
      wait for 10 ns;
   end process STIMULUS;

end BENCH;


Si vous suivez le fonctionnement du multiplexeur, normalement à la deuxieme initialisation de SHOW_A ( SHOW_A <= '1'), la sortie DISPLAY devrai passé à la valeur de ALARM_DATA, le probleme c'est que n'est pas le cas.

Pourriez vous m'eclairer? Peut etre un probleme de mapping des ports? ou autre chose ?
je debute en VHDL.

Merci pour votre Aide

Zehle[/code]

Merci

Publié : 22 mai 2006 22:45
par zehle
Merci j'ai trouvé tout seul comme un grand ^^

Code : Tout sélectionner

DISP_MUX: process (TIME_DATA, ALARM_DATA,[b]SHOW_A[/b])
  begin
    if SHOW_A = '1' then
      DISPLAY <= ALARM_DATA;
    else 
      DISPLAY <= TIME_DATA;
    end if;
  end process DISP_MUX;
[/b]

Publié : 23 mai 2006 18:40
par JP
Merci j'ai trouvé tout seul comme un grand ^^


:bravo: Ca servira peut être à d'autres. Merci pour la solution.

Sensibilité

Publié : 02 janv. 2007 13:47
par Leprodige
En effet, dans un process combinatoire, la liste des sensibilité doit comprendre tous les signaux qui vont entrainer un changement d'état.
Il était donc nécessaire ici de rajouter showA

Complement

Publié : 26 janv. 2007 23:55
par Tamozai
Oui tres important de na pas oublier de mettre les signaux qui sont testes dans le process en declenchement dans celui-ci.
Ne pas oublier de le faire lorsqu'il y a un reset prioritaire dans l'architecture.