2016-04-06 10 views
-2

このセットアップはなぜ機能しますか? (整数:1 M)を介して1になるようにポートのビットを指定するだろうが、場合M-1 0とdowntoは単に意味をなさない0ダウン0、あろうVHDL:genric map setup

component mux2to1 is 
generic (M : integer := 1); -- Number of bits in the inputs and output 
port (input0 : in m32_vector(M-1 downto 0) := (others => '0'); 
     input1 : in m32_vector(M-1 downto 0) := (others => '0'); 
     sel  : in m32_1bit; 
     output : out m32_vector(M-1 downto 0)); 
end component; 

Iはgenricマップを理解する方法であります。

+2

あなたは0、1以上の要素を持つ配列を持つことができます。 (0のdownto 0)は1つの要素を持つでしょう。 IEEE Std 1076-2008 5.3.2配列の型、5.3.2.2索引の制約と不連続な範囲を参照してください。 – user1155120

答えて

1

@ user1155120によると、1つの要素を持つ配列を持つことができます。 (0のdownto 0)は1つの要素を持つでしょう。

ただし、作成する別の重要な点がある:VHDLで特定のタイプの1つの要素のアレイは、要素タイプと同じタイプではない

。たとえば、std_logicstd_logic_vector(0 downto 0)は異なるタイプです。一方を他方に割り当てることはできません。 std_logicはスカラーであり、std_logic_vector(0 downto 0)は配列タイプです。

これらの型を「変換」するには、配列の型をインデックスする必要があります。だから、信号

signal S : std_logic; 
signal A : std_logic_vector(0 downto 0); 

であなたは、Sまたはその逆に割り当てることはできませんが、これを行うことができます。

A(0) <= S; 

またはこの:

S <= A(0); 

ます。また、インデックスアレイポートすることができます。だから、

entity HAS_ARRAY_PORT 
    port (P : in std_logic_vector(0 downto 0)); 
end; 

であなたはこれを行うことができます。

L: entity work.HAS_ARRAY_PORT port map (P(0) => S); 
+0

std_logicとstd_logic_vectorは異なるタイプで、インデックス付きのnamedは配列の要素を表します。この場合、配列要素の基本型はstd_logicの基本型と同じです。 IEEE Std 1076-2008 8.4インデックス付きの名前とstd_logic_1164のパッケージ宣言を参照してください。 – user1155120

+0

generic(M:integer:= 1)はMを1に、入力0をただ1つの要素にするが、データ型はまだ割り当てられていないことを意味しますか?それは言葉か1ビットか何か他のものであることができるように? –

+0

@ Zac Uwyo H generic(M:integer:= 1)は、タイプm32_vectorの1つの要素の配列を持つことを意味します。 –