昇腾社区首页
中文
注册
开发者
下载

copy_gm_to_cbuf

功能说明

从GM读取数据写入到L1中,并对数据做填补。

接口原型

void copy_gm_to_cbuf(__cbuf__ void *dst, __gm__ void *src, uint8_t sid, uint16_t nBurst, uint16_t lenBurst, uint16_t srcGap, uint16_t dstGap, pad_t padMode);

参数说明

参数含义见表1 通用搬运指令参数说明

padMode说明:

padMode等于0,表示无padding,当不等于0时,padMode设置通过set_padding(config)完成数据padding。padMode详见表1 填充模式对照

void set_padding(uint64_t config); 
  • config[63:32]默认为0;
  • 对于b32 padding data,config[31:0]生效;
  • 对于b16 padding data,只需设置config[15:0],其余bit设置为0;
  • 对于b8 padding data,需要将config[15:8]和config[7:0]设置为padding data,其余bit设置为0;
  • 对于b4 padding data,需要将config[15:12]、config[11:8]、config[7:4]、config[3:0]设置为padding data,其余bit设置为0;
表1 填充模式对照

padMode枚举名

padMode枚举值

pad模式描述

PAD_NONE

0

无padding

PAD_MODE1

1

  • lenBurst必须设置为1(单位32Bytes),实际只从GM搬运1Bytes到L1,然后在其后插入31个config[7:0](set_padding参数)合计31Bytes的数据写入CBUF;
  • srcGap必须设置为0,表示每次burst搬运是从GM上连续读取;
  • dstGap单位不变,仍是32Bytes。

PAD_MODE2

2

  • lenBurst必须设置为1(单位32Bytes),实际只从GM搬运2Bytes到L1,然后在其后插入15个config[31:16] (set_padding参数)合计30Bytes的数据写入CBUF
  • srcGap必须设置为0,表示每次burst搬运是从GM上连续读取;
  • dstGap单位不变,仍是32Bytes。

PAD_MODE3

3

  • lenBurst必须设置为1(单位32Bytes),实际只从GM搬运4Bytes到L1,然后在其后插入14个config[31:16](set_padding参数)合计28Bytes的数据写入CBUF
  • srcGap必须设置为0,表示每次burst搬运是从GM上连续读取;
  • dstGap单位不变,仍是32Bytes。

PAD_MODE4

4

  • lenBurst必须设置为1(单位32Bytes),实际只从GM搬运8Bytes到L1,然后在其后插入12个config[31:16](set_padding参数)合计24Bytes的数据写入CBUF
  • srcGap必须设置为0,表示每次burst搬运是从GM上连续读取;
  • dstGap单位不变,仍是32Bytes。

PAD_MODE5

5

  • lenBurst必须设置为1(单位32Bytes),实际只从GM搬运16Bytes到L1,然后在其后插入8个config[31:16](set_padding参数)合计16Bytes的数据写入CBUF
  • srcGap必须设置为0,表示每次burst搬运是从GM上连续读取;
  • dstGap单位不变,仍是32Bytes。

PAD_MODE6

6

  • 从每个搬运的32Bytes中去除高位的28Bytes,只保留4Bytes,所以从GM读取的lenBurst * 32Bytes长度的数据然后搬到L1上的是lenBurst * 4Bytes;
  • CBUF上每个burst连续存储,所以dstGap必须设置为0;
  • srcGap单位仍是32Bytes。

PAD_MODE7

7

  • 从每个搬运的32Bytes中去除高位的24Bytes,只保留8Bytes,所以从GM读取的lenBurst * 32Bytes长度的数据然后搬到L1上的是lenBurst * 8Bytes;
  • CBUF上每个bust连续存储,所以dstGap必须设置为0;
  • srcGap单位仍是32Bytes。

PAD_MODE8

8

  • 从每个搬运的32Bytes中去除高位的16Bytes,只保留16Bytes,所以从GM读取的lenBurst * 32Bytes长度的数据然后搬到L1上的是lenBurst * 16Bytes;
  • CBUF上每个bust连续存储,所以dstGap必须设置为0;
  • srcGap单位仍是32Bytes。

流水类型

PIPE_MTE2