DEBUGGING: VHDL 错误案例语句未涵盖所有选择。 'others' 子句是必需的,但已定义所有状态
DEBUGGING: VHDL error case statement does not cover all choices. 'others' clause is needed, but all states defined
signal next_state, current_state: std_logic_vector(2 downto 0) := "000";
begin
myLogic: process(start, reset, current_state)
begin
case current_state is
when "000" => --code
--some if statement
if start = '1' then
next_state <= "001";
end if;
when "001" =>
--setting signals
when "010" =>
--setting signals
when "011" =>
--setting signals
when "100" =>
--setting signals
when "101" =>
--setting signals
when "110" =>
--setting signals
when "111" =>
--setting stuff
end case;
if reset= '1' then
current_state <= "000";
end if;
end process myLogic;
我在上面发布的代码有一个由 3 位逻辑向量定义的当前状态。但我得到的错误是并未涵盖所有情况。当我把 case others 声明时,我的代码总是进入 others case。
你必须涵盖所有可能的情况。逻辑信号在此列表中可以具有 任何 值:'U'、'X'、'0'、'1'、'Z'、'W', 'L', 'H'。
由于在您的情况下,所有不同于“0”和“1”的值都是无关紧要的,因此您应该在开关中添加一个默认情况(以防万一发生错误,并且条件信号的值与预期的不同)
when others =>
signal next_state, current_state: std_logic_vector(2 downto 0) := "000";
begin
myLogic: process(start, reset, current_state)
begin
case current_state is
when "000" => --code
--some if statement
if start = '1' then
next_state <= "001";
end if;
when "001" =>
--setting signals
when "010" =>
--setting signals
when "011" =>
--setting signals
when "100" =>
--setting signals
when "101" =>
--setting signals
when "110" =>
--setting signals
when "111" =>
--setting stuff
end case;
if reset= '1' then
current_state <= "000";
end if;
end process myLogic;
我在上面发布的代码有一个由 3 位逻辑向量定义的当前状态。但我得到的错误是并未涵盖所有情况。当我把 case others 声明时,我的代码总是进入 others case。
你必须涵盖所有可能的情况。逻辑信号在此列表中可以具有 任何 值:'U'、'X'、'0'、'1'、'Z'、'W', 'L', 'H'。 由于在您的情况下,所有不同于“0”和“1”的值都是无关紧要的,因此您应该在开关中添加一个默认情况(以防万一发生错误,并且条件信号的值与预期的不同)
when others =>