2015-09-14 27 views
5

可変数の入力と出力を持つVHDLでエンティティを作成する必要があります。このピン数はGENERIC構造体から与えられるべきです。のは、このコードを持っているとしましょう:明らか可変数の入出力のVHDL

entity HELLO is 
    GENERIC(NUM_INPUT: integer:=4; 
      NUM_OUTPUT: integer:=2 
    ); 

    port(
     input1 : in std_logic_vector(31 downto 0); 
     input2 : in std_logic_vector(31 downto 0); 
     input3 : in std_logic_vector(31 downto 0); 
     input4 : in std_logic_vector(31 downto 0); 
     out1 : out std_logic_vector(31 downto 0); 
     out2 : out std_logic_vector(31 downto 0) 

    ); 
end entity HELLO; 

、GENERIC構築物は無用にする(上記の例のように)手動での書き込み。

この4つの入力と2つの出力は、GENERIC情報に従って自動的に生成されます。実行する方法?私はこれを達成する最も簡単な方法は、パッケージ内のようなものをご使用の32ビット・ワードのカスタム配列型を定義することだと思います

+0

エンティティヘッダーには、 'out2'インタフェース要素の宣言に続くport句に余分なセミコロンがあります。セミコロンは、インタフェースリストのインタフェース要素デリミタとして使用されます。実際には、これにより、構文解析時に1つの字句要素(トークン)が先読みされ、セミコロンまたは右端括弧のどちらかで分岐するかどうかを判断できます。 – user1155120

+0

[ポートアレイの長さとして汎用パラメータを使用する]の重複可能性(0120-328-331) – user1155120

+0

訂正されました。 – MI89

答えて

10

type WORD_ARRAY_type is array (integer range <>) of std_logic_vector (31 downto 0); 

あなたのエンティティ宣言、その後は次のようになります。

use work.HELLOPackage.all; 

entity HELLO is 
GENERIC (
    NUM_INPUT : integer := 4; 
    NUM_OUTPUT : integer := 2 
); 
port (
    input1 : in WORD_ARRAY_type(NUM_INPUT-1 downto 0); 
    out1 : out WORD_ARRAY_type(NUM_OUTPUT-1 downto 0) 
); 
end entity HELLO; 
wが、その後

entity HELLO is 
GENERIC (
    NUM_INPUT : integer := 4; 
    NUM_OUTPUT : integer := 2 
); 
port (
    input1 : in WORD_ARRAY_type; 
    out1 : out WORD_ARRAY_type 
); 
end entity HELLO; 

また、入力と出力のための制約のない配列を使用することができますジェネリックスを使用してこれらのポートでorkを実行します。エンティティをインスタンス化するときは、配列を適切な次元で接続してジェネリックと一致させるだけです。

関連する問題