FPGA时序问题

时间:2011-04-03 13:25:35

标签: fpga

我是FPGA编程的新手,我对整体执行时间方面的表现有疑问。

我已经读过延迟是根据周期时间计算的。因此,总执行时间=延迟*周期时间。

我想优化处理数据所需的时间,我将测量总体执行时间。

假设我有一个计算a = b * c * d。

如果我在两个周期内计算(result1 = b * c)& (a = result1 * d),总执行时间为2 *周期时间的延迟(由乘法运算的延迟确定,表示值X)= 2X

如果我在一个周期内进行计算(a = b * c * d)。整体执行时间是1 *周期时间的延迟(比如值2X,因为它有两倍的延迟而不是一次)= 2X

因此,似乎为了在执行时间方面优化性能,如果我只关注减少延迟,则周期时间会增加,反之亦然。是否存在可以减少延迟和周期时间,导致执行时间减少的情况?我什么时候应该专注于优化延迟?什么时候应该关注周期时间?

此外,当我使用C ++编程时,似乎当我想优化代码时,我想优化延迟(执行所需的周期)。但是,似乎对于FPGA编程,优化延迟是不够的,因为周期时间会增加。因此,我应该专注于优化执行时间(延迟*周期时间)。如果我想提高程序的速度,我是否正确?

希望有人能帮助我。提前谢谢。

3 个答案:

答案 0 :(得分:2)

我倾向于将延迟视为从第一个输入到第一个输出的时间。由于通常存在一系列数据,因此查看一个接一个地处理多个输入所花费的时间非常有用。

以您的示例为例,处理10个项目,在一个周期(一个周期= 2t)中执行a = b x c x d将需要20t。无论如何在两个1t周期内完成,处理10个项目需要11t。

希望有所帮助。

编辑添加时间。

在一个2t循环中计算。 10次​​计算。

Time   0  2  2  2  2  2  2  2  2  2  2  = 20t

Input  1  2  3  4  5  6  7  8  9 10
Output    1  2  3  4  5  6  7  8  9 10

计算两个1t周期,流水线,10次计算

Time   0  1  1  1  1  1  1  1  1  1  1  1  = 11t

Input  1  2  3  4  5  6  7  8  9 10
Stage1    1  2  3  4  5  6  7  8  9 10
Output       1  2  3  4  5  6  7  8  9 10

两种溶液的延迟时间为2t,第一种溶液的延迟时间为2t,第二种溶液的延迟时间为2t。然而,第二种解决方案的吞吐量是两倍。一旦考虑到延迟,您就会每1个周期得到一个新答案。

因此,如果你有一个复杂的计算需要说5个1t周期,那么延迟将是5t,但是通过率仍然是1t。

答案 1 :(得分:2)

除了延迟和周期时间之外,还需要另一个词,即吞吐量。即使需要2个周期才能得到答案,如果您可以在每个周期中放入新数据并在每个周期中将其输出,那么您的吞吐量可以比“在一个周期中完成所有操作”增加2倍。

假设您的计算在一个周期内需要40 ns,因此吞吐量为2500万个数据项/秒。

如果你管道它(这是将计算分成多个周期的技术术语)你可以在2个20ns +一个位中完成它(你必须输入额外的寄存器中的一点)。假设该位为10 ns(这很多,但总和很容易)。所以现在需要2x25 + 10 = 50 ns => 20M项/秒。更糟!

但是,如果你可以使两个阶段彼此独立(在你的情况下,不共享乘数),你可以每25 +一位ns将新数据推入管道。这个“有点”将小于前一个,但即使它是整个10 ns,你可以以35ns或近30M项/秒推送数据, 比你的启动更好用。

在现实生活中,10ns将会更少,通常是100s ps,因此收益会更大。

答案 2 :(得分:1)

乔治准确地描述了意义延迟(这与计算时间无关)。它似乎想要优化您的设计速度。这非常复杂,需要很多经验。总运行时间是

execution_time = (latency + (N * computation_cycles) ) * cycle_time

其中N是您要执行的计算次数。如果你开发加速,你应该只计算大数据集,即N很大。通常你没有延迟要求(可能是实时应用程序不同)。确定因素是cycle_timecomputation_cycles。这里很难优化,因为存在关系。 cycle_time由您的设计的关键路径决定,并且随着您在其上的寄存器越少,它就越长。它越长,cycle_time就越大。但是,您拥有的寄存器越多,您的computation_cycles(每个寄存器将所需周期数增加一个)。

也许我应该补充一点,延迟通常是calculate_cycles的数量(它是第一个产生延迟的计算)但理论上这可能是不同的。