编写高效 Vivado HLS 工程 testbench 的三个要素 在 C 程序的设计中,任何一个 C 程序的顶层都是 main()函数
而在vivado HLS 的设计中,只要函数的层次在 main()函数以下,都可以被综合
但是每个 vivado HLS 工程只能指定一个 top 层函数作为输出 RTL 模块的顶层,其它和这个函数层次平行,不需要被综合的函数都可以作为 testbench 来使用
这样就带来一个问题,如何编写 vivado HLS 工程的testbench 更高效,或者说能更好的让 HLS 工具自动重用 C testbench 验证产生的 RTL 代码就变得非常重要
通常,在 Vivado HLS 中,好的 C testbench 设计原则是 testbench 设计和需要实现的算法函数分别保存在不同的文件中,并且充分利用头文件
Testbench常常包含了一些 HLS 综合不支持的操作,比如通过文件的读写取得仿真数据并保存结果,或者打印一些测试结果进行分析
在头文件中,完成对 testbench 中所有的数据类型和函数的定义,以及包含共享的设计文件和函数库
Vivado HLS 中,只能指定一个 top 层函数用于综合,top 层函数可以包含多个子函数
当需要综合多个并行层次的函数时,可以编写一个 wrapper 函数作为top 层函数,将需要综合的多个并行函数封装起来
C testbench 的目不仅是要验证需要综合的 top 函数功能正确(C 编译器验证环境),同时重用 C testbench 作为综合产生 RTL 代码的仿真激励,HLS 工具自动调用 C testbench 来验证 RTL 功能的一致性(C 编译器和 RTL 仿真器的协同仿真环境)
这样,编写一个好的风格 testbench 可以很好的提高设计的验证效率,假如在 HLS