專利名稱::管理集成電路設(shè)計的裝置和方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及半導(dǎo)體設(shè)計和集成電路的計算機自動化設(shè)計領(lǐng)域,特別是涉及一種管理系統(tǒng)設(shè)計中的配置、設(shè)計參數(shù)和功能性的方法以及一種可以由設(shè)計者控制的定制指令或其他設(shè)計元素的管理集成電路設(shè)計的裝置和方法。
背景技術(shù):
:目前已有若干種用于集成電路(integratedcircuit,IC)設(shè)計的計算機輔助設(shè)計(computeraideddesign,CAD)工具。此類計算機輔助或計算機自動化的IC設(shè)計工具中可包括具有綜合與優(yōu)化處理功能的模塊或程序。通常,綜合(synthesis)被定義為一種由高一級抽象層次向低一級抽象層次轉(zhuǎn)化的方法,可包括任何必要的各級抽象層次的綜合技術(shù)的組合。所謂“行為綜合”(behavioralsynthesis)是指一種設(shè)計工具,它將所需要的IC的行為(例如輸出、輸出和函數(shù))輸入一計算機程序,從而設(shè)計出能夠表現(xiàn)出所需要的行為的器件。這類工具與人工布線等人工設(shè)計方法相比而言,能夠使IC設(shè)計者在在非常短的時間內(nèi)設(shè)計出更為復(fù)雜的器件,比如具有上百萬個邏輯門的器件,而很少產(chǎn)生或根本沒有錯誤。不同抽象層次的綜合處理的例子包括體系結(jié)構(gòu)層次的綜合(architecturallevelsynthesis)和邏輯層次的綜合(logiclevelsynthesis),這兩種綜合都可應(yīng)用于IC設(shè)計過程中。體系結(jié)構(gòu)層次的綜合主要涉及電路的宏觀結(jié)構(gòu),采用功能塊的方式(包括與其相互連接和內(nèi)部功能相關(guān)的信息)。體系結(jié)構(gòu)層次的綜合包括寄存器傳送級(registertransferlevel,RTL)的綜合,可以包含多位元件如寄存器和算子。邏輯層次的綜合涉及門電路層次的設(shè)計。通過邏輯層次的綜合確定電路的微觀結(jié)構(gòu)并將邏輯模型轉(zhuǎn)化為實際的庫單元(librarycell)之間的內(nèi)部連接。邏輯層次的綜合的產(chǎn)物就是邏輯器件及其互相連接的連線表。目前市場上已經(jīng)有若干供貨商可以提供商業(yè)邏輯層次綜合器(所謂綜合“引擎”)。綜合過程通常是首先由設(shè)計者根據(jù)目標器件所要實現(xiàn)的功能編制出一套IC規(guī)范(specification)。然后利用硬件描述語言(hardwaredescriptionlanguage,HDL)將這些規(guī)范編碼。硬件描述語言包括位于紐約的IEEE提供的VHDL(VHSIC硬件描述語言)或位于加洲圣克拉拉的凱登斯設(shè)計系統(tǒng)公司(CadenceDesignSystems,Inc)提供的Verilog。IC規(guī)范規(guī)定IC所需要的輸入和輸出以及需要的功能,如可使用內(nèi)存的大小或時鐘脈沖速度。然后設(shè)計者通過HDL生成一個“連線表”(netlist),該連線表包括門電路及其連接線路的列表,是對所需IC的電路系統(tǒng)的描述。最終將設(shè)計方案編譯并制造出用于生產(chǎn)物理IC的掩模。圖1是現(xiàn)有技術(shù)中基于綜合法的IC設(shè)計和制造方法。另外可參考2001年11月27日授予Dangelo等人的名為《生成并驗證電子設(shè)計低層次描述的方法和系統(tǒng)》的美國專利6,324,678。該專利公開了一種從高層次描述和規(guī)范生成復(fù)雜數(shù)字器件的結(jié)構(gòu)描述的方法。該方法利用系統(tǒng)技術(shù)將原始的、高層次描述的意圖中所包含語義的一致性映射并執(zhí)行。設(shè)計活動實際上是一系列不同層次設(shè)計描述的轉(zhuǎn)化操作。獲取某一層次的指定含義(語義)和形式軟件操作(formalsoftwaremanipulations)并導(dǎo)出下一描述符合設(shè)計目標的硬件的更為具體的層次。該方法的主要特點在于獲取用戶的構(gòu)思、意圖、規(guī)范、描述、限制和權(quán)衡;體系結(jié)構(gòu)劃分;高層次的仿真假設(shè)分析;規(guī)模估計;定時估計;體系結(jié)構(gòu)權(quán)衡;有執(zhí)行估計的概念設(shè)計;時序收斂。遺憾的是,上述現(xiàn)有技術(shù)盡管十分適合于較簡單的器件和單一元件,但是對于自動化IC設(shè)計還存在若干局限,特別是當用于設(shè)計更為復(fù)雜的IC如CPU處理器時局限性就更大。問題的原因是要是,由于必需在設(shè)計和綜合之前事先將指令集確定,而不能在設(shè)計和綜合的過程中對指令集進行修改,從而大大減少在設(shè)計過程中和完成后能夠提供給設(shè)計者的靈活性和能力。這些問題在為用戶提供定制CPU設(shè)計時尤為突出,這些用戶需要將處理器集成到他們的系統(tǒng)集成電路設(shè)計中。特別是在綜合的過程中,由于不能夠考慮使用某些指令、函數(shù)或元件,就要求設(shè)計者試圖在設(shè)計中對這些元件進行“改形”,這樣常常會導(dǎo)致兼容性或其他方面的問題。這一缺陷還大大限制了對某些參數(shù)(如晶圓尺寸和時鐘脈沖速度)的設(shè)計優(yōu)化,因為設(shè)計結(jié)果必然是門數(shù)的上升,并且不具有針對所需體系結(jié)構(gòu)和體系結(jié)構(gòu)的定制指令。還有,上述現(xiàn)有技術(shù)不能對整個處理器進行HDL模型的自動匯編并仿真其操作。而具有這一能力會大大提高設(shè)計的效率和效果。針對上述提供用戶配置功能和增加可擴展性的問題,已經(jīng)提出了若干種解決方案。其中最引人注意的是由本申請的受讓人開發(fā)并銷售的“ARChitect”用戶可配置設(shè)計環(huán)境。它是第一個真正的用戶可配置交互式處理器設(shè)計環(huán)境。ARChitect配置工具具有“指向并點擊”的用戶界面,能夠幫助定制基礎(chǔ)處理器配置。開發(fā)人員可以通過菜單一步一步進入并選擇各種選項增加新指令、配置指令/數(shù)據(jù)高速緩存、選擇DSP擴展、增加暫存器、配置中斷、整合外圍設(shè)備,以及定制許多其他基礎(chǔ)處理器體系結(jié)構(gòu)的特性。ARChitect工具能夠顯示出用戶設(shè)計的框圖和程序員的模型,并向開發(fā)人員報告需要的門數(shù)。ARChitect工具可以為定制設(shè)計自動生成RTL文件、綜合腳本和HTML格式文件。ARChitect還與其他開發(fā)工具兼容,例如(1)MetaWareHighC/C++TMToolSuite,該工具提供HighC++編譯器、連接器、匯編器、效能評測器、和SeeCodeTM任務(wù)相關(guān)調(diào)試器,外加ARC處理器的指令集仿真器;(2)ARC信號可視化工具(SVT),該工具可以顯示信號處理算法生成的可視圖象,還可以大大提高帶有DSP擴展配置的ARC處理器上DSP軟件的開發(fā)和測試的速度;(3)CASSEIA(Cycle-AccurateSignalSimulatorwithExtensibleInstructionArchitecture)開發(fā)和驗證工具。2002年11月5授予Killian等人的名稱為《設(shè)計可配置處理器的自動化處理器生成系統(tǒng)及其方法》的美國專利6,477,683公開了另一種有關(guān)處理器設(shè)計的方法。該專利中描述了一種自動化處理器設(shè)計工具。該工具包括為開發(fā)目標指令集的可配置定義而使用一種標準化語言對用戶定制的處理器指令集擴展的描述;實現(xiàn)該指令集所必需的電路系統(tǒng)的HDL描述;開發(fā)工具,如編譯器、匯編器、調(diào)試器和仿真器,其可以用于為該處理器開發(fā)應(yīng)用軟件并對其進行檢驗。處理器電路系統(tǒng)的實現(xiàn)可以對幾個不同方面的標準進行優(yōu)化,如面積、耗電、速度等。處理器配置被開發(fā)出來后,可以對其進行測試并將其輸入改進后的系統(tǒng),以便對處理器的實現(xiàn)進行反復(fù)優(yōu)化。類似地,2002年11月5日授予Killian等人的名稱為《為制造目標指令集的可配置定義而在微處理器設(shè)中加入標準語言中定義的復(fù)雜指令擴展、實現(xiàn)該指令集所必須的電路的HDL描述和該指令集的開發(fā)和驗證工具》的美國專利No.6,477,697中,也公開一種自動化處理器設(shè)計工具。該專利中公開的標準語言能夠處理修改處理器狀態(tài)或使用可配置處理器的指令集擴展。上述6,477,683號專利中提出的“描述”語言(TIE或Tensilica指令擴展)非常復(fù)雜,并且能夠定義的指令類型有限,TIE定義的指令不能夠?qū)S眉拇嫫髦袃Υ娴男畔⑦M行存取或修改,如處理器狀態(tài),這樣就大大限制了能夠可獲得指令的范圍,從而限制了可獲利的性能的提高?,F(xiàn)有技術(shù)中有許多所謂“硬件/軟件協(xié)同設(shè)計”的方法。舉例來說,已經(jīng)有人提出了很多種處理器的行為(例指令集)和結(jié)構(gòu)描述。例如,刊登在1998年9月的《技術(shù)報告》第98-29號中的“EXPRESSIONAnADLforSystemLevelDesignExploration”,1996年10月Zivoinovic等人發(fā)表的“LISA-MachineDescriptionLanguageandGenericMachineModelforHW/SWCo-Dsign”,以及Hadjiyiannis等人在1997年DAC發(fā)表的“ISDLAnInstructionSeDescriptionLanguageforRetargetability”。CadencenML語言也較引人注目;參見ACM1997年6月第303-306頁中Hartoog等人的“GenerationofSoftwareToolsFromProcessorDescriptionsforHardware/SoftwareCodesign”。Leupers等人在“DesignAutomationforEmbeddedSystems”1998年1月第1號第3卷中發(fā)表的“RetargetableCodeGenerationbasedonStructuralProcessorDescriptions”中描述了一種有些類似的協(xié)同設(shè)計方法,其中描述了MIMOLA/TREEMOLA設(shè)計語言和工具箱。MIMOLA與在很大程度上適合于精確周期(cycle-accurate)行為(指令)仿真和仿真的Expression、nML、LISA或ISDL相比,更接近于硬件描述語言(如VHDL)。1999年9月7日授予Fritz的名稱為《通過機器描述生成ISA仿真器和匯編器的生成方法》的美國專利No.5,949,993公開了一種生成用于軟件和硬件開發(fā)的軟件開發(fā)工具的方法。該發(fā)明通過對可編程電子器件如微處理器的硬件描述和語法描述進行處理,并生成一套對硬件和/或軟件開發(fā)人員非常有用的開發(fā)工具。這些工具包括,例如,仿真器、匯編器、解碼器、行為語義和屬性語法。但是,F(xiàn)ritz并沒有從為設(shè)計的硬件描述語言表示增加擴展和其他特性的角度明確提出用戶可配置性。Fritz的發(fā)明在本質(zhì)上是利用硬件描述模型(如VHDL模型)作為生成軟件工具的輸入。上述解決方案盡管各具特色,但對于用戶定制處理器的設(shè)計來說仍非最優(yōu)方案。特別是這些解決方案往往極其復(fù)雜并且需要“手工”定制,從而使其對于不同設(shè)計任務(wù)和目標的靈活性和適應(yīng)性大打折扣,特別是當這些設(shè)計任務(wù)被分配給兩個或以上的團體或個人時尤其如此。上述現(xiàn)有解決方案在操作上也受到很大限制,也就是說,為了使設(shè)計生成過程便于管理,作為基礎(chǔ)的設(shè)計在一開始就要受到限制,并且盡量將設(shè)計變量保持到最小。但是這樣做就會使設(shè)計者希望拓展與前述“受限制的”模式的設(shè)計空間時受到限制。還有,設(shè)計工具配置基本上是固定的,用戶不能針對其特定任務(wù)或項目改變或擴展設(shè)計工具配置?;谏鲜鲈?,需要提供一種對集成電路設(shè)計中的配置、設(shè)計參數(shù)和功能性進行管理的方法及相關(guān)裝置,并且可以由用戶以交互的形式改變集成電路設(shè)計中的配置,包括處理器和類似部件的指令集。特別是這種經(jīng)過改進的方法能夠讓用戶速度地選出需要的設(shè)計屬性(如擴展指令、緩沖配置等)并生成基于這些選擇的設(shè)計。對這些生成的設(shè)計可以通過交互的方式以最短的時間和最小的努力進行評估并按照需要進行修改。這種改進的設(shè)計裝置還可以在配置上具有高度靈活性,從而允許用戶對需要的設(shè)計環(huán)境和IC設(shè)計本身進行擴展,如在環(huán)境中加入可以增加附加的功能的插件或附加工具。這種軟件環(huán)境還會使設(shè)計過程更為透明(特別是對于技術(shù)不熟練者),從而增加系統(tǒng)的潛在用戶。它還與其他環(huán)境兼容,從而允許個人設(shè)計者通過其他環(huán)境、設(shè)備和網(wǎng)絡(luò)共亨信息。
發(fā)明內(nèi)容本發(fā)明通過利用一交互式計算機程序提供對集成電路設(shè)計中的配置、設(shè)計參數(shù)和函數(shù)進行管理的自動化手段,從而滿足上述需求。根據(jù)本發(fā)明的第一個方面,提出了一種集成電路設(shè)計中對配置、設(shè)計參數(shù)和函數(shù)進行管理的方法。和現(xiàn)有技術(shù)相比,該方法采用“迭代的”設(shè)計過程,使設(shè)計者能夠?qū)⑺麄兊臄U展組件(如擴展指令或外圍組件)集成到軟件庫中。這就意味著通過由軟件庫中建立設(shè)計描述,增加的擴展組件被自動地集成到編譯中。根據(jù)本發(fā)明的第二個方面,前述的方法還可以進一步包括在一個在微型計算機等類似設(shè)備中使用的計算機程序中,用于設(shè)計和管理集成電路的配置。在一實施例中,該計算機程序包括一能夠執(zhí)行各種相關(guān)函數(shù)集或函數(shù)群的組件的面向?qū)ο蟮沫h(huán)境。在一變化例中,使用可擴展置標語言(XML)、Java和Javascript的結(jié)合用于存儲靜態(tài)和動態(tài)數(shù)據(jù)。在本發(fā)明的第二實施例中,一種現(xiàn)有的非面向?qū)ο蟪绦蚝鸵挥糜趯υ摲敲嫦驅(qū)ο蟪绦蜻M行翻新而改進的“工具箱”模塊進行配置。根據(jù)本發(fā)明的第三個方面,提出了一種利用上述方法對集成電路進行生成、仿真、和/或綜合的裝置。在本發(fā)明第一實施例中,使用一包含有微處理器、顯示和輸入設(shè)備的微型計算機運行上面提及的計算機程序,使設(shè)計者在設(shè)計、仿真和/或綜合過程中可以與該程序進行交互。該微型計算機還進一步包括一存儲設(shè)備和網(wǎng)絡(luò)接口,用于配置了前述計算機程序的微型計算機之間的信息存儲、檢索和共亨。根據(jù)本發(fā)明的第四個方面,提出了一種在具有多個組件(component)的集成電路設(shè)計內(nèi)部生成層次結(jié)構(gòu)(hierarchy)的方法。該方法主要包括至少為部分上述多個組件提供代碼,每個組件都有一個第一類型的節(jié)點(site);在上述多個沒有代碼的組件上定義一個第二類型節(jié)點根據(jù)本發(fā)明的第五個方面,提出了一種包含有多個組件的創(chuàng)建集成電路編譯的方法。該方法主要包括以下步驟向多個組件中的至少若干個組件提供代碼,每個組件都具有一個第一類型節(jié)點;為多個組件中沒有代碼的組件規(guī)定一第二類型節(jié)點;將至少部分的第一類型節(jié)點和第二類型節(jié)點連接,從而創(chuàng)建一個層次結(jié)構(gòu);查詢層次結(jié)構(gòu)中最頂端組件的代碼;從最頂端組件中讀取代碼;從至少一個與最頂端組件連接的組件中合并代碼;在整個層次結(jié)構(gòu)中重復(fù)上述查詢和合并,創(chuàng)建編譯。根據(jù)本的第六個方面,提出了一種用硬件描述語言描述并使用本發(fā)明的前述方法綜合的集成電路設(shè)計。在本發(fā)明的一個實施例中,該集成電路由一嵌入式應(yīng)用軟件(embeddedapplication)中使用的擴展RISC處理器構(gòu)成。根據(jù)本的第七個方面,提出了一種使用前述綜合設(shè)計制造的集成電路。在本發(fā)明的一個實施例中,該集成電路由一流水線精減指令集CPU(RISC)處理器構(gòu)成。根據(jù)本的第八個方面,前述的程序包括一完整Javascript調(diào)試器,允許用戶為其數(shù)據(jù)設(shè)定斷點(breakpoint),并在實際的設(shè)計過程中對出現(xiàn)的各種計算或操作進行單步調(diào)試。根據(jù)本的第九個方面,提供了一種改進的將組件實例存入固定存儲器的方法。在本發(fā)明的一個實施例中,使用操作系統(tǒng)(OS)文件系統(tǒng)將數(shù)據(jù)存儲于簡單分級數(shù)據(jù)結(jié)構(gòu)中??蛇x地,還可以通過使用系統(tǒng)API函數(shù)仿真操作系統(tǒng)文件行為的方式采用如dBase、Oracle等類似的數(shù)據(jù)庫管理系統(tǒng)實現(xiàn)相同的功能。對于用戶來說使用標準文件系統(tǒng)就意味著用戶可以使用多種現(xiàn)有的工具對其設(shè)計項目進行管理。根據(jù)本的第十個方面,提供了一種改進的便于管理且沒有術(shù)語表的設(shè)計庫結(jié)構(gòu)。該結(jié)構(gòu)的特點是確保庫中的組件都具有唯一的命名,這樣不同的設(shè)計機構(gòu)就不會創(chuàng)建同名的組件,還包括將對象(如Java)類集成到庫結(jié)構(gòu)中的方法。根據(jù)本的第十一個方面,提供了一種改進的以逐個節(jié)點方式指定缺省連接方案的方法。這種方法是需要的,因為對于某一組組件可以存在許多種可供使用的連接方案,而其中沒有一種連接方案適用于全部組件。本發(fā)明使組件的創(chuàng)建者在其組件上能夠為每個節(jié)點(接口)指定一個連接方案。該方案即可以是一段腳本程序(如Javascript),也可以是一個(Java)類,運行該腳本/類,向系統(tǒng)提供關(guān)于如何連接組件的信息。根據(jù)本的第十二個方面,提出了一種改進的創(chuàng)建項目模板或設(shè)計塊的方法。模板存儲于庫中,并且能夠全部或部分地發(fā)布給其他設(shè)計者或設(shè)計的最終用戶。還有,設(shè)計者可以使用一個被多次實例化的單一模板創(chuàng)建一個具有相同組件或塊的多重實例的設(shè)計。改變模板就同時改變了組件/塊的所有實例,從而避免對各個組件逐個進行修改。根據(jù)本的第十三個方面,提出了一種改進的管理GUI的方法。本發(fā)明使用了作為組件定義組成部分的GUI。為了實現(xiàn)這一功能,將組件分配給部分GUI代碼。在本發(fā)明的一個實施例中,利用Java語言定義包括GUI對象在內(nèi)的跨平臺代碼??梢詫⒃摯a運行時插入GUI,而不需要將代碼重新編譯。GUI例程(例如“wizards”)作為對象類發(fā)布,所以可以被動態(tài)加入實時運行中的應(yīng)用軟件。根據(jù)本的第十四個方面,提供了一種管理涉及各種設(shè)計組件信息的顯示的方法。在本發(fā)明的一個實施例中,根據(jù)一個或多個分類標準將組件分類,并將這些組件配置為包含該分類信息。這樣顯示/GUI函數(shù)就可以根據(jù)組件的分類屬性對其進行識別并根據(jù)需要將其顯示。根據(jù)本的第十五個方面,提出了一種改進的管理組件依賴關(guān)系和約束條件的方法。與設(shè)計依賴關(guān)系/約束條件有關(guān)的數(shù)據(jù)被存儲于組件定義自身之內(nèi)。這些依賴關(guān)系被稱為腳本(例如Javascript)或Java類,其復(fù)雜或簡單程度可以按需要決定。此外,本發(fā)明通過利用來自每個組件的編譯信息創(chuàng)建一個“編譯層次結(jié)構(gòu)”從而利用信息封裝。為各個組件定義“父”和“子”節(jié)點,從而在組件被連接連接時有效地規(guī)定編譯層次結(jié)構(gòu)。根據(jù)本的第十六個方面,提出了一種用戶可擴展的工具箱,使用戶能夠添加“插件”。在本發(fā)明的一個實施例中,在存儲器件的預(yù)定目錄中置入Java類文件。該工具使用Java反射對該目錄中的類進行檢查,從而便于該工具對插件的使用。根據(jù)本的第十七個方面,提出了一種改進的使用點運算符(dotoperator)進行數(shù)據(jù)尋址的方法。向系統(tǒng)庫中儲存的腳本提供使用“dot”算子檢索信息(包括來自組件類型或?qū)嵗龜?shù)據(jù))的方法。系統(tǒng)內(nèi)的路徑被分為子組件(第一個子組件指出類型或?qū)嵗龜?shù)據(jù)),并且每個隨后的子組件被連續(xù)地調(diào)用以返回與上述功能相關(guān)的一個或多個組件。根據(jù)本的第十八個方面,提出了一種適于生成集成電路設(shè)計的計算機化系統(tǒng)。在本發(fā)明的一個實施例中,該設(shè)計包括多個由封裝對象(encapsulatedobjects)表示的組件,每個對象具有至少一個對另一個對象的接口,該接口包含通過該接口傳送的數(shù)據(jù)的相關(guān)信息。例如,這些組件可以包括一個處理器內(nèi)核和一個擴展指令,該信息包含有HDL,必需加入與用于實現(xiàn)該擴展的內(nèi)核相關(guān)聯(lián)的HDL。根據(jù)本的第十九個方面,提出了一種用于生成集成電路設(shè)計的計算機化系統(tǒng)。在本發(fā)明的一個實施例中,提供了至少一個可擴展的GUI樹,該可擴展的GUI樹允許用戶指定樹與至少一個插件模塊之間的關(guān)系。根據(jù)本的第二十個方面,提出了一種改進的設(shè)計系統(tǒng),其中所述的系統(tǒng)被適合于自動生成與該用戶選定的特定配置相關(guān)的用戶定制的文件。根據(jù)本的第二十一個方面,提出了一種生成集成電路設(shè)計的計算機化系統(tǒng),其中提供了一種編譯定序器(buildsequencer),其允許用戶在生成設(shè)計的過程中有選擇地利用一個或多個獨立的編譯序列。根據(jù)本的第二十二個方面,提出了一種生成集成電路設(shè)計的計算機化系統(tǒng),其包括至少一個根據(jù)設(shè)計內(nèi)部每個組件提供的信息生成該設(shè)計的拓撲表示(topologyicalrepresentation)的模塊。上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并為了讓本發(fā)明的上述和其他目的、特征和優(yōu)點能更明顯易懂,以下特舉出多個較佳實施例,并配合附圖,詳細說明如下。圖1是一典型的處理器內(nèi)核及相關(guān)組件的方塊圖。圖2是根據(jù)本發(fā)明的IP項目和IP庫之間關(guān)系的示意圖。圖3是根據(jù)本發(fā)明的示例性的IP庫的示意圖。圖4是根據(jù)本發(fā)明的用于生成設(shè)計的各種結(jié)構(gòu)的示意圖。圖5是與圖4所示的結(jié)構(gòu)相關(guān)的設(shè)計層次結(jié)構(gòu)的示意圖。圖6是一示例性的項目目錄結(jié)構(gòu)的示意圖。圖7是一示例性的連接兩個設(shè)計組件的連接的示意圖。圖8是一示例性的組件層次結(jié)構(gòu)的示意圖。圖9~9c是組件集中的各種方式的復(fù)雜系統(tǒng)的示意10是一示例性的具有自帶庫和擴展的組件的內(nèi)核示意圖。圖11是根據(jù)本發(fā)明生成多內(nèi)核IC設(shè)計的方法的邏輯流程圖。圖12是一示例性的內(nèi)核模板的示意圖。圖13是一示例性列模板的示意圖。圖14是圖11所示的多內(nèi)核IC的示意圖。圖15是一示例性本地機器目錄結(jié)構(gòu)的示意圖。圖16是另一多項目的具有多個庫的示例性配置的示意圖。圖17是一設(shè)計項目的示例性的含有兩個內(nèi)核的芯片組件。圖18是圖17所示的設(shè)計項目的示例性的目錄結(jié)構(gòu)。圖19是位于內(nèi)核1內(nèi)用于保持一新擴展設(shè)計的庫的示意圖。圖20是圖18和圖19所示的項目的目錄結(jié)構(gòu)的示意圖。圖21是一示例性的具有兩個擴展內(nèi)核的項目的示意圖。圖22是一根據(jù)本發(fā)明的示例性的單用戶開發(fā)系統(tǒng)的功能方塊圖。圖23是根據(jù)本發(fā)明的示例性的多用戶開發(fā)系統(tǒng)的功能方塊圖,該系統(tǒng)具有(i)多用戶;(ii)單一IP庫;(iii)多個IP項目;(iv)沒有源代碼控制系統(tǒng)。圖24是一示例性的帶SCCS的單用戶開發(fā)系統(tǒng)的功能方塊圖。圖25是一示例性的帶SCCS的多用戶開發(fā)系統(tǒng)的功能方塊圖。圖26是一示例性的多用戶、多個庫的開發(fā)系統(tǒng)的功能方塊圖。圖27是一示例性的帶SCCS的多用戶、多個庫的開發(fā)系統(tǒng)的功能方塊圖。圖28是一示例性的多用戶、多個庫、多項目的開發(fā)系統(tǒng)的功能方塊圖。圖29是根據(jù)本發(fā)明的一示例性的目錄結(jié)構(gòu)中的類存儲的示意圖。圖30是根據(jù)本發(fā)明的共用對象其及結(jié)果庫結(jié)構(gòu)的實例的示意圖。圖31是一示例性的ARCtangent內(nèi)核的IP目錄結(jié)構(gòu)的示意圖。圖32是圖30所示的內(nèi)核相關(guān)的示例性目錄結(jié)構(gòu)。圖33是示例性項目的組件類型和組件實例的目錄結(jié)構(gòu)的示意圖。圖34是兩個示例性的設(shè)計組件及其節(jié)點和將它們連接起來的連接的示意圖。圖35是用于接口的具有固定屬性值的工具數(shù)據(jù)使用的示意圖。圖36是一示例性組件內(nèi)容和該組件內(nèi)容與另一組件之間關(guān)系的示意圖。圖37是一示例性的組件語境該組件與另一組件之間的關(guān)系的示意圖。具體實施例方式附圖中所有相同的附圖標記都代表相同的部件。在本文中,術(shù)語“計算機程序”、“程序”、“子程序”和“算法”的含義基本相同?!坝嬎銠C程序”主要(但不唯一地)指后三者的集合或組。這些計算機程序、程序/子程序和算法可采用任何一種語言,例如面向?qū)ο笳Z言。但是,一般來說,本文中使用的上述所有術(shù)語意指用于實現(xiàn)某一給定目的按一定序列執(zhí)行的一系列邏輯步驟。在本文中,術(shù)語“IP”一般指知識產(chǎn)權(quán),包括但不限于可由個體或系統(tǒng)使用或生成的IC設(shè)計、方法、過程、方案、代碼、硬件描述語言模型、編譯、腳本、邏輯層次表示和軟件對象及組件(及其描述)。本文中提及的硬件描述語言(HDL)或VHSICHDL(VHDL)在含義上還包括其他硬件描述語言,如Verilog、VHDL、SystemsC、Java或基他任何設(shè)計的程序語言表示。還有,為本發(fā)明的各個實施例所進行綜合還可能使用Synopsys綜合引擎如DesignCompiler2000.05(DC00),或其他綜合引擎,如CadenceDesignSystems公司提供的Buildgates等。IEEE標準1076.3-1997,IEEE標準VHDL綜合包描述了用于規(guī)定基于硬件描述語言的設(shè)計和本專業(yè)普通技術(shù)人員應(yīng)該具有的綜合能力。在本文中,術(shù)語“處理器”(processor)包括任何能夠執(zhí)行至少一個指令字操作的集成電路或其他電子設(shè)備(或電子設(shè)備的集合),包括(但不限于),精簡指令集(RISC)處理器,例如,由本發(fā)明受讓人生產(chǎn)的ARCompactTMA5、和ARCompactTMA4用戶可配置ISAs/cores(下文將詳細描述)、中央處理器單元(CPU)和數(shù)字信號處理器(DSP)。這些設(shè)備的硬件可被集成到一個襯底之上(例如硅片),或分配到兩個或以上的襯底之上。還有,處理的各個功能部可以單獨作為軟件或與處理器相關(guān)的固件實現(xiàn)。此外,本文中使用的術(shù)語“級”(stage)指流水線處理器內(nèi)各個連續(xù)的級。例如,1級指第1流水線級、2級指第2流水線級,依此類推。例如,這些級可以包括取指令、解碼、執(zhí)行和寫回級。ARCompactTM是一種先進的指令集體系結(jié)構(gòu)(instructionsetarchitecture,ISA),它允許用戶在其32位用戶可配置處理器上將16位和32位指令混合在一起。該ISA的最大優(yōu)點是能夠?qū)⑵舷到y(tǒng)(system-on-chip,SoC)上的內(nèi)存要求按非常好的百分比切分,使無線通信和高容量用戶電子產(chǎn)器等深度嵌入的應(yīng)用實現(xiàn)低耗能和低成本。ARCompact的指令集體系結(jié)構(gòu)主要特點包括旨在提高代碼密度的32位指令、最常用操作的16位指令集和沒有模式轉(zhuǎn)換的的任意混合的16位和32位指令。由于和相應(yīng)的模式轉(zhuǎn)換的體系結(jié)構(gòu)相比而言,能夠降低編譯器使用的復(fù)雜程度,因此這些特點具有重要的意義。ARCompact指令集擴展了能夠讓用戶加入base-caseARCtangentTM處理器指令集的用戶擴展指令的數(shù)量?,F(xiàn)有的處理器體系結(jié)構(gòu)已經(jīng)可以允許用戶增加多達69條新指令用以加速關(guān)鍵例程(criticalroutine)和算法。ARCompact的ISA可以使用戶增加256條新指令。用戶還可以增加新的核心寄存器、輔助寄存器和條件碼。這樣ARCompact的ISA就保持并發(fā)展了ARC的可擴展處理器技術(shù)中的用戶可定制和可擴展的特點。隨著深度嵌入系統(tǒng)中越來越廣泛地使用32位體系結(jié)構(gòu),代碼密度對系統(tǒng)的成本會產(chǎn)生直接的影響。典型的是,片上系統(tǒng)(Soc)硅晶面積的很大一部分被內(nèi)存占用了。ARCompact的ISA提供高密度代碼以便有效降低嵌入式器件對內(nèi)存的需要量,而這對于大容量消費產(chǎn)品如閃速記憶卡來說是關(guān)鍵因素。此外,將代碼適合于較小存儲區(qū)可以潛在地降低處理器對內(nèi)存的存取訪問。這樣,對于MP3播放器、數(shù)字相機和手機等便攜式設(shè)備來說,就可以減少耗電并延長電池工作壽命。此外,通過在一個時鐘周期完成過去需要兩條或更多條指令,這些新而且較短的指令可以提高系統(tǒng)的吞吐量。這樣不需要讓處理器在更高時鐘頻率下工作就可以大大提高設(shè)備的性能。由于支持16位和32位指令自由使用,這就使編譯員和程序員能夠為一個給定任務(wù)選用最合適的指令,而不需要絕對代碼分區(qū)或系統(tǒng)模式管理。用新16位指令直接替換32位指令會直接提高代碼密度,而這一工作可以在整個設(shè)備中在各人指令級別實現(xiàn)。由于不要求編譯員重組代碼,這樣就可以在更在范圍的指令內(nèi)提供更大范圍的優(yōu)化。由于新生成的代碼與原來的源代碼的結(jié)構(gòu)一致,應(yīng)用程序的調(diào)試也更為直觀。有關(guān)對ARCompact的ISA更為具體的描述參見共同審查中的名稱為《多長度指令集體系結(jié)構(gòu)的可配置數(shù)據(jù)處理器》的美國臨時專利No.60/353,377,該專利申請同被轉(zhuǎn)讓給本申請的受讓人,其全部內(nèi)部并入本申請以供參考。ARCtangentTM處理器是一種用于ASIC、片上系統(tǒng)(SoC)和FPGA集成的用戶可定制32位RISC內(nèi)核。該處理器具有可綜合、可配置和可擴展的特性,允許開發(fā)人員對體系結(jié)構(gòu)進行修改和擴展以便更好地適合于某一特點的應(yīng)用程序。ARCtangent微處理器包括一個具有4級執(zhí)行流水線的32位RISC體系結(jié)構(gòu)。指令集、寄存器堆、條件碼、高速緩存、總線和其他體系結(jié)構(gòu)都是用戶可配置和可擴展的。它具有一個32×32位的核心寄存器堆,還可以根據(jù)需要加倍。此外,還可以使用大數(shù)量的輔助寄存器中(可達到2E32)。該處理器核心的功能元件包括算術(shù)邏輯單元(ALU)、寄存器堆(例如32×32)、程序計數(shù)器(PC)、指令取(i-fetch)接口邏輯,以及各種級鎖(stagelatch)。圖1是典型的ARCtangent處理器核心100和相關(guān)擴展指令102的方框圖??偨Y(jié)本發(fā)明的實施形態(tài)之一是一種用于設(shè)計、配置和評測集成電路的計算機程序,對于該實施形態(tài)下面還會詳細說明。該計算機程序提供大量的用戶定制從而獲得需要的結(jié)果;即,高效快捷地設(shè)計出具有特定屬性和功能的IC。特別是對于流水線處理器核心,該用戶定制使設(shè)計者能夠很方便地向核心中加入適合于執(zhí)行特定操作的擴展(例如指令),如Viterbi譯碼、FTT等。設(shè)計者可以在設(shè)計過程中將這些指令和其他元件(如特殊用途寄存器、新條件碼選擇、本地暫存器、用于3D或DSP的多媒體擴展庫,等等)任意地加入現(xiàn)有指令集。與綜合后加入外部ASIC或其他元件不同,這些指令將包含在處理器指令和寄存器組之內(nèi),因此可以消除集成問題,并且能夠根據(jù)一條或多條選定的屬性進行最大化的優(yōu)化。該方法還向設(shè)計者提供生成整個IC的HDL模型的能力,從而大大提高設(shè)計過程的效率。對于復(fù)雜處理器設(shè)計來說這一能力特別有用,當然還可以很容易地將其應(yīng)用于其他類型元件?,F(xiàn)有的提供此種用戶可配置設(shè)計的解決方案包括1999年10月14日提交的名稱為《管理半導(dǎo)體設(shè)計的配置和功能的方法和裝置》的美國專利申請09/418,663中提出的通用方法。作為與本申請共同審查和共同擁有的專利申請,該申請的全部內(nèi)容納入本申請,如本申請前述的”ARChitect”設(shè)計軟件。本發(fā)明通過采用面向?qū)ο蟮某绦蚝湍_本編制和其他相關(guān)優(yōu)點對該現(xiàn)有技術(shù)提出了重大改進。特別是,本發(fā)明滿足了現(xiàn)有解決方案未能解決的問題,包括(1)在設(shè)計中簡便高效地加入大量的擴展;(2)為數(shù)據(jù)驅(qū)動工具提供存儲其驅(qū)動數(shù)據(jù)的存儲器,實現(xiàn)數(shù)據(jù)驅(qū)動工具;(3)為所有工具的每個處理器或IC設(shè)計提供單一存儲庫,實現(xiàn)共享;(4)規(guī)定信息交換的格式。以下對這些優(yōu)點和特性以及本發(fā)明的實施例進行詳細說明。(1)實現(xiàn)數(shù)據(jù)驅(qū)動工具設(shè)計者每次向處理器內(nèi)核增加擴展時,都會將大量時間花費在將該擴展集成到現(xiàn)有工具箱中。特別是必需更新EDA工具和改變圖形用戶界面(GUI)等。盡管針對某一處理器設(shè)計或少量擴展進行配置是可行的,但對于芯片設(shè)計上的系統(tǒng)常用遇到的較大數(shù)量時(即上百甚至上萬個新增擴展)就無法進行了。因此,為了加速擴展開發(fā)和外設(shè)集成的速度,本發(fā)明將現(xiàn)有工具進行了有益的轉(zhuǎn)換,從而能夠使用更加“數(shù)據(jù)驅(qū)動”的模型。用于驅(qū)動新工具的數(shù)據(jù)必需儲于即集中化又可通過若干不同方面存取的理想地點,因此在本發(fā)明的一個實施例中使用了“配置數(shù)據(jù)庫”。本申請的受讓人還意識到對現(xiàn)有IP庫(包含處理器和外圍設(shè)備)實現(xiàn)“插件”的優(yōu)點,中心概念就是IP供貨商能夠確定他們自己的擴展組件,并利用本發(fā)明將該擴展組件集成到IP庫中。IP供貨商擴展組件可以獨立發(fā)布,并包含于硬件和軟件測試過程中,從而創(chuàng)建一個完全集成的設(shè)計工具。這對于現(xiàn)有技術(shù)(如前面提及的本申請受讓人生產(chǎn)的ARChitect軟件)來說,只有通過大量的工作將現(xiàn)有技術(shù)(即,ARChitect)的功能進行擴展才有可能實現(xiàn)。因此,本發(fā)明的目的之一就是盡可能做到前述發(fā)布/集成過程的無縫連接。本發(fā)明的配置數(shù)據(jù)庫通過向內(nèi)核和工具提供這一接口而實現(xiàn)這一目的。(2)單一設(shè)計儲存庫本發(fā)明的另一主要特點是為所有工具的每個處理器內(nèi)核或IC設(shè)計使用了一個單一的集中的或分散的儲存庫。例如,在下面將要詳細說明的一個實施例中,用戶從程序工具中選擇與其他軟件工具(如SeeCode調(diào)試器、評估器(profiler)等)相同的內(nèi)核設(shè)置。因此本發(fā)明通過為每個配置提供一個公共存儲,從而允許將該軟件工具作為一個結(jié)合單元共同工作。某些現(xiàn)有的解決方案中采用了儲存控制設(shè)定的模板的概念,但這一信息不能被其他工具使用。本方法還可以用于具有單一擴展內(nèi)核、帶有同類擴展指令/特點集的多內(nèi)核、或帶有不同擴展指令/特點集的多內(nèi)核的設(shè)計。(3)規(guī)定信息交換的格式采用本發(fā)明提供的標準信息交換具有以下優(yōu)點a)設(shè)計組織效率-現(xiàn)有技術(shù)中處理器/IC的每個組件或擴展都是由若干設(shè)計小組合作完成的。這些設(shè)計小組的成果被集成并生成產(chǎn)品。如本發(fā)明提供的數(shù)據(jù)庫為與組件相關(guān)的所有信息提供一個單一的邏輯存儲器,每個小組負責(zé)自己的組件/擴展的開發(fā)。例如,該邏輯存儲器可以由以下構(gòu)成單一文件、在單一存儲介質(zhì)上的多個文件、一本地數(shù)據(jù)庫或一分布式數(shù)據(jù)庫。由于對程序集成的需要減少了,結(jié)果就提高了使組織效率。b)設(shè)計組織/客戶集成-前述的設(shè)計組織內(nèi)部使用的用于開發(fā)組件或擴展的數(shù)據(jù)庫可以用來形成向客戶發(fā)送的產(chǎn)品的基礎(chǔ),從而有助于提高這兩部分之間有效的交互,減少“翻譯”量。此外,使用標準交換格式有助于第三方設(shè)計者為客戶和/或原設(shè)計組織生成對內(nèi)核/IC有用的新的定制擴展。特殊設(shè)計屬性上述特點和功能是通過以下設(shè)計屬性在本發(fā)明中實施的。本申請的附錄I中包含有關(guān)于這些屬性的示例性的實現(xiàn)(基于Java的)。當然,根據(jù)開發(fā)人員的需要還可以采用其他編碼和語言。1)使用XML、JavascriptTM和JavaTM的可配置IP封裝-在本發(fā)明的一實施例中,使用了可擴展標示語言(XML)、Java和Javascript的混合方式存儲靜態(tài)和動態(tài)數(shù)據(jù)。對數(shù)據(jù)使用平臺無關(guān)(platform-independent)或不可知格式(agnosticformat)具有特別的優(yōu)點,這樣數(shù)據(jù)和相關(guān)的IP能夠在所有的平臺和操作系統(tǒng)上工作。有一種變化形式為了簡單起見將數(shù)據(jù)作為文件存儲,但是,正如下面將要詳細說明的,如果需要可以實現(xiàn)關(guān)系數(shù)據(jù)庫或?qū)ο髷?shù)據(jù)庫。這樣就提供了一種查看存儲數(shù)據(jù)(代碼“透明度”)和與現(xiàn)有開發(fā)工具如源代碼控制系統(tǒng)集成的簡單方式。利用一種非專利的加密方案將XML和IP在發(fā)布前完全加密,而解密在用戶節(jié)點受到控制。將Java集成到數(shù)據(jù)中使數(shù)據(jù)和處理數(shù)據(jù)該數(shù)據(jù)的工具之間形成一個緊密耦合(closecoupling)。例如,數(shù)據(jù)自動由碟片或其他存儲地區(qū)裝入Java對象,這樣讀寫信息的代碼就不必執(zhí)行任何轉(zhuǎn)換。集成的Javascript還提供廣泛的腳本支持。通過將字串嵌入XML,可以將Javascript語句和表達式插入數(shù)據(jù)中。所使用的Javascript解釋器也允許腳本使用Java對象,因此本發(fā)明的該實施例具有XML、Java和Javasccript之間完全的互操作性。2)IP著作工具內(nèi)集成的調(diào)試器-本發(fā)明包括描述IP內(nèi)動態(tài)數(shù)據(jù)的能力。例如,前述的ARCtangent內(nèi)核的門數(shù)并非是靜態(tài)的。改變總線寬度和增加擴展等都會改變門數(shù)。因此關(guān)于門數(shù)的信息必需是動態(tài)表示(例如一段Javascript)的,而不是靜態(tài)數(shù)值。該動態(tài)表示根據(jù)用戶選擇的不同設(shè)計選項和加入內(nèi)核的擴展執(zhí)行不同的數(shù)學(xué)計算,并返回一個數(shù)值。為了將這些計算包括到IP之中,就要求在一個調(diào)試環(huán)境(包括對計算的單步調(diào)試、觀察可變值等)中運行它們的工具。這樣,本發(fā)明就可選地包括一個完整的Javascript調(diào)試器,能夠允許用戶為他們的數(shù)據(jù)設(shè)定斷點,并對真實(即,非仿真的)IP項目中出現(xiàn)的各種計算進行單步調(diào)試。3)集成的IP著作和配置-本發(fā)明與現(xiàn)有技術(shù)相比,采用了一種“迭代”設(shè)計過程。在現(xiàn)有技術(shù)中,設(shè)計者用需要的擴展建立內(nèi)核,并對HDL和其他組件進行修改,使其適應(yīng)增加的指令。如果由于某種原因,設(shè)計者又希望改變處理器內(nèi)核設(shè)計,就需要他們重新生成HDL,并重新加入指令HDL代碼(不論采用手工或其他方式)。相比之下,本發(fā)明的迭代方法使設(shè)計者將其擴展組件(例如指令)集成到軟件庫中。這意味著通過在庫中建立HDL(例如VHDL),增加的指令被自動集成到編譯中。因此該方法有效地從手工VHDL中轉(zhuǎn)移出來以容納令從而將其集成到軟件庫中。為了有助于這一方法上的轉(zhuǎn)變,軟件必需強調(diào)IP向庫的集成。對此在本文中已經(jīng)作為“IP著作”有所提及。為了使這一過程高效工作,就需要集成的著作和使用。換句話說,著作功能必需與現(xiàn)有的使用IP的功能相一致。前述的植于軟件內(nèi)的(Javascript)調(diào)試器允許用戶看到在使用中看到其腳本的運行。例如,VHDL中的替換變量(replacementvariables)在建立VHDL時被擴展了;用戶現(xiàn)在可以在他們的可變腳本上放置斷點,并在VHDL建立過程中看到它的執(zhí)行過程。4)將IP定義和實例分為庫和項目-作為IP交付的面向?qū)ο蠓椒ǖ囊徊糠?,需要一個或多個儲存庫存儲IP組件定義和實例。為了實現(xiàn)這一目標,本發(fā)明使用了封裝(encapsulation)、數(shù)據(jù)隱藏(datahiding)和小量的多態(tài)(polymorphism)的概念。5)IP項目文件結(jié)構(gòu)-本發(fā)明使用一種將組件實例存儲于易于管理的永久性存儲器的方法。它組成一個所謂的“IP項目”?!安僮飨到y(tǒng)”(OS)的文件系統(tǒng)被用來存儲具有簡單層次結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)。也可選用數(shù)據(jù)庫管理器如dBase、Oracle或類似的數(shù)據(jù)庫管理系統(tǒng)通過系統(tǒng)API(應(yīng)用程序界面)函數(shù)模仿操作系統(tǒng)的文件處理行為來實現(xiàn)同樣的功能。對于操作系統(tǒng)領(lǐng)域的專業(yè)技術(shù)人員來說,上述的API是熟知的,因此不再詳細說明。在一個實施例中,采用了一個基于文件系統(tǒng)的目錄結(jié)構(gòu)的簡單樹結(jié)構(gòu)。項目中的每個組件實例在存儲設(shè)備(如硬盤驅(qū)動器)上都有其自己的目錄,存儲設(shè)備上還可以包括有其他組件。此外,每個組件都有一個“_data_”目錄,用于存儲任何與該組件有關(guān)的數(shù)據(jù)(例如選項)??蛇x地,還可以提供一個“_library_”目錄,這是組件擁有的一個庫,以下還會更為詳細地說明。標準文件系統(tǒng)的使用就意味著用戶可以利用很多現(xiàn)有的工具管理他們的項目。例如,用戶可以利用現(xiàn)有文件服務(wù)器和源代碼控制系統(tǒng)等將項目共享。還有,不必為了向數(shù)據(jù)庫或?qū)S袛?shù)據(jù)存儲器中存儲數(shù)據(jù)而對利用IP或相關(guān)的現(xiàn)有工具進行修改。例如,作為某一組件組成部分的C/C++代碼已經(jīng)存儲于某一目錄中,現(xiàn)有的編譯器就可以直接使用該代碼而不需要進行修改。6)IP庫結(jié)構(gòu)-本發(fā)明還提供一種易于管理且不需要命名法的庫結(jié)構(gòu)。特別是提供一種確保庫中組件命名唯一(這樣不同的設(shè)計單位就不會創(chuàng)建名稱相同的組件)的方法,同時還提供一種將(Java)類集成到庫結(jié)構(gòu)中的方法。基礎(chǔ)庫存儲器就是OS的文件系統(tǒng)。但是,在本發(fā)明的實施例中,目錄的展開方法與Java包結(jié)構(gòu)類似。利用文件系統(tǒng)進行存儲使庫易于管理??梢允褂矛F(xiàn)有的工具對庫進行查看、管理和修改?;贘ava包約定的庫格式使Java類可以作為庫中組件的組成部分,并且該組件的命名是唯一的。這樣同樣允許與Java包結(jié)構(gòu)的緊密集成??梢詫旒尤隞ava應(yīng)用程序的類路徑中,并且存儲在庫中的類可以被正常存取。在一個示例性的目錄結(jié)構(gòu)中,最低一級目錄表示組件類型和連接類型。其又由其他目錄構(gòu)成,并相應(yīng)地包含其他文件和目錄。7)利用節(jié)點、連接和變量定義IP關(guān)系-本發(fā)明提供定義不同IP組件的功能,以及這些組件之間的相互關(guān)系。IP組件的連接關(guān)系和定義這些連接關(guān)系的信息類型被通知給系統(tǒng)工具。而現(xiàn)有技術(shù)中,這些信息被硬編碼到使用IP的每個應(yīng)用程序中。通過指定不同IP組件的關(guān)系類型和作為這些關(guān)系組成部分而被傳遞的信息,就可以確保按正確的拓撲的組件連接關(guān)系。此外,設(shè)計者還能夠驗證所有將組件集成到工具中所需要集成的信息都存在。8)組件連接式樣-當組件被加入設(shè)計中時,存在許多可能的連接方式。本發(fā)明提供一種基于逐個節(jié)點方式指定缺省連接策略的技術(shù)。由于對于一組給定的組件可以采用許多種不同的連接方案,而沒有一種方案適合于所有組件,因此這種技術(shù)是有必要的。本發(fā)明使組件的創(chuàng)建者能夠為每個節(jié)點(接口)的組件指定一個連接方案。該方案被編寫成一段腳本(例如Javascript)或一個(Java)類,運行該腳本/類以便向系統(tǒng)提供關(guān)于如何連接組件的信息。這一技術(shù)中采納了前述的封裝概念;該工具不知道如何連接某一給定組件,但是該組件本身已經(jīng)將相關(guān)信息封裝在自身之內(nèi)。9)作為模板存儲在庫中的項目-設(shè)計者經(jīng)常不需要從頭開始創(chuàng)建一個項目,而是需要一個可以修改的預(yù)配置的IP項目并生成最終設(shè)計。設(shè)計者可能還需要可以納入一現(xiàn)有項目的預(yù)配置的設(shè)計“塊”。本發(fā)明提供生成項目模板或設(shè)計塊的能力以滿足這一需求。模板存儲于庫中,并且可以全部或部分地分配給設(shè)計者或設(shè)計的最終用戶。還有,設(shè)計者可以使用一個用過多次的模板生成具有相同組件或塊的多個實例的設(shè)計。改變模板同時會改變所有組件/塊的實例,從而避免了對組件逐一進行修改。10)構(gòu)建存儲于庫中的工具定義-設(shè)置某一給定項目建立過程的方法在許多方面與作為結(jié)果的HDL本身一樣,都是唯一性的。在一個實施例中,構(gòu)建過程是一系列用戶可以進行修改/增加/刪除的步驟。現(xiàn)有技術(shù)使用例如Unix“makefiles”來規(guī)定構(gòu)建過程。而本發(fā)明在庫和項目中存儲一個或多個構(gòu)建“過程”。例如,可以向庫中存入“VHDLbuilder”、“HierarchyBuilder”和“TestsBuilder”等構(gòu)建過程,并將其加入到設(shè)計中,并規(guī)定其被如何構(gòu)建。還提供子過程,如“GenerateHierarchy”、“AsynctoSync”、“GenerateRams”等,從而使設(shè)計者能夠以使用單個設(shè)計組件構(gòu)建一個設(shè)計相同的方式由這些子組件中生成用戶定制的構(gòu)建過程。這些構(gòu)建過程可以創(chuàng)建具有唯一生成的不同名字的IP,從而在每個設(shè)計中都可以使用IP塊的多個副本。這一優(yōu)點對于創(chuàng)建多處理器片上系統(tǒng)的設(shè)計十分有用。11)可擴展的/動態(tài)的GUI-新組件通常需要對圖形用戶界面(GUI)進行改變,以便為該組件增加新的面板、菜單和對話框等。本發(fā)明通過提供作為組件定義組成部分的GUI來解決這一問題。為了實現(xiàn)這一功能,GUI代碼的一部分被分配給了組件。在一個實施例中,利用Java語言定義包括GUI對象在內(nèi)的跨平臺代碼。該代碼可以作用插件被實時插入GUI,不需要對代碼進行重新編譯。GUI。GUI例程(例如“wizards”)作為Java類分配,所以可以被動態(tài)加入進行中的應(yīng)用軟件。這就意味著組件的開發(fā)人員還可以創(chuàng)建需要使用的GUI組件,并將它們分配到組件中。本發(fā)明的GUI還是由存儲在庫中的信息自動實時生成的。例如,一個組件的選項被存儲在組件定義中,相關(guān)工具對其進行分析,并由分析結(jié)果實時生成合適的GUI。12)IP數(shù)據(jù)的自動更新-本發(fā)明還可選地被配置為可通過一“IP更新”服務(wù)器或其他單位提供的網(wǎng)絡(luò)接口(如Internet、互聯(lián)網(wǎng)、內(nèi)聯(lián)網(wǎng)、LAN、WAN等)自動收集組件更新或其他相關(guān)數(shù)據(jù),并將已經(jīng)定位或下載的新數(shù)據(jù)、更新等通知給用戶。通過這種方式,用戶本地系統(tǒng)中的過時數(shù)據(jù)在軟件使用過程中被自動更換,從而提供一種實時更新功能。這種更新為用戶支持提供一種改進的機制,使需要的IP更新被自動地包括在“編譯”中,以確保消除與IP過時副本有關(guān)的錯誤行為。13)用于顯示的IP分類-本發(fā)明的庫可以包含許多不同的IP組件,包括硬件、軟件、測試等。相應(yīng)地,本發(fā)明提供用戶對這些不同組件的顯示信息進行管理的能力。特別是,這些組件是基于一個或多個分類標準進行分類的,并含有該分類信息。這樣顯示/GUI函數(shù)就可以根據(jù)組件的分類屬性對組件進行識別并按要求將其顯示。14)人類可讀連接-現(xiàn)有技術(shù)中對IP項目的描述使用連接、節(jié)點和組件,即使有經(jīng)驗的設(shè)計者也不能總是看懂這些描述。如果設(shè)計者對IP設(shè)計的細節(jié)不甚了解就更是如此。本發(fā)明通過生成對項目進行描述的描述性的連接元素來解決這一問題。在一個實施例中,這種描述采用明語(例如英語),這樣用戶就可以迅速確定組件之間的關(guān)系。這樣就使該設(shè)計工具整體上對于更為廣泛的潛在用戶來說更為直觀和易于理解。15)組件包含其依賴條件-設(shè)計中的每個組件都有許多依賴條件和限制條件,并且隨著內(nèi)容的改變而改變。例如,指令高速緩存的存儲總線寬度不能大于內(nèi)核使用的總線寬度。工具需要知道對這些依賴條件和限制條件,使其不能成為工具內(nèi)的硬編碼。相應(yīng)地,本發(fā)明將這些依賴/限制條件的數(shù)據(jù)存儲到組件定義自身之中。這些依賴條件用腳本(例如Javascript)或Java類表達,使其能夠按照需要任意復(fù)雜或簡單。16)存儲于組件定義中的組件構(gòu)建信息-現(xiàn)有技術(shù)中的解決方案是利用如果構(gòu)建一給定設(shè)備和任何相關(guān)擴展的“硬編碼”信息。與此對比的是,本發(fā)明通過使用來自每個組件的構(gòu)建信息利用封裝信息生成一“構(gòu)建層次結(jié)構(gòu)”。所謂的“父”和“子”節(jié)點在不同組件上被定義,從而在組件被連接連接起來時有效地指定構(gòu)建層次結(jié)構(gòu)。17)使用插件的工具可擴展性-本發(fā)明還進一步提供一個用戶可擴展工具箱,幫助用戶增加“插件”。在一個實施例中,Java類文件被置于存貯設(shè)備的預(yù)定目錄中。該工具使用Java反射功能對該目錄中的類進行檢查,從而協(xié)助工具對插件的使用。18)使用“點”運算符的數(shù)據(jù)尋址-為存儲于系統(tǒng)的庫中的腳本提供了一種使用“點”運算符檢索信息(包括來自組件類型或?qū)嵗臄?shù)據(jù))。系統(tǒng)內(nèi)的路徑被分為子組件(第一個指出類型或?qū)嵗龜?shù)據(jù)),每個后續(xù)的子組件被調(diào)用返回與該函數(shù)相關(guān)的一個或多個對象。19)變量交叉連接這些連接確定組件之間的關(guān)系。關(guān)系的確定經(jīng)常包括必需經(jīng)過這些連接傳送的數(shù)據(jù)。例如,擴展指令必需讓內(nèi)核知道它向內(nèi)核VHDL中加入了什么樣的VHDL。本發(fā)明設(shè)置為某一給定組件中的每一個節(jié)點都包含有關(guān)通過該節(jié)點傳送的數(shù)據(jù)的信息。該信息以“變量”(variables)的形式存在。在一個實施例中,每個變量都是一條運行時評估的Javascript以便檢索數(shù)據(jù)。20)使用插件的可擴展GUI樹-本發(fā)明的GUI基本上是基于現(xiàn)有的樹用戶界面組件。但是由于工具是配置成允許第三方開發(fā)人員向庫中加入他們自己類型的數(shù)據(jù),該數(shù)據(jù)必須以一種有用的方法顯示在樹上。理想的是數(shù)據(jù)設(shè)計者能夠規(guī)定他的數(shù)據(jù)如何在樹上顯示。相應(yīng)地,本發(fā)明允許工具獲取告訴工具如何將數(shù)據(jù)加到樹上的信息或指令。最佳軟件實施例下面對包含了本明的方法和體系結(jié)構(gòu)的示范性版本的軟件進行詳細說明。應(yīng)該理解下面討論主要是以前述ARCompactISA和ARCtangent處理器使用的設(shè)計軟件為基礎(chǔ)的。本發(fā)明還可用于其他類型的處理器和IC(包括ASIC、FPGA、DSP、CISC處理器、微處理器),以及上面提到的ISA。此外,盡管以下說明是根據(jù)在微型計算機或其他其他類似的處理設(shè)備中在Java環(huán)境下運行的,應(yīng)該可以理解還可以使其他用軟件和硬件環(huán)境(包括微型計算機、工作站、網(wǎng)絡(luò)計算機、“超級計算機”和特大型機)采用本發(fā)明的方法。此外,如果需要還可以將計算機程序的一個或多個部分可以被固化在相對于軟件而言的硬件或固件上,這一變化實施例是計算機領(lǐng)域的專業(yè)技術(shù)人員所容易實現(xiàn)的。還有,應(yīng)該可以理解本發(fā)明還可以和著名的公用對象請求代理程序體系結(jié)構(gòu)(CommonObjectRequestBrokerArchiteture,CORBA)協(xié)同使用。BORBA提供了一種用于編寫分布式面向?qū)ο蟮膽?yīng)用程序的平臺無關(guān)體系結(jié)構(gòu)。COBRA對象可以駐留在同一臺機器和同一過程中,或其他本地或非本地平臺之中。Java語言從許多方面對于編寫CORBA程序都非常有用,例如在實現(xiàn)CORBA能力的JavaIDL中。最后,注意到盡管此處公開的實例和討論內(nèi)容主要涉及硬件IP和VHDL,本方法和裝置還可以用于很多其他應(yīng)用領(lǐng)域,例如,軟件或仿真硬件設(shè)計。不同類型的數(shù)據(jù)-前述的系統(tǒng)“配置數(shù)據(jù)庫”中存有兩種類型的數(shù)據(jù)。首先是用于驅(qū)動工具的數(shù)據(jù),包括對各種組件的描述。該數(shù)據(jù)然后就成為一IP庫,用戶可以從中選擇設(shè)計系統(tǒng)要使用的組件。其次是描述由用戶創(chuàng)建的真實設(shè)計的數(shù)據(jù)。該數(shù)據(jù)必須描述用戶在編譯設(shè)計中所選擇的選項,該信息被傳送到各個工具。由于這兩種數(shù)據(jù)通常是十分不同的,它們分別分類為“IP庫”和“IP項目”。IP庫存儲組件描述和驅(qū)動軟件工具的數(shù)據(jù)。IP項目存儲用戶設(shè)計,包括用戶選定的擴展和選項?;诮M件的IP-使用可以轉(zhuǎn)入和轉(zhuǎn)出的設(shè)計“組件”形成一個IC設(shè)計目前已得到廣泛接受和應(yīng)用。通常IC是為了執(zhí)行某一特定任務(wù)而設(shè)計的,并且具有被很好證明過的接口。一旦設(shè)計出電路,IC就可以用另一制造商提供的IC更換(只要與接口兼容)。不過這種基于組件的概念已經(jīng)被擴展到創(chuàng)建所謂的“可配置”IP。這就使用戶能夠改變設(shè)計中一個或多個組件的性能從而更好地滿足需要。這種新發(fā)現(xiàn)的靈活性有很多優(yōu)點,也和現(xiàn)代軟件設(shè)計,特別是基于組件的軟件設(shè)計有許多相似之處。近年來軟件工程師一直在努力利用組件提高軟件開發(fā)的速度。從零開始創(chuàng)建一個復(fù)雜的應(yīng)用軟件已經(jīng)不為人所接受。通常更有效的是從標準軟件塊開始編譯應(yīng)用軟件,可以使用開發(fā)工具將這些標準軟件塊插接到一起。這些軟件塊可以是庫、DLL、ActiveX控件等等。例如,一名想創(chuàng)建一帶有日歷顯示窗口的應(yīng)用軟件的開發(fā)人員不會去從頭開始編寫整個日歷的代碼,他只要獲取一個已經(jīng)存在的日歷控件“標準產(chǎn)品”,并將其放入應(yīng)用軟件中就可以了。但是,開發(fā)人員必需還能夠?qū)@種“標準產(chǎn)品”進行定制。仍以上述日歷為例,可能需要某種特定的顏色方案可日期顯示方式。還有,二次開發(fā)人員可能想要定制控件功能。只要該組件的原始或主要開發(fā)人員首先預(yù)期到這些性能和屬性可能要被用戶定制,并提供了允許將定制內(nèi)容替代組件中的默認設(shè)置的“覆蓋”機制,這種定制是相對來說比較實現(xiàn)的。前述的例子在許多方面是對本明的操作方式的一種仿真。ARC處理器也具有類似的能力,最重要的是可擴展指令和寄存器。例如,在一示例性ARCtangent內(nèi)核中,高速緩存的大小可以在預(yù)定的范圍(例如0.5K~32K)之間按需要設(shè)定。通常在設(shè)計內(nèi)核/IC時還不太清楚用戶可能需要創(chuàng)建哪些用戶定制的指令。但是通過為內(nèi)核提供標準“連接類型”,開發(fā)人員就可以隨意創(chuàng)建并增加指令。這種擴展能力基本上就是一種覆蓋內(nèi)核默認行性能的一種方式。類型和實例-本發(fā)明還進一步區(qū)分所謂的“類型”(types)和“實例”(instantces)。類型和實例的區(qū)分是很重要的概念,在上述的IP庫和IP項目中十分有用。這一概念是對早已為人熟知的面向?qū)ο缶幊绦g(shù)語中的類(class)和對象(object)之間的區(qū)分的直接仿真(即類型=類;實例=對象)。對這一區(qū)別在下文中還會進一步詳細說明。類型-類型用于描述對象的類。例如,一個ARCtangent處理器會有一個類型定義,對如何使用類型和可以使用何種組件將其擴展均有詳細說明。這種定義不是一個真正的內(nèi)核,只是一個適用于所有同類設(shè)備(即ARCtangent處理器)的描述。內(nèi)核類型定義可包括關(guān)于其支持何種時鐘、如何將其轉(zhuǎn)換為VHDL或其他描述語言表示、如何將其與擴展連接等信息。實例-當用戶要求ARChitect創(chuàng)建一個ARCtangent內(nèi)核時,就是在創(chuàng)建一個實例。一個內(nèi)核的實例包含關(guān)于寄存器RAM類型、或其是否具有指令高速緩存等信息。本發(fā)明的IP庫和項目中的類型和實例有三個主要用途,即組件、節(jié)點和連接類型。圖2顯示了他們之間的關(guān)系。在圖2中,“類型”用圓角方框202表示,“實例”用直角方框204表示。實體之間的虛線表示一種“是......的一個實例”的關(guān)系。IP庫-前文中提及的IP庫中保存有關(guān)于各種可以用來創(chuàng)建IC器件的組件、節(jié)點類型和連接類型的信息。組件類型定義-組件類型定義構(gòu)成了庫中的大量信息。它們是對可以在設(shè)計中使用的各種組件的定義。例如內(nèi)核、擴展、外設(shè)等都有他們自己的組件定義。每個組件定義都有自己的子目錄,基中將該組件所有的數(shù)據(jù)都保存在同一位置。被用來定義這些組件的主要信息是它們的節(jié)點和工具數(shù)據(jù)。節(jié)點描述了組件是如何連接在一起的。組件使用該節(jié)點將總是存儲于一IP庫中的節(jié)點類型定義的實例。圖3顯示了節(jié)點類型定義、組件類型定義和連接類型定義之間的關(guān)系。連接類型定義-連接類型定義了組件之間的關(guān)系。每個連接類型定義都有其自己的子目錄,其中保存有所有其節(jié)點類型定義在內(nèi)的數(shù)據(jù)。此外,本發(fā)明采用“通俗英語”的連接類型指定。典型的是在現(xiàn)有技術(shù)中,連接完全是根據(jù)組件和與其連接的節(jié)點來描述的,例如Link1connects′core′(VHDL_Parent)to′icache′(VHDL_Child)(連接1將“core”(VHDL_Parent)與“icache”(VHDL_Child)連接)。很明顯這不能提供用戶任何有用的信息。對于其關(guān)系的更為有用的描述可能是′icache′insertsVHDLcodeinto′core′(‘icache’將VHDL代碼插入‘core’)這樣用戶立即就會確定其關(guān)系。在本發(fā)明中是通過將信息放入連接類型來實現(xiàn)這一功能的?;叵氲竭B接類型是對某一類型的所有連接的定義。在這種情況下,存在一種被稱為‘VHDL’的連接類型,它有兩個端點‘父’(Parent)和‘子’(Child),關(guān)于它下面還有詳細說明。連接類型中存儲的信息告訴程序如何根據(jù)那個連接類型(這里是指將內(nèi)核連接到高速緩存的連接)的實例創(chuàng)建一個串(String)。對于上面的例子,代碼可能是下面的樣子Parent.getName()+″insertsVHDLcodeinto″+Child.getName();關(guān)于連接的信息就這樣封裝在連接類型里了,因此就不需要程序去發(fā)現(xiàn)有關(guān)信息了。模板-模板是存儲在IP庫中十分有用的IP項目。它們主要有以下兩個用途1)啟動配置-軟件形式實施例中具有若干默認設(shè)置或配置,如“基礎(chǔ)”(basecase)處理器配置(即,尚未添加任何擴展)、DSP、常規(guī)(general)等等。這些配置可以存儲在模板中,并允許用戶選擇開始他們的設(shè)計所適合的設(shè)置。2)重復(fù)配置-如果用戶創(chuàng)建了設(shè)計的一部分并想將其復(fù)制,用戶可以將其存儲在一個模板中,然后在設(shè)計中將其多次實例化。下面還會對模板進行更為詳細的說明。封裝-現(xiàn)有技術(shù)的設(shè)計系統(tǒng)中與提出工具方法有關(guān)的缺陷之一就是沒有使用IP封裝。換句話說,在這種系統(tǒng)中關(guān)于某一條IP的信息可以在許多工具之間產(chǎn)生“漣漪”(傳播)。例如,加入一條新的擴展就需要對許多應(yīng)用程序做出改變,包括編譯器(builder)、調(diào)試器、編譯器、仿真器,等等。事實上,該信息被頻繁地硬編碼到這些應(yīng)用程序的源代碼中。此外,關(guān)于IP的使用規(guī)則也被硬編碼到工具中。這里描述的本發(fā)明的實施例不僅鼓勵,實際上是要求強制封裝。特別是所有與一條IP有關(guān)的信息都存儲在(封裝在)這條IP的定義中了。每個IP組件都“了解”自己以及如何與其他IP發(fā)生關(guān)系,但是對于任何設(shè)計中使用的其他IP一無所知。例如,一條擴展指令知道它必需被放入一個內(nèi)核,但是它對該內(nèi)核除了知道并入其VHDL的要求以外對該內(nèi)核的其他情況一無所知。這就意味著該內(nèi)核可以在不對該擴展指令造成影響的情況下被更新/替換。例如,按照某一典型的現(xiàn)有技術(shù)方案,設(shè)計者可能在編譯軟件GUI代碼時遇到依存性的問題,如下YoucannothavetheXMACwithoutthememorysequencerinthecore.但是在本發(fā)明中XMAC和內(nèi)核被看作是獨立的組件,并且依存關(guān)系被放入了與其相關(guān)的組件(即上例中的XMAC)。該依存關(guān)系是XMAC組件的組成部分,如下ThisXMACrequiresamemorysequencer.另一方面,考慮到需要存儲指示高速緩存不能具有大于內(nèi)核的總線寬度的信息。這一儲存關(guān)系顯然歸屬于高速緩存,因此,我們將該數(shù)據(jù)放入高速緩存組件類型。根據(jù)編碼,可能會采用如下編碼ifthecorebuswithisgreaterthanX,thenprint(″cachebuswidthtoosmall″)為了實現(xiàn)上述,很明顯內(nèi)核和高速緩存需要交換信息。即內(nèi)核需要告訴高速緩存它的總線寬度。因此在內(nèi)核和高速緩存之間必需有一個用來傳送該數(shù)據(jù)的連接。這種連接是存在的,它被稱為‘ICache_cache’。該連接類型的實際定義規(guī)定該高速緩存可以要求一個來自該連接另一端(即內(nèi)核)被稱為‘CoreBusWidth’的變量。因此,為了獲得內(nèi)核總線寬度,Javascript可能如下ICache_cache.BusWidth然后,該高速緩存必需知道它自己的總線寬度。該信息由高速緩存實例的選項數(shù)據(jù)獲取,即id.options.Bus.Width。因此,依存關(guān)系可為if(id.options.BusWidth>ICache_cache.CoreBusWidth){″Buswidthistoosmall″;}else{″BuswidthisOK″;}編譯層次結(jié)構(gòu)-如前述,使用封裝就要求沒有一個軟件或組件具有全部的代碼(例如VHDL)。每個組件都僅有其自身的VHDL代碼。因此,必需有一個能夠從各個組件中提取VHDL并將其進行匯編從而構(gòu)成一個元素的一元VHDL層次結(jié)構(gòu)。本發(fā)明的基本編譯體系結(jié)構(gòu)的好處在于其非常簡單,如下1)每個具有需要編譯到項目中的VHDL的組件都有一個VHDL_Child節(jié)點。2)每個需要將其他組件的VHDL并入其自身VHDL的組件都有一個VHDL_Parent節(jié)點。3)當節(jié)點被連接連接后,產(chǎn)生一個被組件VHDL節(jié)點連接的層次結(jié)構(gòu)樹。4)編譯器查詢最頂部組件的VHDL代碼。該最頂部的組件然后試圖通過讀取自身VHDL文件創(chuàng)建VHDL并從其子組件并入所有VHDL。子組件可通過類似的過程創(chuàng)建其自身VHDL。5)由于編譯過程是由樹自上而下地進行的,因此該過程是遞歸的。每個組件都從其組件類型讀取其自身的VHDL,并與其子組件的VHDL合并。6)當VHDL完成遞歸并且進行到樹的頂端,編譯過程完成并且所有組件的代碼都已經(jīng)合并到一起了。注意本發(fā)明中使用的封裝還提供了生成VHDL的另一方法,特別是考慮到組件不想通過由磁盤讀取VHDL生成自身VHDL的情況;例如一個被給予基本參數(shù)如大小和總線寬度“不停步”(onthefly)地生成自身VHDL的RAM組件,等等。在這樣情況下,磁盤中沒有存儲VHDL,只是一個如所需要的生成VHDL文本的Java類。通過從工具中提取編譯信息,每個組件都包含有將其編譯入VHDL的足夠信息。這樣就使設(shè)計者能夠發(fā)布新的擴展和外設(shè)而不需要對現(xiàn)有的組件進行修改。應(yīng)該明白盡管上述內(nèi)容是基于VHDL代碼的,同樣的過程還適用于Verilog、C++、綜合腳本等等。硬件層次結(jié)構(gòu)生成-在VHDL自身生成的同時,硬件層次結(jié)構(gòu)也通過存儲在每個組件中的數(shù)據(jù)被建立。不能將該硬件層次結(jié)構(gòu)與組件層次結(jié)構(gòu)混淆,在此對其無須提及。每個硬件組件都描述其自身層次結(jié)構(gòu),該信息存儲于一段工具數(shù)據(jù)中。該信息是動態(tài)的,用JavaScript定義,因為在設(shè)計期間該層次結(jié)構(gòu)可以改變,這取決于用戶作出的選擇。例如,欲在ARCangel測試硬件上運行的編譯會經(jīng)常會具有在軟件仿真中所沒有的額外的層次結(jié)構(gòu)級別(hierarchylevel)。該組件可以隨意規(guī)定任意多的層次結(jié)構(gòu)級別。每個層次結(jié)構(gòu)級別都可以是結(jié)構(gòu)(structural)、行為(behavioural)或可綜合(synthesissable)這三種類型之一。如果有必要可以對他們分別對待,這取決于其他應(yīng)用設(shè)置。值得注意的是結(jié)構(gòu)層次結(jié)構(gòu)級別對一種可能將許多其他層次結(jié)構(gòu)級別連接到一起的層次結(jié)構(gòu)級別進行描述。每個規(guī)定的級別都有一個上層塊名稱和一個或多個屬于該上層塊的下層HDL塊。在編譯時間該應(yīng)用程序為每個唯一的上層塊名稱創(chuàng)建一個項,并將該項下的所有組件中找到的所有下層塊歸類,從而創(chuàng)建一個用于將組件連接到一起并指示匯編的最終的HDL層次結(jié)構(gòu)。數(shù)據(jù)隱藏和多態(tài)性-本發(fā)明中使用的封裝實際上意味著一個組件只能知道其自身及其關(guān)系。但這不意味著該組件不能交換信息。組件幾乎從不單獨使用,因此必需能夠互相傳遞信息。但是如果一個組件從另一個組件需要一條數(shù)據(jù),那么該事實就成為組件定義的一部分。一般是使用連接類型和節(jié)點(上面已經(jīng)討論,但在圖示的實施例中基本上與Java中的接口相同)來實現(xiàn)這一點的。如果兩個組件之間存在關(guān)系,那么就為這個關(guān)系定義一個連接類型。然后信息被加入該連接類型以規(guī)定何種信息經(jīng)過其傳遞。注意連接類型只規(guī)定傳送了何種類型的信息,而不是傳送了什么信息或其是如何生成的。由IP的創(chuàng)建者確定該信息是如何創(chuàng)建的。庫和項目-如前述,數(shù)據(jù)被分為對象實例和類型。實例是用戶放入設(shè)計的真正IP組件,類型是對這些對象的元數(shù)據(jù)描述。它是對Java/C++中的類和對象的仿真。類型存儲于庫中,實例存儲于IP項目中。注意,庫中不僅存有組件類型,還存有連接類型。類似地,項目中也包含連接實例。IP項目-請參閱圖4~7,是本發(fā)明的IP項目。圖4是構(gòu)成一個IP項目400的基本結(jié)構(gòu)。這些結(jié)構(gòu)排列在圖5中所示的層次結(jié)構(gòu)500中。一個項目是由通過連接連接起來的若干組件和模板組成的。圖6顯示了一個典型項目的目錄結(jié)構(gòu)。連接-連接用于將連接節(jié)點,也就將組件連接到一起。圖7顯示了連接兩個組件704和706的連接702。本實施例中的連接存儲其連接的兩個對象的名稱和這些對象中的連接節(jié)點的名稱,盡管如果需要他們還可以被配置為存儲其他類型的信息。父組件和子組件-在系統(tǒng)設(shè)計中,幾乎總是存在一種組件的層次結(jié)構(gòu)關(guān)系,一些組件為“父”,另一些為“子”。在本文中術(shù)語“父”、“子”等僅指層次結(jié)構(gòu)起源或組件間的聯(lián)接。例如,內(nèi)核組件被認為是其擴展的父,一個芯片級組件可能是內(nèi)核的父。這種基于塊的設(shè)計反映了VHDL被寫入的方式和SOC設(shè)計。圖8是一典型的組件層次結(jié)構(gòu)800。請參閱圖8,最高一級是芯片組件802。一個包含兩個內(nèi)核804的芯片(該芯片是內(nèi)核的父)。每個內(nèi)核也是一個父,包含兩個擴展組件806。對于這種父-子關(guān)系的深度沒有限制,但一般每個組件只能有一個父組件??瞻捉M件-有時將組件集中到一起以便隱藏執(zhí)行細節(jié)是有用的,但是這樣就缺少一個父組件。這時用戶可以創(chuàng)建一個空白組件作為這些對象的容納器。空白組件最簡單的一種組件,沒有變量或自身的節(jié)點。圖9中顯示的是沒有將組件集中的復(fù)雜系統(tǒng)900。如圖9a所示,內(nèi)核902、904可以利用空白組件與其外設(shè)和本地存儲器集中。集中之后用戶就能夠在系統(tǒng)級別查看其設(shè)計,將會顯示存儲器和兩個被命名為‘系統(tǒng)1’和‘系統(tǒng)2’的空白組件910和912(參見圖9b)。用戶可“放大”組件之一以便顯示出它是由內(nèi)核920、外設(shè)922外加本地RAM924組成的(參見圖9c)。用戶可以將其設(shè)計分拆成能夠被單獨開發(fā)的邏輯塊(組件)。例如,用戶的設(shè)計可包括兩個執(zhí)行完全不同任務(wù)的內(nèi)核。這些內(nèi)核是分立組件,因此可以由不同的開發(fā)小組開發(fā)。這些內(nèi)核常常需要為其自身特定任務(wù)量身定制的擴展指令。這些擴展指令可由不同的開發(fā)小組定義并保存在IP庫中。這些新擴展的指令將成為使用這些指令的內(nèi)核的組成部分。因此,如圖10所示,內(nèi)核組件可包含其自身的含有其擴展在內(nèi)的的庫。在圖10所示的實例中,兩個擴展“我的擴展1”1002和“我的擴展2”1004只有從其相應(yīng)的內(nèi)核內(nèi)部才是可見的。因此內(nèi)核2就不能夠創(chuàng)建我的擴展1的實例,因為后者不在范圍內(nèi)。類似地,內(nèi)核1也不能將我的擴展2實例化。用戶將關(guān)于組件的所有信息封裝并將其一并存儲到一個地方。這一方式有利地使用戶能夠?qū)⒔M件由一個項目移到另一個項目并且相關(guān)的組件類型定義也一同移動。作用域規(guī)則-將庫放入組件內(nèi)要求必需有一定的規(guī)則來控制其可見性(作用域規(guī)則“scoperules”)。這些規(guī)則一般按如下設(shè)立●庫的父組件可以看到該庫。這是指存有該庫的組件可以使用該庫。●庫的父組件的子組件可以看到該庫。如果存有該庫的組件有子組件,那么這些子組件也可以使用該庫。這種可性性延伸到孫組件、重孫組件等等。●全局庫可以被所有組件看到。有些庫是全局性的,不屬于任何組件。這些庫對于所有的組件都是可見的。模板-本發(fā)明的主要目的之一就是使其成為可擴縮的。具體來說,這種可護縮性使軟件能夠代表單一內(nèi)核系統(tǒng)、小型多內(nèi)核系統(tǒng)或大型多內(nèi)核系統(tǒng)。這種可護縮性很大一部分是取決于前述的模板。這些模板允許用戶設(shè)計一些共用的組件設(shè)計,然后將這些模板放入IP庫待用。例如,一個與USB控制器連接ARCtangent內(nèi)核和一些共享存儲器可以組成一個模板。用戶只需要簡單地在其設(shè)計中生成一模板實例就可以在一個新的芯片上使用這個模板。模板還提供一種很好的創(chuàng)建非常大具有數(shù)十到數(shù)百個組件的的系統(tǒng)的方式。例如,如圖11所示的實施例1100,可以按照下列方法創(chuàng)建一個由100個相同的處理器按10×10排列的芯片設(shè)計。首先,由用戶創(chuàng)建一個最終將容納全部100個處理器的芯片。用戶在芯片組件內(nèi)仰取創(chuàng)建一個庫以容納模板。然后,用戶打開庫并創(chuàng)建一個新模板,并設(shè)計出一個內(nèi)核及其必要擴展的簡單設(shè)計。這個設(shè)計將成為創(chuàng)建100個內(nèi)核的模板,參見圖12。內(nèi)核模板完成并保存后,用戶在庫中創(chuàng)建另一個模板。在上述步驟2中創(chuàng)建的內(nèi)核模板這時可以使用了,并且可以在其設(shè)計中使用10個模板創(chuàng)建一行10個處理器。處理器之間按要求互相連接,新模板被存儲在庫中,參見圖13。上述兩個新模板現(xiàn)在可供設(shè)計時使用了。用戶將10個處理器行1402導(dǎo)入其設(shè)計中,然后按要求將他們連接。這樣就生成了每行10個共10行相同處理器的設(shè)計,參見圖14。最后,如果用戶想要正在使用的處理器設(shè)置,可以簡單地編輯原始內(nèi)核模板,所作的改變就會在列模板和項目中“產(chǎn)生漣漪”,從而免除了用戶逐一修改每個內(nèi)核組件(或行組件)的工作。主要有三種在設(shè)計中使用模板的方式。首先,用戶可以選擇一個模板作為其進行設(shè)計的起點。這時來自模板項目的信息可以被拷貝到他們的設(shè)計中,從而對其進行修改。其次,用戶可能會希望在已有的設(shè)計上增加一個模板并對且進行修改。例如,如果他們已經(jīng)在其設(shè)計中加入了一個處理器內(nèi)核,并且還想增加另一個處理器內(nèi)核(基于DSP模板),這一點已經(jīng)實現(xiàn)。這時模板項目信息被直接復(fù)制到他們的項目中,并且用戶可以對新內(nèi)核進行修改使其符合需要。最后,用戶可使在其設(shè)計中利用模板復(fù)制大型結(jié)構(gòu)(例如就象前述的100內(nèi)核)。這種情況下用戶可能不希望模板信息被包括在他們的設(shè)計之中,而是僅要求一個引用。這種方式允許用戶須不需要重新創(chuàng)建其自身的設(shè)計就可以對模板進行更新。由于在項目中只存有一處模板的引用,用戶不改變所有上述類型的其他模板就不能修改一個模板。IP庫使用方法-如前述,本發(fā)明的IP庫是一個有關(guān)組件類型、連接類型和模板等信息的存儲庫,但是針對某一給定設(shè)計沒有可采納的最個數(shù)目。本實施例利用一個存有一個目錄路徑清單的全系統(tǒng)環(huán)境變量。該變量被稱為ARCLIB,它允許IP庫應(yīng)用程序編程接口(applicationprogramminginterface,API)找到設(shè)計者使用的所有全局庫。還有,某一庫中的數(shù)據(jù)可以引用另一庫中的數(shù)據(jù)。例如,為系統(tǒng)工具提供的ARC庫包括若干將被其他庫中的組件類型引用的連接類型。應(yīng)該理解大多數(shù)用戶會將只使用一到兩個庫。例如,存在一個某一公司的所有工程師使用的主庫。該為某一公司提供的主庫可包括提供任何其他該公司已經(jīng)獲得許可IP庫的標準處理器內(nèi)核??蓪⒃搸炫渲脼榇嬗泄こ處焸冋趶氖碌慕M件。他們的本地機器可被配置為如圖15所示。在這一配置1500中,“C\”是他們的本地驅(qū)動器,“S\”是一個所示開發(fā)人員共享的網(wǎng)絡(luò)驅(qū)動器。該處理器內(nèi)核庫存儲于網(wǎng)絡(luò)驅(qū)動器中,因此可以供所有開發(fā)人員使用。這就使庫管理員可隨時加入新的組件或進行錯誤調(diào)試。在本地驅(qū)動器上是他們自己的不希望全范圍共享的組件的用戶庫。在圖式的實施例中前述的ARCLIB環(huán)境變量被配置為具有以下目錄S\ARCLibraryC\UserLibrary[注意目錄“Project1”和“Project2”是IP項目]有經(jīng)驗的用戶可以為其從事的每一個項目設(shè)置一個庫,這樣其為某一特定項目開發(fā)的組件(例如擴展指令)就會成為IP項目的組成部分。該IP管理工具允許用戶將這些組件在必要時轉(zhuǎn)移到另一個庫中。圖16顯示一個高級設(shè)置。再次說明,用戶計算機上的“S\”是一個網(wǎng)絡(luò)驅(qū)動器,因此可以被所有用戶共享,并且它被用于作為全公司庫的主機(例如ARC庫)。“C\”是用戶的本地驅(qū)動器,一般用于存儲非共享的內(nèi)容。圖中的示例的特定用戶已經(jīng)創(chuàng)建了一個用戶庫,用戶在其中保存所有有用的擴展和模板。除了用戶庫以外,用戶還有兩個當前正在從事的項目Project1和Project2(這里是IP項目)。作為這些項目的組成部分,用戶已經(jīng)為ARC創(chuàng)建了一些用戶定制擴展,因此,他們已經(jīng)創(chuàng)建了用于將其存儲的庫。這些庫被存儲于IP項目目錄中,因此對項目是本地的。ARCLIB環(huán)境變量可以保存在以下目錄中S\ARCLibrary(Absolutepath)C\UserLibrary(Absolutepath)除全局庫外,每個項目都有其自己的本地庫。這樣,Project1使用的庫的全部列表可以是如下的S\ARCLibrary(Absolutepath)C\UserLibrary(Absolutepath)Library(Relativepath)類似地,對于Project2S\ARCLibrary(Absolutepath)C\UserLibrary(Absolutepath)Library(Relativepath)注意列表中最后一個庫是相對路徑,它允許用戶不需要編輯到庫的路徑將可將其項目移動。盡管兩個項目使用了被稱為“Library”的庫,并不代表它們是同一庫,因此該路徑是相對于項目路徑的。IP項目使用方法-IP項目就是一個存儲到磁盤上的組件。但是如前所述,組件可以包含有其他組件,因此將一個組件保存到磁盤上也會導(dǎo)致其子組件的保存(及子組件的子組件等等)。在圖示實施例中,每個父組件都是作為硬盤上的一個子目錄保存的,這意味著最終目錄結(jié)構(gòu)與項目結(jié)構(gòu)是相對等的。例如,下面的圖形表示一個簡單的項目。如圖17所示,最高級別是一個芯片組件1702,它包含兩個內(nèi)核1704。圖18顯示了一個被稱為“MyChip”的項目的目錄結(jié)構(gòu)1800。可以看到所有的父組件都有其自己子目錄。因此,在該例中,芯片和內(nèi)核都有子組件,因此都有它們自己的子目錄。很清楚,一個IP庫可以包含于一個項目中的任何一個組件子目錄中。這就是組件如何可以擁有與其相關(guān)的自己的IP庫。在上實例中,設(shè)計者可創(chuàng)建他們自己的擴展用于內(nèi)核1。如圖19所示,用戶已經(jīng)在內(nèi)核11902內(nèi)創(chuàng)建了一個庫來存放其新擴展設(shè)計。用戶一旦指定了新擴展,就通過將其實例化在內(nèi)核中使用該新擴展。該項目具有圖20所示的目錄結(jié)構(gòu)2000。設(shè)計者很有可能會決定在即在內(nèi)核2中也在內(nèi)核1中使用該擴展。為了使該擴展能夠在這兩個內(nèi)核中使用,設(shè)計者必需將該擴展放入一個對兩內(nèi)核都可見的庫中。如圖21所示,放置該庫最明顯的地方(但不是唯一的)就是“MyChip”組件2100?,F(xiàn)在,“我的擴展ension”組件定義2102在兩個內(nèi)核里就都是可見的。前述的本發(fā)明的父-子關(guān)系(包括其他類似關(guān)系)允許設(shè)計者將其項目劃分成邏輯塊,每個邏輯塊都被看做是一個獨立的子項目。本文中使用的術(shù)語IP項目是指一個存儲在存儲設(shè)備(如硬盤)中的組件,并且能夠引用到任何存儲在用戶的硬盤上的組件。一個典型的IP項目包括一個芯片組件,該芯片組件包括一個或多個內(nèi)核,每個該一個或多個內(nèi)核(有可能地)包括一個或多個擴展,如此等等。開發(fā)系統(tǒng)以下討論是對庫和項目在各種開發(fā)系統(tǒng)中使用的描述。例如,一個開發(fā)系統(tǒng)包括一個開發(fā)工具,如前述的設(shè)計軟件(如“ARChitect”)編譯器、調(diào)試器、等等,以及IP管理工具和各種庫。應(yīng)該理解下面的描述僅僅是示例性的,并不代表所有類型的符合本發(fā)明的開發(fā)系統(tǒng)或其組件的各種組合。注意部分下面將要詳細描述的開發(fā)系統(tǒng)利用所謂的“源代碼控制系統(tǒng)”(sourcecodecontrolsystems,SCCS)。這些系統(tǒng)對于大型復(fù)雜系統(tǒng)的編譯常常是非常關(guān)鍵的,特別是在當多名開發(fā)人員同時從事同一組文件時。作為一個例子,可以使用一個會等待需要的資源的所謂的“測試并等待”函數(shù)(比如一個信號量(semaphore))來實現(xiàn)SCCS。如本專業(yè)技術(shù)人員所熟知的,信號量就是用于針對是某個資源的可用性而發(fā)出信號的一種機制。一個或多個過程可以無限等待資源信號量發(fā)出可用性信號??蛇x地,可以使用一個隊列實現(xiàn)上述的測試并等待功能。術(shù)語“隊列”(queue)一般是指一個工序間通信的實體并允許信息在一個發(fā)布的系統(tǒng)上的各個應(yīng)用程序部分之間傳遞。因此某一給定的過程可以向其他任何一個創(chuàng)建其自己的隊列的過程發(fā)出信息。本專業(yè)的普通技術(shù)人員能夠知曉許多工序間隊列的變化形式。源代碼控制系統(tǒng)的特定實現(xiàn)對于程序設(shè)計領(lǐng)域的普通技術(shù)人員都是熟知的,因此這里不再詳細說明。可以預(yù)見處理器內(nèi)核和SoC系統(tǒng)會越來越復(fù)雜,用戶會需要通過SCCS來管理他們的項目。為了便于這種集成工作,本發(fā)明的IP庫和IP項目格式允許單獨地對邏輯部分進行檢入和檢出(check-in/check-out)。源代碼控制系統(tǒng)的設(shè)計初衷是以文件的形式工作(通常是文本文件)。例如,檢入/檢出操作通常是對單個文件或整個子目錄進行的。因此,庫和項目中的邏輯結(jié)構(gòu)由于是以單個文件或子目錄形式存儲而受益。例如,一個具有許多內(nèi)核的多內(nèi)核項目,如果每個內(nèi)核及其擴展都作為一個文件或子目錄存儲,就會得到最好的實現(xiàn)。這樣,用戶可以“檢出”一個要開始從事的內(nèi)核,同時另一個用戶可以從事另一個內(nèi)核。如果所有的內(nèi)核都存儲在同一文件中是不可能做到這一點的。單一用戶開發(fā)系統(tǒng)-圖22是本發(fā)明的單一用戶開發(fā)系統(tǒng)2200。該系統(tǒng)的屬性包括(1)單一用戶;(2)單一IP庫;(3)多IP項目;和(4)無源代碼控制系統(tǒng)。這是一個IC開發(fā)系統(tǒng)最簡單的實例。用戶單獨開發(fā)各個項目。多用戶開發(fā)系統(tǒng)-圖23是本發(fā)明的多用戶開發(fā)系統(tǒng)2300,該系統(tǒng)具有如下屬性(1)多用戶;(2)單一IP庫;(3)多IP項目;和(4)無源代碼控制系統(tǒng)。在這一實施例中,多個用戶開發(fā)不同的項目,但是使用一個(或有限數(shù)目的)組件類型定義庫。因此,它具有一個共享IP庫(由所有用戶使用),但是有多個本地IP項目。SCCS單一用戶開發(fā)系統(tǒng)-圖24是本發(fā)明的帶SCCS的單一用戶開發(fā)系統(tǒng)2400,該系統(tǒng)具有如下屬性(1)單一用戶;(2)單一IP庫;(3)多個存儲于源代碼控制系統(tǒng)(SCCS)中的IP項目。這一實施例與前述的單一用戶開發(fā)系統(tǒng)基本相同,但是引用了用于管理項目的源代碼控制系統(tǒng)。在開發(fā)一個復(fù)雜系統(tǒng)時,建議使用源代碼控制系統(tǒng)。它使用戶能夠在IP項目上使用所有的普通SCCS函數(shù);例如版本控制、檢入、檢出、分支等等。SCCS多用戶開發(fā)系統(tǒng)-圖25是本發(fā)明的帶SCCS的多用戶開發(fā)系統(tǒng)2500,該系統(tǒng)具有如下屬性(1)多用戶;(2)單一IP庫;(3)多個存儲于源代碼控制系統(tǒng)(SCCS)中的IP項目。這一實施例說明了多個用戶是如何利用普通的源代碼控制系統(tǒng)同時進行相同項目的開發(fā)的。這時在SCCS中存儲了一個項目,但是在相關(guān)用戶的本地機器上檢出。多IP庫多用戶開發(fā)系統(tǒng)-圖26是本發(fā)明的多IP庫多用戶開發(fā)系統(tǒng)2600,該系統(tǒng)具有如下屬性(1)多用戶;(2)多IP庫(部分本地,部分共享);(3)多IP項目;和(4)無源代碼控制系統(tǒng)。圖22~25的實施例都只有一個IP庫,有時在多用戶中共享。但是有時用戶可能會希望創(chuàng)建自己的組件,或修改已有的組件,并將這些新的IP段放入一個IP庫中(參見圖26)。在圖26中所示的實施例中,兩個(或更多)用戶共享一個IP庫,該IP庫中存有主要組件(內(nèi)核、擴展等)。他們還有自己的存儲于本地的庫,這些庫中存有用于他們自己的項目的用戶定制的組件。存儲于本地庫中的某些自用組件很有可能是值得在整個開發(fā)組織中使用,比如正在進行類似項目開發(fā)的其他開發(fā)人員可能會需要使用,這時這些組件可以被傳送到共享庫中。多IP庫SCCS多用戶開發(fā)系統(tǒng)-圖27是本發(fā)明的多IP庫SCCS多用戶開發(fā)系統(tǒng)2700,該系統(tǒng)具有如下屬性(1)多用戶;(2)多IP庫(部分本地,部分共享);(3)多IP項目;和(4)SCCS。該實施例類似于上一個實施例,不同之處在于兩個用戶同時在一個共享項目和一個共享IP庫上工作,并且它們都存儲于SCCS中。多IP庫、項目庫和SCCS的多用戶開發(fā)系統(tǒng)-圖28是本發(fā)明的多IP庫、項目庫和SCCS的多用戶開發(fā)系統(tǒng)2800,該系統(tǒng)具有如下屬性(1)多用戶;(2)多IP庫(部分本地,部分共享,部分對項目本地);(3)多IP項目;和(4)SCCS。該實施例中引入了將庫作為項目的部分的概念。兩個(或更多)的用戶使用一個存儲在文件服務(wù)器上的全局IP庫,加上他們自己的本地庫。此外,用戶們正在從事的項目之一要求一些用戶們已經(jīng)創(chuàng)建的項目特定組件。這些組件被存儲在IP項目內(nèi)的一個庫中。庫目錄格式本發(fā)明的實施例中的IP庫的目錄結(jié)構(gòu)是基于Java的包結(jié)構(gòu)。盡管還可以采用其他方式(和語言)。示例性的目錄結(jié)構(gòu)反映了下面的目錄結(jié)構(gòu),并且是基于用句點或“點”分隔的包名稱的。例如,在Java中,可以從目錄‘\com\arc’下的文件‘a(chǎn)rchitect.class’中找到類‘com.arc.architect’。目錄樹的深度沒有限制,因此開發(fā)人員可把他的類以任何方式分組。但是如果包的名稱沒有沖突,最高一級的包應(yīng)該相應(yīng)地命名。有一種命名方法是將公司的URL(去掉‘www’)倒過來為包命名。例如,ARC網(wǎng)站位于‘www.arc.com’,因此將URL倒過來就是‘com.arc.www’。然后將‘www’刪除,留下‘com.arc’。因此,對于任何來自ARC的Java類的最首兩個包的名稱就是‘com’和‘a(chǎn)rc’。該示例性的類應(yīng)該是如下的com.arc.architectcom.arc.builder.filereadercom.arc.ipmt.gui.componenttree這些類將被存儲于圖29所示的目錄結(jié)構(gòu)中。Java-在圖示的實施例中,廣為人知的SunMicrosystems“JavaTM”語言不僅被用來實現(xiàn)本發(fā)明的軟件實施例,還被用于IP模型自身的集成部分。如前述,該“IP模型”的一種體系結(jié)構(gòu)采納了“傳統(tǒng)的”靜態(tài)IP和更大的超集可配置IP。生成設(shè)計IP時,設(shè)計者一般不僅會加入使用組件的基本信息,還會插入各種工具,使終端用戶能夠更有效地使用IP。IP的設(shè)計者不希望為每個終端用戶可能使用的用來開發(fā)自己的IP平臺(Windows,Unix等)編寫插件。因此,本發(fā)明交付IP插件最好使用Java的與平臺無關(guān)和“任何地方運行”代碼。由于更多的第三方開始使用給定的工具箱開發(fā)IP,Java包模型還是一個確保組件名稱不沖突的很好的方式。下面提供了實施例中使用的XML格式的例子<com.arc.data.OptionDef_name_=″entry″name=″cache_bus_width″unit=″bits″valueValidScript=″true″description=″TheInstructionCachebuswidth″><java.lang.Integer_name_=″defaultValue″value=″24″/><java.lang.String_name_=″min″><![CDATA[19]]></java.lang.String><java.lang.String_name_=″max″><![CDATA[26]]></java.lang.String></com.arc.data.OptionDef>從上面的例子可以看出,XML明確地引用了一個Java類;即‘com.arc.data.OptionInst’是一個Java類。Javascript能夠通過以串的形式保存而被嵌入XML,如下面的例子所示<com.arc.ipmodel.libraries.Variable_name_=″entry″name=″buildInformation″><java.lang.String_name_=″script″><![CDATA[∥Createabuilderforthiscomponent.varbuilder=newPackages.com.arc.tool.builder.AbstractBuilder(this);//Generateabuildinformationobjectwiththevhdlfileinfromthiscomponent.varinfo=builder.generateBuildInfo(″VHDL_Child″);//Maketheresultofthisvariableequaltothebuildinformationobject.info;]]></java.lang.String><java.lang.String_name_=″description″/></com.arc.ipmodel.libraries.Variable>Javascript可以通過使用前述的“點運算符”引入XML,下面將繼續(xù)說明。使用點運算符檢索數(shù)據(jù)的基本方法如下。首先,每個路徑總是與某些東西相關(guān)的,通常是一個組件實例。這樣通過路徑就給出了查找要引用的數(shù)據(jù)的基本范圍。該路徑被劃分為若干單詞,例如‘id.options.BusWidth’被分為‘id’、‘options’和‘BusWidth’。路徑的首部分(即‘id’)被檢查,并且請求當前范圍以查找該對象。這時,向組件實例請求‘id’導(dǎo)致返回一個用于查找實例數(shù)據(jù)的對象。接著,請求該返回的實例數(shù)據(jù)對象以便提供該對象,它被稱作‘options’。在這個例子中,將涉及從硬盤裝入一個XML文件,并返回一個Java對象,該Java對象就是文件內(nèi)容。最后,向文件內(nèi)容對象詢問一個名為‘BusWidth’的對象。在這個例子中,BusWidth實際上是一個OptionInstance。如果在尋找過程中的任何時候,軟件發(fā)現(xiàn)了一個不知如何正確處理的對象,就從一個告知如何使用該對象的插件中搜索。這就用到了本文中另有說明的插件框架。通過使用點運算符,腳本可以從組件中檢索數(shù)據(jù)。例如‘id.options.cachewidth’將從選項文件(optionfile)中返回高速緩存寬度。在只規(guī)定了類型和實例數(shù)據(jù)的實施例中,第一個對象必需是‘td’或‘id’,以便指定該數(shù)據(jù)是否應(yīng)該來自類型數(shù)據(jù)或?qū)嵗龜?shù)據(jù)。IP庫和對象-庫可存放許多不同種類的對象,例如組件類型、連接類型、節(jié)點類型、模板等等。重要的是這些對象都有唯一的標識符,道理是和Java類必需唯一標識是一樣的。在Java中,一個類可以利用其完整包路徑被精確地標識;例如‘com.arc.builder.filereader’。同樣的方式也被用于本發(fā)明,以便在各個庫中找到對象。例如來自某一公司(例如ARC公司)的硬件組件可能具有路徑‘com.arc.ip.hardware.cores.tangent5_0’。和Java的類一樣,存儲于庫中的對象在包的子目錄中。下面給出一個共用對象及其庫結(jié)構(gòu)的例子com.arc.ip.hardware.cores.tangent5_0com.arc.ip.hardware.extensions.multipliercom.arc.ip.hardware.extensions.barrelshiftercom.arc.ip.software.libraries.mathlib參見圖30所示的目錄結(jié)構(gòu)。和Java包一樣,頂層包的名稱應(yīng)該采用無沖突命名法(例如將公司的URL倒過來并去掉‘www’)。之后,IP開發(fā)人員可以選擇其他的包名稱。Java類經(jīng)常是作為一個IP組件的組成部分交付的。為了做到這一點,IP開發(fā)人員會將一個或多個類文件作為工具數(shù)據(jù)(下面將詳細說明工具數(shù)據(jù))的組成部分隨組件運送。為了將Java類作為組件的一部分示出,采用了下面的將一個類文件插入一個示例性的ARCtangent處理器的例子圖31是示例性的ARCtangent內(nèi)核IP的目錄結(jié)構(gòu)3100。從圖中可以看出,CoreEditor.class文件存儲于tangent5_0組件下的子目錄中。現(xiàn)在,如果該文件被放入庫中,就得到了圖32的目錄結(jié)構(gòu)3200。通過將庫變?yōu)镴ava類路徑的一部分,就可以通過使用下面的路徑這個類com.arc.ip.hardware.cores.tangent5_0.arc.gui.editor.CoreEditor工具數(shù)據(jù)和實例數(shù)據(jù)本發(fā)明的圖示實施例中的存儲于IP庫和IP項目被分為兩種類型的數(shù)據(jù)(1)工具數(shù)據(jù),它存儲于一個組件、連接和節(jié)點類型中,以便讓工具知道如何處理這些組件;(2)實例數(shù)據(jù),它在IP項目中存儲于組件、連接和節(jié)點中,并且是僅與該組件的該實例相關(guān)的信息。(1)工具數(shù)據(jù)-工具數(shù)據(jù)包括讓工具知道某一特定組件、節(jié)點或連接類型是工具數(shù)據(jù)的信息。因此,例如,工具可能需要找到以下相關(guān)信息1)如何編譯某個給定組件;2)對于某個組件適用哪些警告信息,何時顯示該信息;3)用戶如何將這個組件與其他組件連接;4)用戶可以為這個組件選擇哪些選項,例如當前ARC代碼具有高速緩存、總線寬度等選項;5)編譯器如何識別該組件加入內(nèi)核的指令;6)組件使用的斷點。(2)實例數(shù)據(jù)-任何將組件實例區(qū)分的數(shù)據(jù)都是實例數(shù)據(jù),工具應(yīng)該獲得以下信息1)用戶為某個給定組件選擇的選擇;2)內(nèi)核評估數(shù)據(jù)的地點;3)用戶將組件在屏幕上的顯示位置工具數(shù)據(jù)和實例數(shù)據(jù)存儲方式的一個重要部分就是工具數(shù)據(jù)的尋址方式。例如,某一特定組件類型的工具數(shù)據(jù)可以是以若干兆字節(jié)(Mb)的文件的形式。這些文件通常被安排入邏輯目錄結(jié)構(gòu)。在一具實施例中,建立目錄的方式與安排Java包的方式類似。所有工具數(shù)據(jù)都存在庫中的組件子目錄中。但是應(yīng)該理解,還可以采用與本發(fā)明一致的其他結(jié)構(gòu)。本實施例的實例數(shù)據(jù)存儲于類似的目錄結(jié)構(gòu)中。但是,它存在組件實例目錄下的‘_data_’子目錄中。根據(jù)上述,組件類型和組件實例的目錄結(jié)構(gòu)3302、3304如圖33所示。工具在從庫中尋找工具數(shù)據(jù)時使用完整路徑進行數(shù)據(jù)尋址。此外,類似Java,路徑使用‘.’代替‘/’或‘\’。此外,在規(guī)定這兩大類別時,路徑的首部分必需是‘id’(對實例數(shù)據(jù))或‘td’(對工具數(shù)據(jù))。例如,為了在一個組件類型中尋找一個稱為‘CacheSize’的選項的定義時,路徑可能如下td.options.CacheSize注意,在上面的例子中,‘options’是一個文件,而‘CacheSize’是該文件中的一個XML元素。給出該信息,工具就知道關(guān)于選項定義;即它是何種類型、它可以采用什么范圍的值,等等?,F(xiàn)在,用戶為組件的一特定實例選擇的實際值被確定。為了做到這一點,利用了選項實例數(shù)據(jù)。當工具從項目中尋找各種實例數(shù)據(jù)時,利用完整路徑為數(shù)據(jù)尋址(除了省略‘_data_’目錄并使用‘.’代替‘/’或‘\’)。因此,變量實例‘CacheSize’的完整路徑可能如下id.options.CacheSize使用工具數(shù)據(jù)中的實例數(shù)據(jù)-在本發(fā)明中,工具數(shù)據(jù)頻繁引用實例數(shù)據(jù)。例如,如果用戶為組件選擇了某些選項,可能僅會顯示一條出錯信息。因此工具數(shù)據(jù)可能會尋找類似于以下的內(nèi)容Message“Cachesizecannotbegreaterthan16Kwithabuswidthgreaterthan24”Conditionid.options.CacheSize>16000&&id.options.BusWidth>24上述的條件表達式很明顯是信息工具數(shù)據(jù)的一部分,但是腳本翻譯器必需知道當前的高速緩存大小和總線寬度。高速緩存大小和總線寬度是實例數(shù)據(jù),因此被存儲于組件實例中。注意腳本是如何使用完全合格的到選項的路徑的。這就允許腳翻譯器在目錄結(jié)構(gòu)中搜索需要的文件,并于其后在尋找該文件內(nèi)正確的XML元素。節(jié)點內(nèi)的變量-組件利用變量經(jīng)過節(jié)點交換信息。在一個實施例中變量是作為被執(zhí)行的腳本片段以便向調(diào)用者返回一個Java對象。例如,芯片對象可具有一個‘Clock’選項,用來設(shè)計芯片的時鐘頻率。但是該時鐘頻率必需讓芯片內(nèi)的所有組件知道,這樣它們才能知道運行速度。為了向其他組件通知時鐘頻率,必需有一個組件上的時鐘連接類型和節(jié)點來連接它們。簡單的時鐘連接類型需要兩個節(jié)點類型主節(jié)點類型和從節(jié)點類型。時鐘主節(jié)點類型規(guī)定它的組件必需提供一個時鐘頻率。類似地,時鐘從節(jié)點類型規(guī)定該組件將要接收一個時鐘頻率。當時鐘主節(jié)點被置于芯片之上時,設(shè)計者會得到需要通過該新節(jié)點提供一個時鐘頻率的通知。圖34顯示了這兩個組件3402、3404以及它們的節(jié)點3406、3408和將它們連接的連接3410?,F(xiàn)在,考慮從組件中的一段工具數(shù)據(jù),例如,一條警告信息。和其他工具數(shù)據(jù)一樣,它會引用實例數(shù)據(jù),如變量實例等。Message“Cachesizecannotbegreaterthan32Kwithachipclockspeedgreaterthan200MHz”Conditionid.options.CacheSize>32000&&Clock.ClockSpeed>200通過將‘Clock’節(jié)點的名稱放在變量之前,API就知道如何從芯片的主節(jié)點獲得時鐘頻率。所有的變量都與組件或其節(jié)點之一相關(guān)聯(lián)。為了實際這一點,變量存儲在組件類型的‘variables’目錄下的文件中。每個節(jié)點都有一個相同名稱的‘a(chǎn)xml’文件帶有該節(jié)點可獲得的變量。此外,還有一個‘self.axml’文件帶有僅屬于組件的變量。IP庫中的腳本XML是一種為表達數(shù)據(jù)結(jié)構(gòu)而設(shè)計的格式;它不是一種程序語言。不將自身用于數(shù)據(jù)驅(qū)動的方式的組件類型定義中有若干條需要表達的信息。通常的做法是使用腳本語言擴展XML的功能,因此這些腳本是在運行時被翻譯的,而且代碼可以以文本的方式直接被放入XML內(nèi)。工具數(shù)據(jù)-某些工具數(shù)據(jù)受益于表達式求值。例如,考慮一條存儲關(guān)于某一組件使用的門數(shù)信息的工具數(shù)據(jù)。該信息根據(jù)用戶選擇的選項是可變的。例如,桶形移位器使用的門數(shù)取決于用戶選擇了快或是小(對于更為復(fù)雜的對象,門數(shù)可能是幾個變量的乘積)。例如,桶形移位器的門數(shù)信息可能會按下列方式計算if(id.arc.variables.FastOrSmall==”Small”)1234;else5678;但是,更為復(fù)雜的例子可以是內(nèi)核使用的邏輯門的數(shù)量。這個數(shù)量值需要考慮“高速緩存類型”、“高速緩存大小”、“存儲器子系統(tǒng)”等等。還考慮到使用更換節(jié)點更換一段功能的情況。例如,如果指令高速緩存能被另一個高速緩存組件替換,那么內(nèi)核使用的門數(shù)會減少,而新的組件自己的門數(shù)又會加到總門數(shù)中。因此,內(nèi)核的門數(shù)計算必需知道是否正在使用默認高速緩存。如果發(fā)生了上述,計算時必需考慮到是否已經(jīng)使用了高速緩存覆蓋節(jié)點的情況。請考慮下面的例子......if(CacheOverride.isConnected==false)NumberOfGates+=1234;工具數(shù)據(jù)中另一個腳本的使用是為了變量值加入驅(qū)動工具的數(shù)據(jù)中。例如,考慮一個加到內(nèi)核中的增加了一條新指令的擴展。在一種安排中,每個擴展指令都有一個在生成組件時就設(shè)定的預(yù)定代碼數(shù)。如圖35所示,接口的工具數(shù)據(jù)被用于向各個工具提供信息3500。但是,代碼數(shù)可以是指令連接類型的一個變量。這就使用戶能夠?qū)ζ湎M麨樾轮噶畈捎煤畏N代碼進行選擇。連接類型的工具數(shù)據(jù)包括一個‘com.arc.ARCtangentl.Instruction’,但是對于代碼沒有一個固定值。取而代之的是使用了一段腳本3600,如圖36所示。在圖36中所示的工具數(shù)據(jù)中,代碼數(shù)不再是圖35中的“33”,而是一段求整數(shù)值的腳本。這樣,當用戶從軟件中改變代碼時,這一改變就理想地通過工具鏈傳遞給了編譯器、調(diào)試器等。腳本語言-在本發(fā)明的一個實施例中,采用ECMA腳本作為腳本語言,但是應(yīng)該理解還可以成功地使用其他語言代替。這種語言是基于JavaScript(Netscape)和Jscript(Microsoft)的,并且最初是為創(chuàng)建動態(tài)網(wǎng)頁設(shè)計的。這種語言被歐洲計算機制造商協(xié)會標準化為ECMA腳本,并且成為HTML(HTML是XML的子集)的官方腳本語言。ECMA腳本的語法與Java/C/C++類似,并且是基于宿主程序提供對象并于腳本操作的原理的。類似于C語言的語法結(jié)構(gòu)的好處是許多軟件工程師對它都感到十分熟悉。它包括函數(shù)、if循環(huán)、for循環(huán)、if/else語句,以及普通數(shù)字運算符(+、-、*、/、&、|、>>、<<等)。它提供內(nèi)核對象數(shù)學(xué)函數(shù)(sin,cos,log等等)和串處理。本發(fā)明的一個示例性代碼包括一個完整的JavaScript(ECMA)翻譯器,對嵌入工具數(shù)據(jù)的代碼進行評估。還可用于用戶自己需要的應(yīng)用程序的編譯器,例如,用戶接口腳本、測試腳本。為了使腳本按要求工作,需要獲利一些信息。需要的主要信息如下1.該組件的各個實例和工具數(shù)據(jù)。2.該組件如何連接到其他組件(通過連接)3.來自已連接組件的變量每段腳本都在一個存有所有該腳本可讀寫的Javascript變量的語境內(nèi)執(zhí)行。在組件對象模型中這些Javascript變量中含有關(guān)于實例數(shù)據(jù)和連接的信息。下面的對象是在一個組件的語境中的●它能夠看到當前組件的所有實例數(shù)據(jù)●它能夠看到當前組件的類型的所有工具數(shù)據(jù)●它能夠看到當前組件的所有變量節(jié)點●它能夠看到所有連接另一端的變量上述內(nèi)容在圖37中的關(guān)系3700中用圖形表示。如果執(zhí)行的腳本是在‘Component’中的,那么它就應(yīng)該能夠‘看到’下面的變量Current1,Current2和Current3-它們作為腳本屬于相同組件。Var1和Var2-它們屬于組件的一個節(jié)點。Var3和Var4-它們屬于連接另一端的一個節(jié)點。但是,它不能‘看到’Other1、Other2和Other3,因為它們在范圍之外。節(jié)點-和實例數(shù)據(jù)的情況一樣,腳本能夠獲取關(guān)于節(jié)點的信息。對于每個節(jié)點都存在一個同名語境中的對象。該對象腳本可讀的不同成員變量。這些成員如下1)numLinks-連接到這一節(jié)點的數(shù)量。2)[n]-得到連接到此節(jié)點的第n個連接。下面的例子能夠說明這些概念。實例1-下面的代碼說明一個高速緩組件如何能夠找到相關(guān)內(nèi)核的信息if(CoreSite.numLinks>0){//Checktomakesureourbuswidthis>=tothecore’sif(id.options.CacheAddressBusWidth>=CoreSite..MemoryBusWidth)){returntrue;}returnfalse;}實例2-這個例子說明了這一方式如何能用于定義非常復(fù)雜的關(guān)系。在這個例子中,內(nèi)核組件具有一個稱為‘Signal’的連接節(jié)點。所有插入該連接節(jié)點的組件都對信號加入一個延遲。內(nèi)核必需確認所有組件的總延遲小于1.0。該延遲可以是一個單一連接類型的擴展角色的一個變量。內(nèi)核組件也可具有一個警告信息,以便在延遲大于1時告知用戶。該警告具一相關(guān)聯(lián)的腳本,該腳本被評估以便判斷該警告是否有效。下面是腳本的例子。<prelisting-type="program-listing"> //Thiswillstorethetotaldelay. varDelay=0.0; //Getthenumberoflinkstothesignalinterface varnumLinks=Signal.numLinks; for(Link=0;Link<numLinks;Link++) { //Addthedelayoftheextensiontothetotal. Delay+=Signal[Link].Delay); } //Iftotaldelayislessthan1,thenwarningisnotshown. if(Delay<1.0) false; else //Totaldelaymustbe>=1,soshowwarning. true;</pre>可以看出,腳本在所有被連接的組件中迭代操作,并將它們的延遲值累加得到一總數(shù)。該總數(shù)與1.0進行比較以確定其是否有效。實例3-在上述實例中,用戶以選擇不同擴展指令使用的操作碼,如果兩個擴展試圖使用同一操作碼,可以出現(xiàn)一個警告信息。該警告信息可以用一段腳本實現(xiàn),該腳本可被評估以確定該警告是否有效。該腳本可以按如下配置<prelisting-type="program-listing"> //Allocateanarraytoholdtheusedcodenumbers. varOpcodes=newArray(); //Getthenumberoflinkstotheinstructioninterface varnumLinks=InstructionLinkSite.numLinks; //Holdstheresultofthisscript. varresult=false; for(Link=0;Link<numLinks;Link++) { varcode=InstructionLinkSite.[Link].Code; //Seeifthecodeisalreadyused. if(Opcodes[code]==true){ //Opcodeisalreadyused,sodisplaywarning. result=true; break; } //Markitasusedinthearray. Opcodes[code]=true; } //Returntheresult. result;</pre>此代碼對一個陣列進行分配,并且對于每個與內(nèi)核相連接的指令擴展,它將代碼號給出的陣列位置設(shè)置為“真”。如果任何擴展試圖使用一個已經(jīng)使用的代碼號,那個陣列入已經(jīng)被設(shè)為真,這時顯示警告。樹管理-本發(fā)明還提供加強的樹管理。這一功能是基于前述的插件框架的。當一個工具遇到一段不知如何插入樹中的數(shù)據(jù)時,就搜索一個能夠指示它如何處理的插件。例如,如果第三方開發(fā)人員想加入關(guān)于需要向一個C文件加入什么樣的包含文件的信息時,這條信息可以是一個文件名列表的形式。假設(shè)前述工具不知道如何在樹中顯示這一信息,該開發(fā)人員可能為其數(shù)據(jù)寫一個將告知工具如何將其加入樹中的“treeableprovider”。工具需要知道的信息包括子組件的數(shù)量,應(yīng)顯示何種圖標等等。這一方式的優(yōu)點在于軟件可以被第三方開發(fā)人員或終端用戶擴展,而不需要原開發(fā)人員輸入。這就允許其他為了自身利益想要將自己的數(shù)據(jù)加入組件而為IP加入支持的其他單位。工具可擴展性-如前所述,本發(fā)明利用基于Java反射機制的可擴展工具在運行時找到類。這就允許終端用戶向應(yīng)用程序中加入自己的類而不需要原設(shè)計者進行額外的修改。這些包括用于裝入和查看不同文件類型的插件,用于定制庫和項目樹的插件,用于查看存儲于組件中的不同類型的數(shù)據(jù),等等。例如,如果第三方希望向庫中加入包含其自有數(shù)據(jù)格式的文件,可以創(chuàng)建一個用于向軟件中裝放該數(shù)據(jù)并可在GUI中查看的插件。在實施例中是通過Java類或Jar文件放入啟動時就進行分析以找到插件位置的存儲設(shè)備(如系統(tǒng)硬盤)上的一個目錄中來實現(xiàn)的??梢酝ㄟ^把Java類放入正確的目錄而將插件加入工具。然后該工具利用Java反射檢查這些類,以確定其能力。這些插件可以自動執(zhí)行任務(wù)。例如,某個插件可將一個類串行化,或為一段新數(shù)據(jù)提供一個編輯器。生成HTML文檔-在本發(fā)明的另一個方面中,應(yīng)用程序為用戶選定的特定項目配置自動生成文檔。在定制的HTML用戶文檔中記錄了各個方面。其中包括的信息是從組件定義中的數(shù)據(jù)動態(tài)建立但由組件實例中的選項配置的,這表明為一個項目建立一個定制的文檔是非常重要的。例如,如果在設(shè)計中包含有乘法器-指令集文檔中就要包括該擴展增加的指令并顯示組件使用的門數(shù)。對乘法器選項進行配置以便將乘法器設(shè)計為小型實現(xiàn),而對于該組件門數(shù)會減少。該信息有必要在定制HTML文檔中反映出來。在生成HTML文檔的過程中,從項目中包括的所有組件中提取數(shù)據(jù),大多數(shù)情況下這些組件都是硬件組件-但實際上它可以適用于軟件實施例中。數(shù)據(jù)被比較、格式化,并作為HTML以用戶可讀的表格形式輸出。硬件項目生成表的例子是設(shè)計總結(jié)、中斷、寄存器組、指令集和門數(shù)。編譯定序器-在本發(fā)明的實施列中,編譯設(shè)計的過程由編譯定序器控制。它在編譯過程中每個原子步(atomicstep)都具有一個獨立的“序列”(sequence),它允許用戶更好地控制現(xiàn)有技術(shù)的方法。舉例來說,用戶可以決定對測試代碼重新編譯并返回驗證試驗,而不需要重新編譯HDL或編譯腳本,這樣在開發(fā)新組件時會節(jié)省許多時間。該序列器受用戶設(shè)定的選項的控制。例如用戶通過將數(shù)值設(shè)定為真或假來決定在序列中的哪一步執(zhí)行。每個序列步都是一段能夠從項目和IP庫中存取實例和工具數(shù)據(jù)的JavaScript。還以預(yù)定義JavaScript的形式提供了用于執(zhí)行一般動作的附加功能,如運行命令行程序、向輸出窗口記錄消息和文件處理。用戶還可隨意向框架中加入這些全部存儲于IP庫本身的預(yù)定義的腳本。拓撲顯示-本發(fā)明的實施例還包括一個“拓撲視圖”,適合于查看用戶設(shè)計的圖形表示。拓撲數(shù)據(jù)存儲于每個組件中并給出該組件如果包括在設(shè)計是應(yīng)該如何顯示的,不論是與其他組件分組或獨立表示。該拓撲視圖然后自動處理圖形、分組和圖形顯示,特定的連接信息。它還提供一個用于選擇組件的“指向并點擊”界面,這樣就可以改變其選項值并設(shè)計中將其刪除。結(jié)合可顯示當前IP庫中所有可用組件的組件查看器后,它還可以提供“拖放”方式用于從向當前項目加入組件。利用組件提供的數(shù)據(jù)它還提供給用戶關(guān)于在某一特定設(shè)計中每種類型的組件的允許數(shù)量,從而防止用戶創(chuàng)建不合法的組件組合,例如,將多個指令高速緩存連接到一個內(nèi)核。附錄II提供了實現(xiàn)這一拓撲功能的示例性代碼。集成電路(IC)設(shè)備如前述,本申請受讓人的ARCtangent處理器內(nèi)核配置被用作上述實施例的IC設(shè)備的基礎(chǔ)。但是如果需要還可以用其他的配置替代。該設(shè)備是利用下述的方法定制的VHDL設(shè)計得到的,然后將其綜合到邏輯層次的表達,然后用編譯、布圖和制造技術(shù)等半導(dǎo)體生產(chǎn)中常用的手段將其實現(xiàn)為物理器件。例如,本發(fā)明與0.35、0.18和0.1微米工藝兼容,并且最終可用于更小或其他精度的工藝。一個示例性的器件制造工藝是IBM公司的0.1微米“BlueLogic”Cu-11,當然也可采用其他工藝本領(lǐng)域的技術(shù)人員應(yīng)該理解,本發(fā)明的IC設(shè)備還可包含任何一常見的外圍設(shè)備,如串行通信設(shè)備、并行端口、計時器、計數(shù)器、高電流驅(qū)動器、模/數(shù)轉(zhuǎn)換器、數(shù)/模轉(zhuǎn)換器、中斷處理器、LCD驅(qū)動器、存儲器等其他類似設(shè)備。還有,該處理器還可包括其他用戶定制或?qū)S秒娐?,如形成一個如前述的在一個組件上提供具有若干不同功能的SoC設(shè)備。本發(fā)明不受外圍設(shè)備的類型、數(shù)量或復(fù)雜程度的限制,也不受其他可以結(jié)合本發(fā)明的方法和裝置的電路的限制。而且,即使存在限制也是因為未來仍會不斷進步提高的半導(dǎo)體工藝的物理能力造成的。因此可以預(yù)見隨著半導(dǎo)體工藝水平的提高,可以使用本發(fā)明的集成度和復(fù)雜程度會進一步增加。以上所述,僅是本發(fā)明的較佳實施例而已,并非對本發(fā)明作任何形式上的限制,雖然本發(fā)明已以較佳實施例揭露如上,然而并非用以限定本發(fā)明,任何熟悉本專業(yè)的技術(shù)人員,在不脫離本發(fā)明技術(shù)方案范圍內(nèi),當可利用上述揭示的方法及技術(shù)內(nèi)容作出些許的更動或修飾為等同變化的等效實施例,但是凡是未脫離本發(fā)明技術(shù)方案的內(nèi)容,依據(jù)本發(fā)明的技術(shù)實質(zhì)對以上實施例所作的任何簡單修改、等同變化與修飾,均仍屬于本發(fā)明技術(shù)方案的范圍內(nèi)。權(quán)利要求1.一種計算機化系統(tǒng),用于生成集成電路(IC)的設(shè)計,其特征在于該計算機化系統(tǒng)包括一面向?qū)ο蟮脑O(shè)計環(huán)境。2.根據(jù)權(quán)利要求1所述的計算機化系統(tǒng),其特征在于該計算機化系統(tǒng)還進一步包括一個調(diào)試環(huán)境,該調(diào)試環(huán)境包括一個腳本調(diào)試器,其被適合于(1)可以在被調(diào)試的代碼中設(shè)置至少一個斷點;(2)可以在生成所述設(shè)計的過程中對所述代碼進行逐步調(diào)試。3.根據(jù)權(quán)利要求1或2所述的計算機化系統(tǒng),其特征在于其中所述環(huán)境被適于可以對所述IC進行用戶可配置,其中所述IC的至少一個組件是按照一個對象來描述的。4.根據(jù)權(quán)利要求3所述的計算機化系統(tǒng),其特征在于其中對所述組件的所述描述的至少一部分是被封裝的。5.根據(jù)權(quán)利要求3所述的計算機化系統(tǒng),其特征在于其中對所述組件的所述描述的至少一部分進行交互作用,至少一個所述進行交互作用的組件具有至少一個與其關(guān)聯(lián)的連接。6.根據(jù)權(quán)利要求1所述的計算機化系統(tǒng),其特征在于其中所述設(shè)計中的對象表示組件包括兩種類型和實例。7.根據(jù)權(quán)利要求6所述的計算機化系統(tǒng),其特征在于其中至少一個所述類型被存儲在至少一個庫中,并且至少一個所述實例被存儲在至少一個項目中。8.根據(jù)權(quán)利要求7所述的計算機化系統(tǒng),其特征在于其還進一步包括至少一個連接類型和至少一個連接實例。9.根據(jù)權(quán)利要1所述的計算機化系統(tǒng),其特征在于其中所述面向?qū)ο蟮沫h(huán)境被適合于以一種層次數(shù)據(jù)結(jié)構(gòu)將多個組件實例作為一項目存儲。10.根據(jù)權(quán)利要求9所述的計算機化系統(tǒng),其特征在于其中所述層次數(shù)據(jù)結(jié)構(gòu)包括一個樹結(jié)構(gòu),所述項目的每個所述組件實例都包括與所述系統(tǒng)相關(guān)聯(lián)的一個存儲設(shè)備上的其自身的目錄11.根據(jù)權(quán)利要求10所述的計算機化系統(tǒng),其特征在于其中至少一個所述組件具有一個適合于存儲與該組件相關(guān)聯(lián)的數(shù)據(jù)的第一目錄,和一個包括至少一個所述組件所擁有的至少一個庫元素構(gòu)成的第二目錄。12.根據(jù)權(quán)利要求1所述的計算機化系統(tǒng),其特征在于其中所述的面向?qū)ο蟮沫h(huán)境具有一個適合于與多個與所述系統(tǒng)相關(guān)聯(lián)的不同種類的工具相兼容的標準化數(shù)據(jù)結(jié)構(gòu)。13.根據(jù)權(quán)利要求1所述的計算機化系統(tǒng),其特征在于其中所述的設(shè)計中的多個組件包括封裝的對象,所述封裝的對象包含提供給所述至少一個工具的關(guān)于可如何將兩個或更多所述組件連接的信息。14.根據(jù)權(quán)利要求1所述的計算機化系統(tǒng),其特征在于其中與所述的設(shè)計相關(guān)聯(lián)的多個組件包括封裝對象,并且每個所述組件具有至少一個接口,所述封裝對象每個都包含規(guī)定至少一個所述至少一個節(jié)點的默認連接配置信息。15.根據(jù)權(quán)利要求14所述的計算機化系統(tǒng),其特征在于其中所述的信息包括一個適合于被一個工具起動后運行的腳本,所述腳本的所述運行描述所述配置。16.根據(jù)權(quán)利要求1所述的計算機化系統(tǒng),其特征在于其中所述的環(huán)境包括存儲于一個庫中的多個不同的編譯過程。17.根據(jù)權(quán)利要求16所述的計算機化系統(tǒng),其特征在于其中至少一個所述編譯過程是與至少一個項目相關(guān)聯(lián)的,所述至少一個編譯過程規(guī)定與所述項目相關(guān)聯(lián)的一個設(shè)計的構(gòu)建方式。18.根據(jù)權(quán)利要求16所述的計算機化系統(tǒng),其特征在于其中至少一個所述的編譯過程是被適合于生成具有唯一的實例化變量名稱的輸出,從而允許所述設(shè)計中使用的所述輸出進行多份復(fù)制。19.根據(jù)上述所有權(quán)利要求所述的計算機化系統(tǒng),其特征在于其中所述的設(shè)計包括多個組件定義,至少部分的所述組件定義中的每個組件定義都包括至少部分的GUI代碼。20.根據(jù)權(quán)利要求19所述的計算機化系統(tǒng),其特征在于其中所述GUI代碼包括Java語言GUI對象。21.根據(jù)權(quán)利要求19所述的計算機化系統(tǒng),其特征在于其中所述GUI代碼包括作為Java類分配的能夠被動態(tài)包括進一個運行中的應(yīng)用程序的例程。22.根據(jù)上述所有權(quán)利要求所述的計算機化系統(tǒng),其特征在于其中所述面向?qū)ο蟮脑O(shè)計環(huán)境通過一個網(wǎng)絡(luò)接口與至少一個遠程信息源連接,其中所述的環(huán)境被配置為與所述至少一個信息源協(xié)作并通過所述網(wǎng)絡(luò)接口自動獲取組件或其他相關(guān)數(shù)據(jù)的更新。23.根據(jù)權(quán)利要求1所述的計算機化系統(tǒng),其特征在于其還進一步包括至少一個基于GUI函數(shù);一設(shè)計庫;和存放于所述庫中的多個不同種類的設(shè)計組件;其中所述的庫按照一個或多個標準將所述組件分類,所述至少一個GUI函數(shù)根據(jù)其分類標準識別特定組件并隨后將其顯示。24.根據(jù)權(quán)利要求1所述的計算機化系統(tǒng),其特征在于其中所述的設(shè)計環(huán)境包括多個可以在該設(shè)計內(nèi)被連接連接起來的設(shè)計組件,所述連接包括至少一個人類可讀的部分。25.根據(jù)權(quán)利要求1所述的計算機化系統(tǒng),其特征在于其中所述的設(shè)計包括多個以封裝對象表示的組件,所述封裝對象的至少一部分包含有描述所述被表示的組件的至少一個依存關(guān)系的信息。26.根據(jù)權(quán)利要求25所述的計算機化系統(tǒng),其特征在于其中至少一個所述被表示的組件包括一個指令高速緩存,并且所述信息包括一最大存儲總線寬度。27.根據(jù)權(quán)利要求25所述的計算機化系統(tǒng),其特征在于其中信息包括至少一個Javascript。28.根據(jù)權(quán)利要求1所述的計算機化系統(tǒng),其特征在于其中所述的設(shè)計包括多個由封裝對象表示的組件,所述封裝對象包括至少一個包括有設(shè)計層次信息的接口。29.根據(jù)權(quán)利要求28所述的計算機化系統(tǒng),其特征在于其中所述的至少一個接口包括相關(guān)組件的第一和第二接口,該第一接口包括一父接口,該第二接口包括一個子接口。30.根據(jù)上述所有權(quán)利要求所述的計算機化系統(tǒng),其特征在于其還進一步包括一用戶可擴展軟件工具箱,其中有多個適合于允許添加至少一個插件模塊的工具。31.根據(jù)權(quán)利要求30所述的計算機化系統(tǒng),其特征在于其中至少一個對象類文件被存放于一存儲設(shè)備的一預(yù)定目錄中,所述工具對所述至少一個類文件進行檢驗,以便允許所述工具使用所述至少一個插件模塊。32.根據(jù)上述所有權(quán)利要求所述的計算機化系統(tǒng),其特征在于其中所述面向?qū)ο蟮脑O(shè)計環(huán)境包括數(shù)據(jù)的庫,并且存儲于所述庫中的數(shù)據(jù)適合于使用被劃分為多個子組件的路徑指定。33.根據(jù)權(quán)利要求32所述的計算機化系統(tǒng),其特征在于其中所述多個子組件包括一指示類型或?qū)嵗龜?shù)據(jù)的第一子組件,和多個被連續(xù)地調(diào)用以返回與其相關(guān)聯(lián)的一個或多個對象的其他組件。34.根據(jù)權(quán)利要求1所述的計算機化系統(tǒng),其特征在于其中所述的設(shè)計包括多個封裝對象表示的組件,每個所述對象有至少一個與另一對象的接口,所述至少一個接口包含經(jīng)過該接口傳送的數(shù)據(jù)的有關(guān)信息。35.根據(jù)權(quán)利要求34所述的計算機化系統(tǒng),其特征在于其中所述的多個組件包括一處理器內(nèi)核和一擴展指令,所述包括HDL的信息必需加入與用于實現(xiàn)該擴展的內(nèi)核相關(guān)聯(lián)的HDL。36.根據(jù)權(quán)利要求34所述的計算機化系統(tǒng),其特征在于其中所述信息包括一個為了檢索所述數(shù)據(jù)而運行時評估的腳本。37.根據(jù)上述所有權(quán)利要求所述的計算機化系統(tǒng),其特征在于其還進一步包括至少一個可擴展GUI樹,該可擴展GUI樹允許用戶指定該樹與至少一個插件模塊之間的關(guān)系。38.根據(jù)上述所有權(quán)利要求所述的計算機化系統(tǒng),其特征在于其還進一步被適合于自動生成與所述用戶選定的特定配置相關(guān)聯(lián)的用戶定制的文檔資料。39.根據(jù)上述所有權(quán)利要求所述的計算機化系統(tǒng),其特征在于其還進一步包括一編譯定序器,其適合于允許用戶在生成所述設(shè)計時有選擇地利用多個獨立的編譯定序器中的一個或多個。40.根據(jù)權(quán)利要求39所述的計算機化系統(tǒng),其特征在于其中所述多個定序器包括一編譯序列和一驗證序列。41.根據(jù)權(quán)利要求1所述的計算機化系統(tǒng),其特征在于其還進一步包括至少一個模塊,適合于根據(jù)所述設(shè)計內(nèi)每個組件提供的信息生成一個所述設(shè)計的拓撲表示。42.根據(jù)權(quán)利要求41所述的計算機化系統(tǒng),其特征在于其中所述設(shè)計的至少一部分組件的是用封裝對象表示的,每個所述封裝對象包括所述模塊使用的信息以便匯編所述拓撲表示。43.根據(jù)權(quán)利要求42所述的計算機化系統(tǒng),其特征在于其中所述拓撲表示是作為GUI環(huán)境的一部分來顯示的,所述GUI環(huán)境適合于利用所述封裝對象內(nèi)的第二信息并在所述設(shè)計中出現(xiàn)不合法的組件組合時向用戶提供指示。44.一種在一個具有多個組件的集成電路設(shè)計中生成層次結(jié)構(gòu)的方法,該方法包括以下步驟為至少部分所述多個組件提供代碼,每個所述至少部分多個組件都有一個第一類型節(jié)點;為所述多個組件中沒有所述代碼的組件定義一第二類型節(jié)點;連接至少部分所述第一和第二節(jié)點,從而生成一個層次結(jié)構(gòu)。全文摘要本發(fā)明是關(guān)于一種管理集成電路設(shè)計的裝置和方法,包括對設(shè)計的配置、設(shè)計參數(shù)和設(shè)計功能的管理,其中設(shè)計者能夠控制定制指令或其他設(shè)計元素。在一個實施例中,使用了面向?qū)ο蠓抡婕夹g(shù)(202、204)。為了增強在設(shè)計、層次結(jié)構(gòu)和設(shè)計過程中的其他方面中關(guān)于與其他組件的接口功能,運用了設(shè)計迭代、組件封裝、人類可讀文件格式的使用、可擴展動態(tài)GUI和工具箱及其他特點。文檔編號G06F17/50GK1666202SQ03815223公開日2005年9月7日申請日期2003年4月25日優(yōu)先權(quán)日2002年4月25日發(fā)明者庫克斯蒂芬,布洛德利西蒙,比爾頓馬克,法爾馬克,文波利本,翰威特李,格洛夫蒂姆申請人:Arc國際公司