在芯片测试领域,DFT(Design for Testability)技术就像给电路设计安装了一套"体检系统"。而Tessent工具中的add_dft_signals命令,就是这套系统的核心控制面板。想象一下,你正在设计一个复杂的SoC芯片,里面有成千上万个需要测试的节点,这个命令就是让你能够精确控制每个测试信号的总指挥。
add_dft_signals主要管理三类关键信号,它们就像是测试系统的三种不同维度的控制杆:
global_dft_control:这类信号相当于测试系统的"总闸",控制着时钟、电源管理等全局资源。就像音乐厅的灯光总控,它决定了整个测试环境的基础条件。
logic_test_control:这是更精细的控制层,可以理解为测试系统的"微调旋钮"。它能够控制电路中特定节点的值,包括:
特别值得一提的是memory_bypass_en,当scan mode下设为0时,ATPG工具会让存储器保持活跃状态,利用multi_load pattern来覆盖存储器端口的故障。这就像在检查电脑内存时,我们特意让内存保持工作状态来进行全面检测。
scan_mode:这个类别负责配置扫描链的不同工作模式。可以把扫描链想象成芯片的"神经系统",而scan_mode就是决定这个神经系统如何工作的模式开关。
在实际项目中,我经常遇到工程师问:"为什么我的测试覆盖率上不去?"很多时候问题就出在对这三类信号的理解和配置不够深入。比如,忽略memory_bypass_en的设置可能导致存储器相关故障无法被有效检测。
在大型SoC设计中,手动配置每个测试信号就像用针线缝制一件巨幅刺绣——效率低下且容易出错。这时-create_with_tdr选项就成了我们的"自动缝纫机"。
这个选项的精妙之处在于:当设计中已经存在一个具有特定属性的TDR(Test Data Register)wrapper时,它能自动将新添加的dft_signal与现有的TDR进行匹配。具体来说,当Ijtagnetwork的wrapper中已经包含一个tessent_dft_function属性设置为scan_resource_instrument_dft_control的TDR(通常命名为sti_ctrl)时,-create_with_tdr就会发挥它的魔力。
在实际操作中,我发现这个功能可以节省约40%的配置时间。特别是在迭代设计时,当测试需求发生变化需要新增信号时,这个选项能够自动保持信号配置的一致性,避免人为疏忽导致的匹配错误。
芯片设计就像建造一栋大楼,有整体结构(parent block)也有各个功能单元(sub_block)。理解设计层级对DFT信号的影响,就像是懂得给大楼的每个房间单独布线。
当design level设置为sub_block时,系统默认只创建对应dft_signals的输入端口。这是因为sub_block在综合后会与它的parent block合并,这些DFT信号也会在综合后连接到parent block的TDR上。这就好比每个房间的电线最终都要接入大楼的主配电箱。
这里有个重要经验分享:在sub_block层级,通常不需要添加int_ltest_en和ext_ltest_en信号。因为wrapper只能以physical block为单位创建,过早地在sub_block添加这些信号反而可能导致综合后的连接问题。我在一个汽车芯片项目中就曾因此浪费了两天调试时间。
时钟信号是芯片测试的"心跳",掌握这几个关键信号能让你的测试更加高效:
shift_capture_clock:这是支撑OCC(On-Chip Clocking)的慢时钟。它可以是input port,也可以使用test_clock驱动的门控,门控Enable端由edt_update控制。它的妙处在于可以与edt_clock共享同一个时钟源。在实际配置时要注意:如果使用-create_from_other_signal选项创建shift_capture_clock,必须确保edt_clock和test_clock已经提前添加。
edt_clock:这是支撑EDT控制器的时钟。虽然可以指定到私有输入端口,但经验表明,最好与shift_capture_clock使用同一个时钟源。我通常的做法是将其接到由test_clock驱动的一个时钟门控上,门控使能端由scan_en控制。这样设计不仅能简化时钟树,还能提高测试稳定性。
occ_kill_clock_en:这个信号驱动OCC上的kill_clock_en。OCC wrapper里有一个kill_clock_mode,可以对OCC的fast_clock做门控。对于未使能的模块,这个信号可以截停fast_clock的翻转率,显著加速pattern仿真。在一个5G基带芯片项目中,使用这个技巧使仿真速度提升了35%。
tck_occ_en:这个信号用于使能Sib(sti)节点内的mini_OCC。如果添加了Sib(sti),这个信号会自动设置为1。这里的mini_OCC是Ijtag tck特有的小型时钟控制器,专门用于测试Ijtag网络上的AC问题。配置这个信号时要注意,它需要与Ijtag网络的其他控制信号协调工作。
input_wrapper_scan_en/out_wrapper_scan_enable:这对信号特别有助于时序收敛。在复杂设计中,我经常用它们来优化扫描链的时序表现。它们也是少数几个支持-create_from_other_signal选项的信号之一。
当标准DFT信号无法满足你的特殊需求时,register_static_dft_signal_names命令就是你的"定制工坊"。这个命令允许你创建全新的信号和信号属性,完全按照你的设计需求来定制。
创建新信号的流程分为三步走:
register_static_dft_signal_names定义新信号及其属性add_dft_signals创建实际信号新建的dft_signal同样遵循三大类分类法:global_dft_control、logic_test_control和scan_mode。在一个AI加速器芯片项目中,我不得不为特殊的神经网络计算单元创建一组定制信号。通过这个命令,我成功实现了对计算阵列的精细化测试控制,使测试覆盖率从82%提升到了95%。
定制信号时有个小技巧:先仔细分析现有信号为什么不能满足需求。很多时候,合理的组合使用标准信号比完全从头创建更高效。只有当确实存在特殊测试场景(如模拟混合信号、特殊存储结构等)时,才需要考虑完全定制。