.. _soc_ip_efuse: eFuse ############## .. toctree:: :maxdepth: 2 :caption: 目录: .. contents:: 目录 :depth: 3 简介 -------- 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 数据映射 ~~~~~~~~~~~~~~~~~ .. list-table:: 表 3.1: SMIC40 工艺下 eFuse 的数据映射 :header-rows: 1 :widths: auto * - 大小 - 属性 - 描述 - 地址范围 * - 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位) ^^^^^^^^^^^^^^^^^^^^^^^^^ 用于其他模块的参数配置。可通过总线访问,且每位的信号线均引出至顶层。 .. figur/assets/images/ip/nuclei_efuse_doc/images/wired_registers.png :alt: wired registers :align: center 该区域在受保护前可读写,受保护后变为只读。 密钥(6 × 128 位) ^^^^^^^^^^^^^^^^^^^^^^^^^ 用于安全模块的六组密钥,可用于 AES/SM4 等加密算法。 若需使用 RSA/SM2/ECC 等公钥加密算法,则此密钥不适用,需使用另一个独立的 8 KiB eFuse 块来实现。 .. figur/assets/images/ip/nuclei_efuse_doc/images/key.png :alt: wired registers :align: center 该区域在受保护前可读写,受保护后不可读写。 它读取无效数据(全为 1)。在可读写状态下,可通过总线访问,且每位的信号线均引出至顶层。 .. figur/assets/images/ip/nuclei_efuse_doc/images/key_align.png :alt: 密钥对齐 :align: center 图 3.1: 密钥对齐 数据块控制标志(128 位) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 在 eFuse 中,参数被划分为 128 个数据块,每个数据块对应数据块控制标志中的 1 位,用于指示该参数是否处于编程保护状态。完成保护位的编程后,需执行一次重载(reload)或复位(reset)操作,保护位才能生效。只要数据块控制标志中的某一位被置为 1,对应的 eFuse 数据块状态即变为只读。该区域主要用于对 eFuse 各个区域的写保护控制,其控制范围的详细说明如下。 .. list-table:: 表 3.2: eFuse 数据块控制标志 :header-rows: 1 :widths: auto * - 大小 - 属性 - 描述 * - 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 位。 以下是保护位的映射关系。 .. list-table:: 表 3.3: eFuse 保护位映射 :header-rows: 1 :widths: auto * - 偏移量 - 说明 * - 1 位 × N - 保护数据[64 - 1 + 16 * N:16 * N], 0 <= N <= 111 BISR 标志(128 位) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 128 位 LUT 表结构用于校正 eFuse 坏点像素。 BISR LUT 表 '''''''''''''''''' .. list-table:: 表 3.4: eFuse 的 BISR LUT 表 :header-rows: 1 :widths: auto * - 大小 - 属性 - 描述 * - 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 项 .. figur/assets/images/ip/nuclei_efuse_doc/images/BISR_LUT_table.png :alt: BISR LUT table :align: center BISR LUT 项 '''''''''''''''''' .. list-table:: 表 3.5: eFuse 的 BISR LUT 项表 :header-rows: 1 :widths: auto * - 位数 - 属性 - 描述 * - 1 位 - RW/RO - 使用标志 * - 1 位 - RW/X - 替换位 * - 14 位 - RW/X - 用于修复的 LUT 地址 .. figur/assets/images/ip/nuclei_efuse_doc/images/BISR_LUT_item.png :alt: BISR LUT item :align: center .. 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 的编程时序图如下图所示。 .. figur/assets/images/ip/nuclei_efuse_doc/images/efuse_program_timing.png :alt: eFuse 编程时序图 :align: center 图 3.2: eFuse 编程时序图 编程模式下的时序要求如下表。 .. list-table:: 表 3.6: eFuse 编程时序要求表 :header-rows: 1 :widths: auto * - 参数 - 符号 - 最小值 - 典型值 - 最大值 - 单位 * - 编程时间 - 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 的读取时序图如下图所示。 .. figur/assets/images/ip/nuclei_efuse_doc/images/efuse_read_timing.png :alt: eFuse 读取时序图 :align: center 图 3.2: eFuse 读取时序图 读取模式下的时序要求如下表。 .. list-table:: 表 3.7: eFuse 读取时序要求表 :header-rows: 1 :widths: auto * - 参数 - 符号 - 最小值 - 典型值 - 最大值 - 单位 * - 读取时间 - 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 中的寄存器及其对应偏移地址如下表所示。 .. list-table:: 表 4.1: eFuse 中寄存器的偏移地址 :header-rows: 1 :widths: auto * - 偏移 - 寄存器名称 - 功能描述 * - 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 .. list-table:: 表 4.2: efuse_pg_tim_cfg0 格式 :header-rows: 1 :widths: auto * - 字段 - 位 - 访问 - 复位值 - 描述 * - Tpgm - 12:0 - RW - 0xa0 - 烧写时间 * - Taen - 25:13 - RW - 0xce - 地址使能周期时间 * - Reserved - 31:26 - / - 0x0 - / EFUSE_PG_TIM_CFG1 ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 地址偏移:0x4 .. list-table:: 表 4.3: efuse_pg_tim_cfg1 格式 :header-rows: 1 :widths: auto * - 字段 - 位 - 访问 - 复位值 - 描述 * - 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 .. list-table:: 表 4.4: efuse_pg_tim_cfg2 格式 :header-rows: 1 :widths: auto * - 字段 - 位 - 访问 - 复位值 - 描述 * - 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 .. list-table:: 表 4.5: efuse_pg_tim_cfg3 格式 :header-rows: 1 :widths: auto * - 字段 - 位 - 访问 - 复位值 - 描述 * - Thp_pg_avdd - 10:0 - RW - 0X20 - PGMEN 到 AVDD 的保持时间 * - Reserved - 31:11 - / - 0X0 - / EFUSE_RD_TIM_CFG0 ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 地址偏移:0x10 .. list-table:: 表 4.6: efuse_rd_tim_cfg0 格式 :header-rows: 1 :widths: auto * - 字段 - 位 - 访问 - 复位值 - 描述 * - 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 .. list-table:: 表 4.7: efuse_rd_tim_cfg1 格式 :header-rows: 1 :widths: auto * - 字段 - 位 - 访问 - 复位值 - 描述 * - 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 .. list-table:: 表 4.8: efuse_reload_en 格式 :header-rows: 1 :widths: auto * - 字段 - 位 - 访问 - 复位值 - 描述 * - rld_en - 0 - RW - 0x0 - eFuse 参数重载使能 * - Reserved - 31:1 - / - 0x0 - / EFUSE_RELOAD_DONE ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 地址偏移:0x1C .. list-table:: 表 4.9: efuse_reload_done 格式 :header-rows: 1 :widths: auto * - 字段 - 位 - 访问 - 复位值 - 描述 * - rld_done - 0 - RO - 0x1 - 重载完成标志 * - Reserved - 31:1 - / - 0x0 - / EFUSE_STATUS ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 地址偏移:0x20 .. list-table:: 表 4.10: efuse_status 格式 :header-rows: 1 :widths: auto * - 字段 - 位 - 访问 - 复位值 - 描述 * - pg_status - 0 - RO - 0x0 - eFuse 编程状态 * - Reserved - 31:1 - / - 0x0 - / EFUSE_AVDD ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 地址偏移:0x24 .. list-table:: 表 4.11: efuse_avdd 格式 :header-rows: 1 :widths: auto * - 字段 - 位 - 访问 - 复位值 - 描述 * - r_f_cnt - 19:0 - RW - 0x14 - AVDD 下降与上升时序 * - Reserved - 31:20 - / - 0x0 - / EFUSE_VERSION ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 地址偏移:0x30 .. list-table:: 表 4.11: efuse_avdd 格式 :header-rows: 1 :widths: auto * - 字段 - 位 - 访问 - 复位值 - 描述 * - efuse_ver - 23:0 - RO - 0x20005 - eFuse 版本