网站开发项目成本分析之合理性网站建设优化陕西
网站开发项目成本分析之合理性,网站建设优化陕西,站长工具seo综合查询引流,网站建设与开发 教材1. 从“硬连线”到“智能网络”#xff1a;为什么我们需要SIB和TDR#xff1f;
大家好#xff0c;我是老张#xff0c;在芯片测试#xff08;DFT#xff09;这个行当里摸爬滚打了十几年。回想早些年做测试设计#xff0c;最头疼的就是面对一个集成了几十个IP核的复杂SoC…1. 从“硬连线”到“智能网络”为什么我们需要SIB和TDR大家好我是老张在芯片测试DFT这个行当里摸爬滚打了十几年。回想早些年做测试设计最头疼的就是面对一个集成了几十个IP核的复杂SoC。那时候的测试访问网络很多还是“硬连线”的一旦设计定版测试路径就固定死了。想单独测某个内存控制器想绕过那个疑似有问题的CPU核对不起要么重新设计要么就得忍受漫长的全芯片扫描效率低不说故障定位更是大海捞针。后来IJTAGInternal JTAG标准及其在Tessent工具中的实现彻底改变了这个局面。它把芯片内部的测试资源像内存BIST控制器、各种传感器、调试模块等组织成了一个灵活的“智能网络”。而这个网络能够动态配置、按需访问的核心秘密就在于两个关键节点SIBSegment Insertion Bit和TDRTest Data Register。你可以把整个IJTAG网络想象成一个现代化的智能楼宇管理系统。楼里有无数个房间IP核和测试仪器每个房间都有独立的灯光、空调和门锁。SIB就像是每个楼层或每个区域的总电闸和智能门禁控制器。通过操作这个控制器你可以决定是让整个区域的设备都接入系统通电、联网还是把它们暂时旁路掉断电、隔离。而TDR呢就像是每个房间里的智能控制面板。这个面板不仅能显示房间内的温度、湿度数据输入还能接收你的指令去调节空调温度、开关灯光数据输出和解码信号。没有SIB你无法高效地管理访问权限没有TDR你无法与房间内的设备进行精细化的交互。在Tessent DFT的实战中我们正是利用SIB和TDR的协同工作来构建一个既灵活又可配置的测试访问架构。SIB负责网络的“拓扑重构”动态管理扫描路径的包含与旁路TDR则充当“数据与命令中心”负责信号的采集、驱动和译码。这种设计带来的好处是实实在在的测试时间大幅优化因为你可以只激活需要测试的部分故障隔离能力极强可以精准定位到出问题的模块测试资源能够动态配置适应不同测试模式如扫描测试、内存自测试、功能测试的需求。接下来我就结合自己的项目经验带你深入看看这两个“关键先生”到底是怎么工作的。2. SIBIJTAG网络的动态路由“开关”2.1 SIB到底是个啥一比特决定“通”与“断”用最直白的话说SIB就是一个带有一比特移位寄存器的智能开关。这个比特的值直接决定了它身后所连接的那一串“客户节点”Client Nodes可以是子SIB链也可以是TDR或者是直接的测试仪器的命运。我们来拆解一下它的工作逻辑这非常关键当SIB的移位寄存器值为0时它处于“旁路”Bypass模式。此时数据流会直接绕过它所管理的所有下游节点仿佛它们不存在一样。这就像电闸拉下后面整个房间的电路都不工作了。当SIB的移位寄存器值为1时它处于“包含”Include模式。此时下游的所有节点被接入到活跃的扫描路径中我们可以对它们进行访问和操作。电闸合上房间通电。这个过程是如何发生的呢关键在于两个控制信号update_en和select_en。当我们通过IJTAG接口TDI, TDO, TCK等向SIB内部移位数据时数据只是暂存在移位级Shift Stage。只有当update_en信号有效时在TCK的下降沿这个比特值才会被锁存到更新级Update Stage成为真正控制开关状态的信号。而select_en信号即实际控制旁路还是包含的信号的变化会刻意延迟一个TCK周期。这个设计非常精妙目的是为了避免SIB和它下游的客户端节点之间由于时钟树不平衡可能产生的时序竞争race condition确保开关动作稳定可靠。在Tessent工具中SIB模块的命名有固定规则。通常如果开启了reuse_modules_when_possible选项工具会生成类似design_name_design_id_tessent_sib#的名字其中#是递增的数字以实现模块复用节省面积。如果关闭该选项则名称固定为design_name_design_id_tessent_sib。2.2 实战配置用SIB构建分层测试架构光讲原理有点抽象我们直接看一个我项目中常用的分层SIB架构设计。假设我们有一个SoC包含一个逻辑测试控制模块、多个可扫描测试的仪器如MBIST控制器、以及三个子核Child Cores。我们的IJTAG网络可以这样规划DftSpecification(top, setup_hw) { IjtagNetwork { HostScanInterface(ijtag) { Sib(logictest_hw) { Tdr(scan_modes) { # 这里定义控制扫描模式的解码信号如edt_en, scan_en等 DecodeSignal(edt) { decode_values : 2b01, 2b10; } DecodeSignal(scan_test_en) { decode_values : 2b01, 2b10, 2b11; } } } // 这个Sib下的所有仪器在扫描测试期间都需要被访问 Sib(scannable_instruments) { Sib(mbist1) { ... } # 内存BIST控制器1 Sib(mbist2) { ... } # 内存BIST控制器2 } // 这个Sib用于管理各个子核每个子核再用自己的Sib隔离 Sib(child_cores) { Sib(core1) { DesignInstance(core_a_inst1) { ... } } Sib(core2) { DesignInstance(core_a_inst2) { ... } } Sib(core3) { DesignInstance(core_a_inst3) { ... } } } } } }我来解释一下这个设计的精妙之处logictest_hwSIB这是最靠近扫描输出TDO的顶层SIB。它下面挂着一个名为scan_modes的TDR。这个TDR的作用是产生整个芯片扫描测试所需的全局使能信号比如scan_test_en。为什么把它放在第一个因为扫描测试时这些模式信号必须全程有效。通过设置keep_active_during_scan_test属性为on对于生成此类信号的TDR这通常是默认的可以确保在扫描测试整个过程中这个SIB及其TDR始终处于激活包含状态不受其他SIB开关状态的影响。scannable_instrumentsSIB这个SIB管理着所有在扫描测试过程中不需要一直保持活跃但又需要在某个时刻被配置或读取的仪器比如独立的MBIST控制器。在大部分扫描测试时间里我们可以让这个SIB处于旁路状态值为0这样这些仪器就与扫描链隔离保持稳定不会干扰扫描测试。只有当我们需要配置MBIST或读取其状态时才通过IJTAG指令将这个SIB打开置1。这大大减少了活跃扫描链的长度提升了测试效率。child_coresSIB及其子SIB链这是体现SIB灵活性的核心。顶层一个SIB管理所有子核每个子核又由自己专属的SIB控制。这样做的好处太多了核心隔离与功耗管理测试Core1时可以把Core2和Core3的SIB旁路掉。这样Core2和Core3的时钟和扫描链可以完全关闭实现功耗隔离避免不必要的功耗和噪声。故障核心旁路如果量产测试中发现Core2有制造缺陷在后续的系统级测试或板级测试中我们可以永久地将Core2的SIB旁路这样整个IJTAG网络依然可以正常访问Core1和Core3提高了系统的可靠性和良率。并行测试与调试在芯片调试阶段可以单独打开某个核心的SIB进行深度测试而不影响其他核心的正常功能运行。这种基于SIB的分层、分区设计使得测试访问网络变得像积木一样可以动态组合是应对复杂SoC测试挑战的利器。3. TDR测试网络中的多功能“数据枢纽”3.1 解剖TDR不止是一个移位寄存器如果说SIB是管理路径的“交警”那么TDR就是处理数据的“指挥中心”。很多人初学时会以为TDR就是一个简单的移位寄存器那就太小看它了。一个功能完整的TDR其内部结构是一个精巧的时序系统。一个典型的3比特TDR包含以下关键部分移位寄存器Shift Register这是基础用于串行移入移出数据。更新触发器Update Flip-Flop位于移位寄存器之后。它的作用是将动态移位过程中的数据Shift Value与最终稳定输出的数据Update Value解耦。我们在TCK上升沿移位在update_en有效时的TCK下降沿将移位寄存器的值捕获到更新触发器中。这样输出信号不会在移位过程中疯狂跳变只有在更新时刻才发生一次稳定的变化这对于控制信号至关重要。数据输入端口DataInPorts这些是TDR的“眼睛”用于捕获芯片内部某些信号的状态。捕获到的值会在移位操作时被加载到移位寄存器的相应比特位然后通过TDO扫描出来。这常用于读取状态寄存器、报警信号、计数器值等。数据输出端口DataOutPorts这些是TDR的“手”用于将更新触发器中的值驱动到芯片内部的特定节点上从而配置某个功能模块。例如设置PLL的倍频系数、使能某个时钟门控、或者给模拟模块发送一个配置码。解码信号DecodedSignal这是TDR的“智能大脑”。它不是一个直接的端口而是一组组合逻辑。这组逻辑监控移位寄存器或更新触发器的值当数值匹配预设的二进制码decode_values时就激活对应的解码信号。一个解码信号可以对应多个码字。这常用于产生复杂的控制序列或使能信号比如一个特定的解码信号可能只在TDR值为3‘b001或3’b100时才有效。关于update stage有一个重要的设计考量它并非总是必需的。如果TDR的某个输出只是用于配置且移位过程中的数据跳变toggle不会对电路产生任何影响例如只是配置一个一次性写入的静态参数那么为了节省面积和时序可以移除此更新级让输出直接来自移位寄存器。这在Tessent中可以通过output_timing属性来精细控制。3.2 输出时序控制避免毛刺与竞争的关键output_timing是TDR配置中一个非常实战化的参数它决定了DataOutPorts和DecodedSignals的输出行为主要解决信号竞争和毛刺问题。它通常有几个选项normal默认模式。输出信号来自更新触发器。信号变化发生在update_en有效后的TCK下降沿。这是最安全、最常用的模式确保了输出信号的稳定和同步。unlatched输出信号直接来自移位寄存器。信号在移位过程中就会变化。仅适用于输出变化无关紧要的场景比如驱动一个只会在功能模式下被观察的调试信号。ijtag_scan_selection这是一种特殊的时序模式。当输出信号被用作选择或使能IJTAG网络本身例如控制一个SIB的select_en或者作为另一个TDR的输入选择时必须使用此模式。它会添加额外的延迟逻辑确保在IJTAG网络切换扫描路径时不会因为新老路径使能信号的竞争而产生毛刺或短暂通路这是IJTAG网络稳定性的基石。举个例子假设一个TDR输出用来控制一个多路选择器MUX以选择是功能数据还是测试数据进入某个模块。如果这个选择信号出现毛刺可能会导致功能数据意外泄露到测试路径或者反过来造成不可预知的行为。使用ijtag_scan_selection时序就能有效避免这个问题。3.3 实战演练配置一个锁相环PLL控制TDR让我们看一个真实的例子如何用TDR去配置一个芯片内部的PLL。假设这个PLL需要通过3个比特控制倍频mult[2:0]3个比特控制分频div[2:0]并且我们还想读取PLL的锁定状态locked信号。DftSpecification(clk_gen, bottom_up) { IjtagNetwork { HostScanInterface(ijtag) { Tdr(pll_config) { # TDR的ID是pll_config length : 7; # 总共需要7比特6个输出控制位 1个输入状态位 DataOutPorts { count : 7; # 连接关系TDR的bit[5:3] 驱动 pll/mult[2:0]; bit[2:0] 驱动 pll/div[2:0] connection(5:3) : pll/mult[2:0]; connection(2:0) : pll/div[2:0]; # 端口命名工具会自动生成一个mux选择信号加上我们连接的6个比特 port_naming : mux_sel, mult[2:0], div[2:0]; # 假设mult和div信号在功能模式下也有其他驱动源需要插入MUX multiplexing : auto; } DataInPorts { count : 1; connection(0) : pll/locked; # TDR的bit[6]捕获PLL锁定状态 port_naming : locked; } } } } }在这个配置里我们定义了一个7比特长的TDR。DataOutPorts部分指定了6个比特连接到PLL的配置端口。注意multiplexing: auto因为pll/mult和pll/div这些网络在功能模式下很可能由芯片的软件寄存器驱动所以在测试模式下我们需要插入一个MUX来选择信号源。工具会自动添加第7个输出端口mux_sel来控制这个MUX。DataInPorts部分定义了一个输入端口连接到PLL的锁定状态信号。那么在测试流程中我们如何操作呢配置PLL通过IJTAG接口向pll_config这个TDR移位写入数据。比如写入7‘b1_010_101假设最高位mux_sel为1选择测试数据mult010div101。在Update操作后这些配置值就施加到了PLL上。检查锁定状态发起一次Capture操作PLL的locked信号状态会被捕获到TDR的输入比特本例中是最高位但实际顺序取决于工具映射上。读取状态通过Shift操作将捕获到的locked状态位扫描出来从而判断PLL是否成功锁定。通过这样一个TDR我们就把对模拟/混合信号模块PLL的访问和控制完美地集成到了全数字的IJTAG扫描测试框架中。4. SIB与TDR的协同交响曲4.1 构建动态测试场景一个完整的访问流程单独理解SIB和TDR之后我们来看看它们如何联手完成一项复杂的测试任务。假设我们要测试前面例子中的Core2的内存使用mbist2控制器并且需要先配置Core2的专用PLL。整个IJTAG网络的访问流程就像在操作一个树状菜单选择路径操作SIB首先我们需要打开通往Core2的路径。这通过操作child_coresSIB和其下的core2SIB来实现。假设它们的控制位在扫描链中的偏移地址是已知的。我们通过IJTAG指令依次将child_coresSIB和core2SIB的移位寄存器值设为1Include。此时Core2内部的IJTAG网络包括它的PLL配置TDR和MBIST控制器被接入了主扫描路径。发送命令与配置操作TDR路径打通后接下来访问Core2内部的pll_configTDR。将代表PLL配置如mult4, div2和MUX选择的数据移位到这个TDR中然后进行Update操作。PLL开始根据新配置工作。我们可以通过捕获和移位操作读取locked信号确认PLL已锁定。执行测试与读取结果接着访问Core2内部的MBIST控制器它本身可能也是一个TDR或者通过TDR控制。向MBIST的控制TDR写入启动命令和测试算法参数。MBIST控制器开始运行。完成后其状态寄存器可能通过另一个DataInPort会更新。我们再次通过IJTAG捕获并移出这些状态判断内存测试是否通过。清理与退出测试完成后将core2SIB和child_coresSIB的值设回0BypassCore2的测试网络被隔离芯片可以恢复正常功能或其他测试。这个过程完全可以通过ATE自动测试设备的测试向量程序化控制实现高度自动化的测试流程。4.2 设计考量与“踩坑”经验在实际项目中灵活运用SIB和TDR能带来巨大好处但也有些坑需要注意平衡与权衡面积开销每个SIB和TDR都会带来额外的逻辑门和触发器开销。在设计初期就要和前端设计团队沟通评估测试逻辑的面积预算。避免为了极致的灵活性而过度使用特别是对于面积敏感的芯片。测试时间SIB的层级会增加扫描链的深度。访问一个深埋在多层SIB下的TDR需要先移位配置所有上层SIB这会增加测试时间。需要合理规划网络层级将需要频繁访问的节点放在较浅的位置。时钟域确保TDR的时钟TCK在其内部是平衡的。Tessent工具会处理这一点但如果你手动集成某些模块需要注意时钟树综合CTS对IJTAG网络时钟的影响。我踩过的几个坑解码信号竞争曾经在一个设计中用一个TDR的解码信号同时控制了两个异步时钟域下的模块使能。结果在Update瞬间由于时钟偏移导致一个模块使能了而另一个稍晚产生了非预期的功能交互。教训对于控制不同时钟域的关键信号最好用独立的TDR比特或TDR来控制并通过output_timing进行严格约束。SIB默认值有一次忽略了SIB在芯片复位后的默认值通常是0Bypass。结果在芯片初始化和功能启动阶段某些必须提前配置的测试模块无法访问导致启动失败。教训仔细检查SIB的复位值对于必须在启动时包含的模块其控制SIB的复位值应设为1或者通过其他不受SIB控制的常开路径进行访问。连接性检查在DataInPorts和DataOutPorts中指定连接时引脚路径pin_name一定要写对特别是当TDR被例化在层次化设计的不同模块中时。我曾经因为一个路径拼写错误导致一个状态信号永远读不到调试了半天。Tessent工具在process_dft_specification阶段会进行连接性检查充分利用这个功能。5. 进阶话题利用SIB与TDR实现测试优化5.1 测试时间压缩与并行测试SIB和TDR是测试时间压缩的利器。通过SIB将芯片划分成多个独立的测试分区PartitionATE可以并行测试多个分区如果ATE资源允许或者串行测试但只激活当前分区从而显著缩短整体测试时间。例如可以将CPU核、GPU核、DSP核分别放在不同的SIB分支下测试时轮流激活其他核则处于低功耗旁路状态。TDR在这里扮演了配置者的角色。例如可以设计一个“测试调度TDR”它的解码信号分别连接到各个分区SIB的select_en逻辑上。通过向这个调度TDR写入不同的码字ATE就能像播放钢琴曲一样按顺序激活不同的测试分区实现测试流程的自动化编排。5.2 系统级测试与在线监控IJTAG网络不仅在量产测试中有用在系统级应用和在线监控中也大有可为。芯片上电后系统软件可以通过JTAG接口访问IJTAG网络利用SIB和TDR完成内核动态配置在复杂SoC中不同应用场景下各内核的时钟电压配置可能不同。系统软件可以在运行时通过IJTAG网络访问对应内核的PLL配置TDR动态调整频率。健康状态监测芯片内部通常有温度传感器、电压传感器等。这些传感器的数字输出可以连接到监控TDR的DataInPorts。系统软件或底层固件可以定期扫描读取这些TDR实现芯片健康状况的实时监控和预警。功能安全与诊断在汽车电子等功能安全领域需要定期进行内存自检MBIST。系统可以在后台通过IJTAG网络周期性地启动MBIST控制器的TDR执行内存测试并将结果通过TDR读回满足ASIL等级要求的诊断覆盖率。5.3 与Tessent工具的深度集成在Tessent Shell环境中SIB和TDR的定义不仅仅是文本描述它们会直接集成到整个DFT流程中自动插入运行process_dft_specification命令后Tessent工具会根据你的描述自动在RTL或门级网表中实例化SIB和TDR模块并完成所有指定的连接。测试协议生成在生成ATPG自动测试向量生成或MBIST测试协议时工具能自动识别IJTAG网络结构并产生正确的序列来操作SIB和TDR无需手动编写底层的控制向量。验证与调试Tessent提供仿真模型和调试环境可以让你在RTL或门级仿真中完整地模拟IJTAG网络的访问流程提前验证测试逻辑的正确性。掌握SIB和TDR本质上就是掌握了构建现代化、可配置芯片测试访问架构的核心技能。它要求我们不仅是DFT工程师还要有一点系统架构师的思维从芯片测试、调试、甚至后期应用的整体视角来规划这些“关键节点”。希望这篇结合实战的解析能帮你打通任督二脉在设计下一个复杂SoC时能够游刃有余地构建起高效、灵活的IJTAG测试网络。