我不明白状态机中默认值的效用
i don't understand the utility of default values in state machine
我正在尝试了解 VHDL 中的状态机,以检测 VHDL 中信号的边沿。在下一个状态我不明白为什么我们把:
"next_etat<= reg_etat" 因为我认为即使没有它也可以正常工作。
当我们只有 运行 程序时,我想 reg_etat 和 next_etat 的默认值是多少,因为它们不是真正的默认值,例如 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;
如果您没有在所有情况下都分配 next_etat
(请原谅我的法语),逻辑综合将推断出一个锁存器以记住它的状态。锁存器是您不想要的东西,因为它对数字逻辑延迟非常敏感并且可能变得亚稳态:这也是您不想要的东西。
HDL 编程与 CPU 编程有很大不同。
我正在尝试了解 VHDL 中的状态机,以检测 VHDL 中信号的边沿。在下一个状态我不明白为什么我们把: "next_etat<= reg_etat" 因为我认为即使没有它也可以正常工作。 当我们只有 运行 程序时,我想 reg_etat 和 next_etat 的默认值是多少,因为它们不是真正的默认值,例如 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;
如果您没有在所有情况下都分配 next_etat
(请原谅我的法语),逻辑综合将推断出一个锁存器以记住它的状态。锁存器是您不想要的东西,因为它对数字逻辑延迟非常敏感并且可能变得亚稳态:这也是您不想要的东西。
HDL 编程与 CPU 编程有很大不同。