核心提示:
1.前言 隨著微電子制造技術向深亞微米方向發展,數字集成電路的集成度也越來越高,而半導體工藝中可能引入各種失效,另外材料的缺陷以及工藝的偏差都可能會導致芯片中電路連接的短路、斷路以及器件結間穿通等問題。這樣的物理失效必然導致電路功能或者性能方面的故障。為了保證設計的正確性,在制造和使用芯片時必須要對其進行測試。目前最有效的方法就是采用可測性設計技術(DFT,De-sign For Testability),即在設計時就保證電路的可測性。對數字邏輯電路的測試包括功能測試和結構測試。功能測試是檢測該模塊在系統中工作狀態下的常用功能,并檢測模塊與系統的接口連接。但由于模塊的復雜性,在限定的時間內,窮舉所有的功能并加以測試通常是不可能的。結構電路測試是對內部的電路結構進行全面的測試,以保證該電路實現的功能的正確性。結構電路測試首先需要將電路的物理缺陷模型化,建立故障模型,產生測試激勵。然后將測試激勵從原始輸入引入故障點,并將故障點的測試響應傳播到電路的原始輸出,最后比較測試響應與無故障響應,判斷電路是否有故障。1986~1988年,以歐洲和北美會員為主的聯合測試行動組織(JTAG,joint test action group)率先開展了邊界掃描技術的研究,提出了一系列JTAG邊界掃描標準草案。1990年TEEE和JTAC共同推出了IEEE Std 1149.1邊界掃描標準。其主要思想是:通過在芯片管腳和芯片內部邏輯電路之間,即芯片的邊界上,增加邊界掃捕單元來實現對芯片管腳狀態的串行設定和讀取,從而提供芯片級、板級和系統級的標準測試框架。芯片掃描機制可實現下列目標:測試電路板上不同芯片之間的連接;測試芯片及電路板的功能;應用邊界掃描寄存器完成其他測試功能,如特征分析等。在本項目中將采用邊界掃描技術,針對AlteraDE2,Cyclone II開發板進行結構測試,以保證電路功能的正確性。其基本測試思路是采用遍歷的方式檢測開發板上多個集成器件的不同引腳之間的連通性,在保證連通性的基礎上,引人測試激勵來判斷電路是否有相應的響應輸出。這中間最關鍵的要素是要通過對開發板網表文件的解析,提取出待測的集成器件的引腳連線。本文通過對網表結構的分析,得出解析網表的一種有效方法:首先,針對cadence網表文件,一行一行的讀出每行數據,然后針對每行數據進行語義解析,從中抽出相關的網絡信息,再選取需要測試的元件名,把與這些元件相連的所有引腳抽取出來,存到一個新的文件中去,該文件就包含了待測器件的所有連線信息。2.網表文件格式分析Cadence網表的格式由兩部分組成,一部分是元件的定義,另一部分是網絡的定義。具體如下:2.1 元件的定義格式網絡表第一部分是對所使用的元件進行定義,一個典型的元件定義如下:每一個元件的定義都以符號“[”開始,以符號“]”結束。第一行是元件的名稱,即Designator信息;第二行為元件的封裝,即footprint信息;第三行為元件的注釋。2.2 網絡的定義格式網表的后半部分為電路圖中所使用的網絡定義。每一個網絡定義就是對應電路中有電氣連接關系的一個點。一個典型的網絡定義如下:每一個網絡定義的部分從符號“(”開始,以符號“)”結束。“(”符號下第一行為網絡的名稱。以下幾行都是連接到該網絡點的所有元件的元件標識和引腳號。如C2-2表示電容C2的第2腳連接到網絡。NetC2_2上;X1-1表示還有晶振X1的第1腳也連接到該網絡點上。根據對網表格式的分析可以看出每個元件都具有固定的格式:元件名,元件值,封裝類型,引腳數,X坐標,Y坐標;器件與器件之間用[]隔開;緊隨器件之后的是net;每個net 中的內容都是“元件名-引腳號”(注:個數可能是不一樣);net與net之間用()隔開。本軟件的開發平臺是C++builder6.0,采用的編程語言為C語言。基本思路為從網表文件的讀入解析開始,先從網表文件中刪除元件定義部分,然后是根據輸入待測試的集成器件名進行抽取相關的網絡信息,最后生成一個層次清晰、功能明確的待測元件管腳連線文件。3.網表解析過程分析本文介紹了集成電路可測性設計項目中針對電路網表文件進行解析,提取待測集成器件之間管腳連線的方法和過程。網表析取程序的要求是:在給定網表基礎上,首先將網表轉換為有利于提取網絡定義信息的新網表,即從原有網表文件中刪除所有的元件定義信息和電源模塊及接地模塊信息;然后從新網表中,根據要測試的集成元件名提取出相應的管腳連線信息;最后再把管腳連線信息按照易于測試的文件格式進行保存。3.1 網表文件中元件信息的過濾根據對網表格式的分析可以看出對網表采用單行讀取的方法比較方便,故通過調用fgets()函數來讀取文件的每一行。由于每個器件的信息是用“[]”隔開的,這樣“[”,就可以作為一個元件信息是否開始的標志,而“]”就可以作為一個元件信息是否讀完的標志。對舊網表,首先聲明一個FILE指針,用fopen(“舊網表的路徑”,“r”)打開舊網表文件,然后利用fgets()函數把一行信息讀到臨時字符數組str[]中,使用strcmp()函數分別與“[”和“]”進行比較,以確定某一個元件信息的開始和結束。另外使用strcmp()函數與“(”比較,以確定元件定義的結束和網絡信息定義的開始。按照前面的設計思路,我們需要從網表文件中提取的僅是網絡信息,因此,用feof()函數判別是否讀到舊網表文件尾,如沒有,則通過調用fgets()函數讀取一行信息,只要不是“(”,說明該行信息不屬于網絡定義部分,用continue語句跳過;繼續讀取下一行,直到讀到“(”,說明已經讀到網絡定義部分,可以將該行信息及其之后的所有信息都寫入新的網表文件。打開新網表文件可以看到,新網表文件已經過濾掉了舊網表文件中與測試無關的元件信息部分,而只保留了網絡的定義部分。本部分程序流程如圖1所示。3.2 網表文件中電源及接地模塊的過濾在新網表文件創建成功以后,對其進一步分析可以知道,在新的網表文件中包含了一些電源模塊,如+1.2v,+1.8V,+2.5V,+3.3V,+5V,+12V等;還有接地模塊GND,GNDC等。這些模塊所包含信息仍與測試管腳無關,所以還需要過濾掉。過濾這些電源模塊和接地模塊的方法仍然是采用fgets()函數依次瀆取每一行信息,然后調用strcmp()函數進行判斷是否為對應的電源及接地模塊,如果是,則跳過該模塊的文件塊,從“(”開始,至“)”結束。本部分流程如圖2所示。3.3 待測器件管腳連線文件的生成過程分析經過以上兩步處理后的網表文件中只余下net信息了。在界面上輸入需要測試的元件名,然后在新網表文件中查找出包含所有待測試元件的網絡節點,最后將查找出的網絡結點以一定的格式存入一個新的文件。由于在新網表文件中要抽取出的是在同一個網絡結點中同時包括多個待測元件的那些引腳號,即這些器件之間的連線。因此,在使用fgets()函數一行一行讀取信息時,首先從每行信息中抽取出元件名,然后將該元件名與輸入的待測試的元件名進行比較,如一致則將該行信息寫入新文件,