AR# 14430

|

XST - 「ERROR:HDLParsers:812 - file_name.vhd Line xx. A value is missing in case.」というエラー メッセージが表示される

説明

キーワード : VHDL, FSM, state, machine, std, logic, type, ステート, マシン, ロジック, タイプ

重要度 : 標準

概要 :
VHDL で case 文を使用すると、次のようなエラー メッセージが表示されます。

"ERROR:HDLParsers:812 - file_name.vhd Line 21.
A value is missing in case."

このメッセージは、次のような VHDL コードを記述した場合に表示されます。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity case_test is
Port (a : in std_logic_vector(3 downto 0);
b : in std_logic_vector(3 downto 0);
c : in std_logic_vector(3 downto 0);
d : in std_logic_vector(3 downto 0);
sel : in std_logic_vector (1 downto 0);
res : out std_logic_vector(3 downto 0));
end case_test;

architecture case_test_arch of case_test is
begin

process (sel, a, b, c, d) is begin
case (sel) is
when "00" => res <= a;
when "01" => res <= b;
when "10" => res <= c;
when "11" => res <= d;
end case;
end process;

end case_test_arch;

ソリューション

上記のコードでは case 文のすべての分岐が指定されているように見えますが、std_logic_vector タイプを使用しているため、完全に指定するには 1 または 0 以外のデータ タイプも記述する必要があります。 上記の例では std_logic_vector タイプが使用されていますが、VHDL ではどのデータ タイプの場合でもこのエラー メッセージが表示される可能性があります。

すべてのデータ型を指定しない場合でも、次のように記述するとエラーを回避できます。

when others => res <= a;

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity case_test is
Port (a : in std_logic_vector(3 downto 0);
b : in std_logic_vector(3 downto 0);
c : in std_logic_vector(3 downto 0);
d : in std_logic_vector(3 downto 0);
sel : in std_logic_vector (1 downto 0);
res : out std_logic_vector(3 downto 0));
end case_test;

architecture case_test_arch of case_test is
begin

process (sel, a, b, c, d) is begin
case (sel) is
when "00" => res <= a;
when "01" => res <= b;
when "10" => res <= c;
when "11" => res <= d;
when others => res <= a; -- Default statement added
end case;
end process;

end case_test_arch;

case 文ですべてを指定しない場合は、デザイン仕様に従って case 文が処理されていることを確認してください。
AR# 14430
日付 12/15/2012
ステータス アクティブ
種類 一般
People Also Viewed