静态变量 - 2021.2 Chinese

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2021-12-15
Version
2021.2 Chinese

静态变量用于在循环迭代间保留数据,这通常在导致最终实现时生成寄存器。如果在以流水打拍方式执行的函数中遇到此变量,Vitis HLS 可能无法对设计进行充分最优化,这可能导致启动时间间隔超过所需的时间。

以下是此状况的典型示例:

function_foo()
{
	static bool change = 0
	if (condition_xyz){ 
		change = x; // store 
	}
	y = change; // load
}

如果 Vitis HLS 无法最优化此代码,则存储操作需要 1 个周期,加载操作也需要 1 个周期。如果此函数包含在流水线中,那么流水线必须以最小启动时间间隔 2 来实现,因为静态变更变量会创建循环附带的依赖关系。

用户可通过重写代码来避免此问题,如下例所示。它可确保在循环的每次迭代中仅存在读操作或写操作,这样即可以 II=1 来调度设计。

function_readstream()
{
	static bool change = 0
	bool change_temp = 0;
	if (condition_xyz)
	{ 
		change = x; // store 
		change_temp = x; 
	}
	else
	{ 
	change_temp = change; // load 
	}
	y = change_temp;
}