2016-09-01 11 views
-1

にコードを使用して2プライオリティエンコーダは以下の通りです:このVHDLコードはなぜ機能しますか? 4:Caseステートメント

entity encoder_case is 
port(
    din : in STD_LOGIC_VECTOR(3 downto 0); 
    dout : out STD_LOGIC_VECTOR(1 downto 0) 
    ); 
end encoder_case; 

architecture encoder_case_arc of encoder_case is 
begin 
encoder : process (din) is 
begin 
    case din is 
     when "1000" => dout <= "00"; 
     when "0100" => dout <= "01"; 
     when "0010" => dout <= "10"; 
     when "0001" => dout <= "11"; 
     when others => dout <= "ZZ"; 
    end case; 
end process encoder; 
end encoder_case_arc; 

今、あなたは、このコードは、DIN等、「0101」、「1010」のときのようにしかし、のために例のソをカバーしていないことを期待したいですそれらの入力、doutはそれぞれ "10"と "11"を生成します。なぜこれは機能しますか? VHDLは上位ビットにインテリジェントに高い優先順位を与えますか?ここで優先エンコーダを達成しようとしていることは「分かっていますか?

+0

TBコードと波形を表示できますか? –

+1

これは私が表示する動作ではありません:[encoder_case_tb.png](http://i.stack.imgur.com/RBozz.png)。その中間の黄色い線はZを表します。あなたはあなたの読者のために[最小完全で検証可能な例](http://stackoverflow.com/help/mcve)を提供していません。 – user1155120

+0

IEEE Std 1076-2008 10.9 case文は、case式に対して選択肢を比較するために、一致する等価演算子 "?="を使用して、一致するcase文を導入します。 * AshendenとLewisのVHDL 2008 Just New Stuff *には、一致するcase文を優先エンコーダとして使用する[Example 5.7](http://i.stack.imgur.com/GJ3w9.jpg)があります。通常のcase文は、 "="演算子を使用して一致する必要があり、正確でなければなりません。型宣言の直後に暗黙的に定義された等価演算子は、case式/ choiceの比較に使用されます。 – user1155120

答えて

2

「その他」のすべてのケースでは、別の信号がdoutを駆動する場合を除いて、「ZZ」が生成されます。これを明確にするために、実際にテストベンチと波形が必要です。

あなたの他の質問については、オプションの順番ではなく、確かに上位/下位ビットの意味ではなく、優先度のようなものはありません。

そして確かにあなたがしたいことを「知っている」わけではありません。あなたが得るものは、いつものように、あなたが書いたものです...あなたが時々正確に書いたものを理解するのにちょっと時間がかかるかもしれません。

+0

私は 'vhdl'タグを知っていますが、FYIだけです。優先順位のケースがありますが、' verilog'/'system-verilog'にあります。 –

+0

Hi Dawid。 VHDLでは、優先順位の問題は、すべての選択肢を相互に排他的にする必要があり、最後に「その他」を表示する必要があるため、テーブルから外れています。 – chrisvp

+0

VHDLが[Example 5.7](http://i.stack.imgur.com/GJ3w9.jpg)で説明されている-2008で優先エンコーディングを行う機能を持っている場合のマッチングケースステートメントに関するコメントへのコメントを参照してください* VHDL 2008ちょうど新しいもの*。 – user1155120

関連する問題