VivadoHLS中的定点数、优化指令和线性代数库

10月 30日, 2019 VivadoHLS


1.Vivado HLS

1.1 HLS定点数/P76/

typedef ap_fixed<18,6,AP_RND,AP_SAT> Fix;

1.2 HLS优化指令/P121/

写了一个简单的定点数向量点乘,例子中的向量长度是80。

VecMul.h

#include <ap_fixed.h>
#include <hls_math.h>

typedef ap_fixed<18,6,AP_RND,AP_SAT> Fix;
const int VecLen = 80;

typedef Fix Vec[VecLen];

void VecMul(Vec, Vec, Vec);

VecMul.cpp

#include "VecMul.h"

void VecMul(Vec vecA, Vec vecB, Vec vecOut) {
	VecMul_multiply:for(int i = 0; i < VecLen; i++) {
		vecOut[i] = vecA[i] * vecB[i];
	}
}

testbench.cpp

#include "VecMul.h"
#include <stdlib.h>
using namespace std;

void VecMul_sw(Vec vecA, Vec vecB, Vec vecOut) {
	for(int i = 0; i < VecLen; i++) {
		vecOut[i] = vecA[i] * vecB[i];
	}
}

bool vecEqual(Vec vecA, Vec vecB, int vecLen) {
	bool equal = true;
	for(int i = 0; i < vecLen; i++) {
		if(vecA[i] != vecB[i]) {
			equal = false;
		}
	}
	return equal;
}

int main() {
	int fail = 0;
	Vec vecA, vecB;
	for(int i = 0; i < VecLen; i++) {
		vecA[i] = rand();
		vecB[i] = rand();
	}

	Vec vecOut, vecOut_sw;
	VecMul(vecA, vecB, vecOut);
		cout << "passed" << endl;
	} else {
		cout << "failed" << endl;
	}
}

1.3 HLS的线性代数库/P273/

#include "hls_linear_algebra.h"

2.MWC的思路