标准类型 - 2023.2 简体中文

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

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

以下代码示例显示了所执行的部分基本算术运算。


#include "types_standard.h"

void types_standard(din_A  inA, din_B  inB, din_C  inC, din_D  inD,
 dout_1 *out1, dout_2 *out2, dout_3 *out3, dout_4 *out4
) {

 // Basic arithmetic operations
 *out1 = inA * inB;
 *out2 = inB + inA;
 *out3 = inC / inA;
 *out4 = inD % inA;

} 

以上示例中的数据类型是在 types_standard.h 头文件中定义的,如下代码示例所示。其中显示了以下类型的使用方式:

  • 标准有符号类型
  • 无符号类型
  • 精确宽度的整数类型(包含 stdint.h 头文件)
    
    #include <stdio.h>
    #include <stdint.h>
    
    #define N 9
    
    typedef char din_A;
    typedef short din_B;
    typedef int din_C;
    typedef long long din_D;
    
    typedef int dout_1;
    typedef unsigned char dout_2;
    typedef int32_t dout_3;
    typedef int64_t dout_4;
    
    void types_standard(din_A inA,din_B inB,din_C inC,din_D inD,dout_1 
    
    *out1,dout_2 *out2,dout_3 *out3,dout_4 *out4);
    

这些不同类型经过综合可生成以下运算符和端口大小:

  • 用于计算结果 out1 的乘法器为 24 位乘法器。8 位 char 类型乘以 16 位 short 类型需要 24 位乘法器。结果是符号位将扩展为 32 位,以与输出端口宽度匹配。
  • 用于 out2 的加法器为 8 位。由于输出为 8 位 unsigned char 类型,因此仅将底部 8 位 inB(16 位 short)与 8 位 char 类型的 inA 相加。
  • 对于 out3 输出(32 位精确宽度类型),8 位 char 类型的 inA 的符号位将扩展为 32 位值,并使用 32 位(int 类型)inC 输入执行 32 位除法运算。
  • 使用 64 位 long long 类型的 inD 来执行 64 位模数运算,8 位 char 类型的 inA 的符号位将扩展至 64 位,以创建 64 位输出 out4 的结果。

根据 out1 结果指示,Vitis HLS 使用可用的最小运算符,并扩展结果以与所需输出位宽相匹配。对于 out2 结果,即使其中一项输入为 16 位,仍可使用 8 位加法器,因为只需 8 位输出。正如 out3out4 的结果所示,如需所有位元,则将对完整大小的运算符进行综合。