1

次のことを考えてみましょう(そして今のところ合成を無視します):

SIGNAL sig1 : std_logic_vector( 3 DOWNTO 0 ) := "0000";

CASE sig1 IS

    when "0000" => do something
    when "0001" => do something
    when others => do something

END CASE;

他のチェックには「U」が含まれるため、sig1の潜在的な「有効な」値(「0000」、「0001」、「0010」、...、「1111」)ごとに条件を設定することは非常に良い習慣です。 、'X'、および'Z'。したがって、このグッドプラクティスは、上記の例が適切なVHDLコードではないことを示しています。

ここで、次のことを考えてみましょう(合成を念頭に置いて):

TYPE state_type IS ( state0, state1, state2, state3, state4 );

SIGNAL sig2 : state_type;

CASE sig2 IS
    when state0 => do something
    when state1 => do something
    when state3 | state4 => do something
    when others => do something
END CASE;

同じアクションが実行されますstate3とstate4は同じアクションを持ちます。他の人の意図は、状態2と5に対して同じアクションを実行することです。

次のようなことをすることはまだ「必要」ですか?

when state2 | state5 => do something
when others => null;

私の目標は、州の膨大なリストを作成したり、同じアクションを一緒に実行したりする必要がないようにすることです。

ありがとう!

4

1 に答える 1

2

状態を明示的に参照して操作を使用するothersか説明するかにかかわらず、同じ動作を説明します。シンセサイザーは、機能に関して同じ出力を生成するものとしてコードを解釈するため、ロジックは同じになります。

関数のために一緒にORされた状態の膨大なリストが必要な場合は、それらを持っている必要があります。

「コードの可読性」の観点から話している場合は、状況に最も適した形式を使用してください。

于 2012-07-19T08:33:53.803 に答える