写在前面
本文是本系列专题的第九篇,参考高亚军老师的视频教程以及课程的ppt,主要介绍了高效的C测试平台相关内容。
激励来源
- 直接将变量定义为激励来源并初始化
- 将数据存储在数组中
- 从外部文件读取数据作为激励来源
对于存储在数组中和外部文件中的激励源,要进行定义数组进行存储。
使用数组作为激励源
这里定义两个数组作为仿真的测试激励来源。
使用外部文件作为激励源
使用外部文件作为激励源可以更容易存储更多的数据,拓宽了存储数据的范围,可以涵盖几乎所有可能的输入。同时,使用外部文件作为激励源使得仿真更加灵活,不需要对仿真文件进行过多的修改即可完成仿真设计。
C++中,外部文件存储输入激励的流程如下:
首先创建文件存储要仿真的激励数据,然后从文件中读取激励数据,最后将读到的数据存储到数组中。
使用外部文件读取数据的两种方式
- 使用while循环进行读取数据
- 使用for循环进行读取数据
使用外部存储的设计示例
在设计中,首先要包含头文件fstream,然后进行定义存储的数组单元。将文件中的数据利用for循环或者while循环进行存储到数组中。对于读取外部文件时,可以直接根据文件的路径寻找文件,也可以把文件添加到工程中在读取时只引用文件名即可。
使用模板函数
模板函数提供了一个参数化的方法,以满足不同的需求,如数据类型,数组大小。使用模板函数非常类似于Verilog HDL中的parameter/ generic,模板函数最好以.h文件的形式编写和存储,在main()函数中,需要添加#include “ReadFileVec.h”
输出监测
用于检测输出结果的模块这里称为Scoreboard。Scoreboard用于比较自己的设计和参考设计的结果,在得到错误信息的时候给出相关的指示信息。
比较输出结果的两种办法
通常,可以使用两种办法进行比较测试的输出数据的结果。
- 使用if语句进行比较结果
- 使用system函数进行比较结果
有时候,DUT的结果并不绝对等于黄金参考数据。通过定义绝对误差,我们可以使用另一种类似的方法if (abs(a-b) <绝对错误)。
如果我们使用系统函数进行比较,我们必须首先将DUT的输出写入一个外部文件,同时参考数据存储在一个外部文件中这样,系统也可以显示它们之间的区别确保两个文件的格式一致。
将数据写入到外部文件
比较输出结果后,我们可以通过仿真直接进行设置监视数据的相关状态的输出,也可以将结果写入到外部文件中。步骤如下:
- 包含 < fstream >;
- 使用模板函数对数据进行复用;
- 创建 ofstream 对象;
- 检查是否存在待写入文件;
- 写入数据到目标文件;
- 关闭文件。
输出格式控制
left right integer 类型输出
integer类型输出的进制类型
通过示例可以看出两种方法的输出结果在有些情况下不同。
定点数进制类型
通过示例可以看出,对于定点数来说,使用 to string的方式结果正确,在仿真时建议使用该方式。
浮点数类型
对于位数控制
summary