欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

指定具有階段缺省值的標(biāo)度盤配置數(shù)字系統(tǒng)的方法和系統(tǒng)的制作方法

文檔序號(hào):6433899閱讀:232來(lái)源:國(guó)知局
專利名稱:指定具有階段缺省值的標(biāo)度盤配置數(shù)字系統(tǒng)的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明一般涉及設(shè)計(jì)、模擬和配置數(shù)字裝置、模塊和系統(tǒng),特別涉及用于采用硬件描述語(yǔ)言(HDL)模型描述的數(shù)字裝置、模塊和系統(tǒng)的計(jì)算機(jī)輔助設(shè)計(jì)、模擬和配置的方法和系統(tǒng)。
背景技術(shù)
在典型數(shù)字設(shè)計(jì)過(guò)程中,驗(yàn)證數(shù)字設(shè)計(jì)的邏輯正確性和對(duì)設(shè)計(jì)進(jìn)行調(diào)試(必要時(shí))是在開發(fā)電路布局之前所執(zhí)行的設(shè)計(jì)過(guò)程的重要步驟。雖然的確有可能通過(guò)實(shí)際構(gòu)建數(shù)字設(shè)計(jì)來(lái)測(cè)試數(shù)字設(shè)計(jì),但是數(shù)字設(shè)計(jì)特別是采用集成電路實(shí)現(xiàn)的那些數(shù)字設(shè)計(jì)典型地通過(guò)在計(jì)算機(jī)上模擬數(shù)字設(shè)計(jì)來(lái)驗(yàn)證和調(diào)試,這是部分由于集成電路制造所需的時(shí)間和開支。
在典型自動(dòng)設(shè)計(jì)過(guò)程中,電路設(shè)計(jì)者利用諸如VHDL的硬件描述語(yǔ)言(HDL)使模擬數(shù)字設(shè)計(jì)的高層描述進(jìn)入電子計(jì)算機(jī)輔助設(shè)計(jì)(ECAD)系統(tǒng),從而產(chǎn)生各種電路塊及其互連的數(shù)字表示。在該數(shù)字表示中,總體電路設(shè)計(jì)頻繁地分成經(jīng)常由不同設(shè)計(jì)者單獨(dú)設(shè)計(jì)的較小部分,以下將其稱作設(shè)計(jì)實(shí)體,然后以分層方式對(duì)其進(jìn)行組合以創(chuàng)建總體模型。該分層設(shè)計(jì)技術(shù)非常有用于管理總體設(shè)計(jì)的龐大復(fù)雜性并且有助于模擬期間的錯(cuò)誤檢測(cè)。
ECAD系統(tǒng)將設(shè)計(jì)的數(shù)字表示編譯成具有最適于模擬的格式的模擬模型。然后,模擬器執(zhí)行該模擬模型以檢測(cè)數(shù)字設(shè)計(jì)中的邏輯錯(cuò)誤。
模擬器典型地是通過(guò)施加一系列代表數(shù)字系統(tǒng)輸入的輸入激勵(lì)而工作于模擬模型上的軟件工具。模擬器產(chǎn)生對(duì)輸入激勵(lì)的電路響應(yīng)的數(shù)值表示,然后,該響應(yīng)可作為一系列值在顯示屏幕上進(jìn)行查看,或者經(jīng)常由不同軟件程序作進(jìn)一步的解釋并且以圖形形式呈現(xiàn)在顯示屏幕上。模擬器可運(yùn)行于通用計(jì)算機(jī)或?qū)iT設(shè)計(jì)成用于模擬的其他電子設(shè)備上。在通用計(jì)算機(jī)上完全采用軟件運(yùn)行的模擬器稱作“軟件模擬器”,并且在專門設(shè)計(jì)的電子設(shè)備的幫助下運(yùn)行的模擬器稱作“硬件模擬器”。
隨著數(shù)字設(shè)計(jì)變得日益復(fù)雜,通常在若干抽象層次例如功能、邏輯和電路層次上模擬數(shù)字設(shè)計(jì)。在功能層次上,系統(tǒng)操作是按照寄存器、加法器、存儲(chǔ)器和其他功能單元之間的事務(wù)序列來(lái)描述的。功能層次上的模擬用來(lái)驗(yàn)證數(shù)字系統(tǒng)的高層設(shè)計(jì)。在邏輯層次上,數(shù)字系統(tǒng)是按照邏輯元件如邏輯門和觸發(fā)器來(lái)描述的。邏輯層次上的模擬用來(lái)驗(yàn)證邏輯設(shè)計(jì)的正確性。在電路層次上,每個(gè)邏輯門是按照其電路元器件如晶體管、阻抗、電容和其他這樣的器件來(lái)描述的。電路層次上的模擬提供有關(guān)電壓電平和開關(guān)速度的詳細(xì)信息。
為了驗(yàn)證任何給定模擬運(yùn)行的結(jié)果,采用高級(jí)語(yǔ)言如C或C++編寫的定制開發(fā)的程序被編寫,以處理輸入激勵(lì)(也稱作測(cè)試向量)以產(chǎn)生模擬運(yùn)行的預(yù)期結(jié)果,其中該程序稱作參考模型。然后,由模擬器對(duì)照模擬執(zhí)行模型運(yùn)行測(cè)試向量。然后,將模擬運(yùn)行結(jié)果與通過(guò)參考模型預(yù)測(cè)的結(jié)果進(jìn)行比較,以檢測(cè)被標(biāo)志為錯(cuò)誤的差異。該模擬檢查在驗(yàn)證技術(shù)領(lǐng)域內(nèi)稱作“端到端”檢查。
在現(xiàn)代數(shù)據(jù)處理系統(tǒng)尤其是大型服務(wù)器類計(jì)算機(jī)系統(tǒng)中,必須被裝載以配置系統(tǒng)進(jìn)行操作(或模擬)的鎖存器數(shù)目大幅增加。配置鎖存器增加的一個(gè)原因是很多芯片被設(shè)計(jì)成支持多個(gè)不同配置和操作模式,以便提高制造商利潤(rùn)率以及簡(jiǎn)化系統(tǒng)設(shè)計(jì)。例如,存儲(chǔ)器控制器通常需要大量配置信息,以與不同類型、大小和操作頻率的存儲(chǔ)卡正確地接口。
配置鎖存器增加的第二原因是處理器和其他集成電路芯片內(nèi)日益增加的晶體管預(yù)算(budget)。經(jīng)常地,下一代芯片內(nèi)可用的附加晶體管專用于現(xiàn)有功能單元的復(fù)制副本以便改善容錯(cuò)性和并行性。然而,由于經(jīng)由芯片內(nèi)連線的傳輸延遲不與功能邏輯的操作頻率的提高成正比地減小,因此集中所有類似功能單元的配置鎖存器通常被視作是不期望的。因此,即使復(fù)制功能單元的所有實(shí)例被頻繁地進(jìn)行相同配置,每個(gè)實(shí)例往往還是采用其自己的配置鎖存器副本來(lái)設(shè)計(jì)。這樣,配置僅有一些有效值的操作參數(shù)(例如,總線時(shí)鐘頻率和處理器時(shí)鐘頻率之間的比率)可涉及設(shè)置處理器芯片中數(shù)百個(gè)配置鎖存器。
傳統(tǒng)地,配置鎖存器及其容許范圍值是通過(guò)創(chuàng)建和維護(hù)繁瑣且易于出錯(cuò)的紙件文檔來(lái)指定的。維護(hù)準(zhǔn)確配置文檔的困難和設(shè)置配置鎖存器所需的努力結(jié)合在一起造成的事實(shí)是一家公司內(nèi)的不同部門(例如,功能模擬組、實(shí)驗(yàn)調(diào)試組以及一個(gè)或多個(gè)客戶固件組)經(jīng)常根據(jù)配置文檔單獨(dú)開發(fā)配置軟件。由于配置軟件是由每個(gè)部門單獨(dú)開發(fā)的,因此每個(gè)組可能引入其自己的錯(cuò)誤,并且采用其自己的術(shù)語(yǔ)和命名約定。因此,由不同組開發(fā)的配置軟件不兼容,并且不能容易地在不同組之間共享。
除了開發(fā)配置代碼過(guò)程中的前述缺點(diǎn)之外,傳統(tǒng)配置軟件的編碼也是極其繁瑣的。具體地說(shuō),用來(lái)對(duì)各個(gè)配置比特進(jìn)行建檔的詞匯表經(jīng)常是相當(dāng)麻煩。例如,在至少一些實(shí)現(xiàn)中,配置代碼必須為每個(gè)配置鎖存器比特指定完整的鎖存器名稱,其可包括五十個(gè)或更多ASCII字符。另外,必須單獨(dú)指定每個(gè)配置鎖存器組的有效二進(jìn)制比特模式。
有鑒于此,本發(fā)明認(rèn)識(shí)到提供一種配置采用HDL模型描述的數(shù)字系統(tǒng)的改進(jìn)式方法,特別是允許以具有合理數(shù)量輸入的邏輯方式指定配置信息、然后在涉及數(shù)字系統(tǒng)的設(shè)計(jì)、模擬和商業(yè)實(shí)現(xiàn)的各個(gè)組織部門之間共享該配置信息的改進(jìn)式方法將是有用和所期望的。

發(fā)明內(nèi)容
公開了用于指定數(shù)字系統(tǒng)如集成電路或互連集成電路的集合的配置的改進(jìn)式方法、系統(tǒng)和程序產(chǎn)品。根據(jù)一種方法,在至少一個(gè)硬件定義語(yǔ)言(HDL)文件中指定至少一個(gè)包含數(shù)字系統(tǒng)的功能部分的設(shè)計(jì)實(shí)體。設(shè)計(jì)實(shí)體在邏輯上包含具有多個(gè)不同可能配置值的配置鎖存器,其中每個(gè)不同可能配置值各自對(duì)應(yīng)于數(shù)字系統(tǒng)的功能部分的不同配置。采用HDL文件中的語(yǔ)句,將Dial(標(biāo)度盤)實(shí)體與至少一個(gè)設(shè)計(jì)實(shí)體相關(guān)聯(lián)。Dial具有Dial輸入、Dial輸出、映射表、階段ID和多個(gè)可能輸入值中的缺省輸入值,其中映射表表示可在Dial輸入上接收的多個(gè)可能輸入值的每一個(gè)與Dial輸出的各個(gè)對(duì)應(yīng)輸出值之間的映射。Dial實(shí)體的輸出值控制不同可能配置值中的哪一個(gè)被裝載在配置鎖存器中,并且階段ID表示要施加缺省輸入值的階段。
本發(fā)明的所有目的、特性和優(yōu)點(diǎn)在下面詳細(xì)書面描述中將會(huì)變得清楚。


被認(rèn)為是本發(fā)明特征的新穎特性在所附權(quán)利要求中進(jìn)行闡述。然而,通過(guò)參照下面結(jié)合附圖閱讀時(shí)對(duì)說(shuō)明性實(shí)施例的詳細(xì)描述,本發(fā)明以及優(yōu)選使用方式將會(huì)得到最佳的理解,其中圖1是可用來(lái)實(shí)現(xiàn)本發(fā)明的數(shù)據(jù)處理系統(tǒng)的高層方框圖;
圖2是采用HDL代碼描述的設(shè)計(jì)實(shí)體的圖示;圖3示出包括多個(gè)分層安排的設(shè)計(jì)實(shí)體的示例性數(shù)字設(shè)計(jì);圖4A示出根據(jù)本發(fā)明的包括嵌入配置指定語(yǔ)句的示例性HDL文件;圖4B示出根據(jù)本發(fā)明的包括嵌入配置文件引用語(yǔ)句的示例性HDL文件,其中嵌入配置文件引用語(yǔ)句引用包含配置指定語(yǔ)句的外部配置文件;圖5A是根據(jù)本發(fā)明的LDial原語(yǔ)(primitive)的圖示;圖5B示出根據(jù)本發(fā)明的包括多個(gè)分層安排的設(shè)計(jì)實(shí)體的示例性數(shù)字設(shè)計(jì),其中LDial被實(shí)例化;圖5C示出包括多個(gè)分層安排的設(shè)計(jì)實(shí)體的示例性數(shù)字設(shè)計(jì),其中LDial用來(lái)在設(shè)計(jì)分層結(jié)構(gòu)的多個(gè)不同層次上配置信號(hào)狀態(tài);圖5D是根據(jù)本發(fā)明的開關(guān)的圖示;圖6A是根據(jù)本發(fā)明的IDial的圖示;圖6B是根據(jù)本發(fā)明具有分裂(split)輸出的IDial的圖示;圖7A是根據(jù)本發(fā)明用來(lái)控制其他Dial的CDial的圖示;圖7B示出包括多個(gè)分層安排的設(shè)計(jì)實(shí)體的示例性數(shù)字設(shè)計(jì),其中采用CDial來(lái)控制用來(lái)配置信號(hào)狀態(tài)的低層Dial;圖8是根據(jù)本發(fā)明用來(lái)產(chǎn)生模擬可執(zhí)行模型和關(guān)聯(lián)模擬配置數(shù)據(jù)庫(kù)的模型構(gòu)建過(guò)程的高層流程圖;圖9A示出數(shù)字設(shè)計(jì)的一部分,其示出由配置編譯器實(shí)現(xiàn)的回溯(traceback)過(guò)程檢測(cè)配置信號(hào)與關(guān)聯(lián)配置鎖存器之間的信號(hào)路徑中的反相器的方式;圖9B是根據(jù)本發(fā)明優(yōu)選實(shí)施例,由配置編譯器實(shí)現(xiàn)的示例性回溯過(guò)程的高層流程圖;圖10是根據(jù)本發(fā)明優(yōu)選實(shí)施例,配置編譯器解析配置指定語(yǔ)句內(nèi)的每個(gè)信號(hào)或Dial標(biāo)識(shí)的示例性方法的高層邏輯流程圖;圖11A示出Dial組的圖示;圖11B示出包括以多個(gè)分層安排的Dial組編組的Dial的示例性模擬模型;圖12示出根據(jù)本發(fā)明的模擬配置數(shù)據(jù)庫(kù)的示例性實(shí)施例;圖13是根據(jù)本發(fā)明在數(shù)據(jù)處理系統(tǒng)的易失性存儲(chǔ)器內(nèi)展開(expand)配置數(shù)據(jù)庫(kù)的說(shuō)明性方法的高層邏輯流程圖;
圖14是示出根據(jù)本發(fā)明的模擬模型的模擬運(yùn)行期間易失性系統(tǒng)存儲(chǔ)器的內(nèi)容的方框圖;圖15是在API調(diào)用中所提供的實(shí)例限定符和Dial名稱(dialname)限定符所標(biāo)識(shí)的配置數(shù)據(jù)庫(kù)中定位一個(gè)或多個(gè)Dial實(shí)例數(shù)據(jù)結(jié)構(gòu)(DIDS)的示例性方法的高層邏輯流程圖;圖16A是根據(jù)本發(fā)明在數(shù)字設(shè)計(jì)模擬期間在交互模式中讀取Dial實(shí)例的說(shuō)明性方法的高層邏輯流程圖;圖16B是根據(jù)本發(fā)明在數(shù)字設(shè)計(jì)模擬期間在交互模式中讀取Dial組實(shí)例的示例性方法的高層邏輯流程圖;圖17A是根據(jù)本發(fā)明在數(shù)字設(shè)計(jì)模擬期間在交互模式中設(shè)置Dial實(shí)例的說(shuō)明性方法的高層邏輯流程圖;圖17B是根據(jù)本發(fā)明在數(shù)字設(shè)計(jì)模擬期間在交互模式中設(shè)置Dial組實(shí)例的示例性方法的高層邏輯流程圖;圖18A是根據(jù)本發(fā)明在數(shù)字設(shè)計(jì)模擬期間在批模式中設(shè)置Dial實(shí)例或Dial組實(shí)例的說(shuō)明性方法的高層邏輯流程圖;圖18B是在圖18A所示的過(guò)程內(nèi)調(diào)用的end_phase API的更詳細(xì)流程圖;圖18C是數(shù)據(jù)處理系統(tǒng)環(huán)境的方框圖,其中可利用程序來(lái)訪問和修改配置數(shù)據(jù)庫(kù),以便指定施加缺省值的階段;圖19是示出根據(jù)本發(fā)明的示例性實(shí)驗(yàn)測(cè)試系統(tǒng)的方框圖;圖20是形成圖19的實(shí)驗(yàn)測(cè)試系統(tǒng)的一部分的數(shù)據(jù)處理系統(tǒng)內(nèi)的集成電路芯片的更詳細(xì)方框圖;圖21是用于轉(zhuǎn)換模擬配置數(shù)據(jù)庫(kù)以獲得適用于配置數(shù)字設(shè)計(jì)的硬件實(shí)現(xiàn)的芯片硬件數(shù)據(jù)庫(kù)的說(shuō)明性過(guò)程的高層流程圖;圖22A是根據(jù)本發(fā)明轉(zhuǎn)換配置數(shù)據(jù)庫(kù)以獲得芯片硬件數(shù)據(jù)庫(kù)的示例性方法的高層邏輯流程圖;圖22B示出圖22A所示的轉(zhuǎn)換過(guò)程之后,芯片硬件數(shù)據(jù)庫(kù)內(nèi)的鎖存器數(shù)據(jù)結(jié)構(gòu)的說(shuō)明性實(shí)施例;圖23A是將硬件配置數(shù)據(jù)庫(kù)從非易失性存儲(chǔ)裝置裝載到易失性存儲(chǔ)器中的示例性方法的高層邏輯流程圖,該方法支持與任意大小或配置的數(shù)字系統(tǒng)一起使用硬件配置數(shù)據(jù)庫(kù);圖23B示出根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)字系統(tǒng)的硬件配置數(shù)據(jù)庫(kù)的示例性實(shí)施例;圖24是通過(guò)參考硬件配置數(shù)據(jù)庫(kù)來(lái)識(shí)別與API調(diào)用相關(guān)的數(shù)字系統(tǒng)中的一個(gè)或多個(gè)Dial實(shí)例或Dial組實(shí)例的示例性方法的高層邏輯流程圖;圖25是在系統(tǒng)固件的實(shí)驗(yàn)開發(fā)和測(cè)試期間所開發(fā)的硬件配置數(shù)據(jù)庫(kù)可被壓縮以進(jìn)行商業(yè)實(shí)施的示例性過(guò)程的高層邏輯流程圖;圖26A-26C一起形成根據(jù)本發(fā)明利用軟件壓縮工具壓縮硬件配置數(shù)據(jù)庫(kù)的說(shuō)明性方法的高層邏輯流程圖;圖27是根據(jù)本發(fā)明包括Dial和只讀Dial的示例性配置數(shù)據(jù)庫(kù)的內(nèi)容的圖示;圖28A-28B分別示出根據(jù)本發(fā)明一個(gè)實(shí)施例在配置數(shù)據(jù)庫(kù)的Dial實(shí)例數(shù)據(jù)結(jié)構(gòu)和鎖存器數(shù)據(jù)結(jié)構(gòu)內(nèi)包括只讀父(parent)字段以便支持只讀Dial和只讀Dial組;圖29是將包含RDial和/或RDial組的配置數(shù)據(jù)庫(kù)展開到易失性存儲(chǔ)器中的示例性方法的高層邏輯流程圖;圖30是根據(jù)本發(fā)明用于分析硬件系統(tǒng)的選定狀態(tài)特別是硬件系統(tǒng)的故障狀態(tài)的示例性過(guò)程的高層流程圖;以及圖31是根據(jù)本發(fā)明的圖30的芯片分析器工具生成用來(lái)分析硬件故障的芯片配置報(bào)告和模擬設(shè)置文件的示例性方法的高層邏輯流程圖。
具體實(shí)施例方式
本發(fā)明介紹了一種用于配置和控制數(shù)字系統(tǒng)(例如,一個(gè)或多個(gè)集成電路或其模擬模型)的設(shè)置的配置指定語(yǔ)言及關(guān)聯(lián)方法、系統(tǒng)和程序產(chǎn)品。在至少一個(gè)實(shí)施例中,由負(fù)責(zé)關(guān)聯(lián)設(shè)計(jì)實(shí)體的設(shè)計(jì)者采用HDL代碼創(chuàng)建數(shù)字系統(tǒng)中信號(hào)的配置規(guī)范。因此,能夠最佳指定信號(hào)名稱和關(guān)聯(lián)合法值的、處于設(shè)計(jì)過(guò)程前端的設(shè)計(jì)者負(fù)責(zé)創(chuàng)建配置規(guī)范。配置規(guī)范在模型構(gòu)建時(shí)候與描述數(shù)字系統(tǒng)的HDL一起被編譯,以獲得配置數(shù)據(jù)庫(kù),然后該配置數(shù)據(jù)庫(kù)可被涉及設(shè)計(jì)、模擬和硬件實(shí)現(xiàn)過(guò)程的下游組織小組利用。
現(xiàn)在參照附圖特別是附圖1,示出了根據(jù)本發(fā)明的數(shù)據(jù)處理系統(tǒng)的示例性實(shí)施例。所示實(shí)施例可被實(shí)現(xiàn)為例如工作站、服務(wù)器或大型計(jì)算機(jī)。
如圖所示,數(shù)據(jù)處理系統(tǒng)6包括一個(gè)或多個(gè)處理節(jié)點(diǎn)8a-8n,如果實(shí)現(xiàn)了多于一個(gè)處理節(jié)點(diǎn)8,則這些節(jié)點(diǎn)通過(guò)節(jié)點(diǎn)互連22來(lái)互連。處理節(jié)點(diǎn)8a-8n的每一個(gè)均可包括一個(gè)或多個(gè)處理器10、局部互連16和通過(guò)存儲(chǔ)器控制器17訪問的系統(tǒng)存儲(chǔ)器18。處理器10a-10m最好(但不一定)相同,并且可包括可從NewYork,Armonk的國(guó)際商業(yè)機(jī)器(IBM)公司獲得的PowerPCTM處理器產(chǎn)品線內(nèi)的處理器。除了在總體上表示為處理器核心12的寄存器、指令流邏輯電路和用來(lái)執(zhí)行程序指令的執(zhí)行單元之外,處理器10a-10m中的每一個(gè)還包括芯片內(nèi)高速緩沖存儲(chǔ)器分層結(jié)構(gòu),其用來(lái)將數(shù)據(jù)從系統(tǒng)存儲(chǔ)器18分級(jí)(stage)到關(guān)聯(lián)處理器核心12。
處理節(jié)點(diǎn)8a-8n中的每一個(gè)還包括各自的節(jié)點(diǎn)控制器20,其耦合于局部互連16與節(jié)點(diǎn)互連22之間。每個(gè)節(jié)點(diǎn)控制器20通過(guò)執(zhí)行至少兩個(gè)功能來(lái)作為遠(yuǎn)程處理節(jié)點(diǎn)8的本地代理。第一,每個(gè)節(jié)點(diǎn)控制器20偵測(cè)(snoop)關(guān)聯(lián)局部互連16并且?guī)椭鷮⒈镜赝ㄐ攀聞?wù)發(fā)送到遠(yuǎn)程處理節(jié)點(diǎn)8。第二,每個(gè)節(jié)點(diǎn)控制器20偵測(cè)節(jié)點(diǎn)互連22上的通信事務(wù),并且控制關(guān)聯(lián)局部互連16上的相關(guān)通信事務(wù)。每個(gè)局部互連16上的通信由仲裁器24進(jìn)行控制。仲裁器24根據(jù)由處理器10產(chǎn)生的總線請(qǐng)求信號(hào)來(lái)管理對(duì)局部互連16的訪問,并且編譯對(duì)局部互連16上所偵測(cè)的通信事務(wù)的一致性響應(yīng)。
局部互連16通過(guò)夾層(mezzanine)總線橋26耦合于夾層總線30。夾層總線橋26提供低延遲路徑和高帶寬路徑,其中處理器10通過(guò)該低延遲路徑可直接訪問映射到總線存儲(chǔ)器和/或I/O地址空間的存儲(chǔ)裝置34以及I/O裝置32中的裝置,并且I/O裝置32和存儲(chǔ)裝置34通過(guò)該高帶寬路徑可訪問系統(tǒng)存儲(chǔ)器18。I/O裝置32可包括例如顯示裝置、鍵盤、圖形指示器以及用于連接到外部網(wǎng)絡(luò)或所連裝置的串行和并行端口。存儲(chǔ)裝置34可包括例如為操作系統(tǒng)、中間件和應(yīng)用軟件提供非易失性存儲(chǔ)的光盤或磁盤。在本實(shí)施例中,該應(yīng)用軟件包括ECAD系統(tǒng)35,其可用來(lái)開發(fā)、驗(yàn)證和模擬根據(jù)本發(fā)明方法和系統(tǒng)的數(shù)字電路設(shè)計(jì)。
利用ECAD系統(tǒng)35創(chuàng)建的模擬數(shù)字電路設(shè)計(jì)模型包括至少一個(gè)并且通常是多個(gè)的子單元,這些子單元在下面將被稱作設(shè)計(jì)實(shí)體?,F(xiàn)在參照?qǐng)D2,示出了可利用ECAD系統(tǒng)35創(chuàng)建的示例性設(shè)計(jì)實(shí)體200的方框圖。設(shè)計(jì)實(shí)體200由以下多個(gè)組件定義實(shí)體名稱、實(shí)體端口和由設(shè)計(jì)實(shí)體200執(zhí)行的功能的表示。給定模型內(nèi)的每個(gè)設(shè)計(jì)實(shí)體具有唯一實(shí)體名稱(圖2中未顯式示出),其在設(shè)計(jì)實(shí)體的HDL描述中進(jìn)行聲明。而且,每個(gè)設(shè)計(jì)實(shí)體典型地包含多個(gè)與設(shè)計(jì)實(shí)體之外的信號(hào)的信號(hào)互連,其稱作端口。這些外部信號(hào)可以是總體設(shè)計(jì)的主輸入/輸出(I/O)或者連接到總體設(shè)計(jì)內(nèi)其他設(shè)計(jì)實(shí)體的信號(hào)。
典型地,端口被分類為屬于以下三種不同類型之一輸入端口、輸出端口和雙向端口。設(shè)計(jì)實(shí)體200被示出為具有多個(gè)將信號(hào)傳入設(shè)計(jì)實(shí)體200的輸入端口202。輸入端口202連接到輸入信號(hào)204。另外,設(shè)計(jì)實(shí)體200包括多個(gè)將信號(hào)傳出設(shè)計(jì)實(shí)體200的輸出端口206。輸出端口206連接到一組輸出信號(hào)208。雙向端口210用來(lái)將信號(hào)傳入和傳出設(shè)計(jì)實(shí)體200。雙向端口210依次連接到一組雙向信號(hào)212。設(shè)計(jì)實(shí)體如設(shè)計(jì)實(shí)體200無(wú)需包含所有三種類型的端口,并且在退化的情況下根本不包含端口。為了實(shí)現(xiàn)實(shí)體端口與外部信號(hào)的連接,利用稱作“端口映射”的映射技術(shù)。端口映射(圖2中未顯式示出)包括實(shí)體端口名稱與該實(shí)體所連接的外部信號(hào)之間的指定對(duì)應(yīng)關(guān)系。當(dāng)構(gòu)建模擬模型時(shí),利用ECAD系統(tǒng)35來(lái)根據(jù)端口映射規(guī)范將外部信號(hào)連接到實(shí)體的適當(dāng)端口。
如圖2進(jìn)一步所示,設(shè)計(jì)實(shí)體200包含描述由設(shè)計(jì)實(shí)體200執(zhí)行的一個(gè)或多個(gè)功能的主體部分214。在數(shù)字設(shè)計(jì)的情況下,主體部分214包含邏輯門、存儲(chǔ)元件等的互連以及其他實(shí)體的實(shí)例體(instantiation)。通過(guò)在另一個(gè)實(shí)體內(nèi)實(shí)例化實(shí)體,實(shí)現(xiàn)總體設(shè)計(jì)的分層描述。例如,微處理器可包含相同功能單元的多個(gè)實(shí)例。這樣,微處理器本身經(jīng)常將被建模為單個(gè)實(shí)體。在微處理器實(shí)體內(nèi),將存在任何重復(fù)功能實(shí)體的多個(gè)實(shí)例體。
每個(gè)設(shè)計(jì)實(shí)體由包含描述設(shè)計(jì)實(shí)體所需的信息的一個(gè)或多個(gè)HDL文件指定。雖然本發(fā)明不作要求,但是為便于理解起見,下面將假定每個(gè)設(shè)計(jì)實(shí)體由各自的HDL文件指定。
現(xiàn)在參照?qǐng)D3,示出了本發(fā)明優(yōu)選實(shí)施例中可由ECAD系統(tǒng)35用來(lái)表示數(shù)字設(shè)計(jì)(例如,集成電路芯片或計(jì)算機(jī)系統(tǒng))的示例性模擬模型300的圖示。為了看上去簡(jiǎn)單明了,未顯式示出互連模擬模型300內(nèi)的設(shè)計(jì)實(shí)體的端口和信號(hào)。
模擬模型300包括多個(gè)分層安排的設(shè)計(jì)實(shí)體。如同在任何模擬模型內(nèi)一樣,模擬模型300包括一個(gè)且僅一個(gè)“頂層實(shí)體”,其包括模擬模型300內(nèi)的所有其他實(shí)體。也就是說(shuō),頂層實(shí)體302直接或間接地實(shí)例化數(shù)字設(shè)計(jì)內(nèi)的所有后代實(shí)體。具體地說(shuō),頂層實(shí)體302直接實(shí)例化相同定點(diǎn)執(zhí)行單元(FXU)實(shí)體304的兩個(gè)實(shí)例304a和304b以及浮點(diǎn)單元(FPU)實(shí)體314的單個(gè)實(shí)例(也就是,頂層實(shí)體302是這些實(shí)例的直接祖先)。分別具有實(shí)例體名稱FXU0和FXU1的FXU實(shí)體實(shí)例304又實(shí)例化另外的設(shè)計(jì)實(shí)體,包括分別具有實(shí)例體名稱A0和A1的實(shí)體A 306的多個(gè)實(shí)例體。
設(shè)計(jì)實(shí)體的每個(gè)實(shí)例體具有包含實(shí)體名稱和實(shí)例體名稱的關(guān)聯(lián)描述,該描述在直接祖先實(shí)體的所有后代中必須是唯一的。例如,頂層實(shí)體302具有包括實(shí)體名稱322(即冒號(hào)之前的“TOP”),并且還包括實(shí)例體名稱324(即,冒號(hào)之后的“TOP”)的描述320。在實(shí)體描述內(nèi),當(dāng)特定實(shí)體的僅一個(gè)實(shí)例在祖先實(shí)體內(nèi)被實(shí)例化時(shí),讓實(shí)體名稱匹配實(shí)例體名稱是常見的。例如,在FXU實(shí)體的實(shí)例體304a和304b的每一個(gè)內(nèi)實(shí)例化的實(shí)體B 310和實(shí)體C 312的單個(gè)實(shí)例具有匹配的實(shí)體和實(shí)例體名稱。然而,本發(fā)明不要求該命名約定,如FPU實(shí)體314所示(即,實(shí)例體名稱為FPU0,而實(shí)體名稱為FPU)。
倘若單實(shí)例化或多實(shí)例化的所有實(shí)體具有唯一實(shí)體名稱并且任何直接祖先實(shí)體內(nèi)的所有后代實(shí)體的實(shí)例體名稱相互唯一,則數(shù)字設(shè)計(jì)中的其他實(shí)體內(nèi)的實(shí)體嵌套可以繼續(xù)至任意復(fù)雜層次。
與每個(gè)設(shè)計(jì)實(shí)體實(shí)例體相關(guān)聯(lián)的是所謂的“實(shí)例體標(biāo)識(shí)符”。給定實(shí)例體的實(shí)例體標(biāo)識(shí)符是包括從頂層實(shí)體實(shí)例體名稱開始的封閉實(shí)體實(shí)例體名稱的字符串。例如,F(xiàn)XU實(shí)體304的實(shí)例體304a內(nèi)的實(shí)體C 312的實(shí)例體312a的設(shè)計(jì)實(shí)例體標(biāo)識(shí)符為“TOP.FXU0.B.C”。該實(shí)例體標(biāo)識(shí)符用來(lái)唯一標(biāo)識(shí)模擬模型內(nèi)的每個(gè)實(shí)例體。
如上所述,不管是利用物理集成電路還是作為軟件模型如模擬模型300來(lái)實(shí)現(xiàn),數(shù)字設(shè)計(jì)都典型地包括用來(lái)配置數(shù)字設(shè)計(jì)以執(zhí)行適當(dāng)操作的配置鎖存器。與采用在實(shí)現(xiàn)設(shè)計(jì)之后創(chuàng)建的獨(dú)立配置軟件將值裝載到配置鎖存器中的現(xiàn)有技術(shù)設(shè)計(jì)方法不同,本發(fā)明引入了一種允許數(shù)字設(shè)計(jì)者指定信號(hào)的配置值作為設(shè)計(jì)過(guò)程的自然部分的配置指定語(yǔ)言。具體地說(shuō),本發(fā)明的配置指定語(yǔ)言允許利用嵌入在指定數(shù)字設(shè)計(jì)的一個(gè)或多個(gè)HDL文件中的語(yǔ)句(如圖4A所示)或者嵌入在由指定數(shù)字設(shè)計(jì)的一個(gè)或多個(gè)HDL文件引用的一個(gè)或多個(gè)外部配置文件中的語(yǔ)句(如圖4B所示)指定設(shè)計(jì)配置。
現(xiàn)在參照?qǐng)D4A,示出了根據(jù)本發(fā)明的示例性HDL文件400,在本例中為VHDL文件,其包括嵌入的配置語(yǔ)句。在本例中,HDL文件400指定模擬模型300的實(shí)體A 306,并且包括三個(gè)VHDL代碼部分,即指定端口202、206和210的端口列表402、指定主體部分214內(nèi)的信號(hào)的信號(hào)聲明404以及指定主體部分214的邏輯和功能性的設(shè)計(jì)指定406。散布在這些部分之內(nèi)的是以開頭雙劃符號(hào)(“--”)表示的傳統(tǒng)VHDL注釋。另外,嵌入在設(shè)計(jì)指定406內(nèi)的是根據(jù)本發(fā)明的一個(gè)或多個(gè)配置指定語(yǔ)句,它們共同地由附圖標(biāo)記408和410來(lái)表示。如圖所示,這些配置指定語(yǔ)句采用以“--##”開頭的特殊注釋形式來(lái)編寫,以便允許編譯器容易地區(qū)分配置指定語(yǔ)句與傳統(tǒng)HDL代碼和HDL注釋。配置指定語(yǔ)句最好采用不區(qū)分大小寫和空白的語(yǔ)法。
現(xiàn)在參照?qǐng)D4B,示出了根據(jù)本發(fā)明的示例性HDL文件400’,其包括對(duì)包含一個(gè)或多個(gè)配置指定語(yǔ)句的外部配置文件的引用。如撇號(hào)(’)所示,除了配置指定語(yǔ)句408、410被更替為一個(gè)或多個(gè)(在本例中僅為一個(gè))引用包含配置指定語(yǔ)句408、410的獨(dú)立配置文件414的配置文件引用語(yǔ)句412之外,HDL文件400’在各個(gè)方面都相同于HDL文件400。
配置文件引用語(yǔ)句412如同圖4A所示的嵌入配置指定語(yǔ)句一樣,通過(guò)標(biāo)識(shí)符“--##”被標(biāo)識(shí)為配置語(yǔ)句。配置文件引用語(yǔ)句412包括指令(directive)“cfg_file”,其指示編譯器定位獨(dú)立配置文件414和該配置文件的文件名(即“file00”)。配置文件如配置文件412最好全采用選定文件名擴(kuò)展(例如,“.cfg”),以便可以容易地在數(shù)據(jù)處理系統(tǒng)6所采用的文件系統(tǒng)內(nèi)定位、組織和管理它們。
如下面參照?qǐng)D8進(jìn)一步所述,不管是嵌入在HDL文件內(nèi)還是集中在一個(gè)或多個(gè)配置文件414中,配置指定語(yǔ)句與關(guān)聯(lián)HDL文件一起由編譯器進(jìn)行處理。
根據(jù)本發(fā)明的優(yōu)選實(shí)施例,諸如配置指定語(yǔ)句(configuration specificationstatement)408、410的配置指定語(yǔ)句通過(guò)實(shí)例化這里統(tǒng)稱為“Dial(標(biāo)度盤)”的配置實(shí)體的一個(gè)或多個(gè)實(shí)例,來(lái)幫助配置數(shù)字設(shè)計(jì)內(nèi)的配置鎖存器。Dial的功能是在輸入值與一個(gè)或多個(gè)輸出值之間進(jìn)行映射。一般而言,該輸出值最終直接或間接地指定配置鎖存器的配置值。每個(gè)Dial與數(shù)字設(shè)計(jì)中的特定設(shè)計(jì)實(shí)體相關(guān)聯(lián),該特定設(shè)計(jì)實(shí)體按照慣例是由包含使Dial被實(shí)例化的配置指定語(yǔ)句或配置文件引用語(yǔ)句的HDL源文件指定的設(shè)計(jì)實(shí)體。因此,由于其與特定設(shè)計(jì)實(shí)體的關(guān)聯(lián),其中這些特定設(shè)計(jì)實(shí)體全都具有唯一實(shí)例體標(biāo)識(shí)符,所以只要在任何給定設(shè)計(jì)實(shí)體內(nèi)采用唯一Dial名稱,就可唯一標(biāo)識(shí)數(shù)字設(shè)計(jì)內(nèi)的Dial。應(yīng)當(dāng)清楚的是,很多不同類型的Dial可以以鎖存器Dial(或“LDial”)開頭來(lái)定義。
現(xiàn)在參照?qǐng)D5A,示出了示例性LDial 500的表示。在該特定例子中,具有名稱“bus ratio(總線比率)”的LDial 500用來(lái)根據(jù)表示組件時(shí)鐘頻率與總線時(shí)鐘頻率之間的選定比率的列舉輸入值,來(lái)指定數(shù)字設(shè)計(jì)內(nèi)的配置鎖存器的值。
如圖所示,LDial 500如同所有Dial一樣在邏輯上具有單個(gè)輸入502、一個(gè)或多個(gè)輸出504以及將每個(gè)輸入值映射到各自關(guān)聯(lián)的每個(gè)輸出504的輸出值的映射表503。也就是,映射表503指定一個(gè)或多個(gè)唯一輸入值的每一個(gè)與各自關(guān)聯(lián)的唯一輸出值之間的一一映射。由于LDial的功能是指定配置鎖存器的合法值,因此LDial 500的每個(gè)輸出504在邏輯上控制裝載到各個(gè)配置鎖存器505中的值。為了防止沖突配置,每個(gè)配置鎖存器505由一個(gè)且僅一個(gè)能夠設(shè)置配置鎖存器505的任何類型的Dial直接指定。
在輸入502,LDial 500接收包括“2:1”、“3:1”和“4:1”的一組合法值中的列舉輸入值(即,字符串)。列舉輸入值可采用軟件(例如,通過(guò)軟件模擬器或服務(wù)處理器固件)來(lái)直接提供,或者可由另一個(gè)Dial的輸出來(lái)提供,如下面參照?qǐng)D7A進(jìn)一步所述。對(duì)于每個(gè)列舉輸入值,LDial 500的映射表503表示每個(gè)配置鎖存器505的選定二進(jìn)制值(即“0”或“1”)。
現(xiàn)在參照?qǐng)D5B,示出了在邏輯上包括Dial的模擬模型的圖示。圖5B中如撇號(hào)所示的模擬模型300’包括以與圖3的模擬模型300相同的分層關(guān)系安排的相同設(shè)計(jì)實(shí)體,該模擬模型300’示出Dial的兩個(gè)特性,即復(fù)制(replication)和范圍。
復(fù)制是每次實(shí)例化關(guān)聯(lián)設(shè)計(jì)實(shí)體時(shí)自動(dòng)實(shí)例化在設(shè)計(jì)實(shí)體的HDL文件中指定或者由其引用的Dial的過(guò)程。復(fù)制有利地減少了設(shè)計(jì)者為了創(chuàng)建Dial的多個(gè)相同實(shí)例而需要執(zhí)行的數(shù)據(jù)輸入量。例如,為了實(shí)例化圖5B所示的LDial的六個(gè)實(shí)例,設(shè)計(jì)者只需利用圖4A和4B所示的兩種技術(shù)中的任一種對(duì)兩個(gè)LDial配置指定語(yǔ)句進(jìn)行編碼。也就是,設(shè)計(jì)者將第一LDial配置指定語(yǔ)句(或指向關(guān)聯(lián)配置文件的配置文件引用語(yǔ)句)編碼到設(shè)計(jì)實(shí)體A 306的HDL文件中,以便分別自動(dòng)實(shí)例化實(shí)體A的實(shí)例體306a0、306a1、306b0和306b1內(nèi)的LDial 506a0、506a1、506b0和506b1。設(shè)計(jì)者將第二LDial配置指定語(yǔ)句(或指向關(guān)聯(lián)配置文件的配置文件引用語(yǔ)句)編碼到設(shè)計(jì)實(shí)體FXU304的HDL文件中,以便分別自動(dòng)實(shí)例化FXU實(shí)體的實(shí)例體304a和304b內(nèi)的LDial 510a和510b。然后,當(dāng)編譯器復(fù)制關(guān)聯(lián)設(shè)計(jì)實(shí)體時(shí),自動(dòng)創(chuàng)建LDial的多個(gè)實(shí)例。與設(shè)計(jì)者必須手工地在配置軟件中單獨(dú)列舉每個(gè)配置鎖存器值的現(xiàn)有技術(shù)方法相比,在數(shù)字設(shè)計(jì)內(nèi)復(fù)制Dial可以因此大大減輕設(shè)計(jì)者的輸入負(fù)擔(dān)。應(yīng)當(dāng)注意的是,復(fù)制特性不一定要求Dial的所有實(shí)例來(lái)生成相同的輸出值;相同Dial的不同實(shí)例可通過(guò)向它們提供不同輸入而被設(shè)置成生成不同輸出。
Dial的“范圍”在此被定義為Dial在其指定中可引用的實(shí)體集。按照慣例,Dial的范圍包括Dial與其關(guān)聯(lián)的設(shè)計(jì)實(shí)體(即,由包含使Dial被實(shí)例化的配置指定語(yǔ)句或配置文件引用語(yǔ)句的HDL源文件指定的設(shè)計(jì)實(shí)體)以及包含在關(guān)聯(lián)設(shè)計(jì)實(shí)體內(nèi)的任何設(shè)計(jì)實(shí)體(即,關(guān)聯(lián)設(shè)計(jì)實(shí)體及其后代)。因此,Dial不受限于在其被實(shí)例化的設(shè)計(jì)分層結(jié)構(gòu)層次上工作,而是也能在其范圍內(nèi)的設(shè)計(jì)分層結(jié)構(gòu)的任何低層上指定配置鎖存器。例如,LDial 510a和510b,即使分別與FXU實(shí)體的實(shí)例體304a和304b相關(guān)聯(lián),也可分別指定實(shí)體C的實(shí)例體312a和312b內(nèi)的配置鎖存器。
圖5B示出LDial(和直接指定配置鎖存器的其他Dial)的另一個(gè)重要特性。具體地說(shuō),如圖5B概要所示,習(xí)慣于在HDL文件中指定信號(hào)的設(shè)計(jì)者被允許在配置指定語(yǔ)句中指定由Dial設(shè)置的信號(hào)狀態(tài)而非要裝載到確定信號(hào)狀態(tài)的“上游”配置鎖存器中的值。因此,在指定LDial 506中,設(shè)計(jì)者可為由配置鎖存器512設(shè)置的信號(hào)514指定可能的信號(hào)狀態(tài)。類似地,在指定LDial 510中,設(shè)計(jì)者可為由配置鎖存器520設(shè)置的信號(hào)522指定可能的信號(hào)狀態(tài)。指定信號(hào)狀態(tài)而非鎖存器值的能力不僅與設(shè)計(jì)者思考數(shù)字設(shè)計(jì)的習(xí)慣方式一致,而且減少由于配置鎖存器512、520和感興趣信號(hào)514、522之間的反相器的存在而引入的可能錯(cuò)誤,下面將對(duì)此作進(jìn)一步的討論。
現(xiàn)在參照?qǐng)D5C,示出了包括LDial的模擬模型的另一個(gè)圖示。如撇號(hào)所示,圖5C的模擬模型300”包括以與圖3的模擬模型300相同的分層關(guān)系安排的相同設(shè)計(jì)實(shí)體。
如圖所示,圖5C的模擬模型300”包括與頂層設(shè)計(jì)實(shí)體302關(guān)聯(lián)的LDial524。LDial 524指定由各自的配置鎖存器512確定的每個(gè)信號(hào)sig1 514的信號(hào)狀態(tài),由各自的配置鎖存器520確定的每個(gè)信號(hào)sig2 522的信號(hào)狀態(tài),由配置鎖存器530確定的信號(hào)sig4 532的信號(hào)狀態(tài),以及由配置鎖存器534確定的信號(hào)sig3 536的信號(hào)狀態(tài)。因此,LDial 524配置眾多不同信號(hào)的信號(hào)狀態(tài),其全都在LDial 524(位于頂層)的分層結(jié)構(gòu)層次或者其下被實(shí)例化。
如上面參照?qǐng)D4A和4B所述,通過(guò)在頂層實(shí)體302的HDL文件中嵌入指定LDial 524的配置指定語(yǔ)句或者引用包含指定LDial 524的配置指定語(yǔ)句的獨(dú)立配置文件的配置文件引用語(yǔ)句,在模擬模型300”的頂層實(shí)體302內(nèi)實(shí)例化LDial 524。在任何情況下,LDial 524的示例性配置指定語(yǔ)句如下所示LDial bus ratio(FXU0.A0.SIG1,F(xiàn)XU0.A1.SIG1,F(xiàn)XU0.B.C.SIG2(0..5),F(xiàn)XU1.A0.SIG1,F(xiàn)XU1.A1.SIG1,F(xiàn)XU1.B.C.SIG2(0..5),F(xiàn)PU0.SIG3,SIG4(0..3))={2:1=>0b0,0b0,0x00,0b0,0b0,0x00,0b0,0x0;3:1=>0b1,0b1,0x01,0b1,0b1,0x01,0b0,0x1;4:1=>0b1,0b1,0x3F,0b1,0b1,0x3F,0b1,0xF};上面給出的示例性配置指定語(yǔ)句開始于關(guān)鍵字“LDial”,其指定所聲明的Dial的類型為L(zhǎng)Dial,以及在本例中為“bus ratio(總線比率)”的Dial名稱。下一步,該配置指定語(yǔ)句列舉其狀態(tài)由LDial控制的信號(hào)名稱。如上所示,每個(gè)信號(hào)的信號(hào)標(biāo)識(shí)符相對(duì)于關(guān)聯(lián)設(shè)計(jì)實(shí)體的缺省范圍以分層方式指定(例如,對(duì)于信號(hào)514a0為FXU0.A0.SIG1),使得具有相同信號(hào)名稱的不同信號(hào)實(shí)例是可區(qū)分的。在列舉信號(hào)標(biāo)識(shí)符之后,該配置指定語(yǔ)句包括列出LDial的容許列舉輸入值和每個(gè)列舉輸入值的對(duì)應(yīng)信號(hào)值的映射表。這些信號(hào)值通過(guò)聲明信號(hào)名稱的次序隱式地與信號(hào)名稱相關(guān)聯(lián)。再次應(yīng)當(dāng)注意的是,為所有列舉值指定的信號(hào)狀態(tài)是唯一的,并且共同表示信號(hào)狀態(tài)的僅有合法模式。
可以采用若干不同語(yǔ)法來(lái)指定信號(hào)狀態(tài)。在上面給出的例子中,以指定具有前綴“0b”的二進(jìn)制常數(shù)的二進(jìn)制格式或者指定具有前綴“0x”的十六進(jìn)制常數(shù)的十六進(jìn)制格式來(lái)指定信號(hào)狀態(tài)。雖然未示出,信號(hào)狀態(tài)也可以采用整數(shù)格式來(lái)指定,在這種情況下,不采用前綴。為了便于數(shù)據(jù)輸入起見,ECAD系統(tǒng)35的配置指定語(yǔ)言最好還支持串接語(yǔ)法,其中采用自動(dòng)地以起始零擴(kuò)展的一個(gè)常數(shù)值來(lái)表示所有期望信號(hào)值的串接。采用該串接語(yǔ)法,為了將列舉輸入值2:1與所有零的串接比特模式相關(guān)聯(lián),以將列舉輸入值3:1與‘0b110000011100000100001’串接比特模式相關(guān)聯(lián),以及將列舉輸入值4:1與所有1的串接比特模式相關(guān)聯(lián),上面給出的配置指定語(yǔ)句可以被改寫成{2:1=>0,3:1=>0x183821,4:1=>0x1FFFFF};現(xiàn)在參照?qǐng)D5D,示出了具有一個(gè)比特輸出的LDial的特殊情況的圖示,這里該LDial被定義為開關(guān)(Switch)。如圖所示,開關(guān)540具有單個(gè)輸入502、控制配置鎖存器505的設(shè)置的單個(gè)1比特輸出504、以及將可以在輸入502接收的每個(gè)列舉輸入值映射到在輸出504驅(qū)動(dòng)的1比特輸出值的映射表503。
由于開關(guān)頻繁地包括在數(shù)字設(shè)計(jì)中采用的Dial的絕大部分,因此如果數(shù)字設(shè)計(jì)模擬模型中所有開關(guān)的列舉值集合是相同的(例如,“導(dǎo)通”/“關(guān)斷”),則是最好的。在開關(guān)的典型實(shí)施例中,“正”列舉輸入值(例如,“導(dǎo)通”)通過(guò)映射表503映射到0b1的輸出值,并且“負(fù)”列舉輸入值(例如,“關(guān)斷”)映射到0b0的輸出值。為了幫助使用相反極性的邏輯,最好還支持負(fù)開關(guān)或NSwitch聲明,其在映射表503中使輸入值與輸出值之間的該缺省對(duì)應(yīng)關(guān)系相反。
定義開關(guān)原語(yǔ)(Switch primitive)的主要優(yōu)點(diǎn)是減少設(shè)計(jì)者的所需輸入量。具體地說(shuō),為了指定可比較的1比特LDial,將要求設(shè)計(jì)者輸入下面形式的配置指定語(yǔ)句LDial mode(signal)={ON=>b1;OFF=>b0};另一方面,執(zhí)行相同功能的開關(guān)可以采用以下配置指定語(yǔ)句來(lái)指定Switch mode(signal);雖然當(dāng)僅考慮單個(gè)開關(guān)時(shí)通過(guò)使用開關(guān)所消除的數(shù)據(jù)輸入量不是特別顯著,但是當(dāng)考慮復(fù)雜數(shù)字設(shè)計(jì)中數(shù)千個(gè)開關(guān)時(shí),總的數(shù)據(jù)輸入減少是顯著的。
現(xiàn)在參照?qǐng)D6A,示出了根據(jù)本發(fā)明優(yōu)選實(shí)施例的整數(shù)Dial(“IDial”)的圖示。如同LDial一樣,IDial通過(guò)在映射表603內(nèi)表示在輸入602接收的每個(gè)輸入值與每個(gè)輸出604的輸出值之間的對(duì)應(yīng)關(guān)系,直接指定裝載到一個(gè)或多個(gè)配置鎖存器605的每一個(gè)中的值。然而,不同于只能接收在其映射表503中顯式列出的列舉輸入值作為合法輸入值的LDial,IDial的合法輸入值集合包括輸出604的比特大小內(nèi)的所有可能整數(shù)值。(包含比輸出604的比特大小少的比特的輸入整數(shù)值向右對(duì)齊,并且以零進(jìn)行擴(kuò)展以填充所有可用比特)。由于在映射表603中列舉所有可能整數(shù)輸入值是不便且繁瑣的,因此映射表603簡(jiǎn)單地表示在輸入602接收的整數(shù)輸入值被施加于一個(gè)或多個(gè)輸出604的方式。
IDial在理想上適于一個(gè)或多個(gè)多比特寄存器必須被初始化并且合法值的數(shù)目包括寄存器的大多數(shù)值的應(yīng)用。例如,如果包括4個(gè)配置鎖存器的4比特配置寄存器和包括11個(gè)配置鎖存器的11比特配置寄存器都被配置成利用LDial,則設(shè)計(jì)者將必須在LDial的映射表中顯式列舉高達(dá)215個(gè)輸入值和對(duì)應(yīng)的輸出比特模式。這種情況通過(guò)利用下面配置指定語(yǔ)句的IDial來(lái)處理則簡(jiǎn)單得多IDial cnt_value(sig1(0..3),sig2(0..10));在上述配置指定語(yǔ)句中,“IDial”聲明配置實(shí)體為IDial,“cnt_value”是IDial的名稱,“sig1”是4比特配置寄存器的4比特信號(hào)輸出,并且“sig2”是耦合于11比特配置寄存器的11比特信號(hào)。另外,與sig1和sig2的每一個(gè)相關(guān)聯(lián)的比特的排序和數(shù)目表示整數(shù)輸入值的4個(gè)高位比特將用來(lái)配置與sig1相關(guān)聯(lián)的4比特配置寄存器,并且11個(gè)低位比特將用來(lái)配置與sig2相關(guān)聯(lián)的11比特配置寄存器。重要的是,雖然映射表603表示整數(shù)輸入值的哪些比特路由(route)到哪些輸出,但是在映射表603中沒有輸入值與輸出值之間的顯式對(duì)應(yīng)關(guān)系。
IDial還可用來(lái)為多個(gè)復(fù)制配置寄存器指定相同值,如圖6B所示。在所示實(shí)施例中,可被描述為IDial“splitter(分裂器)”的IDial 610指定每個(gè)均包括基于單個(gè)15比特整數(shù)輸入值的15個(gè)配置鎖存器605的三組復(fù)制配置寄存器的配置。用于實(shí)例化IDial 610的示例性配置指定語(yǔ)句可以如下給出IDial cnt_value(A0.sig1(0..7),A0.sig2(8..14);
A1.sig1(0..7),A1.sig2(8..14);A3.sig1(0..7),A3.sig2(8..14));在上面配置指定語(yǔ)句中,“IDial”聲明配置實(shí)體為IDial,并且“cnt_value”是IDial的名稱。在IDial名稱之后是以分號(hào)(“;”)隔開的三個(gè)范圍字段。每個(gè)范圍字段表示輸入整數(shù)值的比特如何被施加于特定信號(hào)。例如,第一范圍字段指定整數(shù)輸入值的8個(gè)高位比特將用來(lái)配置與信號(hào)A0.sig1相關(guān)聯(lián)的8比特配置寄存器,并且7個(gè)低位比特將用來(lái)配置與A0.sig2相關(guān)聯(lián)的7比特配置寄存器。第二和第三范圍字段指定設(shè)計(jì)實(shí)體A1和A3內(nèi)的相應(yīng)配置寄存器將被類似地配置。重要的是,只要在每個(gè)范圍字段中指定的總比特?cái)?shù)相同,就可在每個(gè)范圍字段中不同地分配整數(shù)輸入比特。
雖然數(shù)字設(shè)計(jì)的配置可以單獨(dú)利用LDial或者利用LDial和IDial來(lái)完全指定,但是在很多情況下,這樣做將是低效且不便的。具體地說(shuō),對(duì)于如圖5C所示的分層數(shù)字設(shè)計(jì),單獨(dú)使用LDial和/或IDial將強(qiáng)迫很多Dial到設(shè)計(jì)分層結(jié)構(gòu)的高層,從組織的觀點(diǎn),其可能是負(fù)責(zé)包含由Dial控制的配置鎖存器的設(shè)計(jì)實(shí)體的不同設(shè)計(jì)者或者設(shè)計(jì)組的職責(zé)。這樣,配置鎖存器的正確配置將不僅要求設(shè)計(jì)組之間的重大組織協(xié)調(diào),還要求負(fù)責(zé)數(shù)字設(shè)計(jì)高層的設(shè)計(jì)者了解并且在他們的HDL文件內(nèi)包括有關(guān)低層設(shè)計(jì)實(shí)體的配置的細(xì)節(jié)。而且,在分層結(jié)構(gòu)的高層實(shí)現(xiàn)Dial意味著不能獨(dú)立模擬分層結(jié)構(gòu)的低層,因?yàn)榭刂频蛯釉O(shè)計(jì)實(shí)體的配置的Dial沒有包含在低層設(shè)計(jì)實(shí)體本身內(nèi)。
鑒于前述情況,本發(fā)明認(rèn)識(shí)到提供支持Dial的分層組合以允許通過(guò)低層Dial配置設(shè)計(jì)分層結(jié)構(gòu)的低層,并且通過(guò)一個(gè)或多個(gè)高層Dial控制低層Dial的效用。本發(fā)明的配置指定語(yǔ)言把控制一個(gè)或多個(gè)低層Dial的高層Dial稱作控制Dial(“CDial”)。
現(xiàn)在參照?qǐng)D7A,示出了根據(jù)本發(fā)明的CDial 700a的圖示。CDial 700a如同所有Dial一樣,最好具有單個(gè)輸入702、一個(gè)或多個(gè)輸出704以及將每個(gè)輸入值映射到各自關(guān)聯(lián)的每個(gè)輸出704的輸出值的映射表703。不同于直接指定配置鎖存器的LDial和IDial,CDial 700不直接指定配置鎖存器。相反,CDial 700控制以n路“Dial樹”在邏輯上耦合于CDial 700的一個(gè)或多個(gè)其他Dial(即CDial和/或LDial和/或IDial),其中每個(gè)低層Dial形成“分支”的至少一部分,其最終終止于配置鎖存器的“葉子”。Dial樹最好構(gòu)造成在任何Dial樹中沒有Dial被實(shí)例化二次。
在圖7A給出的示例性實(shí)施例中,CDial 700a在輸入702接收包括“A”、...、“N”的一組合法值中的列舉輸入值(即字符串)。如果CDial 700a(或LDial或IDial)是頂層Dial(即,在Dial樹中在其“之上”沒有Dial),則CDial700a直接從軟件(例如,模擬軟件或固件)接收列舉輸入值?;蛘撸绻鸆Dial700a形成Dial樹的“分支”的一部分,則CDial 700a從另一個(gè)CDial的輸出接收列舉輸入值。對(duì)于可在輸入702接收的每個(gè)合法列舉輸入值,CDial 700a在映射表703中為每個(gè)所連接的Dial(例如,Dial 700b、500和600)指定選定列舉值或比特值。與每個(gè)輸出704相關(guān)聯(lián)的映射表703中的值根據(jù)耦合于輸出704的低層Dial的類型由ECAD系統(tǒng)35進(jìn)行解釋。也就是,為L(zhǎng)Dial和CDial指定的值被解釋為列舉值,而為IDial指定的值被解釋為整數(shù)值。采用這些值,Dial 700b、500和600的每一個(gè)最終直接或間接指定一個(gè)或多個(gè)配置鎖存器705的值。
現(xiàn)在參照?qǐng)D7B,示出了包含Dial樹的模擬模型的另一個(gè)圖示,其中Dial樹包括控制多個(gè)低層LDial的頂層CDial。如撇號(hào)所示,圖7B的模擬模型300包括以與圖3的模擬模型300相同的分層關(guān)系安排的相同設(shè)計(jì)實(shí)體,并且包含與圖5C的模擬模型300”相同的配置鎖存器和關(guān)聯(lián)信號(hào)。
如圖所示,圖7B的模擬模型300包括與頂層設(shè)計(jì)實(shí)體302相關(guān)聯(lián)的頂層CDial 710。模擬模型300還包括四個(gè)LDial 712a,712b,714和716。與實(shí)體實(shí)例體A0 304a相關(guān)聯(lián)的LDial 712a控制由各自配置文件512a確定的每個(gè)信號(hào)sig1 514a的信號(hào)狀態(tài),以及由配置鎖存器520a確定的信號(hào)sig2 522a的信號(hào)狀態(tài)。與實(shí)體實(shí)例體A1 304b相關(guān)聯(lián)的、作為L(zhǎng)Dial 712a復(fù)制物的LDial712b類似地控制由各自配置鎖存器512b確定的每個(gè)信號(hào)sig1 514b的信號(hào)狀態(tài),以及由配置鎖存器520b確定的信號(hào)sig2 522b的信號(hào)狀態(tài)。與頂層實(shí)體302相關(guān)聯(lián)的LDial 714控制由配置鎖存器530確定的信號(hào)sig4 532的信號(hào)狀態(tài)。最后,與實(shí)體實(shí)例體FPU0 314相關(guān)聯(lián)的LDial 716控制由配置鎖存器534確定的信號(hào)sig3 536的信號(hào)狀態(tài)。這四個(gè)LDial的每一個(gè)由與頂層實(shí)體302相關(guān)聯(lián)的CDial 710進(jìn)行控制。
如上面參照?qǐng)D4A和4B所述,圖7B所示的CDial 710和四個(gè)LDial的每一個(gè)都通過(guò)在關(guān)聯(lián)設(shè)計(jì)實(shí)體的HDL文件內(nèi)嵌入配置指定語(yǔ)句(或者指向包含配置指定語(yǔ)句的配置文件的配置文件引用語(yǔ)句)在關(guān)聯(lián)設(shè)計(jì)實(shí)體內(nèi)被實(shí)例化。用來(lái)實(shí)例化圖7B所示的每個(gè)Dial的示例性配置指定語(yǔ)句如下給出CDial BusRatio(FXU0.BUSRATIO,F(xiàn)XU1.BUSRATIO,F(xiàn)PU0.BUSRATIO,BUSRATIO)={2:1=>2:1,2:1,2:1,2:1;3:1=>3:1,3:1,3:1,3:1;4:1=>4:1,4:1,4:1,4:1};LDial BusRatio(A0.sig1,A1.sig1,B.C.sig2(0..5))={2:1=>0b0,0b0,0x00;3:1=>0b1,0b1,0x01;4:1=>0b1,0b1,0x3F;};LDial BusRatio(sig3)={2:1=>0b0;3:1=>0b0;4:1=>0b1};LDial BusRatio(sig4(0..3))={2:1=>0x0;3:1=>0x1;4:1=>0xF};通過(guò)以這種方式實(shí)現(xiàn)分層Dial樹,實(shí)現(xiàn)了若干優(yōu)點(diǎn)。第一,由于FXU實(shí)體實(shí)例體304a和304b內(nèi)LDial 712的自動(dòng)復(fù)制允許僅輸入一次指定LDial712的代碼,因此減少了必須輸入的軟件代碼量。第二,通過(guò)允許每個(gè)設(shè)計(jì)者(或設(shè)計(jì)組)指定他所負(fù)責(zé)的設(shè)計(jì)實(shí)體內(nèi)的信號(hào)配置,遵守設(shè)計(jì)過(guò)程的組織界限。第三,高層Dial(即CDial 710)的編碼被大大簡(jiǎn)化,從而降低了錯(cuò)誤的可能性。因此,例如,緊鄰之上指定的CDial和LDial集合執(zhí)行與上面參照?qǐng)D5C指定的“大”LDial相同的功能,但是在任何一個(gè)Dial中復(fù)雜性大大降低。
很多Dial,例如用來(lái)在檢測(cè)到不可糾正的錯(cuò)誤的情況下禁用特定設(shè)計(jì)實(shí)體的開關(guān),在幾乎所有情形中都具有Dial應(yīng)當(dāng)具有的特定輸入值。對(duì)于這樣的Dial,本發(fā)明的配置指定語(yǔ)言允許設(shè)計(jì)者顯式地在配置指定語(yǔ)句中指定Dial的缺省輸入值。在示例性實(shí)施例中,通過(guò)在Dial的指定之后和結(jié)束分號(hào)之前包括“=缺省值”來(lái)指定缺省值。例如,CDial的缺省值可以如下給出CDial BusRatio(FXU0.BUSRATIO,F(xiàn)XU1.BUSRATIO,F(xiàn)PU0.BUSRATIO,BUSRATIO)={2:1=>2:1,2:1,2:1,2:1;3:1=>3:1,3:1,3:1,3:1;4:1=>4:1,4:1,4:1,4:1}=2:1;應(yīng)當(dāng)注意的是,對(duì)于CDial和LDial,要求指定的缺省值是一般(即,除了開關(guān)之外)列在映射表中的合法列舉值之一。對(duì)于開關(guān),缺省值必須是預(yù)定義的列舉值“導(dǎo)通”和“關(guān)斷”之一。
IDial的缺省值可以類似地如下指定IDial cnt_value(A0.sig1(0..7),A0.sig2(8..14);A1.sig1(0..7),A1.sig2(8..14);A3.sig1(0..7),A3.sig2(8..14))=0x7FFF;在這種情況下,可采用十六進(jìn)制、十進(jìn)制或二進(jìn)制格式給出的常數(shù)提供由IDial控制的每個(gè)信號(hào)的缺省輸出值。為了將指定常數(shù)施加于所表示的信號(hào),根據(jù)需要?jiǎng)h截高位比特或者向其填充零。
本發(fā)明的配置指定語(yǔ)言還允許控制施加特定缺省值的時(shí)間。施加缺省值的控制例如在模擬或采用硬件執(zhí)行集成電路的引導(dǎo)序列中是重要的。在引導(dǎo)序列的初始階段期間,到集成電路不同部分的時(shí)鐘信號(hào)可以在不同時(shí)間啟動(dòng),從而意味著集成電路不同部分中的鎖存器必須根據(jù)指定的Dial缺省值在不同時(shí)間被裝載。
根據(jù)本發(fā)明,施加缺省值的定時(shí)控制通過(guò)一個(gè)或多個(gè)階段標(biāo)識(shí)符(ID)與缺省值的關(guān)聯(lián)來(lái)支持。階段ID是標(biāo)注缺省值應(yīng)當(dāng)基本上同時(shí)被施加的Dial集合的字符串。多個(gè)階段ID可以與特定Dial相關(guān)聯(lián)以增加靈活性。例如,在不同系統(tǒng)配置中,組成集成電路的引導(dǎo)序列可以不同。因此,根據(jù)系統(tǒng)配置,在不同階段期間將缺省值施加于特定Dial可能是有必要或者所期望的。
在一個(gè)示例性語(yǔ)法中,一個(gè)或多個(gè)階段ID(例如,phaseid0和phaseid1)可以可選地在包含于括號(hào)內(nèi)且位于Dial聲明語(yǔ)句中的缺省聲明之后的逗號(hào)分隔列表中進(jìn)行指定,如下所示CDial BusRatio(FXU0.BUSRATIO,F(xiàn)XU1.BUSRATIO,F(xiàn)PU0.BUSRATIO,BUSRATIO)={2:1=>2:1,2:1,2:1,2:1;3:1=>3:1,3:1,3:1,3:1;4:1=>4:1,4:1,4:1,4:1}=2:1(phaseid0,phaseid1);為沒有指定缺省值的Dial指定階段ID最好是一個(gè)錯(cuò)誤,并且如上所述,任何階段ID的指定最好是完全可選的,如前面給出的示例性CDial和IDial聲明所示。
Dial的缺省值的使用遵循多條規(guī)則。第一,可以為任何類型的Dial包括LDial、IDial(包括帶有分裂輸出的IDial)和CDial指定缺省值。最好,對(duì)于Dial組(下面參照?qǐng)D11A-11B對(duì)其進(jìn)行討論),不支持缺省值。第二,如果為多層Dial樹中的多個(gè)Dial指定缺省值,則僅施加影響Dial樹的每個(gè)“分支”的最高層缺省值(包括為頂層Dial指定的缺省值),并且若有的話,忽略其余缺省值。盡管存在這條規(guī)則,但是為Dial樹中的低層Dial指定缺省值也是有益的,因?yàn)槿缟纤鲈讵?dú)立模擬模型的較小部分的情況下也可施加缺省值。如果為形成Dial樹的“分支”的低層Dial指定的缺省值的組合不對(duì)應(yīng)于為高層Dial設(shè)置的合法輸出值,則編譯器將標(biāo)志錯(cuò)誤。第三,當(dāng)Dial接收有效設(shè)置Dial的輸入時(shí),覆蓋(override)缺省值。
通過(guò)指定Dial的缺省值,設(shè)計(jì)者通過(guò)減少必須顯式地為模擬或硬件配置設(shè)置的Dial數(shù)來(lái)大大簡(jiǎn)化下游組織小組對(duì)Dial的使用。另外,如下面進(jìn)一步所述,缺省值的使用幫助審核哪些Dial已被有效地設(shè)置。
除了定義指定Dial的配置指定語(yǔ)句的語(yǔ)法之外,本發(fā)明的配置指定語(yǔ)言還支持至少兩個(gè)附加HDL語(yǔ)義結(jié)構(gòu)注釋和屬性指定語(yǔ)句??删哂幸韵滦问降淖⑨孊usRatio.comment=“總線比率Dial根據(jù)選定處理器/互連頻率比率配置電路”;允許設(shè)計(jì)者將用引號(hào)劃分的任意字符串與特定Dial名稱相關(guān)聯(lián)。如下面參照?qǐng)D8所述,在編譯期間處理這些注釋,并且將其包括在配置文檔文件內(nèi),以便說(shuō)明Dial的功能、關(guān)系和適當(dāng)設(shè)置。
屬性指定語(yǔ)句是聲明屬性名稱和屬性值并且將屬性名稱與特定Dial名稱相關(guān)聯(lián)的語(yǔ)句。例如,屬性指定語(yǔ)句可具有以下形式BusRatio.attribute(myattribute)=scom57(0:9);在本例中,“BusRatio.attribute”聲明該語(yǔ)句是將屬性與具有“BusRatio”作為其Dial名稱的Dial相關(guān)聯(lián)的屬性指定語(yǔ)句,“myattribute”是屬性的名稱,并且“scom57(0:9)”是指定屬性值的字符串。屬性支持定制特性和對(duì)基本配置指定語(yǔ)言的語(yǔ)言擴(kuò)展。
現(xiàn)在參照?qǐng)D8,示出了模型構(gòu)建過(guò)程的高層流程圖,其中編譯包含配置語(yǔ)句的HDL文件以獲得數(shù)字設(shè)計(jì)的模擬可執(zhí)行模型和模擬配置數(shù)據(jù)庫(kù)。該過(guò)程開始于一個(gè)或多個(gè)設(shè)計(jì)實(shí)體HDL源代碼文件800,其包括配置指定語(yǔ)句和/或配置文件引用語(yǔ)句,并且可選地包括一個(gè)或多個(gè)配置指定引用文件802。HDL編譯器804處理HDL文件800和配置指定文件(configuration specificationfile)802(若有的話),從模擬模型的頂層實(shí)體開始并且以遞歸方式進(jìn)入描述完整模擬模型的所有HDL文件800。當(dāng)HDL編譯器804處理每個(gè)HDL文件800時(shí),HDL編譯器804在存儲(chǔ)器內(nèi)所產(chǎn)生的設(shè)計(jì)中間文件806中創(chuàng)建“標(biāo)記”,以標(biāo)識(shí)嵌入在HDL代碼以及由嵌入配置文件引用語(yǔ)句引用的任何配置指定文件內(nèi)的配置語(yǔ)句。
然后,存儲(chǔ)器內(nèi)的設(shè)計(jì)中間文件806由配置編譯器808和模型構(gòu)建工具810進(jìn)行處理,以完成模型構(gòu)建過(guò)程。模型構(gòu)建工具810將設(shè)計(jì)中間文件806處理成當(dāng)執(zhí)行時(shí)對(duì)數(shù)字設(shè)計(jì)的邏輯功能進(jìn)行建模的模擬可執(zhí)行模型816,其中模擬可執(zhí)行模型816可表示例如集成電路的一部分,整個(gè)集成電路或模塊,或者包括多個(gè)集成電路或模塊的數(shù)字系統(tǒng)。配置編譯器808處理在設(shè)計(jì)中間文件806中標(biāo)記的配置指定語(yǔ)句,并且根據(jù)這些語(yǔ)句創(chuàng)建配置文檔文件812和配置數(shù)據(jù)庫(kù)814。
配置文檔文件812以可供人閱讀的格式列出描述與模擬模型相關(guān)聯(lián)的Dial的信息。該信息包括Dial的名稱、其映射表、Dial樹的結(jié)構(gòu)(若有的話)、實(shí)例信息等。另外,如上所述,配置文檔文件812包括包含在描述數(shù)字設(shè)計(jì)中Dial的功能和設(shè)置的注釋語(yǔ)句中的字符串。以這種方式,適合與數(shù)字設(shè)計(jì)的模擬模型和硬件實(shí)現(xiàn)一起使用的配置文檔以“自底向上”的方式從負(fù)責(zé)創(chuàng)建Dial的設(shè)計(jì)者匯集。配置文檔然后變得可用于涉及數(shù)字設(shè)計(jì)的設(shè)計(jì)、模擬、實(shí)驗(yàn)硬件評(píng)估和商業(yè)硬件實(shí)現(xiàn)的所有下游組織小組。
配置數(shù)據(jù)庫(kù)814包含與Dial有關(guān)的多個(gè)數(shù)據(jù)結(jié)構(gòu)。如下面詳細(xì)所述,這些數(shù)據(jù)結(jié)構(gòu)包括描述Dial實(shí)體的Dial數(shù)據(jù)結(jié)構(gòu)、鎖存器數(shù)據(jù)結(jié)構(gòu)和Dial實(shí)例數(shù)據(jù)結(jié)構(gòu)。這些數(shù)據(jù)結(jié)構(gòu)將特定Dial輸入與用來(lái)配置數(shù)字設(shè)計(jì)(即,模擬可執(zhí)行模型816)的特定配置值相關(guān)聯(lián)。在優(yōu)選實(shí)施例中,配置值可按照信號(hào)狀態(tài)或配置鎖存器值來(lái)指定,并且選擇使用哪些值是用戶可選的。配置數(shù)據(jù)庫(kù)814在利用模擬可執(zhí)行模型816的數(shù)字設(shè)計(jì)模擬期間,通過(guò)應(yīng)用編程接口(API)例程來(lái)訪問,并且還用來(lái)生成用于配置數(shù)字設(shè)計(jì)的物理實(shí)現(xiàn)的類似配置數(shù)據(jù)庫(kù)。在優(yōu)選實(shí)施例中,API被設(shè)計(jì)成只能設(shè)置頂層Dial(即,沒有CDial在邏輯上位于其“上”的LDial、IDial或CDial),并且可以讀取所有Dial值。
如上所述,本發(fā)明的配置指定語(yǔ)言有利地允許通過(guò)引用信號(hào)名稱(例如,“sig1”)來(lái)指定LDial和IDial的輸出值。如上所述,該特性的關(guān)鍵動(dòng)機(jī)是設(shè)計(jì)者往往是按照將操作信號(hào)配置成特定信號(hào)狀態(tài)而不是配置關(guān)聯(lián)配置鎖存器來(lái)考慮的。然而,實(shí)際上,設(shè)計(jì)者期望將其配置成特定狀態(tài)的信號(hào)可能不直接連接到關(guān)聯(lián)配置鎖存器的輸出。相反,所要配置的信號(hào)可能通過(guò)一個(gè)或多個(gè)中間電路元件如緩沖器和反相器來(lái)耦合于關(guān)聯(lián)配置鎖存器。不是向設(shè)計(jì)者施加人工回溯每個(gè)可配置信號(hào)至關(guān)聯(lián)配置鎖存器、然后確定配置鎖存器的適當(dāng)值的負(fù)擔(dān),配置編譯器808自動(dòng)回溯指定信號(hào)至耦合于該信號(hào)的第一存儲(chǔ)元件(即配置鎖存器),并且執(zhí)行設(shè)計(jì)者指定的信號(hào)狀態(tài)值的任何必要反相,以獲得要裝載到配置鎖存器中的正確值。
現(xiàn)在參照?qǐng)D9A,示出了包括LDial 900的數(shù)字設(shè)計(jì)的一部分,其中LDial900控制數(shù)字設(shè)計(jì)內(nèi)多個(gè)信號(hào)904a-904e的狀態(tài)。當(dāng)配置編譯器808執(zhí)行信號(hào)904a的回溯時(shí),不需要設(shè)計(jì)者指定的信號(hào)狀態(tài)的反相,因?yàn)樾盘?hào)904a直接連接到配置鎖存器902a。因此,配置編譯器808將來(lái)自LDial 900的配置指定語(yǔ)句的設(shè)計(jì)者指定值存儲(chǔ)到配置數(shù)據(jù)庫(kù)814中,作為要裝載到配置鎖存器902a中的值。信號(hào)904b到配置鎖存器902b的回溯類似地不導(dǎo)致來(lái)自LDial900的配置指定語(yǔ)句的設(shè)計(jì)者指定值的反相,因?yàn)樾盘?hào)904b與配置寄存器902b之間的唯一中介元件是非反相緩沖器906。
配置鎖存器如配置鎖存器902c和902d通過(guò)在HDL文件800中包括引用HDL設(shè)計(jì)庫(kù)中的鎖存器原語(yǔ)的HDL語(yǔ)句而被設(shè)計(jì)者頻繁地實(shí)例化。響應(yīng)該HDL庫(kù)引用而插入到模擬可執(zhí)行模型中的鎖存器實(shí)體903a、903b可以包括在HDL代碼中不對(duì)設(shè)計(jì)者顯式“可見”的反相器,如反相器908、910。但是,由配置編譯器808執(zhí)行的自動(dòng)回溯檢測(cè)這些反相器,從而防止可能的配置錯(cuò)誤。
因此,當(dāng)執(zhí)行信號(hào)904c的回溯時(shí),由于信號(hào)904c與配置鎖存器902c之間存在反相器908,因此配置編譯器808在將配置鎖存器902c的配置值存儲(chǔ)在配置數(shù)據(jù)庫(kù)814中之前,自動(dòng)反相為信號(hào)904c指定的設(shè)計(jì)者指定配置值。然而,當(dāng)配置編譯器808執(zhí)行信號(hào)904d的回溯時(shí),盡管在信號(hào)路徑中存在反相器910、914和緩沖器912,由于邏輯合在一起是非反相的,因此配置編譯器808不反相設(shè)計(jì)者指定的信號(hào)狀態(tài)值。應(yīng)當(dāng)注意的是,配置編譯器808可以準(zhǔn)確地處理“隱藏”的反相器如反相器910和顯式聲明的反相器如反相器914。
圖9A最后示出通過(guò)中間與門916耦合于多個(gè)配置鎖存器902e和902f的信號(hào)904e。在回溯過(guò)程檢測(cè)出指定信號(hào)與最近配置鎖存器之間的扇出(fanout)邏輯的情況下,配置編譯器808有可能根據(jù)信號(hào)904e的設(shè)計(jì)者指定信號(hào)狀態(tài)值,為配置鎖存器902e、902f生成適當(dāng)?shù)呐渲弥?。然而,如果配置編譯器808標(biāo)志出LDial 900的配置指定語(yǔ)句包含錯(cuò)誤,則是優(yōu)選的,因?yàn)榕渲面i存器902e、902f的編譯器選擇值可能以不可預(yù)料的方式影響從配置鎖存器902接收配置值的其他電路。
現(xiàn)在參照?qǐng)D9B,其中示出了配置編譯器808為在配置指定語(yǔ)句中指定的每個(gè)信號(hào)名稱實(shí)現(xiàn)的回溯過(guò)程的高層邏輯流程圖。如圖所示,該過(guò)程開始于塊920,然后進(jìn)入塊922-924,其示出配置編譯器808將反相計(jì)數(shù)初始化為零,然后定位由在配置指定語(yǔ)句中指定的信號(hào)名稱標(biāo)識(shí)的信號(hào)。
然后,該過(guò)程進(jìn)入包括塊926-936的循環(huán),其共同表示配置編譯器808回溯指定信號(hào)至信號(hào)路徑中的第一鎖存器元件。具體地說(shuō),如塊926-930所示,配置編譯器808確定信號(hào)路徑中的下一個(gè)“上游”電路元件是鎖存器(926)、緩沖器(928)還是反相器(930)。如果電路元件是鎖存器,則該過(guò)程退出循環(huán)并且傳到下面描述的塊940。然而,如果電路元件是緩沖器,則該過(guò)程傳到塊934,其示出配置編譯器移到要處理的下一個(gè)上游電路元件,而不增加反相計(jì)數(shù)。如果電路元件是反相器,則該過(guò)程傳到塊936和934,其示出增加反相計(jì)數(shù),然后移到要處理的下一個(gè)上游電路元件。以這種方式,配置編譯器回溯指定信號(hào)至配置鎖存器,同時(shí)確定由路徑中的電路元件實(shí)現(xiàn)的信號(hào)狀態(tài)的反相次數(shù)。如上所述,如果配置編譯器808在信號(hào)路徑中檢測(cè)到不同于緩沖器或反相器的電路元件,則配置編譯器808最好標(biāo)志錯(cuò)誤,如塊946所示。然后,該過(guò)程終止于塊950。
在塊926檢測(cè)出配置鎖存器之后,配置編譯器808確定反相計(jì)數(shù)是奇數(shù)還是偶數(shù)。如塊940-944所示,如果反相計(jì)數(shù)為奇數(shù),則配置編譯器在將值插入到配置數(shù)據(jù)庫(kù)814中之前,在塊942反相該信號(hào)的設(shè)計(jì)者指定配置值。如果反相計(jì)數(shù)為偶數(shù),則在將配置值插入到配置數(shù)據(jù)庫(kù)814中之前不執(zhí)行反相。然后,該過(guò)程終止于塊950。
如上所述,本發(fā)明提供了一種允許數(shù)字系統(tǒng)的設(shè)計(jì)者利用嵌入在描述數(shù)字系統(tǒng)的HDL設(shè)計(jì)文件中的配置語(yǔ)句來(lái)指定數(shù)字系統(tǒng)的配置的配置指定語(yǔ)言。配置語(yǔ)句在數(shù)字設(shè)計(jì)內(nèi)在邏輯上實(shí)例化一個(gè)或多個(gè)Dial,其響應(yīng)于特定輸入而提供數(shù)字設(shè)計(jì)的配置值。Dial如同包括數(shù)字設(shè)計(jì)的設(shè)計(jì)實(shí)體一樣可以分層安排。配置指定語(yǔ)句與描述數(shù)字設(shè)計(jì)的HDL文件一起進(jìn)行編譯,以產(chǎn)生可被訪問以配置數(shù)字設(shè)計(jì)的模擬可執(zhí)行模型或者(在適當(dāng)轉(zhuǎn)換之后)物理實(shí)現(xiàn)的配置數(shù)據(jù)庫(kù)。配置指定語(yǔ)句的編譯最好支持回溯過(guò)程,其中響應(yīng)于檢測(cè)到耦合于信號(hào)與關(guān)聯(lián)配置鎖存器之間的奇數(shù)個(gè)反相器而反相信號(hào)的設(shè)計(jì)者指定配置值。
再次參照?qǐng)D5C,回想一下,LDial 524的示例性配置指定語(yǔ)句包括以下形式的括號(hào)內(nèi)信號(hào)列舉LDial bus ratio(FXU0.A0.SIG1,F(xiàn)XU0.A1.SIG1,F(xiàn)XU0.B.C.SIG2(0..5),F(xiàn)XU1.A0.SIG1,F(xiàn)XU1.A1.SIG1,F(xiàn)XU1.B.C.SIG2(0..5),F(xiàn)PU0.SIG3,SIG4(0..3))=…應(yīng)當(dāng)注意的是,從Dial與其相關(guān)聯(lián)的設(shè)計(jì)實(shí)體的范圍開始(按照慣例,它是實(shí)例化Dial的配置指定語(yǔ)句或配置引用語(yǔ)句嵌入在其HDL文件中的設(shè)計(jì)實(shí)體),配置指定語(yǔ)句的信號(hào)列舉部分單獨(dú)、分層且顯式地列舉由Dial配置的每個(gè)信號(hào)實(shí)例的信號(hào)標(biāo)識(shí)符。該語(yǔ)法在此稱作信號(hào)標(biāo)識(shí)符的“完全表達(dá)式”。在LDial或IDial的配置指定語(yǔ)句的信號(hào)列舉部分中或者在CDial的配置指定語(yǔ)句的Dial列舉部分中采用“完全表達(dá)式”語(yǔ)法要求設(shè)計(jì)者知道并且正確地輸入由Dial控制的信號(hào)(或低層Dial)的每個(gè)實(shí)例的分層標(biāo)識(shí)符。因此,如果以后將相同信號(hào)(或低層Dial)的新實(shí)例加入到數(shù)字設(shè)計(jì)中,則設(shè)計(jì)者必須仔細(xì)檢查引用相同信號(hào)(或Dial)的其他實(shí)例的Dial的配置指定語(yǔ)句,并且更新信號(hào)(或Dial)列舉部分,以包括新加入的實(shí)例的完全表達(dá)式。
為了減少輸入配置指定語(yǔ)句的信號(hào)(或Dial)列舉部分所需的輸入量和減輕將新信號(hào)和Dial實(shí)例加入到數(shù)字設(shè)計(jì)中時(shí)的代碼維護(hù)負(fù)擔(dān),根據(jù)本發(fā)明的ECAD系統(tǒng)35還支持配置指定語(yǔ)句的信號(hào)(或Dial)列舉部分的“緊湊表達(dá)式”語(yǔ)法。這里,該語(yǔ)法在應(yīng)用于LDial和IDial的配置指定語(yǔ)句時(shí)更具體地稱作“緊湊信號(hào)表達(dá)式”,而在引用CDial的配置指定語(yǔ)句時(shí)稱作“緊湊Dial表達(dá)式”。
在信號(hào)或Dial列舉的緊湊表達(dá)式中,對(duì)其期望進(jìn)行共同配置的選定范圍內(nèi)實(shí)體的所有實(shí)例可以采用單個(gè)標(biāo)識(shí)符來(lái)列舉。例如,在圖5C中,如果設(shè)計(jì)者對(duì)于信號(hào)sig1 514的所有四個(gè)實(shí)例體想要進(jìn)行共同配置,則設(shè)計(jì)者可通過(guò)單個(gè)緊湊信號(hào)表達(dá)式“[A].sig1”列舉LDial 524的配置指定語(yǔ)句中的所有四個(gè)實(shí)例體,其中方括號(hào)內(nèi)的項(xiàng)目是發(fā)生感興趣信號(hào)的實(shí)體的名稱。在緊湊表達(dá)式中,表達(dá)式的缺省范圍隱含為Dial與其相關(guān)聯(lián)的設(shè)計(jì)實(shí)體(在本例中為頂層實(shí)體302)的范圍。因此,標(biāo)識(shí)符“[A].sig1”在頂層實(shí)體302的缺省范圍內(nèi)指定A實(shí)體的實(shí)例體304內(nèi)的信號(hào)sig1 514的所有四個(gè)實(shí)例體。
采用緊湊表達(dá)式的標(biāo)識(shí)符范圍還可通過(guò)顯式列舉設(shè)計(jì)分層結(jié)構(gòu)的選定層次來(lái)變窄。例如,緊湊表達(dá)式“FXU1.[A].sig1”僅引用FXU1實(shí)體實(shí)例體304b內(nèi)的信號(hào)sig1實(shí)例體514b0和514b1,但是不包括FXU0實(shí)體實(shí)例體304a的信號(hào)sig1實(shí)例體514a0和514a1。
當(dāng)然,當(dāng)在設(shè)計(jì)分層結(jié)構(gòu)的高層僅實(shí)例化信號(hào)或Dial的單個(gè)實(shí)例時(shí),緊湊表達(dá)式和完全表達(dá)式將需要大約相同的輸入量(例如,“FPU0.sig3”對(duì)“[FPU].sig3”來(lái)標(biāo)識(shí)信號(hào)sig3 536)。然而,應(yīng)當(dāng)注意的是,如果后來(lái)將另一個(gè)FPU實(shí)體314加入到模擬模型300”中,則該標(biāo)識(shí)的緊湊表達(dá)式將有利地應(yīng)用于頂層實(shí)體302的范圍內(nèi)任何后來(lái)加入的FPU實(shí)體。
利用緊湊表達(dá)式,LDial 524的配置指定語(yǔ)句現(xiàn)在可更緊湊地被如下改寫LDial bus ratio([A].SIG1,[C].SIG2(0..5),
FPU0.SIG3,SIG4(0..3))={2:1=>0b0,0x00,0b0,0x0;3:1=>0b1,0x01,0b0,0x1;4:1=>0b1,0x3F,0b1,0xF};如果上述串接語(yǔ)法應(yīng)用于映射表,則映射表還可簡(jiǎn)化成{2:1=>0;3:1=>0x821;4:1=>0xFFF};在串接語(yǔ)法中,以每個(gè)實(shí)體標(biāo)識(shí)符的相應(yīng)的單個(gè)比特字段在映射表中指定信號(hào)值,而與實(shí)際實(shí)體實(shí)例數(shù)無(wú)關(guān)。例如,由“[A].sig1”包括的所有實(shí)例都以指定配置值的1比特表示,由“[C].sig2”包括的所有實(shí)例都以指定配置值的6比特表示,由“FPU0.sig3”標(biāo)識(shí)的單個(gè)實(shí)例以指定配置值的1比特表示,并且“sig4(0..3)”的單個(gè)實(shí)例以指定配置值的4比特表示。因此,利用串接語(yǔ)法,由LDial 524一起指定的21比特可采用等價(jià)12比特模式來(lái)指定。
緊湊Dial表達(dá)式以與緊湊信號(hào)表達(dá)式相同的方式進(jìn)行構(gòu)造和由編譯器進(jìn)行分析。例如,圖7B的CDial 710的配置指定語(yǔ)句可以利用緊湊Dial表達(dá)式來(lái)如下改寫CDial BusRatio([FXU].BUSRATIO,[FPU].BUSRATIO,BUSRATIO)={2:1=>2:1,2:1,2:1;3:1=>3:1,3:1,3:1;4:1=>4:1,4:1,4:1};再次,該配置指定語(yǔ)句有利地允許CDial 710通過(guò)附加FXU實(shí)體304或FPU實(shí)體314的實(shí)例化自動(dòng)控制后來(lái)加入到模擬模型300中的、名稱為“Busratio”的任何附加LDial,而無(wú)需任何代碼修改。
現(xiàn)在參照?qǐng)D10,示出了根據(jù)本發(fā)明的配置編譯器808解析配置指定語(yǔ)句內(nèi)的每個(gè)信號(hào)或Dial標(biāo)識(shí)的示例性方法的高層邏輯流程圖。如上所述,每個(gè)信號(hào)或Dial標(biāo)識(shí)由一個(gè)或多個(gè)用點(diǎn)號(hào)(“.”)分隔的字段分層構(gòu)成。最后字段指定信號(hào)(例如,“sig1”)或Dial(例如,“Bus_Ratio”)的實(shí)例名稱,并且前面字段從缺省范圍開始使范圍變窄,其中缺省范圍按照慣例是Dial與之關(guān)聯(lián)的設(shè)計(jì)實(shí)體的范圍。
如圖所示,該處理開始于塊1000,然后進(jìn)入塊1002,其示出配置編譯器808確定信號(hào)或Dial標(biāo)識(shí)的第一或當(dāng)前字段是否包含容納在方括號(hào)內(nèi)的實(shí)體標(biāo)識(shí)符(例如,“[A]”),也就是,該標(biāo)識(shí)是否為緊湊表達(dá)式。如果是,則該過(guò)程傳到下面描述的塊1020。如果否,則配置編譯器808在塊1004通過(guò)確定該標(biāo)識(shí)的第一或當(dāng)前字段是否為該標(biāo)識(shí)的最后字段來(lái)確定該標(biāo)識(shí)是否為完全表達(dá)式。如果是,則信號(hào)或Dial標(biāo)識(shí)為完全表達(dá)式,并且該過(guò)程傳到塊1010。另一方面,如果該標(biāo)識(shí)的當(dāng)前字段不是最后字段,則配置編譯器808將當(dāng)前范圍變窄至在該標(biāo)識(shí)的當(dāng)前字段中標(biāo)識(shí)的設(shè)計(jì)實(shí)體實(shí)例體,如塊1006所示。例如,如果配置編譯器808正在處理圖7B的CDial 710的配置指定語(yǔ)句內(nèi)的標(biāo)識(shí)“FPU0.SIG3”,則配置編譯器808將使范圍從頂層實(shí)體302的缺省范圍變窄至FPU實(shí)體實(shí)例體314。如果如塊1008所示存在由該標(biāo)識(shí)的當(dāng)前字段表示的實(shí)體實(shí)例體,則在如塊1009所示將當(dāng)前字段更新為下一個(gè)字段之后,該過(guò)程返回到塊1002。然而,如果在當(dāng)前范圍內(nèi)不存在由當(dāng)前字段指定的實(shí)體實(shí)例體,則配置編譯器808在塊1032標(biāo)志錯(cuò)誤,并且終止信號(hào)或Dial標(biāo)識(shí)的處理。
再次回到塊1004,當(dāng)配置編譯器808檢測(cè)出它達(dá)到完全表達(dá)式的最后字段時(shí),圖10所示的過(guò)程從塊1004傳到塊1010。塊1010示出配置編譯器1010試圖在當(dāng)前范圍內(nèi)定位其名稱與在信號(hào)或Dial標(biāo)識(shí)的最后字段中指定的名稱相匹配的單個(gè)信號(hào)或Dial實(shí)例。如果配置編譯器808在塊1012確定在當(dāng)前范圍內(nèi)沒有找到匹配實(shí)例,則該過(guò)程傳到塊1032,并且配置編譯器808標(biāo)志錯(cuò)誤。然而,如果配置編譯器808定位了匹配信號(hào)或Dial實(shí)例,則配置編譯器808在配置數(shù)據(jù)庫(kù)814中創(chuàng)建一個(gè)條目,從而將該信號(hào)或Dial實(shí)例綁定到在正被處理的Dial的配置指定語(yǔ)句的映射表中指定的參數(shù),如塊1014所示。然后,信號(hào)或Dial標(biāo)識(shí)的處理終止于塊1030。
現(xiàn)在參照塊1020和下面塊,將描述采用緊湊表達(dá)式的信號(hào)或Dial標(biāo)識(shí)的處理。塊1020示出配置編譯器808試圖在由方括號(hào)字段表示的實(shí)體的當(dāng)前范圍中的一個(gè)或多個(gè)實(shí)例的每一個(gè)內(nèi),定位與在信號(hào)或Dial標(biāo)識(shí)中所指定的Dial或信號(hào)實(shí)例相匹配的每個(gè)Dial或信號(hào)實(shí)例。例如,當(dāng)處理圖7B的模擬模型300的緊湊表達(dá)式“FXU1.[A].sig1”時(shí),一到達(dá)字段“[A]”,則對(duì)FXU1搜索實(shí)體A 306的實(shí)例體,并且一找到實(shí)體實(shí)例體306a0和306a1,則在這兩個(gè)實(shí)體實(shí)例體的每一個(gè)內(nèi)進(jìn)行搜索,以定位信號(hào)實(shí)例體sig1 514a0和514a1。如果配置編譯器808在塊1022確定在當(dāng)前范圍內(nèi)沒有找到匹配信號(hào)或Dial實(shí)例,則該過(guò)程傳到塊1032,其示出配置編譯器808在標(biāo)志錯(cuò)誤之后終止信號(hào)或Dial標(biāo)識(shí)的處理。然而,如果配置編譯器808定位了一個(gè)或多個(gè)匹配信號(hào)或Dial實(shí)例,則該過(guò)程從塊1022傳到塊1024。塊1024示出配置編譯器808在配置數(shù)據(jù)庫(kù)814中創(chuàng)建一個(gè)或多個(gè)條目,從而將每個(gè)匹配信號(hào)或Dial實(shí)例綁定到在正被處理的Dial的配置指定語(yǔ)句的映射表中指定的參數(shù)。然后,信號(hào)或Dial標(biāo)識(shí)的處理終止于塊1030。
利用由本發(fā)明支持的緊湊表達(dá)式,可以有利地減少設(shè)計(jì)者在配置指定語(yǔ)句中必須輸入的代碼量。緊湊表達(dá)式的使用不僅降低輸入要求和輸入錯(cuò)誤的可能性,而且通過(guò)將指定配置參數(shù)自動(dòng)施加于后來(lái)輸入的落在選定范圍內(nèi)的信號(hào)和Dial實(shí)例來(lái)簡(jiǎn)化代碼維護(hù)。
如上所述,每一個(gè)Dial在其輸入值的每一個(gè)與Dial的唯一輸出值之間具有一一映射關(guān)系。換句話說(shuō),每個(gè)輸入值具有與任何其他輸入值的輸出值不同的唯一輸出值。對(duì)于CDial和LDial,映射表必須顯式地列舉每個(gè)合法輸入值及其關(guān)聯(lián)映射。
必須在映射表中顯式列舉輸入值的要求限制任何給定LDial或CDial的總體復(fù)雜性。例如,考慮包含10到20個(gè)配置寄存器的集成電路(例如,存儲(chǔ)器控制器)的情況,其中這些配置寄存器的每個(gè)均具有5到20個(gè)合法值。在很多情況下,這些寄存器具有相互依賴性-裝載在一個(gè)寄存器中的值可影響一個(gè)或多個(gè)其他寄存器的合法可能性。理想地,利用由單個(gè)CDial控制的Dial樹指定所有寄存器的值將是方便的。通過(guò)這種方式,所有10到20個(gè)寄存器的配置可作為一個(gè)組來(lái)控制。
不幸的是,在上述假定的情況下,10到20個(gè)寄存器一起可能具有超過(guò)300,000合法值組合。在這種情況下,CDial的指定雖然在理論上是可能的,但是是不理想的并且在實(shí)際上是不可行的。而且,即使可采用循環(huán)構(gòu)造來(lái)自動(dòng)化構(gòu)造CDial的配置指定語(yǔ)句,但是盡管向模擬軟件通知哪些輸入值是合法的,配置指定語(yǔ)句也不能向用戶告知如何設(shè)置該尺寸的CDial。
在認(rèn)識(shí)到前述問題的情況下,本發(fā)明的配置指定語(yǔ)言提供了“Dial組”構(gòu)造。Dial組是設(shè)計(jì)者希望在其間創(chuàng)建關(guān)聯(lián)的Dial集合。用來(lái)提供Dial輸入值的運(yùn)行時(shí)間API通過(guò)防止單獨(dú)設(shè)置Dial組內(nèi)的各個(gè)Dial來(lái)遵循該關(guān)聯(lián)。換句話說(shuō),必須同時(shí)設(shè)置Dial組中的所有Dial,以便防止以不關(guān)心Dial之間的交互的方式獨(dú)立地設(shè)置各個(gè)Dial。由于軟件強(qiáng)制遵循形成Dial組的Dial的編組,因此Dial組的使用還提供設(shè)計(jì)者可向“下游”用戶團(tuán)體警告在組成Dial組的Dial之間存在未聲明的互依賴性設(shè)置的機(jī)制。
現(xiàn)在參照?qǐng)D11A,示出了Dial組1100a的圖示。Dial組1100a由組名1102(例如,“GroupG”)和列出一個(gè)或多個(gè)Dial或其他Dial組的Dial列表1104定義。Dial組沒有任何輸入或輸出。作為所有頂層Dial 1110a-1110f列在Dial列表1104內(nèi)的Dial可以是LDial、CDial和/或IDial。
圖11A示出Dial組1100a可被實(shí)現(xiàn)為在其Dial列表1104中引用一個(gè)或多個(gè)其他Dial組1100b-1100n的分層Dial組。這些低層Dial組又在其各自的Dial列表中引用一個(gè)或多個(gè)頂層Dial 1110g-1110k和1110m-1110r(或其他Dial組)。
分層實(shí)現(xiàn)Dial組的一個(gè)動(dòng)機(jī)是協(xié)調(diào)跨越組織邊界的Dial組的配置。例如,考慮這樣的數(shù)字系統(tǒng),其中30個(gè)Dial在邏輯上屬于一個(gè)Dial組,并且這些Dial中的10個(gè)包含在作為第一設(shè)計(jì)者職責(zé)的第一設(shè)計(jì)實(shí)體內(nèi),并且這些Dial中的20個(gè)包含在作為第二設(shè)計(jì)者職責(zé)的第二設(shè)計(jì)實(shí)體內(nèi)。在沒有分層Dial組的情況下,將不得不在包括第一和第二設(shè)計(jì)實(shí)體兩者的設(shè)計(jì)分層結(jié)構(gòu)的高層指定在其Dial列表1104中顯式列出所有30個(gè)Dial的單個(gè)Dial組。該實(shí)現(xiàn)將是不方便的,因?yàn)樨?fù)責(zé)高層設(shè)計(jì)實(shí)體的設(shè)計(jì)者(或設(shè)計(jì)組)將必須知道低層設(shè)計(jì)實(shí)體中的所有相關(guān)Dial,并且在Dial組的Dial列表1104中具體標(biāo)識(shí)30個(gè)Dial的每一個(gè)。
一種可替換的分層方法將需要?jiǎng)?chuàng)建包含第一設(shè)計(jì)實(shí)體內(nèi)的10個(gè)Dial的第一Dial組、包含第二設(shè)計(jì)實(shí)體內(nèi)的20個(gè)Dial的第二Dial組以及引用第一和第二Dial組的第三高層Dial組。重要的是,高層Dial組的Dial列表1104必須僅引用兩個(gè)低層Dial組,因此向負(fù)責(zé)設(shè)計(jì)分層結(jié)構(gòu)高層的設(shè)計(jì)者隱藏低層細(xì)節(jié)。另外,由于改變哪些Dial屬于兩個(gè)低層Dial組將不影響高層Dial組的Dial列表1104,因此減輕了代碼維護(hù)。
Dial組遵循多條規(guī)則。首先,Dial或Dial組不可以列在多于一個(gè)Dial組的Dial列表1104中。第二,Dial組在其Dial列表1104內(nèi)必須引用至少一個(gè)Dial或其他Dial組。第三,在其Dial列表1104中,Dial組只能引用其范圍內(nèi)的Dial或Dial組,其中該范圍按照慣例(如同應(yīng)用于Dial一樣的范圍概念)是其關(guān)聯(lián)設(shè)計(jì)實(shí)體的范圍(即,設(shè)計(jì)實(shí)體本身和設(shè)計(jì)實(shí)體內(nèi)的任何低層設(shè)計(jì)實(shí)體)。第四,在Dial組的Dial列表1104中引用的每個(gè)Dial必須是頂層Dial。
現(xiàn)在參照?qǐng)D11B,示出了說(shuō)明Dial組使用的示例性模擬模型1120。示例性模擬模型1120包括具有實(shí)例體標(biāo)識(shí)符“TOP:TOP”的頂層設(shè)計(jì)實(shí)體1122。在頂層設(shè)計(jì)實(shí)體1122內(nèi),實(shí)例化分別具有實(shí)體名稱FBC和L2的兩個(gè)設(shè)計(jì)實(shí)體1124和1126。FBC實(shí)體實(shí)例體1124又實(shí)例化具有Dial名稱“C”的Dial實(shí)例1130、包含具有Dial名稱“B”的Dial實(shí)例1134的Z實(shí)體實(shí)例體1132、以及分別被命名為“X0”和“X1”的實(shí)體X 1136的兩個(gè)實(shí)例體。每個(gè)實(shí)體X實(shí)例體1136包含兩個(gè)實(shí)體Y實(shí)例體1138,其中每一個(gè)進(jìn)一步實(shí)例化具有Dial名稱“A”的Dial實(shí)例1140。L2實(shí)體實(shí)例體1126包含具有Dial名稱“D”的Dial實(shí)例1150以及兩個(gè)實(shí)體L實(shí)例體1152,這兩個(gè)實(shí)體L實(shí)例體1152各自包含具有Dial名稱“E”的Dial實(shí)例1154。
如圖所示,F(xiàn)BC實(shí)體實(shí)例體1124具有組名為“F”的關(guān)聯(lián)Dial組實(shí)例1160。如箭頭所示,Dial組實(shí)例1160在FBC實(shí)體實(shí)例體1124內(nèi)包括Dial實(shí)例1130、1134和1140的每一個(gè)。L2實(shí)體實(shí)例體1126類似地具有關(guān)聯(lián)Dial組實(shí)例1162,其在L2實(shí)體實(shí)例體1126內(nèi)包括Dial實(shí)例1150和1154的每一個(gè)。這些Dial組實(shí)例又都屬于具有組名“H”的高層Dial組實(shí)例1164,其與頂層設(shè)計(jì)實(shí)體1122相關(guān)聯(lián)。
每個(gè)Dial組實(shí)例通過(guò)在關(guān)聯(lián)設(shè)計(jì)實(shí)體的HDL文件內(nèi)包括適當(dāng)配置語(yǔ)句來(lái)創(chuàng)建。例如,創(chuàng)建Dial組“F”、“G”和“H”的配置語(yǔ)句的示例性語(yǔ)法分別如下給出GDial F(C,[Z].B,[Y].A);GDial G(D,[L].E);GDial H(FBC.F,L2.G);在每個(gè)配置語(yǔ)句中,Dial組用關(guān)鍵字“GDial”聲明,其后是表示組名的字符串(例如,“F”)。在組名之后的括號(hào)內(nèi),指定Dial組的Dial列表。如Dial組“H”的配置語(yǔ)句所示,分層Dial組的Dial列表以與Dial相同的方式指定其他Dial組。還應(yīng)當(dāng)注意的是,上述緊湊Dial表達(dá)式語(yǔ)法可以用于指定Dial列表中的Dial或Dial組,如Dial組“F”和“G”的配置語(yǔ)句所示。
既然描述了Dial的基本類型、其指定的語(yǔ)法以及應(yīng)用和Dial組,將提供配置數(shù)據(jù)庫(kù)814的示例性實(shí)現(xiàn)及其使用的描述。為了幫助理解在配置數(shù)據(jù)庫(kù)814中可訪問特定Dial實(shí)例體(或Dial的多個(gè)實(shí)例體)的方式,將描述配置數(shù)據(jù)庫(kù)814內(nèi)Dial的命名法。
用于本發(fā)明的優(yōu)選實(shí)施例中的命名法首先要求設(shè)計(jì)者唯一命名在任何給定設(shè)計(jì)實(shí)體內(nèi)指定的每個(gè)Dial,即設(shè)計(jì)者不能采用相同的Dial名稱在相同設(shè)計(jì)實(shí)體內(nèi)聲明任何兩個(gè)Dial。遵循該要求防止在相同設(shè)計(jì)實(shí)體中實(shí)例化的Dial之間的名稱沖突,并且?guī)椭O(shè)計(jì)實(shí)體在任意大小的模型中的任意再使用。該約束不太繁重,因?yàn)榻o定設(shè)計(jì)實(shí)體通常在特定時(shí)間點(diǎn)由特定設(shè)計(jì)者創(chuàng)建,并且在該限定環(huán)境內(nèi)維護(hù)唯一的Dial名稱僅帶來(lái)適度的負(fù)擔(dān)。
因?yàn)橄M軌騿为?dú)訪問在給定模擬模型中可具有多個(gè)實(shí)例體(例如,由于復(fù)制)的Dial實(shí)體的特定實(shí)例體,因此Dial名稱的單獨(dú)使用不能保證唯一標(biāo)識(shí)模擬模型中的特定Dial實(shí)體實(shí)例體。因此,在優(yōu)選實(shí)施例中,Dial的命名法支持本地HDL采用模擬模型內(nèi)每個(gè)Dial的“擴(kuò)展Dial標(biāo)識(shí)符”來(lái)消除相同設(shè)計(jì)實(shí)體的多個(gè)實(shí)例的歧義所需的關(guān)聯(lián)設(shè)計(jì)實(shí)體的唯一實(shí)例體標(biāo)識(shí)符。
另外,已經(jīng)認(rèn)識(shí)到一些HDL不嚴(yán)格強(qiáng)制唯一實(shí)體名稱的要求。例如,傳統(tǒng)VHDL實(shí)體命名結(jié)構(gòu)允許兩個(gè)設(shè)計(jì)實(shí)體共享相同的實(shí)體名稱entity_name。然而,VHDL要求具有相同名稱的實(shí)體必須封裝在從其可構(gòu)造有效VHDL模型的不同VHDL庫(kù)內(nèi)。在該情形下,entity_name等價(jià)于用點(diǎn)號(hào)(“.”)與在實(shí)體聲明中所聲明的實(shí)體名稱串接的VHDL庫(kù)名。因此,將不同VHDL庫(kù)名預(yù)先掛起到實(shí)體名稱將消除共享相同實(shí)體名稱的實(shí)體的歧義。大多數(shù)HDL包括諸如這樣的機(jī)制來(lái)唯一命名每個(gè)設(shè)計(jì)實(shí)體。
在優(yōu)選實(shí)施例中,唯一標(biāo)識(shí)Dial實(shí)體的特定實(shí)例體的擴(kuò)展Dial標(biāo)識(shí)符包括三個(gè)字段實(shí)例體標(biāo)識(shí)符字段、設(shè)計(jì)實(shí)體名稱和Dial名稱。擴(kuò)展Dial標(biāo)識(shí)符可如下被表達(dá)為以點(diǎn)號(hào)(“.”)分隔相鄰字段的字符串<實(shí)例體標(biāo)識(shí)符>.<設(shè)計(jì)實(shí)體名稱>.<Dial名稱>
在擴(kuò)展Dial標(biāo)識(shí)符中,設(shè)計(jì)實(shí)體字段包含Dial在其中被實(shí)例化的設(shè)計(jì)實(shí)體的實(shí)體名稱,并且Dial名稱字段包含在Dial配置指定語(yǔ)句中為Dial聲明的名稱。如上所述,在實(shí)例體標(biāo)識(shí)符字段中指定的實(shí)例體標(biāo)識(shí)符是實(shí)例體標(biāo)識(shí)符的序列,其從模擬模型的頂層實(shí)體開始到給定Dial實(shí)例的直接祖先設(shè)計(jì)實(shí)體,其中相鄰實(shí)例標(biāo)識(shí)符以點(diǎn)號(hào)(“.”)分開。由于沒有設(shè)計(jì)實(shí)體可包括兩個(gè)具有相同名稱的Dial,因此實(shí)例體標(biāo)識(shí)符對(duì)于模型內(nèi)Dial的每一個(gè)實(shí)例是唯一的。
設(shè)計(jì)實(shí)體名稱字段中名稱的唯一性是Dial之間的主要區(qū)分因素。通過(guò)在擴(kuò)展Dial標(biāo)識(shí)符中包括設(shè)計(jì)實(shí)體名稱,每個(gè)設(shè)計(jì)實(shí)體實(shí)際上被賦予了與那個(gè)設(shè)計(jì)實(shí)體相關(guān)聯(lián)的Dial的唯一命名空間,即給定設(shè)計(jì)實(shí)體內(nèi)的Dial不能同與其他設(shè)計(jì)實(shí)體相關(guān)聯(lián)的Dial具有名稱沖突。還應(yīng)當(dāng)注意的是,有可能通過(guò)單獨(dú)使用實(shí)例體標(biāo)識(shí)符字段來(lái)唯一命名每個(gè)Dial。也就是,由于實(shí)例體標(biāo)識(shí)符的唯一性,僅由實(shí)例體標(biāo)識(shí)符字段和Dial名稱字段形成的Dial標(biāo)識(shí)符將必定唯一。然而,該命名方案不將Dial與給定設(shè)計(jì)實(shí)體相關(guān)聯(lián)。實(shí)際上,期望將Dial與設(shè)計(jì)實(shí)體相關(guān)聯(lián),其中它們通過(guò)包括設(shè)計(jì)實(shí)體字段來(lái)發(fā)生,因?yàn)樗蠨ial實(shí)例體然后可被集中引用而無(wú)需確定包含Dial的所有設(shè)計(jì)實(shí)體實(shí)例體的名稱。
如上所述,使用擴(kuò)展Dial標(biāo)識(shí)符允許唯一標(biāo)識(shí)Dial的特定實(shí)例體,并且允許在任意模型內(nèi)再使用設(shè)計(jì)實(shí)體而無(wú)Dial名稱沖突的危險(xiǎn)。例如,再次參照?qǐng)D11B,Dial A實(shí)體實(shí)例體1140a0、1140a1、1140b0和1140b1可分別以下面的擴(kuò)展Dial標(biāo)識(shí)符來(lái)唯一標(biāo)識(shí)FBC.X0.Y0.Y.AFBC.X0.Y1.Y.AFBC.X1.Y0.Y.AFBC.X1.Y1.Y.A在理解了Dial的優(yōu)選命名法的情況下,現(xiàn)在參照?qǐng)D12,其是由配置編譯器808創(chuàng)建的配置數(shù)據(jù)庫(kù)814的示例性格式的圖示。在本示例性實(shí)施例中,配置數(shù)據(jù)庫(kù)814包括至少四種不同類型的數(shù)據(jù)結(jié)構(gòu)Dial定義數(shù)據(jù)結(jié)構(gòu)(DDDS)1200、Dial實(shí)例數(shù)據(jù)結(jié)構(gòu)(DIDS)1202、鎖存器數(shù)據(jù)結(jié)構(gòu)1204和頂層指針數(shù)組1206。配置數(shù)據(jù)庫(kù)814可以可選地包括附加數(shù)據(jù)結(jié)構(gòu),如Dial指針數(shù)組1208、鎖存器指針數(shù)組1210、實(shí)例指針數(shù)組1226和以短劃線表示的其他數(shù)據(jù)結(jié)構(gòu),當(dāng)配置數(shù)據(jù)庫(kù)814被裝載時(shí),這些附加數(shù)據(jù)結(jié)構(gòu)可以可選地在易失性存儲(chǔ)器中被構(gòu)造,如下面進(jìn)一步所述。僅在將配置數(shù)據(jù)庫(kù)814裝載到易失性存儲(chǔ)器中之后才生成這些附加數(shù)據(jù)結(jié)構(gòu)有利地促進(jìn)更緊湊的配置數(shù)據(jù)庫(kù)814。
對(duì)于數(shù)字系統(tǒng)中的每個(gè)Dial或Dial組,在配置數(shù)據(jù)庫(kù)814內(nèi)創(chuàng)建相應(yīng)的Dial定義數(shù)據(jù)結(jié)構(gòu)(DDDS)1200。最好是,在配置數(shù)據(jù)庫(kù)814中僅創(chuàng)建一個(gè)DDDS 1200而與數(shù)字系統(tǒng)中Dial(或Dial組)的實(shí)例體數(shù)目無(wú)關(guān)。如下所述,有關(guān)在DDDS 1200中描述的Dial的特定實(shí)例體的信息在獨(dú)立的DIDS 1202中指定。
如圖所示,每個(gè)DDDS 1200包括表示DDDS 1200描述Dial還是Dial組、并且如果是Dial還表示Dial類型的類型字段1220。在一個(gè)實(shí)施例中,為類型字段1220設(shè)置的值包括用于Dial組的“G”、用于整數(shù)Dial(IDial)的“I”、用于鎖存器Dial(LDial)的“L”和用于控制Dial(CDial)的“C”。DDDS 1200還包括名稱字段1222,其指定由DDDS 1200描述的Dial或Dial組的名稱。該字段最好包含Dial(或Dial組)的設(shè)計(jì)實(shí)體名稱,之后是點(diǎn)號(hào)(“.”),再之后是在Dial(或Dial組)的配置指定語(yǔ)句中給出的Dial(或Dial組)的名稱。名稱字段1222的內(nèi)容對(duì)應(yīng)于設(shè)計(jì)實(shí)體名稱和Dial的擴(kuò)展Dial標(biāo)識(shí)符的Dial名稱字段。
DDDS 1200還包括映射表1224,如果需要,其包含從給定Dial的輸入到其輸出的映射。對(duì)于LDial和CDial,映射表1224在很大程度上如同這些Dial的配置指定語(yǔ)句一樣指定輸入值與輸出值之間的關(guān)系。對(duì)于沒有分裂輸出的Dial組和IDial,映射表1220是空數(shù)據(jù)結(jié)構(gòu)并且未被使用。在具有分裂輸出的IDial的情況下,映射表1220指定復(fù)制整數(shù)字段的寬度和那個(gè)字段的副本數(shù)。該信息用來(lái)將整數(shù)輸入值映射到整數(shù)輸出字段的各個(gè)副本。
最后,DDDS 1200可包括實(shí)例指針數(shù)組1226,其包含一個(gè)或多個(gè)指向由DDDS 1200定義的Dial或Dial組的每個(gè)實(shí)例的實(shí)例指針1228a-1228n。實(shí)例指針數(shù)組1226幫助訪問特定Dial或Dial組的多個(gè)實(shí)例。
如圖12進(jìn)一步所示,配置數(shù)據(jù)庫(kù)814包含對(duì)應(yīng)于數(shù)字設(shè)計(jì)內(nèi)的每個(gè)Dial實(shí)例體或Dial組實(shí)例體的DIDS 1202。每個(gè)DIDS 1202包含定義字段1230,其包含指向DIDS 1202為其描述特定實(shí)例的Dial的DDDS 1200的定義指針1231。一旦識(shí)別出特定Dial實(shí)例,定義指針1231就允許容易地訪問實(shí)例的Dial名稱、Dial類型和映射表。
DIDS 1202還包括父字段1232,在IDial、CDial或LDial的情況下,其包含指向其輸出在邏輯上連接到對(duì)應(yīng)Dial實(shí)例的輸入的高層Dial實(shí)例的DIDS 1202(若有的話)的父指針1233。在Dial組的情況下,父指針1233指向以分層方式包括當(dāng)前Dial組的高層Dial組的DIDS 1202(若有的話)。如果對(duì)應(yīng)于DIDS 1202的Dial實(shí)例是頂層Dial,并且不屬于任何Dial組,則父字段1232中的父指針1233是NULL(空)指針。應(yīng)當(dāng)注意的是,Dial可以是頂層Dial,但是仍然屬于Dial組。在這種情況下,父指針1233非空,而是指向包含頂層Dial的Dial組的DIDS 1202。
因此,配置數(shù)據(jù)庫(kù)814中DIDS 1202的父字段1232共同描述在數(shù)字設(shè)計(jì)中實(shí)例化的Dial實(shí)體和Dial組的分層安排。如下所述,在給定最終由頂層Dial控制的配置鎖存器的配置值的情況下,由父字段1232提供的分層信息有利地使得能夠確定任何頂層Dial的輸入值。
DIDS 1202的實(shí)例名稱字段1234提供從數(shù)字設(shè)計(jì)的頂層設(shè)計(jì)實(shí)體開始、由DIDS 1202描述的Dial實(shí)例的完全合格的實(shí)例名稱。對(duì)于與頂層實(shí)體相關(guān)聯(lián)的Dial實(shí)例,實(shí)例名稱字段1234最好包含空字符串。
DIDS 1202還可包括缺省字段1229、階段ID字段1227和Dial設(shè)置字段1239。在編譯時(shí)候,配置編譯器808最好初始地將缺省字段1229插入到關(guān)聯(lián)Dial的配置指定語(yǔ)句對(duì)于其指定有缺省值的至少每個(gè)DIDS 1202中。缺省字段1229存儲(chǔ)指定缺省值;如果沒有指定缺省值,則缺省字段1229為空或者被省略。配置編譯器808隨后利用遞歸式遍歷來(lái)分析配置數(shù)據(jù)庫(kù)814,或者刪除(或設(shè)成空)具有帶缺省值的祖先Dial的任何Dial實(shí)例的缺省字段1229。以這種方式,在分層結(jié)構(gòu)中處于高層的Dial實(shí)例的缺省值覆蓋為低層Dial實(shí)例指定的缺省值。對(duì)于每個(gè)其余(或非空)缺省字段1229,配置編譯器808將用于存儲(chǔ)與缺省值相關(guān)聯(lián)的一個(gè)或多個(gè)階段ID(若有的話)的階段ID字段1227插入到DIDS 1202中。存儲(chǔ)在階段ID字段1227內(nèi)的階段ID可在HDL文件800或配置指定文件802中的Dial定義語(yǔ)句內(nèi)指定,或者可以可選地由下游用戶通過(guò)直接操縱配置數(shù)據(jù)庫(kù)814來(lái)提供,如下面參照?qǐng)D18C所述。
如虛線所示,當(dāng)配置數(shù)據(jù)庫(kù)814被裝載到易失性存儲(chǔ)器中時(shí),Dial設(shè)置字段1239最好被插入在配置數(shù)據(jù)庫(kù)814中的每個(gè)DIDS 1302內(nèi)。Dial設(shè)置字段1239是布爾值字段,其初始化為FALSE(假),并且當(dāng)顯式設(shè)置關(guān)聯(lián)Dial實(shí)例時(shí)更新為真。
最后,DIDS 1202包括輸出指針數(shù)組1236,其包含指向描述與對(duì)應(yīng)Dial實(shí)例或Dial組實(shí)例相關(guān)聯(lián)的低層實(shí)例體的數(shù)據(jù)結(jié)構(gòu)的指針1238a-1238n。具體地說(shuō),在IDial和LDial的情況下,輸出指針1238引用與耦合于Dial實(shí)例的配置鎖存器相對(duì)應(yīng)的鎖存器數(shù)據(jù)結(jié)構(gòu)1204。對(duì)于非分裂IDial,由輸出指針1238a引用的配置鎖存器實(shí)體接收整數(shù)輸入值的高位比特,并且由輸出指針1238n引用的配置鎖存器實(shí)體接收整數(shù)輸入值的低位比特。在CDial的情況下,輸出指針1238引用與由CDial控制的Dial實(shí)例相對(duì)應(yīng)的其他DIDS 1202。對(duì)于Dial組,輸出指針1238引用以分層方式包括在對(duì)應(yīng)于DIDS 1202的Dial組實(shí)例內(nèi)的頂層Dial實(shí)例或Dial組實(shí)例。
對(duì)于LDial或IDial的輸出在邏輯上與之耦合的模擬可執(zhí)行模型816中的每個(gè)配置鎖存器,配置數(shù)據(jù)庫(kù)814還包括相應(yīng)的鎖存器數(shù)據(jù)結(jié)構(gòu)1204。每個(gè)鎖存器數(shù)據(jù)結(jié)構(gòu)1204包括父字段1240,其包含指向直接控制對(duì)應(yīng)配置鎖存器的LDial或IDial的DIDS 1200的父指針1242。另外,相對(duì)于包含由父指針1242標(biāo)識(shí)的Dial實(shí)例體的實(shí)體,鎖存器數(shù)據(jù)結(jié)構(gòu)1204包括指定分層鎖存器名稱的鎖存器名稱字段1244。例如,如果具有實(shí)例體標(biāo)識(shí)符a.b.c的LDialX引用具有分層名稱“a.b.c.d.latch1”的配置鎖存器,則鎖存器名稱字段1244將包含字符串“d.latch1”。這樣,將由父指針1242標(biāo)識(shí)的DIDS 1202的實(shí)例名稱字段1234的內(nèi)容預(yù)先掛起到鎖存器名稱字段1244的內(nèi)容將提供可利用配置數(shù)據(jù)庫(kù)814配置的給定配置鎖存器的任何實(shí)例的完全合格的名稱。
仍然參照?qǐng)D12,如上所述,配置數(shù)據(jù)庫(kù)814包括頂層指針數(shù)組1206以及可選地包括Dial指針數(shù)組1208和鎖存器指針數(shù)組1210。頂層指針數(shù)組1206包含頂層指針1250,其對(duì)于每個(gè)頂層Dial和每個(gè)頂層Dial組指向頂層實(shí)體實(shí)例的關(guān)聯(lián)DIDS 1202。Dial指針數(shù)組1208包括指向配置數(shù)據(jù)庫(kù)814中的每個(gè)DDDS 1200的Dial指針1252,以允許通過(guò)Dial和/或?qū)嶓w名稱間接訪問特定Dial實(shí)例。最后,鎖存器指針數(shù)組1210包括鎖存器指針1254,其指向配置數(shù)據(jù)庫(kù)814內(nèi)的每個(gè)鎖存器數(shù)據(jù)結(jié)構(gòu)1204,以允許容易地訪問所有配置鎖存器。
一旦構(gòu)造了配置數(shù)據(jù)庫(kù)814,則配置數(shù)據(jù)庫(kù)814的內(nèi)容可被裝載到易失性存儲(chǔ)器如圖1的數(shù)據(jù)處理系統(tǒng)8的系統(tǒng)存儲(chǔ)器18中,從而適當(dāng)?shù)嘏渲糜糜谀M的模擬模型。一般而言,數(shù)據(jù)結(jié)構(gòu)1200、1202、1204和1206可被直接裝載到系統(tǒng)存儲(chǔ)器18中,并且可以可選地增加附加字段,如下所述。然而,如上所述,如果希望使配置數(shù)據(jù)庫(kù)814的非易失性映像緊湊,則在系統(tǒng)存儲(chǔ)器18的非易失性配置數(shù)據(jù)庫(kù)映像中生成附加數(shù)據(jù)結(jié)構(gòu)如Dial指針數(shù)組1208、鎖存器指針數(shù)組1210和實(shí)例指針陣列1226是有幫助的。
現(xiàn)在參照?qǐng)D13,示出了在數(shù)據(jù)處理系統(tǒng)的易失性存儲(chǔ)器如數(shù)據(jù)處理系統(tǒng)8的系統(tǒng)存儲(chǔ)器18內(nèi)展開配置數(shù)據(jù)庫(kù)814的方法的高層邏輯流程圖。由于圖13示出邏輯步驟而非操作步驟,因此應(yīng)當(dāng)理解,可以同時(shí)或者以不同于所示的次序執(zhí)行圖13所示的很多步驟。
如圖所示,該過(guò)程開始于塊1300,然后進(jìn)入塊1302,其示出數(shù)據(jù)處理系統(tǒng)6將配置數(shù)據(jù)庫(kù)814內(nèi)的現(xiàn)有數(shù)據(jù)結(jié)構(gòu)從非易失性存儲(chǔ)裝置(例如,盤存儲(chǔ)裝置或閃存)拷貝到易失性系統(tǒng)存儲(chǔ)器18中。下一步,在塊1304,確定配置數(shù)據(jù)庫(kù)814的頂層指針數(shù)組1206內(nèi)的所有頂層指針1250是否已被處理。如果是,則該過(guò)程傳到下面討論的塊1320。如果否,該過(guò)程進(jìn)入塊1306,其示出從頂層數(shù)組1206選擇要處理的下一個(gè)頂層指針1250。
然后,在塊1308確定由選定頂層指針1250標(biāo)識(shí)的DIDS 1202內(nèi)的父指針1233是否為空指針。如果否,其表示DIDS 1202描述屬于Dial組的頂層Dial,則該過(guò)程返回到塊1304,其表示當(dāng)處理其所屬的Dial組時(shí)將處理頂層Dial及其關(guān)聯(lián)低層Dial。
響應(yīng)于在塊1308確定父指針1233是空指針,數(shù)據(jù)處理系統(tǒng)8在DIDS1202的定義字段1230中的定義指針1231所指向的DDDS 1200的實(shí)例數(shù)組1226中創(chuàng)建指向DIDS 1202的實(shí)例指針1228,如塊1310所示。下一步,在塊1312,如果Dial指針1252不冗余,則數(shù)據(jù)處理系統(tǒng)8在Dial指針數(shù)組1208內(nèi)創(chuàng)建指向頂層Dial的DDDS 1200的Dial指針1252。另外,如塊1314所示,數(shù)據(jù)處理系統(tǒng)8創(chuàng)建鎖存器指針數(shù)組1210內(nèi)的鎖存器指針1254,其指向由頂層Dial的DIDS 1202的輸出指針1238引用的每個(gè)鎖存器數(shù)據(jù)結(jié)構(gòu)1204(若有的話)。然后,如塊1316所示,通過(guò)執(zhí)行塊1310-1316所示的功能來(lái)類似地處理以由選定的頂層指針1250引用的頂層Dial為首的Dial樹的每個(gè)低層的每個(gè)分支(若有的話),直到找到并處理了終止那個(gè)分支的鎖存器數(shù)據(jù)結(jié)構(gòu)1204為止。然后,該過(guò)程返回到塊1304,其表示頂層指針數(shù)組1206內(nèi)每個(gè)頂層指針1250的處理。
響應(yīng)于在塊1304確定所有頂層指針1250均被處理,圖13所示的過(guò)程進(jìn)入塊1320。塊1320示出在配置數(shù)據(jù)庫(kù)內(nèi)的每個(gè)DIDS 1320中創(chuàng)建Dial設(shè)置字段1239。如上所述,Dial設(shè)置字段1239是布爾值字段,其初始化為假,并且當(dāng)顯式設(shè)置關(guān)聯(lián)Dial實(shí)例時(shí)更新為真。另外,如塊1322所示,數(shù)據(jù)處理系統(tǒng)8在每個(gè)鎖存器數(shù)據(jù)結(jié)構(gòu)1204中創(chuàng)建鎖存器值字段1246、鎖存器設(shè)置字段1248和設(shè)置歷史字段1249,以分別表示關(guān)聯(lián)配置鎖存器的當(dāng)前設(shè)置值,表示配置鎖存器是否當(dāng)前通過(guò)顯式設(shè)置命令而設(shè)置,以及表示配置鎖存器是否已經(jīng)被顯式設(shè)置。雖然塊1320-1322所示的四個(gè)字段的創(chuàng)建為了簡(jiǎn)潔起見是與塊1304-1316所示的處理分開示出的,但是應(yīng)當(dāng)理解,當(dāng)處理每個(gè)DIDS 1202時(shí)創(chuàng)建Dial設(shè)置字段1239并且當(dāng)?shù)竭_(dá)每個(gè)Dial樹的底部的鎖存器數(shù)據(jù)結(jié)構(gòu)1204時(shí)創(chuàng)建字段1246、1248和1249是更高效的。然后,將配置數(shù)據(jù)庫(kù)裝載到易失性存儲(chǔ)器中的過(guò)程終止于塊1234。
在配置數(shù)據(jù)庫(kù)被裝載到易失性存儲(chǔ)器中的情況下,可以配置和利用模擬模型以通過(guò)執(zhí)行模擬軟件來(lái)模擬數(shù)字設(shè)計(jì)。參照?qǐng)D14,示出了描述在模擬模型的模擬運(yùn)行期間系統(tǒng)存儲(chǔ)器18(圖1)的內(nèi)容的方框圖。如圖所示,系統(tǒng)存儲(chǔ)器18包括模擬模型1400和軟件,其中模擬模型1400是所要模擬的數(shù)字設(shè)計(jì)的邏輯表示,并且軟件包括配置API 1406、模擬器1410和RTX(運(yùn)行時(shí)間執(zhí)行體)1420。
模擬器1410將模擬模型如模擬模型1400裝載到系統(tǒng)存儲(chǔ)器18中。在模擬運(yùn)行期間,模擬器1410通過(guò)各種API 1416復(fù)位、定時(shí)和評(píng)估模擬模型1400。另外,模擬器1410利用GETFAC API 1412讀取模擬模型1400中的值,并且利用PUTFAC API 1414將值寫入到模擬模型1400。雖然模擬器1410在圖14中是完全采用軟件來(lái)實(shí)現(xiàn)的,但是應(yīng)當(dāng)理解,在下文中模擬器可以可選地至少部分采用硬件來(lái)實(shí)現(xiàn)。
配置API 1406包括典型地采用支持配置模擬模型1400的高級(jí)語(yǔ)言如C或C++來(lái)編寫的軟件。根據(jù)需要由模擬器1410動(dòng)態(tài)裝載的這些API包括第一API,其從非易失性存儲(chǔ)裝置裝載配置數(shù)據(jù)庫(kù)814并且以上面參照?qǐng)D13所述的方式展開它,以提供配置數(shù)據(jù)庫(kù)1404的存儲(chǔ)器映像。配置API 1406還包括附加API,以如下所述訪問和操縱配置數(shù)據(jù)庫(kù)1404。
RTX 1420控制模擬模型如模擬模型1400的模擬。例如,RTX 1420裝載要施加于模擬模型1400的測(cè)試?yán)?。另外,RTX 1420輸送對(duì)配置API 1406和由模擬器1410提供的API的一組API調(diào)用,以初始化、配置和模擬模擬模型1400的操作。在模擬期間和之后,RTX 1420還調(diào)用配置API 1406和由模擬器1410提供的API,以通過(guò)訪問模擬模型1400內(nèi)的各個(gè)Dial、配置鎖存器、計(jì)數(shù)器和其他實(shí)體來(lái)檢查模擬模型1400的正確性。
RTX 1420具有訪問在模擬模型1400內(nèi)實(shí)例化的Dial的兩個(gè)模式交互模式和批模式。在交互模式中,RTX 1420調(diào)用第一組API來(lái)從配置數(shù)據(jù)庫(kù)1404內(nèi)的特定Dial的一個(gè)或多個(gè)實(shí)例讀取或者向其寫入。通過(guò)參考配置數(shù)據(jù)庫(kù)1404而獲得的鎖存器值在模擬模型1400內(nèi)立即生效。在批模式中,RTX1420調(diào)用不同的第二組API來(lái)讀取或?qū)懭肱渲脭?shù)據(jù)庫(kù)1404中多個(gè)Dial的實(shí)例體,然后同時(shí)進(jìn)行對(duì)模擬模型1400的任何修改。
在交互或批模式中,RTX 1420必須在其API調(diào)用中采用某種語(yǔ)法來(lái)指定要訪問模擬模型1400內(nèi)的哪些Dial或Dial組實(shí)例。雖然可采用多種不同語(yǔ)法,包括采用通配符的傳統(tǒng)正規(guī)表達(dá)式,但是在說(shuō)明性實(shí)施例中,用來(lái)在API調(diào)用中指定Dial或Dial組實(shí)例的語(yǔ)法類似于前述的緊湊表達(dá)式。上述緊湊表達(dá)式與用來(lái)在RTX API調(diào)用中指定Dial或Dial組實(shí)例的語(yǔ)法之間的關(guān)鍵不同之處在于,在說(shuō)明性實(shí)施例中,通過(guò)引用模擬模型1400的頂層設(shè)計(jì)實(shí)體而非相對(duì)于其中指定了Dial或Dial組的設(shè)計(jì)實(shí)體來(lái)在RTX API調(diào)用中指定Dial和Dial組實(shí)例。
在所示實(shí)施例中,以模擬模型1400中的一個(gè)或多個(gè)Dial或Dial組實(shí)例為目標(biāo)的每個(gè)RTX API調(diào)用利用兩個(gè)參數(shù)指定Dial或Dial組實(shí)例實(shí)例限定符和Dial名稱限定符。為了僅引用單個(gè)Dial或Dial組實(shí)例體,實(shí)例限定符采取“a.b.c.d”的形式,其是出現(xiàn)該單個(gè)Dial或Dial組實(shí)例體的設(shè)計(jì)實(shí)體的分層實(shí)例體標(biāo)識(shí)符。為了引用多個(gè)Dial或Dial組實(shí)例,實(shí)例限定符采取“a.b.c.[X]”的形式,其標(biāo)識(shí)實(shí)體實(shí)例a.b.c的范圍內(nèi)實(shí)體X的所有實(shí)例體。采用退化的形式,實(shí)例限定符可簡(jiǎn)單地為“[X]”,其標(biāo)識(shí)模擬模型1400內(nèi)任何地方的實(shí)體X的所有實(shí)例體。
Dial名稱(dialname)限定符最好采取“Entity(實(shí)體).dialname(Dial名稱)”的形式,其中“實(shí)體”是Dial或Dial組在其中被實(shí)例化的設(shè)計(jì)實(shí)體,并且“Dial名稱”是在其配置指定語(yǔ)句中分配給Dial或Dial組的名稱。如果采用帶方括號(hào)語(yǔ)法來(lái)指定實(shí)例限定符,則可從Dial名稱限定符中去掉“實(shí)體”字段,因?yàn)樗鼘⑵ヅ鋷Х嚼ㄌ?hào)的實(shí)體名稱。
現(xiàn)在參照?qǐng)D15,其示出了根據(jù)本發(fā)明的配置API 1406基于實(shí)例限定符和Dial名稱限定符對(duì)在配置數(shù)據(jù)庫(kù)1404中定位特定Dial或Dial組實(shí)例的示例性過(guò)程的高層邏輯流程圖。如圖所示,該過(guò)程響應(yīng)于配置API 1406接收到如上所述來(lái)自包含實(shí)例限定符和Dial名稱限定符的RTX 1420的API調(diào)用而開始于塊1500。響應(yīng)于該API調(diào)用,配置API 1406以Dial指針數(shù)組1208進(jìn)入配置數(shù)據(jù)庫(kù)1404,如塊1502所示,并且利用Dial指針1252來(lái)定位其名稱字段1222精確匹配指定Dial名稱限定符的DDDS 1200,如塊1504所示。
下一步,在塊1506,配置API 1406確定實(shí)例限定符是否如上所述采用帶方括號(hào)語(yǔ)法。如果是,則該過(guò)程傳到下面描述的塊1520。然而,如果實(shí)例限定符沒有采用帶方括號(hào)語(yǔ)法,則配置API 1406依照匹配DDDS 1200的實(shí)例指針1228來(lái)定位其實(shí)例名稱字段1234精確匹配指定的實(shí)例限定符的單個(gè)DIDS 1202。如塊1510-1512所示,如果沒有找到匹配,則該過(guò)程以錯(cuò)誤終止。然而,如果定位了匹配DIDS 1202,則在塊1524創(chuàng)建標(biāo)識(shí)該單個(gè)匹配DIDS1202的臨時(shí)“結(jié)果”指針。然后,該過(guò)程終止于塊1526。
回到塊1520,如果采用帶方括號(hào)語(yǔ)法,則配置API 1406利用匹配DDDS1200的實(shí)例指針1228,以在由方括號(hào)之前的實(shí)例標(biāo)識(shí)符的前綴部分指定的范圍內(nèi)定位一個(gè)或多個(gè)Dial或Dial組實(shí)例的DIDS 1202。也就是,如果DIDS1202的實(shí)例名稱字段1234包含實(shí)例限定符的前綴部分,則認(rèn)為DIDS 1202“匹配”。再次,如果沒有找到匹配,該過(guò)程通過(guò)塊1522,并且以錯(cuò)誤終止于塊1512。然而,如果一個(gè)或多個(gè)DIDS 1202“匹配”實(shí)例限定符,則在塊1524構(gòu)造標(biāo)識(shí)匹配DIDS 1202的臨時(shí)結(jié)果指針。圖15所示的過(guò)程然后終止于塊1526。
現(xiàn)在參照?qǐng)D16A,其示出了根據(jù)本發(fā)明的RTX 1420在交互模式中讀取一個(gè)或多個(gè)Dial實(shí)例的值的示例性過(guò)程的高層邏輯流程圖。如圖所示,該過(guò)程響應(yīng)于配置API 1406接收到RTX 1420的read_Dial()API調(diào)用而開始于塊1600。如塊1602所示,配置API 1406通過(guò)利用上面參照?qǐng)D15所述的過(guò)程響應(yīng)API調(diào)用而在配置數(shù)據(jù)庫(kù)1404內(nèi)定位一個(gè)或多個(gè)Dial實(shí)例的DIDS 1202來(lái)響應(yīng)read_Dial()API調(diào)用。
然后,該過(guò)程在塊1604進(jìn)入循環(huán),其中處理通過(guò)圖15的過(guò)程生成的臨時(shí)結(jié)果指針的每一個(gè)。如果通過(guò)圖15的過(guò)程返回的所有結(jié)果指針均被處理,則該過(guò)程傳到下面描述的塊1640。如果否,則該過(guò)程從塊1606進(jìn)入塊1608,其示出配置API 1406選擇所要處理的下一個(gè)結(jié)果指針。下一步,在塊1608,配置API 1406通過(guò)參考與由當(dāng)前結(jié)果指針標(biāo)識(shí)的DIDS 1202相關(guān)聯(lián)的DDDS1200的類型字段1220,確定DIDS 1202是否對(duì)應(yīng)于Dial組。如果是,則圖16A所示的過(guò)程以錯(cuò)誤狀態(tài)終止于塊1610,其表示RTX 1420利用了錯(cuò)誤的API調(diào)用來(lái)讀取Dial實(shí)例。
響應(yīng)于在塊1608確定由當(dāng)前結(jié)果指針標(biāo)識(shí)的DIDS 1202不對(duì)應(yīng)于Dial組實(shí)例,該過(guò)程進(jìn)入塊1620。塊1620示出配置API 1406利用DIDS 1202的輸出指針1238(以及Dial樹中任何低層DIDS 1202的輸出指針)來(lái)從與最終由在API調(diào)用中指定的Dial實(shí)例控制的所有配置鎖存器相對(duì)應(yīng)的鎖存器數(shù)據(jù)結(jié)構(gòu)1204的鎖存器名稱字段1244構(gòu)建包含鎖存器名稱的數(shù)據(jù)集。下一步,如塊1622所示,配置API 1406發(fā)出一個(gè)或多個(gè)對(duì)模擬器1410的GETFAC()API1412的API調(diào)用,以從模擬模型1400獲得列于在塊1620構(gòu)造的數(shù)據(jù)集中的所有配置鎖存器的鎖存器值。
然后,配置API 1406參考配置數(shù)據(jù)庫(kù)1404驗(yàn)證從模擬模型1400獲得的鎖存器值,如塊1624所示。為了驗(yàn)證鎖存器值,配置API 1406利用映射表1224從對(duì)應(yīng)的鎖存器數(shù)據(jù)結(jié)構(gòu)通過(guò)中間DIDS 1202(若有的話)沿著Dial樹向上傳播鎖存器值,直到確定所請(qǐng)求的Dial實(shí)例的輸入值為止。如果在該驗(yàn)證過(guò)程的任何點(diǎn),通過(guò)驗(yàn)證過(guò)程生成的Dial實(shí)例的輸出值不對(duì)應(yīng)于在其映射表1224中列舉的合法值之一,則在塊1626檢測(cè)到錯(cuò)誤。因此,將從模擬模型1400讀取的鎖存器值和錯(cuò)誤指示置于結(jié)果數(shù)據(jù)結(jié)構(gòu)中,如塊1630所示。如果沒有檢測(cè)到錯(cuò)誤,則將通過(guò)驗(yàn)證過(guò)程生成的Dial輸入值和成功指示置于結(jié)果數(shù)據(jù)結(jié)構(gòu)中,如塊1628所示。
如該過(guò)程返回到塊1604所示,對(duì)于通過(guò)圖15的過(guò)程返回的每個(gè)臨時(shí)結(jié)果指針,重復(fù)上述過(guò)程。一旦所有結(jié)果指針都被處理,則該過(guò)程從塊1604傳到塊1640-1642,其示出配置API 1406將結(jié)果數(shù)據(jù)結(jié)構(gòu)返回到RTX 1420,然后終止。
RTX 1420利用例如圖16A的方法在交互模式中讀取Dial實(shí)例,以初始化在模擬運(yùn)行期間監(jiān)視模擬模型1400的部分的檢查器。感興趣的Dial設(shè)置不僅包括頂層Dial實(shí)例的Dial設(shè)置,而且包括與由檢查器監(jiān)視的模擬模型1400的部分聯(lián)合的低層Dial實(shí)例的Dial設(shè)置。
現(xiàn)在參照?qǐng)D16B,其示出了根據(jù)本發(fā)明的RTX 1420在交互模式中讀取一個(gè)或多個(gè)Dial組實(shí)例的值的示例性過(guò)程的高層邏輯流程圖。通過(guò)比較圖16A和16B可以看出,讀取Dial組實(shí)例的過(guò)程類似于讀取Dial實(shí)例的過(guò)程,但是返回可能不同的Dial實(shí)體的一個(gè)或多個(gè)頂層Dial實(shí)例的值而非相同Dial實(shí)體的一個(gè)或多個(gè)實(shí)例的值。
如圖所示,圖16B所示的過(guò)程響應(yīng)于配置API 1406接收到RTX 1420的read_Dial_group()API調(diào)用而開始于塊1650。如塊1652所示,配置API 1406通過(guò)利用上面參照?qǐng)D15所述的過(guò)程、響應(yīng)API調(diào)用來(lái)在配置數(shù)據(jù)庫(kù)1404內(nèi)定位一個(gè)或多個(gè)Dial組實(shí)例的DIDS 1202來(lái)響應(yīng)read_Dial_group()API調(diào)用。
然后,該過(guò)程在塊1654進(jìn)入循環(huán),其中處理通過(guò)圖15的過(guò)程生成的臨時(shí)結(jié)果指針的每一個(gè)。如果通過(guò)圖15的過(guò)程返回的所有結(jié)果指針都被處理,則該過(guò)程傳到下面描述的塊1680。如果否,則該過(guò)程從塊1654進(jìn)入塊1656,其示出配置API 1406選擇所要處理的下一個(gè)結(jié)果指針。下一步,在塊1658,配置API 1406標(biāo)識(shí)并創(chuàng)建指向?qū)儆谂c由當(dāng)前結(jié)果指針引用的DIDS 1202相對(duì)應(yīng)的Dial組實(shí)例的所有頂層Dial實(shí)例的臨時(shí)指針。通過(guò)定位關(guān)聯(lián)DDDS 1220中的類型字段1220指定不同于Dial組的類型的每個(gè)輸出指針1238的最高層DIDS 1202來(lái)標(biāo)識(shí)頂層Dial實(shí)例。換句話說(shuō),配置API 1406可能不得不向下搜索一個(gè)或多個(gè)分層Dial組,以定位相關(guān)頂層Dial實(shí)例。
圖16B所示的過(guò)程然后進(jìn)入以塊1659開始的循環(huán),其中,單獨(dú)處理屬于與由當(dāng)前結(jié)果指針引用的Dial組DIDS 1202相對(duì)應(yīng)的Dial組的頂層Dial實(shí)例的每一個(gè),以獲得頂層Dial實(shí)例的值。下一步,該過(guò)程進(jìn)入塊1660,其示出配置API 1406利用第一個(gè)(或下一個(gè))頂層Dial實(shí)例的DIDS 1202的輸出指針1238(以及Dial樹中任何低層DIDS 1202的輸出指針),從與由頂層Dial實(shí)例最終控制的所有配置鎖存器相對(duì)應(yīng)的鎖存器數(shù)據(jù)結(jié)構(gòu)1204的鎖存器名稱字段1244構(gòu)建包含鎖存器名稱的數(shù)據(jù)集。下一步,如塊1662所示,配置API 1406發(fā)出一個(gè)或多個(gè)對(duì)模擬器1410的GETFAC()API 1412的API調(diào)用,以從模擬模型1400獲得列于在塊1660構(gòu)造的數(shù)據(jù)集中的所有配置鎖存器的鎖存器值。
在塊1664,配置API 1406然后利用上面參照?qǐng)D16A的塊1624所述的相同技術(shù),參考配置數(shù)據(jù)庫(kù)1404驗(yàn)證從模擬模型1400獲得的鎖存器值。如果在該驗(yàn)證過(guò)程的任何點(diǎn),通過(guò)驗(yàn)證過(guò)程生成的Dial實(shí)例的輸出值不對(duì)應(yīng)于在其映射表1224中列舉的合法值之一,則在塊1666檢測(cè)到錯(cuò)誤。因此,將從模擬模型1400讀取的鎖存器值和錯(cuò)誤指示置于結(jié)果數(shù)據(jù)結(jié)構(gòu)中,如塊1670所示。如果沒有檢測(cè)到錯(cuò)誤,則將通過(guò)驗(yàn)證過(guò)程生成的Dial輸入值和成功指示置于結(jié)果數(shù)據(jù)結(jié)構(gòu)中,如塊1668所示。
在塊1668或塊1670之后,該過(guò)程返回到塊1659,其表示確定屬于與由當(dāng)前結(jié)果指針引用的DIDS 1202相對(duì)應(yīng)的Dial組的所有頂層Dial是否都被處理。如果否,則該過(guò)程返回到已經(jīng)描述過(guò)的塊1660。然而,如果所有頂層Dial都被處理,則該過(guò)程返回到塊1654,其示出確定所有結(jié)果指針是否都被處理。如果否,則在已經(jīng)描述過(guò)的塊1656和下面塊處理下一個(gè)結(jié)果指針。然而,如果所有結(jié)果指針都被處理,則該過(guò)程傳到塊1680-1682,其示出配置API 1406將結(jié)果數(shù)據(jù)結(jié)構(gòu)返回給RTX 1420,然后終止。
在RTX 1420的批模式中讀取Dial和Dial組實(shí)例最好是除了一個(gè)例外之外以與交互模式相同的方式由配置API 1406進(jìn)行處理。在交互模式中總是在塊1622和1662通過(guò)對(duì)GETFAC()API 1412的調(diào)用從模擬模型1440讀取鎖存器值,而在批模式中最好是,如果鎖存器設(shè)置字段1248表示對(duì)應(yīng)配置鎖存器已被設(shè)置,則從配置數(shù)據(jù)庫(kù)1404中的鎖存器數(shù)據(jù)結(jié)構(gòu)1204的鎖存器值字段1246獲得鎖存器值。如果配置鎖存器尚未被設(shè)置,則通過(guò)對(duì)GETFAC()API1412的調(diào)用從模擬模型1440獲得鎖存器值。該差別確保正確地報(bào)告在批模式中進(jìn)行的Dial設(shè)置,其可能尚未被反映在模擬模型1400中。
現(xiàn)在參照?qǐng)D17A,其示出了根據(jù)本發(fā)明的RTX在交互模式中設(shè)置Dial實(shí)例的示例性過(guò)程的高層邏輯流程圖。該過(guò)程響應(yīng)于配置API 1406接收到來(lái)自RTX 1420的set_Dial()API調(diào)用而開始于塊1700。響應(yīng)于set_Dial()API調(diào)用,配置API 1406首先利用上面參照?qǐng)D15所述的技術(shù),定位和生成指向在set_Dial()API調(diào)用中指定的Dial實(shí)例的DIDS 1202的臨時(shí)結(jié)果指針,如塊1702所示。下一步,配置API 1406在塊1704確定所有臨時(shí)結(jié)果指針是否指向頂層Dial實(shí)例的DIDS 1202。例如,該確定可通過(guò)檢查每個(gè)這樣的DIDS 1202的父指針1233(和由父指針1233鏈接的任何高層DIDS 1202的父指針)、以及關(guān)聯(lián)DDDS 1200的類型字段1220來(lái)進(jìn)行。頂層Dial實(shí)例的DIDS 1202將具有空父指針1233或指向關(guān)聯(lián)DDDS 1200的類型字段1220表示Dial組的另一個(gè)DIDS 1202的非空父指針1233。如果由結(jié)果指針引用的任何DIDS 1202不對(duì)應(yīng)于頂層Dial實(shí)例,則該過(guò)程以錯(cuò)誤狀態(tài)終止于塊1708。
響應(yīng)于在塊1704確定由結(jié)果指針引用的所有DIDS 1202對(duì)應(yīng)于頂層Dial實(shí)例,在塊1706進(jìn)一步確定Dial實(shí)例要被設(shè)置的指定值是否是在關(guān)聯(lián)DDDS1200的映射表1224中指定的值之一。如果否,則該過(guò)程以錯(cuò)誤終止于塊1708。然而,響應(yīng)于在塊1706確定Dial實(shí)例要被設(shè)置的指定值是合法值之一,則該過(guò)程進(jìn)入包括塊1710-1716的循環(huán),其中處理每個(gè)結(jié)果指針以設(shè)置各自的Dial實(shí)例。
在塊1710,配置API 1406確定所有結(jié)果指針是否都被處理。如果是,則該過(guò)程終止于塊1720。然而,如果還有另外的結(jié)果指針要被處理,則在塊1712選擇所要處理的下一個(gè)結(jié)果指針。下一步,在塊1714,配置API 1406將在set_Dial()API調(diào)用中指定的Dial設(shè)置沿著以與由當(dāng)前結(jié)果指針引用的DIDS 1202相關(guān)聯(lián)的頂層Dial實(shí)例為首的Dial樹向下傳播。為了傳播期望Dial設(shè)置,必要時(shí),首先引用與由當(dāng)前結(jié)果指針引用的DIDS 1202相關(guān)聯(lián)的DDDS 1200中的映射表1224(即,對(duì)于CDial和LDial),以確定由當(dāng)前結(jié)果指針引用的DIDS 1202的輸出指針數(shù)組1236中的每個(gè)輸出指針1238的輸出值。這些輸出值作為與由輸出指針1238引用的DIDS 1202相對(duì)應(yīng)的下一個(gè)低層Dial實(shí)例(若有的話)的輸入值,沿著Dial樹向下傳播。該傳播繼續(xù),直到為終止Dial樹的每一個(gè)配置鎖存器(其在配置數(shù)據(jù)庫(kù)1404中通過(guò)鎖存器數(shù)據(jù)結(jié)構(gòu)1204表示)確定了鎖存器值為止。如塊1716所示,當(dāng)確定了配置鎖存器的每個(gè)鎖存器值時(shí),配置API 1406發(fā)出對(duì)PUTFAC()API 1414的調(diào)用,以利用在對(duì)應(yīng)鎖存器數(shù)據(jù)結(jié)構(gòu)1204的鎖存器名稱字段1244內(nèi)指定的鎖存器名稱,將模擬模型1400中的配置鎖存器設(shè)成所確定的值。
然后,該過(guò)程返回到塊1710,其表示對(duì)應(yīng)于下一個(gè)結(jié)果指針的頂層Dial的處理。在所有結(jié)果指針都被處理之后,該過(guò)程終止于塊1720。
現(xiàn)在參照?qǐng)D17B,其示出了根據(jù)本發(fā)明的RTX在交互模式中設(shè)置Dial組的示例性過(guò)程的高層邏輯流程圖。該過(guò)程響應(yīng)于配置API 1406接收到來(lái)自RTX 1420的set_Dial_group()API調(diào)用而開始于塊1730。響應(yīng)于set_Dial_group()API調(diào)用,配置API 1406首先利用上面參照?qǐng)D15所述的技術(shù),定位和生成指向在set_Dial_group()API調(diào)用中指定的Dial組實(shí)例的DIDS 1202的臨時(shí)結(jié)果指針,如塊1732所示。下一步,配置API 1406在塊1734確定所有臨時(shí)結(jié)果指針是否指向頂層Dial組實(shí)例的DIDS 1202。例如,該確定可通過(guò)檢查每個(gè)這樣的DIDS 1202的父指針1233以確定父指針1233是否為空來(lái)進(jìn)行。如果由結(jié)果指針引用的任何DIDS 1202不對(duì)應(yīng)于頂層Dial組(即具有非空父指針1233),則該過(guò)程以錯(cuò)誤狀態(tài)終止于塊1736。
響應(yīng)于在塊1734確定由結(jié)果指針引用的每一個(gè)DIDS 1202對(duì)應(yīng)于頂層Dial組,該過(guò)程傳到塊1738-1740。塊1738示出配置API 1406定位對(duì)應(yīng)的DIDS 1202由結(jié)果指針引用的每個(gè)Dial組內(nèi)的所有頂層Dial實(shí)例。然后,如塊1740所示,配置API 1406確定每個(gè)頂層Dial實(shí)例要被設(shè)置的指定值是否是在對(duì)應(yīng)的DDDS 1200的映射表1224中指定的值之一。如果否,則該過(guò)程以錯(cuò)誤終止于塊1736。
在所示實(shí)施例中,在設(shè)置任何Dial實(shí)例之前,執(zhí)行塊1734、1738和1740所示的預(yù)證實(shí)(prevalidation)步驟,因?yàn)樽鳛槌晒υO(shè)置所有相關(guān)頂層Dial實(shí)例或者完全失敗的基本(atomic)操作,實(shí)現(xiàn)設(shè)置Dial組實(shí)例被認(rèn)為是優(yōu)選的。以這種方式,可以避免Dial組實(shí)例內(nèi)的一些頂層Dial實(shí)例被設(shè)置而其他未被設(shè)置的復(fù)雜情況。
響應(yīng)于在塊1740確定每個(gè)頂層Dial實(shí)例要被設(shè)置的指定值是合法值之一,則該過(guò)程進(jìn)入包括塊1750-1756的循環(huán),其中處理每個(gè)結(jié)果指針以設(shè)置屬于每個(gè)Dial組實(shí)例的頂層Dial實(shí)例。
在塊1750,配置API 1406確定所有結(jié)果指針是否都被處理。如果是,則該過(guò)程終止于塊1760。然而,如果還有另外的結(jié)果指針要被處理,則在塊1752選擇所要處理的下一個(gè)結(jié)果指針。下一步,在塊1754,配置API 1406將在set_Dial_group()API調(diào)用中對(duì)每個(gè)頂層Dial指定的Dial設(shè)置沿著屬于與由當(dāng)前結(jié)果指針引用的DIDS 1202相對(duì)應(yīng)的Dial組實(shí)例的頂層Dial實(shí)例的Dial樹向下傳播。以相同于上面參照?qǐng)D17A的塊1714所述的方式,執(zhí)行沿著Dial樹向下傳播Dial設(shè)置。如塊1756所示,當(dāng)確定了配置鎖存器的每個(gè)鎖存器值時(shí),配置API 1406發(fā)出對(duì)PUTFAC()API 1414的調(diào)用,以利用在對(duì)應(yīng)的鎖存器數(shù)據(jù)結(jié)構(gòu)1204的鎖存器名稱字段1244內(nèi)指定的鎖存器名稱,將模擬模型1400中的配置鎖存器設(shè)置成所確定的值。然后,該過(guò)程返回到塊1750,其表示對(duì)應(yīng)于下一個(gè)結(jié)果指針(若有的話)的頂層Dial的處理。
現(xiàn)在參照?qǐng)D18A,其示出了根據(jù)本發(fā)明在批模式中設(shè)置Dial和Dial組實(shí)例的示例性方法的高層邏輯流程圖。如圖所示,該過(guò)程開始于塊1800,然后進(jìn)入塊1802,其示出RTX 1420通過(guò)調(diào)用配置API 1406(例如,start_batch())來(lái)初始化配置數(shù)據(jù)庫(kù)1404,從而初始化配置數(shù)據(jù)庫(kù)1404。start_batch()API例程例如通過(guò)將配置數(shù)據(jù)庫(kù)1404中的每個(gè)Dial設(shè)置字段1239、鎖存器設(shè)置字段1248和設(shè)置歷史字段1249設(shè)成假(FALSE)來(lái)初始化配置數(shù)據(jù)庫(kù)1404。通過(guò)復(fù)位配置數(shù)據(jù)庫(kù)1404中的所有“設(shè)置”字段,可以容易地檢測(cè)出未被當(dāng)前批模式調(diào)用序列設(shè)置的Dial和配置鎖存器,如下所述。
在塊1802初始化配置數(shù)據(jù)庫(kù)1404之后,圖18A所示的過(guò)程進(jìn)入塊1804。塊1804示出RTX 1420可選地發(fā)出一個(gè)或多個(gè)read_Dial()或read_Dial_group()API調(diào)用,以如上面參照?qǐng)D16A和16B所述讀取一個(gè)或多個(gè)Dial或Dial組,并且可選地發(fā)出一個(gè)或多個(gè)批模式set_Dial()或set_Dial_group()API調(diào)用,以將Dial實(shí)例及其底層配置鎖存器的設(shè)置輸入到配置數(shù)據(jù)庫(kù)1404中。除了兩個(gè)例外,配置API 1406以相同于上面參照?qǐng)D17A(用于設(shè)置Dial實(shí)例)或圖17B(用于設(shè)置Dial組實(shí)例)所述的方式響應(yīng)“設(shè)置”API調(diào)用。第一,當(dāng)設(shè)置任何頂層或低層Dial實(shí)例時(shí),無(wú)論是由于set_Dial()還是set_Dial_group()API調(diào)用,都將對(duì)應(yīng)的DIDS 1202的Dial設(shè)置字段1239設(shè)為真(TRUE)。第二,沒有鎖存器值如圖17A-17B的塊1716和1756所示通過(guò)“設(shè)置”API例程寫入到模擬模型1400中。相反,鎖存器值被寫入到與每個(gè)受影響的配置鎖存器相對(duì)應(yīng)的鎖存器數(shù)據(jù)結(jié)構(gòu)1204的鎖存器值字段1246中,并且鎖存器設(shè)置字段1248被更新成真。以這種方式,在隨后處理期間可以容易地識(shí)別通過(guò)API調(diào)用顯式設(shè)置的Dial實(shí)例和配置鎖存器。
在塊1804之后,該過(guò)程傳到塊1806,其示出RTX 1420調(diào)用配置API 1406中的end_batch()API例程,以完成缺省值應(yīng)用的當(dāng)前階段。如塊1806所示,并且如下面參照?qǐng)D18B所詳述,end_batch()API例程將選定缺省值(若有的話)施加于指定的Dial實(shí)例,并且將這些缺省值傳播到配置數(shù)據(jù)庫(kù)1404中的底層配置鎖存器。顯式地或者采用缺省值設(shè)置的所有配置鎖存器的鎖存器值因而潛在地施加于模擬模型內(nèi)的鎖存器。最后,為下一個(gè)階段(若有的話)作準(zhǔn)備。
如果RTX 1420具有另外的缺省值施加階段,則該過(guò)程從塊1806傳到塊1808,然后返回到塊1804,其表示RTX 1420發(fā)起下一個(gè)缺省值施加階段。然而,如果缺省值施加的所有階段都被處理,則圖18A所示的過(guò)程從塊1806通過(guò)塊1808傳到塊1810,批過(guò)程在此終止。
現(xiàn)在參照?qǐng)D18B,其示出了在圖18A的塊1806調(diào)用的end_phase()API例程的示例性實(shí)施例的高層邏輯流程圖。如圖所示,當(dāng)RTX 1420例如采用以下語(yǔ)句調(diào)用end_phase()API例程時(shí),該過(guò)程開始于塊1820End_phase(phases,unnamed,instance_qualifier,apply)在該示例性API調(diào)用中,“phases(階段)”參數(shù)是指定在當(dāng)前階段結(jié)束時(shí)所要施加的缺省值的階段ID的字符串;“unnamed(未命名)”是表示在當(dāng)前階段期間是否應(yīng)施加沒有任何關(guān)聯(lián)階段ID的缺省值的布爾參數(shù);“apply(施加)”是表示是否應(yīng)將配置鎖存器值立即施加于模擬模型1400的布爾值參數(shù);并且“instance_qualifier(實(shí)例_限定符)”是可用來(lái)限制處理特定Dial的哪些實(shí)例以施加缺省值的一個(gè)或多個(gè)正規(guī)表達(dá)式。
通過(guò)指定end_phase()API例程的instance_qualifier參數(shù),用戶可以將缺省值施加限制于模擬模型1400的僅一部分。以這種方式限制缺省值施加的能力特別有用于模擬模型1400的兩個(gè)部分(即,表示兩個(gè)不同集成電路芯片的部分)具有不同階段化要求、但是使用相同階段ID的情況。因此,階段ID的沖突可通過(guò)適當(dāng)指定結(jié)合階段ID一起使用的instance_qualifier來(lái)解決。
end_phase()API例程然后進(jìn)入包括塊1822-1838的處理循環(huán),其中處理配置數(shù)據(jù)庫(kù)1404內(nèi)的DIDS 1202,以施加適當(dāng)?shù)腄ial缺省值(若有的話)。首先參照塊1822,end_phase()API確定頂層指針數(shù)組1206內(nèi)的所有頂層指針1250是否都被處理。如果是,則該過(guò)程從塊1822進(jìn)入下面描述的塊1840。如果不是頂層指針數(shù)組1206內(nèi)的所有頂層指針1250都被處理,則該過(guò)程進(jìn)入塊1824。塊1824表示end_phase()API例程遞歸性地掃描由下一個(gè)頂層指針1250及其后代DIDS 1202(若有的話)指向的DIDS 1202,以施加由end_phase()API調(diào)用的參數(shù)表示的缺省值。如果end_phase()API例程在塊1826確定它已處理了由當(dāng)前頂層指針1250標(biāo)識(shí)的頂層DIDS 1202的子樹中的所有必要DIDS 1202,則該過(guò)程返回到已經(jīng)描述過(guò)的塊1822。然而,如果還有由當(dāng)前頂層指針1250標(biāo)識(shí)的頂層DIDS 1202的子樹中的至少一個(gè)DIDS 1202要被處理,則該過(guò)程從塊1826傳到塊1828。
塊1828示出end_phase()API例程檢查下一個(gè)DIDS 1202,以確定其缺省字段1229是否具有非空值。如果當(dāng)前DIDS 1202沒有包含非空缺省字段1229,則該過(guò)程返回到塊1824,其表示end_phase API例程在由當(dāng)前頂層指針1250指向的頂層DIDS 1202的子樹中繼續(xù)DIDS 1202的遞歸處理。如果缺省字段1229包含非空值,則該過(guò)程傳到塊1830,其示出確定是否設(shè)置了Dial設(shè)置字段1239,也就是,是否先前在圖18A的塊1804顯式設(shè)置了Dial實(shí)例。如果設(shè)置了Dial設(shè)置字段1239,則忽略包含在缺省字段1229中的缺省值(因?yàn)槟M用戶已經(jīng)顯式指定了關(guān)聯(lián)Dial實(shí)例的值)。并且由于模擬數(shù)據(jù)庫(kù)1400被構(gòu)造成具有指定缺省值的DIDS 1202的任何后代不能具有缺省值,因此該過(guò)程傳到塊1836,其示出end_phase()API例程在當(dāng)前DIDS 1202的子樹中跳過(guò)任何DIDS 1202的處理。然后,該過(guò)程返回到已經(jīng)描述過(guò)的塊1824。
返回到塊1830,響應(yīng)于確定沒有設(shè)置當(dāng)前DIDS 1202的Dial設(shè)置字段1239,則該過(guò)程進(jìn)入塊1832。塊1832示出end_phase()API詢問當(dāng)前DIDS 1202的階段ID字段1227,以確定存儲(chǔ)在缺省字段1229中的缺省值是否具有一個(gè)或多個(gè)關(guān)聯(lián)階段ID。如果否,則該過(guò)程傳到下面描述的塊1833。響應(yīng)于在塊1832確定階段ID字段1227存儲(chǔ)至少一個(gè)階段ID,end_phase()API下一步在塊1834確定end_phase()API調(diào)用的階段參數(shù)是否指定匹配包含在階段ID字段1227內(nèi)的階段ID的階段ID。如果沒有找到匹配,則該過(guò)程從塊1834傳到已經(jīng)描述過(guò)的塊1836。另一方面,如果在end_phase()API調(diào)用的階段參數(shù)中指定的階段ID匹配于包含在當(dāng)前DIDS 1202的階段ID字段1227內(nèi)的階段ID,則end_phase()API下一步在塊1835確定包含在當(dāng)前DIDS 1202的實(shí)例名稱字段1234中的Dial實(shí)例名稱是否匹配于作為end_phase()API調(diào)用的instance_qualifier參數(shù)傳遞的限定表達(dá)式。再次,響應(yīng)于塊1835的否定確定,則該過(guò)程傳到已經(jīng)描述過(guò)的塊1836。另一方面,如果包含在實(shí)例名稱字段1234內(nèi)的Dial實(shí)例名稱符合instance_qualifier參數(shù),則該過(guò)程進(jìn)入下面描述的塊1838。
回到塊1833,如果當(dāng)前DIDS 1202沒有一個(gè)或多個(gè)在階段ID字段1227內(nèi)指定的階段ID,則進(jìn)一步確定end_phase()API調(diào)用的unnamed參數(shù)是否具有真值,以表示在當(dāng)前階段期間應(yīng)施加沒有任何關(guān)聯(lián)階段信息的缺省值。如果否,則該過(guò)程從塊1833傳到已經(jīng)描述過(guò)的塊1836。另一方面,如果end_phase()API在塊1833確定在當(dāng)前階段期間應(yīng)該施加沒有關(guān)聯(lián)階段信息的缺省值,則該過(guò)程進(jìn)入上面已經(jīng)描述過(guò)的塊1835。
因此,當(dāng)end_phase()API到達(dá)塊1838時(shí),通過(guò)在1830、1832、1833、1834和1835示出的確定,end_phase()API確定了在批模式執(zhí)行的當(dāng)前階段應(yīng)施加為對(duì)應(yīng)于當(dāng)前DIDS 1202的Dial實(shí)例指定的缺省值。從而,在塊1838,end_phase()API例程將在缺省字段1229中指定的缺省值施加于映射表1224,以生成一個(gè)或多個(gè)Dial輸出信號(hào),然后以前面描述過(guò)的方式將該信號(hào)沿著當(dāng)前DIDS 1202的Dial樹向下傳播,從而最終將配置數(shù)據(jù)庫(kù)1404內(nèi)每個(gè)底層鎖存器數(shù)據(jù)結(jié)構(gòu)1204的鎖存器值字段1246和鎖存器設(shè)置字段1248設(shè)成對(duì)應(yīng)于Dial缺省值的值。然后,該過(guò)程從塊1838進(jìn)入已經(jīng)描述過(guò)的塊1836。
回到塊1822,響應(yīng)于確定采用上述方式處理了由頂層指針1250指向的所有DIDS 1202的Dial樹以施加任何適當(dāng)?shù)娜笔≈?,該過(guò)程下一步傳到塊1840。塊1840示出end_phase()API檢查end_phase()API調(diào)用的apply參數(shù),以確定是否應(yīng)將鎖存器數(shù)據(jù)結(jié)構(gòu)1204內(nèi)的配置鎖存器值施加于模擬模型1400。通過(guò)該確定表示的附加控制度是有利的,因?yàn)榭删哂袥_突階段ID的模擬模型1400的不同部分可在不同階段獨(dú)立地在配置數(shù)據(jù)庫(kù)1404內(nèi)進(jìn)行配置,但是如果需要,結(jié)果配置鎖存器值可同時(shí)施加于模擬模型1400。如果apply參數(shù)具有假值,其意味著在當(dāng)前階段期間將不對(duì)模擬模型1400施加配置鎖存器值,則該過(guò)程直接傳到塊1844。
然而,如果如apply參數(shù)值為真所指示,在當(dāng)前階段期間要對(duì)模擬模型1400施加配置鎖存器值,則end_phase()API例程進(jìn)入塊1842。在塊1842,end_phase()API利用鎖存器指針數(shù)組1210,以檢查配置數(shù)據(jù)庫(kù)1404中的每個(gè)鎖存器數(shù)據(jù)結(jié)構(gòu)1204。對(duì)于鎖存器設(shè)置字段1248具有真值的每個(gè)鎖存器數(shù)據(jù)結(jié)構(gòu)1204,end_batch()API例程發(fā)出對(duì)模擬器1410的PUTFAC()API 1414的調(diào)用,以采用包含在鎖存器值字段1246中的鎖存器值更新模擬模型1400。另外,如塊1844所示,end_phase()API執(zhí)行鎖存器設(shè)置字段1248的值與設(shè)置歷史字段1249之間的邏輯或操作,從而在設(shè)置歷史字段1249內(nèi)存儲(chǔ)結(jié)果。以這種方式,每個(gè)設(shè)置歷史字段1249維護(hù)在批模式過(guò)程的任何階段是否設(shè)置了對(duì)應(yīng)配置鎖存器的指示。
在塊1844之后,end_batch API進(jìn)入塊1846,其示出end_batch API例程在準(zhǔn)備下一個(gè)階段(若有的話)中復(fù)位DIDS 1202中的所有Dial設(shè)置字段1239和所有鎖存器設(shè)置字段1248。然后,end_phase API例程終止于塊1848。
總之,end_phase()API例程將Dial缺省值施加于匹配限定階段和instance_qualifier的配置數(shù)據(jù)庫(kù)1404,然后根據(jù)apply參數(shù)可選地將結(jié)果配置鎖存器值施加于模擬模型1400。最后,end_phase()API例程利用設(shè)置歷史字段1249跟蹤哪些鎖存器數(shù)據(jù)結(jié)構(gòu)1204已被設(shè)置,并且復(fù)位各個(gè)設(shè)置字段以準(zhǔn)備下一個(gè)階段(若有的話)。
到此為止,已經(jīng)僅關(guān)于在HDL文件800或配置指定文件802內(nèi)指定的設(shè)計(jì)者提供的階段信息描述了缺省值。對(duì)于很多模擬模型1400,設(shè)計(jì)者只有模擬模型1400的引導(dǎo)序列和對(duì)應(yīng)硬件實(shí)現(xiàn)的有限知識(shí),因此對(duì)于適當(dāng)?shù)爻跏蓟M模型1400或?qū)?yīng)硬件實(shí)現(xiàn)所需的缺省值的階段化只有有限的理解。因此,期望向下游用戶如模擬用戶、實(shí)驗(yàn)用戶或?qū)嵤┲С秩藛T提供指定控制Dial缺省值施加的階段信息的能力。
如圖18C所示,在一個(gè)實(shí)施例中,允許用戶利用程序1860提供和/或修改存儲(chǔ)在配置數(shù)據(jù)庫(kù)1404或?qū)?yīng)硬件配置數(shù)據(jù)庫(kù)(下面討論)的階段ID字段1227內(nèi)的階段ID。程序1860包括一組數(shù)據(jù)庫(kù)操縱API例程1862,當(dāng)以適當(dāng)參數(shù)調(diào)用時(shí),允許用戶在配置數(shù)據(jù)庫(kù)1404(或?qū)?yīng)硬件配置數(shù)據(jù)庫(kù))內(nèi)讀取和寫入階段ID。
再次參照?qǐng)D14,配置API 1406最好還包括find_unset_latch()API,在配置數(shù)據(jù)庫(kù)1404中對(duì)Dial或Dial組實(shí)例進(jìn)行批模式設(shè)置之后,參考鎖存器指針數(shù)組1210審核配置數(shù)據(jù)庫(kù)1404中的所有鎖存器數(shù)據(jù)結(jié)構(gòu)1204,以便檢測(cè)尚未通過(guò)顯式或缺省設(shè)置配置的配置鎖存器(即,具有設(shè)為假(FALSE)的設(shè)置歷史字段1249的配置鎖存器)。對(duì)于每個(gè)這樣的未被設(shè)置的配置鎖存器,find_unset_latch()API最好從對(duì)應(yīng)鎖存器數(shù)據(jù)結(jié)構(gòu)1204中的鎖存器名稱字段1244以及控制未被設(shè)置的鎖存器的頂層Dial實(shí)例的完全限定實(shí)例體標(biāo)識(shí)符返回配置鎖存器的完全限定實(shí)例名稱。因此,find_unset_latch()API提供一種自動(dòng)機(jī)制,讓用戶驗(yàn)證需要顯式或缺省設(shè)置的所有Dial和鎖存器實(shí)例被正確配置,以進(jìn)行模擬運(yùn)行。
配置API 1406最好還包括check_model()API,當(dāng)被調(diào)用時(shí),其利用頂層指針數(shù)組1206來(lái)參考適當(dāng)?shù)挠成浔?224驗(yàn)證模擬模型1400中的每個(gè)頂層CDial和LDial實(shí)例設(shè)為其合法值之一。設(shè)為合法值的任何頂層LDial或CDial通過(guò)check_model()API來(lái)返回。
本發(fā)明所引入的Dial和Dial組原語(yǔ)可用來(lái)不僅配置如上所述的數(shù)字設(shè)計(jì)的模擬模型,而且配置用于實(shí)驗(yàn)測(cè)試和客戶使用的數(shù)字設(shè)計(jì)的硬件實(shí)現(xiàn)。根據(jù)本發(fā)明的一個(gè)重要方面,數(shù)字設(shè)計(jì)的硬件實(shí)現(xiàn)通過(guò)參考硬件配置數(shù)據(jù)庫(kù)來(lái)配置,其中硬件配置數(shù)據(jù)庫(kù)如同上述配置數(shù)據(jù)庫(kù)814和1404一樣,從由設(shè)計(jì)者編碼的配置指定語(yǔ)句獲得。以這種方式,從數(shù)字設(shè)計(jì)的設(shè)計(jì),通過(guò)模擬和實(shí)驗(yàn)測(cè)試到其商業(yè)實(shí)施都存在配置方法的連續(xù)性。
現(xiàn)在參照?qǐng)D19,其示出了根據(jù)本發(fā)明實(shí)施例用于測(cè)試和調(diào)試一個(gè)或多個(gè)數(shù)字設(shè)計(jì)的硬件實(shí)現(xiàn)的實(shí)驗(yàn)測(cè)試系統(tǒng)的高層方框圖。如圖所示,實(shí)驗(yàn)測(cè)試系統(tǒng)1900包括旨在商業(yè)銷售和實(shí)施的數(shù)據(jù)處理系統(tǒng)1902。對(duì)于實(shí)驗(yàn)測(cè)試和調(diào)試,數(shù)據(jù)處理系統(tǒng)1902通過(guò)測(cè)試接口1903耦合于工作站計(jì)算機(jī)1904,其通過(guò)測(cè)試接口1903與數(shù)據(jù)處理系統(tǒng)1902通信,以配置數(shù)據(jù)處理系統(tǒng)1902的各個(gè)組件以進(jìn)行正確的操作。當(dāng)被商業(yè)實(shí)施時(shí),數(shù)據(jù)處理系統(tǒng)1902包括所示組件,但是典型地不通過(guò)測(cè)試接口1903耦合于工作站計(jì)算機(jī)1904。
數(shù)據(jù)處理系統(tǒng)1902可以是例如多處理器計(jì)算機(jī)系統(tǒng),如圖1的數(shù)據(jù)處理系統(tǒng)6。同樣地,數(shù)據(jù)處理系統(tǒng)1902包括表示數(shù)據(jù)處理系統(tǒng)的各個(gè)處理單元、控制器、橋和其他組件的多個(gè)集成電路芯片1910。作為典型的商業(yè)數(shù)據(jù)處理系統(tǒng),數(shù)據(jù)處理系統(tǒng)1902可包含一些集成電路芯片如集成電路芯片1910a的多個(gè)實(shí)例,以及其他集成電路芯片如集成電路芯片1910n的單個(gè)實(shí)例。
除了其各自的功能邏輯之外,集成電路芯片1910均還具有各自的測(cè)試端口控制器1912,其支持利用多個(gè)掃描鏈對(duì)集成電路芯片進(jìn)行外部配置,如下面參照?qǐng)D20所詳述。為了允許該外部配置,每個(gè)測(cè)試端口控制器1912通過(guò)測(cè)試訪問端口(TAP)1914耦合于數(shù)據(jù)處理系統(tǒng)1902內(nèi)的服務(wù)處理器1920。
服務(wù)處理器1920是用來(lái)例如在通電時(shí)或者響應(yīng)重啟而初始化和配置數(shù)據(jù)處理系統(tǒng)1902的通用或?qū)S糜?jì)算機(jī)系統(tǒng)。服務(wù)處理器1920包括至少一個(gè)用于執(zhí)行軟件指令的處理單元1922a、為軟件和數(shù)據(jù)提供非易失性存儲(chǔ)的快閃只讀存儲(chǔ)器(ROM)1924、將服務(wù)處理器1920與測(cè)試端口控制器1912和工作站計(jì)算機(jī)1904接口的I/O接口1926a、以及緩沖指令和數(shù)據(jù)以由處理單元1922a訪問的易失性存儲(chǔ)器1928a。
存儲(chǔ)于快閃ROM 1924中的軟件和數(shù)據(jù)包括系統(tǒng)固件1930a。系統(tǒng)固件1930a在通電時(shí)由服務(wù)處理器1920的處理單元1922a執(zhí)行,以供電給集成電路芯片1910,執(zhí)行各種初始化過(guò)程和測(cè)試,同步集成電路芯片1910之間的通信,并且啟動(dòng)功能時(shí)鐘的操作。系統(tǒng)固件1930a通過(guò)經(jīng)由測(cè)試訪問端口1914的通信來(lái)控制集成電路芯片1910的啟動(dòng)行為。
除了系統(tǒng)固件1930a之外,快閃ROM 1924還存儲(chǔ)描述集成電路芯片1910的硬件(HW)配置API 1934a和HW配置數(shù)據(jù)庫(kù)1932a。如下所述,在商業(yè)實(shí)施期間,處理單元1922a調(diào)用各個(gè)HW配置API 1934a以訪問HW配置數(shù)據(jù)庫(kù)1932a,以便通過(guò)I/O接口1926a和TAP 1914適當(dāng)?shù)嘏渲眉呻娐?910。
例如可實(shí)現(xiàn)為多處理器計(jì)算機(jī)系統(tǒng)如圖1的數(shù)據(jù)處理系統(tǒng)6的工作站計(jì)算機(jī)1904包括在功能上類似于服務(wù)處理器1920的很多組件。因此,相同的附圖標(biāo)記表示處理單元1922b、易失性存儲(chǔ)器1928b、I/O接口1926b以及駐留在非易失性存儲(chǔ)裝置1934(例如,盤存儲(chǔ)裝置)中的系統(tǒng)固件1930b、HW配置數(shù)據(jù)庫(kù)1932b和HW配置API 1934b。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,由于駐留在非易失性存儲(chǔ)裝置1940中的系統(tǒng)固件1930b、HW配置數(shù)據(jù)庫(kù)1932b和HW配置API 1934b被具體設(shè)計(jì)成在實(shí)驗(yàn)測(cè)試和調(diào)試的上下文中初始化和配置數(shù)據(jù)處理系統(tǒng)1902,因此與快閃ROM 1924內(nèi)的對(duì)應(yīng)軟件和數(shù)據(jù)相比,它們可具有更小、更大或簡(jiǎn)單不同的特性集和能力。
在實(shí)驗(yàn)測(cè)試和調(diào)試期間,工作站計(jì)算機(jī)1904采取服務(wù)處理器1920的大部分功能。例如,工作站計(jì)算機(jī)1904通過(guò)執(zhí)行系統(tǒng)固件1930b和各個(gè)HW配置API 1934b來(lái)初始化和配置數(shù)據(jù)處理系統(tǒng)1902,從而生成各個(gè)I/O命令。然后,通過(guò)測(cè)試接口1903以及I/O接口1926a和1926b,將這些I/O命令傳送到數(shù)據(jù)處理系統(tǒng)1902。在其本地功能性的大部分被禁止的“旁路”模式下,在服務(wù)處理器1920內(nèi)執(zhí)行的系統(tǒng)固件1930a通過(guò)測(cè)試訪問端口1914向集成電路芯片1910發(fā)出這些外部I/O命令而響應(yīng)這些命令,從而初始化和配置集成電路芯片1910。
現(xiàn)在參照?qǐng)D20,其示出了根據(jù)本發(fā)明的示例性集成電路芯片1910的更詳細(xì)方框圖。如上所述,集成電路芯片1910包括測(cè)試端口控制器2000,其支持與圖19的服務(wù)處理器1920的I/O接口1926進(jìn)行外部通信以及控制集成電路芯片1910的各個(gè)內(nèi)部功能,包括功能時(shí)鐘2002和掃描時(shí)鐘2010的操作。集成電路芯片1910還包括功能邏輯(未顯式示出),其包括響應(yīng)于功能時(shí)鐘2002的時(shí)鐘脈沖而執(zhí)行集成電路被設(shè)計(jì)所做的“工作”,例如,處理軟件指令。多個(gè)功能鎖存器2004分布在功能邏輯電路內(nèi),在功能邏輯的正常功能操作期間(即,當(dāng)功能時(shí)鐘2002對(duì)功能邏輯進(jìn)行定時(shí)時(shí)),這些功能鎖存器2004保存表示功能邏輯的動(dòng)態(tài)狀態(tài)以及數(shù)據(jù)和/或指令的比特。這些功能鎖存器2004包括保存用來(lái)以期望的配置來(lái)配置功能邏輯的模式和配置比特的功能鎖存器。
如圖所示,成組的功能鎖存器2004互連在一起,以形成多個(gè)測(cè)試掃描鏈2006和多個(gè)SCOM(掃描通信)鏈2008。雖然為了簡(jiǎn)潔起見而未示出,但是一些功能鎖存器2004實(shí)際上既是測(cè)試掃描鏈2006的成員又是SCOM鏈2008的成員。測(cè)試掃描鏈2006用來(lái)響應(yīng)于掃描時(shí)鐘2010的脈沖而掃描比特到功能鎖存器2004中,并且SCOM鏈2008用來(lái)響應(yīng)于功能時(shí)鐘2002的脈沖而掃描比特到功能鎖存器2004中。功能時(shí)鐘2002和掃描時(shí)鐘2010不同時(shí)輸出脈沖,以防止裝載到功能鎖存器2004中的值之間的沖突。
如圖所示,測(cè)試掃描鏈2006中的每個(gè)功能鎖存器2004包括至少兩個(gè)數(shù)據(jù)輸入,即掃描輸入(scanin)和功能輸入(Din),以及兩個(gè)時(shí)鐘輸入,即掃描時(shí)鐘輸入(sclk)和功能時(shí)鐘輸入(fclk)。每個(gè)功能鎖存器2004還包括至少兩個(gè)數(shù)據(jù)輸出,即掃描輸出(scanout)和功能輸出(Dout)。為了形成測(cè)試掃描鏈2006,第一功能鎖存器2004的掃描輸入和最后功能鎖存器2004的掃描輸出耦合到測(cè)試端口控制器2000,并且測(cè)試掃描鏈2006中每個(gè)功能鎖存器2004的掃描輸出(除了最后一個(gè))連接到下一個(gè)功能鎖存器2004的掃描輸入。
響應(yīng)于sclk上掃描時(shí)鐘2010的脈沖,每個(gè)功能鎖存器2004輸入(latch in)其scanin上的數(shù)據(jù)比特,并且在scanout上輸出(latch out)其先前值,并且響應(yīng)于在fclk上接收到功能時(shí)鐘2002的脈沖,輸入Din上的數(shù)據(jù)比特,并且輸出其先前值。因此,通過(guò)掃描時(shí)鐘2010的重復(fù)脈沖發(fā)生,形成測(cè)試掃描鏈2006的功能鎖存器2004以“比特組桶(bit-bucket brigade)”的方式從測(cè)試端口控制器2000傳入數(shù)據(jù)比特和向其傳出數(shù)據(jù)比特,從而允許測(cè)試端口控制器2000讀取或?qū)懭霚y(cè)試掃描鏈2006中的一個(gè)或多個(gè)功能鎖存器2004。
SCOM鏈2008用來(lái)當(dāng)功能時(shí)鐘2002有效并且掃描時(shí)鐘2010無(wú)效時(shí)讀取和寫入功能鎖存器2004。每個(gè)SCOM鏈2008包括多個(gè)順序連接的SCOM單元2012,其中的第一個(gè)和最后一個(gè)連接到測(cè)試端口控制器2000,以允許測(cè)試端口控制器2000將數(shù)據(jù)比特掃描到SCOM單元2012中和從SCOM單元2012掃描出數(shù)據(jù)比特。如圖所示,在示例性實(shí)施例中,每個(gè)SCOM單元2008包含形成“SCOM寄存器”的一部分的功能鎖存器2004,以及形成“影象寄存器(shadow register)”的一部分的影象鎖存器2014。如果所有影象寄存器2014如功能鎖存器2004一樣也屬于測(cè)試掃描鏈2006,則是優(yōu)選的。
如圖所示,每個(gè)SCOM單元2012中的每個(gè)功能鎖存器2004連接到關(guān)聯(lián)多路復(fù)用器2020,其掃描輸入(scomin)耦合于對(duì)應(yīng)影象鎖存器2014的輸出,并且其數(shù)據(jù)輸入(Din)通過(guò)保存路徑耦合于關(guān)聯(lián)功能鎖存器2004的數(shù)據(jù)輸出(Dout)。多路復(fù)用器2020響應(yīng)于選擇信號(hào)sel2而選擇數(shù)據(jù)輸入(Din)和scomin之一上的數(shù)據(jù)比特,作為功能鎖存器2004的輸入。功能鎖存器2004響應(yīng)于功能時(shí)鐘fclk而鎖存所選數(shù)據(jù)比特。
每個(gè)SCOM單元2012中的影象鎖存器2014類似地連接到具有數(shù)據(jù)輸入(Din)、保存輸入和掃描輸入(scomin)的關(guān)聯(lián)多路復(fù)用器2022,其數(shù)據(jù)輸入(Din)耦合于功能鎖存器2004的數(shù)據(jù)輸出(Dout),并且其保存輸入通過(guò)保存路徑耦合于影象鎖存器2014的輸出。在第一SCOM單元2012中,掃描輸入連接到測(cè)試端口控制器2000,并且在其余SCOM單元2012中,掃描輸入連接到前一SCOM單元2012中的影象鎖存器2014的輸出。每個(gè)SCOM鏈中最后SCOM單元2012的影象寄存器2014的輸出連接到測(cè)試端口控制器2000。多路復(fù)用器2022響應(yīng)于選擇信號(hào)sel1而從其輸入上的數(shù)據(jù)比特中進(jìn)行選擇,作為關(guān)聯(lián)影象鎖存器2014的輸入。影象鎖存器2014響應(yīng)于功能時(shí)鐘fclk而鎖存所選數(shù)據(jù)比特。
影象寄存器鏈用來(lái)從關(guān)聯(lián)SCOM寄存器讀取值和向其寫入值。例如,為了設(shè)置SCOM寄存器,測(cè)試端口控制器2000通過(guò)維護(hù)(asserting)選擇sel1的適當(dāng)值、經(jīng)由多路復(fù)用器2022的scomin輸入將新值掃描到影象鎖存器2014中。一旦所有影象鎖存器2014都被裝載,測(cè)試端口控制器2000就控制選擇輸入sel2,以使功能寄存器2004從影象鎖存器2014裝載值。為了從SCOM寄存器讀取值,測(cè)試端口控制器2000驅(qū)動(dòng)sel1,以將值從功能鎖存器2004讀取到影象鎖存器2014中,然后通過(guò)維護(hù)選擇sel1的適當(dāng)值來(lái)掃描出影象鎖存器2014中的值。
在示例性實(shí)施例中,SCOM鏈2008采用影象鎖存器2014以讀取和寫入功能鎖存器2004,從而避免破壞集成電路芯片1910或者甚至是數(shù)據(jù)處理系統(tǒng)1902的正確功能操作。通過(guò)在更新任何功能鎖存器2004之前裝載所有影象鎖存器2014,SCOM鏈2008內(nèi)的所有功能鎖存器2004可以立即被更新,而不會(huì)在功能時(shí)鐘2002的多個(gè)周期內(nèi)破壞其值。應(yīng)當(dāng)理解的是,實(shí)現(xiàn)本發(fā)明不要求圖20所示的SCOM鏈2008的特定實(shí)現(xiàn),并且可以采取其他可選設(shè)計(jì),包括不含有影象鎖存器2014的一些設(shè)計(jì)。
這樣,通過(guò)將適當(dāng)值裝載到功能鎖存器2004中,并且通過(guò)功能時(shí)鐘2002和掃描時(shí)鐘2010的適當(dāng)控制,每個(gè)測(cè)試端口控制器2000可以根據(jù)來(lái)自服務(wù)處理器1920和/或工作站計(jì)算機(jī)1904的輸入,以期望方式初始化和配置其集成電路芯片1910。
為了以上述方式配置硬件功能鎖存器2004,必須生成考慮模擬和硬件環(huán)境之間的差異的HW配置數(shù)據(jù)庫(kù)1932。一般而言,HW配置數(shù)據(jù)庫(kù)1932的結(jié)構(gòu)和內(nèi)容反映與上述用于模擬的配置數(shù)據(jù)庫(kù)814的至少兩個(gè)主要區(qū)別。
第一區(qū)別是采用在硬件中對(duì)鎖存器進(jìn)行尋址的方式。具體而言,代替如在模擬中利用配置鎖存器的完全限定實(shí)例體標(biāo)識(shí)符,通過(guò)由指定特定測(cè)試掃描鏈2006的掃描鏈(或環(huán))標(biāo)識(shí)符和表示測(cè)試掃描鏈2006中鎖存器的比特位置的偏移組成的有序?qū)?lái)尋址和訪問特定集成電路芯片1910內(nèi)的每個(gè)硬件功能鎖存器2004,以進(jìn)行測(cè)試掃描。SCOM環(huán)2008內(nèi)的功能鎖存器2004類似地使用(環(huán)標(biāo)識(shí)符,偏移)的類似有序?qū)Ρ粚ぶ泛驮L問,以進(jìn)行SCOM掃描,其中該有序?qū)χ付ㄌ囟⊿COM鏈2008和對(duì)應(yīng)的影象鎖存器2014的偏移。重要的是,SCOM環(huán)標(biāo)識(shí)符和特定功能鎖存器2004的偏移沒有與對(duì)應(yīng)測(cè)試掃描環(huán)標(biāo)識(shí)符和偏移相同的值。實(shí)際上,在可選SCOM實(shí)現(xiàn)中,可使用不同SCOM硬件,并且偏移可被表達(dá)為多元組(環(huán)ID,寄存器,偏移)。因此,應(yīng)當(dāng)理解的是,功能寄存器2004可利用多種訪問方法被尋址和訪問,其中每一種訪問方法都可具有其自己的尋址方案,所有這些方案同樣將不同于在模擬中所采用的方案。
HW配置數(shù)據(jù)庫(kù)1932與在模擬中所采用的配置數(shù)據(jù)庫(kù)814之間的第二個(gè)重要區(qū)別是總體數(shù)據(jù)庫(kù)結(jié)構(gòu)。如上所述,配置數(shù)據(jù)庫(kù)814是可用來(lái)通過(guò)分層嵌套設(shè)計(jì)實(shí)體表示任何大小或復(fù)雜度的任意選定數(shù)字設(shè)計(jì)的單一數(shù)據(jù)庫(kù)。新配置數(shù)據(jù)庫(kù)814針對(duì)所模擬的每個(gè)不同數(shù)字設(shè)計(jì)由配置編譯器808生成。雖然該方法在模擬環(huán)境中是令人滿意的,但是在模擬中所采用的單一數(shù)據(jù)庫(kù)結(jié)構(gòu)不對(duì)應(yīng)于用來(lái)訪問和設(shè)置硬件數(shù)字設(shè)計(jì)中的硬件鎖存器的實(shí)際物理機(jī)制。而且,期望在實(shí)驗(yàn)環(huán)境中避免針對(duì)每個(gè)不同硬件排列而開發(fā)完全新的系統(tǒng)固件1930和HW配置數(shù)據(jù)庫(kù)1932。例如,期望通過(guò)再使用特定HW配置數(shù)據(jù)庫(kù)1932和系統(tǒng)固件1930的一些或全部,以初始化和配置支持8到32個(gè)處理單元以及1到4個(gè)不同存儲(chǔ)器控制器的服務(wù)器產(chǎn)品線中的每個(gè)服務(wù)器計(jì)算機(jī),來(lái)最小化開發(fā)時(shí)間和成本。
因此,如下詳細(xì)所述,HW配置數(shù)據(jù)庫(kù)1932最好構(gòu)造成較小數(shù)據(jù)庫(kù)的聯(lián)合體,其中每個(gè)較小數(shù)據(jù)庫(kù)對(duì)應(yīng)于硬件數(shù)字設(shè)計(jì)內(nèi)的集成電路芯片的特定類型(而非實(shí)例)。該數(shù)據(jù)庫(kù)結(jié)構(gòu)支持從相同“構(gòu)建塊”逐芯片類型數(shù)據(jù)庫(kù)構(gòu)造任何期望大小和復(fù)雜度的硬件系統(tǒng)的HW配置數(shù)據(jù)庫(kù)1932。而且,該數(shù)據(jù)庫(kù)結(jié)構(gòu)反映硬件鎖存器逐芯片地由系統(tǒng)固件1930進(jìn)行訪問這一事實(shí)。
現(xiàn)在參照?qǐng)D21,其示出了轉(zhuǎn)換每個(gè)集成電路芯片的模擬配置數(shù)據(jù)庫(kù)814以獲得用來(lái)構(gòu)造適合于實(shí)驗(yàn)測(cè)試和調(diào)試以及商業(yè)實(shí)施的HW配置數(shù)據(jù)庫(kù)1932的芯片HW數(shù)據(jù)庫(kù)的示例性過(guò)程的高層流程圖。所示過(guò)程可通過(guò)在圖1的數(shù)據(jù)處理系統(tǒng)6上執(zhí)行軟件來(lái)實(shí)現(xiàn)。
該過(guò)程開始于執(zhí)行掃描鏈檢測(cè)工具2100。掃描鏈檢測(cè)工具2100處理目標(biāo)硬件系統(tǒng)如數(shù)據(jù)處理系統(tǒng)1902內(nèi)每個(gè)集成電路芯片1910的模擬模型1400,以為集成電路芯片1910內(nèi)的鎖存器產(chǎn)生對(duì)應(yīng)于每個(gè)功能鎖存器訪問路徑/方法的各個(gè)輸出文件。例如,在該示例性實(shí)施例中,掃描鏈檢測(cè)工具2100產(chǎn)生對(duì)應(yīng)于測(cè)試掃描的測(cè)試掃描定義文件2104和對(duì)應(yīng)于SCOM掃描的SCOM定義文件2102。這些文件2102、2104的每一個(gè)為模擬模型1400內(nèi)的鎖存器提供鎖存器的掃描環(huán)標(biāo)識(shí)符和偏移(或者關(guān)聯(lián)訪問方法的其他硬件地址)與用于模擬目的的其完全限定鎖存器實(shí)例名稱之間的對(duì)應(yīng)關(guān)系。
然后,由數(shù)據(jù)庫(kù)轉(zhuǎn)換工具2106處理集成電路芯片的測(cè)試掃描定義文件2104和SCOM定義文件2102以及模擬配置數(shù)據(jù)庫(kù)814,以生成芯片HW數(shù)據(jù)庫(kù)2108,其可用作構(gòu)建塊,以獲得具有任意系統(tǒng)大小和組件列表的硬件系統(tǒng)的HW配置數(shù)據(jù)庫(kù)1932。
現(xiàn)在參照?qǐng)D22A,其示出了數(shù)據(jù)庫(kù)轉(zhuǎn)換工具2106參考測(cè)試掃描定義文件2104和SCOM定義文件2102,從集成電路芯片的對(duì)應(yīng)模擬配置數(shù)據(jù)庫(kù)814產(chǎn)生芯片HW數(shù)據(jù)庫(kù)2108的示例性過(guò)程的高層邏輯流程圖。如圖所示,該過(guò)程開始于塊2200,然后進(jìn)入塊2201,其示出將模擬配置數(shù)據(jù)庫(kù)814從非易失性數(shù)據(jù)存儲(chǔ)裝置裝載到易失性存儲(chǔ)器中,并且以上面參照?qǐng)D13所述的方式增加其字段,以獲得展開的配置數(shù)據(jù)庫(kù)1404。測(cè)試掃描定義文件2104和SCOM定義文件2102也被裝載到易失性存儲(chǔ)器中。
下一步,在塊2202,確定由鎖存器指針數(shù)組1210引用的所有鎖存器數(shù)據(jù)結(jié)構(gòu)1204是否都被處理。如果是,則該過(guò)程終止于塊2204。然而,如果不是所有鎖存器數(shù)據(jù)結(jié)構(gòu)1204都已經(jīng)被處理,則該過(guò)程從塊2202傳到塊2206,其示出進(jìn)行選擇以處理由鎖存器指針數(shù)組1210中的下一個(gè)鎖存器指針1254指向的鎖存器數(shù)據(jù)結(jié)構(gòu)1204。下一步,在塊2208,通過(guò)使用父指針1242訪問控制該鎖存器的Dial實(shí)例的實(shí)例名稱字段1234的內(nèi)容并將這些內(nèi)容附加到鎖存器名稱字段1244的內(nèi)容,形成與當(dāng)前考慮的鎖存器數(shù)據(jù)結(jié)構(gòu)1204相對(duì)應(yīng)的鎖存器的完全限定鎖存器名稱。
然后,在測(cè)試掃描定義文件2104內(nèi)搜索該完全限定鎖存器名稱,如塊2210所示。如果在測(cè)試掃描定義文件2104內(nèi)沒有找到該完全限定鎖存器名稱,則在塊2212標(biāo)志錯(cuò)誤,因?yàn)樵谠撌纠詫?shí)施例中,所有可配置鎖存器必須是可掃描的。否則,數(shù)據(jù)庫(kù)轉(zhuǎn)換工具2106在塊2214調(diào)用API例程add_access_method(method_id,method_name),以擴(kuò)大鎖存器數(shù)據(jù)結(jié)構(gòu)1204從而形成新鎖存器數(shù)據(jù)結(jié)構(gòu)2230。該API調(diào)用的method_id(方法ID)參數(shù)標(biāo)識(shí)特定訪問方法(例如,采用字符串或整數(shù)),并且method_name(方法名稱)參數(shù)指定由關(guān)聯(lián)訪問方法用來(lái)在硬件中訪問對(duì)應(yīng)于新鎖存器數(shù)據(jù)結(jié)構(gòu)2230的鎖存器的“名稱”。如圖22B所示,在塊2214,通過(guò)向鎖存器數(shù)據(jù)結(jié)構(gòu)1204增加指定該訪問方法的方法標(biāo)識(shí)符的方法ID字段2232a(按照慣例為“0”),和指定鎖存器的測(cè)試掃描環(huán)標(biāo)識(shí)符和偏移值的方法名稱字段2234a,創(chuàng)建新鎖存器數(shù)據(jù)結(jié)構(gòu)2230。
該過(guò)程從塊2214進(jìn)入塊2216,其表示使用下一個(gè)訪問方法的定義文件,在本例中為SCOM定義文件2102,來(lái)重復(fù)在塊2210執(zhí)行的對(duì)完全限定鎖存器實(shí)例名稱的搜索。如果在SCOM定義文件2102內(nèi)沒有找到與完全限定鎖存器實(shí)例名稱的匹配,則不記錄錯(cuò)誤,因?yàn)椴皇撬墟i存器都屬于SCOM鏈,并且該過(guò)程簡(jiǎn)單地傳到下面描述的塊2220,另一方面,如果找到匹配,則在塊2218再次調(diào)用add_access_method()API例程,以向鎖存器數(shù)據(jù)結(jié)構(gòu)2230增加指定該訪問方法的方法標(biāo)識(shí)符的方法ID字段2232n和指定鎖存器的SCOM掃描環(huán)標(biāo)識(shí)符和偏移值的方法名稱字段2234n。
最后,在塊2220,調(diào)用API例程delete_latch_name()來(lái)從鎖存器數(shù)據(jù)結(jié)構(gòu)2230中刪除鎖存器名稱字段1244。由于環(huán)標(biāo)識(shí)符和偏移對(duì)唯一標(biāo)識(shí)集成電路芯片1910內(nèi)的任何鎖存器,因此不再需要鎖存器名稱字段1244。然后,該過(guò)程返回到已經(jīng)描述過(guò)的塊2202。
這樣,圖22A的方法改變每個(gè)集成電路芯片的模擬配置數(shù)據(jù)庫(kù),以包括表示可用于每個(gè)硬件功能鎖存器的訪問方法和每種可用訪問方法的鎖存器“方法名稱”(即標(biāo)識(shí)符)的信息。雖然所示的過(guò)程示出修改模擬配置數(shù)據(jù)庫(kù)以支持兩種特定訪問方法,但是所示方法可用來(lái)處理任何數(shù)目或類型的訪問方法。
一旦以圖21和22A所示的方式處理了系統(tǒng)內(nèi)每個(gè)集成電路的所有模擬配置數(shù)據(jù)庫(kù),則可以組合得出的芯片硬件數(shù)據(jù)庫(kù)2108,以形成圖19所示的HW配置數(shù)據(jù)庫(kù)1932。在優(yōu)選實(shí)施例中,通過(guò)創(chuàng)建芯片指針數(shù)據(jù)結(jié)構(gòu)2320(圖23B)來(lái)從芯片HW數(shù)據(jù)庫(kù)2108構(gòu)造HW配置數(shù)據(jù)庫(kù)1932,其中芯片指針數(shù)據(jù)結(jié)構(gòu)2320包含引用數(shù)據(jù)處理系統(tǒng)1902中每種芯片類型的芯片HW數(shù)據(jù)庫(kù)2108的各個(gè)芯片數(shù)據(jù)庫(kù)指針2322。例如,如果數(shù)據(jù)處理系統(tǒng)1902包括32個(gè)相同的集成電路處理器芯片,則芯片指針數(shù)據(jù)結(jié)構(gòu)2320(除了與其他集成電路芯片類型相對(duì)應(yīng)的其他芯片數(shù)據(jù)庫(kù)指針2322之外)將僅包含一個(gè)芯片數(shù)據(jù)庫(kù)指針2322,其指向描述由32個(gè)集成電路處理器芯片實(shí)施的數(shù)字設(shè)計(jì)的單個(gè)芯片HW數(shù)據(jù)庫(kù)2108。然后,將該HW配置數(shù)據(jù)庫(kù)1932存儲(chǔ)在非易失性存儲(chǔ)裝置中,如非易失性存儲(chǔ)裝置1940或快閃ROM 1924,如圖19所示。
為了利用HW配置數(shù)據(jù)庫(kù)1932配置硬件數(shù)字設(shè)計(jì),首先根據(jù)圖23A所示的示例性過(guò)程,將HW配置數(shù)據(jù)庫(kù)1932從非易失性存儲(chǔ)裝置裝載到易失性存儲(chǔ)器中。圖23A所示的過(guò)程可以通過(guò)由處理單元1922b執(zhí)行系統(tǒng)固件1930b、例如由工作站計(jì)算機(jī)1904在實(shí)驗(yàn)環(huán)境中執(zhí)行。類似地,當(dāng)商業(yè)實(shí)施數(shù)據(jù)處理系統(tǒng)1902時(shí),服務(wù)處理器1920根據(jù)圖23A的過(guò)程執(zhí)行系統(tǒng)固件1930a,以將HW配置數(shù)據(jù)庫(kù)1932a從快閃ROM 1924裝載到易失性存儲(chǔ)器1928a。
如圖所示,圖23A的過(guò)程開始于塊2300,然后進(jìn)入塊2302,其示出確定目標(biāo)數(shù)據(jù)處理系統(tǒng)如數(shù)據(jù)處理系統(tǒng)1902內(nèi)集成電路芯片的類型以及每種類型的數(shù)目。在示例性實(shí)施例中,由系統(tǒng)固件1930進(jìn)行塊2302所示的確定,其咨詢一組所謂的關(guān)鍵產(chǎn)品數(shù)據(jù)(VPD),以確定數(shù)據(jù)處理系統(tǒng)1902表示上千種可能機(jī)器配置中的哪一種。
然后,該過(guò)程進(jìn)入塊2306-2310,其一起形成循環(huán),其中在芯片指針數(shù)據(jù)結(jié)構(gòu)2320內(nèi)走動(dòng)(walk),以處理組成數(shù)據(jù)處理系統(tǒng)1902的集成電路芯片的芯片HW數(shù)據(jù)庫(kù)2108。首先,在塊2306,確定數(shù)據(jù)處理系統(tǒng)1902內(nèi)每種集成電路芯片類型的芯片HW數(shù)據(jù)庫(kù)2108是否都被處理。如果是,則完成將HW配置數(shù)據(jù)庫(kù)1932裝載到易失性存儲(chǔ)器中,并且該過(guò)程終止于塊2312。然而,如果與由VPD標(biāo)識(shí)的每種集成電路芯片類型相對(duì)應(yīng)的芯片HW數(shù)據(jù)庫(kù)2108尚未被處理,則在塊2308將下一個(gè)芯片HW數(shù)據(jù)庫(kù)2108裝載到工作站1904的易失性存儲(chǔ)器1928中以作處理。
如示出HW配置數(shù)據(jù)庫(kù)1932的存儲(chǔ)器內(nèi)視圖的圖23B所示,芯片HW數(shù)據(jù)庫(kù)2108的裝載創(chuàng)建如上所述的存儲(chǔ)器內(nèi)數(shù)據(jù)結(jié)構(gòu),如Dial指針數(shù)組1208、鎖存器指針數(shù)組1210、以及每個(gè)DDDS 1200內(nèi)的實(shí)例指針數(shù)組1226(見圖12)。另外,在每個(gè)鎖存器數(shù)據(jù)結(jié)構(gòu)2230內(nèi)創(chuàng)建鎖存器值字段2324、鎖存器設(shè)置字段2326和設(shè)置歷史字段2325,并且在每個(gè)DIDS 1202內(nèi)創(chuàng)建Dial設(shè)置字段2328。這三個(gè)字段的每一個(gè)被實(shí)現(xiàn)為數(shù)組,其中每個(gè)條目對(duì)應(yīng)于與當(dāng)前芯片HW數(shù)據(jù)庫(kù)2108相對(duì)應(yīng)的集成電路芯片1910的特定實(shí)例。最后,創(chuàng)建空芯片映射表2325。
下一步,在塊2310,針對(duì)對(duì)應(yīng)于當(dāng)前芯片HW數(shù)據(jù)庫(kù)2108的集成電路芯片類型的每個(gè)實(shí)例,將相應(yīng)的條目增加到芯片映射表2325。該步驟最好通過(guò)對(duì)HW配置API 1934的調(diào)用由系統(tǒng)固件1930執(zhí)行,其中該調(diào)用訪問VPD,以確定在當(dāng)前硬件數(shù)字設(shè)計(jì)中包含了對(duì)應(yīng)于當(dāng)前芯片HW數(shù)據(jù)庫(kù)2108的集成電路芯片類型的多少實(shí)例。按照慣例,芯片映射表2325內(nèi)的條目次序?qū)?yīng)于Dial設(shè)置字段2328、鎖存器值字段2324和鎖存器設(shè)置字段2326中數(shù)組條目的次序。
如圖23B所示,芯片映射表2325內(nèi)的每個(gè)條目關(guān)聯(lián)兩個(gè)固件提供的值(1)芯片實(shí)例名稱,其是如同在數(shù)據(jù)處理系統(tǒng)1902的模擬模型中標(biāo)識(shí)表示集成電路芯片實(shí)例的設(shè)計(jì)實(shí)體的字符串一樣的字符串(例如,a.b.c.d),和(2)芯片ID,指定服務(wù)處理器1920通過(guò)其與那個(gè)集成電路芯片實(shí)例通信的測(cè)試訪問端口1914的標(biāo)識(shí)符。這樣,數(shù)據(jù)處理系統(tǒng)1902中的任何鎖存器現(xiàn)在可容易地通過(guò)多元組(芯片ID,掃描環(huán),偏移)來(lái)尋址,該多元組由芯片映射表2325與HW配置API 1934所采用的完全限定鎖存器名稱的芯片標(biāo)識(shí)部分相關(guān)聯(lián)。然后,該過(guò)程返回到已經(jīng)描述過(guò)的塊2306。
這樣,圖23A所示的過(guò)程允許利用單個(gè)HW配置數(shù)據(jù)庫(kù)1932來(lái)為任意尺寸或配置的數(shù)據(jù)處理系統(tǒng)構(gòu)建存儲(chǔ)器內(nèi)HW配置數(shù)據(jù)庫(kù),從而消除了為每一個(gè)可能的系統(tǒng)大小和配置開發(fā)和存儲(chǔ)獨(dú)立的單一配置數(shù)據(jù)庫(kù)的需要。
在HW配置數(shù)據(jù)庫(kù)1932被裝載到易失性存儲(chǔ)器1928中的情況下,系統(tǒng)固件1930然后可由服務(wù)處理器1920的處理單元1922a或工作站計(jì)算機(jī)1904的處理單元1922b執(zhí)行,以調(diào)用HW配置API 1934來(lái)讀取或設(shè)置數(shù)據(jù)處理系統(tǒng)1902的一個(gè)或多個(gè)集成電路芯片1910的配置。如同在模擬中一樣,HW配置API 1934最好包括獨(dú)立API例程,以在交互和批模式中讀取Dial和Dial組。如同模擬一樣,系統(tǒng)固件1930的API調(diào)用為所要設(shè)置或讀取的每個(gè)Dial或Dial組實(shí)例指定實(shí)例限定符(例如,a.b.c.d或a.b.c.[X])和Dial名稱限定符(例如,實(shí)體.Dial名稱)。
由于可利用多種訪問方法來(lái)設(shè)置或讀取Dial或Dial組,因此用來(lái)設(shè)置或讀取Dial或Dial組實(shí)例的API調(diào)用最好包括附加參數(shù)access_method(訪問方法)。在優(yōu)選實(shí)施例中,access_method參數(shù)可取值SCAN,表示測(cè)試掃描;SCOM,表示SCOM掃描;以及AUTO,表示HW配置API 1934將選擇訪問方法。響應(yīng)于access_method參數(shù)的AUTO值,HW配置API 1934根據(jù)API調(diào)用所針對(duì)的鎖存器數(shù)據(jù)結(jié)構(gòu)2230中的方法ID 2232所表示的支持訪問方法、以及功能時(shí)鐘2002和掃描時(shí)鐘2010中的哪一個(gè)正在運(yùn)行,來(lái)選擇訪問方法。如上所述,SCOM掃描僅可用于功能時(shí)鐘2002正在運(yùn)行時(shí),并且測(cè)試掃描僅可用于掃描時(shí)鐘2010正在運(yùn)行時(shí)。
在任何HW配置API 1934可設(shè)置或讀取Dial或Dial組實(shí)例之前,HW配置API 1934必須首先確定在API調(diào)用中指定的實(shí)例限定符和Dial名稱限定符標(biāo)識(shí)了哪些Dial或Dial組實(shí)例?,F(xiàn)在參照?qǐng)D24,示出了根據(jù)本發(fā)明,HW配置API 1934在HW配置數(shù)據(jù)庫(kù)1932中定位特定Dial或Dial組實(shí)例的示例性過(guò)程的高層邏輯流程圖。所示過(guò)程類似于圖15所示和上面所述的過(guò)程。
如圖所示,該過(guò)程響應(yīng)于HW配置API 1934接收到以一個(gè)或多個(gè)Dial或Dial組實(shí)例的實(shí)例限定符和Dial名稱限定符為參數(shù)的、來(lái)自固件1930的API調(diào)用而開始于塊2400,如上所述。響應(yīng)于該API調(diào)用,配置API 1934在芯片指針數(shù)組2320進(jìn)入HW配置數(shù)據(jù)庫(kù)1932,并且如塊2402所示進(jìn)入循環(huán),其中處理芯片數(shù)據(jù)庫(kù)指針2322,直到在特定芯片HW數(shù)據(jù)庫(kù)2108內(nèi)定位了一個(gè)或多個(gè)匹配Dial實(shí)例為止,或者直到所有芯片數(shù)據(jù)庫(kù)指針2322都被處理為止。響應(yīng)于在塊2402確定所有芯片數(shù)據(jù)庫(kù)指針2322都被處理而沒有定位任何匹配Dial實(shí)例,則該過(guò)程以錯(cuò)誤終止于塊2403。然而,如果少于所有芯片數(shù)據(jù)庫(kù)指針2322已被處理,則從芯片指針數(shù)據(jù)結(jié)構(gòu)2320中選擇下一個(gè)芯片數(shù)據(jù)庫(kù)指針2322以作處理,如塊2406所示。利用所選芯片數(shù)據(jù)庫(kù)指針2322來(lái)定位關(guān)聯(lián)芯片HW數(shù)據(jù)庫(kù)2108。
在塊2406之后,該過(guò)程進(jìn)入塊2408和下面塊,其表示處理循環(huán),其中處理當(dāng)前芯片HW數(shù)據(jù)庫(kù)2108的Dial指針數(shù)組1208中的每個(gè)Dial指針1252,直到定位了匹配API調(diào)用的特定Dial為止,或者所有Dial指針1252(圖12)都已經(jīng)被處理而沒有找到任何匹配Dial實(shí)例為止。響應(yīng)于在塊2408確定所有Dial指針1252都被處理而沒有定位任何匹配Dial實(shí)體,該過(guò)程從塊2408返回到塊2402,從而處理芯片指針數(shù)組2320中的下一個(gè)芯片數(shù)據(jù)庫(kù)指針2322(即,處理下一個(gè)芯片HW數(shù)據(jù)庫(kù)2108)。另一方面,如果在塊2408確定不是Dial指針數(shù)組1208內(nèi)的所有Dial指針1252都已經(jīng)被處理,則該過(guò)程進(jìn)入塊2410,其示出從Dial指針數(shù)組1208中選擇下一個(gè)Dial指針1252以作處理。
下一步,在塊2412確定由當(dāng)前Dial指針1252引用的DDDS 1200是否具有精確匹配指定Dial名稱限定符的名稱字段1222。關(guān)于名稱字段1222,兩種實(shí)現(xiàn)是可能的。第一,可禁止Dial名稱的再使用,以便每一個(gè)Dial名稱不僅在其自己的集成電路芯片內(nèi)而且在整個(gè)系統(tǒng)(例如,數(shù)據(jù)處理系統(tǒng)1902)內(nèi)都是唯一的。第二,更少限制的方法是要求每個(gè)Dial名稱僅在其集成電路芯片1910內(nèi)是唯一的,并且允許在不同集成電路中多次使用Dial名稱。為了支持第二方法,名稱字段1222采取“chiptype(芯片類型).Dial name(名稱)”的形式,其中“芯片類型”是標(biāo)識(shí)集成電路芯片1910的類型的唯一字符串,從而消除應(yīng)用于在不同集成電路芯片1910中實(shí)例化的Dial實(shí)體的相同Dial名稱的歧義。
響應(yīng)于在塊2412確定名稱字段1222不匹配指定Dial名稱限定符,該過(guò)程返回到塊2408,以處理下一個(gè)Dial指針1252(若有的話),如上所述。然而,如果找到匹配,則該過(guò)程進(jìn)入包括塊2420-2434的循環(huán),其中利用匹配Dial實(shí)體的DDDS 1200的實(shí)例指針數(shù)組1226中的實(shí)例指針1228,檢查由各個(gè)DIDS 1202表示的Dial實(shí)例,以與API調(diào)用的實(shí)例限定符進(jìn)行匹配。在該處理循環(huán)中,首先在塊2420確定當(dāng)前DDDS 1200內(nèi)的所有實(shí)例指針1228是否都被處理。如果是,則在塊2434進(jìn)一步確定是否找到對(duì)應(yīng)于當(dāng)前DDDS 1200的Dial實(shí)體的至少一個(gè)匹配實(shí)例。該確定是由于HW配置數(shù)據(jù)庫(kù)1932的構(gòu)造確保僅一個(gè)芯片HW數(shù)據(jù)庫(kù)2108中的最多一個(gè)匹配Dial(而非Dial實(shí)例)將匹配在API調(diào)用中指定的實(shí)例限定符和Dial名稱限定符而進(jìn)行的。因此,如果找到特定Dial實(shí)體的匹配實(shí)例,則無(wú)需搜索另外的Dial實(shí)體或芯片HW數(shù)據(jù)庫(kù)2108。從而,如果確定對(duì)于與當(dāng)前DDDS 1200相對(duì)應(yīng)的Dial實(shí)體找到至少一個(gè)匹配的Dial實(shí)例,則該過(guò)程從塊2434傳到塊2438,并且終止。然而,如果在塊2434確定沒有找到匹配,則該過(guò)程通過(guò)頁(yè)連接符A,并且以錯(cuò)誤終止于塊2403。
返回到塊2420,響應(yīng)于確定不是當(dāng)前DDDS 1200的所有實(shí)例指針1228都已經(jīng)被處理,則該過(guò)程進(jìn)入塊2422,其示出選擇下一個(gè)實(shí)例指針1228及其關(guān)聯(lián)DIDS 1202以作處理。然后,在塊2424通過(guò)處理芯片映射表2326中的每個(gè)條目來(lái)確定對(duì)于與當(dāng)前芯片HW數(shù)據(jù)庫(kù)2108相對(duì)應(yīng)的每一個(gè)集成電路芯片1910中的Dial實(shí)例,DIDS 1202是否被處理。如果是,則該過(guò)程傳到下面描述的塊2436。如果芯片映射表2325中的所有條目的處理尚未完成,則該過(guò)程進(jìn)入塊2426。
塊2426示出通過(guò)將芯片映射表2325的下一個(gè)條目中的芯片實(shí)例名稱預(yù)先掛起到當(dāng)前DIDS 1202的實(shí)例名稱字段1234來(lái)形成下一個(gè)完全限定Dial實(shí)例名稱,以與在API調(diào)用中指定的實(shí)例限定符進(jìn)行匹配。然后,在塊2430將該完全限定Dial實(shí)例名稱與實(shí)例限定符進(jìn)行比較。如果它們不匹配,則該過(guò)程返回到已經(jīng)描述過(guò)的塊2424。如果它們匹配,則在塊2432創(chuàng)建臨時(shí)結(jié)果指針和關(guān)聯(lián)芯片向量,如果它們不存在的話。臨時(shí)結(jié)果指針指向當(dāng)前DIDS1202,以標(biāo)識(shí)對(duì)應(yīng)的Dial實(shí)例與在訪問請(qǐng)求中指定的實(shí)例限定符匹配。還在關(guān)聯(lián)芯片向量中放置一個(gè)條目來(lái)表示在其內(nèi)定位該匹配的Dial實(shí)例的特定集成電路芯片實(shí)例1910。在示例性實(shí)施例中,芯片向量可簡(jiǎn)單地包括與芯片映射表2325中的條目數(shù)相同的比特?cái)?shù),其中“1”的比特值表示對(duì)應(yīng)的集成電路芯片實(shí)例1910包含匹配Dial實(shí)例。在塊2432之后,該過(guò)程返回到塊2424。
對(duì)芯片映射表2325中的每個(gè)條目重復(fù)由塊2424-2432表示的處理循環(huán)。在所有條目都被處理之后,該過(guò)程從塊2424傳到塊2436,其示出確定Dial名稱限定符是否是利用不帶方括號(hào)的語(yǔ)法來(lái)指定的,并且如果是,則確定在由當(dāng)前DIDS 1202表示的Dial實(shí)例中是否找到指定Dial名稱限定符的匹配。如果確定是否定的,則有可能可存在與另一個(gè)DIDS 1202相關(guān)聯(lián)的另外的匹配Dial實(shí)例。從而,該過(guò)程返回到塊2420,以處理當(dāng)前DDDS 1200的下一個(gè)實(shí)例指針1228。然而,如果塊2436的確定是肯定的,則已知所有匹配Dial實(shí)例都被定位,并且以臨時(shí)結(jié)果指針和關(guān)聯(lián)芯片向量被標(biāo)識(shí)。因此,該過(guò)程終止于塊2438。
在通過(guò)圖24所示的過(guò)程確定了由實(shí)例限定符和Dial名稱限定符指定的Dial或Dial組實(shí)例之后,以與上面參照?qǐng)D16A(在交互模式中讀取Dial實(shí)例)、圖16B(在交互模式中讀取Dial組實(shí)例)、圖17A(在交互模式中設(shè)置Dial實(shí)例)、圖17B(在交互模式中設(shè)置Dial組實(shí)例)以及圖18A-18B(在批模式中設(shè)置Dial實(shí)例或Dial組實(shí)例)所述大致相同的方式設(shè)置或讀取Dial或Dial組實(shí)例。然而,需要一些區(qū)別來(lái)考慮使用單個(gè)芯片HW數(shù)據(jù)庫(kù)2108,以表示可能多個(gè)集成電路芯片1910、以及用來(lái)訪問集成電路芯片1910的多個(gè)不同訪問方法的可用性。這些區(qū)別在下面進(jìn)行詳細(xì)描述。
當(dāng)讀取Dial實(shí)例或Dial組實(shí)例時(shí),通過(guò)在配置數(shù)據(jù)庫(kù)中沿著Dial樹“向上”傳播鎖存器值來(lái)驗(yàn)證鎖存器值,如參照?qǐng)D16A的塊1624所述。相反,當(dāng)設(shè)置Dial實(shí)例或Dial組實(shí)例時(shí),在配置數(shù)據(jù)庫(kù)中沿著Dial樹“向下”傳播Dial值到鎖存器數(shù)據(jù)結(jié)構(gòu),如上面參照?qǐng)D17A的塊1714所述。在模擬中,一次僅一個(gè)鎖存器值“向下”傳播到任何一個(gè)鎖存器數(shù)據(jù)結(jié)構(gòu)1204或從其“向上”傳播。然而,由于HW配置數(shù)據(jù)庫(kù)1932采用單個(gè)芯片HW數(shù)據(jù)庫(kù)2108表示相同類型的多個(gè)集成電路芯片1910,因此參考表示多個(gè)物理集成電路芯片1910的芯片HW數(shù)據(jù)庫(kù)2108讀取或設(shè)置Dial或Dial組實(shí)例需要沿著Dial樹并行向上或向下傳播值集合的多個(gè)元素,其中該值集合的每個(gè)元素是由在圖24中構(gòu)造的臨時(shí)結(jié)果指針和芯片向量標(biāo)識(shí)的特定芯片實(shí)例的值。
類似地,在模擬中,配置數(shù)據(jù)庫(kù)1404內(nèi)的Dial設(shè)置字段1239、鎖存器值字段1246、鎖存器設(shè)置字段1248和設(shè)置歷史字段1249的每一個(gè)僅包含單個(gè)值。相反,HW配置數(shù)據(jù)庫(kù)1932內(nèi)的對(duì)應(yīng)Dial設(shè)置字段2328、鎖存器值字段2324、鎖存器設(shè)置字段2326和設(shè)置歷史字段2325被實(shí)現(xiàn)為其中每個(gè)元素對(duì)應(yīng)于特定集成電路芯片1910的各自Dial或鎖存器實(shí)例的數(shù)組。從而,當(dāng)設(shè)置Dial、Dial組或鎖存器實(shí)例時(shí),根據(jù)在圖24中構(gòu)造的臨時(shí)結(jié)果指針和芯片向量,更新對(duì)應(yīng)于設(shè)置實(shí)例的Dial設(shè)置字段2328、鎖存器值字段2324、鎖存器設(shè)置字段2326和設(shè)置歷史字段2325內(nèi)的元素。
由于HW配置數(shù)據(jù)庫(kù)1932的實(shí)驗(yàn)或商業(yè)使用需要利用多個(gè)可能訪問方法來(lái)訪問物理硬件(即,集成電路芯片1910),因此在優(yōu)選實(shí)施例中注意與模擬環(huán)境的三個(gè)另外區(qū)別。第一,如果HW配置API 1934確定包含在API調(diào)用內(nèi)的access_method參數(shù)所表示的訪問方法不可用于通過(guò)圖24的過(guò)程獲得的臨時(shí)結(jié)果指針和芯片向量所標(biāo)識(shí)的任何Dial實(shí)例,則在API調(diào)用中請(qǐng)求的設(shè)置或讀取操作最好失敗(即不被執(zhí)行)。如上所述,可以設(shè)置或讀取每個(gè)鎖存器的訪問方法由每個(gè)鎖存器數(shù)據(jù)結(jié)構(gòu)2230的方法ID字段2232表示。
第二,最好,只有HW配置API 1934確定API調(diào)用所針對(duì)的每個(gè)集成電路芯片1910內(nèi)的功能時(shí)鐘2002和掃描時(shí)鐘2010處于包含在API調(diào)用內(nèi)的access_method參數(shù)的適當(dāng)狀態(tài),在API調(diào)用中請(qǐng)求的設(shè)置或讀取操作才成功。也就是,如果access_method參數(shù)具有SCAN值,則功能時(shí)鐘2002必須被禁用,而掃描時(shí)鐘2010必須被啟用。相反,如果access_method參數(shù)具有SCOM值,則功能時(shí)鐘2002必須被啟用,而掃描時(shí)鐘2010必須被禁用。如果access_method參數(shù)具有AUTO值,則包含由API調(diào)用所針對(duì)的鎖存器的每個(gè)集成電路芯片1910的功能時(shí)鐘2002和掃描時(shí)鐘2010必須處于允許采用每個(gè)這樣的鎖存器的至少一個(gè)訪問方法的狀態(tài)。
第三,用來(lái)讀取和設(shè)置硬件鎖存器的HW配置API 1934,read(讀)_latch(鎖存器)()和write(寫)_latch()最好通過(guò)在易失性存儲(chǔ)器1928中實(shí)現(xiàn)影象掃描鏈緩沖器、并在可能時(shí)代替掃描集成電路芯片1910中的掃描鏈而掃描該掃描鏈緩沖器來(lái)最小化對(duì)集成電路芯片1910的掃描訪問。例如,在易失性存儲(chǔ)器1928中的鎖存器值已知為最新的情況下,與在模擬中采用的GETFAC()API1412相對(duì)應(yīng)的read_latch()HW配置API 1934最好從易失性存儲(chǔ)器1928中的對(duì)應(yīng)影象掃描鏈緩沖器獲得鎖存器值。另外,通過(guò)與在模擬中利用的PUTFAC()API 1414相對(duì)應(yīng)的write_latch()對(duì)鎖存器值的多次更新最好在易失性存儲(chǔ)器1928內(nèi)的影象掃描鏈緩沖器中進(jìn)行緩沖。通過(guò)這種方式,對(duì)集成電路芯片1910的特定掃描鏈中的鎖存器的多次寫入可通過(guò)僅掃描特定掃描鏈一次來(lái)進(jìn)行。
HW配置API 1934最好還包括與可用于模擬中的check_model(檢查模型)()API類似的check_chip(檢查芯片)()API。當(dāng)被調(diào)用時(shí),check_chip()API利用指定芯片HW數(shù)據(jù)庫(kù)2108內(nèi)的頂層指針數(shù)組1206,以驗(yàn)證芯片HW數(shù)據(jù)庫(kù)2108內(nèi)的每個(gè)頂層CDial和LDial實(shí)例設(shè)為其合法值之一。具體地說(shuō),check_chip()API通過(guò)參考其映射表1224和其Dial樹中任何低層Dial實(shí)例的映射表1224,沿著每個(gè)頂層CDial和LDial實(shí)例的Dial樹向上傳播底層硬件鎖存器值。通過(guò)check_chip()API返回設(shè)為非法值的任何頂層LDial或CDial實(shí)例。
再次參照?qǐng)D19,在數(shù)據(jù)處理系統(tǒng)1902的很多商業(yè)實(shí)施例中,服務(wù)處理器1920內(nèi)的非易失性存儲(chǔ)裝置(例如,快閃ROM 1924)的存儲(chǔ)容量顯著小于用來(lái)存儲(chǔ)系統(tǒng)固件1930b和HW配置數(shù)據(jù)庫(kù)1932b的工作站計(jì)算機(jī)1904的非易失性存儲(chǔ)裝置1940(例如,硬盤存儲(chǔ)裝置)的存儲(chǔ)容量。從而,通常期望或需要減小在實(shí)驗(yàn)硬件測(cè)試環(huán)境中開發(fā)的系統(tǒng)固件1930b和HW配置數(shù)據(jù)庫(kù)1932b的大小,以獲得在數(shù)據(jù)處理系統(tǒng)1902的快閃ROM 1924(或其他非易失性存儲(chǔ)裝置)內(nèi)商業(yè)實(shí)施的系統(tǒng)固件1930a和HW配置數(shù)據(jù)庫(kù)1932a。
從而,現(xiàn)在參照?qǐng)D25,其示出了可通過(guò)消除不必要信息來(lái)壓縮在系統(tǒng)固件1930的實(shí)驗(yàn)開發(fā)和測(cè)試期間所開發(fā)的每個(gè)芯片HW數(shù)據(jù)庫(kù)2108、從而獲得適于商業(yè)實(shí)施的HW配置數(shù)據(jù)庫(kù)1932a的示例性過(guò)程的高層邏輯流程圖。該過(guò)程開始于生成Dial使用信息2500,其表示集成電路芯片1910的特定類型內(nèi)的哪些Dial實(shí)例已被設(shè)置和/或讀取以及Dial實(shí)例已被設(shè)置的值。
確定哪些Dial實(shí)例被設(shè)置或讀取以及Dial實(shí)例已被設(shè)置的值可采用本領(lǐng)域的技術(shù)人員所公知的很多方法來(lái)完成。例如,可人工檢查系統(tǒng)固件1930以產(chǎn)生Dial使用信息2500?;蛘?,系統(tǒng)固件1930可以在多個(gè)可能機(jī)器配置中執(zhí)行,這些可能機(jī)器配置覆蓋當(dāng)前考慮的集成電路芯片1910的類型中的Dial實(shí)例可被設(shè)置的所有設(shè)置。被設(shè)置和讀取的Dial實(shí)例和Dial實(shí)例被設(shè)置的值然后可被記錄為Dial使用信息2500。
在優(yōu)選實(shí)施例中,在IDial實(shí)例的Dial使用信息2500內(nèi)記錄的所有信息是IDial實(shí)例是否被設(shè)置或讀取。沒有記錄IDial實(shí)例值,是因?yàn)闉榱松蒁ial使用信息2500的目的而假定如果IDial實(shí)例被設(shè)置,則可利用所有其可能值。然而,存在開發(fā)者所知道的特定IDial實(shí)例將僅設(shè)為單個(gè)值。為了允許從HW配置數(shù)據(jù)庫(kù)1932a中消除這些IDial,這些IDial及其關(guān)聯(lián)值可以可選地由開發(fā)者在覆蓋文件2502內(nèi)指定。覆蓋文件2502還可包含開發(fā)者期望顯式地在HW配置數(shù)據(jù)庫(kù)1932a內(nèi)保持、而與Dial實(shí)例是否被設(shè)置或讀取無(wú)關(guān)的Dial實(shí)例列表(若有的話)。
這樣,對(duì)于每個(gè)芯片HW數(shù)據(jù)庫(kù)2108,最好獲得一起包含至少下列信息的Dial使用信息2500和覆蓋文件25021)任何配置中集成電路芯片的任何實(shí)例內(nèi)被設(shè)置的所有頂層非IDial實(shí)例的列表,以及任何配置中集成電路芯片的任何實(shí)例內(nèi)設(shè)為任何值的任何頂層IDial的列表;2)被設(shè)置的每個(gè)非IDial實(shí)例的所有值的列表;3)設(shè)為單個(gè)值的IDial的單獨(dú)列表;以及4)被讀取的所有Dial實(shí)例的列表。
如圖25進(jìn)一步所示,然后,由軟件壓縮工具2504(例如,由工作站計(jì)算機(jī)1904執(zhí)行)利用該信息來(lái)從關(guān)聯(lián)芯片HW數(shù)據(jù)庫(kù)2108中消除不必要的信息。壓縮工具2504產(chǎn)生兩個(gè)輸出(1)形成HW配置數(shù)據(jù)庫(kù)1932a的一部分的壓縮芯片HW數(shù)據(jù)庫(kù)2506;以及(2)用來(lái)產(chǎn)生在系統(tǒng)固件1930a的執(zhí)行期間集成電路芯片1910中的測(cè)試掃描鏈2006被初始化的掃描鏈映像的初始掃描鏈映像2508。正如所示,這些初始掃描鏈映像2508可以非破壞性地與另外的掃描鏈輸入2510進(jìn)行組合,以獲得最終的掃描鏈映像2512。
現(xiàn)在參照?qǐng)D26A-26C,其示出了根據(jù)本發(fā)明的壓縮工具2504壓縮芯片HW數(shù)據(jù)庫(kù)2108的方法的高層邏輯流程圖。如下面詳細(xì)所述,所示方法實(shí)現(xiàn)至少三種大小優(yōu)化。
第一,如果Dial實(shí)例將從不被系統(tǒng)固件1930a設(shè)置或讀取,則可從芯片HW數(shù)據(jù)庫(kù)2108消除與Dial實(shí)例相關(guān)的信息。由于該Dial實(shí)例從不被系統(tǒng)固件1930a設(shè)置或讀取,因此在HW配置數(shù)據(jù)庫(kù)1932a內(nèi)將從不引用對(duì)應(yīng)于該Dial實(shí)例的DIDS 1202,因此可刪除它。值得注意的是,系統(tǒng)固件1930a不設(shè)置或讀取Dial實(shí)例不意味著在模擬或?qū)嶒?yàn)調(diào)試期間不設(shè)置或讀取該Dial實(shí)例。很多Dial實(shí)例(例如,模式開關(guān))從不被系統(tǒng)固件1930a設(shè)置,但是在模擬期間被測(cè)試,以確保如果以后的固件修訂版需要的話,模式開關(guān)也正常工作。
與Dial實(shí)例相關(guān)的信息可能是多余的第二原因是如果Dial實(shí)例在所有配置中僅設(shè)為一個(gè)值。在這種情況下,可從芯片HW數(shù)據(jù)庫(kù)2108中刪除對(duì)應(yīng)于該Dial實(shí)例的DIDS 1202,因?yàn)樵O(shè)置Dial實(shí)例的效果可通過(guò)以設(shè)置Dial實(shí)例而獲得的鎖存器值來(lái)設(shè)置掃描到集成電路芯片1910中的最終掃描鏈映像2512來(lái)代替實(shí)現(xiàn)。設(shè)置Dial實(shí)例的系統(tǒng)固件1930b內(nèi)的代碼同樣可被消除,以減小從實(shí)驗(yàn)測(cè)試和調(diào)試最終獲得的系統(tǒng)固件1930a的大小。
第三,DDDS 1200中的映射表1224可通過(guò)消除Dial從不被系統(tǒng)固件1930a設(shè)置的值來(lái)優(yōu)化。
在進(jìn)行前述優(yōu)化中,對(duì)被讀取的Dial實(shí)例給予特殊考慮。一般而言,當(dāng)讀取Dial實(shí)例時(shí),在下述示例性壓縮方法中假定包含被讀取Dial實(shí)例的整個(gè)Dial樹必須保持在其芯片HW數(shù)據(jù)庫(kù)內(nèi)。另外,假定必須保持包含被讀取Dial實(shí)例的Dial樹中Dial的映射表內(nèi)的所有條目,因?yàn)樵谏虡I(yè)實(shí)施中,硬件可將底層鎖存器設(shè)為不同于由系統(tǒng)固件讀取的值。因此,不能推理地確定將需要哪些映射表?xiàng)l目來(lái)讀取Dial實(shí)例。雖然這些假定限制壓縮,但是它們確保被讀取的每個(gè)Dial實(shí)例可被容易地訪問,而不管Dial實(shí)例是頂層Dial實(shí)例還是低層Dial實(shí)例。
首先參照?qǐng)D26A,該過(guò)程開始于塊2600,然后進(jìn)入塊2602,其示出壓縮工具2504將芯片HW數(shù)據(jù)庫(kù)2108裝載到易失性存儲(chǔ)器1928b中,并且創(chuàng)建存儲(chǔ)器內(nèi)數(shù)據(jù)結(jié)構(gòu)1208、1210和2325,如上所述。另外,如塊2604所示,壓縮工具2504與每個(gè)DIDS 1202相關(guān)聯(lián)地創(chuàng)建僅由壓縮工具2506使用的存儲(chǔ)器內(nèi)的一些附加臨時(shí)字段。這些臨時(shí)字段包括Dial實(shí)例值結(jié)構(gòu)(DIVS),其用于存儲(chǔ)在Dial使用信息2500內(nèi)關(guān)聯(lián)Dial實(shí)例被設(shè)置的值(若有的話)。對(duì)于IDial實(shí)例,必須特殊處理DIVS。具體而言,DIVS將為空,包含表示IDial實(shí)例被設(shè)置的令牌(token),或者僅對(duì)于頂層IDial實(shí)例,包含IDial實(shí)例被設(shè)置的單個(gè)值(如果適合)。在塊2604為每個(gè)DIDS 1202創(chuàng)建的臨時(shí)字段還包括Dial實(shí)例保持字段(DIPF),如果關(guān)聯(lián)DIDS應(yīng)被保持(即不從壓縮的芯片HW數(shù)據(jù)庫(kù)中刪除),則將其設(shè)為真,否則將其設(shè)為假。作為所要保持的DIDS顯式地列在覆蓋文件2502中的每個(gè)DIDS 1202(若有的話)的DIPF被初始化為真,并且所有其他DIPF被初始化為假。
然后,該過(guò)程從塊2604進(jìn)入塊2606,其示出壓縮工具2504進(jìn)入循環(huán),其中處理頂層指針數(shù)組1206中的每個(gè)頂層指針1250,以將相關(guān)信息從Dial使用信息2500輸入到每個(gè)DIDS 1202的DIPF和DIVS中。如果所有頂層指針1250都被處理,則該過(guò)程通過(guò)頁(yè)連接符B至下面描述的圖26B。然而,如果所有頂層指針1250尚未都被處理,則在塊2608選擇頂層指針數(shù)組1206內(nèi)的下一個(gè)頂層指針1250以作處理。
然后,該過(guò)程從塊2608傳到塊2610和2612。塊2610示出壓縮工具2504處理以與由當(dāng)前頂層指針1250引用的DIDS 1202相對(duì)應(yīng)的Dial實(shí)例為首的Dial樹中的每個(gè)非IDial。壓縮工具2504將包含在Dial使用信息2500內(nèi)的對(duì)應(yīng)Dial實(shí)例的值添加到每個(gè)這樣的DIDS 1202的DIVS。另外,如塊2612所示,壓縮工具2504處理以與由當(dāng)前頂層指針1250引用的DIDS 1202相對(duì)應(yīng)的Dial實(shí)例為首的Dial樹內(nèi)的每個(gè)IDial。對(duì)于每個(gè)這樣的IDial,如果Dial使用信息2500表示IDial已被設(shè)置,則壓縮工具2504將設(shè)置令牌添加到DIVS。
下一步,在塊2614,如果Dial使用信息2500表示Dial樹中的任何Dial被讀取,則壓縮工具2504設(shè)置以與由當(dāng)前頂層指針1250引用的DIDS 1202相對(duì)應(yīng)的Dial實(shí)例為首的Dial樹中每一個(gè)DIDS 1202的DIPF。換句話說(shuō),如果Dial樹中的任何Dial實(shí)例被讀取,則Dial樹中的每個(gè)DIPF設(shè)為真。然后,該過(guò)程進(jìn)入塊2616,其示出壓縮工具2504檢查與由當(dāng)前頂層指針1250引用的DIDS 1202相對(duì)應(yīng)的每個(gè)頂層IDial(若有的話),以確定覆蓋文件2502是否表示IDial僅設(shè)為單個(gè)值。如果是,則壓縮工具2504將包含在覆蓋文件2502內(nèi)的值添加到這些頂層IDial的DIVS,并且若存在的話,刪除設(shè)置令牌。
然后,該過(guò)程返回到塊2606,其示出繼續(xù)處理循環(huán)直到頂層指針數(shù)組1206內(nèi)的所有頂層指針1250都被處理為止。一旦所有頂層指針1250都被處理,則該過(guò)程通過(guò)頁(yè)連接符B至圖26B。
現(xiàn)在參照?qǐng)D26B,該過(guò)程從頁(yè)連接符B進(jìn)入塊2620,其示出第二處理循環(huán),其中處理頂層指針數(shù)組1206內(nèi)的每個(gè)頂層指針1250。如果在塊2620確定在當(dāng)前處理循環(huán)中,頂層指針數(shù)組1206內(nèi)的所有頂層指針1250都已經(jīng)被處理,則該過(guò)程通過(guò)頁(yè)連接符C并且在圖26C中繼續(xù)。否則,該過(guò)程進(jìn)入塊2622,其示出選擇頂層指針數(shù)組1206內(nèi)的下一個(gè)頂層指針1250以作處理。
在塊2622之后,針對(duì)分別由判定塊2624、2630和2640表示的三種條件之一,檢查與由當(dāng)前頂層指針1250引用的DIDS 1202相關(guān)聯(lián)的DIVS和DIPF。如果在塊2624確定DIPF具有真值,或者如果關(guān)聯(lián)DDDS 1200中的類型字段1220表示DIDS 1202對(duì)應(yīng)于Dial組,則該過(guò)程簡(jiǎn)單地從塊2624返回到塊2620,以處理下一個(gè)頂層指針1250(若有的話)。
然而,如果在塊2630確定與由當(dāng)前頂層指針1250引用的DIDS 1202相關(guān)聯(lián)的DIPF具有假值,并且關(guān)聯(lián)DIVS為空,則壓縮工具2504可從芯片HW數(shù)據(jù)庫(kù)2108中刪除DIDS 1202,因?yàn)閷?duì)應(yīng)的Dial實(shí)例都未被設(shè)置或讀取。從而,如塊2632所示,壓縮工具2504從芯片HW數(shù)據(jù)庫(kù)2108刪除該DIDS 1202,以及以被刪除的頂層DIDS 1202為首的Dial樹中的每個(gè)低層DIDS 1202(若有的話)。另外,壓縮工具2504從頂層指針數(shù)組1206刪除關(guān)聯(lián)頂層指針1250,并且將指向每個(gè)被刪除的DIDS 1202的實(shí)例指針1228設(shè)為空。然后,在塊2634確定被刪除DIDS 1202的父指針1233是否設(shè)為空。如果是,則該過(guò)程返回到已經(jīng)描述過(guò)的塊2620。另一方面,如果父指針不為空,則對(duì)應(yīng)于被刪除的DIDS 1202的頂層Dial實(shí)例屬于Dial組實(shí)例。由于頂層Dial實(shí)例從未被設(shè)置或讀取,因此每個(gè)這樣的頂層Dial實(shí)例可安全地從其各自的Dial組實(shí)例中被刪除。從而,如塊2636所示,壓縮工具2504從對(duì)應(yīng)于Dial組實(shí)例的DIDS 1202中刪除指向頂層Dial實(shí)例的被刪除DIDS 1202的輸出指針1238。如果從Dial組實(shí)例的DIDS 1202中刪除輸出指針1238去掉了Dial組的最后成員,則也從芯片HW數(shù)據(jù)庫(kù)2108中刪除對(duì)應(yīng)于Dial組實(shí)例的DIDS 1202。該過(guò)程繼續(xù),如果可能的話,從而瓦解Dial組的分層。在塊2636之后,該過(guò)程返回到已經(jīng)描述過(guò)的塊2620。
返回到塊2640,壓縮工具2504確定是否與由當(dāng)前頂層指針1250引用的DIDS 1202相關(guān)聯(lián)的DIPF具有假值,并且關(guān)聯(lián)DIVS包含單個(gè)值。如果否,則該過(guò)程返回到已經(jīng)描述過(guò)的塊2620。如果是,則在塊2642通過(guò)參考DIDS1202的父字段1232進(jìn)一步確定Dial實(shí)例是否屬于Dial組。如果是,則該過(guò)程最好返回到塊2620而不作進(jìn)一步處理,從而通知DIDS 1202將被保持。DIDS 1202最好被保持,因?yàn)樵O(shè)置Dial組的操作是極微小(atomic)的,并且如果在set_Dial_group()API調(diào)用中引用被刪除的Dial實(shí)例,則將失敗。響應(yīng)于在塊2642確定與由頂層指針1250引用的DIDS 1202相對(duì)應(yīng)的Dial實(shí)例不屬于Dial組,該過(guò)程進(jìn)入塊2644。
塊2644示出通過(guò)參考映射表1224(必要時(shí))沿著Dial樹向下傳播包含在DIVS中的單個(gè)Dial值,從而確定終止Dial樹的鎖存器的鎖存器值。然后,將在塊2644確定的鎖存器值置于初始掃描鏈映像2508內(nèi)通過(guò)參考芯片映射表2325而確定的掃描鏈位置中,如塊2646所示。因此,如塊2648所示,由當(dāng)前頂層指針1250引用的DIDS 1202、其低層Dial樹和頂層指針1250本身都從芯片HW數(shù)據(jù)庫(kù)2108中被刪除,如上面參照塊2632所述。另外,用來(lái)設(shè)置對(duì)應(yīng)于被刪除的DIDS 1202的頂層Dial實(shí)例的set_Dial()API調(diào)用從系統(tǒng)固件1930b中被刪除(典型地由編程人員),如塊2650所示。然后,該過(guò)程返回到已經(jīng)描述過(guò)的塊2620。
現(xiàn)在參照?qǐng)D26C,處理開始于頁(yè)連接符C,并且進(jìn)入塊2660,其示出處理循環(huán),其中處理Dial指針數(shù)組1208內(nèi)的所有Dial指針1252,以從芯片HW數(shù)據(jù)庫(kù)2108中消除映射表1224內(nèi)的任何多余DDDS 1200和任何多余條目。在Dial指針數(shù)組1208內(nèi)的所有Dial指針1252都被處理之后,該過(guò)程傳到下面描述的塊2690。然而,如果少于所有Dial指針1252被處理,則該過(guò)程從塊2660進(jìn)入塊2662,其示出選擇下一個(gè)Dial指針1252以作處理。
在選擇下一個(gè)Dial指針1252之后,壓縮工具2504在塊2664確定由當(dāng)前Dial指針1252引用的DDDS 1200的實(shí)例指針數(shù)組1226內(nèi)的所有實(shí)例指針1228是否為空。如果是,則整個(gè)DDDS 1200是多余的,并且從芯片HW數(shù)據(jù)庫(kù)2108中被刪除,如塊2666所示。在塊2666之后,該過(guò)程返回到已經(jīng)描述過(guò)的塊2660。
響應(yīng)于在塊2664確定由Dial指針1252引用的DDDS 1200內(nèi)的所有實(shí)例指針1228不為空,則在塊2670進(jìn)一步確定類型字段1220是否表示DDDS1200定義了IDial。如果是,則對(duì)映射表1224的優(yōu)化是不可能的,并且該過(guò)程返回到塊2660。如果壓縮工具2504在塊2670確定由當(dāng)前Dial指針1252引用的DDDS沒有定義IDial,則該過(guò)程進(jìn)入塊2672。塊2672示出與由實(shí)例指針1228引用的任何DIDS 1202相關(guān)聯(lián)的任何DIPF是否具有真值。如果是,則該條件表示由DDDS 1200定義的Dial的至少一個(gè)Dial實(shí)例已被讀取,因此需要完全映射表1224。因此,該過(guò)程返回到塊2660,而不執(zhí)行對(duì)映射表1224的任何優(yōu)化。
然而,如果壓縮工具2504在塊2672確定與由實(shí)例指針1228引用的DIDS1202相關(guān)聯(lián)的所有DIPF具有假值,則該過(guò)程從2672進(jìn)入塊2674、2676和2678所示的處理循環(huán)。該處理循環(huán)表示壓縮工具2504處理由當(dāng)前Dial指針1252引用的DDDS 1200的實(shí)例指針數(shù)組1226內(nèi)的每個(gè)實(shí)例指針1228,從而構(gòu)建包含對(duì)應(yīng)于DIDS 1202的Dial實(shí)例由系統(tǒng)固件1930設(shè)置的所有值的Dial值集合。如塊2678所示,從與每個(gè)DIDS 1202相關(guān)聯(lián)的DIVS獲得Dial值。在通過(guò)處理每個(gè)實(shí)例指針1228而構(gòu)建了Dial值集合之后,該過(guò)程從塊2674傳到塊2680。塊2680示出壓縮工具2504刪除由在Dial值集合內(nèi)沒有找到其Dial輸入值的當(dāng)前Dial指針1252引用的DDDS 1200的映射表1224中的每個(gè)條目。該過(guò)程沿著Dial樹向下繼續(xù),消除不用來(lái)生成Dial值集合的映射表?xiàng)l目。因此,通過(guò)刪除不需要的條目來(lái)優(yōu)化各個(gè)Dial的映射表1224。然后,該過(guò)程返回到塊2660。
響應(yīng)于在塊2660確定Dial指針數(shù)組1206內(nèi)的所有Dial指針1252都已經(jīng)被處理,壓縮工具2504在塊2690通過(guò)以指向提供完全實(shí)例名稱部分的“字典”的指針替代實(shí)例名稱字段1234內(nèi)的實(shí)例名稱的共同部分來(lái)執(zhí)行最后壓縮。本領(lǐng)域的技術(shù)人員所公知的該壓縮技術(shù)以指針替代實(shí)例名稱(或其部分),其中指針典型地顯著短于其所替代的實(shí)例名稱或?qū)嵗Q部分。作為將HW配置數(shù)據(jù)庫(kù)1932a裝載到服務(wù)處理器1920的易失性存儲(chǔ)器1928a中的過(guò)程中的步驟,這些指針則可在實(shí)例名稱字段1234內(nèi)被替代。在塊2690之后,壓縮工具2504在塊2692終止處理。
在根據(jù)圖26A-26C所示的方法、由壓縮工具2504壓縮了所有芯片HW數(shù)據(jù)庫(kù)2108之后,則可利用壓縮的芯片HW數(shù)據(jù)庫(kù)2108、通過(guò)簡(jiǎn)單構(gòu)造芯片指針數(shù)據(jù)結(jié)構(gòu)2320而構(gòu)造存儲(chǔ)在快閃ROM 1924內(nèi)的硬件配置數(shù)據(jù)庫(kù)1932a。應(yīng)當(dāng)注意的是,由壓縮工具2504實(shí)現(xiàn)的壓縮方法不是排他性的。HW配置API 1934b最好包括允許開發(fā)者刪除各個(gè)DIDS 1202、刪除映射表1224中的條目并且執(zhí)行類似于圖26A-26C所示的其他優(yōu)化的一套API。
在上述本發(fā)明的實(shí)施例中,已經(jīng)假定在邏輯上耦合于模擬配置鎖存器或硬件鎖存器的每個(gè)Dial(即LDial或IDial)可設(shè)置包含在模擬配置鎖存器或硬件鎖存器中的值。然而,實(shí)際上,經(jīng)常期望能夠讀取這樣的鎖存器,而不允許系統(tǒng)固件或模擬器設(shè)置(或改變)鎖存器值。
鑒于前面,本發(fā)明的優(yōu)選實(shí)施例支持在此稱作只讀Dial或RDial的附加類別的配置實(shí)體。最好存在對(duì)應(yīng)于上述每種Dial和Dial組類型的只讀配置實(shí)體,也就是,只讀LDial、CDial、IDial和Dial組。為易于理解起見,每個(gè)只讀配置實(shí)體在此通過(guò)在Dial或Dial組類型名稱(例如,LDial、CDial、IDial和Dial組)的開頭帶有表示配置實(shí)體為只讀的“R”來(lái)表示(例如,RLDial、RCDial、RIDial和RDial組)。
RDial和RDial組遵循多個(gè)規(guī)則集。第一,RDial和RDial組是只讀的,并且根據(jù)定義不能被模擬器或系統(tǒng)固件設(shè)置。因此,RDial和RDial組不能被分配缺省值。
第二,除了定義配置實(shí)體的關(guān)鍵字以“R”開頭之外,在配置指定語(yǔ)句內(nèi)定義RDial或RDial組的語(yǔ)法最好與上面對(duì)于對(duì)應(yīng)的非只讀配置實(shí)體所述的相同。例如,RLDial的示例性配置指定語(yǔ)句可以如下給出RLDial state_machine(state_vector(0..1),)={idle=>0b00;start=>0b01;wait=>0b10;end=>0b11};上面給出的示例性配置指定語(yǔ)句以關(guān)鍵字“RLDial”開始,其指定正被聲明的RDial的類型為RLDial,以及在本例中為“state_machine(狀態(tài)機(jī))”的RDial名稱。下一步,該配置指定語(yǔ)句列舉其狀態(tài)由RLDial讀取的信號(hào)名稱。在列舉信號(hào)標(biāo)識(shí)符之后,該配置指定語(yǔ)句包括列出RLDial的容許列舉“輸入”值(或設(shè)置)和每個(gè)列舉輸入值的對(duì)應(yīng)信號(hào)(即“輸出”)值的映射表。應(yīng)當(dāng)再次注意的是,為所有列舉值指定的信號(hào)狀態(tài)是唯一的,并且一起表示信號(hào)狀態(tài)的僅僅合法模式。
第三,RDial具有關(guān)于與Dial和RDial互連和對(duì)Dial和/或RDial進(jìn)行編組以形成RDial組的不同規(guī)則集。下面參照?qǐng)D27詳細(xì)闡述這些規(guī)則,其中圖27是示例性配置數(shù)據(jù)庫(kù)2700的一部分的圖示,其包括具有與模擬模型或硬件系統(tǒng)的鎖存器2760-2778的指定邏輯連接的Dial和RDial。
作為首要事情,RDial遵循對(duì)如上面關(guān)于對(duì)應(yīng)的Dial所述的、與其他RDial和鎖存器的互連的類似限制。也就是,在優(yōu)選實(shí)施例中,RDial或RLDial而非RCDial的輸出可直接耦合于鎖存器,并且RCDial而非RIDial或RLDial的輸出可連接到低層RDial的輸入。因此,例如,RCDial 2740具有連接到RCDial 2742的輸入的輸出,而RCDial 2742又具有兩個(gè)分別連接到RLDial2744和RIDial 2746的輸入的輸出。RLDial 2744和RIDial 2746具有分別連接到鎖存器2770和2772的輸出。
另外,RCDial可具有連接到任何類型的Dial的輸入的輸出,但是沒有Dial被允許具有連接到任何RDial的輸入的輸出。例如,RCDial 2740具有耦合于CDial 2724的輸入的輸出。雖然在圖27中未顯式示出,但是應(yīng)當(dāng)注意的是,RDial可具有連接到相同子樹的多個(gè)不同層上的RDial和/或Dial的輸入的輸出。
為了防止沖突設(shè)置,上面定義的Dial和Dial組允許每個(gè)鎖存器、Dial和Dial組具有最多一個(gè)Dial或Dial組,作為在n路Dial樹中以分層方式居于其“上”的父。例如,CDial 2722和CDial 2724的每一個(gè)僅具有一個(gè)Dial父(即,CDial 2720),LDial 2726和IDial 2728的每一個(gè)僅具有一個(gè)Dial父(即,CDial 2724),并且LDial 2730和IDial 2732的每一個(gè)均具有一個(gè)Dial父(即CDial 2724)。然而,由于RDial和RDial組根據(jù)定義是只讀的,因此任何Dial或RDial可具有一個(gè)或多個(gè)RDial或RDial組父,而沒有在Dial設(shè)置之間沖突的任何可能性。也就是,在遵循其他規(guī)則的情況下并且倘若不形成閉環(huán),則RDia的輸出可連接到另一個(gè)RDial或Dial也與之連接的鎖存器、Dial或RDial。換句話說(shuō),每個(gè)鎖存器和Dial被允許具有至多一個(gè)Dial父,但是每個(gè)鎖存器、Dial和RDial可具有一個(gè)或多個(gè)RDial父,而不管該鎖存器或Dial是否還有Dial父。例如,在圖27的配置數(shù)據(jù)庫(kù)2700中,RCDial 2740和RCDial2750的每一個(gè)的輸出連接到RCDial 2742的輸入。類似地,CDial 2720和RCDial 2740各自具有連接到CDial 2724的輸入的輸出。另外,RLDial 2752和LDial 2754各自具有連接到鎖存器2776的輸出。
最后規(guī)則有關(guān)RDial組的構(gòu)造。如上面參照?qǐng)D11A所述,在優(yōu)選實(shí)施例中,Dial組只可包含頂層Dial和/或其他分層嵌套的Dial組。相反,RDial組可包含分層結(jié)構(gòu)的任何層上的RDial或Dial和/或Dial組或RDial組。允許該附加靈活性,因?yàn)镽Dial組如同RDial一樣從不被模擬器或系統(tǒng)固件設(shè)置。
結(jié)合前面根據(jù)上述規(guī)則所述的Dial和Dial組在配置數(shù)據(jù)庫(kù)內(nèi)實(shí)現(xiàn)RDial和RDial組允許構(gòu)造三種類別的樹。第一,如Dial樹2702和2708所示范的那樣,樹可包括Dial和鎖存器而非RDial。第二,RDial樹例如RDial樹2706可包括RDial和鎖存器而非Dial。第三,混合型樹可被構(gòu)造成包含一個(gè)或多個(gè)RDial、一個(gè)或多個(gè)Dial和一個(gè)或多個(gè)鎖存器,如混合型樹2704所示。
為了支持RDial和RDial組,對(duì)模擬配置數(shù)據(jù)庫(kù)和HW配置數(shù)據(jù)庫(kù)進(jìn)行一些修改。首先,增加每個(gè)DDDS 1200內(nèi)類型字段1220的值集合,以包括標(biāo)識(shí)RDial組和RDial的附加類型的附加值。例如,可以向該值集合增加RL、RC、RI和RG值,以分別標(biāo)識(shí)對(duì)應(yīng)于RLDial、RCDial、RIDial和RDial組的DDDS 1200。增加這些新值確保set_Dial()或set_Dial_group()API調(diào)用將不試圖設(shè)置RDial或RDial組,其中set_Dial()或set_Dial_group()API調(diào)用最好在試圖設(shè)置任何實(shí)例之前測(cè)試關(guān)聯(lián)DDDS 1200的類型字段1220。
另外,如圖28A所示,展開每個(gè)DIDS 1202以包括只讀父字段2800,其包括零個(gè)或多個(gè)只讀父指針2801。每個(gè)非空只讀父指針2801定義由DIDS1202表示的實(shí)例的輸入與高層RDial的輸出之間的連接,或者在RDial組內(nèi)包括由DIDS 1202表示的實(shí)例。如上所述,除了Dial或Dial組父(若有的話)之外,由DIDS 1202表示的實(shí)例可具有多個(gè)RDial父和/或?qū)儆诙鄠€(gè)RDial組。
如圖28B所示,類似地?cái)U(kuò)大配置數(shù)據(jù)庫(kù)內(nèi)的鎖存器數(shù)據(jù)結(jié)構(gòu)(例如,HW配置數(shù)據(jù)庫(kù)的鎖存器數(shù)據(jù)結(jié)構(gòu)2230或模擬配置數(shù)據(jù)庫(kù)的鎖存器數(shù)據(jù)結(jié)構(gòu)1204),以包括只讀父字段2802,其包括一個(gè)或多個(gè)只讀父指針2803。每個(gè)非空只讀父指針2803定義由鎖存器數(shù)據(jù)結(jié)構(gòu)表示的鎖存器實(shí)例的輸入與RIDial或RLDial的輸出之間的連接。如上所述,在模擬中,鎖存器名稱字段1244(圖12)內(nèi)的鎖存器名稱最好參照由父指針1242表示的LDial或IDial的范圍來(lái)指定。如果父指針1242為空,其表示對(duì)應(yīng)于鎖存器數(shù)據(jù)結(jié)構(gòu)1204的配置鎖存器沒有Dial父,則最好參照與由只讀父字段2802內(nèi)的第一只讀父指針2803標(biāo)識(shí)的DIDS 1202相對(duì)應(yīng)的RLDial或RIDial的范圍來(lái)指定包含在鎖存器名稱字段1244內(nèi)的鎖存器名稱。
最后,頂層指針數(shù)組1206(圖12),雖然在結(jié)構(gòu)上沒有變化,但是在長(zhǎng)度上增加,以支持RDial和RDial組。具體地說(shuō),頂層指針數(shù)組1206包括指向每個(gè)頂層RDial組的DIDS 1202的頂層指針1250、包含在RDial組內(nèi)的每個(gè)頂層RDial(即,具有非空只讀父字段2800)、以及不包含在RDial組內(nèi)的每個(gè)頂層RDial(即,具有空只讀父字段2800)。
為了支持RDial和RDial組而對(duì)配置數(shù)據(jù)庫(kù)中的數(shù)據(jù)結(jié)構(gòu)的前述修改必然伴隨著對(duì)上面參照?qǐng)D13所述的將配置數(shù)據(jù)庫(kù)從非易失性存儲(chǔ)裝置裝載到易失性存儲(chǔ)裝置中并且對(duì)其進(jìn)行展開的方法的修改。圖29是根據(jù)本發(fā)明優(yōu)選實(shí)施例將包含RDial和/或RDial組的配置數(shù)據(jù)庫(kù)從非易失性存儲(chǔ)裝置裝載到易失性存儲(chǔ)器中的示例性方法的高層邏輯流程圖。如使用相同的附圖標(biāo)記所示,圖29所示的方法與上面參照?qǐng)D13所述的基本上類似,其中另有一些補(bǔ)充,以確保每個(gè)數(shù)據(jù)結(jié)構(gòu)僅被處理一次。
如撇號(hào)(’)所示,在塊1308’進(jìn)行對(duì)前述方法的第一修改。在圖13的方法中,塊1308表示確定由當(dāng)前頂層指針1250引用的DIDS 1202是否對(duì)應(yīng)于屬于Dial組的Dial或Dial組。圖29中的塊1308’向該確定增加進(jìn)一步的確定,即確定由當(dāng)前頂層指針1250引用的DIDS 1202是否對(duì)應(yīng)于屬于RDial組的Dial、RDial、Dial組或RDial組。如果任一確定獲得肯定響應(yīng),則如處理返回到塊1304所示,當(dāng)前頂層指針1250的處理終止,因?yàn)楫?dāng)處理Dial組或RDial組時(shí),將處理由當(dāng)前頂層指針1250引用的DIDS 1202。該確定確保頂層Dial和RDial的DIDS 1202僅被處理一次。
為了確保在將配置數(shù)據(jù)庫(kù)裝載到易失性存儲(chǔ)器中的過(guò)程期間低層數(shù)據(jù)結(jié)構(gòu)也僅被處理一次,在塊2900進(jìn)一步確定由當(dāng)前頂層指針1250引用的DIDS1202是否對(duì)應(yīng)于RDial或RDial組。如果否,也就是,如果以DIDS 1202為根的樹對(duì)應(yīng)于Dial或Dial組,則該樹中的“孩子”都不會(huì)是RDial或RDial組。從而,可以如前所述處理當(dāng)前DIDS 1202之下的子樹,如該過(guò)程從塊2900傳到塊1316所示。
然而,響應(yīng)于在塊2900確定由當(dāng)前頂層指針1250引用的DIDS 1202對(duì)應(yīng)于RDial或RDial組,該過(guò)程傳到塊2902和下面塊,其表示處理RDial或RDial組的子樹以確保配置數(shù)據(jù)庫(kù)中的每個(gè)數(shù)據(jù)結(jié)構(gòu)僅被處理一次。為了跟蹤哪些數(shù)據(jù)結(jié)構(gòu)已被處理,首先在塊2902,將當(dāng)前DIDS 1202標(biāo)記為已處理。然后,如塊2904所示,該過(guò)程進(jìn)入處理循環(huán),其中處理當(dāng)前頂層DIDS 1202的輸出指針數(shù)組1236內(nèi)的每個(gè)輸出指針1238。一旦所有輸出指針1238都被處理,則該過(guò)程退出處理循環(huán),并且返回到塊1304,其表示確定是否還有任何另外的頂層指針要被處理。
如果在塊2904確定不是所有輸出指針1238都已經(jīng)被處理,則在塊2906選擇輸出指針數(shù)組1236內(nèi)的下一個(gè)輸出指針1238以作處理。然后,該過(guò)程進(jìn)入塊2910和2912,其分別示出確定所選輸出指針1238是否指向?qū)?yīng)于Dial或Dial組的DIDS 1202,或者由輸出指針引用的DIDS 1202是否是已被標(biāo)記為先前處理過(guò)的RDial或RDial組。如果在塊2910獲得肯定結(jié)果,則已經(jīng)定位了RDial或RDial組與Dial或Dial組之間的接口。由于當(dāng)選擇另一個(gè)頂層指針1250以作處理時(shí)將處理以該Dial或Dial組為首的子樹,因此該子樹的處理終止,并且該過(guò)程返回到塊2904。子樹的處理類似地響應(yīng)于在塊2912確定由當(dāng)前輸出指針1238(對(duì)應(yīng)于RDial或RDial組)引用的DIDS 1202被標(biāo)記為先前處理過(guò)而終止。
另一方面,如果塊2910和2912所示的確定產(chǎn)生否定結(jié)果,則在塊2914標(biāo)記并處理由當(dāng)前輸出指針1238引用的DIDS 1202或鎖存器數(shù)據(jù)結(jié)構(gòu)1204。在塊2914執(zhí)行的處理與塊1310、1312、1314和1316所示和上面所述的相同。如塊2914進(jìn)一步所示,遵循塊2912和2914所示的兩個(gè)條件,類似地標(biāo)記并處理直到且包括終止子樹的鎖存器的子樹中的每個(gè)低層數(shù)據(jù)結(jié)構(gòu)。也就是,如果檢測(cè)到與Dial或Dial組的接口,或者如果檢測(cè)到已被標(biāo)記的數(shù)據(jù)結(jié)構(gòu)(例如,對(duì)應(yīng)于RDial或RDial組的鎖存器數(shù)據(jù)結(jié)構(gòu)1204或DIDS 1202),則任何子樹的處理中止。在塊2914之后,該過(guò)程返回到已經(jīng)描述過(guò)的塊2904。
RDial和RDial組的實(shí)現(xiàn)也需要在針對(duì)數(shù)字設(shè)計(jì)的模擬和硬件實(shí)現(xiàn)讀取Dial、Dial組、RDial和RDial組的方式上進(jìn)行一些調(diào)整。具體地說(shuō),當(dāng)例如在塊1620(圖16A)和1660(圖16B)遍歷樹、以創(chuàng)建read_Dial()或read_Dial_group()API調(diào)用最終所針對(duì)的感興趣鎖存器集合時(shí),最好記錄或標(biāo)記被遍歷以創(chuàng)建鎖存器集合的“分支”(即,對(duì)應(yīng)于Dial或RDial的DIDS 1202)。以這種方式,當(dāng)例如如塊1624(圖16A)和1664(圖16B)所示,沿著“樹”向上傳播鎖存器集合中鎖存器的鎖存器值以獲得Dial和RDial設(shè)置時(shí),從鎖存器數(shù)據(jù)結(jié)構(gòu)1204向上遍歷正確的分支,以獲得感興趣的Dial或RDial設(shè)置。換句話說(shuō),由于除了單個(gè)Dial父之外,Dial或RDial還可具有一個(gè)或多個(gè)RDial父(若有的話),因此必須記錄或標(biāo)記向下遍歷以獲得鎖存器值的分支的父指針,以確保向上遍歷相同分支以獲得期望的Dial或RDial設(shè)置。
最好,對(duì)圖26A-26C所示的壓縮例程也進(jìn)行調(diào)整。在所述實(shí)施例中,圖26B的塊2632示出刪除Dial使用信息2500(繼而DIPF)表示其不被設(shè)置或讀取的頂層DIDS 1202的整個(gè)Dial樹。在實(shí)現(xiàn)如圖27所示允許樹的向上分支的RDial和RDial組的情況下,如果修改該步驟以保持也屬于被讀取的RDial實(shí)例的子樹的任何低層DIDS 1202,則是優(yōu)選的。在該修改中,在刪除頂層DIDS 1202之后,測(cè)試被刪除DIDS 1202的子樹中每個(gè)低層DIDS 1202的DIPF,以確定其是否具有真值,其表示低層DIDS 1202也屬于被讀取的樹。如果否,則也可刪除低層DIDS 1202,并且刪除過(guò)程沿著子樹向下繼續(xù)。然而,如果定位了具有設(shè)為真的DIPF的低層DIDS 1202,則不刪除那個(gè)低層DIDS 1202及其子樹。然而,其父指針1233設(shè)為空,以反映由父指針1233引用的父DIDS 1202的刪除。
當(dāng)在實(shí)驗(yàn)環(huán)境中或者響應(yīng)所實(shí)施硬件系統(tǒng)的故障而調(diào)試和測(cè)試硬件數(shù)字設(shè)計(jì)時(shí),分析故障以確定其原因是關(guān)鍵任務(wù)。傳統(tǒng)地,為了幫助確定故障原因,獲得硬件數(shù)字系統(tǒng)內(nèi)所有測(cè)試掃描鏈的掃描轉(zhuǎn)儲(chǔ)(dump)。然后,分析掃描鏈映像以確定故障原因。經(jīng)常地,手工選擇特定掃描鏈比特,并將其輸入到數(shù)字系統(tǒng)的模擬模型中,以試圖在模擬中再現(xiàn)故障。硬件故障的模擬使得能夠改善信號(hào)可見性和提高模擬器的單步調(diào)試能力,以幫助確定故障原因。
該傳統(tǒng)故障分析是繁瑣且易于出錯(cuò)的,因?yàn)橛脩舯仨毷紫仍噲D確定由掃描轉(zhuǎn)儲(chǔ)提供的“比特海洋”中的哪些比特是重要的,以移植(port)到模擬系統(tǒng)從而重建錯(cuò)誤狀態(tài)。然后,用戶必須參考有可能出錯(cuò)的紙件文檔人工瀏覽掃描轉(zhuǎn)儲(chǔ),以便確定感興趣的比特值。最后,用戶必須對(duì)RTX或其他軟件程序進(jìn)行編程,以向模擬模型的鎖存器裝載適當(dāng)?shù)谋忍刂怠?br> 本發(fā)明通過(guò)支持上述配置指定語(yǔ)言以及硬件和模擬配置數(shù)據(jù)庫(kù)的特性而改進(jìn)該現(xiàn)有技術(shù)的分析技術(shù)?,F(xiàn)在參照?qǐng)D30,其示出了用于利用模擬模型分析硬件系統(tǒng)的選定狀態(tài)、特別是硬件系統(tǒng)的故障狀態(tài)的示例性過(guò)程的高層邏輯流程圖。如圖所示,該過(guò)程開始于運(yùn)行芯片分析器工具3004,其最好包括在計(jì)算機(jī)系統(tǒng)如圖1的數(shù)據(jù)處理系統(tǒng)6上執(zhí)行的軟件。芯片分析器工具3004接收測(cè)試掃描鏈映像3000作為輸入,其中測(cè)試掃描鏈映像3000一起表示系統(tǒng)故障狀態(tài),并且各自包含硬件數(shù)字設(shè)計(jì)(例如,測(cè)試下的服務(wù)器計(jì)算機(jī)系統(tǒng))內(nèi)各個(gè)集成電路芯片的所有鎖存器的鎖存器值。另外,芯片分析器工具3004接收硬件數(shù)字設(shè)計(jì)內(nèi)每種集成電路芯片類型的逐芯片類型芯片HW數(shù)據(jù)庫(kù)2108。最后,向芯片分析器工具3004提供選定Dial列表3002,其標(biāo)識(shí)每個(gè)芯片HW數(shù)據(jù)庫(kù)2108內(nèi)的哪些Dial被認(rèn)為是相關(guān)于在模擬中近似硬件故障狀態(tài)。
芯片分析器工具3004參考芯片HW數(shù)據(jù)庫(kù)2108處理掃描鏈映像3000和選定Dial列表3002,以生成硬件數(shù)字設(shè)計(jì)中每個(gè)集成電路芯片的相應(yīng)芯片配置報(bào)告3006和模擬設(shè)置文件3008。每個(gè)芯片配置報(bào)告3006包括與硬件數(shù)字設(shè)計(jì)中的特定集成電路相關(guān)聯(lián)的所有Dial實(shí)例的可供人閱讀和可打印清單,以及處于故障點(diǎn)的每個(gè)Dial實(shí)例的設(shè)置(如果合法值可用)。對(duì)于合法值不可用的Dial實(shí)例,報(bào)告底層鎖存器值。每個(gè)模擬設(shè)置文件3008是指定與對(duì)應(yīng)的集成電路芯片相關(guān)聯(lián)的選定Dial列表3002中所標(biāo)識(shí)的每個(gè)Dial的設(shè)置(如果合法值可用)的可機(jī)讀文件。如上所述,RTX 1420(圖14)利用模擬設(shè)置文件3008,以將硬件數(shù)字系統(tǒng)的模擬模型1400配置成近似硬件數(shù)字設(shè)計(jì)的故障狀態(tài)的狀態(tài)。
現(xiàn)在參照?qǐng)D31,示出了根據(jù)本發(fā)明的圖30的芯片分析器工具3004生成用來(lái)分析硬件故障的芯片配置報(bào)告3006和模擬設(shè)置文件3008的說(shuō)明性方法的高層邏輯流程圖。如圖所示,該過(guò)程開始于塊3100,然后進(jìn)入塊3102,其示出芯片分析器工具3004確定硬件數(shù)字設(shè)計(jì)內(nèi)每個(gè)集成電路芯片的掃描鏈映像3000是否已經(jīng)都被處理。如果所有集成電路芯片的掃描鏈映像3000都已經(jīng)被處理,則該過(guò)程終止于塊3130。然而,如果少于所有掃描鏈映像3000已經(jīng)被處理,則在塊3104選擇要處理的下一個(gè)集成電路芯片的掃描鏈映像3000和芯片HW數(shù)據(jù)庫(kù)2108。
然后,圖31所示的過(guò)程在塊3106-3110進(jìn)入處理循環(huán),其中參考芯片HW數(shù)據(jù)庫(kù)2108的鎖存器指針數(shù)組1210中的鎖存器指針1254,處理從當(dāng)前集成電路芯片掃描的感興趣的每個(gè)鎖存器值。具體地說(shuō),芯片分析器工具3004在塊3106確定所有鎖存器指針1254是否都已經(jīng)被處理。如果是,則該過(guò)程從塊3106傳到下面描述的塊3120。然而,如果不是所有鎖存器指針1254都已經(jīng)被處理,則在塊3108選擇鎖存器指針數(shù)組1210內(nèi)的下一個(gè)鎖存器指針1254以作處理。下一步,在塊3110,芯片分析器工具3004利用包含在由當(dāng)前鎖存器指針1254引用的鎖存器數(shù)據(jù)結(jié)構(gòu)2230的方法名稱字段2234a(圖23B)中的測(cè)試掃描環(huán)標(biāo)識(shí)符和偏移值對(duì)來(lái)在掃描環(huán)映像3000內(nèi)定位對(duì)應(yīng)于鎖存器數(shù)據(jù)結(jié)構(gòu)2230的硬件鎖存器的鎖存器值。然后,將該鎖存器值存儲(chǔ)在鎖存器值字段2324的適當(dāng)條目?jī)?nèi),其是參考芯片映射表2325內(nèi)的當(dāng)前集成電路芯片的chipID的位置而確定的。然后,該過(guò)程返回到塊3106。
響應(yīng)于在塊3106確定當(dāng)前芯片HW數(shù)據(jù)庫(kù)2108的鎖存器指針數(shù)組1210內(nèi)的所有鎖存器指針1254都已經(jīng)被處理,該過(guò)程進(jìn)入塊3120。塊3120示出芯片分析器工具3004參考映射表1224、在芯片HW數(shù)據(jù)庫(kù)2108內(nèi)沿著DIDS樹的所有分支向上傳播包含在每個(gè)鎖存器值字段2324中的鎖存器值的集合,以便獲得每個(gè)Dial和RDial的設(shè)置(即輸入值),如果可能的話。假定鎖存器值字段2324內(nèi)的鎖存器值對(duì)應(yīng)于硬件故障狀態(tài),則經(jīng)常發(fā)生的情況是,試圖沿著樹向上傳播至少一些鎖存器值將導(dǎo)致不處于在Dial或RDial實(shí)例的映射表1224內(nèi)指定的合法輸出值中的至少一個(gè)“輸出”值。在這種情況下,Dial或RDial實(shí)例(以及相同樹中位于其上的任何RDial或Dial)被標(biāo)志為具有非法值。該非法值經(jīng)常暗示硬件故障的原因。
應(yīng)當(dāng)注意的是,從鎖存器值獲得Dial和RDial值的能力依賴于本發(fā)明所引入的配置指定語(yǔ)言的可逆性。也就是,沒有Dial(和RDial)輸入和輸出之間的一一映射,就不能從鎖存器值明確地確定Dial(和RDial)設(shè)置,如塊3120所示。
在塊3120之后,該過(guò)程進(jìn)入塊3122,其示出芯片分析器工具3004創(chuàng)建當(dāng)前集成電路芯片的芯片配置報(bào)告3006。如上所述,芯片配置報(bào)告3006是供人閱讀的文件,其包含當(dāng)前芯片HW數(shù)據(jù)庫(kù)2108內(nèi)所有Dial和RDial的清單以及在塊3120確定的其對(duì)應(yīng)設(shè)置(若有的話)。在芯片配置報(bào)告3006中標(biāo)志具有非法值的Dial和RDial實(shí)例,并且列出底層鎖存器的鎖存器值以幫助分析。如塊3124所示,芯片分析工具3004還創(chuàng)建當(dāng)前集成電路的RTX兼容模擬設(shè)置文件3008。模擬設(shè)置文件3008最好包括僅在選定Dial列表3002內(nèi)指定的Dial實(shí)例的Dial設(shè)置,并且如果在選定Dial列表3002中指定的Dial實(shí)例具有非法值,則包括由該Dial控制的鎖存器集合中的底層鎖存器的鎖存器值。然后,可由在模擬環(huán)境中運(yùn)行的RTX 1420將這些Dial實(shí)例設(shè)置和鎖存器值自動(dòng)地施加于模擬模型1400,如下所述。
應(yīng)當(dāng)理解的是,由于由Dial控制的鎖存器數(shù)典型地僅是集成電路中鎖存器總數(shù)的一小部分,因此數(shù)字系統(tǒng)的設(shè)計(jì)者通過(guò)使用本發(fā)明的配置指定語(yǔ)言將Dial與特定配置鎖存器相關(guān)聯(lián),已經(jīng)大大減少了在重建系統(tǒng)故障狀態(tài)中所要考慮的鎖存器值的數(shù)目,并且標(biāo)識(shí)了為再現(xiàn)硬件故障狀態(tài)而最可能需要的那些鎖存器。選定Dial列表3002通過(guò)指定感興趣的特定用戶所選Dial實(shí)例(而非RDial實(shí)例)而進(jìn)一步減少了要移植回到模擬模型1400中的硬件狀態(tài)信息的量。
在塊3124之后,圖31所示的過(guò)程返回到塊3102以處理硬件數(shù)字設(shè)計(jì)中的下一個(gè)集成電路芯片(若有的話)。在硬件數(shù)字設(shè)計(jì)內(nèi)的所有集成電路芯片都被處理之后,該過(guò)程終止于塊3130。
再次參照?qǐng)D30,在根據(jù)圖31的過(guò)程為硬件數(shù)字設(shè)計(jì)內(nèi)的每個(gè)集成電路芯片創(chuàng)建了相應(yīng)的模擬設(shè)置文件3008之后,通過(guò)執(zhí)行RTX 1420,在數(shù)字設(shè)計(jì)的模擬模型1400內(nèi)近似硬件故障狀態(tài)。另外,應(yīng)當(dāng)注意的是,由于數(shù)字設(shè)計(jì)根據(jù)定義將不能從故障狀態(tài)正確工作,因此通常不期望在模擬中再現(xiàn)精確的硬件故障狀態(tài)。
為了在模擬中近似硬件故障狀態(tài),RTX 1420首先發(fā)出對(duì)由模擬器1410提供的API的標(biāo)準(zhǔn)API調(diào)用,以便執(zhí)行用來(lái)初始化模擬模型1400以進(jìn)行模擬的正常初始化過(guò)程。下一步,RTX 1420可以可選地根據(jù)用戶提供的定制初始化修改文件3010,對(duì)模擬模型1400的配置單獨(dú)進(jìn)行用戶指定的定制。例如,可以進(jìn)行這些定制修改,從而調(diào)整參數(shù)以暴露特定故障模式,或者提高特定故障類型的可見性。最后,RTX 1420施加包含在模擬設(shè)置文件3008中的Dial實(shí)例設(shè)置和鎖存器值。如上面參照?qǐng)D14和17A詳細(xì)所述,RTX 1420通過(guò)對(duì)配置API 1406的set_Dial()API調(diào)用來(lái)設(shè)置Dial實(shí)例,其在模擬配置數(shù)據(jù)庫(kù)1404中反映Dial實(shí)例設(shè)置之后,調(diào)用PUTFAC()API 1414,以在模擬模型1400中設(shè)置對(duì)應(yīng)的鎖存器值。RTX 1420類似地利用API調(diào)用,以采用包含在對(duì)應(yīng)于非法Dial值的模擬設(shè)置文件3008內(nèi)的鎖存器值,來(lái)設(shè)置模擬模型1400的配置鎖存器和配置數(shù)據(jù)庫(kù)1404的鎖存器值字段1246(圖12)。在模擬模型1400被這樣配置的情況下,RTX 1420引導(dǎo)由模擬器1410對(duì)模擬模型1400執(zhí)行一個(gè)或多個(gè)測(cè)試?yán)?,以便試圖在模擬中再現(xiàn)硬件故障狀態(tài)。
盡管已經(jīng)參照其優(yōu)選實(shí)施例具體描述了本發(fā)明,但本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,在不脫離本發(fā)明的精神和范圍的情況下,可以對(duì)其進(jìn)行形式和細(xì)節(jié)的各種修改。例如,應(yīng)當(dāng)理解,在此公開的概念可被擴(kuò)展或修改成應(yīng)用于具有與在此公開的特定示例性實(shí)施例不同的規(guī)則的其他類型的配置實(shí)體。另外,雖然本發(fā)明的各方面已經(jīng)關(guān)于執(zhí)行引導(dǎo)本發(fā)明的功能的軟件的計(jì)算機(jī)系統(tǒng)做出了描述,但是應(yīng)當(dāng)理解,本發(fā)明可以可選地被實(shí)現(xiàn)為與數(shù)據(jù)處理系統(tǒng)一起使用的程序產(chǎn)品。定義本發(fā)明的功能的程序可通過(guò)各種信號(hào)承載介質(zhì)傳遞給數(shù)據(jù)處理系統(tǒng),其中這些信號(hào)承載介質(zhì)包括但不限于不可重寫存儲(chǔ)介質(zhì)(例如,CD-ROM)、可重寫存儲(chǔ)介質(zhì)(例如,軟盤或硬盤驅(qū)動(dòng)器)以及通信介質(zhì)如數(shù)字和模擬網(wǎng)絡(luò)。因此,應(yīng)當(dāng)理解,該信號(hào)承載介質(zhì)在承載或編碼引導(dǎo)本發(fā)明功能的計(jì)算機(jī)可讀指令時(shí)表示本發(fā)明的可選實(shí)施例。
權(quán)利要求
1.一種指定可配置數(shù)字系統(tǒng)的方法,所述方法包括在至少一個(gè)硬件定義語(yǔ)言(HDL)文件中,指定至少一個(gè)包含數(shù)字系統(tǒng)的功能部分的設(shè)計(jì)實(shí)體,所述至少一個(gè)設(shè)計(jì)實(shí)體在邏輯上包含具有多個(gè)不同可能配置值的配置鎖存器,所述多個(gè)不同可能配置值各自對(duì)應(yīng)于所述數(shù)字系統(tǒng)的所述功能部分的不同配置;以及采用所述至少一個(gè)HDL文件中的語(yǔ)句,將Dial實(shí)體與所述至少一個(gè)設(shè)計(jì)實(shí)體相關(guān)聯(lián),所述Dial具有Dial輸入、Dial輸出、映射表、多個(gè)可能輸入值中的缺省輸入值、以及階段ID,所述映射表表示可在所述Dial輸入上接收的多個(gè)可能輸入值的每一個(gè)與所述Dial輸出的各自對(duì)應(yīng)輸出值之間的映射,其中所述輸出值控制所述多個(gè)不同可能配置值中的哪一個(gè)被裝載于所述配置鎖存器中,并且所述階段ID表示要施加缺省輸入值的階段。
2.如權(quán)利要求1所述的方法,其中所述Dial實(shí)體包括控制Dial實(shí)體;所述語(yǔ)句包括第一語(yǔ)句;并且所述方法還包括在所述至少一個(gè)HDL文件內(nèi)的至少第二語(yǔ)句中指定Dial樹,所述Dial樹包含多個(gè)分層耦合的Dial實(shí)體,其中包括所述控制Dial,其中所述Dial樹中的最低層Dial實(shí)體直接控制所述多個(gè)不同可能配置值中的哪一個(gè)被裝載于所述配置鎖存器中。
3.如權(quán)利要求1所述的方法,其中所述關(guān)聯(lián)Dial實(shí)體包括在指定所述Dial的配置指定語(yǔ)句中,將Dial實(shí)體與所述至少一個(gè)設(shè)計(jì)實(shí)體相關(guān)聯(lián)。
4.如權(quán)利要求1所述的方法,其中所述關(guān)聯(lián)Dial實(shí)體包括采用配置文件引用語(yǔ)句將Dial實(shí)體與所述至少一個(gè)設(shè)計(jì)實(shí)體相關(guān)聯(lián),所述配置文件引用語(yǔ)句引用包含指定所述Dial的配置指定語(yǔ)句的獨(dú)立配置文件。
5.如權(quán)利要求1所述的方法,還包括編譯所述HDL文件,以生成所述數(shù)字系統(tǒng)的模擬模型,所述模擬模型包括所述設(shè)計(jì)實(shí)體和所述配置鎖存器。
6.如權(quán)利要求5所述的方法,所述編譯還包括生成包括定義所述Dial實(shí)體的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)的配置數(shù)據(jù)庫(kù)。
7.如權(quán)利要求6所述的方法,還包括在利用所述模擬模型模擬所述數(shù)字系統(tǒng)的期間,根據(jù)階段ID將所述缺省輸入值施加于所述Dial實(shí)體的一個(gè)或多個(gè)選定實(shí)例,以便確定所述配置鎖存器的鎖存器值;以及向所述模擬模型中的所述配置鎖存器裝載所述鎖存器值。
8.一種數(shù)據(jù)處理系統(tǒng),包括處理資源;以及包括設(shè)計(jì)軟件的數(shù)據(jù)存儲(chǔ)裝置,所述設(shè)計(jì)軟件包括用于在至少一個(gè)硬件定義語(yǔ)言(HDL)文件中指定至少一個(gè)包含數(shù)字系統(tǒng)的功能部分的設(shè)計(jì)實(shí)體的裝置,所述至少一個(gè)設(shè)計(jì)實(shí)體在邏輯上包含具有多個(gè)不同可能配置值的配置鎖存器,所述多個(gè)不同可能配置值各自對(duì)應(yīng)于所述數(shù)字系統(tǒng)的所述功能部分的不同配置;以及用于采用所述至少一個(gè)HDL文件中的語(yǔ)句將Dial實(shí)體與所述至少一個(gè)設(shè)計(jì)實(shí)體相關(guān)聯(lián)的裝置,所述Dial具有Dial輸入、Dial輸出、映射表、所述多個(gè)可能輸入值中的缺省輸入值、以及階段ID,所述映射表表示可在所述Dial輸入上接收的多個(gè)可能輸入值的每一個(gè)與所述Dial輸出的各自對(duì)應(yīng)輸出值之間的映射,其中所述輸出值控制所述多個(gè)不同可能配置值中的哪一個(gè)被裝載在所述配置鎖存器中,并且所述階段ID表示要施加缺省輸入值的階段。
9.如權(quán)利要求8所述的數(shù)據(jù)處理系統(tǒng),其中所述Dial實(shí)體包括控制Dial;所述語(yǔ)句包括第一語(yǔ)句;并且所述設(shè)計(jì)軟件還包括用于在所述至少一個(gè)HDL文件內(nèi)的至少第二語(yǔ)句中指定Dial樹的裝置,所述Dial樹包含多個(gè)分層耦合的Dial實(shí)體,該Dial實(shí)體包括所述控制Dial,其中所述Dial樹中的最低層Dial實(shí)體直接控制所述多個(gè)不同可能配置值中的哪一個(gè)被裝載在所述配置鎖存器中。
10.如權(quán)利要求8所述的數(shù)據(jù)處理系統(tǒng),其中所述用于關(guān)聯(lián)Dial實(shí)體的裝置包括在指定所述Dial的配置指定語(yǔ)句中,將Dial實(shí)體與所述至少一個(gè)設(shè)計(jì)實(shí)體相關(guān)聯(lián)。
11.如權(quán)利要求8所述的數(shù)據(jù)處理系統(tǒng),其中所述用于關(guān)聯(lián)Dial實(shí)體的裝置包括采用配置文件引用語(yǔ)句將Dial實(shí)體與所述至少一個(gè)設(shè)計(jì)實(shí)體相關(guān)聯(lián),所述配置文件引用語(yǔ)句引用包含指定所述Dial的配置指定語(yǔ)句的獨(dú)立配置文件。
12.如權(quán)利要求8所述的數(shù)據(jù)處理系統(tǒng),還包括用于編譯所述HDL文件、以生成所述數(shù)字系統(tǒng)的模擬模型的裝置,所述模擬模型包括所述設(shè)計(jì)實(shí)體和所述配置鎖存器。
13.如權(quán)利要求12所述的數(shù)據(jù)處理系統(tǒng),所述用于編譯的裝置還包括生成包括定義所述Dial實(shí)體的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)的配置數(shù)據(jù)庫(kù)。
14.如權(quán)利要求13所述的數(shù)據(jù)處理系統(tǒng),還包括用于在利用所述模擬模型模擬所述數(shù)字系統(tǒng)的期間、根據(jù)階段ID將所述缺省輸入值施加于所述Dial實(shí)體的一個(gè)或多個(gè)選定實(shí)例、以便確定所述配置鎖存器的鎖存器值的裝置;以及用于向所述模擬模型中的所述配置鎖存器裝載所述鎖存器值的裝置。
15.一種程序產(chǎn)品,包括計(jì)算機(jī)可用介質(zhì);以及所述計(jì)算機(jī)可用介質(zhì)內(nèi)的設(shè)計(jì)軟件,所述設(shè)計(jì)軟件包括用于在至少一個(gè)硬件定義語(yǔ)言(HDL)文件中指定至少一個(gè)包含數(shù)字系統(tǒng)的功能部分的設(shè)計(jì)實(shí)體的裝置,所述至少一個(gè)設(shè)計(jì)實(shí)體在邏輯上包含具有多個(gè)不同可能配置值的配置鎖存器,所述多個(gè)不同可能配置值各自對(duì)應(yīng)于所述數(shù)字系統(tǒng)的所述功能部分的不同配置;以及用于采用所述至少一個(gè)HDL文件中的語(yǔ)句將Dial實(shí)體與所述至少一個(gè)設(shè)計(jì)實(shí)體相關(guān)聯(lián)的裝置,所述Dial具有Dial輸入、Dial輸出、映射表、所述多個(gè)可能輸入值中的缺省輸入值、以及階段ID,所述映射表表示可在所述Dial輸入上接收的多個(gè)可能輸入值的每一個(gè)與所述Dial輸出的各自對(duì)應(yīng)輸出值之間的映射,其中所述輸出值控制所述多個(gè)不同可能配置值中的哪一個(gè)被裝載在所述配置鎖存器中,并且所述階段ID表示要施加缺省輸入值的階段。
16.如權(quán)利要求15所述的程序產(chǎn)品,其中所述Dial包括控制Dial;所述語(yǔ)句包括第一語(yǔ)句;并且所述設(shè)計(jì)軟件還包括用于在所述至少一個(gè)HDL文件內(nèi)的至少第二語(yǔ)句中指定Dial樹的裝置,所述Dial樹包含多個(gè)分層耦合的Dial,該Dial包括所述控制Dial,其中所述Dial樹中的最低層Dial直接控制所述多個(gè)不同可能配置值中的哪一個(gè)被裝載在所述配置鎖存器中。
17.如權(quán)利要求15所述的程序產(chǎn)品,其中所述用于關(guān)聯(lián)Dial實(shí)體的裝置包括在指定所述Dial的配置指定語(yǔ)句中,將Dial實(shí)體與所述至少一個(gè)設(shè)計(jì)實(shí)體相關(guān)聯(lián)。
18.如權(quán)利要求15所述的程序產(chǎn)品,其中所述用于關(guān)聯(lián)Dial實(shí)體的裝置包括采用配置文件引用語(yǔ)句將Dial實(shí)體與所述至少一個(gè)設(shè)計(jì)實(shí)體相關(guān)聯(lián),所述配置文件引用語(yǔ)句引用包含指定所述Dial的配置指定語(yǔ)句的獨(dú)立配置文件。
19.如權(quán)利要求15所述的程序產(chǎn)品,還包括用于編譯所述HDL文件以生成所述數(shù)字系統(tǒng)的模擬模型的裝置,所述模擬模型包括所述設(shè)計(jì)實(shí)體和所述配置鎖存器。
20.如權(quán)利要求19所述的程序產(chǎn)品,所述用于編譯的裝置還包括生成包括定義所述Dial實(shí)體的至少一個(gè)數(shù)據(jù)結(jié)構(gòu)的配置數(shù)據(jù)庫(kù)。
21.如權(quán)利要求20所述的程序產(chǎn)品,還包括用于在利用所述模擬模型模擬所述數(shù)字系統(tǒng)的期間、根據(jù)階段ID將所述缺省輸入值施加于所述Dial實(shí)體的一個(gè)或多個(gè)選定實(shí)例、以便確定所述配置鎖存器的鎖存器值的裝置;以及用于向所述模擬模型中的所述配置鎖存器裝載所述鎖存器值的裝置。
22.一種控制數(shù)字系統(tǒng)的操作的方法,該數(shù)字系統(tǒng)包含具有多個(gè)不同可能配置值的配置鎖存器,所述多個(gè)不同可能配置值各自對(duì)應(yīng)于所述數(shù)字系統(tǒng)的功能部分的不同配置,所述方法包括建立定義Dial實(shí)體的多個(gè)實(shí)例的配置數(shù)據(jù)庫(kù),其中Dial實(shí)體具有Dial輸入、Dial輸出、映射表,所述映射表表示可在所述Dial輸入上接收的多個(gè)可能輸入值的每一個(gè)與所述Dial輸出的各自對(duì)應(yīng)輸出值之間的映射,所述輸出值控制所述多個(gè)不同可能配置值中的哪一個(gè)被裝載在所述配置鎖存器中,其中所述多個(gè)實(shí)例的每一個(gè)具有所述多個(gè)可能輸入值中的各自缺省輸入值和各自的階段ID,其中所述階段ID表示要施加缺省輸入值的階段;以及響應(yīng)于指定一個(gè)或多個(gè)階段ID的命令,施加其階段ID匹配于由該命令指定的階段ID的至少一個(gè)實(shí)例的缺省輸入值;以及響應(yīng)于缺省輸入值的施加,通過(guò)參考Dial實(shí)體的映射表來(lái)獲得該實(shí)例的輸出值,并且采用對(duì)應(yīng)于該輸出值的配置值設(shè)置數(shù)字系統(tǒng)中的配置鎖存器。
23.如權(quán)利要求22所述的方法,其中所述數(shù)字系統(tǒng)包括硬件系統(tǒng)。
24.如權(quán)利要求22所述的方法,其中所述數(shù)字系統(tǒng)包括模擬硬件系統(tǒng)。
25.一種用于控制數(shù)字系統(tǒng)的操作的數(shù)據(jù)處理系統(tǒng),該數(shù)字系統(tǒng)包含具有多個(gè)不同可能配置值的配置鎖存器,所述多個(gè)不同可能配置值各自對(duì)應(yīng)于所述數(shù)字系統(tǒng)的功能部分的不同配置,所述數(shù)據(jù)處理系統(tǒng)包括定義Dial實(shí)體的多個(gè)實(shí)例的配置數(shù)據(jù)庫(kù),其中Dial實(shí)體具有Dial輸入、Dial輸出、映射表,所述映射表表示可在所述Dial輸入上接收的多個(gè)可能輸入值的每一個(gè)與所述Dial輸出的各自對(duì)應(yīng)輸出值之間的映射,所述輸出值控制所述多個(gè)不同可能配置值中的哪一個(gè)被裝載在所述配置鎖存器中,其中所述多個(gè)實(shí)例的每一個(gè)具有所述多個(gè)可能輸入值中的各自缺省輸入值和各自的階段ID,其中所述階段ID表示要施加缺省輸入值的階段;以及用于響應(yīng)指定一個(gè)或多個(gè)階段ID的命令,施加其階段ID匹配于由該命令指定的階段ID的至少一個(gè)實(shí)例的缺省輸入值的裝置;以及用于響應(yīng)缺省輸入值的施加,通過(guò)參考Dial實(shí)體的映射表獲得該實(shí)例的輸出值,并且采用對(duì)應(yīng)于該輸出值的配置值設(shè)置數(shù)字系統(tǒng)中的配置鎖存器的裝置。
26.如權(quán)利要求25所述的數(shù)據(jù)處理系統(tǒng),其中所述數(shù)字系統(tǒng)包括硬件系統(tǒng),并且其中所述用于設(shè)置配置鎖存器的裝置包括用于設(shè)置硬件系統(tǒng)中的配置鎖存器的裝置。
27.如權(quán)利要求25所述的數(shù)據(jù)處理系統(tǒng),其中所述數(shù)字系統(tǒng)包括模擬硬件系統(tǒng),并且其中所述用于設(shè)置配置鎖存器的裝置包括用于設(shè)置模擬硬件系統(tǒng)中的配置鎖存器的裝置。
28.一種用于控制數(shù)字系統(tǒng)的操作的程序產(chǎn)品,該數(shù)字系統(tǒng)包含具有多個(gè)不同可能配置值的配置鎖存器,所述多個(gè)不同可能配置值各自對(duì)應(yīng)于所述數(shù)字系統(tǒng)的功能部分的不同配置,所述程序產(chǎn)品包括計(jì)算機(jī)可用介質(zhì),包括定義Dial實(shí)體的多個(gè)實(shí)例的配置數(shù)據(jù)庫(kù),其中Dial實(shí)體具有Dial輸入、Dial輸出、映射表,所述映射表表示可在所述Dial輸入上接收的多個(gè)可能輸入值的每一個(gè)與所述Dial輸出的各自對(duì)應(yīng)輸出值之間的映射,所述輸出值控制所述多個(gè)不同可能配置值中的哪一個(gè)被裝載在所述配置鎖存器中,其中所述多個(gè)實(shí)例的每一個(gè)具有所述多個(gè)可能輸入值中的各自缺省輸入值和各自的階段ID,其中所述階段ID表示要施加缺省輸入值的階段;以及用于響應(yīng)指定一個(gè)或多個(gè)階段ID的命令,施加其階段ID匹配于由該命令指定的階段ID的至少一個(gè)實(shí)例的缺省輸入值的裝置;以及用于響應(yīng)缺省輸入值的施加,通過(guò)參考Dial實(shí)體的映射表獲得該實(shí)例的輸出值,并且采用對(duì)應(yīng)于該輸出值的配置值設(shè)置數(shù)字系統(tǒng)中的配置鎖存器的裝置。
29.如權(quán)利要求28所述的程序產(chǎn)品,其中所述數(shù)字系統(tǒng)包括硬件系統(tǒng),并且其中所述用于設(shè)置配置鎖存器的裝置包括用于設(shè)置硬件系統(tǒng)中的配置鎖存器的裝置。
30.如權(quán)利要求28所述的數(shù)據(jù)處理系統(tǒng),其中所述數(shù)字系統(tǒng)包括模擬硬件系統(tǒng),并且其中所述用于設(shè)置配置鎖存器的裝置包括用于設(shè)置模擬硬件系統(tǒng)中的配置鎖存器的裝置。
全文摘要
在至少一個(gè)硬件定義語(yǔ)言(HDL)文件中,指定至少一個(gè)包含數(shù)字系統(tǒng)的功能部分的設(shè)計(jì)實(shí)體。設(shè)計(jì)實(shí)體在邏輯上包含具有多個(gè)不同可能配置值的配置鎖存器,其中每個(gè)不同可能配置值各自對(duì)應(yīng)于數(shù)字系統(tǒng)的功能部分的不同配置。采用HDL文件中的語(yǔ)句,將Dial實(shí)體與至少一個(gè)設(shè)計(jì)實(shí)體相關(guān)聯(lián)。Dial具有Dial輸入、Dial輸出、映射表、階段ID和多個(gè)可能輸入值中的缺省輸入值,其中映射表表示可在Dial輸入上接收的多個(gè)可能輸入值的每一個(gè)與Dial輸出的各自對(duì)應(yīng)輸出值之間的映射。Dial實(shí)體的輸出值控制不同可能配置值中的哪一個(gè)被裝載在配置鎖存器中,并且階段ID表示要施加缺省輸入值的階段。
文檔編號(hào)G06F17/50GK1637746SQ20041008615
公開日2005年7月13日 申請(qǐng)日期2004年10月19日 優(yōu)先權(quán)日2003年12月31日
發(fā)明者沃爾夫?qū)ち_斯納, 德里克·E·威廉斯 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
吉木乃县| 嘉兴市| 藁城市| 应城市| 利川市| 乌鲁木齐县| 侯马市| 日照市| 济南市| 增城市| 彰化县| 桦南县| 陇西县| 夏河县| 澳门| 岑溪市| 新田县| 芜湖市| 江山市| 江西省| 阆中市| 鹤山市| 贵德县| 阿勒泰市| 光山县| 周至县| 图们市| 新乐市| 绥德县| 阿图什市| 同江市| 墨竹工卡县| 罗平县| 福清市| 抚远县| 德安县| 枣强县| 廊坊市| 清河县| 古交市| 饶河县|