【问题标题】:Extreme pipelining in VHDL?VHDL中的极端流水线?
【发布时间】:2017-07-01 05:48:36
【问题描述】:

我想知道以下哪种设计更快,即可以在更高的 Fmax 下运行

    -- Pipelined
    if crd_h = scan_end_h(vt)-1 then
      rst_h <= '1';
    end if;

    if crd_v = scan_end_v(vt) then
      rst_v <= '1';
    end if;

    if rst_h = '1' then
      crd_h <= 0;
      rst_h <= '0';

      if rst_v = '1' then
        crd_v <= 0;
        rst_v <= '0';
      else
        crd_v <= crd_v + 1;
      end if;
    else
      crd_h <= crd_h + 1;
    end if;

在“上一个”循环中检查循环结束的位置,并通过第一个反馈信号在下一个循环中应用。

与较少流水线的方法相比:

    -- NOT Pipelined
    if crd_h = scan_end_h(vt) then
      crd_h <= 0;

      if crd_v = scan_end_v(vt) then
        crd_v <= 0;
      else
        crd_v <= crd_v + 1;
      end if;
    else
      crd_h <= crd_h + 1;
    end if;

第一个实现的想法是不要将比较中的算术与增量中的算术相结合。然而,另一方面,在第二种实现中,两个操作可以并行完成,一个的结果将 MUX 另一个。这会和从前一个周期(在第一个实现中)准备好 MUX 控制位一样快吗??

谢谢!

【问题讨论】:

  • 如果“更快”是指更高的 Fmax,流水线将为您提供更好的结果。然而,代价是增加了资源使用。对于给出的示例,如果流水线在 Fmax 方面给您带来任何切实的改进,我会感到惊讶,这可能并不值得。最简单的确认方法是使用您列出的两种方法合成代码
  • 参见RTL Hardware Design Using VHDL,Pong Chu,9.4 流水线设计,流水线是提高系统性能的重要技术。基本思想是将多个任务的处理重叠起来,以便在相同的时间内完成更多的任务。如果组合电路可以分阶段,我们可以在适当的位置插入缓冲器(即寄存器),将电路转换为流水线设计。 你的流水线在哪里?高像素时钟速率通常会导致更粗的时序(同步 2 个时钟计数的幂,..)以克服 Fmax 限制。
  • 假设您上面的代码是一个时钟进程并且您的流水线代码更快并且假设基于 lut 的设计,而不是更大。如果您希望挤出最后 1% 到 3% 的硬件区域,您可以尝试使用递减计数器并将计数器的进位检测为您的 rst_v。

标签: vhdl fpga mux pipelining asic


【解决方案1】:

首先,“更快”不是最好用的词,因为它可以解释为“吞吐量”、“延迟”或“Fmax”。这三个目标可能需要不同的方法。

最终,您是否需要实施更多流水线应该由您的设计规范和约束来决定。如果您只需要以 20 MHz 运行,请为此设置约束,并查看您的设计是否通过时序。如果是这样,那么优化设计就没有多大意义了。

假设您的设计不符合时序要求,您的 FPGA 实现工具应该能够生成时序报告,这应该告诉您设计的哪些部分是限制因素。然后,您可以专注于优化设计的这些部分。

更一般地说,要从 Fmax 的角度了解流程是否会受益于流水线,您需要了解 FPGA 工具将用于实现您的设计的底层构建块,通常称为“切片”。一般来说,如果一个顺序函数不能放在一个切片中,它可以从流水线中受益。过程是否“适合”在很大程度上取决于其输入的数量。请注意,对于使用 n 位数据运行的进程,可能可以将其描述为每个使用 1 位数据的 n 个进程数据,为分析目的减少输入的数量。另请注意,某些类型的过程(例如加法器)可以通过使用两个或更多切片中的进位链之间的专用互连有效地分布在多个切片上。同样,您需要详细了解 FPGA 设备中可用的构建块。

您没有包含任何信号定义,但看起来您的进程有两个计数器、一个复位和两个scan_end_hscan_end_v 形式的参数作为输入。我无法知道它们有多宽,但我们假设这些是 12 位值作为示例。然后,您的进程具有来自计数器和参数的4 * 12 = 48 输入。我不希望这么多输入的函数适合一个切片,因此您可以使用流水线实现更高的 Fmax。您将计数器比较流水线化的想法看起来不错;正如 cmets 中所指出的,最好的办法是尝试一下,并通过查看实施时间报告来了解结果。

【讨论】:

  • 当然,我的意思是可以达到的最高 Fmax。你是对的,它大约 12 位,所以不能假设一个切片。我想我可以通过一次又一次地增加时钟频率来检查这一点,看看哪个首先失败(否则,我认为,我无法保证实现工具会尽力而为。)
  • @Ran 见我的第二段。计算出支持屏幕分辨率所需的频率,设置约束并朝着它努力。 “最高可实现”可能不是一个有用的目标。
猜你喜欢
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 2013-04-01
  • 1970-01-01
  • 2014-04-04
  • 1970-01-01
  • 2011-12-13
相关资源
最近更新 更多