上回书说到SA0和SA1的测试方法。
这种测试方法是建立在一个前提上的,就是我们可以任意改变输入信号的逻辑值。如果这个输入正好就是整个芯片的输入还好办,直接在芯片外部改变即可。但很多时候我们需要测试芯片内部的各个逻辑单元,它们的输入就会是在芯片内部,不那么好调整了,这可咋办呢?
这个时候人们就想到了芯片中的重要元件——寄存器。如果我们给寄存器存储相应的测试的逻辑值,让这些reg的存储的数据作为我们DFT测试的输入,不就可以达到控制输入信号的目的了吗?但这种方法有一定局限性,这样我们的DFT测试输入位置必须保证是时序逻辑中寄存器的输出pin才行,接收输出信号就还是用探针就可以,没有太多限制。这样的输入限制有可能会导致我们无法完全测试出所有combinational cell的问题,但DFT工程师还是可以控制输入信号测很多次,来尽可能多的覆盖到能测的cell。DFT测试中有一个测试覆盖率的概念,一般都会要求到90%以上。
然而使用reg来作为测试输入又带来了新的问题,那就是我如何给这些reg灌进我想要的值呢?要知道芯片在正常工作时reg之间是会互相影响的,我们很难控制在某一个时刻,很多个reg都正好输出我们想要的某个逻辑值组(一般DFT工程师称这种输入逻辑组叫pattern,比如上篇提到的例子里,11、10就是不同的两个pattern),怎么办呢?为了DFT测试,我们要对芯片进行大刀阔斧的改革!我们要把芯片中所有的正常reg全部升级!升级后的reg在可以正常工作的同时,还要支持一种模式,这种模式可以让我们直接控制每个reg寄存的值。但是我们不可能把每个reg都接一根net到整个芯片的port,那port数量就太多了,根本不现实。如何只用控制一个port就能控制所有reg的值呢?别忘了,我们要控制的是寄存器,是被时钟控制的,时钟每跳变一次,信号往后传输一次,那么人们就想到把所有reg都串起来,后一个reg的输入是前一个reg的输出,我们只需要往第一个reg的输入一个个灌值就行了。比如三个reg串起来,我们想要一个101的pattern,就在第一个时钟周期给第一个reg灌进去1,三个reg状态是1xx;下个时钟周期灌0,状态变为01x,第三个周期灌1,状态变为101.这就是我们想要的pattern,在这个时刻进行测试即可。这里的reg的输入输出就是不同于电路的输入输出了,就是别的pin,称为SI和SO,控制信号SE,我们把这个串称为扫描链(scan chain)。并且芯片工作的时钟很快,DFT测试的时候相对就很慢,我们就需要一个专门的慢速时钟用来测试,相应的这个慢速时钟和正常的时钟要经过一个选择器接到reg上。
而后DFT工程师就要生成各个pattern了,最终把这一串值一个一个送到ATE机台完成测试。呼~写了这么多只讲完了DC mode,但还有AC mode没讲...就是说我们上文提到的测试不涉及电路transition的问题,如果某个cell transition比预期的要慢,也会发生错误,这也得测才行,因此就不能用慢速时钟了,得用常速时钟才行,相应的测试方法更加复杂了。
这两天写的DFT相对细了点,讲的东西就少了点。我昨天刚开始写的时候以为1000个字大概讲讲就行,结果发现大概讲讲也得少说一万字。DFT更深入的内容之后有机会再写吧。
这是我的第23篇文章。微信公众号:伟酱的芯片后端之路
|