Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

concaténation en VHDL



  1. #1
    Momo54500

    concaténation en VHDL


    ------

    Bonsoir,

    je m'exerce un peu en VHDL et je suis tombé sur un exercice intéressant qui est la réalisation d'un demi additionneur 1 bit.

    Voici le code que j'ai réalisé :

    Code:
    LIBRARY ieee;
    USE ieee.std_logic_1164.all;
    
    Entity Exo2 is
    	Port(A,B : in std_logic;
    		R,S : out std_logic);
    End Exo2;
    
    Architecture Mycircuit of Exo2 is
    	Begin
    			with (A&B) select
    			   R <= '1' when "11",
    				     '0' when others,
    				S <= '1' when "01",
    				     '1' when "10",
    				     '0' when others;
    			     
    End Mycircuit;
    Et quand je compile il me dit "can't determine function of operator "&" -- 2 functions possible"

    Est ce que quelqu'un aurait une solution svp?

    Merci à vous.

    -----
    Dernière modification par Antoane ; 12/04/2021 à 17h11. Motif: Ajout balises [/code]

  2. Publicité
  3. #2
    jiherve

    Re : concaténation en VHDL

    Bonsoir,
    plusieurs erreurs:
    manque un point virgule apres le when others de R.
    Select n'est pas multisortie il en faut 2
    "with (A&B) select" est interdit il faut passer par un signal ou variable intermediaire.
    çà cà compile:
    Code:
    LIBRARY IEEE;
    use IEEE.std_logic_1164.all;
    
    Entity Exo2 is
    Port(A,B : in std_logic;
    R,S : out std_logic);
    End Exo2;
    
    Architecture Mycircuit of Exo2 is
    signal concat : std_logic_vector(1 downto 0); 
    Begin
    concat <= (A&B);
    with concat select
    R <= 	'1' when "11",
    	'0' when others;
    with concat select
    S <= 	'1' when "01",
    	'1' when "10",
    	'0' when others;
    
    End Mycircuit;
    avec un case on peut affecter R et S d'un coup pour chaque cas.
    Utilise les balises codes cela sera plus clair et respecte bien les indentations, c'est à la fois plus lisible mais aussi plus joli.
    JR
    Dernière modification par jiherve ; 06/04/2021 à 18h35.
    l'électronique c'est pas du vaudou!

  4. #3
    Momo54500

    Re : concaténation en VHDL

    Bonsoir, merci à vous.

    Je pensais que le with (A&B) select était multisortie. Et je en savais pas non plus qu'il fallait passer par une variable intermédiaire.

    Pouvez vous me montrer avec le case cela donne quoi svp?

    Merci à vous.

  5. #4
    jiherve

    Re : concaténation en VHDL

    Bonjour,
    voila mais j'ai rajouté un process englobant c'est mieux cela permet l'utilisation d'une variable au lieu d'un signal:
    Code:
    LIBRARY IEEE;
    use IEEE.std_logic_1164.all;
    
    Entity Exo2 is
    Port(A,B : in std_logic;
    R,S : out std_logic);
    End Exo2;
    
    Architecture Mycircuit of Exo2 is
    Begin
      add : process (A,B)
      variable concat : std_logic_vector(1 downto 0); 
      begin
        concat := (A&B);
        case concat is
          when "11" =>
            R <= '1';
    	S <= '0';
          when "10" =>
            R <= '0' ;
    	S <= '1';
          when "01" =>
            R <= '0' ;
    	S <= '1';
          when others  =>
            R <= '0' ;
    	S <= '0';
        end case;
     end process;
    
    
    End Mycircuit;
    JR
    l'électronique c'est pas du vaudou!

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

    Re : concaténation en VHDL

    Bonjour,

    Merci à vous. Je vais essayer de mieux comprendre l'utilisation du case.

  8. #6
    jiherve

    Re : concaténation en VHDL

    Bonjour,
    bonne idée ,c'est assez proche du c, mais ce qu'il faut bien saisir en VHDL c'est la différence comportementale entre un signal et une variable et la concurrence implicite entre process.
    JR
    l'électronique c'est pas du vaudou!

  9. Publicité
  10. #7
    Momo54500

    Re : concaténation en VHDL

    Oui justement, vous pourriez expliquer brièvement la différence entre signal et variable?
    C'est quand qu'on peut utiliser un signal et c quand qu'on peut utiliser une variable?

    Merci à vous.

  11. #8
    jiherve

    Re : concaténation en VHDL

    Bonsoir,
    un signal peut être partagé par plusieurs process , pas une variable de façon générale qui n'est vue que le process où elle est déclarée, il existe pourtant les "shared variables" mais çà ce n'est à utiliser que lorsque l'on maitrise bien le VHDL.
    L'autre différence est comportementale:
    un signal est affecté après un "delta" le quantum de simulation ,une variable est affectée immédiatement.
    ainsi si tu écris:
    au début signal1 vaux" toto"
    signal1 <= "titi";
    signal2 <= signal1;
    alors signal2 vaudra "toto" à la fin du quantum(delta) de simulation(un tour du process) et signal1 vaudra "titi"
    par contre
    variable := titi;
    signal2 <= variable;
    alors signal2 vaudra "titi" à la fin du quantum(delta) de simulation
    JR
    l'électronique c'est pas du vaudou!

  12. #9
    Momo54500

    Re : concaténation en VHDL

    Bonsoir,

    merci à vous pour votre réponse. désolé pour la réponse tardive je n'avais pas reçu de notifications.

    En effet là je comprends mieux merci à vous.

Discussions similaires

  1. [Programmation] Problème en VHDL avec les multi fichiers vhdl
    Par drbug dans le forum Électronique
    Réponses: 2
    Dernier message: 02/02/2016, 11h32
  2. Concaténation
    Par fabien024 dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 03/11/2014, 10h40
  3. commande d'ascenseur avec VHDL la carte vhdl
    Par chakib123 dans le forum Électronique
    Réponses: 6
    Dernier message: 02/06/2014, 02h41
  4. Point flottant en VHDL et vhdl-200x
    Par grel08128103 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 02/09/2008, 19h47
  5. Concatenation
    Par McFly dans le forum Électronique
    Réponses: 5
    Dernier message: 21/05/2006, 12h06
Découvrez nos comparatifs produits sur l'informatique et les technologies.