Vivado HLS(High-level Synthesis)笔记三:Test bench

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

Vivado HLS(High-level Synthesis)笔记三:Test bench_第1张图片

  • 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的实例:

test bench结构中的各个部分:
Vivado HLS(High-level Synthesis)笔记三:Test bench_第2张图片

二. Test bench中的测试激励

Vivado HLS(High-level Synthesis)笔记三:Test bench_第3张图片
测试激励的三种来源:

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

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

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

Vivado HLS(High-level Synthesis)笔记三:Test bench_第4张图片Vivado HLS(High-level Synthesis)笔记三:Test bench_第5张图片

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

使用Template Function可以高效地从外部文件读取数据,可以参数化读取。
一个实例:

三. 输出检测与格式控制

1. 输出检测

Vivado HLS(High-level Synthesis)笔记三:Test bench_第6张图片

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

如何将数据写入外部文件?

2. 输出格式的控制

Vivado HLS(High-level Synthesis)笔记三:Test bench_第7张图片Vivado HLS(High-level Synthesis)笔记三:Test bench_第8张图片

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

你可能感兴趣的:(SNN(Spiking,Neural,Network,脉冲神经网络))