2

关于最佳 VHDL 设计实践的问题。

在设计状态机时,我应该使用架构中的信号还是使用变量。到目前为止,我一直使用变量,因为它们对进程“有点”私有,恕我直言,因为它们不应该在进程之外访问。但这是好的设计实践吗?

type state_type is (s0,s1);  
signal state : state_type := s0;  

A : process(clk)
begin   
  if rising_edge(clk) then  
    case state is  
.....  
    end case;  
  end if;
end process;  

--This process uses a variable  
B : process(clk)  
  type state_type is (s0,s1);  
  variable state : state_type := s0;  
begin  
  if rising_edge(clk) then  
    case state is  
      .....  
    end case;  
  end if;
end process;  
4

4 回答 4

4

我更喜欢使用信号。原因是它允许设计在多个进程之间进行拆分。一个进程可能会担心状态机如何从一个状态移动到另一个状态,而其他进程可能包含依赖于状态的逻辑。

这样做意味着您可以拥有多个简单的流程,每个流程都做一件事。使用变量,一切都必须进入一个过程,这可能会变得笨拙。

这是一个风格的选择。

于 2012-08-13T16:48:15.800 回答
3

我总是使用variables ,除非我需要向另一个进程传达一些价值。因为这就是signals 的用途。

“本地化状态变量”的另一个潜在好处(或者,违反您的编码标准!)是您可以在同一实体中的两个状态机中调用typeand the variable state_typeand而不会发生冲突......state

于 2012-08-13T12:45:19.487 回答
2

对于合成,我几乎只使用信号。

为什么?

  • 信号似乎更被普遍理解。
  • 代码清晰。信号都同时更新一次。混合变量和信号可能(可能)令人困惑,因为您必须记住变量赋值立即生效,而随后的信号赋值意味着优先级。在同一进程执行期间,信号的值永远不会改变。
  • 降低深度逻辑路径的风险。经验不足的设计人员可能会尝试使用 C 程序等变量,这会导致逻辑无法满足时序目标。

为什么不?

  • 大型设计最终会产生非常长的信号列表,并且很难找到信号类型/大小/等。通常,这只发生在设计中最大块的包装器和/或设计顶层。

对于测试台,我根据用途使用变量和信号。

于 2012-08-15T16:28:53.227 回答
0

如果在这种情况下不需要将信号作为流程的输入或输出,则更好地使用变量,因为在构建体系结构时,您需要将信号分配给模块的输出,如果它赢了'不被使用,没有必要创建信号并花费更多内存来连接你不会使用的东西来连接到架构的另一个模块。

于 2012-08-13T09:55:28.227 回答