最佳VHDL设计实践

时间:2012-08-13 09:06:16

标签: vhdl

关于最佳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 个答案:

答案 0 :(得分:4)

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

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

虽然这是一种风格选择。

答案 1 :(得分:3)

我总是使用variable s,除非我需要将一些值传递给另一个进程。因为那是signal的用途。

“本地化状态变量”的另一个潜在好处(或者,可能会违反您的编码标准!)是您可以调用typevariable {{1和同一实体中的两个状态机中的state_type没有它们发生冲突......

答案 2 :(得分:2)

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

为什么?

  • 信号似乎更普遍被理解。
  • 代码清晰度。信号全部同时更新一次。混合变量和信号可能(可能)混淆,因为您必须记住变量赋值立即生效,而后续信号赋值意味着优先级。在同一个过程执行过程中,信号的值永远不会改变。
  • 降低深度逻辑路径的风险。缺乏经验的设计师可能会尝试使用像C程序这样的变量,这会导致逻辑无法满足时序目标。

为什么不呢?

  • 大型设计最终会有很长的信号列表,很难找到信号类型/尺寸等。通常,这仅适用于设计中最大块的包装和/或设计顶层。

对于testbench,我根据用途使用变量和信号。

答案 3 :(得分:0)

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