Instanciation en VHDL
Répondre à la discussion
Affichage des résultats 1 à 23 sur 23

Instanciation en VHDL



  1. #1
    lanix

    Instanciation en VHDL


    ------

    bonjour,

    j'essaie d'instancié un certain nombre de composants en fonction d'un générique. voilà mon code qui génère une érreur "Syntax error near "for""

    for i in 1 to N generate
    begin
    entity work.porte(moore) port map (capteur_int=>capteur_int(i), capteur_ext=>capteur_ext(i), clk=>clk, raza=>raza, compteur_plus=>compteur_plus(i ), compteur_moins=>compteur_moins (i));
    end generate;

    merci de m'aider

    -----

  2. #2
    lanix

    Re : Instanciation en VHDL

    j'ai résolu mon problème, il fallait obligatoirement un label, désolé pour le post inutile.

  3. #3
    invite369d2cfd

    Re : Instanciation en VHDL

    SVP dans le cadre de l'instanciation, j'ai instancier le registre à décalge shifter17 de la façon si dessous mais j'ai compris comment le décalage de 17*1 a été réalisé et est ce que ceci est juste ou non comme syntaxe
    Code:
    i1:shifter17 port map(not_reset,clk_vec(1),clk,din_data,out_reg(1));-- décalage de 17*1
    voila la déclaration du registre
    Code:
    component shifter17 IS
    	PORT
    	(
    	aclr		: IN STD_LOGIC  := '1';
    		clken		: IN STD_LOGIC  := '1';
    		clock		: IN STD_LOGIC ;
    		shiftin		: IN STD_LOGIC;
    		shiftout		: OUT STD_LOGIC
    		
    	);
    END component;

  4. #4
    indri

    Re : Instanciation en VHDL

    Revoilà mon code ^^
    Ben oui c'est bon si tout les signaux sont bien des std_logic. Donc clk_vec et out_reg doivent être un std_logic_vector d'au moins 2 bits. Et shiftout est une sortie donc tu ne peux pas le modifier en dehors!
    Là où va le vent...

  5. A voir en vidéo sur Futura
  6. #5
    invite369d2cfd

    Re : Instanciation en VHDL

    d'accord, lorsque vous écrivez
    Code:
    case clk_vec is
    when "000000000001" =>
    dout_data<=din_data;
    when "000000000010" =>
    dout_data<=out_reg(1);
    ça veut dire que out_reg doit étre saisi (entré) ça peut étre contradictoire ???

  7. #6
    indri

    Re : Instanciation en VHDL

    non là je lis out_reg et je le copie dans dout_data....lire tu peux!

    Si tu mettais
    out_reg(1)<='0'; par exemple en dehors de la sous-entité...le synthétiseur t'aurais envoyé ballader! ^^
    Là où va le vent...

  8. #7
    invite369d2cfd

    Re : Instanciation en VHDL

    mais lors de l'éxécution, out_reg ne prend aucun valeur et ne se modifie pas, elle est toujours comme ça UUUU... et parsuite dout_data ne reçoit aucun valeur !!

  9. #8
    indri

    Re : Instanciation en VHDL

    ben c'est la sous-entité shifter17 qui la modifie!
    Soit tu l'as mal configurer, soit tu l'utilises mal!

    Je te conseille de tester une seule ip shifter de manière basique, tu met 1 en entrée, tu lance la clock et tu regarde si il y a bien un décalage soit en simu soit à l'oscillo!
    Là où va le vent...

  10. #9
    invite369d2cfd

    Re : Instanciation en VHDL

    voila je l'ai modifié de cette façon mais en vain out_reg toujours ne donne rien, je pense que l'instanciation ne fonctionne pas
    Code:
    LIBRARY ieee ;
    USE ieee.std_logic_1164.all ;
    USE ieee.std_logic_arith.all ;
    use ieee.std_logic_unsigned.all;
    use ieee.numeric_std.all;
    
    Entity OUTER_INTERLEAVING is
    PORT(
     		clk								: IN STD_LOGIC;
    		reset								: IN STD_LOGIC;
    	 	din_data							: inout std_logic;
    		dout_data							: out std_logic);
     END ENTITY;
    
    ARCHITECTURE behav of OUTER_INTERLEAVING is
    component shifter17 IS
    	PORT
    	(
    		clken		: IN STD_LOGIC  := '1';
    		clock		: IN STD_LOGIC ;
    		shiftin		: IN STD_LOGIC;
    		shiftout		: OUT STD_LOGIC
    		);
    END component;
    
    type tab is array(11 downto 0) of std_logic;--tableau de vector des sorties pour simplifier l'écriture
    signal clk_vec:std_logic_vector(11 downto 0);
    signal in_reg,out_reg:tab;
    
    begin
     i1:shifter17 port map(clk_vec(1),clk,din_data,out_reg(1));-- décalage de 17*1
    
    process(clk)--régistre à décalage de clk_en pour activer succesivement chaque registre à décalage
      variable compt:std_logic_vector(3 downto 0);
      begin
      if reset = '1' then
     clk_vec<="000000000001";
     compt:="0000";
    elsif (clk'event and clk='1')then
       out_reg(1)<='0';
    					case clk_vec is
    						when "000000000001" =>
    							dout_data<=din_data;
    						when "000000000010" =>
    							dout_data<=out_reg(1);
    						
    					when others => null;
    					end case;
    					if compt="1011" then
    						compt:="0000";
    					else
    					compt:=compt+1;
    					end if;
    clk_vec(11 downto 1)<=clk_vec(10 downto 0);
    clk_vec(0)<=clk_vec(11);
    end if;
    end process;
    end behav;

  11. #10
    indri

    Re : Instanciation en VHDL

    Là tu vas décaler le registre qu'une fois tous les 12 coups de clock et donc sortir le premiers bytes que 12*17 coups de clock plus tard!
    Là où va le vent...

  12. #11
    invite369d2cfd

    Re : Instanciation en VHDL

    d'accord, est ce que je peut déclarer 1 seul registre et l'instancier 12 fois au lieu d'utiliser 12 registres, je sais qu'il y'a différence de taille chacun fait un décalage différent, mais est ce que ça un effet sur le code?

  13. #12
    invite369d2cfd

    Re : Instanciation en VHDL

    Salut JR,
    SVP je veux savoir la configuration du composant à quelle bloc doit étre faite, voila l'exemple ci dessous lui manque la configuartion des composants AND et XOR , SVP si vous pouvez m'aider
    Code:
    library  ieee;
    use  ieee.std_logic_1164.all;
    
    entity exsimple is
       port ( A : in    std_logic;  
              B : in    std_logic;  
              C : in    std_logic;  
              D : out   std_logic); 
    end exsimple; 
    architecture BEHAVIORAL of exsimple is
       attribute BOX_TYPE   : STRING ; 
       signal S1 : std_logic; 
       component XOR2 
          port ( I0 : in    std_logic;  
                 I1 : in    std_logic;  
                 O  : out   std_logic); 
       end component; 
       component AND2 
          port ( I0 : in    std_logic;  
                 I1 : in    std_logic;  
                 O  : out   std_logic); 
       end component; 
    begin
       BLOC1 : XOR2 
          port map (I0=>B, I1=>A, O=>S1);
       BLOC2 : AND2 
          port map (I0=>C, I1=>S1, O=>D); 
    end BEHAVIORAL;

  14. #13
    jiherve

    Re : Instanciation en VHDL

    Bonsoir,
    Bien sur on pourrait décrire des composants mais pour ce type de fonction il est plus simple de virer les composants et d’écrire:
    s1 <= a xor b; et d <= c and s1; ce qui si s1 n'est qu'un terme intermédiaire d <= c and ( a xor b);
    Le VHDL est déjà assez verbeux comme çà pour ne pas en rajouter.
    JR
    l'électronique c'est pas du vaudou!

  15. #14
    invite369d2cfd

    Re : Instanciation en VHDL

    Bonsoir JR,
    J'ai tapé un code syntaxiquement est correcte mais l'éxécution ne fonctionne pas j'ai pas compris où est l'erreur
    voila le bout qui présente le probléme
    Code:
    entity conv is
    generic (N1,N2 :integer);
     port (
       
       clk : in std_logic; 
        reset : in std_logic;
       tab1 : in bit_vector (0 to N1);
       tab2 : out bit_vector (0 to N2)
       
           );
    end  conv;

  16. #15
    jiherve

    Re : Instanciation en VHDL

    Bonsoir,
    il faudrait contraindre les integer ici ils ne le sont pas donc -2^31 => 2^31-1 çà fait grand !
    Donc integer range 0 to ???
    JR
    l'électronique c'est pas du vaudou!

  17. #16
    invite369d2cfd

    Re : Instanciation en VHDL

    J'ai pas compris càd je modifie le type integer ?

  18. #17
    invite369d2cfd

    Re : Instanciation en VHDL

    ah cava ça marché
    merci

  19. #18
    jiherve

    Re : Instanciation en VHDL

    Re
    tant mieux mais cela ne m'étonne pas trop.
    JR
    l'électronique c'est pas du vaudou!

  20. #19
    invite369d2cfd

    fonction Matlab

    salut
    Je veux écrire un programme avec Matlab en utilisant la fonction convintrlv, sachant que j'ai 12 registres à décalage et chaque octet du flux, présenté cycliquement à l’une des 12 branches de l’entrelaceur, est décalé en sortie de 17 x j positions, où j est l’indice de la branche.
    comment ça sécrit la fonction ?
    merci

  21. #20
    jiherve

    Re : fonction Matlab

    Bonsoir,
    désolé matlab je n'en connais rien.
    JR
    l'électronique c'est pas du vaudou!

  22. #21
    invite369d2cfd

    code en VHDL

    SVP j'ai cette image qui illustre le principe de l’entrelaceur dans un cas simple, 3 branches et un registre à décalage de base, de profondeur 2 octets.
    Nom : inter.png
Affichages : 628
Taille : 18,2 Ko
    Le probléme c'est que j'ai pas compris le résultat aprés entrelacement comment ça s'est passé le décalage .. est ce qu'il y'a une formulaire ou une explication pour cela?
    SVP qui peut m'aider
    Merci

  23. #22
    indri

    Re : Instanciation en VHDL

    Le schéma est plutot claire je trouve!

    Il y a trois branches: sur les 2 dernieres il y a plusieurs "memoires"..

    En entrée on vient successivement écrire sur chaque ligne un nombre (à chaque coup de clock)
    De même en sortie, on lit succesivement chaque ligne...

    Au depart les mémoires sont vides..
    A ck1 (coup de clock 1) on ecrit le premier nombre sur la premiere ligne qu'on lit en même temps -> sortie =1
    A ck2 on ecrit 2 sur la première mémoire de la ligne 2 et on lit la dernières mémoires (qui est vide) => 0 (On decale ensuite(ou juste avant le prochain passage) chaque mémoire, le "2" bouge")
    A ck3 idem mais sur troiseme ligne (3 est dans la première "mémoire" et 0 dans dernière) => sortie =0
    A ck4 on revient à la première ligne, ou on récrit la sortie= entrée=> sortie=4

    Et ainsi de suite...a chaque passage de ligne on decale les mémoires, il faut donc plusieurs tours avant que la première valeur ecrite dans les mémoires d'un ligne sorte...
    Là où va le vent...

  24. #23
    invite369d2cfd

    Re : Instanciation en VHDL

    d'accord merci bien, mais est ce qu'il y'a une régle ou formule générale que je l'applique pour faire ce décalage. je parle en terme de code
    merci indri

Discussions similaires

  1. Vhdl
    Par invited701b211 dans le forum Électronique
    Réponses: 9
    Dernier message: 08/07/2010, 20h20
  2. Point flottant en VHDL et vhdl-200x
    Par invite6eee6b27 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 02/09/2008, 19h47
  3. vhdl
    Par invite165c4689 dans le forum Électronique
    Réponses: 4
    Dernier message: 16/05/2008, 15h04
  4. vhdl
    Par invite21ed25dc dans le forum Électronique
    Réponses: 12
    Dernier message: 09/12/2007, 14h29
  5. vhdl
    Par invitedcb8d9bb dans le forum Électronique
    Réponses: 5
    Dernier message: 29/03/2007, 19h52
Découvrez nos comparatifs produits sur l'informatique et les technologies.