1

fs_in_khz5、10 、または2の一般的な整数パラメーターを持つエンティティがあります。

entity test_control_source is
    generic(
        -- This should only be 5, 10 or 20
        fs_in_khz : integer := 20
    );

VHDLの機能を利用して、次のようなものを使用して、タイプをこれらの値に制限することができれば便利です。

type control_source_freq is (F5_KHZ, F10_KHZ, F20_KHZ);
...
entity test_control_source is
generic(
    -- This should only be 5, 10 or 20
    fs_in_khz : control_source_freq := F20_KHZ
);

ただし、このエンティティのアーキテクチャの後半で、私は

architecture source_behaviour of test_control_source is
    constant cs_period : integer := 5000 * clock_rate / fs_in_khz;
begin
    ...

私は、必要な場所で計算を繰り返すのではなく、このパラメーターを使用するプロセスの外部でこのパラメーターを計算することを好みます。fs_in_khzジェネリックパラメーター許可された値を制限し、cs_periodそれが使用されるプロセスから定数を除外することはできますか?

4

2 に答える 2

4

あなたが提案するように、列挙型をパッケージに作成します

また、型calculate_periodを取り込んで適切な整数を返すという関数を作成します。clock_ratefs

または、そのジェネリックを使用してコンポーネントにいくつかのステートメントを追加assertし、それが正しい値であることを確認します。合成ツールでこれをテストして、アサートがトリガーされた場合に何が起こるかを確認してください。多くの場合、それを使用してもseverity failure警告が表示されます!

于 2012-06-05T10:24:22.600 に答える
1

考えられる解決策の 1 つF_KHZは、パッケージcs_periodで定数を宣言し、 の宣言後に同じパッケージで定数を計算することですF_KHZ。ただし、これにより値が制限されることはありませんF_KHZが、1 か所で変更するだけでエラーが発生する可能性はほとんどなくなります。F_KHZもちろん、これは、定数がアーキテクチャ全体で同じである必要があることを前提としています。

于 2012-06-05T07:22:48.853 に答える