调度和绑定示例 - 2023.2 简体中文

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

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 简体中文

下图显示了此代码示例的调度和绑定阶段的示例:

int foo(char x, char a, char b, char c) {
 char y;
 y = x*a+b+c;
 return y;
}
图 1. 调度和绑定示例

在此示例的调度阶段,根据高层次综合的调度,在每个时钟周期内将执行以下操作:

  • 第一个时钟周期:乘法和第一次加法
  • 第二个时钟周期:如果在第二个时钟周期内第一次加法的结果可用,则执行第二次加法并输出生成
注释: 在上图中,第一个和第二个时钟周期之间的方块指示内部寄存器存储变量的时间。在此示例中,高层次综合仅要求在一个时钟周期内寄存加法的输出。第一个周期读取 xab 数据端口。第二个周期读取数据端口 c 并生成输出 y

在最终的硬件实现中,高层次综合将顶层函数的实参实现为输入和输出 (I/O) 端口。在此示例中,实参是简单数据端口。因为每个输入变量都是 char 类型,所以输入数据端口位宽均为 8 位。return 函数为 32 位 int 数据类型,而输出数据端口位宽为 32 位。

重要: 在硬件中实现 C 语言代码的优点是所有运算都在更少的时钟周期内完成。在此示例中,完成运算仅需 2 个时钟周期。在中央处理器 (CPU) 中,即使这个简单的代码示例也需要更多时钟周期才能完成。

在此示例的初始绑定阶段,高层次综合使用组合乘法器 (Mul) 实现乘法运算,并使用组合加法器/减法器 (AddSub) 实现两次加法运算。

在目标绑定阶段,高层次综合使用 DSP 模块资源实现乘法器和其中一项加法运算。部分应用使用大量二进制乘法器和累加器,这些乘法器和累加器最好在专用 DSP 资源内实现。DSP 模块是 FPGA 架构中可用的计算块,可在高性能和高效实现之间达成理想的平衡。