IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VHDL Discussion :

Compatibilité std_logic et std_logic_vector


Sujet :

VHDL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Compatibilité std_logic et std_logic_vector
    Bonjour,

    Je suis en train d'apprendre le VHDL et je fais face à un problème que je ne comprend pas.

    Le code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    architecture Behavioral of reset_process is
     
    	 component pulse_after
        Port ( rst : in  STD_LOGIC;
    	    clk : in STD_LOGIC;
               launch : in  STD_LOGIC;
               nb_period : in  integer;
    	   pulse_size : in integer;
               s_out : out  STD_LOGIC
    			 );
    	 end component;
     
    	signal EN : STD_LOGIC := '0';
     
    	signal test: STD_LOGIC_VECTOR(7 downto 0) := "00000000";
    	signal launch_timer : STD_LOGIC_VECTOR(7 downto 0) := "00000001";
    begin
    	timer0 : pulse_after 
    		port map (rst, clk, launch_timer(0), 10, 10, test(0));
    	timer1 : pulse_after	
    		port map (rst, clk, launch_timer(1), 10, 10, test(1)); 
    	timer2 : pulse_after
    		port map (rst, clk, launch_timer(2), 10, 10, test(2)); 
    	timer3 : pulse_after
    		port map (rst, clk, launch_timer(3), 10, 10, test(3)); 
    	timer4 : pulse_after
    		port map (rst, clk, launch_timer(4), 10, 10, test(4)); 
    	timer5 : pulse_after
    		port map (rst, clk, launch_timer(5), 10, 10, test(5)); 
    	timer6 : pulse_after
    		port map (rst, clk, launch_timer(6), 10, 10, test(6)); 
    	timer7 : pulse_after
    		port map (rst, clk, launch_timer(7), 10, 10, test(7)); 
    	process (rst, clk, EN)
    	begin
    		if rst = '1' then
    			launch_timer <= "00000001";
                            rdy <= '0';
    		elsif falling_edge (EN) then
    		   case launch_timer is
    				when "00000001" => launch_timer <= "00000010";
    				when "00000010" => launch_timer <= "00000100";
    				when "00000100" => launch_timer <= "00001000";
    				when "00001000" => launch_timer <= "00010000";
    				when "00010000" => launch_timer <= "00100000";
    				when "00100000" => launch_timer <= "01000000";
    				when "01000000" => launch_timer <= "10000000";
    				when "10000000" => rdy <= '1';
    				when others 	 => launch_timer <= launch_timer;
    			end case;
    		end if;
    	end process;
     
    	EN <= test(0) or test(1) or test(2) or test(3) or test(4) or test(5) or test(6) or test(7);
    end Behavioral;
    Le composant pulse_after sert à mettre sa sortie s_out à '1' après un temps nb_period et pendant pulse_size, puis retombe à '0'.

    Lorsque je simule ce code (avec Xsim, l'outil Xilinx), test(0) se met à un état 'X' au lieu de 1 et retombe bien à '0' après pulse_size...
    Si je fais une simulation en remplacant test (std_logic_vector) par 8 std_logic, la simulation fonctionne correctement...

    Quelqu'un saurait m'expliquer pourquoi ?

    Merci beaucoup par avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 61
    Points : 121
    Points
    121
    Par défaut
    Bonsoir,

    Deux remarques :
    1. mapper un composant par des positions "relatives" (comme fait ici) est une très mauvaise idée : grosse source de bug. De plus, on ne connait que difficilement le nom du signal de l'entité qui est mappée.
    2. vous mappez 8 pulse_after. si leur sortie est bien le dernier signal (ici test(i)), alors le 'X' est logique puisque plusieurs drivers (vos pulse_after) pilotent le même 'test' si test est un std_logic. Votre solution de mettre test en tant que std_logic_vector(7 downto 0) est la bonne : chaque pulse_after a sa propre sortie, et ces 8 sorties sont regroupées par le OR.


    Cdlt

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour et merci pour votre réponse.

    2 - Justement, en utilisant un STD_LOGIC_VECTOR, test(0) bascule à l'état 'X' au lieu de 1 donc je ne passe jamais à l'état suivant. C'est en utilisant des STD_LOGIC (test0, test1, test2.... jusque test7) que j'arrive au résultat escompté. D'où ma question...

    Merci

Discussions similaires

  1. Compatibilité D5 / VNC
    Par gord's dans le forum Outils
    Réponses: 7
    Dernier message: 12/05/2004, 17h02
  2. help!! problème de compatibilité ascendante
    Par valfredr dans le forum XMLRAD
    Réponses: 5
    Dernier message: 16/06/2003, 16h15
  3. [7RC3] Compatibilité avec les anciennes versions ...
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 3
    Dernier message: 15/05/2003, 16h46
  4. Compatibilité Visibroker 4.5 C++ Builder
    Par manuel dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 21h57
  5. compatibilité des librairies directX8
    Par Freakazoid dans le forum DirectX
    Réponses: 3
    Dernier message: 23/05/2002, 21h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo