如 PL 内核属性 中所述,在 Vitis 环境中,可以将内核定义为软件可控内核或非软件可控内核。这意味着,可以通过软件(例如,主机应用)来控制内核,还可以通过硬件来管理内核并完全由数据驱动内核,也可以通过内核中的启动器逻辑来控制内核。
在软件控制模式下,内核遵循 C 语言语义;在这种语义中,函数应由 main 应用或主机应用“调用”,并在函数完成时“返回”。但是,软件控制的内核包含一个内核子集,此子集中的内核会自动重启并一直运行直至复位。内核的执行和完成取决于接口上的数据可用性,在每次执行内核期间,主机应用不会显式启动和停止内核。而是改为当主机应用启动一次内核后,内核就会按指定的次数运行迭代,或者一直运行直至复位或主机应用显式停止。这种自动重启内核可用于数据驱动的设计,其串流数据往来于 FPGA 的 I/O 管脚(以太网、SerDes)之间,或者在内核与其它内核之间执行往返串流(内核至内核串流)。