2016-11-10 1 views
0

Je souhaite passer une valeur d'un vecteur à un autre. Puis-je simplement le faire de cette façon?VHDL Vecteur passant

vector_one : out STD_LOGIC_VECTOR (3 downto 0); 
vector_two : out STD_LOGIC_VECTOR (3 downto 0); 

vector_one <= vector_two; 
+2

Cela dépend de ce que vous entendez par "passer". En faisant cela, votre 'vector_two' sera acheminé vers votre' vector_one' et ainsi "copiera" toutes les données sans aucune condition. –

+0

C'est ce que je cherchais :) – TheAlPaca02

Répondre

2

Le vector_one est un port de sortie (mode out), et la lecture cela est permis en VHDL-2008, de sorte que vous pouvez faire:

vector_one <= vector_two; 

Cependant, en VHDL-2002, il est interdit lire un port de sortie, de sorte que vous devez conduire les deux outputz de la source, par exemple vector_source, comme:

vector_one <= vector_source; 
vector_two <= vector_source; 

en général, il faut éviter de dupliquer une sortie si C'est comme cela que l'utilisation de ce module ne permet pas de constater que certaines sorties sont pilotées avec des valeurs identiques, ce qui rend plus difficile la compréhension de l'utilisation du module.

0

Vous pouvez mais vous devez prendre note que si vous devez utiliser vector_one dans votre module avant qu'il ne soit utilisé à l'extérieur signifiant que le module aura besoin de contenir des informations à ce sujet. Ensuite, vous devrez déclarer un signal interne pour pouvoir travailler dessus.

exemple:

entity exampleModule is 
port(iClk : in STD_LOGIC; 
     iTrigger : in STD_LOGIC; 
     iVector_one : out STD_LOGIC_VECTOR (3 downto 0); 
     oVector_two : out STD_LOGIC_VECTOR (3 downto 0)); 
end exampleModule ; 

Architecture RTL of exampleModule is 
    signal mVectorBuff : std_logic_vector (3 downto 0); 
begin 
    process (iClk) begin 
     if rising_edge (iClk) then 
      if iTrigger then mVectorBuff <= iVector_one; 
      end if; 
     end if; 
    end process; 

    oVector_two <= mVector_one; 
end Architecture RTL;