两种不同 vhdl 设计的功率和时序报告

Power and timing reports of two different vhdl designs

假设我有两个电路(在 vhdl 中描述),第一个在循环中执行以下算法(伪代码):

C<=A+B;
D<=C+F;
RES <= D;

我表示此算法应用了有限状态机 (FSM) 逻辑。因此:

State1:C<=A+B;
       out_ready<='0';--the result is not ready yet
       nextstate<=State2;
State2:D<=C+F;
       nextstate<=S_out;
S_out: RES<=D;
       out_ready<='1';--the result is ready
       nextstate<=State1;

第二种算法也是顺序算法,通过FSM逻辑表示。请记住,CSA 是一个具有 3 个输入(A、B、C)的进位保存加法器,并立即生成两个结果 S 和 C:

S <= '0'&(A xor B xor C);
C <= (A and B) or (A and C) or (B and C) & '0';

如果我们对 S 和 C 求和,我们得到求和结果

RES <= S+C;

优点是在某些情况下,您可以只使用 S 和 C(在一个时钟周期内生成)向量而无需添加它们。 OK,回到我的第二个算法:

(S,C)=(A,B,Carry_in);
(S,C)=(S,C,F);
RES_S=S;
RES_C=C;

这也代表应用 FSM:

State_CSA_1:
   S <= '0'&(A xor B xor 0);
   C <= (A and B) or (A and 0) or (B and 0) & '0';
   out_ready<='0';--the result is not ready yet
   nextstate<=State_CSA_2;
State_CSA_2:
   S <= '0'&(S xor C xor F);
   C <= (S and C) or (S and F) or (C and F) & '0';
   nextstate<=S_out;
S_out:
   RES_S<=S;
   RES_C<=C;
   out_ready<='1';--the result is ready
   nextstate<=State_CSA_1;

所以,如果我进行仿真(我使用过 modelsim),使用一个每 0.5 ns 交替一次时钟信号极性的测试台文件,我得到在这两种情况下结果都是在 3 个时钟后生成的循环。但很明显,第二种算法要快得多。考虑到我必须写一篇关于两个电路之间差异的报告,我有以下问题:

1)我想知道执行这两种算法所需的时间。如果我进行时序分析,例如使用 Xilinx ISE,两个电路的性能会有差异吗?或者在这种情况下,时间将由 3 个时钟周期推导出来?

2) 我必须报告时间、耗电量和space占用(面积)。你推荐哪个软件?由于我没有太多时间,一些易于使用或有据可查的东西(教程等)。

PS 这两种算法是我在写这篇文章时发明的post,我正在做其他无聊的事情。

数字电路性能的衡量标准是:吞吐量、最大工作频率、延迟、面积和功耗。

你的 3 个时钟周期是延迟,这很容易从你的 VHDL 中推断出来,因为你的 FSM 从输入到输出是 3 个周期。最大工作频率和面积由综合工具给出。所有综合工具都可以估算功率(ISE有XPower),如果你输入正确的数据,它可以非常精确。

最后,吞吐量是衡量您可以处理多少数据的指标。在这两种架构中,您的输出可用 1/3 个周期,因此您的吞吐量是 1/3。与此描述比较:

process(clk)
    if rising_edge(clk) then
        s_0 <= a + b;
        v_0 <= in_valid;
        f_0 <= f;

        s_1 <= s_0 + f_0;
        v_1 <= v_0;

        res <= s_1;
        out_ready <= v_1;
    end if;
end process;

在我的描述中,延迟也是3,但是我每个周期都能得到一个输出,因此我的吞吐量是1/周期,是你描述的3倍。理论上面积应该大于你的电路,但可能不会,因为开销更少。一个更复杂的例子会看到更多的差异,加法非常简单,尤其是在 FPGA 中。

根据我的经验,延迟很少成为问题,除了接口和选定的应用程序。我们想要最大的吞吐量和最小的面积,有时还需要功率(尽管 FPGA 在这方面不是很擅长)。最大工作频率与吞吐量有关,在 200MHz 时可以 运行 的 1/时钟周期电路的总吞吐量是在 100MHz 时 运行s 的总吞吐量的两倍。

最后,您似乎对 CSA 的使用感到困惑。它的优点是它的持续延迟。在 1024 位上执行 CSA 所需的时间与在 4 位上执行的时间一样长。通过将您的 CSA 限制为每个时钟周期一次 运行,您将失去优势,因为更快的时间会丢失;无论如何,最终的最大工作频率将由全加器决定。

您还应该知道,Xilinx LUT6 的技术(Spartan-6 和更新版本)可以以与 2 输入加法相同的成本(时序和面积)执行 3 输入加法。它使用 LUT6 执行 CSA,并使用快速进位逻辑执行最终加法。 2 输入加法还使用 LUT6(作为路由)和快速进位逻辑。因此,在 Xilinx 上使用 3 输入加法器没有缺点。