eFuse

简介

eFuse(电子熔丝)用于支持芯片的动态实时重编程。它还可作为一次性可编程 ROM,用于存储其他数据,例如 AES 密钥和 SRAM BISR(内置自修复)数据。

主要特性

eFuse 的主要特性如下:

  • 6.5 Kib 用于通用数据。

  • 384 位用于 SRAM BISR 数据。

  • 768 位用于密钥存储。

  • 128 位用于 eFuse 数据块控制标志。

  • 128 位用于修复坏点像素(最多支持 8 个)。

功能描述

功能描述

eFuse 中的参数仅可编程一次,一旦完成编程,再次尝试重新编程将不会成功。

电源域:

  • 1.1 V(常开)

  • 2.5 V(编程模式下激活)

通用数据:Boot ROM、用户数据等。

系统数据:Boot ROM、UUID、Track ID 等。

eFuse 数据映射

表 3.1: SMIC40 工艺下 eFuse 的数据映射

大小

属性

描述

地址范围

6.5 kib

RW/RO

通用数据

0x0 ~ 0x33f

384 b

RW/RO

512 位 SRAM BISR 数据

0x340 ~ 0x36f

128 b

RW/RO

128 位硬连线寄存器

0x370 ~ 0x37f

128 b

RW/X

128 位密钥 key5

0x380 ~ 0x38f

128 b

RW/X

128 位密钥 key4

0x390 ~ 0x39f

128 b

RW/X

128 位密钥 key3

0x3a0 ~ 0x3af

128 b

RW/X

128 位密钥 key2

0x3b0 ~ 0x3bf

128 b

RW/X

128 位密钥 key1

0x3c0 ~ 0x3cf

128 b

RW/X

128 位密钥 key0

0x3d0 ~ 0x3df

128 b

RW/RO

128 位数据块控制标志

0x3e0 ~ 0x3ef

128 b

RW/RO

128 位 BISR 标志

0x3f0 ~ 0x3ff

参数说明

通用数据(6.5 kib)

ROM 代码
  1. 当芯片的 Boot ROM 出现问题时,程序可跳转至此处开始执行。

  2. 用于特殊启动模式。

  3. 存储其他用户自定义信息,例如 Linux 设备树(DTB)描述。

该区域在受保护前可读写,受保护后变为只读。

系统数据

芯片的唯一 ID 用于记录芯片信息,包括芯片的生产时间、版本、在晶圆上的 X 坐标和 Y 坐标,以及封装厂、晶圆代工厂、供应商等信息。芯片的 JEDEC ID 也存储在此处。此外,ROM 的一些配置位也存放于此。

如果该芯片需要支持以太网或 Wi-Fi 功能,则芯片的 MAC 地址也应存储在此区域。此外,还可在此存储更多与系统相关的信息。实际上,该区域与 ROM 代码可以位于同一存储区域。

该区域在受保护前可读写,受保护后变为只读。

SRAM BISR 数据(384位)

SRAM 的 BIST 修复控制器。可通过总线访问,且每条位线均引出至顶层。

该区域在受保护前可读写,受保护后变为只读。

硬连线寄存器(128位)

用于其他模块的参数配置。可通过总线访问,且每位的信号线均引出至顶层。

该区域在受保护前可读写,受保护后变为只读。

密钥(6 × 128 位)

用于安全模块的六组密钥,可用于 AES/SM4 等加密算法。

若需使用 RSA/SM2/ECC 等公钥加密算法,则此密钥不适用,需使用另一个独立的 8 KiB eFuse 块来实现。

该区域在受保护前可读写,受保护后不可读写。

它读取无效数据(全为 1)。在可读写状态下,可通过总线访问,且每位的信号线均引出至顶层。

数据块控制标志(128 位)

在 eFuse 中,参数被划分为 128 个数据块,每个数据块对应数据块控制标志中的 1 位,用于指示该参数是否处于编程保护状态。完成保护位的编程后,需执行一次重载(reload)或复位(reset)操作,保护位才能生效。只要数据块控制标志中的某一位被置为 1,对应的 eFuse 数据块状态即变为只读。该区域主要用于对 eFuse 各个区域的写保护控制,其控制范围的详细说明如下。

表 3.2: eFuse 数据块控制标志

大小

属性

描述

1 位 × 104

RW/RO

每一位保护 ROM 代码和系统数据中的 64 位数据块。

1 位

RW/RO

保护 SRAM BIST 修复数据

1 位

RW/RO

保护硬连线寄存器 [7:0]

1 位

RW/RO

保护硬连线寄存器 [15:8]

1 位

RW/RO

保护硬连线寄存器 [23:16]

1 位

RW/RO

保护硬连线寄存器 [31:24]

1 位

RW/RO

保护硬连线寄存器 [39:32]

1 位

RW/RO

保护硬连线寄存器 [47:40]

1 位

RW/RO

保护硬连线寄存器 [55:48]

1 位

RW/RO

保护硬连线寄存器 [63:56]

1 位

RW/RO

保护硬连线寄存器块 [79:64]

1 位

RW/RO

保护硬连线寄存器块 [95:80]

1 位

RW/RO

保护硬连线寄存器块 [111:96]

1 位

RW/RO

保护硬连线寄存器块 [127:112]

1 位

RW/RO

保护 密钥5

1 位

RW/RO

保护 密钥4

1 位

RW/RO

保护 密钥3

1 位

RW/RO

保护 密钥2

1 位

RW/RO

保护 密钥1

1 位

RW/RO

保护 密钥0

1 位

RW/RO

保护数据块控制标志

ROM 代码 / 用户数据和系统数据共使用了 104 位。

以下是保护位的映射关系。

表 3.3: eFuse 保护位映射

偏移量

说明

1 位 × N

保护数据[64 - 1 + 16 * N:16 * N], 0 <= N <= 111

BISR 标志(128 位)

128 位 LUT 表结构用于校正 eFuse 坏点像素。

BISR LUT 表
表 3.4: eFuse 的 BISR LUT 表

大小

属性

描述

16 位

RW/RO

BISR LUT 项

16 位

RW/RO

BISR LUT 项

16 位

RW/RO

BISR LUT 项

16 位

RW/RO

BISR LUT 项

16 位

RW/RO

BISR LUT 项

16 位

RW/RO

BISR LUT 项

16 位

RW/RO

BISR LUT 项

16 位

RW/RO

BISR LUT 项

BISR LUT 项
表 3.5: eFuse 的 BISR LUT 项表

位数

属性

描述

1 位

RW/RO

使用标志

1 位

RW/X

替换位

14 位

RW/X

用于修复的 LUT 地址

Note

ADDR[9:0] 为字节地址,ADDR[12:10] 为位地址,ADDR[13] 未使用。

Note

在使用标志被写入之前,使用标志为可读写,替换位为可读写,LUT 地址也为可读写。在使用标志被写入之后,替换位和 LUT 地址将无法读取,仅能返回使用标志的值。

Note

在使用标志位编程完成后,需执行重载或复位操作,BISR 功能才能生效。

eFuse BISR 修复流程

芯片生产完成后,可能会存在坏点像素,最多可通过 BISR 标志校正 8 个坏点像素。

BISR 标志被划分为 8 个 16 位的修复块。

每个修复块包含一个1位使用标志(用于指示对应位的校正状态),一个1位替换位(对应该位的校正值),和一个14位 LUT 地址(对应该位的访问地址)。

具体的校正流程如下:

首先,将 eFuse 设置为读取模式。软件遍历 eFuse 中的所有位。正常情况下,所有位均为 0。

如果发现某位不为 0,则表示存在错误。此时需要将该错误位的地址记录到 LUT 地址中,并用替换位进行替换。

如果某个 LUT 项本身存在缺陷(例如替换位、地址或使用标志恰好出现坏点),则使用优先级更高的下一个 LUT 项。

校正完成后,需将对应的使用标志置为 1。该设计最多可修复 8 个坏点像素。

Note

  • 高地址的优先级高于低地址。

  • 当这 8 个块的使用标志值全部被置为 1 时,eFuse 参数块的状态将变为可烧写。

  • 在设置使用标志之后,替换位和 LUT 地址将不可读写,使用标志变为只读,其余位则变为无效数据(例如,所有位的值均与使用标志相同)。此时,替换位仅在参数块被读写时才能被读写。

在访问参数块时,首先检查 BISR LUT 表。如果表中存在对应参数块中某一位的访问地址,则该位将被替换为对应的替换位,而参数块中原先对应的位将被丢弃。

如果检查中未发现坏点像素,则必须将所有使用标志置为 1,并替换为默认地址。

如果替换位中存在缺陷像素,则该块被视为无效。

如果参数块中的缺陷点数量大于修复块中有效的替换位数量,则该芯片将被视为报废。

如果优先级最高的 LUT 项的替换位存在缺陷,则该芯片被视为报废。

编程时序

eFuse 的编程时序图如下图所示。

编程模式下的时序要求如下表。

表 3.6: eFuse 编程时序要求表

参数

符号

最小值

典型值

最大值

单位

编程时间

Tpgm

9000

10000

11000

ns

地址使能周期时间

Taen

Tpgm + 1900

—

—

ns

地址到 AEN 的建立时间

Tsp_a

50

—

—

ns

AEN 之后的地址保持时间

Thp_a

50

—

—

ns

PGMEN 信号到 AEN 的建立时间

Tsp_pgm

100

—

—

ns

AEN 到 PGMEN 信号的保持时间

Thp_pgm

100

—

—

ns

RDEN 信号到 AVDD 的建立时间

Tsp_rd

150

—

—

ns

AVDD 到 RDEN 信号的保持时间

Thp_rd

150

—

—

ns

AVDD 到 PGMEN 的建立时间

Tsp_pg_avdd

1000

—

—

ns

PGMEN 到 AVDD 的保持时间

Thp_pg_avdd

1000

—

—

ns

Note

  • DVDD < AVDD ≤ 2.75 V 的持续时间必须小于 1 秒。

  • AVDD 不得超过 2.75 V,否则将引发可靠性问题。

读取时序

eFuse 的读取时序图如下图所示。

读取模式下的时序要求如下表。

表 3.7: eFuse 读取时序要求表

参数

符号

最小值

典型值

最大值

单位

读取时间

Trd

40

—

—

ns

地址使能周期时间

Taen

Trd + 1900

—

—

ns

地址到 AEN 的建立时间

Tsr_a

10

—

—

ns

AEN 到地址保持时间

Thr_a

10

—

—

ns

DVDD 到 RDEN 的建立时间

Tsr_dvdd

150

—

—

ns

RDEN 到 DVDD 的保持时间

Thr_dvdd

150

—

—

ns

RDEN 信号到 AEN 的建立时间

Tsr_rd

100

—

—

ns

无负载时的输出数据稳定时间

Tsq

—

—

45

ns

输出数据保持时间

Tsq_h

0

—

—

ns

AEN 到 RDEN 信号的保持时间

Thr_rd

100

—

—

ns

Note

  • Trd 的值必须大于 Tsq。

中断

无中断。

寄存器

eFuse 寄存器

eFuse 中的寄存器及其对应偏移地址如下表所示。

表 4.1: eFuse 中寄存器的偏移地址

偏移

寄存器名称

功能描述

0x0

efuse_pg_tim_cfg0

—

0x4

efuse_pg_tim_cfg1

—

0x8

efuse_pg_tim_cfg2

—

0xC

efuse_pg_tim_cfg3

—

0x10

efuse_rd_tim_cfg0

—

0x14

efuse_rd_tim_cfg1

—

0x18

efuse_reload_en

—

0x1C

efuse_reload_done

—

0x20

efuse_status

—

0x24

efuse_avdd

—

0x30

efuse_version

—

EFUSE_PG_TIM_CFG0

地址偏移:0x0

表 4.2: efuse_pg_tim_cfg0 格式

字段

位

访问

复位值

描述

Tpgm

12:0

RW

0xa0

烧写时间

Taen

25:13

RW

0xce

地址使能周期时间

Reserved

31:26

/

0x0

/

EFUSE_PG_TIM_CFG1

地址偏移:0x4

表 4.3: efuse_pg_tim_cfg1 格式

字段

位

访问

复位值

描述

Tsp_a

6:0

RW

0x2

地址到 AEN 的建立时间

Reserved

13:7

/

0x0

/

Tsp_pgm

21:14

RW

0x3

PGMEN 信号到 AEN 的建立时间

Thp_pgm

29:22

RW

0x3

AEN 到 PGMEN 信号的保持时间

Reserved

31:30

/

0x0

/

EFUSE_PG_TIM_CFG2

地址偏移:0x8

表 4.4: efuse_pg_tim_cfg2 格式

字段

位

访问

复位值

描述

Tsp_rd

8:0

RW

0x4

RDEN 信号到 AVDD 的建立时间

Thp_rd

17:9

RW

0x4

AVDD 到 RDEN 信号的保持时间

Tsp_pg_avdd

28:18

RW

0x20

AVDD 到 PGMEN 的建立时间

Reserved

31:29

/

0x0

/

EFUSE_PG_TIM_CFG3

地址偏移:0xC

表 4.5: efuse_pg_tim_cfg3 格式

字段

位

访问

复位值

描述

Thp_pg_avdd

10:0

RW

0X20

PGMEN 到 AVDD 的保持时间

Reserved

31:11

/

0X0

/

EFUSE_RD_TIM_CFG0

地址偏移:0x10

表 4.6: efuse_rd_tim_cfg0 格式

字段

位

访问

复位值

描述

Trd

6:0

RW

0X3

读取时间

Tsr_a

12:7

RW

0X3

地址到 AEN 的建立时间

Taen

17:13

RW

0X5

读取地址使能周期时间

Reserved

31:18

/

0X0

/

EFUSE_RD_TIM_CFG1

地址偏移:0x14

表 4.7: efuse_rd_tim_cfg1 格式

字段

位

访问

复位值

描述

Reserved

8:0

/

0x0

/

Tsr_rd

16:9

RW

0x3

RDEN 信号到 AEN 的建立时间

Tsq

22:17

RW

0x3

无负载时的输出数据稳定时间

Reserved

24:23

/

0x0

/

Thr_rd

31:25

RW

0x3

AEN 到 RDEN 信号的保持时间

EFUSE_RELOAD_EN

地址偏移:0x18

表 4.8: efuse_reload_en 格式

字段

位

访问

复位值

描述

rld_en

0

RW

0x0

eFuse 参数重载使能

Reserved

31:1

/

0x0

/

EFUSE_RELOAD_DONE

地址偏移:0x1C

表 4.9: efuse_reload_done 格式

字段

位

访问

复位值

描述

rld_done

0

RO

0x1

重载完成标志

Reserved

31:1

/

0x0

/

EFUSE_STATUS

地址偏移:0x20

表 4.10: efuse_status 格式

字段

位

访问

复位值

描述

pg_status

0

RO

0x0

eFuse 编程状态

Reserved

31:1

/

0x0

/

EFUSE_AVDD

地址偏移:0x24

表 4.11: efuse_avdd 格式

字段

位

访问

复位值

描述

r_f_cnt

19:0

RW

0x14

AVDD 下降与上升时序

Reserved

31:20

/

0x0

/

EFUSE_VERSION

地址偏移:0x30

表 4.11: efuse_avdd 格式

字段

位

访问

复位值

描述

efuse_ver

23:0

RO

0x20005

eFuse 版本