歐陽丹彤,劉 揚,宋金彩,王浩然,張立明
(1.吉林大學計算機科學與技術學院,吉林長春 130012;2.吉林大學軟件學院,吉林長春 130012;3.符號計算與知識工程教育部重點實驗室(吉林大學),吉林長春 130012;4.中國科學院大學計算機科學與技術學院,北京 100000)
隨著現代半導體工業(yè)的迅猛發(fā)展,如今集成電路已經發(fā)展到由數十億個晶體管組成的規(guī)模.電路的規(guī)模不斷增大但電路尺寸卻不斷縮小,使得電路故障檢測與診斷的難度和成本也隨之不斷增加.為了解決故障診斷效率相對低下的問題,學者們開始研究如何能夠快速、有效地診斷出電路中發(fā)生的故障[1,2].根據電路的實際輸出響應,學者們主要使用基于模型的診斷方法[3~5]和基于測試的診斷方法[6~8]對錯誤的輸出響應進行分析,從而得到該集成電路的候選故障信息.基于模型的診斷方法通過建立集成電路對應的模型,利用電路輸入得到電路的預期行為,然后以預期行為與觀測行為的差異作為診斷方法的輸入,進而計算能夠解釋這種差異的候選診斷解.基于測試的故障診斷方法則是利用測試激勵集對單故障的實際輸出響應與該電路的故障輸出響應進行比較,匹配得到與故障輸出響應最契合的故障,并將這些故障作為候選診斷解,組成候選故障集合.
近幾年,許多學者對基于測試激勵集的故障診斷方法進行了研究.Pomeranz[9]提出了SCOR 方法和DD方法:SCOR 方法通過比較電路在測試激勵集下單故障與真實故障輸出響應之間相同的端口個數,將該值作為該故障的評分,選取評分最高的故障組成候選故障診斷解;DD 方法在SCOR 方法的基礎上通過對比同一測試激勵集下同一輸出端口的單故障與真實故障輸出響應,將輸出響應相同的故障添加到Fsame集合中,再根據SCOR 方法從Fsame中選取評分最高的候選故障組成候選故障診斷解.Pomeranz[10]提出了ADD方法,通過調用DD 方法得到一個初始候選故障集,逐個刪除測試激勵集中的每個測試激勵,將每次刪除測試激勵后的測試激勵集作為DD 方法的新測試激勵集,在上一次候選故障集基礎上再次調用DD 方法得到新的候選故障集,迭代求解直到得到最小的候選故障集.Pomeranz[11]隨后提出了一種兩階段故障診斷方法:首先,使用完整的測試激勵集作為故障診斷測試激勵集調用DD 方法得到一組候選故障集,將該候選故障集與故障診斷測試激勵集作為ADD 方法的輸入得到一組新的候選故障集和新的故障診斷測試激勵集,針對新的候選故障集中的無法區(qū)分故障對,使用診斷測試生成方法,產生可以區(qū)分故障對的新的測試激勵,并將該測試激勵添加到當前故障診斷測試激勵集當中,形成新的故障診斷測試激勵集;其次,將第一階段得到的新故障診斷測試激勵集與新候選故障集作為第二階段DD 方法的輸入,之后的過程與第一階段相同,將最后得到的候選故障集作為候選故障診斷解.
為進一步提高基于測試激勵集的方法的故障診斷準確性,國內外學者通過分析測試激勵與故障之間的關系,開展了關于通過調整測試激勵集順序來提高故障診斷準確性的研究.Bernardi等學者[12]提出通過對測試激勵集進行重新排序的故障診斷方法,通過建立一個基于樹的故障字典,從根節(jié)點到葉節(jié)點遍歷診斷樹來識別每個故障,測試重新排序用于最小化根節(jié)點到葉節(jié)點路徑的長度,以減少故障診斷所需識別的故障信息.Bolchini等學者[13]通過數據挖掘技術提取測試與故障之間的規(guī)則,并結合已有的系統(tǒng)模型建立測試與故障之間的關系,根據該關系對測試激勵集重排序,在保證故障診斷準確性的前提下較大程度減少了故障診斷過程所需的測試激勵數目.Huang 等學者[14]為了提高有限故障信息下的掃描鏈故障診斷分辨率,提出診斷覆蓋率的概念,利用診斷覆蓋率度量測試激勵的診斷準確性,對測試激勵按照診斷覆蓋率大小進行降序重新排序,在保證診斷準確性的情況下有效縮減了測試激勵集規(guī)模.Xue 等學者[15]提出一種結合診斷特征的測試激勵重排序方法,根據測試激勵集對診斷結果的影響程度的大小對測試激勵集進行排序,當遍歷至對診斷結果無影響的測試激勵時便停止診斷過程,得到候選故障集,將最終的候選故障集作為候選故障診斷解,進一步得到最終的診斷解.Bodhe 等學者[16]提出了N-Cover 方法,該方法使用貪婪算法選擇故障數據,每次選擇包含故障位最多的故障數據加入當前解中,直到達到特定的覆蓋要求為止,盡量在滿足覆蓋要求的情況下有效縮減故障數據.Bodhe等學者[17]在N-Cover方法基礎上提出了結合測試激勵集重排序的GTreord方法,該方法在不影響診斷質量的情況下對測試激勵重新排序,然后調用N-Cover 方法,進而較大程度提高了故障診斷方法的準確性.
文獻[9~11]提出的方法主要結合測試激勵集與輸出響應以有效提高故障診斷效率.文獻[12~17]中提出的方法則是利用基于測試激勵集重排序的方法,提高故障診斷的準確率、分辨率以及診斷效率.本文在對以GTreord 為代表的基于測試激勵集重排序的方法深入研究的基礎上,依據每個測試激勵對生成該故障診斷解集合的影響程度的不同,提出了測試分數概念,在此基礎上提出基于測試激勵集重排序的故障診斷方法(Reordering Test Default Diagnosis,RTDD).RTDD 方法依據測試激勵與候選故障診斷解之間的結構特征,得到每個測試激勵的測試分數,根據測試分數對測試激勵進行重新排序,并將重排序后的測試激勵集用于故障診斷.RTDD 方法相較于GTreord 方法,主要有以下優(yōu)點:
(1)RTDD 方法有效縮短了測試激勵集重排序時間,提高了測試激勵集重排序效率;
(2)RTDD 方法中的重排序測試激勵集方法,在保證同樣故障診斷準確性的情況下能有效減少測試激勵個數.
本節(jié)先介紹基于測試激勵集重排序的故障診斷方法中用到的相關概念和定義,隨后結合相關診斷實例詳細介紹GTreord方法[17].
下面介紹GTreord方法中所使用概念的基本定義.
定義1電路中單模型故障為fk,所有可能發(fā)生的模型故障集合為F,電路中真實發(fā)生的故障集合為fobs,用于診斷過程的單個測試激勵為ti,測試激勵集合為T,記為F={f0,f1,f2,…,fn-1,fn},fobs={fk|fk∈F},T={t0,t1,t2,…,tm-1,tm},其中fobs?F.
定義2電路在T下發(fā)生fobs中故障時電路的實際輸出響應為Robs,電路在T下無故障發(fā)生時的預期輸出響應為Rff,電路在T下發(fā)生fk時電路的實際輸出響應為Rk.
定義3電路的第j位(0≤j<輸出端口總數)輸出端口為zj.在電路在ti激勵下,發(fā)生fobs中故障時電路zj的實際輸出響應為Robs(i,j),發(fā)生fk時電路zj的實際輸出響應為Rk(i,j),無故障發(fā)生時電路zj的預期輸出響應為Rff(i,j).
定義4候選故障診斷解的集合為CND.
定義5用于診斷fk時保證CND 中候選故障診斷解數量不變的最小測試子集為T(sub,k),滿足T(sub,k)?T.稱最小測試子集的集合為TSUB,記為TSUB={T(sub,0),T(sub,1),T(sub,2),…,T(sub,n-1),T(sub,n)}.
定義6GTreord 方法重排序測試激勵集為Treord.使用Treord作為N-Cover 方法輸入時,N-Cover 方法返回的診斷測試激勵集為Tcover.
GTreord 方法的兩個過程是測試激勵刪除過程和測試激勵集重排序過程.測試激勵刪除過程通過刪除ti得到每個fk對應的T(sub,k),并由所有T(sub,k)組成TSUB;測試激勵集重排序過程根據每個ti在TSUB中出現的次數,由高到低對T進行重排序.排序后調用N-Cover 方法得到Tcover.GTreord方法偽代碼如算法1所示.
根據偽代碼步驟2 至步驟18 為測試激勵刪除過程,該過程通過模擬每個fk的發(fā)生,將fk作為fobs.并將Robs,Rk,T,F作為DD 方法[9]的輸入進行故障診斷,得到初始CND.之后從T的末尾開始逐個刪除ti,將刪除ti后的T(sub,k)代替T作為DD 方法的輸入得到CNDnew,若刪除ti后CNDnew中的候選診斷解的數量不變則接受ti的刪除,否則將ti重新加入T并將其置于T的首部,對T中ti的下標進行更新.遍歷T后得到最終該fk對應的T(sub,k).依照該過程遍歷F后得到TSUB.下面結合例1 對測試激勵刪除過程進行詳細描述.
例1本實例中使用的電路為c17基準化電路.c17實例具體信息:電路中有2 個可觀測輸出端口z0和z1,F={f0,f1,f2,…,f12,f13},T={t0,t1,t2,…,t5,t6},具體信息如圖1(a)所示.本實例中電路模擬f0為真實故障時,使用T進行故障診斷得到的CND={f0,f2,f5,f11},|CND|=4.
下面詳細介紹GTreord 方法測試激勵刪除過程.如圖1 所示,首先令Tsub=T,隨后從圖1(a)中刪除t6,得到圖1(b)所示的Tsub,使用該測試激勵集進行故障診斷得到CNDnew={f0,f2,f4,f5,f11},與CND相比,|CNDnew| ≠|CND|,所以將t6加入到圖1(b)中所示的Tsub首部,如圖1(c)所示,并更新Tsub的順序.隨后將圖1(c)中t6刪除,得到圖1(d)所示的Tsub,用該測試激勵集進行故障診斷,得到CNDnew={f0,f1,f3,f11},此時|CNDnew|=|CND|,所以徹底刪除t6,隨后刪除t5,得到圖1(e)中所示的Tsub,用該測試激勵集進行故障診斷,得 到 CNDnew={f0,f4,f9,f11,f13},此 時|CNDnew| ≠|CND|,所以將t5加入到圖1(e)中所示的Tsub首部,如圖1(f)所示,并更新Tsub的順序.以此類推,得到針對該模型故障的Tsub.
圖1 GTreord方法測試激勵刪除過程
步驟19 至步驟29 為測試激勵集重排序過程,該過程在測試激勵刪除過程模擬F中所有的fk,在得到Tsub的基礎上,計算每個ti在Tsub中出現的次數,依據出現次數的高低對T進行排序得到最終的Treord.隨后將Treord、F、Rk作為N-Cover方法的輸入,得到最終的Tcover.
在例1的基礎上,介紹GTreord方法的重排序過程,例1中得到的部分T(sub,k)如圖2所示.
圖2 GTreord方法部分T(sub,k)
下面詳細介紹GTreord 方法測試激勵集重排序過程.以圖2 所示部分Tsub為例,T中t0=10100,在T(sub,0)和T(sub,2)中均有出現,所以此時t0的分數為2.以此類推,遍歷Tsub得到所有ti分數后進行排序,最終排序后的Treord如圖3 所示.隨后將Treord用于N-Cover 方法得到Tcover,Tcover={t0,t1,t2,t3,t4}.
圖3 GTreord方法測試激勵集重排序結果
本節(jié)將首先介紹RTDD 方法在測試激勵集重排序過程中所使用概念的基本定義,然后結合偽代碼與具體實例詳細介紹RTDD方法.
下面介紹RTDD方法相關定義.
定義7在RTDD 方法中,將模型故障的集合記為Fnew,Fnew={fK|fK∈F},且滿足Fnew?F.將Fnew中fK的個數記為|Fnew|.
定義8將Fnew中在ti的激勵下滿足Rk≠Rff的fk組成的故障集合稱為候選單故障集合CanF(ti).將CanF(ti)中fk的個數記為||CanF(ti) ||.且當對fk進行診斷時,將候選單故障集合稱為CanF(ti,k).
定義9在ti的激勵下,將||CanF(ti) ||與|Fnew|的比值稱為ti的故障檢測評分det(ti),記為det(ti)=且當對fk進行診斷時,將故障檢測評分稱為det(ti,k),記為det(ti,k)=
定義10在ti的激勵下,將Fnew中所有fk滿足Rk(i,j)=Robs(i,j)的所有元素個數稱為ti的故障診斷評分dia(ti),記 為dia(ti)=且當對fk進行診斷時,將故障診斷評分稱為dia(ti,k),記為dia(ti,k)=
定義11當對fk進行診斷時,將ti的故障檢測評分與故障診斷評分的乘積稱為測試分數s(ti,k),記為s(ti,k)=det(ti,k) ×dia(ti,k),且將F中所有fk對應的s(ti,k)的和記為s(ti).
定義12將RTDD 方法重排序測試激勵集記為RTreord.將使用RTreord作為N-Cover 方法輸入時返回的診斷測試激勵集記為RTcover.
RTDD 方法考慮到每個ti對生成該故障診斷解集合的影響程度不同,提出了測試分數概念,依據ti與候選故障診斷解之間的對應關系,通過比較在ti的激勵下電路的Rk、Robs以及Rff,得到每個ti對得到該故障診斷解集合的影響程度,即為測試分數,根據測試分數對ti進行重新排序得到測試激勵影響程度從高到低排列的新的測試激勵集.得到重排序測試激勵集之后,將其用于N-Cover 方法,得到N-Cover 方法返回的診斷測試激勵集.
在測試集重排序過程中,s(ti)能夠作為ti的測試分數的原因有以下幾點:首先,根據ti與fk之間的對應關系,一個ti可以檢測到多個fk,一個fk也可以被多個ti檢測,但一個ti并不能檢測到所有fk.且在ti激勵下滿足Rff≠Rk的fk更可能是故障診斷解,det(ti)表示ti在CND中能夠檢測的fk占候選故障診斷解的比重,即det(ti)可以表示該T的故障檢測能力對生成該CND 的影響程度;其次,在故障診斷方法中證明了若fk的Rk與Robs具有相同輸出端口的個數越多,則該fk更可能是故障診斷解,dia(ti)為Fnew中所有fk在ti激勵下滿足Rk=Robs的端口個數之和,代表著該ti在故障診斷過程中對生成CND的影響程度.因此本文提出一個觀點:若一個ti能夠檢測到的fk占候選故障診斷解比重越大且在該ti激勵下所有候選故障的Rk與Robs相同輸出端口個數之和越大,那么該ti對生成該CND 的影響程度越大.所以本文結合ti的det(ti)與dia(ti)來計算ti的測試分數.
RTDD方法的偽代碼如算法2所示.
根據偽代碼,RTDD 方法對F中每一個fk進行故障診斷.首先,令fobs=fk,Robs=Rk,使用T、F、Robs作為故障診斷程序DD 方法的輸入,得到初始CND,將該CND 作為測試激勵集重排序過程的故障集合Fnew;其次,比較Fnew中的fk在T中的每一個ti激勵下,電路的Rk與Rff,將滿足Rff≠Rk條件的fk組成針對ti激勵下的CanF(ti,k);然 后,計 算 det(ti,k),即計算 det(ti,k)=的值;接下來,計算dia(ti,k),即計算滿足ti的激勵下,Fnew中所有fk滿足Rk(i,j)=Robs(i,j)條件的輸出端口的個數之和;然后,計算ti的s(ti,k),即計算det(ti,k)與dia(ti,k)的乘積;下一步,遍歷F中每一個fk得到所有的s(ti,k),將同一ti的s(ti,k)相加,得到該ti的s(ti);隨后根據s(ti)由高到低對測試激勵進行重新排序,得到新的測試激勵集RTreord;最后,將RTreord,F,Rk作為N-Cover 方法的輸入,得到滿足N-Cover 方法終止條件時所需ti組成的RTcover.
復雜性分析:設測試激勵對電路進行故障檢測的復雜度為o(t),故障診斷和故障檢測都是通過對比電路輸出是否相同來實現,即故障診斷復雜度也為o(t).設故障個數為n,測試激勵個數為m,GTreord 方法中故障fi對應的測試激勵個數為di,0 <di<m.所有測試激勵個數平均值記為d=,則測試激勵總數為n×d.GTreord 方法需對每個故障檢測每個測試激勵是否可以刪除,其求解復雜度為n×d×o(t);其最壞情況下,不存在可以刪除的測試激勵時,其時間復雜度為n×(m-1)×o(t).RTDD 方法對m個測試激勵求解故障檢測和故障診斷分數,求解復雜度為m×(o(t)+o(t)),即2×m×o(t).隨著電路規(guī)模的增大,n×d和n×(m-1)的增加速度遠高于2×m,RTDD 方法比GTreord 方法的求解優(yōu)勢更明顯.
下面結合例1中c17電路詳細介紹RTDD 方法具體過程.電路模擬f0為真實故障時,部分Robs和Rk與T對應的具體細節(jié)如表1所示.
下面詳細介紹RTDD 方法測試激勵集重排序過程.在 例1 中fobs=f0,經DD 方法得到CND={f0,f2,f5,f11}.令Fnew=CND,以表1中的信息為例,此時僅考慮故障集合Fnew中的故障,以t0的激勵下計算過程為例,首先計算得到CanF(t0,0),Rff=10,R0=00,R2=10,其中Rff=R2,所以R2不能添加到CanF(t0,0)中,以此類推遍歷Fnew中所有模型故障得到CanF(t0,0)={f0,f11};接下來計算det(ti,0),根據已經得到的CanF(t0,0)與Fnew,det(t0,0)==0.5;然后計算dia(t0,0),在t0的激勵下Robs=00,R0=00,R2=10,由 于Robs(0,0)=R0(0,0),Robs(0,1)=R0(0,1),Robs(0,0)≠R2(0,0),Robs(0,1)=R2(0,1),此時dia(t0,0)=1+1+1=3,以此類推最終dia(t0,0)=5;下一步計算s(t0,0),根據計算得到的t0對應 的det(t0,0) 和dia(t0,0),計 算s(t0,0)=det(t0,0)×dia(t0,0)=0.5×5=2.5;遍歷T中所有的ti,得到fobs=f0時所有ti的s(ti,0);遍歷F中所有fk,將同一ti的s(ti,k)相加,得到最終的s(ti);最后依據s(ti)的大小進行測試激勵集重排序,得到RTreord;在得到RTreord之后,將RTreord,F,Rk作為N-Cover 方法的輸入,得到N-Cover 方法返回的RTcover.RTreord與RTcover如圖4所示.
表1 c17部分Rk和Robs對照表
圖4 c17實例RTreord,RTcover
以上便是RTDD 方法的具體實現過程.從以上實例可知,本文提出的RTDD 方法相較于GTreord 方法能夠更加高效地完成測試激勵集重排序過程,且使用更少的ti即可達到與GTreord 方法同樣的診斷要求.下一節(jié)將介紹RTDD 方法和GTreord 方法在ISCAS-85[18]和ISCAS-89[19]基準電路上的實驗結果.
本節(jié)將從測試激勵集重排序效率和排序后測試激勵集診斷準確性兩個方面對RTDD 方法的性能進行實驗分析.
實驗環(huán)境如下:Windows 10,CPU Intel(R)Core(TM)i7-7700HQ 2.80GHz,16GB RAM,python3.使用商業(yè)工具Synopspy Tetramax2018 生成T,使用商業(yè)工具Modelsim SE 10.4 進行故障模擬仿真,得到電路模擬發(fā)生故障時的實際輸出響應Rk與Robs.
本文所使用的故障是Stuck-at 故障(固定型故障),使用該故障的原因有以下幾點:
(1)多數其他類型故障都可以轉換為Stuck-at 故障或用不同Stuck-at故障的組合表示;
(2)一個故障診斷方法若對Stuck-at 故障進行診斷得到較高的分辨率和準確率時,對于電路中的其他類型故障進行診斷也有較高的分辨率和準確率;
(3)其易于生成故障列表,且故障總數隨著電路中的邏輯門的個數線性增長,故障列表的規(guī)模容易控制.
本文采用的集成電路為國際測試領域中廣泛使用的基準化集成電路ISCAS-85[18]和ISCAS-89[19]基準電路.因為RTDD 方法和GTreord 方法的測試激勵集重排序結果僅與測試激勵集相關,不會受到其他因素的影響,所以僅進行一次對比實驗.下面對GTreord 方法和本文提出的RTDD 方法在完全一致的條件下的實驗結果進行分析.
表2 表示ISCAS-85 基準下所有電路使用RTDD 方法的測試激勵集重排序過程與GTreord 方法的結果對比.其中第1 列Circuit Name 表示電路名稱;第2 列Fnum表示該電路用于RTDD 方法與GTreord 方法的fk的數量;第3 列Tnum表示電路初始T中ti的個數;第4 列和第5 列分別表示RTDD 方法和GTreord 方法調用DD 方法的次數;第6 列Rtest表示RTDD 方法中RTcover中ti個數與RTreord中ti個數的比值;第7 列Gtest表示將GTreord 方法中Tcover中ti個數與Treord中ti個數的比值.
表3 表示ISCAS-89 基準下所有電路使用RTDD 方法的測試激勵集重排序過程與GTreord 方法的結果對比,各列內容與表2相同.
從表2和表3中的RTDD方法測試激勵集重排序過程與GTreord方法的實驗結果分析如下.
表2 ISCAS-85實例測試激勵集重排序結果
表3 ISCAS-89實例測試激勵集重排序結果
(1)針對ISCAS-85 基準電路和ISCAS-89 基準電路,在達到同樣診斷準確性情況下,比較RTDD 方法的RTreord與GTreord 方法的Treord,雖然RTcover中ti的個數在電路c432,c3540,c6288,s298,s349,s386,s444,s526n,s832,s953,s35932 電路上多于Tcover中ti的個數,但是在ISCAS-85和ISCAS-89基準下,72.5%的電路上少于Tcover中ti的個數.結果表明,針對大多數電路,RTDD 方法測試激勵集重排序過程得到的RTreord與GTreord 方法測試激勵集重排序得到的Treord相比,達到同樣診斷準確性時需要用于診斷的測試激勵個數更少,RTDD 方法測試激勵集重排序過程得到的RTreord確實具有更好的診斷準確性.
(2)針對ISCAS-85 基準電路和ISCAS-89 基準電路,RTDD 方法相較于GTreord方法調用DD方法的次數更少,節(jié)省了大量的時間成本.根據兩種方法的算法流程可以得到以下推論:每個電路進行測試激勵集重排序時,RTDD 方法的測試激勵集重排序過程需要調用DD 方法的次數等于其Fnum;GTreord 方法需要調用DD方法的次數等于其Fnum×(Tnum+1).盡管RTDD 方法測試激勵集重排序過程調用DD 方法之后需要進行一系列的計算過程,但該過程所需時間與調用一次DD 方法的時間相比而言是可以完全可以接受的.表4表示在ISSCAS-85 和ISCAS-89 基本電路中,RTDD 方法計算一次s(ti)的過程所需時間,以及使用完整T調用一次DD 方法的時間,其中Circuit Name 表示電路名稱;rtime表示RTDD方法計算過程的時間,dtime表示調用一次DD方法的時間,時間單位均為s.盡管GTreord 方法在調用DD方法時的T不斷減小,DD方法所需時間在不斷減小,但是相較于RTDD 方法的計算過程的時間仍然很長.總之,結果表明,RTDD 方法測試激勵集重排序過程具有更好的測試激勵集重排序效率.
表4 RTDD方法測試激勵集重排序過程時間對比
綜上所述,本文提出的RTDD 方法與Gtreord 方法相比有以下兩點優(yōu)勢:
(1)RTDD 方法能夠更加高效地對測試激勵集進行重排序,時間縮短最多可達到4個數量級;
(2)RTDD 方法在保障同樣診斷準確性的情況下,72.5%的電路所需ti更少,平均減少3.645%,具有更強的診斷準確性.
本文提出的RTDD 方法根據測試激勵與候選故障診斷解之間的關系計算測試激勵的測試分數,依據測試分數對測試激勵集進行重排序,并將用重排序后的測試激勵集用故障診斷.在標準測試用例上的實驗表明:RTDD 方法的測試激勵集重排序過程與GTreord 方法相比,調用DD 方法的次數更少,能夠更加高效地進行測試激勵集重排序,求解速度有1~4 個數量級的提高;此外,RTDD 方法重排序后測試激勵集用于故障診斷時,在保證同樣診斷準確性情況下所需測試激勵集個數更少.