[VHDL] Debutant ^^

Electronique numérique / Circuits logiques programmables EPLD, CPLD, FPGA d'Altera ou de Xilinx VHDL, Verilog ou SystemC

Modérateur : Modérateur

zehle

[VHDL] Debutant ^^

Message 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]
zehle

Merci

Message 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]
JP
Administrateur
Administrateur
Messages : 2328
Inscription : 23 sept. 2003 19:14
Localisation : Strasbourg
Contact :

Message par JP »

Merci j'ai trouvé tout seul comme un grand ^^


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

Sensibilité

Message 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
Tamozai

Complement

Message 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.
Répondre