昇腾社区首页
中文
注册

接口基本信息

本章节介绍从SRC到DST的通用DMA搬运指令,数据搬运的通用参数说明如下:

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

参数名

说明

取值范围

单位

dst

目的地址

/

/

src

源地址

/

/

sid

预留参数,设置为0即可

/

/

nBurst

搬运数据块个数

[0, 2^12-1]

/

lenBurst

一次连续搬运数据长度

[0, 2^16-1]

详见下表

srcGap

两次搬运源地址间隙

[0, 2^16-1]

详见下表

dstGap

两次搬运目的地址间隙

[0, 2^16-1]

详见下表

padMode

枚举类型,详见下表

[0,8]

/

表2 参数对齐单位对照

源地址

源地址对齐

目的地址

目的地址对齐

lenBurst

srcGap

dstGap

GM

data type aligned

UBUF

32Bytes

lenBurst * 32Bytes

srcGap * 32Bytes

dstGap * 32Bytes

UBUF

32Bytes

GM

data type aligned

lenBurst * 32Bytes

srcGap * 32Bytes

dstGap * 32Bytes

GM

data type aligned

CBUF

32Bytes

lenBurst * 32Bytes

srcGap * 32Bytes

dstGap * 32Bytes

UBUF

32Bytes

UBUF

32Bytes

lenBurst * 32Bytes

srcGap * 32Bytes

dstGap * 32Bytes

CBUF

32Bytes

GM

data type aligned

lenBurst * 32Bytes

srcGap * 32Bytes

dstGap * 32Bytes

说明:

  • 总搬运数据量计算:nBurst * lenBurst * 32Bytes(block大小32Bytes);
  • srcGap/dstGap:表示两次搬运之间的gap,即上一个burst的尾地址跟下一个burst的首地址之间的距离;
表3 填充模式对照

padMode

pad模式描述

0

无padding

1

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

2

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

3

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

4

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

5

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

6

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

7

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

8

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

说明:

padMode等于0,表示无padding,当不等于0时,padMode设置通过set_padding(config)完成数据padding:

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;