调试设计:芯片设计中必不可少之举
而调试则完全不同了。调试的目的并不只是简单地确定芯片出现了故障,而是要找出故障的原因。这种检查并不限于在测试台上的几秒钟,可能要持续数周时间。它并不是自动进行的,而是需要芯片设计团队的参加。它出现在设计周期中的离散点上:在第一个芯片设计阶段、在可靠性研究阶段和现场故障分析阶段。
根据这种情况,可以想象,良好的DFT 策略应能够满足芯片调试的需要,而且,实际上也往往是如此。随着SoC(单片系统) 设计越来越复杂,一流
“十年前在设计3层金属层时,这并不是什么大问题,”Bay Microsystems 工程部的高级副总裁Tony Chiang说。“如果芯片有问题,应该直接研究金属层来察看电路,而对于聚焦离子束系统则应该重新布线。现在,对于9层金属层和0.2mm金属间距,问题就不是那么简单了。必须将电路设计成具有从芯片外部能控制和能观察的,而在成本和时间预算上不超出我们的目标。”
这种情况,简单扼要地描述了调试设计界的情况。
技术概览
调试与DFT并不是完全脱离的。Broadcom公司的测试开发工程高级总监Kris Hublitz举例介绍说,Broadcom有一个由70多名工程师组成的公司级团队,他们与公司其它的芯片设计团队共同从事调试和测试。Hublitz再三宣称DFT厂商LogicVision是Broadcom芯片调试策略的主要合作伙伴。
其他人也同意这种观点。“调试设计与生产测试并不是毫无关系,” CSR (Cambridge Silicon Radio) 的副总裁David McCall说。“两者的起点差不多。”
很多设计经理强调,这一起点就是探寻电路的能控性和能观性。调试与生产测试相似,基本问题是将电路设置在一个已知的状态,然后开始运行,观察其行为。在中等规模的集成中,边界扫描技术可有效地完成此任务。由于芯片内部状态较少,可以全面地对其进行测试:将输入通过已知的一系列状态,对电路进行时钟同步,然后观察输出。
随着微处理器的出现,事情变得更加复杂了。微处理器有很多内部状态,所以只将输入施加给一个已知矢量并观察输出并不是特别有效。早期,业界尝试了多种技术使微处理器实现可调试,从对寄存器间的每群逻辑进行扫描到依赖同类的跟踪、断点及微机用于进行软件调试的单步函数等。将两种方法结合起来才能起作用。
如今设计人员对SoC的数字部分使用相同的工具套件。另有一些技术用于混合信号的模拟电路。但没有单独一种方法可以囊括整个复杂的SoC。所以,调试的设计流程包括将系统分割成独立的可调试模块,对每个模块实施一个调试策略,并将这些策略整合到一个完整芯片的方案中,使单个模块的用户接口相似并尽量减少电路需要的芯片资源。最后,设计师必须使用这些调试资源重新检查,使完全集成的芯片的运行既可控制又可观察,因为你不能只根据隔离功能模块就能判断某些问题。
数字SoC
最基本的SoC 形式是由简单的往往是可编程的外设模块和内存所包围的CPU 核。多数情况下,CPU 核为第三方的IP,至少有一个内部调试内核的选项。软件开发团队经常强调这一点。此内核与标准的DFT 电路相结合,这种电路是设计团队为外设所实施的,以实现能观性和能控性来隔离故障。可以在CPU 核中应用这种调试内核,模拟核的非同步部分,以捕捉结果。通过让CPU 读写外设寄存器,此内核也可模拟并观察外设,通常允许设计师在可以处理的级别上确定扫描链中的故障。
但如今并没有多少这么简单的SoC(图 1)。更多的情况下,芯片有几个或一群CPU 核和几种不同的处理器内核。某些外部控制器非常复杂,只用CPU对其进行模拟来观察结果,并不能对其有效诊断。还有多个时钟域,它们之间通常彼此并不同步。这样的芯片需要更有效的方法来调试。
在这种情况下,有几种策略可用。Broadcom的Hublitz介绍的一种简单方法是使所有主要功能模块的输入和输出可以访问芯片的针脚。这种方法需要大量的多路复用。在有大量I/O 和内存接口的设计中,在引入任何额外访问进行调试之前,芯片针脚数已经限定了,设计人员必须复用针脚进行调试访问。只将输入输出简单引出每个复杂模块,可能比将其在主CPU 核上执行更有用,设计师可能需要引出内部信号。
所有这些多路复用和输入输出传送共同作用,可能并不太实际。而且,结果的额外互连会造成尽管所有模块可从针脚进行实际访问,但其访问速度根本达不到要求。这是一个严重的问题。“我们必须要以全速测试电路,特别是模块间的互连,”Hublitz 说。“这对于65 nm工艺的芯片更是如此。否则会产生芯片中的故障。”
Hublitz 强调,由ATE (自动测试设备) 支持的良好的DFT 策略,可极大地有助调试过程。“我们第一轮调试在ATE 系统上进行,”他说。“在我们清楚了芯片不会融化后,把它交给设计人员,与他们一起合作。”Hublitz同时表明,芯片可能会不断地返回到 Broadcom的测试台,以使 ATE 系统采集大量的数据或进行速度检查。“自己内部有ATE 能力的真是很有用,”他表示。“我们有28 个系统,大概每季度就增加一个新的,主要是用于调试,调试新芯片是我们装备设备最主要的目的。”
虽然有了ATE
“首先,我们在模块级实现芯片。在这种模式下,每个模块都被隔离开来:我们可以注入足够的状态启动其运行,然后观察其独立运行特点。”这些测试必须在最大时钟速度下进行,以保证精度。这样,设计师就可实现对一串处理器每级的调试。此时,设计师还将I/O 环与内部模块隔离,使输入可直接进入输出FIFO中。Bay 的设计师在独立验证I/O 环和内部模块后,再将两者结合起来整体地测试芯片。
以整个芯片全速运行采集数据,需要制定全面的计划。单个处理器中的调试内核必须不仅可以识别本地指令和数据字,而且大的图像数据对芯片运行也是十分重要的:如数据包和数据封包。另外,36位总线贯穿整个芯片,可实时将关键信号从任何模块传输到封装脚。使芯片以全速处理包时,调试工程师可以观察模块的运行。此外,硬件实时监测特定的断言,如FIFO full/empty 断言。Broadcom 也有类似的方法。Hublitz告诉我们,他们公司的无线局域网芯片有足够的内部调试硬件,工程师可以在整个芯片上跟踪向量幅度,从输入到基带直到输出。
在一个模块内一旦将问题隔离到一个功能上时,基于类似DFT 的策略,调试工程师可使用低级的诊断工具。Bay 杰出的工程师兼芯片架构师Barry Lee 说:“我们在模块中有对触发和单步的时钟控制,并可扫描我们认为重要的信号。理想情况下,我们可以确切地了解一个特殊的流水线如何执行到针脚和寄存器级别。”
模拟挑战
当涉及模拟电路时,一切都不一样了。“我们将模拟部分与数字电路分割开来进行调试”Lee 解释道。“对两者的调试技术是不一样的。在模拟领域,要打开环回途径,可能要将所有的调试拿到封装脚之外进行。由于在模拟电路中活动基元并不与时钟同步,因而无法对其进行捕捉。”
模拟电路与数字电路类似,随着几何尺寸的缩小,设计师已经看到了探测和实验设计的能力,Analog Devices的Paul Ferguson 认为。“我们习惯了将激光切割器用于探测台来修改电路。后来,随着几何尺寸的减小,我们转移到了聚焦离子束系统。对于250 nm 或更大的间距非常实用。这表明,实际上说,如果采用65nm 工艺,只能改动上面的两个金属层。”
这种情况引发了模拟设计风格的一个有趣的变化, Ferguson说。“最近我们在做一项90nm 设计的PLL,我们发现必须首先完成VCO(压控制振荡器),才能建立合适的模型。所以,我们引入了一些线路,将增益和其它参数调整到所能达到的上部金属层。这对于调试过程的确很有益处。”
Matt Ball 是单芯片无线电厂商Jennic公司的混合信号项目工程师,他也强调要将关键模拟信号置于可取位置的重要性。“我们加入了尽量多的可编程性和数字调整功能,”他说。“有些东西必须为金属微调的, 我们将那些位置变成单一的掩模层级别实现可访问性。”
除了将实时信号引到上部金属层或封装脚上,今天的模拟设计师还有其它武器设定及观察电路的状态。最重要的是在微细几何尺寸上进行,模拟电路与校准和监测它们的数字电路间要有密切的协作。
CSR的McCall 说在其设计中,ADC监测器可确定模拟电路中数字监视电路的多个点。这些点通过将转换器的输出接到封装的外部,为调试工程师提供了访问模拟部分行为的机会。“通常重要的模拟信号在某些点进行数字化处理了”Ball说。“为什么不进行采样,以片上DSP进行滤波,输出我们能够看到它的结果呢?”
设计滤波器或放大器以便数字电路能够调节所有重要电气特性,这似乎有些大动干戈了。但是在首次工作的芯片和在调试前有两层新金属掩模层的芯片之间产生的不同甚至可以启动设计的数字部分。而且,在小于90nm的工艺中,设计师必须面对越来越强的可变性,这些由数字调整就成了必须,这样才能生产足够数量的有用芯片。
如何进行调整?对于无线电芯片上信号的精度和频率,IF (中频)信号,在测试模式中可以只用布线和模拟多路复用将信号引出封装之外。“在中频部分,缓冲器非常有用。”Ball 说。“从重要的节点取得信号送到针脚,就可以看到需要看的结果。”Analog Devices的Ferguson也同意此观点。“就调试而言,往往不需要比模拟多路复用器所能提供的精确度高多少,就可以看到振荡或20% 的增益误差。”
如果不能将信号引到封装之外,有时可以将
Ball 也同意这种警告,必须选择适当的方法,他说:“缓冲模拟信号时所产生的10fF或20fF可改变节点的行为。” Jennic倾向于只根据以前出现问题的区域,如带隙电池,构建其调试方案。“我们更喜欢添加旁通电路,以防出现问题。”Ball补充说。这种保守思想可降低故障电路的出现机会。
经过计划,加上运气,以及一点雅致,可以重新利用功能模块进行调试。许多模拟信号在数据转换器中终止,所以至少其中部分是可观察的。Ferguson 指出,可以轻松地开关s-Δ转换器作为滤波器工作,以对进入的模拟信号进行观察。或者小心地将位流路由到针脚,在转换器两侧都可观察。一旦对数据进行数字化处理,就可以使用CPU 或DSP 模块调节及压缩或测试对其的断言。
也可以将调试智能(相当于简单的网络分析仪)构建到一个模块中。环回路径可使用发射器和接收器来互相检查(图 2),有些电路可以抽取结果的模拟波形。“在我们千兆位PHY (物理层)设计中,我们在PHY 块中捕捉到了一些模拟信号,”Broadcom Hublitz 介绍说。
发展前景
不难想象,在系统设计早期阶段,每个功能模块接受足够的自检能力在全速运行期间进行自身诊断,并在DFT扫描链可处理的级别上实现这种能力。这种方法通常需要输入缓冲器或信号发生器对模块仿真,还要有输出捕捉寄存器或ADC 对其观察,以及足够的内部断点和跟踪能力揭示模块的内部工作情况。一些SOC 设计团队现在正在进行此项计划。这样实际的实现就成了架构师认为必要的调试支持级别与设计所能承受的费用间的折中。
进一步拓展此概念,完美系统的设计师可以利用重定某些功能模块目标,作为信号源或其它模块的捕捉设备。附属的ADC 是个很好的例子,这样的机会还有更多。例如,增加快速数据转换器可以将信号处理模块变成网络分析仪或数字示波器。对控制逻辑稍作添加,即可将缓冲器 SRAM 阵列转换为跟踪缓冲器。
按这种思考方式,片上的功能模块可成为大量的调试资源,只重置几个多路复用器和模式开关即可。但此过程需要深谋远虑。这样组织会影响平面规划和全局布线。必须在设计开始时进行,而不能在最后的实现时进行。
Ferguson 认为,某些工具也可支持这种过程。精密的工具可自动安装这种结构,如扫描链、扫描控制器及矢量发生器等。而且,DFT 硬件在寄存器级别的诊断上是必不可少的。但是,并没有支持创建调试结构的工具。Ferguson至少想要看到一种将混合信号模块视为具有能观性和能控性,并能扫描检查简单错误的检测工具。理想状态下一种工具应该能够贯穿于一项设计,并能提出一种调试架构和工艺。但这是以后要解决的问题。