0

私がエンティティを持っているとしましょう:

entity myblock is
    port(
        input1 : std_logic_vector(15 downto 0);
        input2 : std_logic_vector(15 downto 0);
        input3 : std_logic_vector(15 downto 0);
        -- ...
        output : std_logic_vector(15 downto 0);
    );
end myblock;

ここで、入力のサイズを一般的なものにしたいので、次のようにします。

entity myblock is
    generic(
        WIDTH : natural;
    );
    port(
        input1 : std_logic_vector(WIDTH-1 downto 0);
        input2 : std_logic_vector(WIDTH-1 downto 0);
        input3 : std_logic_vector(WIDTH-1 downto 0);
        -- ...
        output : std_logic_vector(WIDTH-1 downto 0);
    );
end myblock;

理想的には、これを少し単純化して、次のように言います。

subtype calc_data is std_logic_vector(WIDTH-1 downto 0);
port(
    input1 : calc_data;
    input2 : calc_data;
    input3 : calc_data;
    -- ...
    output : calc_data;
);

この場合、これは非常に単純な例であり、メリットはそれほど大きくありません。ただし、より複雑なケースでは、それは本当に役立ちます。

これはVHDLで可能ですか?

4

2 に答える 2

3

単一のタイプ仕様を使用して、複数のポートに名前を付けることができます。

entity myblock is
    generic(
        WIDTH : natural;
    );
    port(
        input1, input2, input3 : in std_logic_vector(WIDTH-1 downto 0);
        -- ...
        output : out std_logic_vector(WIDTH-1 downto 0);
    );
end myblock;
于 2012-09-14T01:25:04.297 に答える
1

オプション2(ジェネリック)は、入力がベクトルになる場合によく使用されます

サブタイプが(単なる「幅情報」ではなく)「読者への意味」を運ぶために使用されている場合は、サブタイプをパッケージに格納します。

もう1つの方法は、std_logic_vector幅を指定せずに使用し、幅を上位レベルから下に伝播させることです。

(匿名タイプ用のVHDLの新しいイテレーションの提案があります。これは興味深いと思うかもしれません)

于 2012-09-14T10:11:05.967 に答える