hls 宏 __SYNTHESIS__

系统调用

系统调用无法综合, 因为系统调用操作与在运行 C 程序的操作系统上执行的某些任务有关。
Vivado® HLS 会忽略仅显示数据而对算法执行没有影响的常用系统调用, 如 printf() 和 fprintf(stdout,)。一般情况下, 系统调用无法综合, 应在综合前从函数中移除。其它此类调用示例包括 getc()、 time() 和 sleep(),
这些操作都会对操作系统执行调用。
Vivado HLS 会在执行综合时定义 SYNTHESIS 宏。这样 SYNTHESIS 宏即可从设计中排除不可综合的代
码。
注释: SYNTHESIS 宏仅限在要综合的代码中使用。请勿在测试激励文件中使用该宏, 因为 C 语言仿真或 C RTL
协同仿真不会遵循其指示进行操作。

注意! 您不得在代码中或者通过编译器选项来定义或取消定义 SYNTHESIS 宏, 否则编译可能失败。

在以下代码示例中, 来自子函数的中间结果将保存到硬盘上。 SYNTHESIS 宏用于确保综合期间忽略不可综合的
文件写入。

#include "hier_func4.h"
int sumsub_func(din_t *in1, din_t *in2, dint_t *outSum, dint_t *outSub)
{
*outSum = *in1 + *in2;
*outSub = *in1 - *in2;
}
int shift_func(dint_t *in1, dint_t *in2, dout_t *outA, dout_t *outB)
{
*outA = *in1 >> 1;
*outB = *in2 >> 2;
}
void hier_func4(din_t A, din_t B, dout_t *C, dout_t *D)
{
	dint_t apb, amb;
	sumsub_func(&A,&B,&apb,&amb);
	#ifndef __SYNTHESIS__
	FILE *fp1; // The following code is ignored for synthesis
	char filename[255];
	sprintf(filename,Out_apb_%03d.dat,apb);
	fp1=fopen(filename,w);
	fprintf(fp1, %d \n, apb);
	fclose(fp1);
	#endif
	shift_func(&apb,&amb,C,D);
}

使用 SYNTHESIS 宏即可轻松排除不可综合的代码, 而无需从 C 语言函数中移除代码本身。使用此类宏并不意味
着用于仿真的 C 语言代码与用于综合的 C 语言代码当前存在差异。
注意! 如果使用 SYNTHESIS 宏来更改 C 语言代码的功能, 那么它可能导致 C 语言仿真与 C 语言综合之间出现
不同结果。此类代码中的错误本身非常难以调试。请勿使用 SYNTHESIS 宏来更改功能。

你可能感兴趣的:(HLS)