取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
pareo
Visitor
Visitor
267 次查看
注册日期: ‎09-08-2020

HLS的while循环以及SDK协同的问题

跳至解决方案

您好,感谢您看到这个问题。

以下是我的HLS代码

void test (uint64_t *data_p, int32_t signal_p[2]){
#pragma HLS INTERFACE s_axilite port=return bundle=ctrl
#pragma HLS INTERFACE s_axilite register port=signal_p bundle=signal
#pragma HLS INTERFACE m_axi depth=3000 port=data_p offset=slave bundle=data

	uint64_t temp2[N] = {0};

	while(signal_p[0] == 0){  //在SDK中设置signal_p[0]的初始值为0,进入该循环
		loop1:
		for (size_t i = 0; i < N; i++){
#pragma HLS PIPELINE
			*data_p = i + 15;     //对data_p的前N个数赋值
			data_p++;
		}
		signal_p[0] = 1;  //完成数据计算后修改signal_p[0]
		break;
	}

	while (signal_p[0] == 1){  //由上一步可得,进入该循环
		if (signal_p[1] == 0){ //经过SDK的一些计算完成后,在SDK上设置使得signal_p[1]为0
		    break;             
		}
	}

	signal_p[1] = 3;   //break后修改signal_p[1]

	loop2:            //剩下的是后续计算
		for (size_t i = 0; i < N; i++){
#pragma HLS PIPELINE
			temp2[i] = (*data_p);
			data_p++;
		}


	loop3:
	for (size_t i = 0; i < N; i++){
#pragma HLS PIPELINE
		temp2[i] = temp2[i] * 2 + 251;
		*data_p = temp2[i];    
		data_p++;
	}
}

我的问题是:进入第二个while循环后,在SDK端修改signal_p[1] = 0,这时应当通过if语句的break,跳出循环。然而实际上并没有跳出循环进行下一步。在SDK读signal_p[1]的时候可以看到确实把signal_p[1]修改为0。请问这是怎么回事呢?

0 项奖励
1 解答

已接受的解答
yangc
Xilinx Employee
Xilinx Employee
201 次查看
注册日期: ‎02-28-2019

HLS的IP是给定了一个参数,然后执行一次任务,直至任务完成,然后再接受下一次的参数,再执行,而不是类似的实时性操作。

-------------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------

在原帖中查看解决方案

2 回复数
yangc
Xilinx Employee
Xilinx Employee
202 次查看
注册日期: ‎02-28-2019

HLS的IP是给定了一个参数,然后执行一次任务,直至任务完成,然后再接受下一次的参数,再执行,而不是类似的实时性操作。

-------------------------------------------------------------------------
Don't forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------

在原帖中查看解决方案

pareo
Visitor
Visitor
185 次查看
注册日期: ‎09-08-2020

好的,我明白啦。谢谢您的回答

0 项奖励