以下代码为vivado HLS 在进行testbench测试的时候,利用文件读取的方式获取激励的方法
-----------------------------------代码-------------------------------------------------------------------------
//---------------------------------------------ScalarMult.h--------------------------------------------------
#include
#define W 18
#define N 4
#define _NO_SYNTH_
#ifndef _NO_SYNTH_
typedef int data_t;
typedef int prod_t;
#else
typedef ap_int data_t;
typedef ap_int<2*W> prod_t;
#endif
prod_t ScalarMult(data_t A, data_t B);
//----------------------------------------tb_ScalarMult.cpp--------------------------------------------------
#include
#include
#include
#include "ReadFileVec.h"
#include "WriteFileVec.h"
#include "PrintResult.h"
#include "ScalarMult.h"
using namespace std;
int main()
{
data_t A[N] = {0};
data_t B[N] = {0};
prod_t prod[N] = {0};
int i = 0;
int ErrCnt = 0;
char *fa = "mat_a.txt";
char *fb = "mat_b.txt";
char *fp = "mat_p.txt";
char *fanew = "mat_anew.txt";
ReadFileVec (fa, A);
ReadFileVec (fb, B);
for(i=0; i
{
cout << "current value of A\t" << A[i] << '\n';
cout << "current value of B\t" << B[i] << '\n';
prod[i] = ScalarMult(A[i], B[i]);
cout << "current value of P\t" << prod[i] << '\n';
}
WriteFileVec (fp, prod);
ErrCnt = system("diff -w mat_p.txt refp.txt");
cout << setw(40) << setfill('-') << '-' <<'\n';
cout << ErrCnt; //PrintResult(ErrCnt);
return 0;
}
//----------------------------------------ScalarMult.cpp------------------------------------------------
#include "ScalarMult.h"
prod_t ScalarMult(data_t A, data_t B)
{
prod_t prod;
prod = A * B;
return prod;
}
//--------------------------------------ReadFileVec.h----------------------------------------------------
#include
#include
using std::cerr;
using std::cout;
using std::setw;
using std::setfill;
using std::ifstream;
template
void ReadFileVec(char *fp, Tm OutBuf[N])
{
int i;
int j;
Tv val;
ifstream fp_strmi(fp);
if(!fp_strmi.is_open())
{
cerr << "Error!\nThe file is not able to open!\n";
}
else
{
for(i=0; i
{
fp_strmi >> val;
OutBuf[i] = Tm(val);
}
}
fp_strmi.close();
cout << setw(60) << setfill('-') << '-' << '\n';
cout << "Read file successful!\n";
cout << setw(60) << setfill('-') << '-' << '\n';
}
//-----------------------------------WriteFileVec.h-----------------------------------------------------------
#include
#include
using std::cout;
using std::cerr;
using std::ofstream;
using std::setw;
using std::setfill;
template
void WriteFileVec(char *fp, Tm InBuf[N])
{
int i;
int j;
ofstream fp_strmo(fp);
if(!fp_strmo.is_open())
{
cerr << "Error!\nThe file is not able to open!\n";
}
else
{
for(i=0; i
{
fp_strmo << InBuf[i] << '\n';
}
}
fp_strmo.close();
cout << setw(60) << setfill('-') << '-' << '\n';
cout << "Data has been successfully stored to target file!\n";
cout << setw(60) << setfill('-') << '-' << '\n';
}