3

以下は、IF ブロックを使用する VHDL のコードです。最後の「elsif」では、「my_choice」の値を「ch4」に代入しています。次に、条件が満たされないため、「else」ブロックが実行されます。しかし、「my_choice」が (ch1、ch2、ch3、ch4) 以外の値 (高インピーダンス (またはその他) など) を取得する可能性はありますか? もしそうなら、どうすればそれを避けることができますか? この割り当てにより、コードの動作が変わる可能性があるためです。

    entity entity_name
    port
        .....
        .....
    end entity_name;

    architecture bhvr of entity_name

    type choices is (ch1, ch2, ch3, ch4);
    signal my_choice,next_choice : choices;

    begin
        process(clk, reset)
        begin
            if reset='1' tehn
                --------reset
            else
                  my_choice<=next_choice;
            end if;
        end process;

        process(my_choice)
        begin
            if my_choice = ch1 then
                next_choice <= ch2;
            elsif my_choice = ch2 then 
                next_choice <= ch3;
            elsif my_choice = ch3 then
                next_choice <= ch4;
            else  ------------------------------------coming to ch4
                ---- task for ch4
        end process;            
    end architecture;
4

1 に答える 1

2

type は値 'ch1'、'ch2'、'ch3'、'ch4' を持つ列挙型であるmy_choiceため、少なくともシミュレーションでは常にこれら 4 つの値のいずれかになります。choicesmy_choice

ハードウェアでは、値がワンホットまたはバイナリとして作成されている場合など、使用可能な値スペースは実装によって異なります。スタートアップ後のリセットは、値が 4 つの値のいずれかに適切に定義されていることを確認するための良い方法です。その後、回路がタイミング要件を順守する場合、値は定義された値の空間にとどまります。 4 つの値。

于 2016-06-21T06:31:59.803 に答える