UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

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
ステータス アクティブ
種類 一般
このページをブックマークに追加