20. 循环冗余校验器 (CRC)

20.1. 概述

SWM221系列所有型号CRC模块操作均相同,主要应用于核实数据传输或者数据存储的正确性和完整性,使用前需使能CRC模块时钟。

CRC模块分为CRC-32和CRC-16两个算法。使用CRC-32多项式进行计算时,输入数据有效位宽可选择为32Bit、16Bit、8Bit,使用CRC-16多项式进行计算时,输入数据有效位宽可选择16Bit、8Bit。

20.2. 特性

  • 支持CRC-32码多项式

    • x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1

  • 支持CRC-16码多项式

    • x16 + x12 + x5 + 1

    • x16 + x15 + x2 + 1

  • 支持CRC-8码多项式

    • x8 + x2 + x + 1

  • 支持输出结果设置,包括翻转、取反

  • 支持初始值自定义

  • 支持输入可选择取反

20.3. 功能描述

20.3.1. 模块结构

CRC循环冗余检验结构如 图 86 所示:

../../_images/%E7%BB%93%E6%9E%84%E6%A1%86%E5%9B%BE1.svg

图 86 CRC结构框图

20.3.1.1. 功能描述

20.3.2. 计算步骤

  • 根据需求,通过CR寄存器选择CRC算法、输入数据有效位宽、输出结果

  • 根据需求,通过INIVAL寄存器设置CRC初始值

  • 通过CR寄存器使能CRC计算

  • 通过DATAIN寄存器向CRC计算单元输入要计算的数据

  • 通过RESULT寄存器读取计算结果

20.3.3. 计算步骤

  • 根据需求,通过CR寄存器选择CRC算法、输入数据有效位宽、输出结果

  • 根据需求,通过INIVAL寄存器设置CRC初始值

  • 通过CR寄存器使能CRC计算

  • 通过DATAIN寄存器向CRC计算单元输入要计算的数据

  • 通过RESULT寄存器读取计算结果

20.4. 寄存器映射

名称

偏移

复位值

CRC BASE:0x40002800

CR

0x00

0x00000000

DATAIN

0x04

0x00000000

INIVAL

0x08

0x00000000

RESULT

0x0C

0x00000000

20.5. 寄存器描述

20.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

IBIT

POLY

7

6

5

4

3

2

1

0

POLY

ONOT

OREV

INOT

IREV

EN

位域

名称

类型

描述

31:11

R/W

10:9

IBIT

R/W

CRC输入数据有效位数寄存器

00:32位输入数据有效

01:低16位输入数据有效

10:低8位输入数据有效

11:保留

8:7

POLY

R/W

CRC算法选择寄存器

00:x16 + x12 + x5 + 1

01:x8 + x2 + x + 1

10:x16 + x15 + x2 + 1

11:x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1

6

ONOT

R/W

输出结果是否取反寄存器

1:输出结果取反

0:输出结果不需要取反

5:4

OREV

R/W

输出结果是否翻转寄存器

00:bit顺序不变

01:bit顺序完全翻转(32位数据宽度31:0 -> 0:31;16位数据宽度15:0 -> 0:15;8位数据宽度7:0 -> 0:7)

10:bit顺序在字节范围内翻转(32位数据宽度 31:0 -> 24:31, 16:23, 8:15, 0:7;16位数据宽度15:0 -> 8:15, 0:7;8位数据宽度同01

11:仅字节顺序翻转(32位数据宽度 31:0 -> 7:0,15:8,23:16,31:24;16位数据宽度15:0 -> 7:0,15:8;8位数据宽度同00)

3

INOT

R/W

输入数据是否取反

1:输入数据取反

0:输入数据不取反

2:1

IREV

R/W

输入数据是否翻转。

00:bit顺序不变

01:bit顺序完全翻转(32位数据宽度31:0 -> 0:31;16位数据宽度15:0 -> 0:15;8位数据宽度7:0 -> 0:7)

10:bit顺序在字节范围内翻转(32位数据宽度 31:0 -> 24:31, 16:23, 8:15, 0:7;16位数据宽度15:0 -> 8:15, 0:7;8位数据宽度同01

11:仅字节顺序翻转(32位数据宽度 31:0 -> 7:0,15:8,23:16,31:24;16位数据宽度15:0 -> 7:0,15:8;8位数据宽度同00)

0

EN

R/W

CRC使能控制位

1:CRC使能

0:CRC禁能

20.5.2. 数据输入寄存器DATAIN

偏移: 0x04

复位值: 0x00000000

31

30

29

28

27

26

25

24

DATAIN

23

22

21

20

19

18

17

16

DATAIN

15

14

13

12

11

10

9

8

DATAIN

7

6

5

4

3

2

1

0

DATAIN

位域

名称

类型

描述

31:0

DATAIN

WO

CRC数据输入寄存器,有效位根据CR寄存器IBIT位选择

20.5.3. 初始值设置寄存器INIVAL

偏移: 0x08

复位值: 0x00000000

31

30

29

28

27

26

25

24

INIVAL

23

22

21

20

19

18

17

16

INIVAL

15

14

13

12

11

10

9

8

INIVAL

7

6

5

4

3

2

1

0

INIVAL

位域

名称

类型

描述

31:0

INIVAL

R/W

CRC初始值寄存器

20.5.4. 结果输出寄存器RESULT

偏移: 0x0C

复位值: 0x00000000

31

30

29

28

27

26

25

24

RESULT

23

22

21

20

19

18

17

16

RESULT

15

14

13

12

11

10

9

8

RESULT

7

6

5

4

3

2

1

0

位域

名称

类型

描述

31:0

RESULT

R/W

CRC结果输出寄存器,有效位根据CR寄存器POLY位选择

当POLY为:

00:低16位有效

01:低8位有效

10:低16位有效

11:32位有效