專利名稱:用于對(duì)模塊化測(cè)試系統(tǒng)進(jìn)行仿真的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及自動(dòng)測(cè)試設(shè)備(ATE)領(lǐng)域。具體而言,本發(fā)明涉及用于對(duì)模塊化測(cè)試系統(tǒng)進(jìn)行仿真的方法和系統(tǒng)。
背景技術(shù):
對(duì)集成電路的壽命和功能進(jìn)行測(cè)試的測(cè)試程序的開發(fā)和維護(hù)是半導(dǎo)體生產(chǎn)中的主要成本。這種活動(dòng)通常需要在實(shí)際測(cè)試器硬件上工作多個(gè)小時(shí)。然而,除了對(duì)測(cè)試編程語言的語義進(jìn)行檢查之外,現(xiàn)有的半導(dǎo)體測(cè)試器只有很少或沒有對(duì)測(cè)試程序進(jìn)行仿真的能力。這種局限性迫使工程師在實(shí)際測(cè)試器硬件上對(duì)其測(cè)試程序進(jìn)行調(diào)試。但是將測(cè)試器硬件用于測(cè)試程序的開發(fā)對(duì)于昂貴的測(cè)試設(shè)備來說并非一種劃算的利用。此外,由于測(cè)試器通常由多組工程師共享,因此被分配來使用測(cè)試器的時(shí)間量是有限的,這造成了開發(fā)順序進(jìn)行的過程中測(cè)試程序開發(fā)的瓶頸。測(cè)試程序開發(fā)中的這種局限性可以延遲集成電路的生產(chǎn),這將延遲產(chǎn)品的發(fā)布并喪失市場(chǎng)機(jī)遇。
因此,需要一種在不使用昂貴的測(cè)試設(shè)備的情況下對(duì)測(cè)試程序功能進(jìn)行驗(yàn)證的方法和系統(tǒng)。具體而言,需要一種對(duì)帶有測(cè)試程序、供應(yīng)商模塊及其對(duì)應(yīng)的被測(cè)器件(DUT)的模塊化測(cè)試系統(tǒng)進(jìn)行仿真的方法和系統(tǒng)。
本發(fā)明的一個(gè)目的在于減少用于測(cè)試程序開發(fā)的測(cè)試器硬件的使用量,從而優(yōu)化對(duì)珍貴的測(cè)試器設(shè)備的利用。本發(fā)明的另一目的是在測(cè)試程序、模塊和DUT在測(cè)試器設(shè)備上運(yùn)行之前識(shí)別其中的問題。本發(fā)明的又一目的是提供一種用于對(duì)測(cè)試程序、模塊和DUT的并行開發(fā)的環(huán)境,從而減少產(chǎn)品的總開發(fā)時(shí)間。
發(fā)明內(nèi)容所公開的用于對(duì)模塊化測(cè)試系統(tǒng)進(jìn)行仿真的方法提供了可由最終用戶來配置的仿真框架。該框架用于構(gòu)建仿真環(huán)境,以加載供應(yīng)商仿真模塊和DUT模型,并通過仿真框架API來執(zhí)行測(cè)試程序。通過安裝供應(yīng)商的軟件模擬以及通過編輯系統(tǒng)配置文件,該方法能夠?qū)⑿碌墓?yīng)商模塊添加至現(xiàn)有裝置。該方法還使工程師能夠在其自己的工作站上開發(fā)測(cè)試程序,而盡量減少對(duì)昂貴的測(cè)試器設(shè)備的使用。
在一個(gè)實(shí)施例中,一種用于對(duì)模塊化測(cè)試系統(tǒng)進(jìn)行仿真的方法包括提供控制器,其中所述控制器對(duì)至少一個(gè)供應(yīng)商模塊及其對(duì)應(yīng)的DUT模型進(jìn)行控制;創(chuàng)建仿真框架,以便在所述至少一個(gè)供應(yīng)商模塊及其對(duì)應(yīng)的DUT模型之間建立標(biāo)準(zhǔn)接口;配置所述仿真框架;以及利用所述仿真框架對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真。
在另一實(shí)施例中,一種模塊化測(cè)試系統(tǒng)包括一個(gè)或多個(gè)供應(yīng)商模塊、一個(gè)或多個(gè)DUT模型、用于對(duì)所述供應(yīng)商模塊及其對(duì)應(yīng)的DUT模型進(jìn)行控制的控制器、以及用于在所述供應(yīng)商模塊和所述DUT模型之間建立標(biāo)準(zhǔn)接口的仿真框架。所述模塊化測(cè)試系統(tǒng)進(jìn)一步包括用于對(duì)所述仿真框架進(jìn)行配置的裝置、以及利用所述仿真框架對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真的裝置。
下文中,通過結(jié)合下列附圖對(duì)本發(fā)明實(shí)施例的詳細(xì)說明,將更清楚地理解本發(fā)明的上述特征和優(yōu)點(diǎn)以及其附加特征和優(yōu)點(diǎn)。
圖1a示出根據(jù)本發(fā)明一個(gè)實(shí)施例的開放體系測(cè)試系統(tǒng)。
圖1b示出了本發(fā)明一個(gè)實(shí)施例的仿真系統(tǒng)的概觀。
圖2示出了用于對(duì)模塊化測(cè)試系統(tǒng)進(jìn)行仿真的仿真框架。
圖3a示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的用于處理仿真通道對(duì)象的仿真框架。
圖3b示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的階梯、回轉(zhuǎn)(slew)和模擬波形。
圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的用于處理仿真部件的仿真框架。
圖5示出了根據(jù)本發(fā)明一個(gè)實(shí)施的用于處理仿真事件對(duì)象的仿真框架。
圖6示出根據(jù)本發(fā)明一個(gè)實(shí)施例的仿真模塊和加載板模塊之間的通道。
具體實(shí)施方式提供了用于對(duì)模塊化測(cè)試系統(tǒng)進(jìn)行仿真的方法和系統(tǒng)。提供以下描述是為了使本領(lǐng)域技術(shù)人員能夠利用本發(fā)明。對(duì)具體實(shí)施例和應(yīng)用的描述僅僅是作為示例。對(duì)于本領(lǐng)域的技術(shù)人員來說,在此所述示例的各種修改和組合是顯而易見的,并且在此所限定的一般原則也可應(yīng)用于其它示例和應(yīng)用,而不背離本發(fā)明的精神和范圍。因此,本發(fā)明并不局限于所述和所示的各示例,而是應(yīng)被給予與在此所公開的原則和特征一致的最寬的范圍。
圖1示出根據(jù)本發(fā)明一實(shí)施例的開放體系的測(cè)試系統(tǒng)。系統(tǒng)控制器(SysC)102耦合至多個(gè)站點(diǎn)控制器(SiteC)104。該系統(tǒng)控制器亦可耦合至網(wǎng)絡(luò)以便訪問相關(guān)文件。每個(gè)站點(diǎn)控制器通過模塊連接使能器106被耦合成控制位于測(cè)試站點(diǎn)110的一個(gè)或多個(gè)測(cè)試模塊108。模塊連接使能器106容許所連接的硬件模塊108的重新配置,并亦用作數(shù)據(jù)傳遞的總線(用于加載模式數(shù)據(jù)、收集響應(yīng)數(shù)據(jù)、提供控制等)。此外,通過所述模塊連接使能器,一個(gè)站點(diǎn)處的模塊可訪問另一站點(diǎn)處的模塊。模塊連接使能器106容許測(cè)試站點(diǎn)具有相同或不同的模塊配置。換言之,每個(gè)測(cè)試站點(diǎn)可采用不同數(shù)量和類型的模塊。可能的硬件實(shí)施包括專用連接、開關(guān)連接、總線連接、環(huán)形連接和星形連接。模塊連接使能器106可通過交換矩陣來實(shí)施。例如,每個(gè)測(cè)試站點(diǎn)110與通過加載板114連接至對(duì)應(yīng)站點(diǎn)模塊的DUT 112關(guān)聯(lián)。在另一實(shí)施例中,可將單個(gè)站點(diǎn)控制器連接至多個(gè)DUT站點(diǎn)。
系統(tǒng)控制器102用作總的系統(tǒng)管理器。其協(xié)調(diào)站點(diǎn)控制器的行動(dòng)、管理系統(tǒng)級(jí)的并行測(cè)試策略、并且還提供處理機(jī)(handler)/探測(cè)控制以及系統(tǒng)級(jí)的數(shù)據(jù)記錄和誤差處理支持。系統(tǒng)控制器102是測(cè)試工程師對(duì)測(cè)試環(huán)境進(jìn)行驗(yàn)證和調(diào)試的主要交互點(diǎn)。其提供到站點(diǎn)控制器104的網(wǎng)關(guān),并對(duì)多DUT環(huán)境下的站點(diǎn)控制器行動(dòng)的同步進(jìn)行管理。其還運(yùn)行用戶應(yīng)用和工具,如測(cè)試仿真模塊。根據(jù)運(yùn)行設(shè)置,系統(tǒng)控制器102可在獨(dú)立于站點(diǎn)控制器104的運(yùn)行的CPU上應(yīng)用。可選地,系統(tǒng)控制器102和站點(diǎn)控制器104可共享公共CPU。同樣,每個(gè)站點(diǎn)控制器104可在其自己的專用CPU(中央處理單元)上應(yīng)用,或作為同一CPU內(nèi)的獨(dú)立進(jìn)程或線程。
站點(diǎn)控制器104負(fù)責(zé)運(yùn)行測(cè)試計(jì)劃,以對(duì)DUT進(jìn)行測(cè)試。測(cè)試計(jì)劃通過利用框架類(Framework Class)以及封裝了測(cè)試方法的標(biāo)準(zhǔn)或用戶提供的測(cè)試類(Test Class)來創(chuàng)建特定的測(cè)試。此外,測(cè)試計(jì)劃使用標(biāo)準(zhǔn)接口對(duì)硬件進(jìn)行測(cè)試,并限定測(cè)試流程。
本發(fā)明的系統(tǒng)體系在概念上可想像為圖1中所示的分布系統(tǒng),同時(shí)應(yīng)理解的是,各個(gè)系統(tǒng)部件亦可視為集成單片式系統(tǒng)的邏輯部件,而不必是分布式系統(tǒng)的物理部件。利用硬件和軟件級(jí)的標(biāo)準(zhǔn)接口來實(shí)現(xiàn)即插即用或可更換的模塊。測(cè)試器操作系統(tǒng)(TOS)容許用戶使用測(cè)試計(jì)劃編程語言來編寫測(cè)試計(jì)劃程序,并以特定于具體被測(cè)器件(DUT)的方式來操作測(cè)試系統(tǒng)。其還容許用戶將測(cè)試計(jì)劃程序中共用的測(cè)試系統(tǒng)操作序列打包為庫。這些庫有時(shí)稱作測(cè)試類或測(cè)試模板。
圖1b示出本發(fā)明一個(gè)實(shí)施例的仿真系統(tǒng)的概觀。該仿真系統(tǒng)包括控制器模型121、一個(gè)或多個(gè)供應(yīng)商仿真模塊122(注意術(shù)語供應(yīng)商仿真模塊亦稱作供應(yīng)商模塊或仿真模塊)、一個(gè)或多個(gè)被測(cè)器件(DUT)模型124以及加載板模型126。為了裝配仿真環(huán)境,用戶創(chuàng)建系統(tǒng)配置文件和離線配置文件(二者將在下文中詳述),這兩個(gè)文件描述仿真模塊、加載板模型和DUT模型如何通過仿真框架來連接。仿真的執(zhí)行是對(duì)通過測(cè)試程序加載入模塊模型中的模式進(jìn)行的。
仿真框架提供加載板模型126、一個(gè)或多個(gè)測(cè)試器通道128及一個(gè)或多個(gè)DUT通道130。各模塊是從供應(yīng)商的動(dòng)態(tài)鏈接庫(DLL)中加載的。每個(gè)塊代表模塊的單個(gè)實(shí)例。可多次加載一個(gè)DLL,來創(chuàng)建同一模塊類型的多個(gè)實(shí)例。如果模型是以C++編寫的,DUT模型124可提供為DLL,或者,DUT模型124可提供為Verilog方式。
可由用戶來配置加載板模型126。用戶將測(cè)試器通道128映射到對(duì)應(yīng)的DUT通道130,并規(guī)定與每個(gè)連接關(guān)聯(lián)的傳輸延遲。所有的連接均為雙向的,因此,不需要特殊考慮將連接器指定為輸出驅(qū)動(dòng)器或輸入選通。
仿真框架測(cè)試系統(tǒng)仿真的主要部件是仿真框架,所述仿真框架亦稱作框架??蚣芴峁﹥蓚€(gè)基本服務(wù)。首先,其容許在正常測(cè)試器運(yùn)行中通過系統(tǒng)總線以基本上相同的方式對(duì)每個(gè)供應(yīng)商模塊編程。通過對(duì)總線調(diào)用進(jìn)行仿真,測(cè)試程序可寫入仿真的模塊寄存器,由此設(shè)定測(cè)試。另一服務(wù)是對(duì)測(cè)試執(zhí)行的仿真。框架提供用于仿真的模塊和DUT模型間物理連接的模型??蚣苓€提供用于維持各仿真部件執(zhí)行序列的引擎。
當(dāng)測(cè)試系統(tǒng)處于仿真方式(離線方式)中時(shí),其以通過共享存儲(chǔ)器與框架通信的軟件模塊來替代與測(cè)試器模塊硬件通信的器件驅(qū)動(dòng)器。在實(shí)際測(cè)試器中,總線一般使用將二進(jìn)制模式發(fā)送到供應(yīng)商硬件模塊中的可尋址寄存器的命令。在仿真中,同一命令由框架來接收并解釋,以指向具體的仿真模塊。然后,框架將寄存器地址和數(shù)據(jù)發(fā)送到該模塊,以使其將數(shù)據(jù)保存在其仿真寄存器中。由于測(cè)試程序加載最終分解到這些地址/數(shù)據(jù)對(duì)的基本單元中,該簡(jiǎn)單模型支持測(cè)試程序與各模塊的所有交互。該進(jìn)程的副產(chǎn)品是也支持校準(zhǔn)和診斷程序開發(fā)的仿真。
由于在線與離線方式之間運(yùn)行時(shí)軟件的唯一差別在于系統(tǒng)總線器件驅(qū)動(dòng)器,因此,在線環(huán)境中測(cè)試程序的行為與其在離線環(huán)境中的對(duì)應(yīng)行為之間存在高度相關(guān)性。因而,就用戶的測(cè)試程序和底層的測(cè)試器操作系統(tǒng)(TOS)來說,仿真是準(zhǔn)確的。
框架還提供了測(cè)試器模塊和DUT間物理連接的詳細(xì)模型。所有連接被模型化為接線上的電壓,由此再現(xiàn)了基本的物理關(guān)系。由于沒有關(guān)于模塊/DUT交互中數(shù)據(jù)格式的假定,因此框架與仿真模塊和DUT模型的任何組合一起工作,只要其使用該框架所建立的應(yīng)用編程接口(API)。框架提供當(dāng)兩個(gè)電源同時(shí)在同一接線上驅(qū)動(dòng)時(shí)電壓的自動(dòng)協(xié)調(diào)(reconciliation)。
為了控制測(cè)試程序執(zhí)行過程中的仿真,框架在其API中提供了各種方法,以容許供應(yīng)商模塊登記(register for)和接收事件。框架使用這些事件來控制仿真模塊和DUT模型的執(zhí)行序列。通過管理這些事件,并通過規(guī)定模塊如何處理事件的基本規(guī)則,可使用于創(chuàng)建模塊仿真的靈活模板對(duì)模塊化測(cè)試系統(tǒng)的用戶變得可用。
圖2示出了用于對(duì)模塊化測(cè)試系統(tǒng)進(jìn)行仿真的仿真框架。該仿真框架包括仿真管理器(SimMgr)類202、仿真通道(SimChannel)類204、仿真部件(SimComponent)類206和仿真事件管理器(SimEventMgr)類208。SimMgr類202管理仿真進(jìn)程。SimComponent 206是供應(yīng)商使用的基類。在該類中,實(shí)施某些需要的行為。很多方法是虛擬的(C++語言)并需要供應(yīng)商實(shí)施。從SimComponent類206繼承的CAnalogModule類210用于添加所需的供應(yīng)商特定的函數(shù)。
CAnalogModule類210包括一組SimChannel派生的對(duì)象,稱作CSimAWG對(duì)象212和CsimDigitizer對(duì)象214。這些對(duì)象代表系統(tǒng)資源(控制結(jié)構(gòu)中的IResource派生類),這里CSimAWG對(duì)象是對(duì)D/A通道(來自數(shù)字命令的模擬輸出)建模的模擬波形發(fā)生器,而CsimDigitizer對(duì)象對(duì)對(duì)應(yīng)的D/A通道(來自模擬信號(hào)的數(shù)字輸出)建模。IResource派生類需求被合并到這些實(shí)施類中,而這些實(shí)施類使用系統(tǒng)提供的應(yīng)用程序來產(chǎn)生或讀取波形。SimEventMgr類208還包括仿真事件對(duì)象216。下面詳細(xì)描述仿真體系每個(gè)部件。
仿真框架將一組預(yù)定接口和設(shè)計(jì)約束強(qiáng)加于仿真模塊和DUT模型開發(fā)者。這保證了滿足仿真框架需求的模型與仿真中的其它部件兼容。該仿真框架分成三部分,第一部分用于對(duì)仿真模塊和DUT模型共用的API,第二部分對(duì)模塊模型是特定的,而第三部分對(duì)DUT模型是特定的。在一實(shí)施中,供應(yīng)商仿真模塊被視為基于事件的模型,而DUT模型被視為基于時(shí)間的模型。在其它實(shí)施例中,仿真模塊和DUT模型二者可以是基于事件的模型,亦可以是基于時(shí)間的模型。
仿真通道圖3a示出了根據(jù)本發(fā)明一實(shí)施例的用于處理仿真通道對(duì)象的仿真框架。該仿真框架包括模塊類302、DUT類304和仿真通道(SimChannel)類306。SimChannel類306包括仿真波形迭代器(SimWaveformIter)類308,而模塊類302包括仿真通道標(biāo)識(shí)(SimChanID)類310。
在模式執(zhí)行過程中,SimChannel類306分別通過模塊類302和DUT類304為仿真模塊和DUT模型提供I/O能力。為了使用該類,為每個(gè)模塊通道或DUT引腳構(gòu)建一個(gè)空的通道對(duì)象。基于仿真配置文件(描述見下文)中的設(shè)置,這些通道通過仿真框架與加載板上的對(duì)應(yīng)通道相連。仿真框架通過getChannel()方法來獲取SimChannel對(duì)象的基準(zhǔn)。所述getChannel()方法用于進(jìn)行加載板連接。
對(duì)所述模塊和DUT模型共同的元素是對(duì)各通道的I/O調(diào)用。通過設(shè)定特定時(shí)間的電壓電平來完成模塊和DUT之間的所有I/O調(diào)用。這通過來自SimChannel類306的set()方法來提供。該方法容許調(diào)用例程通過將條目寫入與SimChannel類306相連的輸出緩沖器中來規(guī)定特定時(shí)間的電壓。
在一個(gè)實(shí)施例中,set()方法將點(diǎn)寫入電壓時(shí)間歷史中。波形的形狀取決于通道如何配置。圖3b示出了根據(jù)本發(fā)明一實(shí)施例的階梯、回轉(zhuǎn)和模擬波形。在階梯通道中,電壓轉(zhuǎn)換是瞬時(shí)的,這樣t1和t2之間的任何讀取均返回電壓v1。在回轉(zhuǎn)通道中,電壓從其當(dāng)前狀態(tài)轉(zhuǎn)換到所命令的狀態(tài)需要有限量的時(shí)間。轉(zhuǎn)換的斜率由系統(tǒng)配置文件的回轉(zhuǎn)部分中的slewRate參數(shù)來確定。最后,在模擬通道中,電壓不會(huì)變得平坦。時(shí)間點(diǎn)間的電壓通過分段的(piece-wise)線性內(nèi)插來計(jì)算。如果讀取是在最后的點(diǎn)之后進(jìn)行的,則該值根據(jù)最后兩點(diǎn)來外推;因此,如果在針對(duì)t2設(shè)置的調(diào)用后沒有添加點(diǎn),則虛線表示從通道讀取的電壓。
off()方法主要用于關(guān)斷對(duì)電壓的驅(qū)動(dòng)。這在兩個(gè)部件同時(shí)寫一個(gè)通道的相對(duì)側(cè)時(shí)發(fā)生。如果一側(cè)調(diào)用set()方法,則電壓被視為被驅(qū)動(dòng)。如果另一側(cè)調(diào)用off()方法,則電壓被視為無效(passive)。在這種情況下,驅(qū)動(dòng)電壓占優(yōu)勢(shì),并且在兩側(cè)上的電壓分解后,從每個(gè)通道讀取的電壓是以set()命令輸入的電壓。如果兩側(cè)均調(diào)用set()方法或兩側(cè)均調(diào)用off()方法,則電壓歷史被設(shè)置為平均電壓值。
end()方法調(diào)用向仿真框架指示通道已準(zhǔn)備進(jìn)行分解,并且因此準(zhǔn)備好由通道另一側(cè)的部件讀取。如果在通道上未調(diào)用end()方法,則該通道上的信號(hào)不可傳播通過仿真的其余部分,因?yàn)槲唇o通道對(duì)側(cè)上的部件發(fā)信號(hào)從該通道讀取。用戶一般進(jìn)行幾次set調(diào)用來規(guī)定一時(shí)間范圍內(nèi)的電壓,然后在該時(shí)間范圍結(jié)束時(shí)調(diào)用一次end()方法。
SimWaveformIter類308標(biāo)識(shí)波形轉(zhuǎn)換。用戶通過調(diào)用SimChannel類308中的getWaveformIter()方法來獲得波形迭代器的實(shí)例。該方法需要用戶來規(guī)定高電壓和低電壓以及起始和停止時(shí)間。通過使用該數(shù)據(jù),getWaveformIter()方法返回SimWaveformIter類308的實(shí)例。getWaveformIter()方法還容許用戶逐步通過波形的所有邊沿轉(zhuǎn)換。對(duì)于每個(gè)轉(zhuǎn)換,其返回轉(zhuǎn)換的時(shí)間以及轉(zhuǎn)換隨后的波形狀態(tài)。該狀態(tài)被規(guī)定為枚舉類型State_t。該類型的可能值是H(高)、L(低)和Z(三態(tài))。
在本發(fā)明的一個(gè)實(shí)施中,getWaveformIter()方法的一個(gè)示例如下所示void findHighs(SimChannel&sc,const Voltage&vhi,const Voltage&vlo,const Tine&t_start,const Time&t_end){Sim Waveformlter iter=sc.getWaveformIter();for(;!iter.end();iter.next()){if(iter.getState()==Sim WaveformIter::H){cout<<″waveform goes high at″<<iter.getTime().getValue()<<endl;}}}SimWaveformIter類308包括下列方法●start()將迭代器設(shè)置為第一轉(zhuǎn)換。
●end()end()方法檢查迭代器是否在邊沿序列的結(jié)束。注意如果該方法返回真(true),則getTime和getState的結(jié)果是未定義的。
●next()next()方法將迭代移到下一個(gè)轉(zhuǎn)換。
● getTime()getTime()方法返回當(dāng)前轉(zhuǎn)換的時(shí)間。
●getState()getState()方法獲取當(dāng)前邊沿的狀態(tài)。該邊沿適用于邊沿時(shí)間后的基本波形的狀態(tài)。
在另一實(shí)施例中,SimChannel類306提供讀取規(guī)定時(shí)間的通道電壓的能力。這通過read()方法使用單個(gè)的時(shí)間變?cè)獊硗瓿?。read()返回的值從包含時(shí)間相對(duì)電壓信息的表中存儲(chǔ)的 數(shù)據(jù)被內(nèi)插。內(nèi)插方法基于仿真配置文件中定義的通道配置。如果通道被配置成階梯通道,則使用方波模型。如果通道被配置為回轉(zhuǎn)通道,則使用回轉(zhuǎn)模型來內(nèi)插有限時(shí)間內(nèi)發(fā)生的電壓轉(zhuǎn)換。如果通道是模擬通道,則使用分段線性內(nèi)插來計(jì)算電壓。
另外,用戶負(fù)責(zé)管理通道中的數(shù)據(jù)。這通過flush()方法來完成。該方法在清理(clean-up)階段對(duì)通道進(jìn)行登記,其指示在flush變?cè)?guī)定的時(shí)間之前不能發(fā)生讀取。當(dāng)調(diào)用flush()方法時(shí),在下一清理循環(huán)期間,從通道中去除規(guī)定時(shí)間之前的所有記錄。對(duì)于長(zhǎng)模式,flush()方法被周期性地調(diào)用,在這種模式中,存儲(chǔ)器的局限可阻止仿真的完成。
在另一實(shí)施例中,為了寫通道,用于規(guī)定輸出電壓的主要方法是set()方法,其中用戶規(guī)定時(shí)間和相關(guān)電壓作為參數(shù)。該方法為通道的時(shí)間歷史提供輸入。如果驅(qū)動(dòng)被關(guān)斷,則可使用off()方法。這指示如果信號(hào)是從接口的另一側(cè)驅(qū)動(dòng)的,其指示通道上的電壓。off()方法主要用于執(zhí)行驅(qū)動(dòng)和選通操作二者的雙向通道。
用戶可指示已輸入到通道中的該組值已準(zhǔn)備好傳輸?shù)浇涌诘牧硪粋?cè)。這通過過載的end()方法來完成。end()方法向仿真框架指示通道上的值已準(zhǔn)備好讀取,直到并包括end()調(diào)用中規(guī)定的時(shí)間。注意,沒有變?cè)膃nd()方法在set()或off()調(diào)用中默認(rèn)為最大時(shí)間。end()方法被調(diào)用,以使set()方法生效。如果end()方法未被調(diào)用,則沒有數(shù)據(jù)被傳遞到通道的另一端。
在一個(gè)實(shí)施例中,共用的API類如下被使用//create some channels in constructorSimChannel MyStepChannel;SimChannel MySlewChannel;SimChanmel MyAnalogChannel;...
//channel registrationSimChannel*getChannel(const SimChanID&chan){
if(chan.getIndex()==MY_STEP_CHANNEL_INDEX){return&MyStepChannel;}else if(chant.getIndex()==MY_SLEW_CHANNEL_INDEX){return&MySlewChannel;}else if(chan.getlndex()==MY_ANALOG_CHANNEL_INDEX){return&MyAnalogChannel;}…}//running a patternvoid handleEvent(const SimEvent&event,const Time&t){if(event.is WriteEvent()){…//set some output voltages on the step channelMyStepChannel.set(t0,hi_level);MyStepChannel.set(t2,lo_level);MyStepChannel.end(t4);//set some output voltages on the slew channelMySlewChannel.set(t0,hi_level);MySlewChannel.set(t2,lo_level);MySlewChannel.end(t4);//set some output voltages on the analog channelMyAnalogChannel.set(t0,lo_level);MyAnalogChannel.set(t1,hi_level);MyAnalogChannel.set(t2,hi_level);MyAnalogChannel.set(t3,lo_level);MyAnalogChannel.set(t4,lo_level);...
}else if(event.isReadEvent()){…
//now strobe the step channelVoltage strobe_value=MyStepChannel.read(t5);MyStepChannel.flush(t5);//done reading…}...
}注意,對(duì)于模擬信號(hào),波形的所有角均需要加以規(guī)定,而在階梯和回轉(zhuǎn)波形中,僅需規(guī)定轉(zhuǎn)換。
getWaveformIter()方法容許調(diào)用者返回從窗口選通中可用的狀態(tài)。其采用高輸入電壓、低輸入電壓和時(shí)間窗作為自變量,并返回含有過電壓時(shí)間的對(duì)象。
SimChanID類310封裝通道索引。在測(cè)試系統(tǒng)中,有兩組通道索引,一組用于測(cè)試器通道空間,而另一組用于DUT通道空間。SimChanID類對(duì)描述每一空間中的索引的20比特字進(jìn)行封裝。最高有效比特指示該通道索引是用于測(cè)試器通道空間還是DUT通道空間。下一比特是指示所有通道是否全部被使用的標(biāo)志。后面的7比特是分別用于測(cè)試器模塊或DUT的端口或DUT索引。最低有效的12比特用于局部索引值(4K通道)。
SimChanID類310包括下列方法●SimChanID()如果設(shè)置了所有通道比特,該SimChanID()方法返回真(true)。
●getIndex()getIndex()返回局部通道空間的索引。isTestChannel和isDUTChannel方法分別指示索引是用于測(cè)試器還是DUT通道。如果all()方法返回真,則該方法的結(jié)果未定義。
●getPort()getPort()返回給定通道ID的端口。端口和索引的組合唯一地標(biāo)識(shí)加載板一側(cè)上的所有通道。
●isDUTChannel()如果通道處于DUT通道空間中,則isDUTChannel()方法返回真。
●isTesterChannel()如果通道處于測(cè)試器通道空間中,則isTesterChannel()返回真。
仿真部件圖4示出了根據(jù)本發(fā)明一實(shí)施例處理仿真部件的仿真框架。該仿真框架包括仿真部件基(SimComponentBase)類401。SimComponent類402和SimComponentStepped類406是從SimComponentBase類中派生的。供應(yīng)商仿真模塊(Module)類404是從SimComponent類中派生的。在SimComponent類402中開發(fā)虛擬函數(shù),以定義模塊的行為。同樣,DUT類408是從SimComponentStepped類406中派生的。SimComponentBase類401是共用的基類,包括SimComponent 402和SimComponentStepped406類二者共享的方法。
Module類404調(diào)用handleEvent()方法來處理仿真事件對(duì)象。handleEvent()方法與registerEvent()和Simcomponent類的raiseEvent()所提供的一些服務(wù)結(jié)合使用。registerEvent()方法容許模塊利用仿真框架來登記事件。事件可以與單個(gè)通道、一組通道或整個(gè)模塊關(guān)聯(lián)。事件亦可與特定時(shí)間一起登記,在這種情況下,調(diào)用者將事件標(biāo)識(shí)為讀或?qū)懯录?。如果事件是寫事件,則仿真一到達(dá)登記時(shí)間,即調(diào)用針對(duì)模塊的handleEvent()回調(diào)用(callback)。如果事件是讀事件,則僅在事件關(guān)聯(lián)的所有通道被分解并準(zhǔn)備好讀取之后才調(diào)用handleEvent()回調(diào)用(callback)。
當(dāng)響應(yīng)于具有關(guān)聯(lián)時(shí)間的事件(即同步事件)來進(jìn)行handleEvent()調(diào)用時(shí),模塊需要遵循仿真框架中所定義的API提出的規(guī)則,以便仿真正確工作。
●對(duì)于寫事件,模塊可僅設(shè)置寫事件時(shí)間之后的時(shí)間的電壓值。
●對(duì)于讀事件,模塊可僅讀取讀事件時(shí)間之前的時(shí)間的電壓值。
事件亦可不與時(shí)間一起登記(即異步事件)。這些事件由其它模塊或由仿真框架來發(fā)起。這些事件支持兩個(gè)函數(shù)。第一函數(shù)用于處理系統(tǒng)中的某些已知事件,如中斷。第二函數(shù)用于處理模塊間的通信。異步事件容許一個(gè)模塊通知另一模塊已出現(xiàn)了特定組的條件。一個(gè)示例為同步模塊在循環(huán)的開始處通知數(shù)字引腳模塊,使得數(shù)字引腳模塊輸出與當(dāng)前循環(huán)關(guān)聯(lián)的邊沿。
對(duì)于待載入框架中的供應(yīng)商模塊,供應(yīng)商優(yōu)選地從其DLL中導(dǎo)出一些預(yù)定的函數(shù),該DLL支持用于維持仿真模塊模型的對(duì)象的創(chuàng)建和銷毀。該標(biāo)準(zhǔn)化的接口隱藏了加載每個(gè)模型的細(xì)節(jié)。
仿真模型是從可訪問仿真框架的SimComponent類中派生的,為了定義所述模型,用戶實(shí)施SimComponent類中規(guī)定的虛擬函數(shù)。模塊的虛擬函數(shù)分成兩個(gè)類別●派生類需要提供的虛擬方法;以及●具有用戶可重新定義的默認(rèn)實(shí)施的基本函數(shù)。
除了這些函數(shù),該類還為用于事件管理的派生類提供服務(wù)。
通過從仿真框架的SimComponentStepped類406中派生來實(shí)施DUT模型。開發(fā)者實(shí)施SimComponentStepped類406中的虛擬函數(shù)來限定模塊的特性。例如,run()方法調(diào)用DUT模型以在規(guī)定的時(shí)間窗上運(yùn)行。由于接口的簡(jiǎn)單性,在如何對(duì)DUT建模上,給予了模型設(shè)計(jì)者很大的余地。用于C/C++模型的公共接口或連接至服務(wù)器運(yùn)行的Verilog模型的DLL也支持這種余地。如何實(shí)現(xiàn)DUT模型的細(xì)節(jié)與仿真的其它部分隔離,這容許這種模型可互換地使用。為了提供仿真框架中的DUT模型,SimComponentStepped類包括下列虛擬方法●run()用戶通過規(guī)定的時(shí)間窗來運(yùn)行DUT模型。相繼的run()調(diào)用可從上一run()調(diào)用結(jié)束時(shí)開始。
●handleISVM()該方法返回針對(duì)規(guī)定通道的來自參數(shù)測(cè)量單元(PMU)的測(cè)量值。注意,在測(cè)試處于暫停狀態(tài)時(shí)或在測(cè)試之間,使用PMU來進(jìn)行通道上的靜態(tài)DC測(cè)量。
●handleVSIM()該方法返回針對(duì)規(guī)定通道的PMU測(cè)量值。
●handleVSVM()該方法返回針對(duì)規(guī)定通道的PMU測(cè)量值。
為了將DUT模型加載入仿真框架中,DLL導(dǎo)出支持對(duì)DUT模型進(jìn)行維護(hù)的對(duì)象的創(chuàng)建和銷毀的一組預(yù)定函數(shù)。該標(biāo)準(zhǔn)化接口隱藏了加載每個(gè)模型的細(xì)節(jié)。
仿真事件管理器圖5示出了根據(jù)本發(fā)明一實(shí)施例的用于處理仿真事件對(duì)象的仿真框架。該仿真框架包括模塊類502、仿真事件管理器(SimEventMgr)類504和仿真事件(SimEvent)類506。
SimEventMgr類504產(chǎn)生SimEvent類506的實(shí)例。SimEventMgr類504用于維護(hù)供應(yīng)商索引。該索引唯一地標(biāo)識(shí)事件族。通常,事件族與供應(yīng)商關(guān)聯(lián),該供應(yīng)商具有指定的供應(yīng)商ID串。該類還容許用戶創(chuàng)建另一事件族,使得兩組或多組模塊可共享單獨(dú)事件空間中的事件。
在一個(gè)實(shí)施例中,為了針對(duì)特定供應(yīng)商索引來創(chuàng)建SimEventMgr對(duì)象,使用了下列構(gòu)造器SimEventMgr(const OFCString&,SimChanID::ChannelSpace_t)串變?cè)?guī)定事件族。通道空間類型指示事件通道是否測(cè)試器通道(SimChanID::TESTER_SPACE)或DUT通道(SimChanID::DUT_SPACE)。例如,如果用戶希望創(chuàng)建用于“ADCANTEST”測(cè)試器模塊的事件,則調(diào)用下列方法SimEventMgr emgr(_T(″ADVANTEST″),SimChanID::TESTER_SPACE);模塊開發(fā)者為模塊所屬的每個(gè)域來創(chuàng)建SimEventMgr實(shí)例。這些對(duì)象用于模塊存在的持續(xù)時(shí)間中。例如,進(jìn)行下列一組調(diào)用來生成用于各域的事件SimEventMgr m_advmgr(_T(″ADVANTEST″),SimChanID::TESTER_SPACE);SimEventMgr m_msomgr(_T(″MSO_CONSORTIUM″),SimChanID::TESTER_SPACE);SimEventMgr m_pwrmgr(_T(″POWER_GROUP″),SimChanID::TESTER_SPACE);在仿真過程中,這些對(duì)象每個(gè)可生成針對(duì)每個(gè)域的事件。以這種方式,不同供應(yīng)商所創(chuàng)建的模塊可通過對(duì)其共享的域的唯一名稱達(dá)成一致來共享事件。在DUT模型需要登記事件的情況下,使用clientmgr()方法。注意,由于兩個(gè)通道屬于不同的索引空間,在DUT空間和測(cè)試器空間之間進(jìn)行了區(qū)分。
SimEventMgr clientmgr(″CLIENT″,SimChanID::DUT_SPACE);使用各種方法來創(chuàng)建事件。用于創(chuàng)建同步事件的方法包括● SimEvent MakeReadEvent(SimEvent::LocalCode_t)該方法為模塊中的所有通道創(chuàng)建讀事件。
●SimEvent MakeReadEvent(SimChanID::Index_t,SimEvent::LocalCode_t)該方法為單個(gè)通道創(chuàng)建讀事件。
●SimEvent MakeReadDomainEvent(SimEvent::Domain_t,SimEvent::LocalCode_t)該方法為特定域創(chuàng)建異步事件。
●SimEvent MakeWriteEvent(SimEvent::LocalCode_t)該方法為模塊中的所有通道創(chuàng)建寫事件。
●SimEvent MakeWriteEvent(SimChanID::Index_t,SimEvent::LocalCode_t)該方法為單個(gè)通道創(chuàng)建寫事件。
●SimEvent MakeWriteDomainEvent(SimEvent::Domain_t,SimEvent::LocalCode_t)該方法為單個(gè)特定創(chuàng)建寫事件。
所述函數(shù)不利用通道索引作為參數(shù)來為所有通道創(chuàng)建事件。所述函數(shù)利用用戶規(guī)定的通道索引和局部代碼作為參數(shù)來生成特定通道的SimEvent。利用域作為的函數(shù)用于已被系于特定域的一組通道。
用于創(chuàng)建異步事件的方法包括●makeAsyncEvent()該方法用于創(chuàng)建異步的基于序列號(hào)的事件。
●makeDomainEvent()該方法用于為特定通道創(chuàng)建異步的基于域的事件。
●makeSysEvent()該方法用于創(chuàng)建系統(tǒng)事件。
●isMyEvent()該方法檢查事件的域。當(dāng)給定事件屬于與事件管理器相同的域時(shí),其返回真。
在一個(gè)實(shí)施例中,如果生成上述構(gòu)造器示例中的三個(gè)事件管理器的模塊開發(fā)者需要確定事件屬于哪個(gè)域,則使用下列方法。
if(m_advmgr.isMyEvent(event)){//an ADVANTEST event}else if(m_msomgr.isMyEvent(event)){//an MSO event}else if(m_pwrmgr.isMyEvent(event)){//a power event}SimEvent類506包括下列方法。
●isChannelEvent()該方法檢查事件是否針對(duì)單個(gè)通道。如果事件是基于通道的事件,該方法返回真。
●isDomainEvent()該方法檢查事件是否針對(duì)域。如果事件是基于域的事件,該方法返回真。
●isReadEvent()該方法檢查對(duì)象是否讀事件。如果事件是讀事件,該方法返回真。
●isSerialNumberEvent()該方法檢查事件是否針對(duì)特定的序列號(hào)。如果事件是針對(duì)特定序列號(hào)的,該方法返回真。
●isSysEvent()該方法檢查對(duì)象是否系統(tǒng)事件。如果事件是系統(tǒng)事件,該方法返回真。
●isWriteEvent()該方法檢查對(duì)象是否寫事件。如果事件是寫事件,該方法返回真。
●getChan()該方法獲取SimChanID對(duì)象。
●getCode()該方法獲取局部用戶代碼。
●getDomain()該方法獲取域,其返回事件的域索引。
●getSerialNumber()該方法獲取序列號(hào)
●getSysCode()該方法獲取系統(tǒng)事件代碼。
●numArgs()該方法返回用戶自變量號(hào)。
●popArg()該方法訪問隊(duì)列中的下一用戶變?cè)?。注意變?cè)且蕴砑悠涞南嗤涡騺砣』氐摹R坏┮呀?jīng)取回了變?cè)?,其即不再可以從事件獲得了。調(diào)用popArg的次數(shù)多于numArgs()將導(dǎo)致拋出異常。
●pushArg()該方法添加用戶變?cè)?br> 配置文件仿真框架使用兩個(gè)配置文件仿真配置文件和離線配置文件。仿真配置文件規(guī)定什么測(cè)試器模塊在仿真過程中是可用的。離線配置文件規(guī)定加載什么DUT模型及其如何連接到測(cè)試器。
當(dāng)函數(shù)SimTester初始啟動(dòng),加載仿真配置文件。該文件中的設(shè)置在SimTester進(jìn)程的生命過程中保持有效。離線配置文件作為用戶測(cè)試計(jì)劃的一部分來加載。該文件的名稱以測(cè)試程序語言(TPL)命令OfflineDef來規(guī)定。該命令可出現(xiàn)在用戶測(cè)試程序的任何地方,但是傳統(tǒng)上,與其它高級(jí)命令一起置于testplan.tpl文件中。
如下給出了在一個(gè)實(shí)施例中的仿真配置文件。如下所示,文件被分成有層次的塊。全局塊含有全系統(tǒng)范圍的參數(shù)。EMUModule塊指明含有仿真器模型并規(guī)定加載模型的端口的DLL。EMUModule塊包含用于仿真框架的模塊接口。
#T2000 System Software version of the configurationVersion 0.0.1;Global{Initvoltage 0.5 v; # Required. Initial voltage on all# wires.
RecoveryRate 2.5 v/nS; # Optional. For drive conflict in# analog signals.
}# Module Emulator.
EMUModule″module1″# Module DLL.
{Wavefom # Optional. Resource declaration.
{Step 1-32,35; # Step type waveforms on channels 1 thru 32# channel 35.
Analog 33,34; # Analog wavefom on channels 33 and 34.
}Port 1 # Declares the GBUS Port for this module.
{SerialNumber 1; # Required. Should match setting in Module# Configuration File.
productRevision 1;# Required. Should match setting in Module# Configuration File.
Params # To be passed to DLL.
{test ″param1″;key ″abc″;}}Port 8{LogicalPort 3; # Optional. Designate Logical Port to use in# offline configuration file. Default is the# GBUS port.
SerialNumber 2;ProductRevision 1;Parama # Tobe passed to DLL.
{test ″param1″;key ″abc″;}
}}# Module EmulatorEMUModule″module2″{Waveform{Step 1-32;}Port 2{SerialNumber 1;ProductReviaion 1;}}# Module EmulatorEMUModule″dps″{Wave form{Slew 1-32 @ 2.0 v/ns;# The slew rate is required for all slewing# waveforms.
}Port 4{SerialNumber 1 ;ProductRevision 1;}}用戶可提供離線配置文件,來指定將在仿真中使用的DUT模型,并示出這些模型如何附著于測(cè)試器資源。如下示出了在一個(gè)實(shí)施例中的范例離線配置文件。注意,除了PinConnection塊以外,該文件的結(jié)構(gòu)與仿真配置文件相似。全局塊描述全系統(tǒng)范圍的設(shè)置。DUTModel塊描述含有DUT模型并規(guī)定加載DUT模型的端口的DLL。PinConnection塊指示每個(gè)引腳如何連接到測(cè)試器。
# T2000 Version of the syntaxVersoin 0.0.1;Global{RegSelect″patTraceSel″;# Pattern Tracing - Name of OASIS Simulated# Register Selection File.
}DUTModel″DUTlsim″{Wavefom{Step 1-32;}DUT 1{Params{param1Name ″param1Value″;param2Name ″param2Value″;}PinConnections{L3.1 1 1.0 nS;L3.2 8 1.0 nS;L3.3 2 1.0 nS;L3.4 7 1.0 nS;L3.5 3 1.0 nS;L3.6 6 1.0 nS;L3.7 4 1.0 nS;L3.8 5 1.0 nS;L3.9 9 1.0 nS;L3.10 16 1.0 nS;L3.11 10 1.0 nS;L3.12 15 1.0 nS;L3.13 11 1.0 nS;L3.14 14 1.0 nS;L3.15 12 1.0 nS;L3.16 13 1.0 nS;}}}
DUTModel ″DUT2Sim″{Waveform{Slew 1-16 @ 2.0 v/nS;}DUT 2{Params{param1Name ″param1Value″;param2Name ″param2Value″;}PinConnections{L2.1 1; # no delay specified means a delay of 0L2.2 2;L2.3 3;L2.4 4;L2.12 5;L2.13 6;L2.14 7;L2.15 8;}}}框架配置如上所述,需要模塊供應(yīng)商來提供其硬件模塊的仿真。由于這種需求,獲得供應(yīng)商模塊的用戶也就獲得了該部件的仿真模塊。該仿真模塊是DLL的形式,該DLL具有使仿真框架可加載所述模塊的接口。這通過置于供應(yīng)商DLL上的一組預(yù)定接口需求來規(guī)定。為了將仿真模塊加載到仿真框架,由用戶來提供仿真配置文件,或由測(cè)試系統(tǒng)產(chǎn)生仿真配置文件。仿真配置文件列舉要加載的每個(gè)DLL。除了命名DLL,仿真配置文件還規(guī)定與待仿真的測(cè)試系統(tǒng)硬件設(shè)置一致的參數(shù)。這包括模塊端口號(hào)、模塊序列號(hào)、通道號(hào)、每個(gè)通道上波形的格式以及在整個(gè)仿真過程中所用的基準(zhǔn)電壓等。仿真配置文件包括作為仿真的產(chǎn)物的其它參數(shù)。這些包括用于將通道從模塊附著于DUT引腳的邏輯基準(zhǔn)以及當(dāng)加載模塊時(shí)傳遞給DLL的具體參數(shù)。
在一個(gè)實(shí)施例中,仿真管理器執(zhí)行以下功能來對(duì)仿真進(jìn)行配置
●如仿真配置文件所指示的加載所有部件;●在各站點(diǎn)之間分配所述部件和資源;以及●提供中央對(duì)象,用于管理所有線程上的模式執(zhí)行。
此外,仿真管理器還使用仿真配置文件來執(zhí)行以下功能●給出所有部件和接口對(duì)象的實(shí)例;●如配置文件所規(guī)定得連接所有部件;以及●提供從部件通道到接口對(duì)象的映射。
注意,為了保證只有一個(gè)SimMgr實(shí)例,可創(chuàng)建SimMgr的公共方法只有create()方法。使用匹配release()方法在仿真后清理資源。create()方法基于變?cè)斜碇幸?guī)定的仿真配置文件來創(chuàng)建仿真。使用路徑變?cè)獊硪?guī)定仿真配置文件內(nèi)部所引用的其它文本文件的基路徑。這些文件被規(guī)定為相對(duì)于所述基路徑的路徑。
一旦已經(jīng)配置了仿真框架,則等待對(duì)測(cè)試程序和目標(biāo)DUT模型的規(guī)定。在加載測(cè)試程序之前,TOS通知仿真框架已經(jīng)規(guī)定了一個(gè)或多個(gè)DUT模型。這通過稱作離線配置文件的另一配置文件來完成。DUT模型是滿足一組預(yù)定接口需求的以C/C++編寫的最終用戶提供的DLL的形式,或者作為等待來自仿真的連接的服務(wù)器上運(yùn)行的Verilog模型。離線配置文件規(guī)定待加載的一個(gè)或多個(gè)DUT模型。此外,該文件還規(guī)定與DUT的硬件設(shè)置一致的參數(shù)。這包括波形的通道和格式、邏輯測(cè)試器通道到DUT引腳的接線以及與接線關(guān)聯(lián)的傳輸延遲。離線配置文件還包括作為仿真產(chǎn)物的其它參數(shù)。這些包括加載DUT模型時(shí)傳遞給DLL的具體參數(shù)。為了訪問Verilog DUT模型,框架提供了特殊的DUT模型DLL。該模型可配置成連接至特定的服務(wù)器,在服務(wù)器上,運(yùn)行特定Verilog模型的程序正在運(yùn)行。
在一個(gè)實(shí)施例中,仿真框架的初始化包括以下過程1.加載模塊DLL,并基于仿真配置文件在存儲(chǔ)器中給出模塊仿真對(duì)象的實(shí)例;
2.等待由用戶提供離線配置文件(其描述待加載的DUT模型及其如何連接至模塊);3.使用兩個(gè)配置文件來構(gòu)建仿真如下a.使用經(jīng)由總線仿真編程至系統(tǒng)中的站點(diǎn)信息來指定模塊和DUT給各站點(diǎn);b.將模塊連接至該站點(diǎn)專用的仿真框架中的加載板模型;c.將每個(gè)站點(diǎn)中的DUT模型連接至加載板模型的對(duì)應(yīng)站點(diǎn)。
4.當(dāng)卸載測(cè)試計(jì)劃時(shí),卸載步驟3中創(chuàng)建的結(jié)構(gòu),并等待另一離線配置文件。
框架按照每站點(diǎn)來分割仿真,以實(shí)現(xiàn)多線程的仿真。各站點(diǎn)可被并行仿真。這樣,根據(jù)預(yù)定仿真站點(diǎn)來分割仿真使其關(guān)于彼此是線程安全的,并避免了對(duì)可影響性能的任何鎖定機(jī)制的需要。
在加載配置數(shù)據(jù)時(shí),通過經(jīng)由加載板來構(gòu)造模塊中每個(gè)通道到仿真框架中對(duì)象的連接,仿真框架開始構(gòu)建仿真。圖6示出了根據(jù)本發(fā)明一實(shí)施例的仿真模塊和加載板模型之間的通道。通道包括仿真模塊602、雙向接口模型604和加載板模型606。仿真模塊602包含I/O端口SimChannel A603,而類似地,加載板模型包含I/O端口SimChannel B 607。在雙向接口604內(nèi)有兩個(gè)緩沖器,一個(gè)SimWaveform A2B緩沖器608,用于將數(shù)據(jù)從仿真模塊602傳遞至加載板模型606,一個(gè)SimWaveform B2A緩沖器610,用于將數(shù)據(jù)從加載板模型606傳遞至仿真模塊602。如圖6中所示,仿真模塊602寫入SimWaveform A2B緩沖器,并從SimWaveform B2A緩沖器610讀取。另一方面,加載板模型606寫入SimWaveform B2A緩沖器610,而從SimWaveform A2B緩沖器608讀取。
SimWaveform A2B和SimWaveform B2A緩沖器的每個(gè)包含用于存儲(chǔ)有關(guān)通道的信息的表。具體而言,所述緩沖器存儲(chǔ)在任意時(shí)間點(diǎn)從通道對(duì)象中讀取的電壓。利用以上圖3b中所述的幾個(gè)標(biāo)準(zhǔn)模型之一,在表?xiàng)l目時(shí)間之間讀取的通道的電壓值被內(nèi)插。與特定通道一起使用的模型的選擇是用戶可配置的。通過使SimWaveform成為其它波形類的基類來完成交換模型。SimWaveform具有虛擬函數(shù)read(),該函數(shù)返回給定時(shí)間的電壓。每個(gè)派生類根據(jù)被建模的波形(如,SimWaveformStep對(duì)方波建模)來實(shí)施read()。使用模擬技術(shù)來對(duì)窗口選通建模。
如圖6所示,DUT模型612耦合至加載板。該連接通過使用仿真框架的SimWire類的實(shí)例來完成。SimWire類可訪問雙向接口對(duì)象中的緩沖器。SimWire類解決DUT和模塊之間的驅(qū)動(dòng)沖突。注意,圖6中的加載板606和DUT模型612之間的連接是仿真模塊602和加載板606之間連接的鏡像。該連接的細(xì)節(jié)未在圖中示出,以便更清楚地示出模塊和加載板之間的連接。
在構(gòu)造了仿真之后,則加載測(cè)試程序。這涉及對(duì)系統(tǒng)總線設(shè)備驅(qū)動(dòng)器的調(diào)用。在離線方式中,訪問硬件的設(shè)備驅(qū)動(dòng)器被轉(zhuǎn)向至共享的存儲(chǔ)器I/O,從而容許站點(diǎn)控制器進(jìn)程與仿真框架進(jìn)程通信。由于兩個(gè)仿真設(shè)置的唯一不同的部件是設(shè)備驅(qū)動(dòng)器,因此在線和離線測(cè)試仿真的特性之間具有高度相關(guān)性。
框架執(zhí)行在測(cè)試計(jì)劃執(zhí)行過程中,有兩種類型的仿真運(yùn)行。第一是基于事件的仿真。被仿真的部件通常為仿真模塊。這些部件在本質(zhì)上是基于事件的,因?yàn)槠涮匦杂蓽y(cè)試程序在仿真開始前規(guī)定。另一類型的仿真是基于時(shí)間的仿真。被仿真的部件通常是DUT模型。這些部件在本質(zhì)上是基于時(shí)間的,因?yàn)槠錉顟B(tài)基于外部激勵(lì)和當(dāng)前內(nèi)部狀態(tài)前向傳播。仿真框架協(xié)調(diào)基于事件和基于時(shí)間的仿真之間的執(zhí)行和數(shù)據(jù)傳遞。
基于事件的仿真使用登記和處理進(jìn)程。一般為仿真模塊的仿真部件需要為每個(gè)仿真事件登記。在登記后,當(dāng)測(cè)試事件的條件發(fā)生時(shí),調(diào)用部件事件處理機(jī)的回調(diào)用,從而容許執(zhí)行適當(dāng)?shù)姆抡孢^程。
基于時(shí)間的仿真依賴于基于事件的部件的輸出。仿真框架計(jì)算用于俘獲針對(duì)饋送基于時(shí)間的部件的所有通道、由基于事件的部件所產(chǎn)生的激勵(lì)的時(shí)間窗?;跁r(shí)間的部件然后利用所計(jì)算的時(shí)間窗來調(diào)用。從基于事件的部件發(fā)送到基于時(shí)間的部件的數(shù)據(jù)需要是穩(wěn)定的。通過使基于事件的部件在寫入其輸出通道時(shí)滿足一組預(yù)定的時(shí)序需求,來加強(qiáng)該穩(wěn)定性準(zhǔn)則。
仿真框架提供仿真模塊和DUT模型之間驅(qū)動(dòng)沖突的自動(dòng)解決。驅(qū)動(dòng)沖突一般是由測(cè)試程序中的定時(shí)誤差引起的。在其發(fā)生于實(shí)際硬件上之前就識(shí)別這些誤差是至關(guān)重要的,因?yàn)檫@樣做可避免對(duì)DUT和測(cè)試設(shè)備的損壞。加載板模型中的SimWire對(duì)象解決驅(qū)動(dòng)沖突。在SimWire兩側(cè)的部件接收了其輸入后,仿真框架調(diào)用SimWire對(duì)象來分解來自兩側(cè)的信號(hào)。如果只有一個(gè)通道具有驅(qū)動(dòng)輸入,則將其拷貝到其它通道,其中施加適當(dāng)?shù)膫鬏斞舆t。如果SimWire對(duì)象的多側(cè)具有接收的驅(qū)動(dòng)輸入,則設(shè)置輸出緩沖器中的電壓以反映該沖突。一旦設(shè)置了輸出緩沖器,則調(diào)用已經(jīng)登記從其讀取的模塊。然后,訪問分解了的電壓。由于電壓分解封裝在SimWire對(duì)象中,因此該過程對(duì)仿真的其余部分是透明的。
所公開的用于對(duì)模塊化測(cè)試系統(tǒng)進(jìn)行仿真的方法具有多個(gè)有益效果。第一,通過提供對(duì)測(cè)試程序的準(zhǔn)確和詳細(xì)的仿真,所公開的方法使得工程師能夠在其自己的工作站上開發(fā)測(cè)試程序,而不是在昂貴的測(cè)試器設(shè)備上。第二,所公開的方法在測(cè)試程序、仿真模塊和DUT模型在測(cè)試設(shè)備上運(yùn)行前即識(shí)別出其中的問題,從而允許這樣的問題早些得以解決。第三,所公開的方法支持并行開發(fā)模型,可實(shí)現(xiàn)較短的測(cè)試程序開發(fā)周期,并較快地將DUT投入市場(chǎng)。
相關(guān)領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到,在依然采用相同的基本基礎(chǔ)機(jī)制和方法的情況下,可使用所公開實(shí)施例的很多可能的修改和組合。前述描述是關(guān)于特定實(shí)施例所撰寫的,是為了解釋的目的。但是,上述說明性的討論并非意欲窮盡本發(fā)明,或?qū)⒈景l(fā)明限制于所公開的精確形式。就上述教示來說,很多修改和變化都是可能的。選擇和描述上述實(shí)施例是為了解釋本發(fā)明及其實(shí)際應(yīng)用的原理,并使本領(lǐng)域技術(shù)人員更好地利用本發(fā)明以及具有適于可預(yù)期的具體應(yīng)用的各種修改的各種實(shí)施例。
權(quán)利要求
1.一種用于對(duì)模塊化測(cè)試系統(tǒng)進(jìn)行仿真的方法,包括提供控制器,其中所述控制器控制至少一個(gè)供應(yīng)商模塊及其對(duì)應(yīng)的被測(cè)器件(DUT)模型;創(chuàng)建仿真框架,以便在所述至少一個(gè)供應(yīng)商模塊及其對(duì)應(yīng)的DUT模型之間建立標(biāo)準(zhǔn)接口;對(duì)所述仿真框架進(jìn)行配置;以及利用所述仿真框架對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真。
2.根據(jù)權(quán)利要求
1所述的方法,其中創(chuàng)建仿真框架包括創(chuàng)建供應(yīng)商模塊接口,用于處理所述供應(yīng)商模塊與所述模塊化測(cè)試系統(tǒng)之間的通信;以及創(chuàng)建DUT模型接口,用于處理DUT模型與所述供應(yīng)商模塊之間的通信。
3.根據(jù)權(quán)利要求
2所述的方法,其中創(chuàng)建所述供應(yīng)商模塊接口包括根據(jù)第一組預(yù)定標(biāo)準(zhǔn)接口來實(shí)施所述供應(yīng)商模塊;以及實(shí)施用于對(duì)所述供應(yīng)商模塊的特性建模的虛擬函數(shù)。
4.根據(jù)權(quán)利要求
2所述的方法,其中創(chuàng)建所述DUT模型接口包括根據(jù)第二組預(yù)定標(biāo)準(zhǔn)接口來實(shí)施所述DUT模型;以及實(shí)施用于對(duì)所述DUT模型的特性建模的虛擬函數(shù)。
5.根據(jù)權(quán)利要求
2所述的方法,其中創(chuàng)建仿真框架進(jìn)一步包括提供用于設(shè)置所述供應(yīng)商模塊和所述DUT模型的輸出通道處的動(dòng)態(tài)電壓電平的共用接口。
6.根據(jù)權(quán)利要求
1所述的方法,其中對(duì)所述仿真框架進(jìn)行配置包括生成仿真配置文件(SCF);以及將所述仿真配置文件加載至所述模塊化測(cè)試系統(tǒng)。
7.根據(jù)權(quán)利要求
6所述的方法,其中所述仿真配置文件包括一個(gè)或多個(gè)供應(yīng)商模塊DLL;所述模塊化測(cè)試系統(tǒng)的硬件設(shè)置;以及仿真參數(shù)。
8.根據(jù)權(quán)利要求
6所述的方法,其中對(duì)所述仿真框架進(jìn)行配置包括生成離線配置文件;以及將所述離線配置文件加載至所述模塊化測(cè)試系統(tǒng)。
9.根據(jù)權(quán)利要求
8所述的方法,其中所述離線配置文件包括一個(gè)或多個(gè)DUT模型DLL;所述DUT的硬件設(shè)置;以及離線仿真參數(shù)。
10.根據(jù)權(quán)利要求
8所述的方法,其中對(duì)所述仿真框架進(jìn)行配置進(jìn)一步包括加載供應(yīng)商模塊DLL;接收所述離線配置文件;以及根據(jù)所述仿真配置文件和所述離線配置文件來構(gòu)建仿真結(jié)構(gòu)。
11.根據(jù)權(quán)利要求
1所述的方法,其中對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真包括執(zhí)行所述供應(yīng)商模塊的基于事件的仿真;執(zhí)行所述DUT模型的基于時(shí)間的仿真;以及在所述基于事件的仿真和所述基于時(shí)間的仿真之間傳遞仿真數(shù)據(jù)。
12.根據(jù)權(quán)利要求
11所述的方法,其中傳遞仿真數(shù)據(jù)包括在仿真過程中自動(dòng)解決供應(yīng)商模塊和所述DUT模型之間的驅(qū)動(dòng)沖突。
13.根據(jù)權(quán)利要求
1所述的方法,其中對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真包括對(duì)多個(gè)DUT模型進(jìn)行并行測(cè)試。
14.根據(jù)權(quán)利要求
1所述的方法,其中對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真包括將一個(gè)或多個(gè)供應(yīng)商模塊添加至所述模塊化測(cè)試系統(tǒng),而不修改所述仿真框架。
15.根據(jù)權(quán)利要求
1所述的方法,其中對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真包括從所述模塊化測(cè)試系統(tǒng)中去除一個(gè)或多個(gè)供應(yīng)商模塊,而不修改所述仿真框架。
16.根據(jù)權(quán)利要求
1所述的方法,其中對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真包括將一個(gè)或多個(gè)DUT模型添加至所述模塊化測(cè)試系統(tǒng),而不修改所述仿真框架。
17.根據(jù)權(quán)利要求
1所述的方法,其中對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真包括從所述模塊化測(cè)試系統(tǒng)中去除一個(gè)或多個(gè)DUT模型,而不修改所述仿真框架。
18.根據(jù)權(quán)利要求
1所述的方法,其中對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真包括將一個(gè)或多個(gè)DUT模型添加至所述模塊化測(cè)試系統(tǒng),而不停止仿真的運(yùn)行。
19.根據(jù)權(quán)利要求
1所述的方法,其中對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真包括從所述模塊化測(cè)試系統(tǒng)中去除一個(gè)或多個(gè)DUT模型,而不停止仿真的運(yùn)行。
20.一種模塊化測(cè)試系統(tǒng),包括一個(gè)或多個(gè)供應(yīng)商模塊;一個(gè)或多個(gè)被測(cè)器件(DUT)模型;用于控制所述供應(yīng)商模塊及其對(duì)應(yīng)的DUT模型的控制器;用于在所述供應(yīng)商模塊和所述DUT模型之間建立標(biāo)準(zhǔn)接口的仿真框架;用于對(duì)所述仿真框架進(jìn)行配置的裝置;以及用于利用所述仿真框架對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真的裝置。
21.根據(jù)權(quán)利要求
20所述的系統(tǒng),其中所述仿真框架包括供應(yīng)商模塊接口,用于處理所述供應(yīng)商模塊與所述模塊化測(cè)試系統(tǒng)之間的通信;以及DUT模型接口,用于處理DUT模型與所述供應(yīng)商模塊之間的通信。
22.根據(jù)權(quán)利要求
21所述的系統(tǒng),其中所述供應(yīng)商模塊接口包括根據(jù)第一組預(yù)定標(biāo)準(zhǔn)接口實(shí)施的供應(yīng)商模塊接口;以及用于對(duì)所述供應(yīng)商模塊的特性建模的虛擬函數(shù)。
23.根據(jù)權(quán)利要求
21所述的系統(tǒng),其中所述DUT模型接口包括根據(jù)第二組預(yù)定標(biāo)準(zhǔn)接口實(shí)施的DUT模型接口;以及用于對(duì)所述DUT模型的特性建模的虛擬函數(shù)。
24.根據(jù)權(quán)利要求
21所述的系統(tǒng),其中所述仿真框架進(jìn)一步包括用于設(shè)置所述供應(yīng)商模塊和所述DUT模型的輸出通道處的動(dòng)態(tài)電壓電平的共用接口。
25.根據(jù)權(quán)利要求
20所述的系統(tǒng),其中所述用于對(duì)仿真框架進(jìn)行配置的裝置包括用于生成仿真配置文件(SCF)的裝置;以及用于將所述仿真配置文件加載至所述模塊化測(cè)試系統(tǒng)的裝置。
26.根據(jù)權(quán)利要求
25所述的系統(tǒng),其中所述仿真配置文件包括一個(gè)或多個(gè)供應(yīng)商模塊DLL;所述模塊化測(cè)試系統(tǒng)的硬件設(shè)置;以及仿真參數(shù)。
27.根據(jù)權(quán)利要求
25所述的系統(tǒng),其中對(duì)所述仿真框架進(jìn)行配置的裝置包括用于生成離線配置文件的裝置;以及用于將所述離線配置文件加載至所述模塊化測(cè)試系統(tǒng)的裝置。
28.根據(jù)權(quán)利要求
27所述的系統(tǒng),其中所述離線配置文件包括一個(gè)或多個(gè)DUT模型DLL;所述DUT的硬件設(shè)置;以及離線仿真參數(shù)。
29.根據(jù)權(quán)利要求
27所述的系統(tǒng),其中對(duì)所述仿真框架進(jìn)行配置的裝置進(jìn)一步包括用于加載供應(yīng)商模塊DLL的裝置;用于接收所述離線配置文件的裝置;以及用于根據(jù)所述仿真配置文件和所述離線配置文件來構(gòu)建仿真結(jié)構(gòu)的裝置。
30.根據(jù)權(quán)利要求
20所述的系統(tǒng),其中對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真的裝置包括用于執(zhí)行所述供應(yīng)商模塊的基于事件的仿真的裝置;用于執(zhí)行所述DUT模型的基于時(shí)間的仿真的裝置;以及用于在所述基于事件的仿真和所述基于時(shí)間的仿真之間傳遞仿真數(shù)據(jù)的裝置。
31.根據(jù)權(quán)利要求
30所述的系統(tǒng),其中傳遞仿真數(shù)據(jù)的裝置包括用于在仿真過程中自動(dòng)解決供應(yīng)商模塊和所述DUT模型之間的驅(qū)動(dòng)沖突的裝置。
32.根據(jù)權(quán)利要求
20所述的系統(tǒng),其中對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真的裝置包括對(duì)多個(gè)DUT模型進(jìn)行并行測(cè)試的裝置。
33.根據(jù)權(quán)利要求
20所述的系統(tǒng),其中對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真的裝置包括將一個(gè)或多個(gè)供應(yīng)商模塊添加至所述模塊化測(cè)試系統(tǒng)而不修改所述仿真框架的裝置。
34.根據(jù)權(quán)利要求
20所述的系統(tǒng),其中對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真的裝置包括從所述模塊化測(cè)試系統(tǒng)中去除一個(gè)或多個(gè)供應(yīng)商模塊而不修改所述仿真框架的裝置。
35.根據(jù)權(quán)利要求
20所述的系統(tǒng),其中對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真的裝置包括將一個(gè)或多個(gè)DUT模型添加至所述模塊化測(cè)試系統(tǒng)而不修改所述仿真框架的裝置。
36.根據(jù)權(quán)利要求
20所述的系統(tǒng),其中對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真的裝置包括從所述模塊化測(cè)試系統(tǒng)中去除一個(gè)或多個(gè)DUT模型而不修改所述仿真框架的裝置。
37.根據(jù)權(quán)利要求
20所述的系統(tǒng),其中對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真的裝置包括將一個(gè)或多個(gè)DUT模型添加至所述模塊化測(cè)試系統(tǒng)而不停止仿真的運(yùn)行的裝置。
38.根據(jù)權(quán)利要求
20所述的系統(tǒng),其中對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真的裝置包括從所述模塊化測(cè)試系統(tǒng)中去除一個(gè)或多個(gè)DUT模型而不停止仿真的運(yùn)行的裝置。
專利摘要
公開了一種用于對(duì)模塊化測(cè)試系統(tǒng)進(jìn)行仿真的方法。所述方法包括提供控制器,其中所述控制器控制至少一個(gè)供應(yīng)商模塊及其對(duì)應(yīng)的被測(cè)器件(DUT)模型;創(chuàng)建仿真框架,以便在所述至少一個(gè)供應(yīng)商模塊及其對(duì)應(yīng)的DUT模型之間建立標(biāo)準(zhǔn)接口;對(duì)所述仿真框架進(jìn)行配置;以及利用所述仿真框架對(duì)所述模塊化測(cè)試系統(tǒng)進(jìn)行仿真。
文檔編號(hào)G06F17/50GK1997908SQ200580016215
公開日2007年7月11日 申請(qǐng)日期2005年5月23日
發(fā)明者康拉德·穆凱, 安康·普拉馬尼克, 馬克·埃爾斯頓, 足立敏明, 陳良力 申請(qǐng)人:株式會(huì)社愛德萬測(cè)試導(dǎo)出引文BiBTeX, EndNote, RefMan