在case语句中使用变量,VHDL

时间:2013-10-14 16:00:01

标签: vhdl

在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;

3 个答案:

答案 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)

为什么要为状态机使用变量?状态机应该是一个注册信号,这是状态机的重点。我不建议在这里使用变量。它会产生许多额外的组合解码逻辑,可能会有一些竞争条件。