にコードを使用して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は上位ビットにインテリジェントに高い優先順位を与えますか?ここで優先エンコーダを達成しようとしていることは「分かっていますか?
TBコードと波形を表示できますか? –
これは私が表示する動作ではありません:[encoder_case_tb.png](http://i.stack.imgur.com/RBozz.png)。その中間の黄色い線はZを表します。あなたはあなたの読者のために[最小完全で検証可能な例](http://stackoverflow.com/help/mcve)を提供していません。 – user1155120
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