张 键, 鲍宜鹏
(中科芯集成电路有限公司, 江苏 无锡 214072)
在工业控制、安防、物联网、消费类电子等诸多领域,MCU 的应用处处可见。 随着智能时代的来临和安全意识的提升,MCU 的设计更加复杂化、 高集成化,为了保证MCU 产品的质量, 测试设计是MCU 芯片必不可少的设计内容。
MCU 芯片的可测性设计面临测试电路安全性能差、可靠性低、易测性差、硬件资源紧张、测试成本高等问题。 许多实验指出,电路规模每增加1 个数量级,测试生成时间将增大3 个数量级[1]。 由此可见,必须将测试电路的安全性、可靠性、易测性、复用性、低成本性等要求纳入设计规范, 通过附加硬件或者改变电路结构,使所设计的电路易于测试。
本文通过研究传统的测试结构及其局限性,提出了一种新的测试架构,其测试电路在安全性、可靠性、易测性、复用性、低成本性上有所增强,在与合理的测试策略相结合后,对CKS32F0XX 芯片进行了整体测试。
测试一般分为功能测试和制造测试[2]。 MCU 芯片的测试项目主要有模拟模块、I/O、存储器、数字内核。模拟模块主要有HSE、LSE、HSI、ADC 等模块,I/O 主要测试芯片的引脚功能与性能, 存储器是指FLASH、SRAM 等存储器件,数字内核是指MCU 的数字逻辑电路。
传统的MCU 测试架构如图1 所示, 是将被测模块的输入输出信号直接连接到芯片的引脚上,加上测试模式的使能与选择信号构成的一种测试架构。PIN0、PIN1、PIN2、PIN3 为测试模式选择信号,TEST_EN 为测试模式使能信号。
采用图1 的测试架构会产生以下问题。 首先,在对芯片进行测试时,芯片的状态不能确定,可能导致芯片的测试结果不正确。 其次,客户可能因为误操作进入了芯片的测试模式、 对芯片造成不可逆的损害,例如对Flash 的信息块进行操作, 从而导致芯片重要信息丢失。 最后,芯片引脚资源使用较多,而外围管脚数量有限[3],不能在有限的管脚上实现测试的可控性与可观察性。 同时,引脚资源的使用与测试机采用site的最多数量有关,较多引脚的使用将使得芯片只能用较少site 进行测试,从而增加了测试时间。
MCU 改进后的传统测试架构如图2 所示,虽然使用的引脚数减少,但是其安全性与可靠性依然得不到保障。 首先图2 中的测试码生成电路没有密钥判定单元,不具有安全性;其次,在测试时电路状态不能确定,不具有可靠性;最后测试码没有充分应用,测试码没有当成输入信号在使用,只用在控制逻辑上。
图1 MCU 传统测试架构
图2 MCU 改进后的传统测试架构
测试代价主要分为测试生成代价和测试码置入代价[4]。 采用传统测试结构,满足不了复杂MCU 芯片的可测性设计要求,故需要采用新的测试架构。
测试码生成电路如图3 所示, 上述测试码生成电路包括N 位计数器、M 位移位寄存器、 测试模式锁定单元、密钥判断锁定单元和输出选择单元。 其中,进入测试的辅助信号包括复位信号PIN0、 第一引脚信号PIN1、第二引脚信号PIN2、第三引脚信号PIN3 和加电复位信号Lvr, 所述复位信号PIN0 在低电平时有效,第一引脚信号PIN1 用于屏蔽复位信号, 第二引脚信号PIN2 用于生成测试码的数据输入, 第三引脚信号PIN3 用于生成测试码的时钟输入, 加电复位信号Lvr用于芯片内部的加电复位,保证了芯片在内部加电复位完成后,进入测试模式时整个芯片系统处于复位状态,只有被测试的电路工作,从而保证了测试的可靠性。
图3 测试码生成电路
测试码最高位MST 或复位信号PIN0 作为测试码的输出条件,如果MST 为0,且PIN1 为0,则输出测试码的复位值Reset Value。 在设置测试码最高位为1 时,芯片进入相应的测试模式,此时芯片外部系统复位信号可以为0,也可以为1。 芯片外部系统复位信号为0 时,可以在芯片系统复位状态下测试功能模块;芯片外部系统复位信号为1 时, 可以在芯片系统正常工作状态下测试功能模块。 这就方便了芯片在测试模式与正常工作模式之间的切换, 同时利用这样的特点,也可以测试芯片外部系统复位信号。
改进后的测试架构如图4 所示, 被测单元的测试模式控制由测试码生成电路提供,同时测试输入信号可根据电路的易测性及易调试性,灵活地选择测试输入信号由测试码还是引脚控制。
图4 MCU 改进后测试架构
增加测试模式不需要增加硬件资源,通过在不同的测试阶段采用不同的测试模式,可以减少总体的测试时间,降低成本。 同时,使用较少的引脚还可以实现在测试平台上能够使用更多site 对多个芯片进行同时测试,大大减少了测试时间,降低了测试成本。
综上所述, 改进后的测试架构测试的可靠性、安全性、易测性、复用性、低成本性均有了较大提高。
在设计时,除了考虑测试成本外,还要求必须便于测试分析[5]。 在实际测试中,既需要输入信号能够灵活变化,同时要求输出信号易于观察。由于MCU 测试机台的性能不同,所以在设计可测性时,需要考虑到使用性能不一的测试机对芯片测试的情况,例如对于某些测试机台,测试的时钟频率不能超过20 MHz,故测试频率时就需要设计时钟分频, 再输出到引脚上,如图5 所示,HSI48 模拟模块是芯片内部晶振时钟,输出48 MHz 的频率,故必须设计分频逻辑,最后才能输出到引脚PA3 上。
HSI48 易受芯片工艺制程及外界温度等的影响,CAL 信号可以用来对HSI48 进行粗调,TRIM 信号用来对环境的影响进行细调。 芯片测试的HSI48 的值需要进行校准,经过不断调整CAL 与TRIM,才能将频率调整到目标频率,调整的值写入Flash 信息块中。 基于以上原因,HSI48 的测试需要灵活调试, 故此时HSI48 的输入信号可以选择使用引脚控制。 同时为了节约量产的测试成本,便于在应用板调试,设计了图6所示的测试结构,它的控制信号比较简单,只要打开HSI48 的使能位,就能从芯片引脚上输出测试结果。
图5 HSI48 测试结构示意图
图6 HSI48 简化测试结构示意图
中测(CP)是圆片级的测试,一般测试Flash 等存储器,成测(FT)是芯片封装后的测试,是测试的最后一道工序。根据以上2 种测试结构,HSI48 的测试采用以下测试策略,CP 测试使用图5 的测试结构, 而FT测试使用图6 的测试结构,以节约整体的测试时间,降低测试成本。
在芯片的设计中,可测试性的设计成本是芯片额外的成本, 可测试性的逻辑电路占用了芯片面积。HSI16 测试结构如图7 所示,在图5 与图7 中,使用了同一个分频器,在PB5=PB4=PB3=0 时,选择HSI16 进行分频, 并输出到PA3 引脚上, 在PB5=PB4、PB3=1时,选择HSI48 进行分频,并输出到PA3 引脚上。这里不仅对PA3 引脚进行了复用,同时对分频器进行了复用,以降低测试生成代价,节约了测试成本。
对于MCU 芯片, 并不需要对所有I/O 进行性能测试, 要对I/O 进行归类, 每类选择一个I/O 测试即可,以降低测试码置入代价[4]。然而,对于I/O 的某些性能参数每一颗芯片都必须测试,例如VIH、VOH、VOL、VIL等。
图7 HSI16 测试结构示意图
现在的MCU 芯片中,嵌入式存储器一般有2 种,分别为RAM 与Flash,有时可占到芯片一半以上的面积[4],在CKS32FXX 芯片中存储器占了40%的面积,由此可见对于存储器测试的重要性。 一般存储器端口的信号较多,所需引脚资源较多,客户对于储存器的容量要求增大,导致外部设备对嵌入式存储器的测试变得越来越困难,测试成本越来越高。 内建自测试方法通过在芯片内部设计少量的逻辑电路对存储器进行测试,既节约了引脚资源,便于MCU 较少引脚封装进行测试,又节约了测试时间。 CKS32FXX 芯片中所集成的SRAM 是单端口SRAM, 每块SRAM 为32 kB,总容量达到96 kB,如果分开测试需要3 个测试控制器, 浪费硬件资源。 通过采用MBIST 工具Mentor/tessent15.2, 将多个RAM 集成到一起统一测试,既节约测试引脚,又减少了芯片面积,SRAM BIST生成如图8 所示,3 块SRAM 存储器采用同一个测试控制器。
图8 SRAM BIST 生成
CKS32FXX 芯片中所集成的Flash 采用自检模块,对Flash 的全读、全写、全擦等基本功能进行测试,在FT 测试中节约了大量的时间。
数字内核是MCU 芯片重要的组成部分, 通常采用扫描的可测试设计技术, 商业EDA 工具基本都支持扫描链,CKS32FXX 芯片设计中采用Synopsys/tx16.03 软件,按照不同电压域生成了4 条覆盖率达98.69%的测试模式,供测试机测试使用。
为了测试电路,必须生成测试模式,而测试向量生成也需要根据不同情况进行调整。 图9 采取RZ 采样模式,即采样时钟与时钟是同一频率,这样的好处是可以减少测试向量置入测试机的时间,ppa4 为输入时钟,test_vec_clk 为采样时钟。 图10 采取的为NRZ采样模式,即采样时钟与时钟是偶数倍频,这样的好处是测试机容易调试,时序不会漂移。
由于模拟模块多采用仿真模型进行仿真,而仿真模型不一定准确,导致测试向量并非真实情况,这时就需要根据情况编写测试向量,如ADC、DAC 等模拟模块的测试。
图9 RZ 采样模式
图10 NRZ 采样模式
随着MCU 的设计愈加复杂化、高集成化,为保证产品的质量,测试设计越来越重要,可测性设计的意义在于它以尽可能小的代价获得尽可能高的测试质量,本文中的测试结构与策略在CKS32FXX 芯片中实现,CKS32FXX 是40 万门、 采用UMC 55 nm 工艺实现的MCU 芯片,中测单颗测试时间为2.94 s,成测单颗时间为1.7 s, 采用J750 测试机, 单个测试成本约0.45 元,符合设计目标,在实际应用中具有推广价值。