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 |
平方根小数数据 |