ATPG debug | ATPG的仿真调试功能:一种检查仿真值的方法

Simulation debug capabilities of ATPG: A method to check the values simulated

ATPG’s goal is to create a set of patterns that achieves a given test coverage, where test coverage is the total percentage of testable faults the pattern set detects.

ATPG consists of two main steps: 1) generating patterns to get hard detection only and, 2) performing fault simulation on the generated pattern to determine if the target fault is hard detected or if other undetected faults are possibly detected. Tessent ATPG tools automate these two steps into a single operation or ATPG process. This ATPG process results in patterns you can then save with added tester-specific formatting, enabling a tester to load the pattern data into a chip’s scan cells and otherwise apply the patterns correctly.

The two most typical methods for pattern gene

<think>我们正在讨论Tessent工具中controller chain在shift阶段出现X态不匹配的调试方法。根据之前的上下文,我们知道`set_static_dft_signal_values`用于固定信号,而`set_dft_signal`用于定义信号类型和行为。现在,针对controller chain(通常指测试控制器的扫描链,如OCC控制器、Wrapper控制器等)在shift阶段出现X态的问题,我们需要系统地进行调试调试步骤: 1. **确认静态控制信号固定**: - 使用`set_static_dft_signal_values`确保所有测试控制信号在测试模式下保持固定,特别是`test_mode`、复位信号等。 - 检查是否遗漏了某些控制信号,例如隔离使能信号(isolation enable)、电源管理信号等。 - 示例命令: ```tcl set_static_dft_signal_values -value 1 -port test_mode set_static_dft_signal_values -value 0 -port power_down ``` 2. **检查Wrapper隔离**: - 如果设计中有Wrapper(例如IEEE 1500),确保在shift阶段隔离信号被激活,以防止功能逻辑的X态传播到扫描链。 - 使用`report_wrapper_cells -isolation_check`来验证隔离单元是否被正确配置[^2]。 - 如果隔离信号没有被固定,则使用`set_static_dft_signal_values`固定它。 3. **检查时钟和复位控制**: - 确保在shift阶段,功能时钟被禁止,而测试时钟被激活。使用`set_dft_signal`正确定义时钟信号。 - 确保复位信号在shift阶段被置为无效状态(通常为0),防止电路被复位。 - 示例: ```tcl set_dft_signal -type Clock -port test_clk -timing {45 55} set_dft_signal -type Reset -active_state 0 -port async_reset ``` 4. **分析仿真波形**: - 在仿真中,重点关注controller chain的输入和输出端口,以及内部关键节点的。 - 检查在shift阶段,controller chain的移位操作是否正常,时钟是否按照预期切换,数据是否被正确捕获。 - 注意观察X态出现的起始位置,追踪其来源。 5. **检查未初始化的存储元件**: - 如果设计中有未初始化的寄存器或存储器,在测试模式下它们可能输出X态。需要确保在测试开始时通过复位或预初始化来避免。 - 使用ATPG工具生成初始化序列,或者在测试向量开始前添加初始化步骤。 6. **使用Tessent的调试命令**: - 使用`report_dft_signal`命令检查所有DFT信号的定义是否正确。 - 使用`report_scan_configuration`检查扫描链配置是否正确,包括controller chain的移位路径。 - 使用`report_scan_cells`检查扫描单元是否被正确连接,没有断开或短路。 7. **检查约束文件(SDC)**: - 确保在测试模式下,时序约束(特别是时钟和异步路径)正确,避免仿真中出现时序违例导致X态。 8. **逻辑仿真与门级仿真对比**: - 如果RTL仿真通过而门级仿真失败,则可能是由于门级网表中的未建模单元(如某些IP)或时序问题导致。 - 运行带时序反标的门级仿真检查是否有建立时间或保持时间违例。 9. **ATPG设置检查**: - 在生成测试向量时,检查ATPG的设置,确保没有忽略关键故障模型,并且约束条件设置正确。 10. **使用X-handling选项**: - 在仿真工具中启用X态传播分析功能,帮助追踪X态来源。 - 在Tessent工具中,可以使用`set_simulation_options -x_propagation`来增强X态处理。 11. **层次化设计中的信号传递**: - 在SoC层次化设计中,确保子模块的静态信号通过顶层正确传递。使用`register_static_dft_signal_names`注册信号,并在顶层设置静态[^1][^3]。 如果按照以上步骤仍然无法解决,可能需要检查设计中的特定部分,例如: - 是否在测试模式下存在总线竞争(如多个驱动源同时驱动同一个节点)? - 是否在测试模式下某些组合逻辑路径被激活,而输入未定义? 最后,建议分步调试,先简化问题(例如只仿真controller chain本身),逐步添加其他部分,直到定位问题。 相关问题: 1. 在Tessent中如何追踪X态传播路径? 2. 如何验证Wrapper隔离单元在shift阶段的有效性? 3. 在层次化DFT中,如何确保顶层对子模块控制信号的覆盖? 4. ATPG向量仿真中出现X态不匹配,如何区分是设计问题还是测试配置问题?</think>### Tessent Controller Chain Shift阶段X态不匹配的调试方法 在Tessent DFT流程中,controller chain(如OCC控制器、Wrapper控制器等)在shift阶段出现X态不匹配是常见问题。以下是系统化的调试步骤: --- #### **1. 确认静态信号固定状态** [^1] ```tcl # 检查关键控制信号是否固定 report_dft_signal -static_values ``` - **必须检查的信号**: - `test_mode`:必须固定为1(整个测试期间) - `func_reset`:必须固定为0(防止意外复位) - `isolation_enable`:Wrapper隔离信号(通常固定为1) - **调试方法**: - 若未固定,使用命令: ```tcl set_static_dft_signal_values -value 1 -port test_mode set_static_dft_signal_values -value 0 -port func_reset ``` - 在仿真波形中验证信号是否全程保持恒定 --- #### **2. 检查Wrapper隔离有效性** [^2] ```tcl # 验证Wrapper隔离单元状态 report_wrapper_cells -isolation_check ``` - **关键检查点**: - 隔离单元是否在shift阶段阻断功能逻辑输出 - 隔离是否设置为安全(0或1)而非X态 - **调试方法**: - 在仿真检查隔离单元输入/输出: ```verilog // 示例:监视Wrapper单元 $monitor("t=%t ISO_CELL: in=%b out=%b", $time, iso_in, iso_out); ``` - 若隔离失败,确认`set_dft_signal`是否正确定义: ```tcl set_dft_signal -type Constant -active_state 1 -port iso_en ``` --- #### **3. 分析时钟域交叉(CDC)问题** - **典型场景**: - 控制器链穿越异步时钟域 - 时钟门控单元未正确控制 - **调试方法**: 1. 检查时钟定义: ```tcl report_dft_signal -type Clock ``` 2. 确认测试时钟激活时机: ```mermaid sequenceDiagram ATPG->>+Waveform: Shift阶段 Waveform->>+Clock: test_clk=脉冲 Waveform->>+Func_Clk: 保持恒定(0或1) ``` 3. 使用Tessent时序分析: ```tcl report_scan_timing -setup -hold -clock_crossing ``` --- #### **4. 未初始化寄存器检查** - **X态来源**: - 控制器的状态寄存器未复位 - 存储器单元未初始化 - **调试方法**: 1. 在ATPG前添加初始化序列: ```tcl set_atpg -initialize_sequence length 10 ``` 2. 检查寄存器复位定义: ```tcl set_dft_signal -type AsyncReset -active_state 0 -port ctrl_reset ``` --- #### **5. 层次化信号传递验证** - **SoC集成问题**: - 子模块静态信号未传递到顶层 - **调试方法**: ```tcl # 注册子模块信号 register_static_dft_signal_names core1_test_mode -usage global_dft_control # 顶层强制固定 set_static_dft_signal_values -value 1 -port core1_test_mode ``` - 使用Tessent的跨层次追踪: ```tcl report_hierarchical_signals -from core1 -to top ``` --- #### **6. X态传播抑制技术** ```tcl # 在ATPG中启用X态处理 set_atpg -x_generation off set_simulation -x_propagation stop ``` - **高级选项**: - 强制未知态为确定: ```tcl set_faults -model safe ``` - 使用X-blocking约束: ```tcl add_primary_input_constraint 0 -port uncertain_sig ``` --- #### **7. 分步仿真调试** 1. **最小化测试**: ```tcl set_pattern -capture_cycles 0 # 仅验证shift阶段 ``` 2. **信号追踪**: ```verilog // 在Testbench中添加 initial begin $dumpfile("controller_chain.vcd"); $dumpvars(0, ctrl_chain_inst); end ``` 3. **隔离故障段**: - 从控制器链末端反向检查,定位首个出现X态的触发器 --- ### 调试流程图 ```mermaid graph TD A[X态出现] --> B{静态信号固定?} B -->|No| C[设置set_static_dft_signal_values] B -->|Yes| D{Wrapper隔离有效?} D -->|No| E[修正隔离信号] D -->|Yes| F{时钟正确?} F -->|No| G[调整set_dft_signal时钟] F -->|Yes| H{寄存器初始化?} H -->|No| I[添加初始化序列] H -->|Yes| J[检查层次传递] J --> K[问题解决] ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值