合成器是否关心一个或两个过程?

时间:2011-10-25 09:37:07

标签: vhdl synthesis

在VHDL中有两种常用的编码状态机的方法:一个进程或两个进程。有些谣言(在某些大学教授)两个进程可能会产生更好的硬件。有没有人有这方面的确凿证据?我自己的初步测试表明,没有任何区别。

我正在寻找可重复的实验:两种编码风格的VHDL代码,以及如何合成它们的具体信息(哪个工具,哪些参数)。

请帮我解决或确认两个过程导致更好的合成硬件的神话。

3 个答案:

答案 0 :(得分:3)

很多这种“知识”都是基于大约20年前的工具。事情已经发生了变化。

这并不是说它在所有情况下都得到了修复,但你通过实际进行试验来做正确的事。

过去已经避免的其他事情是:

  • 泛型,因为显然它们是不可合成的。不是真的,远远胜于 预处理代码,通常是被保护的代码。
  • 港口记录。这确实导致DC-shell问题很长一段时间。它会错误连接 的东西。我不知道这是否已经解决。
  • 各种风格的同步过程,尤其是使用wait而不是敏感列表的同步过程。这个特别疯狂,因为如果您阅读VHDL规范,它会说两者是等价的,应该以相同的方式实现。

答案 1 :(得分:2)

对不起,没有可重复的实验,但如果合成​​器关心(至少这些天 - 我没有确凿的证据),我会错开!当然,它只是将VHDL解析为一堆逻辑,为一堆触发器提供服务。

我甚至不知道使用是否是老式合成器的问题,或者人们是否只是认为它是这样的!

答案 2 :(得分:0)

下面的代码应该为具有时钟门的库演示这一点。模拟结果将是相同的,并且形式验证将证明这两者相同。然而,第一个可能会使用更少的功率和更少的面积。

//Instances 1 clock gate
reg [7:0] value;
always @(posedge i_clk)
  if(enable)
    value <= new_value; 

//Instances 8 muxes
always @(posedge i_clk)
  if(enable)
    value <= new_value;
  else //Exhaustive so assignment always occurs
    value <= value;

第一个例子将时钟门用于所有8个DFF的时钟。第二个例子将使用8个多路复用器将每个DFF的输出循环回到它的输入。根据时钟门到多路复用器的面积和功率比,差异可能很大。这是在Talus上测试的。

当然第二个例子中的else子句是无用的,但实验的目的是看看该工具处理复杂的casez / x语句以及在always块之间共享启用的程度。对于FSM,只要检测到FSM,我就倾向于语法无关紧要。我的基础是XST如何处理它们,状态机优化是一个非常成熟的主题。