上回書說到SA0和SA1的測試方法。
這種測試方法是建立在一個前提上的曼月,就是我們可以任意改變輸入信號的邏輯值彩掐。如果這個輸入正好就是整個芯片的輸入還好辦,直接在芯片外部改變即可洪碳。但很多時候我們需要測試芯片內部的各個邏輯單元,它們的輸入就會是在芯片內部叼屠,不那么好調整了瞳腌,這可咋辦呢?
這個時候人們就想到了芯片中的重要元件——寄存器镜雨。如果我們給寄存器存儲相應的測試的邏輯值嫂侍,讓這些reg的存儲的數(shù)據(jù)作為我們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數(shù)量就太多了,根本不現(xiàn)實驼壶。如何只用控制一個port就能控制所有reg的值呢氏豌?別忘了,我們要控制的是寄存器热凹,是被時鐘控制的泵喘,時鐘每跳變一次,信號往后傳輸一次般妙,那么人們就想到把所有reg都串起來纪铺,后一個reg的輸入是前一個reg的輸出,我們只需要往第一個reg的輸入一個個灌值就行了碟渺。比如三個reg串起來鲜锚,我們想要一個101的pattern,就在第一個時鐘周期給第一個reg灌進去1,三個reg狀態(tài)是1xx芜繁;下個時鐘周期灌0旺隙,狀態(tài)變?yōu)?1x,第三個周期灌1骏令,狀態(tài)變?yōu)?01.這就是我們想要的pattern蔬捷,在這個時刻進行測試即可。這里的reg的輸入輸出就是不同于電路的輸入輸出了榔袋,就是別的pin抠刺,稱為SI和SO,控制信號SE摘昌,我們把這個串稱為掃描鏈(scan chain)速妖。并且芯片工作的時鐘很快,DFT測試的時候相對就很慢聪黎,我們就需要一個專門的慢速時鐘用來測試罕容,相應的這個慢速時鐘和正常的時鐘要經過一個選擇器接到reg上。
而后DFT工程師就要生成各個pattern了稿饰,最終把這一串值一個一個送到ATE機臺完成測試锦秒。呼~寫了這么多只講完了DC mode,但還有AC mode沒講...就是說我們上文提到的測試不涉及電路transition的問題喉镰,如果某個cell transition比預期的要慢旅择,也會發(fā)生錯誤,這也得測才行侣姆,因此就不能用慢速時鐘了生真,得用常速時鐘才行,相應的測試方法更加復雜了捺宗。
這兩天寫的DFT相對細了點柱蟀,講的東西就少了點。我昨天剛開始寫的時候以為1000個字大概講講就行蚜厉,結果發(fā)現(xiàn)大概講講也得少說一萬字长已。DFT更深入的內容之后有機會再寫吧。
這是我的第23篇文章昼牛。微信公眾號:偉醬的芯片后端之路