2016-11-10 8 views
0

あるベクターから別のベクターへ値を渡したいと思います。 このようにすればいいですか?VHDL Vector passing

vector_one <= vector_two; 

しかし、VHDL-2002でそれが許可されていません。あなたがすることができるので、

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

vector_one <= vector_two; 
+2

それはあなたが "合格" によって何を意味するかに依存します。これを行うと 'vector_two'が' vector_one'に送られ、条件なしですべてのデータがコピーされます。 –

+0

それは私が探していたものです:) – TheAlPaca02

答えて

2

vector_oneは、出力ポート(モードout)であり、これはVHDL-2008で許可されて読み出しがあなたがソースの両方からoutputzを駆動しなければならないので、出力ポートを読み取るために、同様vector_source、言う:一般

vector_one <= vector_source; 
vector_two <= vector_source; 

を、出力sを複製することは避けるべきですそのようなモジュールを使用すると、出力が同じ値で駆動されることは明白ではないため、モジュールの使用を理解することは難しくなります。

0

あなたはモジュールにvector_oneを使用する必要がある場合は、モジュールがその情報を保持する必要があるという意味以外で使用されることに注意する必要があります。次に、内部信号を宣言してそれを処理する必要があります。

例:

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;