RISC-V技术论坛
直播中

王刚

8年用户 1352经验值
私信 关注
[问答]

E203 test_mode信号是干啥用的?

最近在研究E203的RTL代码,有一个信号是test_mode,开源代码里面给了个常量0。
请教一下各位大佬,这个信号是干啥用的?在什么情况下接0,什么情况下接1?
请大佬赐教,谢谢~
                                                                                

回帖(1)

surround

2025-11-12 17:42:17

在RTL设计中,test_mode 信号是一个非常关键且常见的信号,它属于可测试性设计的范畴。它在E203 RTL代码中被置为常量0,这通常是出于功能仿真和开源参考实现的目的。让我们深入解析一下它的作用和使用场景:


1. test_mode 的核心作用



  • 模式切换: test_mode 信号的主要功能是切换芯片/核心的工作模式

    • test_mode = 0 (正常模式/Normal Mode): 这是芯片执行其设计功能的模式。CPU执行指令,外设处理数据,所有功能模块按照预期工作。用户实际使用芯片时,它永远处于这个模式。

    • test_mode = 1 (测试模式/Test Mode): 这是专门用于芯片制造后测试的模式。在这个模式下,芯片的内部结构(特别是组合逻辑)会被重新配置,以方便外部测试设备注入测试激励捕获响应,目的是检测制造过程中可能出现的物理缺陷(如开路、短路、晶体管故障等)。



2. test_mode 在测试模式下具体做什么?


test_mode = 1 时,它通常会控制芯片内部的DFT结构,实现以下关键功能:



  • 扫描链使能: 这是最核心的功能。DFT工程师会在综合阶段将芯片内部的时序逻辑单元(触发器)连接成一条或多条长的移位寄存器链,称为扫描链test_mode 置高会:

    • 将触发器从正常工作状态切换到移位寄存器状态

    • 允许外部测试设备通过扫描输入引脚将特定的测试向量(Test Pattern)串行移入扫描链。

    • 在施加一个功能时钟周期后,捕获组合逻辑的输出到触发器。

    • 再将捕获的结果通过扫描输出引脚串行移出,供测试设备分析。

    • 隔离/旁路功能逻辑: 在测试模式下,为了确保测试的确定性和可控性,test_mode 信号可能会:

      • 禁用某些复杂或难以直接测试的功能模块(如PLL、模拟模块)。

      • 将某些功能路径旁路掉,防止它们干扰测试过程或产生不确定的输出。

      • 强制内部多路选择器选择测试路径而非功能路径。


    • 控制测试时钟/复位: test_mode 可能参与选择使用功能时钟还是专用的测试时钟,或者控制测试复位的行为。

    • 启用BIST逻辑: 如果芯片包含内建自测试模块,test_mode 可能用于启动BIST引擎。

    • 禁用安全机制: 在测试模式下,为了便于访问内部状态,某些安全锁定机制可能会被临时禁用(需谨慎设计)。



3. 为什么E203开源代码中 test_mode 被置为常量 0



  • 专注于功能验证: 开源E203 RTL的首要目标是提供一个功能正确的RISC-V处理器核心参考实现,供学习、研究和功能仿真/FPGA验证使用。DFT结构(扫描链插入、测试控制器等)通常是在后端物理设计流程中由专门的DFT工具插入的,不属于核心功能RTL描述的一部分。

  • 简化仿真和综合:test_mode 固定为 0 意味着仿真和FPGA综合时,RTL代码描述的永远是正常工作模式下的行为。这避免了在不需要测试模式的环境下引入额外的复杂性(如扫描链的移位行为)和潜在的仿真/综合问题。

  • 开源参考性质: 作为一个开源参考设计,它主要展示核心功能。实际的DFT实现是芯片公司根据其具体工艺、库和设计流程进行的专有步骤,通常不会包含在开源RTL中。


4. 在什么情况下 test_mode 需要接 1



  • 芯片制造后测试: 这是 test_mode 信号唯一需要被置为 1 的场景。当芯片从晶圆厂生产出来,在自动测试设备上进行量产测试时:

    1. ATE会通过芯片的测试访问端口test_mode 信号拉高。

    2. ATE通过扫描输入引脚将预先计算好的测试向量加载到扫描链中。

    3. ATE施加功能时钟或测试时钟。

    4. ATE通过扫描输出引脚捕获响应。

    5. ATE将捕获的响应与预期正确的“黄金响应”进行比较,判断芯片是否存在制造缺陷。

    6. 测试完成后,test_mode 被拉低,芯片(如果通过测试)才能进入正常工作模式。



5. 在什么情况下 test_mode 需要接 0



  • 所有非测试场景:

    • 功能仿真: 验证RTL功能正确性时。

    • FPGA原型验证: 在FPGA上运行E203核心时。

    • ASIC综合后的功能验证: 即使在后端流程中,在验证插入DFT结构后网表的功能是否仍符合预期时(需要确保测试逻辑在 test_mode=0 下是透明的)。

    • 芯片正常工作状态: 当芯片被焊接到板卡上,上电运行操作系统和应用程序时。此时 test_mode 必须0



总结



  • test_mode 是用于切换芯片工作模式的关键DFT信号:0 代表正常功能模式1 代表制造测试模式

  • E203开源RTL代码中固定为 0,是为了简化功能验证和FPGA实现,专注于核心功能展示。它忽略了后端DFT插入的细节。

  • 实际ASIC芯片的制造测试阶段test_mode 必须由外部ATE设备控制为 1,以激活扫描链等DFT结构进行缺陷检测。

  • 在芯片所有其他使用场景下(仿真、FPGA、上电运行),test_mode 必须保持为 0,以确保芯片执行其设计功能。


简单来说,你在RTL代码里看到它被连死为0,是因为你现在看的代码只关心“这个CPU怎么干活”,而test_mode=1是“工厂怎么检查这个CPU有没有做坏”。等这个设计真的要去流片时,后端工程师会处理这个信号,把它连接到芯片的测试管脚上,工厂的测试机就能控制它了。你现在研究功能,完全可以忽略它(就当它永远是0)。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分