跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench

目录

  • 第一讲 C Test batch的结构
  • 第二讲 测试激励(Stimulus)
  • 第三讲 Scoreboard and Output Format

本节主要介绍的是《跟Xilinx SAE 学HLS系列视频讲座》第9,10,11节。
跟Xilinx SAE 学HLS系列视频讲座笔记(1)
跟Xilinx SAE 学HLS系列视频讲座笔记(2)—— 编写高效的C Test Bench
跟Xilinx SAE 学HLS系列视频讲座笔记(3)—— 接口综合
跟Xilinx SAE 学HLS系列视频讲座笔记(4)—— For循环优化
跟Xilinx SAE 学HLS系列视频讲座笔记(5)—— 数组优化
跟Xilinx SAE 学HLS系列视频讲座笔记(6)—— 函数优化

第一讲 C Test batch的结构

1. 什么是 C Test batch
test bench或testing workbench是一个(通常是虚拟的)环境,用于验证设计或模型的正确性或合理性。对于Vivado HLS而言,我们需要用c++来描述一个Test batch用来验证这个模型和设计的合理性。跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第1张图片
使用C Test batch目的是为了验证我们C函数的准确性,此外采用 C Test batch可以提高我们的效率,因为在仿真过程中,C比DHL等硬件描述语言更快,即在综合之前使用C开发和验证算法比在RTL开发更有效。
跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第2张图片
值得强调的是C Test batch在Vivado HLS中起到了两个重要的作用,第一个是验证了C函数的正确性(我们在执行C Simulation时这个作用就体现出来了),第二个是验证RTL设计正确性(这个是在我们执行C / RTL协同仿真时候)
跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第3张图片
2. 怎样是一个高效的C Test Batch

  • 我们希望我们待测的函数可以被多次的执行,这就需要我们有更多的输入激励给到这个顶层函数,使其能遍历更多的可能性,这样就提高可代码的覆盖率。
  • 将函数的输出值与good values进行比较。
  • main( )函数的返回值为0,表示结果正确;返回值为非0,结果正确。
    跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第4张图片
    例子:



跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第5张图片
3. 总结

  • C Test batch在HLS中扮演着重要角色。它可以验证C函数的正确性并验证RTL设计的正确性。
  • C Test batch由激励,参考模型,DUT和scoreboard组成
  • 如果结果正确,则C测试台应返回0。否则,应返回1。这是强制性的。
    跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第6张图片

第二讲 测试激励(Stimulus)

1. 测试激励的源

  • 我们可以直接定义一个变量,并对其进行初始化。
  • 可以把数据存储在数组中。
  • 可以在外部文件中读取数据。
    但是他们各有优势。
    跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第7张图片
    例子:使用数组作为测试激励
    跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第8张图片
    例子:使用文件作为测试激励
    跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第9张图片
    跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第10张图片
    我们可以用C++中的Template Function的方式。
    跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第11张图片
    2.总结
  • 数组和外部文件都可以被用作激励的源。
  • 外部文件可以提供大量数据,涵盖大多数情况。
  • 从外部文件读取数据时,使用模板功能更有效。

第三讲 Scoreboard and Output Format

1. 什么是Scoreboard?

  • -将DUT的输出结果与golden data进行比较。
  • 提供一些有关错误数据的消息

所以说Scoreboard有两部分输入,一个是待测模块的输出,另一个是golden data。通常,有两种方法可以进行比较。

  • 使用if语句进行比较。
  • 使用系统函数进行比较。
    跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第12张图片
    2. 两种方法比较(if语句和系统能) 跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第13张图片

有时,DUT的结果并非绝对等于golden data。通过定义绝对误差,我们可以使用另一种类似的方法。

if ( abs(a-b)  < ABSOLUTE ERROR)

如果使用系统函数进行比较,则必须首先将DUT的输出写入外部文件,同时将golden data存储在外部文件中。

  • 这样,系统也可以显示它们之间的区别。
  • 确保两个文件的格式相同。

3. 如何将数据写入外部文件

跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第14张图片
4. 输出格式的控制(setw, left, right, internal
输出格式用于控制如何显示结果和一些辅助信息。下面的例子我们是理解Left, rightinternal的区别。
跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第15张图片
5. 整数的输出
跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第16张图片
6. 定点数的输出
跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第17张图片
7. 浮点数的输出
跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第18张图片
8. 总结
跟Xilinx SAE 学HLS系列视频讲座笔记(2)——编写高效的C Test Bench_第19张图片

你可能感兴趣的:(FPGA)