模糊高级合成工具

2021-05-08 22:44:12

高级合成 - 将软件程序自动编译为自定义硬件设计 - 是一种越来越重要的技术。它具有吸引力,因为它让软件工程师利用自定义硬件设备(如FPGA)的计算功率和节能。它对硬件设计师来说也是有吸引力的,因为它允许他们以比Verilog或VHDL更高的抽象级别进入他们的设计。

因此,高级合成越来越依赖。但它可靠吗? Yann Herklotz,Zewei du,Nadesh Ramanathan,我在FCCM 2021下周有一篇论文,了解我们的尝试。

我们遵循一个相当好的跑步路径。在过去十年中有几个项目,旨在通过模糊来测试编译器 - 也就是说,通过生成随机源文件,将每个人送入编译器次级测试,并查看它是否正确编译。但这些作品专注于为处理器生成汇编代码的传统编译器。在我们的工作中,我们将类似的技术应用于HLS工具。

可以在没有许多更改的情况下进行这些想法 - 毕竟,HLS工具仍然将C程序作为输入,就像传统的编译器一样。我们改变了一些事情:我们限制了随机C发生器,以解释HLS工具不支持完整C语言的事实,我们添加了随机的HLS特定指令(如:“管道这个循环”)到生成的程序,我们调整了随机发电机的概率,以避免产生使合成过程的长期造成的程序。要检查HLS工具是否已正确编译每个随机C程序,我们使用Verilog模拟器执行其输出,并将其与使用GCC编译的可执行文件的输出进行比较。

我们生成了6700个随机C程序,并将其联系到四个广泛使用的HLS工具:Legup,Xilinx Vivado HLS,英特尔HLS编译器和Bambu。我们发现所有四个工具都可以崩溃或生成错误的代码。总共,我们生成的程序中的1191个在四个工具中的至少一个中失败,如下图所示。

我们对某些故障进行了测试案例减少,这导致识别8个独特的错误,其中有几个由HLS工具开发人员确认,其中一个(在下面的代码段中显示)已经存在固定的。

最后,我们将在相同HLS工具的一些不同版本中找到了多少错误。下图显示了在三个版本的Xilinx Vivado HLS上的实验结果。我们看到2018.3版本的工具具有最大的故障,尽管它也醒目时有一些测试用例仅在最新版本中失败。

总之:这个项目表明,编译器模糊技术在HLS工具中的揭示错误方面是有效的。 随着HLS工具越来越依赖,我们希望我们的工作有动力,需要这些工具更加严格地设计。