FPGA CPU,如何找到最大速度?

电器工程 FPGA 中央处理器 自制cpu
2022-01-22 01:32:27

我刚刚进入 FPGA,如果我理解正确,您正在使用代码将逻辑门连接在一起。所以如果我在 Verilog 中设计一个 CPU,它应该将一些逻辑门连接在一起并工作,但是我怎么知道我的 DIY CPU 可以运行多快呢?它取决于什么?

3个回答

设计的速度受到几个因素的限制。最大的很可能是通过设计中组合逻辑的传播延迟,称为关键路径如果您使用快速 FPGA 并非常仔细地编写 HDL,您可能会在 Virtex UltraScale+ 之类的设备上达到 700 MHz。在较低端的 FPGA 上,例如 Spartan 6,一个合理的数字可能更像是 250 MHz。这需要在任何地方进行流水线操作,因此您在有状态组件(最小化逻辑级别)、低扇出(最小化逻辑元件上的负载)和没有拥挤的老鼠巢(有效的路由路径)之间拥有绝对最小数量的组合逻辑。

不同FPGA的架构逻辑会有不同的时序参数。更快、更昂贵的 FPGA 将具有更小的延迟,因此可以在相同的设计中实现更高的时钟频率,或者在相同的频率下运行更复杂的设计或更少流水线的设计。特定工艺中的性能可能相似 - 例如,Kintex UltraScale 和 Virtex UltraScale 是在同一工艺上制造的,并且具有相似的单元和布线延迟。如果不通过工具链运行它并查看来自静态时序分析的时序报告,就不可能说出给定设计的速度有多快。

在运行工具链以确定最大时钟速度时,请记住这些工具是时序驱动的:它们将尝试满足指定的时序约束。如果没有指定时序约束,结果可能会很差,因为工具不会尝试优化设计以提高速度。通常,这些工具必须在不同的时钟周期约束下运行多次才能找到最大可实现的时钟频率。

如果您可以优化您的设计以使关键路径不受限制,那么您将遇到时钟生成和分配(PLL、DCM、时钟缓冲器和全局时钟网络)的限制。这些限制可以在零件数据表中找到,但是通过非平凡的设计来接近它们是很困难的。我已经在 500 MHz 的 Virtex UltraScale 上运行了一些东西,但这只是为其他组件提供触发信号的少数几个计数器。

您在目标技术(特定 FPGA)中综合您的设计,并让静态时序分析工具告诉您最小时钟周期是多少。

或者,您首先在设计中添加约束,然后这些工具会让您知道它们是否得到满足。

您的 CPU 将运行的速度将取决于您在综合设计中最长的 flop-to-flop 延迟。触发器到触发器的延迟将包括时钟到 Q、路由、逻辑/LUT 和触发器设置时间。这些加在一起形成了时序的关键路径,您可以在布局布线工具输出的时序报告中对其进行检查。

有整个设计学科致力于使架构最小化这种延迟,以充分利用给定的流程——流水线、并行执行、推测执行等等。这是一项引人入胜的任务,从 FPGA(或就此而言,ASIC)榨取最后一盎司的性能。

也就是说,FPGA 供应商将为其部件提供不同的速度等级,这对应于最大 MHz 速率。例如,-2 Xilinx Artix 粗略地说是“250 MHz”部件,尽管它能够为高度流水线设计提供更高的时钟速率。

当您与 FPGA 综合和布局布线工具交互时,您需要为您的设计提供约束这些告诉工具流程您试图实现的目标触发器到触发器延迟。在 Quartus (Altera) 和 Vivado (Xilinx) 中,这些约束使用一种称为 SDC 的语法,它代表 Synopsys 设计约束。SDC 最初来自 ASIC 世界,也被 FPGA 行业采用。了解 SDC——它将帮助您获得想要的结果。

Altera 和 Xilinx 有在线社区,可以帮助您了解如何使用 SDC 语法和许多其他主题。

综上所述,如果您关心速度,则应考虑使用具有 CPU 硬宏的 FPGA,例如 Zynq。