我不了解状态机中默认值的效用

时间:2017-09-30 06:31:04

标签: vhdl

我试图理解VHDL中的状态机,用于检测VHDL中信号的边沿。在下一个状态我不明白为什么我们把: " next_etat< = reg_etat"因为我认为即使没有它也可以毫无问题地工作。 我们刚刚运行程序时,reg_etat和next_etat的默认值是什么,因为它们没有像c中那样的实际默认值,例如int var = 0;

entity machine_etat is
    Port ( clk : in STD_LOGIC;
        rst : in STD_LOGIC;
        entree : in STD_LOGIC;
        tc : out STD_LOGIC);
end machine_etat;

architecture architecture_machine_etat of machine_etat is
type T_etat is (idle,edge,one);
signal next_etat, reg_etat : T_etat;
begin

registre_etat: process(clk)
begin
    if rising_edge(clk) then
        if rst = ’1’ then
            reg_etat <= idle;
        else
            reg_etat <= next_etat;
        end if;
    end if;
end process registre_etat;

tc <= ’1’ when reg_etat = edge else ’0’;

etat_suivant: process(reg_etat,entree)
begin
next_etat <= reg_etat;-- defaults values here i dont see their purpose
case reg_etat is
    when idle =>
        if entree =’1’ then
            next_etat <= edge;
        end if;
    when edge =>
        next_etat <= one;
    when one =>
        if entree =’0’ then
            next_etat <= idle;
        end if;
    end case;
end process etat_suivant;
end architecture_machine_etat;

1 个答案:

答案 0 :(得分:0)

如果你没有在所有情况下分配next_etat(请原谅我的法语),逻辑综合将推断一个锁存器来记住它的状态。锁存器是你不想要的,因为它对数字逻辑延迟非常敏感并且可能变得亚稳态:也是你不想要的东西。

HDL编程与CPU编程明显不同。