FPGA密度随着工艺几何尺寸的缩小而不断增长,设计复杂性使得继续使用传统的设计流程变得越来越困难。尤其是当需求改变时,传统的FPGA设计流程可能也将面临大量的设计修改,这将导致更长的重新验证和开发周期。
高层次综合(High-level Synthesis)编译器简称 HLS,可以帮助缓解FPGA复杂性,提高设计效率。HLS指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。所谓的高层次语言,包括 C、C++、SystemC 等,通常有着较高的抽象度;与之相比,诸如 Verilog、VHDL、SystemVerilog 等就是低层次语言。
HLS 技术在近十年来获得了大量的关注和飞速的发展,尤其是在 FPGA 领域。使用更高的抽象层次进行电路建模,已然成为集成电路设计发展的必然选择。根据 NEC 2004 年发布的研究,一个拥有 100 万逻辑门的芯片设计通常需要编写 30 万行 RTL 代码。因此,完全使用 RTL 级的逻辑抽象设计当代芯片是不现实的,这也会对设计、验证、集成等各个环节造成巨大的压力。相比之下,使用诸如 C、C++等高层语言对系统建模,可以将代码密度压缩 7 到 10 倍,极大的解决了设计复杂度的难题。
HLS工具在使用时既需要统筹考虑各种电路设计的性能、功耗、面积等主要指标,同时也要兼顾工具本身的性能,比如占用的资源和运行时间等。因此,在开发 HLS 设计时,要采用更多的优化方法。西门子EDA发布的白皮书中介绍了使用Catapult所开发的这种卷积滤波器可以将HLS设计导入不同的FPGA平台,接下来我们将从以下4个方面详细介绍,Catapult如何将HLS代码针对不同FPGA平台进行优化优化,以获得最佳性能。
Catapult HLS可以运行基于整数内核的算法
西门子EDA提到了一种更加传统的软件代码编写方式,其使用固定大小的标准C类型的算法,该算法的所有变量均使用 int16_t。并非所有图像处理内核都需要使用小数,例如边缘检测、锐化或高斯模糊。如果我们不想在内核变量中使用小数,这种方法将非常适用。我们通过导入三种 FPGA 技术(Achronix Speedster 7T、 Intel Stratix 10 和 Xilinx Virtex UltraScale+ 系列)的 Catapult HLS 就可以运行此算法。
Catapult可以优化目标性能
每个目标器件都要执行三次 HLS 运行,每次运行定义了 不同的优化约束。由于不同技术 的优化可能不同,使用Catapult 约束编辑器可以设置优化,实现最佳性能。不同的架构展示了不同的模块存储器和累加器架构,因而不同器件需要特定的优化。Catapult 可以轻松地在目标器件之间切换,例如下图所示,可通过更改库映射和目标综合工具来选择新的目标器件。因此,Catapult可以通过在三种目标技术之间切换并实现特定的优化,大大优化了目标性能,实现单时钟周期吞吐量, 从而可以支持高性能解决方案的实现。
选择综合工具和目标技术
Catapult可以优化代码支持浮点实现
对于需要使用小数值的图像内核,虽然综合浮点数是可以实现的,但它通常会导致解决方案需要更大的面积,并且降低时序性能,这时定点精度库 ac_fixed 就有了用武之地。我们可以利用 ac_fixed 库,通过定点数字系统处理小数。使用这种系统可以大幅度简化数字表示,并可提高资源实现效率和时序性能。而且 Catapult HLS 在处理定点数字时也可以应用ac_fixed 库的规则。
Catapult可以轻松实现技术优化
虽然 Catapult 中只需要更改目标工具和器件,就可以切换需要实现的技术。但不同器件的高层次元素可能相同,但具体的模块 RAM 架构和功能、DSP 结构及事件查找表容量各有不同,所以需要不同的优化才能实现相似的性能。使用Catapult可以根据不同的器件提供不同的优化策略来轻松实现技术优化。
具有较高吞吐量的 Intel 实现
总之,解决方案开发人员可以利用 Catapult, 将相同的应用程序代码快速导入至新的目标技术, 同时优化性能。使得开发人员在使用HLS时,能够轻松地更改技术,从而针对多种不同的 FPGA 技术生成 IP 内核。
点击这里下载完整白皮书
来源:西门子EDA