在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 的场景。当芯片从晶圆厂生产出来,在自动测试设备上进行量产测试时:
- ATE会通过芯片的测试访问端口将
test_mode 信号拉高。
- ATE通过扫描输入引脚将预先计算好的测试向量加载到扫描链中。
- ATE施加功能时钟或测试时钟。
- ATE通过扫描输出引脚捕获响应。
- ATE将捕获的响应与预期正确的“黄金响应”进行比较,判断芯片是否存在制造缺陷。
- 测试完成后,
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)。
在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 的场景。当芯片从晶圆厂生产出来,在自动测试设备上进行量产测试时:
- ATE会通过芯片的测试访问端口将
test_mode 信号拉高。
- ATE通过扫描输入引脚将预先计算好的测试向量加载到扫描链中。
- ATE施加功能时钟或测试时钟。
- ATE通过扫描输出引脚捕获响应。
- ATE将捕获的响应与预期正确的“黄金响应”进行比较,判断芯片是否存在制造缺陷。
- 测试完成后,
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)。
举报