在VHDL中,我可以更新使用同一个变量的case语句中的变量吗? case语句位于rising_edge(clk)块内。谢谢。
case State_var is
when "00" =>
if (Valid= '1') then
State_var := "00";
else
State_var := "01";
end if;
when "01" =>
if (Valid = '1') then
State_var := "00";
else
State_var := "10";
end if;
when "10" =>
if (Valid = '1') then
State_var := "11";
else
State_var := "01";
end if;
when "11" =>
if (Valid = '1') then
State_var := "11";
else
State_var := "10";
end if;
when others => null;
end case;
答案 0 :(得分:2)
这样做没有问题 - 我一直这样做。
根据当时状态变量的值评估case
选择,并且对状态变量所做的更新不会导致case
语句立即转换到新状态
答案 1 :(得分:2)
是的,你可以。此外,您只能使用case
声明:
process(...)
...
variable state: std_logic_vector(2 downto 0);
...
begin
...
state := Valid & State_var;
...
case state is
when "000" => State_var := "01";
when "001" => State_var := "10";
when "010" => State_var := "01";
when "011" => State_var := "10";
when "100" => State_var := "00";
when "101" => State_var := "00";
when others => State_var := "11";
end case;
...
end process;
答案 2 :(得分:-2)
为什么要为状态机使用变量?状态机应该是一个注册信号,这是状态机的重点。我不建议在这里使用变量。它会产生许多额外的组合解码逻辑,可能会有一些竞争条件。