gpt4 book ai didi

vhdl - 在 VHDL 中实现状态机的替代方法

转载 作者:行者123 更新时间:2023-12-04 04:41:30 25 4
gpt4 key购买 nike

我在 Altera 看到过很多像这样实现的状态机:

ARCHITECTURE a OF state_machine IS
TYPE STATE_TYPE IS (s0, s1, s2);
SIGNAL state : STATE_TYPE;
BEGIN
PROCESS (clk, reset)
BEGIN
IF reset = '1' THEN
state <= s0;
ELSIF (clk'EVENT AND clk = '1') THEN
CASE state IS
WHEN ...

一个替代方案是这样的:
ARCHITECTURE a OF state_machine IS
TYPE STATE_TYPE IS (s0, s1, s2);
BEGIN
PROCESS (clk, reset)
VARIABLE state : STATE_TYPE := s0;
BEGIN
IF reset = '1' THEN
state <= s0;
ELSIF (clk'EVENT AND clk = '1') THEN
CASE state IS
WHEN ...

以替代方式进行操作的优点(如果有的话)和缺点是什么?我只在一个地方看到了替代方案,我猜一定有一些很好的理由。

最佳答案

我喜欢将本地事物保留在本地,因此如果仅在流程内需要状态信息,我会使用变量。在这种情况下,我还想在流程中声明状态类型:

ARCHITECTURE a OF state_machine IS
BEGIN
PROCESS (clk, reset)
TYPE STATE_TYPE IS (s0, s1, s2);
VARIABLE state : STATE_TYPE := s0;
BEGIN
...

在极少数情况下,我需要从另一个进程(例如交互式状态机)访问 FSM 的状态,我将使用信号来存储状态。

信号与变量的决定,如果经常是品味问题。一些开发人员认为变量是邪恶的,永远不会使用它们。其他人(如我)尽可能使用它们来保持本地事物的本地化。作为奖励,由于变量是比信号更轻量级的对象,因此它们的模拟速度也更快。

关于vhdl - 在 VHDL 中实现状态机的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18817028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com