【问题标题】:Best VHDL design practice最佳 VHDL 设计实践
【发布时间】:2012-08-13 09:06:16
【问题描述】:

关于最佳 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;  

【问题讨论】:

    标签: vhdl


    【解决方案1】:

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

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

    不过,这是一种风格选择。

    【讨论】:

    • 我发现多个交互过程往往会混淆代码的意图 - 正如你所说,这是一种风格:)
    • 我认为我们之前已经同意在这个问题上有所不同;-)
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      为什么?

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

      为什么不呢?

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2018-09-12
          • 2013-07-31
          • 2010-09-05
          • 2020-07-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-08
          相关资源
          最近更新 更多