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