vivado hls的---------Test bench

一. C/C++ Test bench的基本架构

vivado hls的---------Test benchvivado hls的---------Test bench

  • Test bench是一个用来验证逻辑功能是否正确的虚拟坏境,由Driver/Stimulus(输入激励)、Reference Model(参考模型,其输出结果是正确结果)、DUT(待测模型,Design Under Test,我们需要综合的C函数)、Monitor(检测DUT的输出)、Scoreboard(将DUT的输出和参考模型的结果做对比);
  • C/C++ Test bench是为了验证我们所写的C/C++函数的正确性
  • 在HLS中还会复用C test bench来验证生成的RTL设计
  • 如何写一个高效的test bench,希望被测的函数可以更多次执行,可以覆盖更多的输入情况,将我们的被测函数的输出和已知的正确输出做一个比较,如果结果完全正确返回0;否则返回1

一个test bench的实例:
vivado hls的---------Test bench
test bench结构中的各个部分:
vivado hls的---------Test bench

二. Test bench中的测试激励

vivado hls的---------Test bench
测试激励的三种来源:

  • 定义一个变量并且初始化;
  • 将数据存储在数组中;
  • 从外部文件中读取数据再赋给数组;

1. 用数组做测试激励的实例

vivado hls的---------Test bench

vivado hls的---------Test bench 

2. 从外部文件读取数据作为激励

vivado hls的---------Test benchvivado hls的---------Test bench

  • 优点就是外部文件可以比较容易地存储大量数据,这从一定程度上做到了测试的完备性,另外外部文件很灵活 ,可以很容易的修改测试数据;
  • C++中从外部读取数据的步骤:创建数据流——读取数据——将数据存储到数组;

使用Template Function可以高效地从外部文件读取数据,可以参数化读取。
vivado hls的---------Test bench

 最好不要采取绝对路径方式。

vivado hls的---------Test bench

一个实例:
vivado hls的---------Test bench

三. 输出检测与格式控制

1. 输出检测

vivado hls的---------Test benchvivado hls的---------Test bench

  • Scoreboard的作用在于将DUT的输出结果与Reference Model中的正确结果比较,当出现错误时给出信息;
  • 通常由两种方法来比较:一种是使用if函数做判断,另一种就是用系统函数(system)来做比较,先将DUT的输出放到一个文件中,system函数中输入是文件;

如何将数据写入外部文件?
vivado hls的---------Test bench

2. 输出格式的控制

vivado hls的---------Test benchvivado hls的---------Test benchvivado hls的---------Test benchvivado hls的---------Test bench

  • setw、left、right、internal;
  • 整数的输出格式;
  • 定点数的输出格式;
  • 浮点数的输出格式;