21. 除法器 (DIV)

21.1. 概述

在需要高精度计算的应用,硬件除法器能加快除法运算,提高系统效率。SWM221系列所有型号除法器模块操作均相同。使用前需使能除法器模块时钟。

21.2. 特性

  • 支持32位整数除法运算及求余运算

  • 支持32位开方运算,支持小数位

  • 除法单次运算耗时8个时钟,不包括读写寄存器时间

  • 开方单次运算耗时16/32个时钟,不包括读写寄存器时间

  • 开方可选择两种模式

    • 只取整数(16位)

    • 包含小数(16+16位)

  • 运算启动自动清除运算使能查询

  • 提供运算进行标志和完成标志

  • 支持有符号数和无符号数运算

21.3. 功能描述

21.3.1. 商/余数计算

使用除法器模块计算商/余数流程如下:

  • 配置 DIVIDEND 寄存器和 DIVISOR 寄存器

  • 配置 CR 寄存器。选择有符号数或无符号数,DIVGO 启动运算

  • 读取 SR 寄存器,查看运算进程

    • DIVBUSY:运算标志

    • DIVEND:运算完成标志

  • 读取 QUO 寄存器及余数寄存器 REMAIN

注意

  • 当除数为 0 时,商数为全 1,余数为被除数;当被除数为 0,商数为全 0,余数为 0

  • 计算过程中,不可更改除数及被除数

  • 如果除数为 0,商数为全 1,余数为被除数

  • 如果被除数为 0,商数为全 0,余数为 0

21.3.2. 开方计算

使用除法器模块计算开方流程如下:

  • 配置 RADICAND 寄存器;

  • 配置 CR 寄存器;ROOTMOD:运算模式;ROOTGO:启动运算;

  • 读取 SR 寄存器;ROOTBUSY:开方运算标志;ROOTENDI:开方整数运算完成标志;ROOTENDF:开方小数运算完成标志;

  • 读取 ROOT 寄存器;

注意

当选择只计算整数时, ROOT寄存器低16位仍保存最后一次的小数计算结果。

重要

计算过程中,不可更改被开方数。

21.4. 寄存器映射

名称

偏移

复位值

DIV BASE:0x40003000

CR

0x00

0x00000000

SR

0x04

0x00000000

IE

0x08

0x00000000

DIVIDEND

0x10

0x00000000

DIVISOR

0x14

0x00000000

QUO

0x18

0x00000000

REMAIN

0x1C

0x00000000

RADICAND

0x20

0x00000000

ROOT

0x24

0x00000000

21.5. 寄存器描述

21.5.1. 控制寄存器CR

偏移: 0x00

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

ROOTMOD

ROOTGO

7

6

5

4

3

2

1

0

DIVSIGN

DIVGO

位域

名称

类型

描述

31:10

RO

9

ROOTMOD

R/W

开方运算模式

0:开方运算结果只保留16位整数;

1:开方运算结果保留16位整数+16位小数;

8

ROOTGO

R/W

开方运算启动信号

1:启动

0:停止

运算完成后硬件会自动清零。

7:2

1

DIVSIGN

R/W

0:表示有符号数

1:表示无符号数

注:当为有符号数时,数据的最高位(31bit)表示符号,有效数据为31位

当为无符号数时,32bit数据都是有效数据

0

DIVGO

R/W

除法运算启动信号

1:启动

0:停止

运算完成后硬件会自动清零。

21.5.2. 状态寄存器SR

偏移: 0x04

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

ROOTBUSY

ROOTENDF

ROOTENDI

7

6

5

4

3

2

1

0

DIVBUSY

DIVEND

位域

名称

类型

描述

31:11

RO

10

ROOTBUSY

R/W

开方运算过程标志。

1:运算中

0:运算完成

RO

运算完成后硬件自动清零。

9

ROOTENDF

R/W

开方小数运算完成标志。

1:运算完成

0:运算未完成

写1清除。

8

ROOTENDI

R/W

开方整数运算完成标志。

1:运算完成

0:运算未完成

写1清除。

7:2

R/W

1

DIVBUSY

R/W

除法运算过程标志。

1:运算中

0:运算完成

RO

运算完成后硬件自动清零

0

DIVEND

R/W

除法运算完成标志。

1:运算完成

0:运算未完成

写1清除。

21.5.3. 中断使能寄存器IE

偏移: 0x08

复位值: 0x00000000

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

DONE

位域

名称

类型

描述

31:1

RO

0

DONE

R/W

运算完成中断使能位

1:使能

0:不使能

21.5.4. 被除数寄存器DIVIDEND

偏移: 0x10

复位值: 0x00000000

31

30

29

28

27

26

25

24

DIVIDEND

23

22

21

20

19

18

17

16

DIVIDEND

15

14

13

12

11

10

9

8

DIVIDEND

7

6

5

4

3

2

1

0

DIVIDEND

位域

名称

类型

描述

31:0

DIVIDEND

R/W

被除数

21.5.5. 除数寄存器DIVISOR

偏移: 0x14

复位值: 0x00000000

31

30

29

28

27

26

25

24

DIVISOR

23

22

21

20

19

18

17

16

DIVISOR

15

14

13

12

11

10

9

8

DIVISOR

7

6

5

4

3

2

1

0

DIVISOR

位域

名称

类型

描述

31:0

DIVISOR

R/W

除数

21.5.6. 商寄存器QUO

偏移: 0x18

复位值: 0x00000000

31

30

29

28

27

26

25

24

QUO

23

22

21

20

19

18

17

16

QUO

15

14

13

12

11

10

9

8

QUO

7

6

5

4

3

2

1

0

QUO

位域

名称

类型

描述

31:0

QUO

R/W

商数

21.5.7. 余数寄存器REMAIN

偏移: 0x1C

复位值: 0x00000000

31

30

29

28

27

26

25

24

REMAIN

23

22

21

20

19

18

17

16

REMAIN

15

14

13

12

11

10

9

8

REMAIN

7

6

5

4

3

2

1

0

REMAIN

位域

名称

类型

描述

31:0

REMAIN

R/W

余数

21.5.8. 平方数据寄存器RADICAND

偏移: 0x20

复位值: 0x00000000

31

30

29

28

27

26

25

24

RADICAND

23

22

21

20

19

18

17

16

RADICAND

15

14

13

12

11

10

9

8

RADICAND

7

6

5

4

3

2

1

0

RADICAND

位域

名称

类型

描述

31:0

RADICAND

R/W

平方数据

21.5.9. 平方根寄存器ROOT

偏移: 0x24

复位值: 0x00000000

31

30

29

28

27

26

25

24

ROOTI

23

22

21

20

19

18

17

16

ROOTI

15

14

13

12

11

10

9

8

ROOTF

7

6

5

4

3

2

1

0

ROOTF

位域

名称

类型

描述

31:16

ROOTI

R/W

平方根整数数据

15:0

ROOTF

R/W

平方根小数数据