阵列初始化 - 2021.2 Chinese

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

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

在以下代码中,阵列利用一组值来进行初始化。每次执行函数时,都会为 coeff 阵列分配这些值。综合后,每次执行设计时,用于实现 coeff 的 RAM 都会随这些值一起加载。对于单端口 RAM,此操作耗时 8 个时钟周期。对于 1024 阵列,当然也就需要 1024 个时钟周期,在此期间无法执行任何依赖于 coeff 的运算。


int coeff[8] = {-2, 8, -4, 10, 14, 10, -4, 8, -2};

以下代码使用 static 限定符来定义 coeff 阵列。该阵列开始执行时会使用指定的值进行初始化。每次执行该函数时,coeff 阵列都会保留上次执行的值。静态阵列在 C/C++ 语言代码中的行为与 RTL 中的存储器行为相同。


static int coeff[8] = {-2, 8, -4, 10, 14, 10, -4, 8, -2};

此外,如果变量包含 static 限定符,那么 Vitis HLS 会对 RTL 设计和 FPGA 比特流中的变量进行初始化。因此,无需经历多个时钟周期来初始化存储器,并且可确保大型存储器初始化不会产生任何运算开销。

RTL 配置命令可指定应用复位后,静态变量是否返回其初始状态(非缺省设置)。如果执行复位操作后存储器将返回初始状态,则会导致运算开销,并且需要经历多个周期才能完成值的复位。每个值都必须写入每个存储器地址。