SLX FPGA新工具在手 无惧HLS设计流程挑战

Silexica产品营销经理Loren Hobbs讨论了在使用HLS进行FPGA设计时面临的五大挑战。 他着重探讨了如何解决使用新工具时出现的问题,从而提高FPGA项目的工作效率,让FPGA充分发挥其作用,投入到更加广泛的领域中去。

将C / C ++源代码转换为Verilog / VHDL的高级综合(HLS)工具已经商业化时间已超过15年。FPGA供应商和EDA公司承诺使用其HLS工具,能够获得更高级别的抽象,更快的验证和更快的设计迭代,从而大大提高生产力。例如,在C / C ++中模拟你的设计比在RTL(寄存器传输级别)中模拟快10到100倍。此外,图像处理和计算机视觉中的许多应用需要可视化验证。这种验证在执行RTL仿真时很难被设置,但可以在C语言轻松得到实现。在使用基于HLS的方法时,模拟速度的实现获得了更快的设计迭代,从而显著提高了生产率,因此更快的仿真可以加快设计迭代速度。

使用HLS可能让更多专门从事嵌入式软件编程的工程师了解并开始使用FPGA。传统的FPGA设计方法需要非常专业的技能,并且能够熟练地描述硬件描述语言(HDL)中的设计,例如Verilog或VHDL。与嵌入式软件开发人员相比,这种技能组合非常少见,一般只有在HDL编码方面经验丰富的专家会将使用FPGA。 HLS的出现,允许嵌入式软件开发人员(和硬件工程师)使用更高级别的语言(如C / C ++)在硬件中实现他们的算法。

使用HLS进行FPGA设计的好处如此之多,那么为什么在C / C ++中设计FPGA没有成为标准的设计输入方法呢?

答案其实很简单,因为在现实情况中采用HLS在设计过程中出现了需要考虑或者克服独特的挑战。 这些挑战可能导致设计人员进行更多工作,因此需要更多的开发时间,这在某种程度抵消了HLS的提高生产效率的好处。 让我们看看其中五个挑战:

1. 无法被HLS编译器合成的C / C ++代码

HLS编译器的C / C++编码规范非常广泛,在编写或重构用于HLS综合的C代码时需要理解超过1000页的文档。 例如,HLS不支持对动态大小的数组中的变量进行内存访问,并且给定的FPGA器件内存大小是固定的,这意味着不支持通过调用malloc,calloc和new等函数对可变大小对象进行动态分配的代码。 HLS工具必须知道算法在编译时所需的内存资源,以便生成有效的硬件实现。

 2.“非硬件感知”的C / C ++代码

使用各种内存构造、数据类型等创建C / C ++代码时,若不考虑硬件实现可能会产生意想不到的后果(例如膨胀的设备资源和低性能), 而且必须注意避免使用太大且不需要的数据类型。 例如,当仅需要10位整数时,在软件中使用32位整数在映射到标准处理器时这么做没什么问题,因为寄存器或存储器位置的大小已经固定。但是在硬件中实现时,这些未使用的比特就会变得昂贵, 因为它们消耗了宝贵的FPGA资源。

3. 并行性的确定

C / C ++代码通常在标准处理器上顺序执行,但在逻辑门中进行功能实现也允许以并行的方式执行,以获得硬件中的代码执行的加速。 然而随着算法、函数或代码库的复杂性增加,要确定设计中潜在并行性的位置可能非常艰巨且耗时。

4.软件和硬件分区

对于异构设计(这里指的是具有嵌入式处理器的FPGA),想要识别在处理器上运行的内容,以及通过HLS利用FPGA架构的并行特性来转移内容到硬件,这些可能需要大量时间和多次迭代,即使在进行预合成的模拟时也是如此。

5.将HLS编译器编译指示(pragmas)或指令(directives)插入到C / C ++代码中

为了使HLS编译器更有效地将软件实现为硬件,用户必须以编译指示或指令的形式为编译器提供指导。确定何时使用编译指示、如何设置其参数及将它们插入到代码中的位置,以及同时对在应用程序内系统级编译指示进行优化,这些无疑都是具有挑战性且耗时的。

总的来说,这些挑战对那些想要利用HLS设计优势的人来说是一个重大障碍。 HLS供应商因此提供了全面的文档和培训以帮助客户应对这些挑战,但它仍然是一个需要时间掌握的手动过程。不过现在…

Silexica的SLX FPGA工具基于超过10年的编译器技术研究,针对HLS设计过程的每个步骤出现的这些挑战(本文讨论的挑战)提供了非常实用的解决方案。

首先,SLX FPGA分析C / C ++源代码具有可合成性,并为非可合成代码提供自动和引导代码重构。 SLX引导用户浏览不可合成的每段代码,并自动转换代码或提供有关如何重构可合成代码的指导。

FPGA BLOG 01-

在即将发布的新版本中,SLX FPGA将识别导致效率低下的非硬件友好的数据结构。 SLX工具提供的方法能用于进行快速“假设”分析,以查看各种数据类型选项对于更有效的实施是否可行。 SLX还将增加对非可合成代码的性能和资源利用率估计的支持,提供有价值的应用程序洞察,而无需进行代码重构就能实现可合成性。

SLX FPGA解决的下一个挑战是对从顺序执行转换为并行或线形执行的并行算法或应用程序进行分析。通过识别并行性,SLX将会为C / C ++代码提供最有效的硬件实现。如果使用具有嵌入式处理器系统的FPGA,SLX FPGA还可以提供有关在软件和硬件域之间最有效地分配代码进行指导。

FPGA BLOG 02-

在定义了软件和硬件分区之后,SLX FPGA最后将会把编译指示插入到代码中,以便HLS编译器可以在编译C / C ++时实现硬件优化。

FPGA BLOG 03-

SLX FPGA是业界第一个直接解决使用HLS设计流程挑战的工具,通过提供可操作的见解将C / C ++代码转换为优化的HW实现,从而缩小学习曲线。

如果你有兴趣了解更多信息,请与我们联系。

或者你可以在5月21日慕尼黑举行的FPGA大会上测试我们最新版本的SLX FPGA。 我们的团队将进行现场演示,你可以直接了解SLX如何为您提供帮助。

点击这里跟我们联系

关于作者:LOREN HOBBS

Loren负责Silexica的产品营销,他在英特尔、Altera、Cypress和恩智浦等世界领先的半导体公司拥有超过20年的工程和营销经验。 他设计、定义并销售了多种旗舰产品,其销售量超过15亿台。他致力于将新产品推向市场,迎接当今的挑战,解决未来的工程挑战。

发表评论

电子邮件地址不会被公开。 必填项已用*标注