初始化行为 - 2021.2 Chinese

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

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

在 C/C++ 中,默认情况下,以静态限定符定义的变量和全局作用域中定义的变量都初始化为 0。(可选)对于这些变量,可赋予特定初始值。对于这些已初始化的变量,C/C++ 语言代码中的值在编译时(时序为 0 时)进行赋值,并且不再进行赋值。上述 2 种情况下,在 RTL 中实现初始值。

  • 在 RTL 仿真期间,为这些变量设置的初始值与 C/C++ 语言代码中相同。
  • 在用于对 FPGA 进行编程的比特流中,也会对这些变量进行初始化。当器件上电时,变量将以其初始状态启动。

在 RTL 中,虽然变量启动时使用的初始值与 C/C++ 语言代码相同,但无法强制该变量返回至此初始状态。要复原初始状态,必须通过复位信号来实现这些信号变量。

重要: 顶层函数实参可在 AXI4-Lite 接口内实现。由于在 C/C++ 中无法为函数实参提供初始值,因此在 RTL 中无法对这些变量进行初始化,否则由此创建的 RTL 设计将与 C/C++ 代码产生不同的功能行为,从而导致在 C/RTL 协同仿真期间验证失败。