[VHDL] Problème association de designs sous ModelSim
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

[VHDL] Problème association de designs sous ModelSim



  1. #1
    _T355Y

    [VHDL] Problème association de designs sous ModelSim


    ------

    Bonjour a tous !

    Je viens vers vous afin d'avoir un peu d'aide sur un problème que je rencontre. Je dois coder un diviseur en VHDL. Les données imposées:
    - utiliser un process qui fait la division en soustrayant et "by shifting" (shift-subtract division)
    - utiliser uniquement des vecteurs arithmétiques (e.g. de type UNSIGNED) au lieu du type integer. Utiliser le package std_logic_arith à la place de numeric_std (à cause des limites imposées par l'outil de synthétisation).

    J'ai codé mon entity diviseur. On nous demande bien évidemment de faire un testbench pour vérifier que notre diviseur fonctionne correctement. Et c'est là que je rencontre un problème: lorsque je lance la simulation, voila l'erreur qui apparait:
    Fatal: (vsim-3420) Array lengths do not match. Left is 5 (4 downto 0). Right is 1 (4 downto 4).
    Ca viendrait de la ligne 19 de mon code du diviseur, or cette ligne indique:
    Code:
    process(A,B)
    Je n'arrive pas à déterminer où le souci se situe exactement dans mon code...

    Mon entity diviseur:
    Code:
    library IEEE;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_unsigned.all;
    use IEEE.std_logic_arith.all;
    
    entity DIVIDER2 is
    	generic( m, n :  integer);
        port(
          A : in unsigned (m downto 0);
          B : in unsigned (n downto 0);
          Q : out unsigned (m downto 0);
          R : out unsigned (m downto 0)
        );
    end;
    
    architecture bhv of DIVIDER2 is
    	
    begin
    	process(A,B)
    	
    		variable dvd, qt: unsigned(m downto 0):="0";
    		variable dvsr: unsigned(n downto 0):="0";
    		variable zero: unsigned (m-n downto 0):="0";
    	
    	begin
    	
    		dvd := A;
    		dvsr := B&zero;      --B&(others=>'0')
    		qt := "0";
    		for i in 0 to (m-n) loop
    			if (dvd>=dvsr) then
    				dvd := dvd-dvsr;
    				qt := shl(qt, "1")+1;
    			else		
    				qt := shl(qt, "1");
    			end if;
    			dvsr := shr(dvsr,"1");
    		end loop;
    		Q <= qt;
    		R <= dvd;
    		
    	end process;
    end bhv;
    Mon testbench:
    Code:
    --même library que le diviseur
    entity TB_DIVIDER is
    end;
    
    architecture STRUCT of TB_DIVIDER is
      
    	signal A1 : unsigned (4 downto 0);
    	signal B1 : unsigned (3 downto 0);
    	signal Q1, R1 : unsigned (4 downto 0);
      
    	component DIVIDER2 is
    		generic ( m,n :  integer);
    		port(
    			A : in unsigned (4 downto 0);
    			B : in unsigned (3 downto 0);
    			Q : out unsigned (4 downto 0);
    			R : out unsigned (4 downto 0)
    		);
    	end component;
    
    begin
    	test_divider : DIVIDER2 	generic map (4,3)
    							port map (A1, B1, Q1, R1);
        
        process
        begin
            A1 <= "1111";
            B1 <= "111";
            wait for 5 ns;
        end process;
          
    end STRUCT;
    Merci d'avance à ceux qui auront eu le courage de lire en entier et qui pourront m'expliquer cette erreur que je n'arrive pas à interpréter !

    -----

  2. #2
    jiherve

    Re : [VHDL] Problème association de designs sous ModelSim

    Bonsoir,
    Code:
                    variable dvd, qt: unsigned(m downto 0):="0";
    		variable dvsr: unsigned(n downto 0):="0";
    		variable zero: unsigned (m-n downto 0):="0";
    Ici tu essayes d'affecter un vecteur de longueur 1 à des vecteurs de longueurs : m+1,n+1,m-n+1 cela n'est pas possible.
    écrire
    Code:
                    variable dvd, qt: unsigned(m downto 0):=(others => '0');
    		variable dvsr: unsigned(n downto 0):=(others => '0');
    		variable zero: unsigned (m-n downto 0):=(others => '0');
    Je n'ai pas analysé le reste.
    JR
    l'électronique c'est pas du vaudou!

  3. #3
    _T355Y

    Re : [VHDL] Problème association de designs sous ModelSim

    Merci pour ta réponse. Effectivement, je n'avais pas du temps vu ça :/

    J'ai modifié le code en ce sens, mais j'ai toujours un problème. Et possédant uniquement la version ModelSim Student chez moi, même pas moyen de savoir d'où l'erreur vient :/
    (Le code que j'avais copié avait été testé sur la version officielle, dans mon université, donc le détail était donné, chose qui n'est pas faite sur la version étudiante j'ai l'impression :/)

    En tout cas merci de ton aide !!! Je commençais à devenir dingue, alors que c'était vraiment évident !

Discussions similaires

  1. modelsim : probleme de licence
    Par invite1af3caff dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 10/04/2009, 15h36
  2. Problème en VHDL
    Par invitee188ddfe dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 31/03/2009, 09h17
  3. cygwin et modelsim
    Par invite3d298464 dans le forum Électronique
    Réponses: 24
    Dernier message: 26/03/2009, 09h13
  4. 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
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...