0
点赞
收藏
分享

微信扫一扫

HLS开发学习-09- 描述高效的C测试平台


写在前面

本文是本系列专题的第九篇,参考高亚军老师的视频教程以及课程的ppt,主要介绍了高效的C测试平台相关内容。

激励来源

  • 直接将变量定义为激励来源并初始化
  • 将数据存储在数组中
  • 从外部文件读取数据作为激励来源

对于存储在数组中和外部文件中的激励源,要进行定义数组进行存储。

HLS开发学习-09- 描述高效的C测试平台_数据

使用数组作为激励源

HLS开发学习-09- 描述高效的C测试平台_模板函数_02


这里定义两个数组作为仿真的测试激励来源。

HLS开发学习-09- 描述高效的C测试平台_数组_03

使用外部文件作为激励源

使用外部文件作为激励源可以更容易存储更多的数据,拓宽了存储数据的范围,可以涵盖几乎所有可能的输入。同时,使用外部文件作为激励源使得仿真更加灵活,不需要对仿真文件进行过多的修改即可完成仿真设计。

HLS开发学习-09- 描述高效的C测试平台_数据_04


C++中,外部文件存储输入激励的流程如下:

首先创建文件存储要仿真的激励数据,然后从文件中读取激励数据,最后将读到的数据存储到数组中。

HLS开发学习-09- 描述高效的C测试平台_数据_05

使用外部文件读取数据的两种方式

  • 使用while循环进行读取数据
  • 使用for循环进行读取数据
  • HLS开发学习-09- 描述高效的C测试平台_数组_06

使用外部存储的设计示例

HLS开发学习-09- 描述高效的C测试平台_数据_07


在设计中,首先要包含头文件fstream,然后进行定义存储的数组单元。将文件中的数据利用for循环或者while循环进行存储到数组中。对于读取外部文件时,可以直接根据文件的路径寻找文件,也可以把文件添加到工程中在读取时只引用文件名即可。

HLS开发学习-09- 描述高效的C测试平台_数据_08

使用模板函数

模板函数提供了一个参数化的方法,以满足不同的需求,如数据类型,数组大小。使用模板函数非常类似于Verilog HDL中的parameter/ generic,模板函数最好以.h文件的形式编写和存储,在main()函数中,需要添加#include “ReadFileVec.h”

HLS开发学习-09- 描述高效的C测试平台_数据_09

输出监测

用于检测输出结果的模块这里称为Scoreboard。Scoreboard用于比较自己的设计和参考设计的结果,在得到错误信息的时候给出相关的指示信息。

HLS开发学习-09- 描述高效的C测试平台_数据_10

比较输出结果的两种办法

通常,可以使用两种办法进行比较测试的输出数据的结果。

  • 使用if语句进行比较结果
  • 使用system函数进行比较结果

HLS开发学习-09- 描述高效的C测试平台_数组_11

有时候,DUT的结果并不绝对等于黄金参考数据。通过定义绝对误差,我们可以使用另一种类似的方法if (abs(a-b) <绝对错误)。
如果我们使用系统函数进行比较,我们必须首先将DUT的输出写入一个外部文件,同时参考数据存储在一个外部文件中这样,系统也可以显示它们之间的区别确保两个文件的格式一致。

将数据写入到外部文件

比较输出结果后,我们可以通过仿真直接进行设置监视数据的相关状态的输出,也可以将结果写入到外部文件中。步骤如下:

  1. 包含 < fstream >;
  2. 使用模板函数对数据进行复用;
  3. 创建 ofstream 对象;
  4. 检查是否存在待写入文件;
  5. 写入数据到目标文件;
  6. 关闭文件。
  7. HLS开发学习-09- 描述高效的C测试平台_模板函数_12

输出格式控制

left right integer 类型输出

HLS开发学习-09- 描述高效的C测试平台_数组_13

integer类型输出的进制类型

HLS开发学习-09- 描述高效的C测试平台_数组_14


通过示例可以看出两种方法的输出结果在有些情况下不同。

HLS开发学习-09- 描述高效的C测试平台_数组_15

定点数进制类型

HLS开发学习-09- 描述高效的C测试平台_数据_16


通过示例可以看出,对于定点数来说,使用 to string的方式结果正确,在仿真时建议使用该方式。

浮点数类型

对于位数控制

HLS开发学习-09- 描述高效的C测试平台_模板函数_17

summary

HLS开发学习-09- 描述高效的C测试平台_数组_18


HLS开发学习-09- 描述高效的C测试平台_数据_19


举报

相关推荐

0 条评论