1. Deisgn Flow - Traditional vs High-level

下图描述的是典型的 RTL 开发流程图,和灰色箭头一起形成了每个部分以及整个系统调试的闭环。大致可以分成三部分:

第一部分:使用硬件描述语言进行功能设计和开发,并编写测试激励,通过仿真进行功能验证;

第二部分:Synthesis 和 Implementation,在这一阶段实现设计的收敛,从 Latency、Timing 和 Resource 三个角度考察;

第三部分:系统级的测试验证(上板验证);

以上三个部分均需要反复迭代,保证各个部分满足要求后才能达到最终想要的方案。

1075

当 HLS 参与之后,我们就可以站在更高和更抽象的层次来开发和调试工程,C Synthesis 实现将 C/C++ 代码和 TestBench 转换为 RTL,注意在这一步时就需要考虑到 Latency、Timing 以及 Resource。后续的流程便与传统的 RTL 开发没有区别了。

1075

2. Vivado HLS Design Flow

Vivado HLS 的设计输入除了需要高级语言编写的 Source code 和 Test bench 以外,还需要 Contraints 和 Directives 用来约束收敛和优化(有相应的图形界面)。另外提供了一系列的 library 来辅助高级语言编写特定功能。

Vivado HLS 在 C Syntheis 后会生成两种版本,一种是生成 IP 直接输入给 IP Catalog 中来使用,另一种则是支持在 System Generator 中以模块化的形式来使用。
1075

C testbench 非常重要,包含真实的结果,来和仿真的结果做对比,此外还用于自动生成 RTL Testbench。

1075

具体操作可以分成如下四步,其中每一步都会单独生成一个文件夹保存生成的数据。

1075

3. Solutions

每个工程可以创建若干个 Solutions,一般是用来测试不同的 directives 的优化效果。不同的 solution 有不同的 constraints 和 optimization directives,Directives 可以写在 source code 中,也可以写在单独的文件中,一般建议写在单独的文件中方便调试对比。
1075

1075

1075

4. Summary

1075