亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

數(shù)據(jù)處理系統(tǒng)中模擬處理的方法以及所述數(shù)據(jù)處理系統(tǒng)的制作方法

文檔序號(hào):6458274閱讀:380來(lái)源:國(guó)知局
專利名稱:數(shù)據(jù)處理系統(tǒng)中模擬處理的方法以及所述數(shù)據(jù)處理系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本發(fā)明一般地涉及設(shè)計(jì)和模擬數(shù)字設(shè)備、模塊和系統(tǒng),具體地說(shuō),涉及用于利用硬件描述語(yǔ)言(HDL)模型進(jìn)行數(shù)字設(shè)備、模塊和系統(tǒng)的計(jì)算機(jī)模擬的方法和系統(tǒng)。更具體地說(shuō),本發(fā)明涉及支持模擬中的打印事件的方法、系統(tǒng)和程序產(chǎn)品。

背景技術(shù)
檢驗(yàn)數(shù)字設(shè)計(jì)的邏輯正確性并改正設(shè)計(jì)中的缺點(diǎn)(如有必要)是大多數(shù)數(shù)字設(shè)計(jì)過(guò)程中非常重要的步驟。通過(guò)實(shí)際建立網(wǎng)絡(luò)或在計(jì)算機(jī)上模擬網(wǎng)絡(luò)來(lái)測(cè)試邏輯網(wǎng)絡(luò)。隨著邏輯網(wǎng)絡(luò)變得極為復(fù)雜,有必要在真正建立設(shè)計(jì)之前模擬設(shè)計(jì)。特別是在設(shè)計(jì)實(shí)現(xiàn)為集成電路時(shí),因?yàn)榧呻娐返闹圃煨枰喈?dāng)多的時(shí)間并且對(duì)錯(cuò)誤的糾正成本高昂。數(shù)字設(shè)計(jì)模擬的目標(biāo)是檢驗(yàn)設(shè)計(jì)的邏輯正確性。
在由常規(guī)的電子計(jì)算機(jī)輔助設(shè)計(jì)(ECAD)系統(tǒng)支持的典型自動(dòng)化設(shè)計(jì)過(guò)程中,設(shè)計(jì)人員使用硬件描述語(yǔ)言(HDL)(例如,VHDL)輸入高級(jí)描述,由此生成各種電路塊及其互連的表示。ECAD系統(tǒng)將設(shè)計(jì)描述編輯為最適合模擬的格式。然后使用模擬器來(lái)在開(kāi)發(fā)電路布圖之前檢驗(yàn)設(shè)計(jì)的邏輯正確性。
模擬器通常是在數(shù)字表示上運(yùn)行的軟件工具,或是電路的模擬模型,以及是表示數(shù)字系統(tǒng)輸入的輸入激勵(lì)(即,測(cè)試用例)的列表。模擬器生成電路的響應(yīng)的數(shù)值表示,然后可以在顯示屏上作為值的列表來(lái)查看,或通常由獨(dú)立軟件程序進(jìn)一步解釋并以圖形形式在顯示屏上呈現(xiàn)。模擬器可以在通用計(jì)算機(jī)或通常附加到通用計(jì)算機(jī)且特別針對(duì)模擬設(shè)計(jì)的另一電子裝置上運(yùn)行。完全以軟件形式在通用計(jì)算機(jī)上運(yùn)行的模擬器將在下文中稱為“軟件模擬器”。在特別設(shè)計(jì)的電子裝置的協(xié)助下運(yùn)行的模擬器將在下文中稱為“硬件模擬器”。
通常,軟件模擬器執(zhí)行極為大量的計(jì)算并且在用戶看來(lái)運(yùn)行緩慢。為了優(yōu)化性能,設(shè)計(jì)了模擬模型的格式以供模擬器高效地使用。硬件模擬器本質(zhì)上要求包括電路描述的模擬模型以特別設(shè)計(jì)的格式進(jìn)行傳送。在兩種情況下,都要求從HDL描述到模擬格式的轉(zhuǎn)換(在下文中稱為可執(zhí)行模擬的模型)。
由模擬器將測(cè)試用例應(yīng)用到可執(zhí)行模擬的模型的結(jié)果在本文中稱為“全部事件跟蹤”(AET)。AET包含可執(zhí)行模擬的模型中針對(duì)每個(gè)模擬周期的信號(hào)和/或存儲(chǔ)元件的邏輯值。例如,可以使用AET查看器來(lái)將AET的內(nèi)容呈現(xiàn)給用戶以便檢查和分析,以協(xié)助用戶檢測(cè)和確定設(shè)計(jì)中錯(cuò)誤的原因。如將理解的,AET通常在逐周期的基礎(chǔ)上呈現(xiàn)所需的信號(hào)和鎖存值。因此,為了分析模擬結(jié)果,用戶必須手動(dòng)梳理AET以標(biāo)識(shí)所需的一個(gè)或多個(gè)特定周期,并在沒(méi)有注釋文本幫助的情況下解釋原始信號(hào)或鎖存值。本發(fā)明改進(jìn)了這種常規(guī)的模擬結(jié)果分析的方法。


發(fā)明內(nèi)容
根據(jù)模擬處理的方法,接收一個(gè)或多個(gè)描述數(shù)字設(shè)計(jì)的HDL源文件,所述數(shù)字設(shè)計(jì)包括多個(gè)分級(jí)布置的設(shè)計(jì)實(shí)體。所述一個(gè)或多個(gè)HDL源文件包括一個(gè)或多個(gè)語(yǔ)句,所述語(yǔ)句實(shí)例化所述多個(gè)分級(jí)布置的設(shè)計(jì)實(shí)體中的多個(gè)打印事件,其中每個(gè)打印事件在所述數(shù)字設(shè)計(jì)中具有關(guān)聯(lián)的消息和至少一個(gè)關(guān)聯(lián)的信號(hào)。處理所述一個(gè)或多個(gè)HDL源文件以獲得包括數(shù)據(jù)結(jié)構(gòu)的可執(zhí)行模擬的模型,所述數(shù)據(jù)結(jié)構(gòu)描述了為所述可執(zhí)行模擬的模型定義的所述多個(gè)打印事件,并且將所述多個(gè)打印事件中的每個(gè)事件與其相應(yīng)關(guān)聯(lián)的信號(hào)進(jìn)行關(guān)聯(lián)。
本發(fā)明的所有目標(biāo)、特性和優(yōu)點(diǎn)將在以下詳細(xì)的書(shū)面說(shuō)明中變得顯而易見(jiàn)。



在所附權(quán)利要求書(shū)中說(shuō)明了被認(rèn)為是本發(fā)明特性的新穎特征。但是,當(dāng)結(jié)合附圖閱讀時(shí),通過(guò)參考以下對(duì)示例性實(shí)施例的詳細(xì)說(shuō)明,可以最佳地理解本發(fā)明本身及其優(yōu)選使用方式、進(jìn)一步的目標(biāo)及優(yōu)點(diǎn),這些附圖是 圖1是示例性數(shù)據(jù)處理系統(tǒng)的圖示; 圖2示出了圖1中示出的數(shù)據(jù)處理系統(tǒng)的代表性硬件環(huán)境; 圖3A是示出了可以根據(jù)本發(fā)明的教導(dǎo)實(shí)施的數(shù)字設(shè)計(jì)實(shí)體的簡(jiǎn)化方塊圖; 圖3B是示出了可以根據(jù)本發(fā)明的教導(dǎo)實(shí)施的模擬模型的圖形表示; 圖3C是示出了可以根據(jù)本發(fā)明的教導(dǎo)實(shí)施的模型建立過(guò)程的流程圖; 圖3D是示出了可以根據(jù)本發(fā)明的教導(dǎo)實(shí)施的數(shù)據(jù)結(jié)構(gòu)的方塊圖; 圖4A是表示設(shè)備(instrumentation)實(shí)體的簡(jiǎn)化方塊圖; 圖4B是根據(jù)本發(fā)明的教導(dǎo)實(shí)施的模擬模型的簡(jiǎn)化方塊圖; 圖4C示出了可以根據(jù)本發(fā)明的教導(dǎo)使用的HDL句法的示例性部分; 圖4D是示出根據(jù)本發(fā)明的教導(dǎo)的模型建立過(guò)程的流程圖; 圖4E是根據(jù)本發(fā)明的教導(dǎo)構(gòu)建的存儲(chǔ)器數(shù)據(jù)結(jié)構(gòu)的方塊圖表示; 圖5A是示出了包含多個(gè)設(shè)計(jì)和設(shè)備實(shí)體的模擬模型的方塊圖; 圖5B示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于在模擬模型中聲明事件的數(shù)據(jù)結(jié)構(gòu); 圖5C示出了圖5A中的模擬模型的擴(kuò)展事件數(shù)據(jù)結(jié)構(gòu)的列表; 圖5D示出了根據(jù)本發(fā)明的備選實(shí)施例的用于在模擬模型中聲明事件的數(shù)據(jù)結(jié)構(gòu); 圖6A示出了根據(jù)本發(fā)明的教導(dǎo)實(shí)現(xiàn)的具有包含隨機(jī)設(shè)備邏輯的設(shè)備實(shí)體的代表性目標(biāo)設(shè)計(jì)實(shí)體; 圖6B示出了根據(jù)本發(fā)明的教導(dǎo)的用于實(shí)現(xiàn)HDL設(shè)計(jì)實(shí)體中的設(shè)備邏輯的示例性HDL文件; 圖7是根據(jù)本發(fā)明的實(shí)施了打印事件和打印事件組的簡(jiǎn)化模擬模型的方塊圖; 圖8是與圖7的模擬模型對(duì)應(yīng)的打印事件表的方塊圖; 圖9是示出了根據(jù)本發(fā)明處理實(shí)施的可執(zhí)行模擬的模型和關(guān)聯(lián)的輸入文件的過(guò)程流程圖; 圖10是根據(jù)本發(fā)明的軟件模擬環(huán)境的示例性視圖; 圖11是根據(jù)本發(fā)明的用于啟用打印事件和打印事件組的示例性過(guò)程的高級(jí)邏輯流程圖;以及 圖12是根據(jù)本發(fā)明的用于呈現(xiàn)打印事件的示例性過(guò)程的高級(jí)邏輯流程圖。

具體實(shí)施例方式 本發(fā)明提供了數(shù)字電路設(shè)計(jì)的準(zhǔn)確和全面的監(jiān)視,其中設(shè)計(jì)人員使用與針對(duì)設(shè)計(jì)本身所使用的句法類似的硬件描述語(yǔ)言(HDL)句法來(lái)創(chuàng)建設(shè)備模塊。雖然HDL適合數(shù)字設(shè)計(jì)人員的需要,但是HDL也可以有效地用于許多檢查功能。根據(jù)本發(fā)明的方法和系統(tǒng),使用設(shè)備模塊來(lái)監(jiān)視指定的設(shè)計(jì)參數(shù),雖然其未編輯為設(shè)計(jì)本身的集成部分。此外,由于使用與用于描述實(shí)際設(shè)計(jì)的HDL類似的HDL來(lái)指定設(shè)備模塊,所以這種模塊獨(dú)立于平臺(tái)和模擬器。不同于使用C或C++程序執(zhí)行的檢查,HDL設(shè)備可以直接編輯和運(yùn)行,而不會(huì)使硬件模擬器的性能降低。
現(xiàn)在參考附圖,具體地說(shuō),參考圖1,其中示出了可以有利地與本發(fā)明一起使用的示例性數(shù)據(jù)處理系統(tǒng)10的圖示。如圖所示,數(shù)據(jù)處理系統(tǒng)10包括一個(gè)或多個(gè)節(jié)點(diǎn)與之連接的服務(wù)器(或工作站)12。服務(wù)器/工作站12優(yōu)選地包括高性能多處理器計(jì)算機(jī),例如,由位于紐約阿蒙克的美國(guó)國(guó)際商業(yè)機(jī)器公司提供的計(jì)算機(jī)系統(tǒng)的POWER系列其中之一。服務(wù)器/工作站12優(yōu)選地包括用于存儲(chǔ)包括ECAD系統(tǒng)的軟件程序代碼的非易失性和易失性內(nèi)部存儲(chǔ)裝置,所述ECAD系統(tǒng)可以用于開(kāi)發(fā)和檢驗(yàn)根據(jù)本發(fā)明的數(shù)字電路設(shè)計(jì)。如圖所示,節(jié)點(diǎn)13至少包括顯示設(shè)備14、鍵盤(pán)16以及鼠標(biāo)20,并可以進(jìn)一步提供其他處理資源。在工作站12中執(zhí)行的ECAD程序代碼優(yōu)選地在顯示設(shè)備14的顯示屏22中顯示圖形用戶接口(GUI),數(shù)字電路設(shè)計(jì)人員可以使用鍵盤(pán)16和鼠標(biāo)20來(lái)與之互動(dòng)。因此,通過(guò)使用鍵盤(pán)16和鼠標(biāo)20輸入適當(dāng)?shù)妮斎耄瑪?shù)字電路設(shè)計(jì)人員能夠如下文進(jìn)一步描述那樣開(kāi)發(fā)和檢驗(yàn)數(shù)字電路設(shè)計(jì)。
圖2示出了圖1的示例性數(shù)據(jù)處理系統(tǒng)10的代表性硬件環(huán)境。數(shù)據(jù)處理系統(tǒng)10配置為包括計(jì)算機(jī)系統(tǒng)的所有功能硬件和軟件組件。數(shù)據(jù)處理系統(tǒng)10包括一個(gè)或多個(gè)中央處理單元(CPU)24(例如,常規(guī)的微處理器)以及通過(guò)系統(tǒng)總線26互連的多個(gè)其他組件。CPU 24控制整個(gè)計(jì)算機(jī)系統(tǒng)的運(yùn)行,包括執(zhí)行計(jì)算機(jī)程序指示的算術(shù)和邏輯功能。雖然未在圖2中示出,但是CPU(例如,CPU 24)通常包括組織計(jì)算機(jī)存儲(chǔ)器中的數(shù)據(jù)和程序存儲(chǔ)裝置并在計(jì)算機(jī)系統(tǒng)的各個(gè)部件之間傳輸數(shù)據(jù)和其他信息的控制單元。這種CPU通常還包括執(zhí)行算術(shù)和邏輯運(yùn)算(例如,加法、比較、乘法等)的算術(shù)單元。數(shù)據(jù)處理系統(tǒng)10的這種組件和單元可以在圖1的服務(wù)器/工作站12中實(shí)現(xiàn)。
數(shù)據(jù)處理系統(tǒng)10還包括主存儲(chǔ)器(或系統(tǒng)存儲(chǔ)器)44、可選的附加隨機(jī)存取存儲(chǔ)器(RAM)28、只讀存儲(chǔ)器(ROM)30、用于將系統(tǒng)總線26連接到顯示設(shè)備14(例如,CRT或LCD平板顯示器)的顯示適配器32,以及用于將外圍設(shè)備(例如,盤(pán)和帶驅(qū)動(dòng)器33)連接到系統(tǒng)總線26的I/O適配器34。
數(shù)據(jù)處理系統(tǒng)10還包括用于將鍵盤(pán)16、鼠標(biāo)20、揚(yáng)聲器38、麥克風(fēng)40和/或其他用戶接口設(shè)備連接到系統(tǒng)總線26的用戶接口適配器36。連接到系統(tǒng)總線26的通信適配器42將數(shù)據(jù)處理系統(tǒng)10連接到外部計(jì)算機(jī)網(wǎng)絡(luò)(例如,局域網(wǎng)(LAN)或廣域網(wǎng)(WAN))。
數(shù)據(jù)處理系統(tǒng)10還包括位于機(jī)器可讀介質(zhì)中以控制數(shù)據(jù)操作系統(tǒng)10的操作的操作系統(tǒng)(例如,Microsoft Windows、AIX或Linux)。任何適合的機(jī)器可讀介質(zhì)都可以保存操作系統(tǒng),例如,主存儲(chǔ)器44、RAM 28、ROM30、磁盤(pán)、磁帶或光盤(pán)(最后三項(xiàng)位于盤(pán)和磁帶驅(qū)動(dòng)器33內(nèi))。計(jì)算機(jī)可讀介質(zhì)(例如,主存儲(chǔ)器44)還包括在由CPU 24處理時(shí)執(zhí)行本文描述的操作的ECAD系統(tǒng)46。
本領(lǐng)域的技術(shù)人員將理解,圖2中示出的硬件可以針對(duì)具體的設(shè)計(jì)和模擬應(yīng)用而改變。例如,除了示出的硬件以外或替代示出的硬件,還可以使用其他外圍設(shè)備,例如,光盤(pán)介質(zhì)、音頻適配器、或芯片編程設(shè)備(如計(jì)算機(jī)硬件領(lǐng)域公知的PAL或EPROM編程設(shè)備)。此外,雖然圖2僅示出了在數(shù)據(jù)處理系統(tǒng)10中的單個(gè)CPU和單個(gè)系統(tǒng)總線,但是應(yīng)該理解的是,本發(fā)明并不限于圖1和圖2中示出的通用系統(tǒng)架構(gòu),并且本發(fā)明同樣適用于具有多個(gè)CPU和/或更復(fù)雜的互連架構(gòu)的計(jì)算機(jī)系統(tǒng)。
模擬的數(shù)字電路設(shè)計(jì)模型包括至少一個(gè)(通常是多個(gè))在下文中稱為設(shè)計(jì)實(shí)體的子單元。圖3A是其中可以實(shí)現(xiàn)本發(fā)明的方法和系統(tǒng)的示例性設(shè)計(jì)實(shí)體300的方塊圖表示。設(shè)計(jì)實(shí)體300由多個(gè)組件定義實(shí)體名稱、實(shí)體端口以及由設(shè)計(jì)實(shí)體300執(zhí)行的功能的表示。給定模型中的每個(gè)實(shí)體都具有在每個(gè)實(shí)體的HDL描述中聲明的唯一名稱(未在圖3A中顯式地示出)。此外,每個(gè)實(shí)體通常都包含多個(gè)到實(shí)體外部的信號(hào)的信號(hào)互連(稱為端口)。這些外部信號(hào)可以是整體設(shè)計(jì)的主要輸入/輸出(I/O)或連接到整體設(shè)計(jì)中的其他實(shí)體的信號(hào)。
通常,將端口分類為屬于三種不同類型之一輸入端口、輸出端口和雙向端口。設(shè)計(jì)實(shí)體300示為具有多個(gè)將信號(hào)傳輸?shù)皆O(shè)計(jì)實(shí)體300中的輸入端口303。輸入端口303連接到輸入信號(hào)301。此外,設(shè)計(jì)實(shí)體300包括多個(gè)將信號(hào)傳輸?shù)皆O(shè)計(jì)實(shí)體300之外的輸出端口306。輸出端口306連接到一組輸出信號(hào)304。雙向端口305用于將信號(hào)傳輸?shù)皆O(shè)計(jì)實(shí)體300中和傳輸?shù)皆O(shè)計(jì)實(shí)體300之外。雙向端口305則連接到一組雙向信號(hào)309。實(shí)體(例如,設(shè)計(jì)實(shí)體300)無(wú)需包含所有三種類型的端口,并且在簡(jiǎn)化的情況下,不包含任何端口。為了實(shí)現(xiàn)實(shí)體端口到外部信號(hào)的連接,使用了稱為“端口映射”的映射技術(shù)。端口映射(未在圖3A中顯式示出)包括實(shí)體端口名稱與實(shí)體所連接的外部信號(hào)之間的規(guī)定對(duì)應(yīng)。當(dāng)建立模擬模型時(shí),使用ECAD軟件來(lái)根據(jù)端口映射規(guī)定將外部信號(hào)連接到實(shí)體的相應(yīng)端口。
最終,設(shè)計(jì)實(shí)體300包含描述由設(shè)計(jì)實(shí)體300執(zhí)行的一個(gè)或多個(gè)功能的主體部分308。在數(shù)字設(shè)計(jì)的情況下,除了其他實(shí)體的實(shí)例化以外,主體部分308還包含邏輯門(mén)、存儲(chǔ)元件等的互連。通過(guò)實(shí)例化另一個(gè)實(shí)體中的實(shí)體,實(shí)現(xiàn)了整體設(shè)計(jì)的分級(jí)描述。例如,微處理器可以包含完全相同的功能單元的多個(gè)實(shí)例。因此,微處理器本身經(jīng)常被建模為單個(gè)實(shí)體。在微處理器實(shí)體中,將呈現(xiàn)任何重復(fù)功能實(shí)體的多個(gè)實(shí)例化。
現(xiàn)在參考圖3B,其中示出了可以在本發(fā)明的優(yōu)選實(shí)施例中使用的示例性模擬模型329的圖示。模擬模型329包括多個(gè)分級(jí)實(shí)體。為了視覺(jué)上的簡(jiǎn)單和清楚,并未顯式示出在模擬模型329中互連實(shí)體的端口和信號(hào)。在任何模型中,一個(gè)且只有一個(gè)實(shí)體是所謂的“頂級(jí)實(shí)體”。頂級(jí)實(shí)體320是包括模擬模型329中的所有其他實(shí)體的實(shí)體。也就是說(shuō),頂級(jí)實(shí)體320直接或間接地實(shí)例化設(shè)計(jì)中的所有子實(shí)體。模擬模型329包括直接實(shí)例化FXU實(shí)體321的兩個(gè)實(shí)例321a和321b以及FPU實(shí)體322的單個(gè)實(shí)例的頂級(jí)實(shí)體320。每個(gè)實(shí)例化都具有關(guān)聯(lián)的描述,其包含實(shí)體名稱和唯一實(shí)例化名稱。對(duì)于頂級(jí)實(shí)體320,描述310被標(biāo)記為“TOPTOP”。描述310包括實(shí)體名稱312(標(biāo)記為冒號(hào)之前的“TOP”),并且還包括實(shí)例化名稱314(標(biāo)記為冒號(hào)之后的“TOP”)。
如FXU實(shí)體321的實(shí)例化321a和321b所示,特定實(shí)體可能被多次實(shí)例化。實(shí)例化321a和321b是實(shí)例化名稱分別為FXU0和FXU1的FXU實(shí)體321的不同實(shí)例化。頂級(jí)實(shí)體320處于模擬模型329層級(jí)中的最高級(jí)。實(shí)例化子實(shí)體的實(shí)體將在下文中被稱為該子實(shí)體的“父輩(ancestor)”。頂級(jí)實(shí)體320因此是直接實(shí)例化FXU實(shí)體實(shí)例化321a和321b的父輩。在模擬模型層級(jí)的任何給定級(jí)別,所有實(shí)例化的實(shí)例化名稱必須是唯一的。
除了FXU實(shí)體實(shí)例化321a和321b,頂級(jí)實(shí)體320直接實(shí)例化具有實(shí)體名稱FPU和實(shí)例化名稱FPU0的FPU實(shí)體322的單個(gè)實(shí)例。在實(shí)體描述中,當(dāng)僅有所述特定實(shí)體的一個(gè)實(shí)例被置于模擬模型層級(jí)的給定級(jí)別時(shí),實(shí)體名稱匹配實(shí)例化名稱是很常見(jiàn)的。但是,這并不是必須的,如實(shí)體322(實(shí)例化名稱FPU0、實(shí)體名稱FPU)所示。
在FXU實(shí)體321的實(shí)例化321a中,分別直接實(shí)例化了實(shí)體A 325和實(shí)體B 326的單個(gè)實(shí)例實(shí)體325a和326a。同樣,同一FXU實(shí)體的實(shí)例化321b分別包含實(shí)體A 325和實(shí)體B 326的實(shí)例化325b和326b。通過(guò)類似的方式,實(shí)例化326a和實(shí)例化326b的每一個(gè)都分別直接將實(shí)體C 327的單個(gè)實(shí)例實(shí)例化為實(shí)體327a和327b。只要所有實(shí)例化的實(shí)體(不論單個(gè)實(shí)例化還是多個(gè)實(shí)例化)具有唯一的實(shí)體名稱且在層級(jí)的任何給定級(jí)別的實(shí)例化名稱彼此唯一,其他實(shí)體中的實(shí)體嵌套就可以繼續(xù)到任意的復(fù)雜性級(jí)別。每個(gè)實(shí)體都創(chuàng)建自包含描述該實(shí)體所需的信息的一個(gè)或多個(gè)HDL文件。
與每個(gè)實(shí)體實(shí)例化關(guān)聯(lián)的是所謂的“實(shí)例化標(biāo)識(shí)符”。針對(duì)給定實(shí)例化的實(shí)例化標(biāo)識(shí)符是包括頂級(jí)實(shí)體實(shí)例化名稱之前的嵌入實(shí)體實(shí)例化名稱的字符串。例如,F(xiàn)XU實(shí)體321的實(shí)例化321a中實(shí)體C 327的實(shí)例化327a的實(shí)例化標(biāo)識(shí)符是“TOP.FXU0.B.C”。該標(biāo)識(shí)符用于唯一地標(biāo)識(shí)模擬模型中的每個(gè)實(shí)例化。
現(xiàn)在參考圖3C,其中示出了可以在本發(fā)明的優(yōu)選實(shí)施例中實(shí)現(xiàn)的模型建立過(guò)程的流程圖。該過(guò)程始于一個(gè)或多個(gè)設(shè)計(jì)實(shí)體HDL源代碼文件340以及可能的一個(gè)或多個(gè)設(shè)計(jì)實(shí)體中間格式文件345(下文中稱為“原文件”345),其可從HDL編輯器的前一次運(yùn)行中獲得。HDL編輯器342處理HDL文件(多個(gè))340,始于模擬模型的頂級(jí)實(shí)體并以遞歸方式遍歷所有描述完整模擬模型的HDL或原文件(多個(gè))。對(duì)于編輯過(guò)程期間的每個(gè)HDL文件340,HDL編輯器342檢查原文件345以判定先前編輯的原文件是否可用及是否一致。如果這種文件可用且一致,則HDL編輯器342將不重新編輯該特定文件,而是引用現(xiàn)存的原文件。如果此類原文件都不可用或原文件不一致,則HDL編輯器342顯式地對(duì)有問(wèn)題的HDL文件340進(jìn)行重新編輯并創(chuàng)建用于后續(xù)編輯的原文件344。此類過(guò)程將在下文中稱為“增量編輯”并可以極大地加快創(chuàng)建可執(zhí)行模擬的模型348的過(guò)程。一旦由HDL編輯器342創(chuàng)建,原文件344就可供用作后續(xù)編輯中的原文件345。
除了原文件344,HDL編輯器342還在計(jì)算機(jī)系統(tǒng)10的存儲(chǔ)器44中創(chuàng)建兩組數(shù)據(jù)結(jié)構(gòu),設(shè)計(jì)實(shí)體原數(shù)據(jù)結(jié)構(gòu)341和設(shè)計(jì)實(shí)體實(shí)例數(shù)據(jù)結(jié)構(gòu)343。設(shè)計(jì)實(shí)體原數(shù)據(jù)結(jié)構(gòu)341和設(shè)計(jì)實(shí)體實(shí)例數(shù)據(jù)結(jié)構(gòu)343用作可執(zhí)行模擬的模型348的內(nèi)容的存儲(chǔ)器映像。數(shù)據(jù)結(jié)構(gòu)341和343通過(guò)存儲(chǔ)器44傳送到將數(shù)據(jù)結(jié)構(gòu)341和343處理成可執(zhí)行模擬的模型348的模型建立工具346。
將在下文中假定每個(gè)實(shí)體由單個(gè)HDL文件描述。根據(jù)慣例或當(dāng)前發(fā)明在其中實(shí)現(xiàn)的特定HDL,可以要求該限制。但是,在特定環(huán)境或?qū)τ谔囟ǖ腍DL,有可能通過(guò)使用多個(gè)HDL文件來(lái)描述實(shí)體。本領(lǐng)域的技術(shù)人員將明白和理解在允許實(shí)體由多個(gè)HDL文件來(lái)描述時(shí)實(shí)踐本發(fā)明所需的擴(kuò)展。此外,對(duì)于每個(gè)實(shí)體,將假定在實(shí)體名稱與以下兩者之間存在直接對(duì)應(yīng)表示實(shí)體的HDL文件的名稱和用于該實(shí)體的原文件的名稱。
在以下說(shuō)明中,后跟“.Vhd1”的實(shí)體名稱將引用對(duì)應(yīng)于給定實(shí)體的HDL源代碼文件。例如,描述頂級(jí)實(shí)體320的HDL源代碼文件將稱為T(mén)OP.Vhd1。此標(biāo)記慣例僅用作符號(hào)表示方面的方便,而不應(yīng)被認(rèn)為是將本發(fā)明的可應(yīng)用性限于HDL而非VHDL。
返回圖3B,可以看到每個(gè)實(shí)體可以直接或間接實(shí)例化一個(gè)或多個(gè)其他實(shí)體。例如,F(xiàn)XU實(shí)體直接實(shí)例化A實(shí)體325和B實(shí)體326。此外,B實(shí)體326直接地實(shí)例化C實(shí)體327。因此,F(xiàn)XU實(shí)體321直接或間接實(shí)例化A實(shí)體325、B實(shí)體326和C實(shí)體327。由另一個(gè)實(shí)體直接或間接實(shí)例化的那些實(shí)體將在下文中稱為“子實(shí)體”。頂級(jí)實(shí)體320的子實(shí)體為FXU實(shí)體321、A實(shí)體325、B實(shí)體326和C實(shí)體327??梢钥吹矫總€(gè)實(shí)體都具有一組唯一的子實(shí)體且每次實(shí)例化實(shí)體時(shí),將創(chuàng)建該實(shí)體的唯一實(shí)例及其子實(shí)體。在模擬模型329中,F(xiàn)XU實(shí)體321由頂級(jí)實(shí)體320實(shí)例化兩次,F(xiàn)XUFXU0 321a和FXUFXU1 321b。FXU實(shí)體321的每次實(shí)例化都創(chuàng)建FXU、A、B和C實(shí)體的一組唯一的實(shí)例。
對(duì)于每個(gè)實(shí)體,可以定義“材料單”或BOM。BOM是具有實(shí)體自身和實(shí)體的子實(shí)體的日期與時(shí)間戳的HDL文件的列表。再次參考圖3C,實(shí)體的BOM在實(shí)體編輯之后存儲(chǔ)在原文件344中。因此,當(dāng)HDL編輯器編輯HDL文件340中的特定HDL源代碼文件時(shí),將生成包括BOM的原文件344,所述BOM列出了組成實(shí)體及該實(shí)體的子實(shí)體(如果有)的HDL文件340。所述BOM還包含當(dāng)編輯HDL文件時(shí),在計(jì)算機(jī)系統(tǒng)10的磁盤(pán)/磁帶33上出現(xiàn)的每個(gè)引用的HDL文件的日期和時(shí)間戳。
如果隨后更改了組成實(shí)體或其子實(shí)體的任何HDL文件,則原文件344將被標(biāo)記為不一致,并且HDL編輯器342將在后續(xù)的重新編輯中重新編輯HDL文件340,這將在下文中進(jìn)一步詳細(xì)說(shuō)明。例如,返回圖3B,由FXU實(shí)體321的BOM引用的HDL文件是FXU.Vhd1、A.Vhd1、B.Vhd1和C.Vhd1,每個(gè)都具有相應(yīng)的日期和時(shí)間戳。由頂級(jí)實(shí)體320的BOM引用的文件是TOP.Vhd1、FXU.Vhd1、A.Vhd1、B.Vhd1、C.Vhd1和FPU.Vhd1,每個(gè)都具有相應(yīng)的日期和時(shí)間戳。
返回圖3C,HDL編輯器342在計(jì)算機(jī)系統(tǒng)10的主存儲(chǔ)器44中創(chuàng)建模擬模型的結(jié)構(gòu)的映像。該存儲(chǔ)器映像包括以下部分“原”數(shù)據(jù)結(jié)構(gòu)341和“實(shí)例”數(shù)據(jù)結(jié)構(gòu)343。對(duì)于模型中的每個(gè)實(shí)體,原數(shù)據(jù)結(jié)構(gòu)是這樣的數(shù)據(jù)結(jié)構(gòu)其包含與所述實(shí)體的端口、所述實(shí)體的主體內(nèi)容,以及對(duì)由所述實(shí)體直接實(shí)例化的其他實(shí)體的引用列表有關(guān)的信息(在下文中,“原”一詞將用于指上述的存儲(chǔ)器內(nèi)的數(shù)據(jù)結(jié)構(gòu),而“原文件”一詞將用于描述一個(gè)或多個(gè)中間格式文件344)。因此,原文件344是由HDL編輯器342生成的存儲(chǔ)器內(nèi)原數(shù)據(jù)結(jié)構(gòu)的盤(pán)上表示。
實(shí)例數(shù)據(jù)結(jié)構(gòu)是這樣的數(shù)據(jù)結(jié)構(gòu)對(duì)于模型中的實(shí)體的每個(gè)實(shí)例,其包含所述實(shí)例的實(shí)例名稱、實(shí)例所引用的實(shí)體的名稱,以及將實(shí)體與外部信號(hào)互連所需的端口映射信息。在編輯過(guò)程中,每個(gè)實(shí)體將僅具有一個(gè)原數(shù)據(jù)結(jié)構(gòu),而在實(shí)體的多個(gè)實(shí)例化的情況下,每個(gè)實(shí)體可以具有一個(gè)或多個(gè)實(shí)例數(shù)據(jù)結(jié)構(gòu)。
為了有效地以增量方式編輯模型,HDL編輯器342遵循遞歸的編輯方法,其中考慮模型的相繼實(shí)體并從原文件345將其載入,如果此類文件可用并且與組成那些實(shí)體及其子實(shí)體的HDL源文件一致的話。對(duì)于不能從現(xiàn)有的原文件345加載的每個(gè)實(shí)體,HDL編輯器342遞歸地檢查實(shí)體的子實(shí)體,加載可從一個(gè)或多個(gè)原文件345中找到的那些子實(shí)體并在需要時(shí)為與原文件345不一致的那些子實(shí)體創(chuàng)建原文件344。以下示出了HDL編輯器342的主控制環(huán)路的偽代碼(偽代碼右側(cè)的行號(hào)并非偽代碼的一部分,而只是為了符號(hào)表示的方便)。
process_HDL_file(file) 5 {10if(NOT proto_loaded(file)){ 15 if(exists_proto_file(file)AND check_bom(file)){ 20 load_proto(file); 25 }else{ 30 parse_HDL_file(file) 35 for(ail instances in file){40 process_HDL_file(instance); 45 } 50 create_proto(file); 55 write_proto_file(file); 60 }65} 70create_instance(file) 75 }80 當(dāng)初始地調(diào)用編輯器342時(shí),在計(jì)算機(jī)系統(tǒng)10的存儲(chǔ)器44中不存在任何原數(shù)據(jù)結(jié)構(gòu)341或?qū)嵗龜?shù)據(jù)結(jié)構(gòu)343。調(diào)用主控制環(huán)路的例程process_HDL_file()(行5)并通過(guò)參數(shù)″File″傳送頂級(jí)實(shí)體的名稱。算法首先通過(guò)例程proto_loaded()(行15)判定當(dāng)前實(shí)體的原數(shù)據(jù)結(jié)構(gòu)是否存在于存儲(chǔ)器44中。要指出的是,存儲(chǔ)器中將永遠(yuǎn)不存在頂級(jí)實(shí)體的原數(shù)據(jù)結(jié)構(gòu),因?yàn)樗鲞^(guò)程開(kāi)始而不將任何原數(shù)據(jù)結(jié)構(gòu)加載到存儲(chǔ)器44中。如果存儲(chǔ)器44中存在匹配的原數(shù)據(jù)結(jié)構(gòu),則在需要時(shí)通過(guò)例程create_instance()(行75)在存儲(chǔ)器44中創(chuàng)建當(dāng)前實(shí)體的實(shí)例數(shù)據(jù)結(jié)構(gòu)和當(dāng)前實(shí)體的子實(shí)體(如果有)。
但是,如果存儲(chǔ)器44中不存在匹配的原數(shù)據(jù)結(jié)構(gòu),則控制轉(zhuǎn)到行20,在行20處,例程exists_proto_file()檢查原文件345以判定是否存在實(shí)體的原文件。當(dāng)且僅當(dāng)存在匹配的原文件時(shí),才調(diào)用例程check_bom()以判定原文件345是否一致。為了判定原文件是否一致,將檢查原文件的BOM。例程check_bom()檢查BOM中列出的每個(gè)HDL源代碼文件來(lái)判定HDL源代碼文件的日期或時(shí)間戳是否改變或是否已經(jīng)刪除了HDL源代碼文件。如果對(duì)于BOM中的任何文件出現(xiàn)任一情況,則原文件不一致且例程check_bom()出錯(cuò)。但是,如果check_bom()成功,則控制轉(zhuǎn)到行25,在行25處,例程load_proto()將原文件以及任何子原文件加載到存儲(chǔ)器44中,由此創(chuàng)建當(dāng)前實(shí)體和所述當(dāng)前實(shí)體的子實(shí)體(如果有)的原數(shù)據(jù)結(jié)構(gòu)341。Process_HDL_file()的構(gòu)建確保了一旦將原文件檢驗(yàn)為一致,則所有其子原文件(如果有)也將一致。
如果原文件不存在或不一致,則控制轉(zhuǎn)到行35,在行35處,例程parse_HDL_file()加載當(dāng)前實(shí)體的HDL源代碼文件。例程parse_HDL_file()(行35)檢查HDL源代碼文件的句法正確性并判定當(dāng)前實(shí)體實(shí)例化了哪些子實(shí)體(如果有)。行40、45和50組成了其中遞歸調(diào)用例程process_HDL_file()以處理由當(dāng)前實(shí)體調(diào)用的子實(shí)體的環(huán)路。此過(guò)程遞歸地重復(fù),以深度優(yōu)先的方式遍歷當(dāng)前實(shí)體的所有子實(shí)體,從而創(chuàng)建當(dāng)前實(shí)體的所有子實(shí)體的原數(shù)據(jù)結(jié)構(gòu)341和原數(shù)據(jù)結(jié)構(gòu)344。一旦處理了子實(shí)體,控制就轉(zhuǎn)到行55,在行55處,例程create_proto()在存儲(chǔ)器44中為當(dāng)前實(shí)體創(chuàng)建新的原數(shù)據(jù)結(jié)構(gòu)。然后,控制轉(zhuǎn)到行60,在行60處,例程write_proto_file()將新的原文件344(包括關(guān)聯(lián)的BOM)寫(xiě)入盤(pán)33。最后,控制轉(zhuǎn)到行75,在行75處,例程create_instance()在需要時(shí)創(chuàng)建當(dāng)前實(shí)體和任何子實(shí)體的實(shí)例數(shù)據(jù)結(jié)構(gòu)343。通過(guò)這種方式,process_HDL_file()(行5)遞歸地處理整個(gè)模擬模型,由此創(chuàng)建包括原數(shù)據(jù)結(jié)構(gòu)341和實(shí)例數(shù)據(jù)結(jié)構(gòu)343的模型的存儲(chǔ)器內(nèi)映像。
現(xiàn)在參考圖3D,其中示出了表示已編輯的數(shù)據(jù)結(jié)構(gòu)的方塊圖,所述數(shù)據(jù)結(jié)構(gòu)可以在本發(fā)明的優(yōu)選實(shí)施例中實(shí)現(xiàn)。存儲(chǔ)器44包含原數(shù)據(jù)結(jié)構(gòu)361,模擬模型329中引用的每個(gè)實(shí)體都對(duì)應(yīng)一個(gè)數(shù)據(jù)結(jié)構(gòu)。此外,模擬模型329中的實(shí)例化由實(shí)例數(shù)據(jù)結(jié)構(gòu)362表示。實(shí)例數(shù)據(jù)結(jié)構(gòu)362通過(guò)指示模擬模型329中實(shí)體的實(shí)例化的層級(jí)本質(zhì)的指針來(lái)連接。圖3C中模型建立工具346將存儲(chǔ)器44的內(nèi)容處理為存儲(chǔ)器數(shù)據(jù)結(jié)構(gòu),以便生成可執(zhí)行模擬的模型348。
為了實(shí)施模擬模型,本發(fā)明使用稱為“設(shè)備實(shí)體”的實(shí)體,它與組成在本文中稱為“設(shè)計(jì)實(shí)體”的實(shí)體形成對(duì)比。對(duì)于設(shè)計(jì)實(shí)體來(lái)說(shuō),設(shè)備實(shí)體由一個(gè)或多個(gè)HDL源代碼文件描述并包括多個(gè)信號(hào)端口、主體部分和實(shí)體名稱。在下文中,將假定設(shè)備實(shí)體由單個(gè)HDL文件描述。本領(lǐng)域的技術(shù)人員將明白和理解為由多個(gè)HDL文件描述的設(shè)備實(shí)體實(shí)現(xiàn)當(dāng)前發(fā)明所需的擴(kuò)展。每個(gè)設(shè)備實(shí)體都與在下文中稱為“目標(biāo)實(shí)體”的特定設(shè)計(jì)實(shí)體相關(guān)聯(lián)。
現(xiàn)在參考圖4A,其中示出了表示設(shè)備實(shí)體409的方塊圖。設(shè)備實(shí)體409包括多個(gè)與目標(biāo)實(shí)體(未在圖4A中示出)中的信號(hào)401相連的輸入端口400。主體部分402包含檢測(cè)目標(biāo)實(shí)體中指定條件的發(fā)生并生成有關(guān)信號(hào)401的模擬模型“事件”所需的邏輯。至少可以生成四種不同類型的事件“計(jì)數(shù)”事件、“出錯(cuò)”事件、“結(jié)果”事件以及“打印”事件,在下文中會(huì)依次描述每個(gè)事件。主體部分402包含用于檢測(cè)促成生成這些事件的條件的發(fā)生的內(nèi)部邏輯。一組多位輸出端口403、404和405通過(guò)外部信號(hào)406、407和408連接到外部設(shè)備邏輯420(在圖4B中示出)。因此,輸出端口403、404和405提供從主體部分402中的內(nèi)部邏輯到外部設(shè)備邏輯420(其用于指示計(jì)數(shù)、出錯(cuò)和結(jié)果事件的發(fā)生)的連接。
出錯(cuò)事件是一系列指示模擬模型中糾正操作的故障的信號(hào)值。每個(gè)設(shè)備實(shí)體監(jiān)視目標(biāo)實(shí)體以發(fā)現(xiàn)任何預(yù)期數(shù)量的出錯(cuò)事件。將出錯(cuò)事件的每次發(fā)生分配到輸出端口403上的特定信號(hào)位。當(dāng)檢測(cè)到出錯(cuò)條件時(shí),主體部分402中的邏輯在信號(hào)403的指定位上生成有效的高脈沖。將信號(hào)403的此類激活定義為出錯(cuò)事件。此錯(cuò)誤指示通過(guò)外部信號(hào)406傳輸?shù)酵獠吭O(shè)備邏輯(在圖4B中示為外部設(shè)備邏輯塊420),后者標(biāo)記了出錯(cuò)事件的發(fā)生。
計(jì)數(shù)事件是一系列指示模擬模型中事件的發(fā)生(為其維護(hù)計(jì)數(shù)是有利的)的信號(hào)值。計(jì)數(shù)事件用于監(jiān)視模擬模型中特定序列的發(fā)生頻率。每個(gè)設(shè)備實(shí)體可以監(jiān)視目標(biāo)實(shí)體以發(fā)現(xiàn)任何預(yù)期數(shù)量的計(jì)數(shù)事件。將每個(gè)計(jì)數(shù)事件分配到輸出端口405上的特定信號(hào)位。邏輯塊402包含檢測(cè)預(yù)期計(jì)數(shù)事件的發(fā)生并在檢測(cè)到計(jì)數(shù)事件時(shí)在信號(hào)405的指定位上生成有效高脈沖所需的邏輯。此計(jì)數(shù)指示通過(guò)外部信號(hào)408傳輸?shù)皆O(shè)備邏輯,后者包含用于記錄每個(gè)計(jì)數(shù)事件的發(fā)生次數(shù)的計(jì)數(shù)器。
第三種事件類型(即結(jié)果事件)是一系列指示特定操作環(huán)境的出現(xiàn)(能夠再現(xiàn)是有利的)的信號(hào)值。當(dāng)結(jié)果事件發(fā)生時(shí),將加載外部設(shè)備邏輯塊中的寄存器以指示事件在模擬運(yùn)行中的何處發(fā)生,并設(shè)置標(biāo)記以指示特定環(huán)境的發(fā)生。由此可以保存模擬運(yùn)行的詳細(xì)信息,以便重建由結(jié)果事件監(jiān)視的特定環(huán)境。邏輯塊402包含檢測(cè)結(jié)果事件所需的邏輯。
每個(gè)設(shè)備實(shí)體可以檢測(cè)任何預(yù)期數(shù)量的結(jié)果事件(每個(gè)事件都被分配到輸出端口404上的特定信號(hào)位)。當(dāng)檢測(cè)到結(jié)果事件時(shí),塊402中的邏輯在信號(hào)404的指定位上生成有效高脈沖。此結(jié)果事件檢測(cè)通過(guò)外部信號(hào)407傳輸?shù)桨糜诿總€(gè)結(jié)果事件的寄存器和標(biāo)記的外部設(shè)備邏輯。所述寄存器用于記錄結(jié)果事件在模擬運(yùn)行中的何處發(fā)生,而標(biāo)志用于指示該發(fā)生。
第四種事件類型(即打印事件)是一系列指示模擬模型中事件的發(fā)生的信號(hào)值,在模擬運(yùn)行的結(jié)果中呈現(xiàn)其是有利的。因此,打印事件用于呈現(xiàn)模擬模型中有關(guān)的信號(hào)值以供后續(xù)查看和分析。每個(gè)設(shè)備實(shí)體可以監(jiān)視目標(biāo)實(shí)體以找到任何預(yù)期數(shù)量的打印事件。不同于其他事件類型,未向打印事件分配設(shè)備實(shí)體的輸出端口,例如上述輸出端口403-405。實(shí)際上,由外部設(shè)備邏輯塊420檢測(cè)和記錄打印事件,如下文進(jìn)一步討論的。
現(xiàn)在參考圖4B,其中示出了根據(jù)本發(fā)明的教導(dǎo)實(shí)施的模擬模型329的方塊圖。如圖4B所示,設(shè)備實(shí)體FXUCHK的實(shí)例410和實(shí)例411用于監(jiān)視FXU實(shí)體的實(shí)例321a和321b。對(duì)于每個(gè)FXU實(shí)例化321a和321b,由本發(fā)明的機(jī)制分別自動(dòng)生成FXUCHK實(shí)例化410和411。通過(guò)類似的方式,實(shí)例化設(shè)備實(shí)體FPUCHK 412以監(jiān)視FPU實(shí)體322。
如圖4B所示,實(shí)體FXUCHK監(jiān)視FXU實(shí)體的每個(gè)實(shí)例321a和321b中的信號(hào)Q 372、信號(hào)R 376和信號(hào)S 374。信號(hào)Q 372是子實(shí)體A的實(shí)例325a和325b中的信號(hào)。同樣地,信號(hào)S 374是位于子實(shí)體B內(nèi)的子實(shí)體C中的信號(hào)。最后,信號(hào)R 376在FXU實(shí)體321中直接發(fā)生。雖然設(shè)備實(shí)體可以監(jiān)視目標(biāo)實(shí)體或目標(biāo)實(shí)體的子實(shí)體中的任何信號(hào),但是無(wú)法監(jiān)視目標(biāo)實(shí)體外部的信號(hào)。
每個(gè)設(shè)備實(shí)體通過(guò)出錯(cuò)、計(jì)數(shù)和結(jié)果信號(hào)連接到包含用于記錄每個(gè)事件類型的發(fā)生的邏輯的設(shè)備邏輯塊420。對(duì)于在模擬模型329中監(jiān)視的計(jì)數(shù)事件,使用一組計(jì)數(shù)器421來(lái)計(jì)數(shù)每個(gè)計(jì)數(shù)事件的發(fā)生次數(shù)。通過(guò)類似發(fā)生,使用一組標(biāo)志424來(lái)記錄出錯(cuò)事件的發(fā)生。此外,將一組計(jì)數(shù)器422和標(biāo)志423進(jìn)行組合并將其用于分別記錄結(jié)果事件發(fā)生的位置及其發(fā)生。在本發(fā)明的一個(gè)實(shí)施例中,使用計(jì)數(shù)器422和標(biāo)志423來(lái)捕獲和存儲(chǔ)循環(huán)數(shù)以記錄結(jié)果事件。最后,外部設(shè)備邏輯塊420包含數(shù)據(jù)結(jié)構(gòu)(例如,打印事件表(PET)430),如以下進(jìn)一步描述的,所述數(shù)據(jù)結(jié)構(gòu)由模擬器系統(tǒng)用于在模擬模型329的模擬期間生成和呈現(xiàn)選定的打印事件。
為了促進(jìn)設(shè)備實(shí)體的實(shí)例化和連接,設(shè)備實(shí)體HDL源代碼文件包括專門(mén)的注釋部分,在下文中稱為“設(shè)備實(shí)體描述”,其指示了目標(biāo)實(shí)體、要監(jiān)視的目標(biāo)實(shí)體中的信號(hào),以及指定要監(jiān)視的事件類型的信息。
現(xiàn)在參考圖4C,其中示出了描述圖4B中示出的設(shè)備實(shí)體FXUCHK的示例性HDL文件440。HDL文件440使用VHDL硬件描述語(yǔ)言的句法。在VHDL語(yǔ)言中,以兩個(gè)破折號(hào)(″--″)開(kāi)始的行被編輯器識(shí)別為注釋。本發(fā)明的方法和系統(tǒng)使用非常規(guī)形式的注釋來(lái)指示有關(guān)設(shè)備實(shí)體的信息。圖4C示出了本發(fā)明的一個(gè)實(shí)施例,其中注釋包括初始的破折號(hào)后跟兩個(gè)感嘆號(hào),以便將這些注釋與設(shè)備HDL文件440中的常規(guī)注釋區(qū)分開(kāi)。本領(lǐng)域的技術(shù)人員將理解,圖4C中用于提供非常規(guī)注釋的示例性句法僅是許多可能格式中的一種格式。
在HDL文件440中,F(xiàn)XUCHK實(shí)體的I/O端口在實(shí)體聲明450中聲明。在實(shí)體聲明450中,分別聲明了三個(gè)輸入端口,S_IN、Q_IN,和R_IN。輸入端口S_IN、Q_IN和R_INN將分別如下所述連接到信號(hào)S 374、信號(hào)Q 372和信號(hào)R 376。還聲明了輸入端口CLOCK并將其連接到FXU實(shí)體中的信號(hào)CLOCK。此外,聲明了兩個(gè)輸出端口fails(0到1)和counts(0到2)。在該實(shí)例中,F(xiàn)XUCHK實(shí)體沒(méi)有生成任何結(jié)果事件,因此不聲明任何結(jié)果輸出端口。因此,這些輸出端口提供兩個(gè)出錯(cuò)事件和三個(gè)計(jì)數(shù)事件的出錯(cuò)和計(jì)數(shù)信號(hào)。輸出端口的名稱按慣例確定,以便提供將這些信號(hào)自動(dòng)連接到設(shè)備邏輯塊420的有效方法。
使用一組設(shè)備實(shí)體描述符451來(lái)提供有關(guān)設(shè)備實(shí)體的信息。如圖4C所示,描述符注釋451可以分類成若干不同的部分序言和實(shí)體名稱聲明452、輸入端口映射453、一組出錯(cuò)消息聲明454、一組計(jì)數(shù)器聲明455、一組打印事件聲明456,以及結(jié)尾457。
序言和實(shí)體名稱452用于指示設(shè)備實(shí)體將監(jiān)視的特定目標(biāo)實(shí)體的名稱。序言和實(shí)體名稱聲明452還用作設(shè)備實(shí)體描述已經(jīng)開(kāi)始的指示。具體地說(shuō),序言和實(shí)體名稱聲明452中的注釋″--!!Begin″指示設(shè)備實(shí)體的描述已經(jīng)開(kāi)始。注釋″--!!Design EntityFXU″標(biāo)識(shí)了HDL文件440中是設(shè)計(jì)實(shí)體FXU的目標(biāo)實(shí)體。此聲明用于將設(shè)備實(shí)體綁定到目標(biāo)實(shí)體。
輸入端口映射453用作設(shè)備實(shí)體的輸入端口與目標(biāo)實(shí)體中要監(jiān)視的信號(hào)之間的連接。注釋以注釋″--??!Inputs″開(kāi)始并以注釋″--!!End Inputs″結(jié)束。在這些注釋之間,使用″--??!inst_ent_port_name=>trgt_ent_signal_name″形式的注釋(設(shè)備實(shí)體的每個(gè)輸入端口都具有一個(gè)注釋),以指示設(shè)備實(shí)體端口與目標(biāo)實(shí)體信號(hào)之間的連接。Inst_ent_port_name是要連接到目標(biāo)實(shí)體信號(hào)的設(shè)備實(shí)體端口的名稱。Trgt_ent_signal_name是要連接到設(shè)備實(shí)體端口的目標(biāo)實(shí)體中的信號(hào)的名稱。
在某些情況下,要監(jiān)視的信號(hào)在目標(biāo)實(shí)體的子實(shí)體中。對(duì)于信號(hào)S 374是這種情況,信號(hào)S 374嵌入是實(shí)體B 326和目標(biāo)FXU實(shí)體321的子實(shí)體的實(shí)體C中。輸入端口映射453包括信號(hào)S 374的標(biāo)識(shí)字符串,其包括目標(biāo)實(shí)體中每個(gè)都由句點(diǎn)(″.″)分隔的實(shí)體的實(shí)例名稱。該標(biāo)識(shí)字符串附加在信號(hào)名稱之前。因此,信號(hào)S 374的輸入端口映射453中的信號(hào)映射注釋如下 --??!S_IN=>B.C.S; 該句法允許設(shè)備實(shí)體連接到目標(biāo)實(shí)體或目標(biāo)實(shí)體的子實(shí)體內(nèi)的任何信號(hào)。在頂級(jí)目標(biāo)設(shè)計(jì)實(shí)體上出現(xiàn)的信號(hào)沒(méi)有任何附加在前的實(shí)體名稱;并且因此具有以下信號(hào)映射注釋 --??!R_IN=>R; 對(duì)于頂級(jí)目標(biāo)實(shí)體上的信號(hào),提供了特殊的連接方法。如果要連接到的信號(hào)具有與其在設(shè)備實(shí)體的端口映射中的對(duì)應(yīng)信號(hào)相同的名稱,則無(wú)需任何輸入端口映射注釋,并且如果不存在此類注釋,將自動(dòng)連接所述信號(hào)。換言之,如果輸入端口映射注釋具有如下形式 --??!signal=>signal; 其中信號(hào)是沒(méi)有句點(diǎn)(″.″)的合法信號(hào)名稱,則無(wú)需輸入端口映射注釋并且本發(fā)明的系統(tǒng)將自動(dòng)完成連接。也可以提供以上給出形式的注釋以顯式地指示信號(hào)連接。此機(jī)制僅可用于頂級(jí)目標(biāo)實(shí)體上的信號(hào)。
出錯(cuò)消息聲明454以″--??!Fail Outputs;″形式的注釋開(kāi)始,并且以″--?。nd Fail Outputs;″形式的注釋結(jié)束。每個(gè)出錯(cuò)事件輸出都與唯一的事件名稱和出錯(cuò)消息相關(guān)聯(lián)。此消息可以在檢測(cè)到出錯(cuò)事件時(shí)由模擬運(yùn)行時(shí)環(huán)境輸出。使用唯一的出錯(cuò)事件名稱來(lái)標(biāo)識(shí)模型中的特定出錯(cuò)事件。每個(gè)出錯(cuò)事件信號(hào)可以由″--??!n:<eventname>″Failure message″;″形式注釋聲明,其中n是表示消息與之相關(guān)聯(lián)的出錯(cuò)事件的整數(shù),<eventname>是唯一的出錯(cuò)事件名稱,并且″Failure message″是與特定出錯(cuò)事件關(guān)聯(lián)的消息。必須為每個(gè)由設(shè)備實(shí)體監(jiān)視的出錯(cuò)事件提供一個(gè)且僅提供一個(gè)出錯(cuò)消息聲明注釋。
計(jì)數(shù)器聲明注釋455以″--??!Count Outputs;″形式的注釋開(kāi)始,以″--??!End Count Outputs;″形式的注釋結(jié)束。每個(gè)計(jì)數(shù)事件輸出都與唯一的變量名稱相關(guān)聯(lián)。此名稱與圖4B的計(jì)數(shù)器邏輯421中的計(jì)數(shù)器相關(guān)聯(lián)。變量名稱提供了標(biāo)識(shí)和引用與特定計(jì)數(shù)事件相關(guān)聯(lián)的特定計(jì)數(shù)器的方法。因此,″--?。:<varname>qualifying_signal[+/-];″形式的注釋與每個(gè)計(jì)數(shù)器事件輸出相關(guān)聯(lián)。在此慣例中,n是表示設(shè)備模塊中哪個(gè)計(jì)數(shù)器事件將與變量名稱″Varname″相關(guān)聯(lián)的整數(shù),而qualifying_signal是目標(biāo)設(shè)計(jì)實(shí)體中用于確定何時(shí)對(duì)計(jì)數(shù)事件脈沖進(jìn)行采樣(這將在下文中進(jìn)一步說(shuō)明)的信號(hào)的名稱。參數(shù)″Qualifying_signal″后跟A+/-A以指定限定信號(hào)是高電平有效限定信號(hào)還是低電平有效限定信號(hào)。
打印事件聲明456以形式為″--!!Print Events;″的序言注釋開(kāi)始,并且以形式為″-?。nd Print Events;″的注釋結(jié)束。每個(gè)打印事件都與將由模擬運(yùn)行時(shí)環(huán)境(例如,顯示22中、硬拷貝打印輸出中,或日志文件中)呈現(xiàn)的唯一索引號(hào)和消息相關(guān)聯(lián),以響應(yīng)模擬運(yùn)行期間打印事件的發(fā)生。每個(gè)打印事件都以″--??!nvalid signal name,″Print message″,signal name;″的形式聲明,其中n是打印消息要與之關(guān)聯(lián)的打印事件的整數(shù)索引號(hào),valid signal name標(biāo)識(shí)了在斷言時(shí)導(dǎo)致打印事件發(fā)生的有效信號(hào),″Print message″是要與特定打印事件關(guān)聯(lián)的消息,而signal name標(biāo)識(shí)了在打印消息中報(bào)告其值的信號(hào)(如果有)。
如下文中參考圖6B、7和8詳細(xì)說(shuō)明的,每個(gè)打印事件可以進(jìn)一步可選地通過(guò)打印事件聲明與打印事件名稱相關(guān)聯(lián),以便促進(jìn)將一個(gè)或多個(gè)打印事件分組成打印事件組。打印事件組的使用允許通過(guò)引用打印事件組(而不是引用每個(gè)組成的打印事件)來(lái)在模擬中“開(kāi)啟”或“關(guān)閉”多個(gè)打印事件。
如圖4C中所述,打印消息可以包括格式化信息(例如,″%2h″),其可以有利地使用與C編程語(yǔ)言中公知的printf語(yǔ)句的句法類似或相同的句法。因此,當(dāng)呈現(xiàn)打印事件時(shí),百分號(hào)的每個(gè)實(shí)例(即,″%″)都由信號(hào)名稱值替代,并且該值根據(jù)打印消息中指示的長(zhǎng)度和編碼(例如,二進(jìn)制(b)、十進(jìn)制(d)、十六進(jìn)制(h)或八進(jìn)制(o))進(jìn)行格式化。例如,對(duì)于由索引0標(biāo)識(shí)的打印事件,6位信號(hào)op_type的信號(hào)值將通過(guò)兩個(gè)十六進(jìn)制的字符呈現(xiàn),以響應(yīng)在關(guān)聯(lián)的打印事件聲明中的″2h″格式規(guī)定。如果在格式化信息(例如,″%h″)中沒(méi)有給出字段寬度,則以表示指定編碼中的信號(hào)值所需的最少字符數(shù)來(lái)完全顯示信號(hào)值。
在默認(rèn)情況下,信號(hào)值的格式為向右對(duì)齊,意味著格式化信息所指示的任何未使用位數(shù)(例如,2個(gè)十六進(jìn)制位置的8位)通過(guò)將信號(hào)值的最左側(cè)(高位)填滿0來(lái)進(jìn)行填充。另一方面,如果信號(hào)值的位數(shù)超過(guò)格式化信息所指示的位數(shù),則呈現(xiàn)最右側(cè)的位,并截去高位以實(shí)現(xiàn)向右對(duì)齊。但是,因?yàn)槟承┬盘?hào)值在向左對(duì)齊的情況下更利于查看,所以通過(guò)例如包括″<″標(biāo)志來(lái)優(yōu)選地支持該格式。在向左對(duì)齊的情況下,如果信號(hào)值的位數(shù)小于格式化信息所指定的位數(shù),則使用0填滿信號(hào)值的右側(cè),并且如果信號(hào)的位數(shù)大于格式化信息所指定的位數(shù),則截去低位。
結(jié)果消息和事件名稱、出錯(cuò)消息和事件名稱、模擬模型的計(jì)數(shù)器變量名稱,以及打印事件消息和事件名稱都包括在可執(zhí)行模擬的模型中,并且在模型建立時(shí)在單獨(dú)的文件中生成模型中所有事件的列表。通過(guò)這種方式,每個(gè)模擬模型都包括每個(gè)受監(jiān)視事件的信息,并且包含每個(gè)事件的此信息的單獨(dú)文件都可用。此外,如將在下文說(shuō)明的,模型建立過(guò)程以這樣的方式命名模型中的每個(gè)事件(計(jì)數(shù)、出錯(cuò)、結(jié)果和打印)確保每個(gè)事件具有帶有某種有用屬性的唯一名稱。
最后,結(jié)尾注釋457包括形式為″--??!End;″的單個(gè)注釋,指示描述符注釋451的結(jié)尾。在上述I/O聲明后面的設(shè)備實(shí)體HDL文件440的剩余部分是實(shí)體主體部分458。在實(shí)體主體部分458中,常規(guī)的HDL句法用于定義檢測(cè)輸入端口信號(hào)上的各種事件并將這些事件傳輸?shù)捷敵龆丝谛盘?hào)所需的內(nèi)部設(shè)備邏輯。
除了位于設(shè)備實(shí)體的HDL源代碼文件中的描述符注釋451,目標(biāo)實(shí)體HDL文件中還需要其他注釋行。將形式為″--!!Instrumentationname.Vhd1″的注釋添加到目標(biāo)實(shí)體HDL源代碼文件,其中name.Vhd1是設(shè)備實(shí)體HDL文件的名稱。此注釋提供了設(shè)備實(shí)體及其目標(biāo)實(shí)體之間的聯(lián)系。當(dāng)多個(gè)設(shè)備實(shí)體與目標(biāo)實(shí)體關(guān)聯(lián)時(shí),目標(biāo)實(shí)體中可能有多個(gè)此類注釋。這些HDL文件注釋將在下文中稱為“設(shè)備實(shí)體實(shí)例化”。
現(xiàn)在參考圖4D,其中示出了根據(jù)本發(fā)明的教導(dǎo)的模型建立過(guò)程。在此模型建立過(guò)程中,設(shè)備加載工具464用于改變模擬模型的存儲(chǔ)器內(nèi)原和實(shí)例數(shù)據(jù)結(jié)構(gòu),由此將設(shè)備實(shí)體添加到模擬模型。設(shè)備加載工具464使用設(shè)備HDL文件461中的描述符注釋451來(lái)創(chuàng)建模擬模型中的設(shè)備實(shí)體的實(shí)例數(shù)據(jù)結(jié)構(gòu)。
圖4D的模型建立過(guò)程始于設(shè)計(jì)實(shí)體HDL文件340(可能始于一個(gè)或多個(gè)設(shè)計(jì)實(shí)體原文件345(可從HDL編輯器462的先前運(yùn)行獲得))、設(shè)備實(shí)體HDL文件460(可能始于一個(gè)或多個(gè)設(shè)備實(shí)體原文件461(可從HDL編輯器462的先前運(yùn)行獲得))。HDL編輯器462在提供包括模擬模型的設(shè)計(jì)和設(shè)備實(shí)體的高效增量編輯的擴(kuò)充算法process_HDL_file()之后處理設(shè)計(jì)實(shí)體HDL文件340和設(shè)備實(shí)體HDL文件460。HDL編輯器462從設(shè)計(jì)實(shí)體原文件345和設(shè)備實(shí)體原文件夾460加載原數(shù)據(jù)結(jié)構(gòu),如果此類原文件可用且一致的話。如果此類原文件不可用或不一致,則HDL編輯器462編輯設(shè)計(jì)實(shí)體HDL文件340和設(shè)備實(shí)體HDL文件460,以便生成設(shè)計(jì)實(shí)體原文件344和設(shè)備實(shí)體原文件468。(設(shè)計(jì)實(shí)體原文件344和設(shè)備實(shí)體原文件468可用于分別用作設(shè)計(jì)實(shí)體原文件345和設(shè)備實(shí)體原文件460以供HDL編輯器462的后續(xù)運(yùn)行。)設(shè)備實(shí)體原文件468包含從包含在設(shè)備實(shí)體HDL文件461內(nèi)的打印事件聲明456得到的打印事件信息。如以下參考圖6B所述,設(shè)備實(shí)體原文件468還可以包含從設(shè)計(jì)實(shí)體HDL文件340中的打印事件聲明語(yǔ)句得到的打印事件信息。
此外,HDL編輯器462為模擬模型的設(shè)計(jì)實(shí)體創(chuàng)建存儲(chǔ)器內(nèi)設(shè)計(jì)原數(shù)據(jù)結(jié)構(gòu)463和設(shè)計(jì)實(shí)例數(shù)據(jù)結(jié)構(gòu)465。HDL編輯器462還為模擬模型的設(shè)備實(shí)體創(chuàng)建存儲(chǔ)器內(nèi)設(shè)備原數(shù)據(jù)結(jié)構(gòu)466。對(duì)于設(shè)備實(shí)體原文件468,存儲(chǔ)器內(nèi)設(shè)備原數(shù)據(jù)結(jié)構(gòu)466包含從包含在設(shè)備實(shí)體HDL文件461和/或設(shè)計(jì)實(shí)體HDL文件340中的打印事件聲明456得到的打印事件信息。
為了使處理開(kāi)銷最小化,HDL編輯器462既不讀取也不處理描述符注釋451。但是,HDL編輯器462確實(shí)識(shí)別目標(biāo)實(shí)體HDL文件中的設(shè)備實(shí)體實(shí)例化注釋。因此,HDL編輯器462不能創(chuàng)建實(shí)例數(shù)據(jù)結(jié)構(gòu)設(shè)備實(shí)體數(shù)據(jù)結(jié)構(gòu)467。創(chuàng)建實(shí)例數(shù)據(jù)結(jié)構(gòu)需要包含在描述符注釋451中的未由HDL編輯器462處理的互連信息。但是,HDL編輯器462確實(shí)創(chuàng)建設(shè)備原數(shù)據(jù)結(jié)構(gòu)466。
存儲(chǔ)器內(nèi)設(shè)計(jì)原數(shù)據(jù)結(jié)構(gòu)463、設(shè)計(jì)實(shí)例數(shù)據(jù)結(jié)構(gòu)465和設(shè)備實(shí)體原數(shù)據(jù)結(jié)構(gòu)466由設(shè)備加載工具464處理。設(shè)備加載工具464檢查設(shè)計(jì)實(shí)體原數(shù)據(jù)結(jié)構(gòu)463和設(shè)計(jì)實(shí)體實(shí)例數(shù)據(jù)結(jié)構(gòu)465以確定是目標(biāo)實(shí)體的那些設(shè)計(jì)實(shí)體。該檢查通過(guò)使用先前說(shuō)明的特定注釋格式來(lái)完成。
從設(shè)計(jì)實(shí)體原文件345加載的所有目標(biāo)實(shí)體包含任何關(guān)聯(lián)的設(shè)備實(shí)體的實(shí)例化。因此,設(shè)備加載工具464只是為任何此類設(shè)備實(shí)體創(chuàng)建實(shí)例數(shù)據(jù)結(jié)構(gòu)467,并將未改變的設(shè)計(jì)原數(shù)據(jù)結(jié)構(gòu)463傳送到實(shí)施的設(shè)計(jì)原數(shù)據(jù)結(jié)構(gòu)463a,并將設(shè)計(jì)實(shí)例數(shù)據(jù)結(jié)構(gòu)465傳送到實(shí)施的設(shè)計(jì)實(shí)例數(shù)據(jù)結(jié)構(gòu)465a。
但是,如果從設(shè)計(jì)實(shí)體HDL文件340而非設(shè)計(jì)實(shí)體原文件345加載目標(biāo)實(shí)體,則設(shè)備加載工具464必須更改其設(shè)計(jì)原數(shù)據(jù)結(jié)構(gòu)463及其設(shè)計(jì)實(shí)例數(shù)據(jù)結(jié)構(gòu)465以實(shí)例化關(guān)聯(lián)的設(shè)備實(shí)體。由此生成實(shí)施的設(shè)計(jì)原數(shù)據(jù)結(jié)構(gòu)463a和實(shí)施的設(shè)計(jì)實(shí)例數(shù)據(jù)結(jié)構(gòu)465a。此外,設(shè)備加載工具464為每個(gè)與當(dāng)前設(shè)計(jì)實(shí)體關(guān)聯(lián)的設(shè)備實(shí)體創(chuàng)建設(shè)備實(shí)例數(shù)據(jù)結(jié)構(gòu)467。
將由設(shè)備加載工具464更改的設(shè)計(jì)實(shí)體原數(shù)據(jù)結(jié)構(gòu)463作為設(shè)計(jì)實(shí)體原文件344保存到計(jì)算機(jī)系統(tǒng)10的盤(pán)33。由模擬模型的后續(xù)編輯直接加載可以包括對(duì)設(shè)備實(shí)體的引用的設(shè)計(jì)實(shí)體原文件344,由此節(jié)約設(shè)備加載工具464對(duì)后續(xù)重新編輯的處理,除非對(duì)設(shè)計(jì)實(shí)體或關(guān)聯(lián)的設(shè)備實(shí)體做出更改。
為了使HDL編輯器462判定是否對(duì)目標(biāo)設(shè)計(jì)實(shí)體或目標(biāo)設(shè)計(jì)實(shí)體的關(guān)聯(lián)設(shè)備實(shí)體做出了更改,將擴(kuò)展目標(biāo)設(shè)計(jì)實(shí)體的BOM以包括組成設(shè)備實(shí)體的HDL文件。通過(guò)這種方式,HDL編輯器462可以通過(guò)檢查給定設(shè)計(jì)實(shí)體的BOM來(lái)判定是對(duì)設(shè)計(jì)實(shí)體以及設(shè)計(jì)實(shí)體的關(guān)聯(lián)設(shè)備實(shí)體進(jìn)行重新編輯,還是從原文件345和461加載這些結(jié)構(gòu)。
最后,設(shè)備加載工具464為設(shè)備邏輯塊420創(chuàng)建唯一的原和實(shí)例數(shù)據(jù)結(jié)構(gòu)并將來(lái)自每個(gè)設(shè)備實(shí)體實(shí)例化的出錯(cuò)、結(jié)果和計(jì)數(shù)事件信號(hào)連接到設(shè)備邏輯塊420。在設(shè)備邏輯塊420的原和實(shí)例數(shù)據(jù)結(jié)構(gòu)中,設(shè)備加載工具464根據(jù)包含在存儲(chǔ)器內(nèi)設(shè)備實(shí)體原數(shù)據(jù)結(jié)構(gòu)466中的打印事件信息來(lái)創(chuàng)建打印事件表430。模型建立工具466處理存儲(chǔ)器內(nèi)原和實(shí)例數(shù)據(jù)結(jié)構(gòu)463a、465a、467、466以生成實(shí)施的可執(zhí)行模擬的模型480。
在HDL編輯器462中,擴(kuò)充算法process_HDL_file()以允許對(duì)設(shè)計(jì)和設(shè)備實(shí)體的增量編輯。以下示出了HDL編輯器462的主控制環(huán)路的偽代碼實(shí)現(xiàn) process_HDL_file2(file,design_flag) 5 { 10 if(NOT proto_loaded(file)){ 15 if(exists_proto_file(file)AND check_bom(file)){20 load_proto(file); 25 }else{ 30 parse_HDL_file(file) 35 for(all instances in file){40 process_HDL_file2(instance,design_flag); 45 } 50 if(design_flag=TRUE){ 55 for(all instrumentation instances in file){ 60 process_HDL_file2(instance,F(xiàn)ALSE) 65 } 70 } 75 create_proto(file); 80 write_proto_file(file); 90 }95 } 100 if(design_flag=TRUE){ 105 create_instance(file);110 }115 } 120 算法process_HDL_file2()是對(duì)HDL編輯器342的process_HDL_file()的擴(kuò)充,以便支持創(chuàng)建實(shí)施的模擬模型。使用通過(guò)參數(shù)file傳遞的頂級(jí)設(shè)計(jì)實(shí)體的名稱以及通過(guò)參數(shù)design_flag(design_flag對(duì)于設(shè)計(jì)實(shí)體為T(mén)RUE,對(duì)于設(shè)備實(shí)體為FALSE)傳遞的指示正在處理的實(shí)體是設(shè)計(jì)實(shí)體還是設(shè)備實(shí)體的標(biāo)志來(lái)調(diào)用所述算法。算法process_HDL_file2()(行5)首先借助例程proto_loaded()(行15)檢查當(dāng)前實(shí)體的原文件是否已經(jīng)存在于存儲(chǔ)器44中。如果是,則處理前進(jìn)到行105。否則,控制前進(jìn)到行20和25,在此檢查計(jì)算機(jī)系統(tǒng)10的盤(pán)33以判定實(shí)體及其子實(shí)體(包括設(shè)備實(shí)體,如果有)的原文件是否存在且一致。如果是,則例程load_proto()(行25)從盤(pán)10加載相應(yīng)的原文件來(lái)根據(jù)需要在存儲(chǔ)器44中為包括設(shè)備實(shí)體的當(dāng)前實(shí)體和當(dāng)前實(shí)體的子實(shí)體創(chuàng)建原數(shù)據(jù)結(jié)構(gòu)。
如果原文件不可用或不一致,則控制前進(jìn)到行35,在此解析當(dāng)前實(shí)體HDL文件。對(duì)于在當(dāng)前實(shí)體中實(shí)例化的任何實(shí)體,行40到55遞歸地調(diào)用process_HDL_file2()(行5),以便處理當(dāng)前實(shí)體的這些子實(shí)體。然后,控制前進(jìn)到行55,在此檢查參數(shù)design_flag以判定正在處理的當(dāng)前實(shí)體是設(shè)計(jì)實(shí)體還是設(shè)備實(shí)體。如果當(dāng)前實(shí)體是設(shè)備實(shí)體,則控制前進(jìn)到行80。否則,當(dāng)前實(shí)體是設(shè)計(jì)實(shí)體,并且行60到70遞歸地調(diào)用process_HDL_file2()(行5)以處理借助設(shè)備實(shí)例化注釋而實(shí)例化的任何設(shè)備實(shí)體。應(yīng)當(dāng)指出,算法process_HDL_file2()(行5)不允許設(shè)備實(shí)體監(jiān)視設(shè)備實(shí)體。將忽略設(shè)備實(shí)體中的任何設(shè)備實(shí)體實(shí)例化注釋。然后,控制前進(jìn)到行80,在此,根據(jù)需要在存儲(chǔ)器44中為當(dāng)前實(shí)體以及任何設(shè)備實(shí)體創(chuàng)建原數(shù)據(jù)結(jié)構(gòu)。然后,控制前進(jìn)到行90,在此根據(jù)需要將新創(chuàng)建的原數(shù)據(jù)結(jié)構(gòu)寫(xiě)入計(jì)算機(jī)系統(tǒng)10的盤(pán)33。
最后,控制前進(jìn)到行105和110,在此,如果當(dāng)前實(shí)體為設(shè)計(jì)實(shí)體,則根據(jù)需要為當(dāng)前實(shí)體和當(dāng)前實(shí)體的子實(shí)體創(chuàng)建實(shí)例數(shù)據(jù)結(jié)構(gòu)。如果當(dāng)前實(shí)體是設(shè)備實(shí)體,則不調(diào)用例程create_instance()(行110)。使用設(shè)備加載工具464來(lái)為設(shè)備實(shí)體創(chuàng)建存儲(chǔ)器內(nèi)實(shí)例數(shù)據(jù)結(jié)構(gòu)。
對(duì)本領(lǐng)域的技術(shù)人員將顯而易見(jiàn)的是,HDL編輯器462提供了對(duì)設(shè)計(jì)和設(shè)備實(shí)體的高效增量編輯。還應(yīng)指出,以上說(shuō)明僅是用于實(shí)現(xiàn)設(shè)備實(shí)體的增量編輯的許多可能方法之一。具體地說(shuō),雖然還存在許多其他選擇,但是設(shè)備加載工具464的許多功能(如果不是全部)都可以合并到HDL編輯器462中。
現(xiàn)在參考圖4E,其中示出了在具有設(shè)備實(shí)體FXUCHK和FPUCHK的模擬模型329編輯完成時(shí)的存儲(chǔ)器44的圖示。存儲(chǔ)器44包含原數(shù)據(jù)結(jié)構(gòu)481,模擬模型329中引用的每個(gè)設(shè)計(jì)和設(shè)備實(shí)體對(duì)應(yīng)一個(gè)數(shù)據(jù)結(jié)構(gòu)。此外,模擬模型329中的設(shè)計(jì)和設(shè)備實(shí)例由實(shí)例數(shù)據(jù)結(jié)構(gòu)482表示。實(shí)例數(shù)據(jù)結(jié)構(gòu)借助指示模擬模型329中的設(shè)計(jì)和設(shè)備實(shí)體的實(shí)例化的層級(jí)特性的指針來(lái)連接。
本發(fā)明的優(yōu)選實(shí)施例使用模擬模型中的事件命名機(jī)制,其防止不同設(shè)備實(shí)體之間的名稱沖突、允許任意重新使用大小任意增加的模型中的模型組件,并且允許通過(guò)分級(jí)或非分級(jí)的方式處理指定的事件。
當(dāng)事件的所有實(shí)例被看作整體而不考慮特定實(shí)例時(shí),事件被看作是“非分級(jí)的”。同樣,當(dāng)針對(duì)每個(gè)實(shí)例考慮事件時(shí),它被看作是“分級(jí)的”。當(dāng)考慮計(jì)數(shù)事件時(shí),例如,跟蹤聚合中發(fā)生的特定計(jì)數(shù)事件的次數(shù),而不考慮模擬模型中的每個(gè)特定實(shí)例內(nèi)發(fā)生的計(jì)數(shù)事件的確切次數(shù)通常是方便的。
在構(gòu)建時(shí)會(huì)向每個(gè)類型的事件(計(jì)數(shù)、出錯(cuò)、結(jié)果、打印等)賦予單獨(dú)的事件名稱空間。因此,每個(gè)事件類是獨(dú)立的組,防止了事件類型之間命名沖突。將本發(fā)明的數(shù)據(jù)結(jié)構(gòu)獨(dú)立地應(yīng)用到每個(gè)不同的事件類型以確保每個(gè)事件類中的正確性。
在圖5A、5B、5C和5D中示出的實(shí)施例中,根據(jù)計(jì)數(shù)事件說(shuō)明了本發(fā)明。本領(lǐng)域中的技術(shù)人員將明白和理解將同樣的技術(shù)應(yīng)用到其他事件類(例如,出錯(cuò)、結(jié)果或打印事件)所需的擴(kuò)展。
參考圖5A,其中示出了包含多個(gè)設(shè)計(jì)和設(shè)備實(shí)體的模擬模型1000的方塊圖。如圖5A中所示,模擬模型1000包括設(shè)計(jì)實(shí)體X的兩個(gè)實(shí)例,其中實(shí)例名稱分別為X1和X2。
在每個(gè)設(shè)計(jì)實(shí)體實(shí)例X1和X2中實(shí)例化了設(shè)備實(shí)體B3的實(shí)例,即1012a和1012b。設(shè)計(jì)實(shí)體實(shí)例X1和X2還分別包括設(shè)計(jì)實(shí)體Z的實(shí)例1014a和1014b,設(shè)計(jì)實(shí)體Z進(jìn)一步包含設(shè)備實(shí)體B1的實(shí)例1016a和1016b以及設(shè)備實(shí)體B2的實(shí)例1018a和1018b。
最后,模擬模型1000包括設(shè)計(jì)實(shí)體Y的實(shí)例,其實(shí)例名稱為Y,其中包含設(shè)備實(shí)體B41022的實(shí)例。設(shè)計(jì)實(shí)體實(shí)例Y包含設(shè)計(jì)實(shí)體Z的實(shí)例1024,設(shè)計(jì)實(shí)體Z分別具有設(shè)備實(shí)體B1和B2的其他實(shí)例1016c和1018c。
在下文中,將在示例性模型1000的上下文中考慮用于唯一地命名事件的本發(fā)明的方法。將在以下說(shuō)明中假定每個(gè)設(shè)備實(shí)體(B1、B2、B3和B4)都聲明了事件名稱為″Count1″的單個(gè)計(jì)數(shù)事件。
根據(jù)本發(fā)明,用戶必須唯一地命名特定設(shè)備實(shí)體中的每種類型的事件(計(jì)數(shù)、出錯(cuò)、結(jié)果、打印等),即,用戶不能使用同一事件名稱來(lái)聲明同一設(shè)備實(shí)體中的同一類型的任何兩個(gè)事件。此類約束與本發(fā)明聲稱的目標(biāo)并不沖突,因?yàn)榻o定的設(shè)備實(shí)體通常由特定人員在特定時(shí)刻創(chuàng)建,而在這種受限環(huán)境中維護(hù)唯一名稱對(duì)用戶來(lái)說(shuō)并不是沉重的負(fù)擔(dān)。但是,在此公開(kāi)的數(shù)據(jù)結(jié)構(gòu)確實(shí)防止了不同設(shè)備實(shí)體中的事件之間的所有名稱沖突,并允許通過(guò)分級(jí)和/或非分級(jí)的方式來(lái)處理事件。
如前文所述,HDL命名慣例必須唯一地標(biāo)識(shí)給定設(shè)計(jì)中的所有實(shí)體。此約束是HDL固有的并應(yīng)用于設(shè)計(jì)實(shí)體以及設(shè)備實(shí)體。根據(jù)常規(guī)的VHDL實(shí)體命名結(jié)構(gòu),兩個(gè)設(shè)計(jì)實(shí)體共享同一實(shí)體名稱entity_name在技術(shù)上是可行的。但是,這種名稱完全相同的實(shí)體必須封裝在可以從其構(gòu)建有效VHDL模型的VHDL庫(kù)中。在這種情況下,在本文中使用的entity_name等同于由句點(diǎn)(″.″)連接到實(shí)體聲明中聲明的實(shí)體名稱的VHDL庫(kù)名稱。
在實(shí)體名稱前附加不同的VHDL庫(kù)名稱可以消除共享同一實(shí)體名稱的實(shí)體的歧義。大多數(shù)HDL包括一種機(jī)制,例如,這種用于唯一地命名每個(gè)設(shè)計(jì)實(shí)體的機(jī)制。對(duì)設(shè)計(jì)實(shí)體的命名必須沒(méi)有歧義,以便判定在模擬模型內(nèi)的任何給定實(shí)例中調(diào)用了哪個(gè)特定實(shí)體。本發(fā)明使用固有HDL的主要命名機(jī)制來(lái)為整個(gè)給定模型中的設(shè)計(jì)實(shí)體分配唯一實(shí)體名稱,并利用實(shí)體名稱的唯一性及每個(gè)實(shí)例的實(shí)例化標(biāo)識(shí)符的唯一性來(lái)為模擬模型中的每個(gè)事件創(chuàng)建“擴(kuò)展的事件標(biāo)識(shí)符”。
參考圖5B,其中示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的擴(kuò)展的事件標(biāo)識(shí)符數(shù)據(jù)結(jié)構(gòu)(在本文中可替代地稱為“事件列表”)中的字段的表示。擴(kuò)展的事件標(biāo)識(shí)符以實(shí)例化標(biāo)識(shí)符字段1030開(kāi)始。如前所述,該字段包括實(shí)例標(biāo)識(shí)符,其從頂級(jí)實(shí)體到模擬模型中由句點(diǎn)(″.″)分隔的給定實(shí)例的直接父輩。該字符串對(duì)于模型中的事件的每個(gè)實(shí)例都是唯一的。擴(kuò)展的事件標(biāo)識(shí)符還包括設(shè)備實(shí)體字段1032、設(shè)計(jì)實(shí)體字段1034和事件名稱字段1036。
設(shè)備實(shí)體字段1032包含生成模擬事件的設(shè)備實(shí)體的名稱(或分配到嵌入的設(shè)備實(shí)體的名稱)。設(shè)計(jì)實(shí)體字段1034包含其中發(fā)生事件的設(shè)計(jì)實(shí)體的實(shí)體名稱。事件名稱字段1036是給予設(shè)備實(shí)體的設(shè)備實(shí)體描述注釋中的事件的名稱或分配給嵌入的設(shè)備實(shí)體中的事件的事件名稱。這四個(gè)名稱空間字段包括模擬模型中的每個(gè)事件的唯一標(biāo)識(shí)符,其允許在沒(méi)有名稱沖突的風(fēng)險(xiǎn)及不在分級(jí)或非分級(jí)意義上考慮事件的情況下在其他模型中重新使用組件。
現(xiàn)在參考圖5C,其中示出了模型1000的擴(kuò)展事件標(biāo)識(shí)符的列表。聲明了模擬模型1000中的事件標(biāo)識(shí)符1040、1041、1042、1043、1044、1045、1046、1047和1048以指定具有事件名稱″Count1″的計(jì)數(shù)事件。將在這些擴(kuò)展事件標(biāo)識(shí)符的上下文中說(shuō)明本發(fā)明的擴(kuò)展事件標(biāo)識(shí)過(guò)程。
設(shè)計(jì)實(shí)體名稱字段1034中名稱的唯一性是事件之間的主要區(qū)分因素。通過(guò)將設(shè)計(jì)實(shí)體名稱包括在擴(kuò)展的事件標(biāo)識(shí)符中,每個(gè)設(shè)計(jì)實(shí)體實(shí)際上都被給予與該設(shè)計(jì)實(shí)體關(guān)聯(lián)的事件的唯一名稱空間,即,給定設(shè)計(jì)實(shí)體中的事件不能和與其他設(shè)計(jì)實(shí)體關(guān)聯(lián)的事件具有名稱沖突。
但是,在由結(jié)合在單個(gè)設(shè)計(jì)實(shí)體中的不同設(shè)備實(shí)體定義的事件之間仍可能具有名稱沖突。例如,如果事件1041和1042完全由設(shè)計(jì)實(shí)體名稱標(biāo)識(shí),則具有名稱沖突。兩個(gè)事件都是設(shè)計(jì)實(shí)體Z中事件名稱為″Count1″的事件,并且如果這樣標(biāo)記,則是不可區(qū)分的。為了消除事件1041和1042之間的命名沖突,本發(fā)明使用設(shè)備實(shí)體字段1032。通過(guò)引用設(shè)計(jì)實(shí)體和設(shè)備實(shí)體名稱(兩者對(duì)于自身和彼此來(lái)說(shuō)都是唯一的),為每個(gè)與任何給定設(shè)計(jì)實(shí)體關(guān)聯(lián)的設(shè)備實(shí)體創(chuàng)建了唯一的事件名稱空間。例如,事件標(biāo)識(shí)符1041和1042將會(huì)沖突(同時(shí)命名為Z.Count1),除非各自的設(shè)備實(shí)體名稱被包括在擴(kuò)展的事件標(biāo)識(shí)符中以生成這些事件的名稱B1.Z.Count1和B2.Z.Count2。
應(yīng)當(dāng)指出的是,可以通過(guò)單獨(dú)使用設(shè)備實(shí)體名稱字段1032來(lái)唯一地命名每個(gè)事件。由于設(shè)備實(shí)體名稱的唯一性,僅由設(shè)備實(shí)體名稱命名的事件名稱和事件名稱字段將需要是唯一的。
但是,這種命名機(jī)制不足以將事件與給定的設(shè)計(jì)實(shí)體關(guān)聯(lián)。實(shí)際上,希望將事件與其中發(fā)生事件的設(shè)計(jì)實(shí)體相關(guān)聯(lián),而不是將事件與用于跟蹤它們的潛在大量的設(shè)備實(shí)體相關(guān)聯(lián)。此外,引用事件名稱中的相應(yīng)設(shè)計(jì)實(shí)體允許集中引用所有與給定設(shè)計(jì)實(shí)體關(guān)聯(lián)的事件,而無(wú)需確定與該給定設(shè)計(jì)實(shí)體相關(guān)聯(lián)的所有設(shè)備實(shí)體的名稱。本發(fā)明的數(shù)據(jù)結(jié)構(gòu)在命名事件中同時(shí)使用設(shè)備實(shí)體和設(shè)計(jì)實(shí)體名稱以便于引用,其代價(jià)為事件名稱的適度唯一性冗余。
在本發(fā)明的備選實(shí)施例中,設(shè)備實(shí)體名稱未包括在擴(kuò)展的事件標(biāo)識(shí)符中。參考圖5D,示出了這種備選的擴(kuò)展事件標(biāo)識(shí)數(shù)據(jù)結(jié)構(gòu)。如圖5D所示,事件通過(guò)實(shí)例化標(biāo)識(shí)符字段1030、設(shè)計(jì)實(shí)體名稱字段1034和事件名稱字段1036來(lái)命名。
這種數(shù)據(jù)結(jié)構(gòu)提供了設(shè)計(jì)實(shí)體之間而非設(shè)計(jì)實(shí)體內(nèi)的名稱沖突保護(hù)。也就是說(shuō),用戶必須確保與給定設(shè)計(jì)實(shí)體關(guān)聯(lián)的事件的事件名稱不沖突。如果在這方面出現(xiàn)用戶錯(cuò)誤,則可以使用模型建立工具來(lái)在模型編輯期間檢測(cè)事件名稱沖突情況。圖5D中示出的備選數(shù)據(jù)結(jié)構(gòu)提供了對(duì)事件的更簡(jiǎn)單的命名和引用,其代價(jià)是要求用戶防止與給定設(shè)計(jì)實(shí)體關(guān)聯(lián)的事件的名稱沖突。
返回圖5B,給定事件的設(shè)備實(shí)體字段1032、設(shè)計(jì)實(shí)體名稱字段1034和事件名稱字段1036的組合提供了任何給定事件的唯一標(biāo)識(shí)符,而不考慮事件的多個(gè)實(shí)例化。為了唯一地區(qū)分事件的多個(gè)實(shí)例化,將實(shí)例化標(biāo)識(shí)符字段1030包括在擴(kuò)展的事件標(biāo)識(shí)符中。實(shí)例化標(biāo)識(shí)符字段1030在創(chuàng)建時(shí)提供了任何模擬模型中的實(shí)體的任何實(shí)例的唯一字符串。
當(dāng)在非分級(jí)的意義上評(píng)估事件的發(fā)生時(shí),在搜索匹配事件的同時(shí)將忽略實(shí)例化標(biāo)識(shí)符字段1030。如圖5C所示,例如,對(duì)由設(shè)備實(shí)體B1檢測(cè)的設(shè)計(jì)實(shí)體Z中″Count1″事件的發(fā)生次數(shù)的非分級(jí)查詢使用了以下計(jì)數(shù)事件名稱列表 X1.Z B1ZCOUNT1 X2.Z B1ZCOUNT1 Y.Z B1ZCOUNT1. 將這些計(jì)數(shù)事件加在一起以形成模擬模型中發(fā)生的特定事件的總次數(shù)的聚合次數(shù)。
分級(jí)查詢包括匹配分級(jí)字段的特定準(zhǔn)則,以將發(fā)現(xiàn)的計(jì)數(shù)器(多個(gè))限于所請(qǐng)求事件的特定實(shí)例。例如,用于在設(shè)計(jì)實(shí)體Z的X1.Z實(shí)例中獲得設(shè)備實(shí)體B1的count1事件的查詢使用以下計(jì)數(shù)事件名稱 X1.Z B1ZCOUNT1. 其表示由設(shè)計(jì)實(shí)體實(shí)例X1.Z中的設(shè)備實(shí)體B1在特定模擬間隔中計(jì)數(shù)的count1事件的次數(shù)。
通過(guò)為實(shí)例化標(biāo)識(shí)符字段1030提供匹配的模型分級(jí)準(zhǔn)則,可以考慮模型中與其特定實(shí)例(多個(gè))相關(guān)的事件,即,分級(jí)的查詢。非分級(jí)查詢只是忽略分級(jí)字段并返回模型中所請(qǐng)求事件的所有實(shí)例。
上述系統(tǒng)和方法提供了模擬模型的實(shí)際設(shè)備并允許通過(guò)嵌入的設(shè)備實(shí)體高效實(shí)現(xiàn)設(shè)備邏輯。但是,如上文所述,有必要將嵌入的設(shè)備實(shí)體限于任務(wù)特定的實(shí)現(xiàn)。如參考圖6A和6B所述,本發(fā)明還以自由的方式提供了設(shè)備邏輯的更靈活的實(shí)現(xiàn)。
通常有必要定制設(shè)備邏輯以處理獨(dú)特的問(wèn)題和環(huán)境。根據(jù)在此參考圖6A和6B公開(kāi)的技術(shù)設(shè)計(jì)的具有特定但未預(yù)先定義的性質(zhì)的設(shè)備邏輯在本文中稱為“隨機(jī)設(shè)備邏輯”。包括通用邏輯原函數(shù)(布爾操作符、存儲(chǔ)元素等)的數(shù)據(jù)構(gòu)建以及這些原函數(shù)的互連方法用于實(shí)現(xiàn)這種隨機(jī)設(shè)備邏輯。
為了根據(jù)此處的描述來(lái)實(shí)施模擬模型,HDL(例如,VHDL或Verilog)被用作從其生成設(shè)備邏輯的平臺(tái)。設(shè)計(jì)實(shí)體源代碼文件中的相應(yīng)設(shè)備實(shí)體描述符注釋將結(jié)果設(shè)備實(shí)體連接到模擬模型中的指定目標(biāo)設(shè)計(jì)實(shí)體。
除了設(shè)計(jì)實(shí)體源代碼文件中的實(shí)體描述符注釋,上述實(shí)施技術(shù)要求其中描述了設(shè)備實(shí)體的單獨(dú)HDL文件。如參考圖6A和6B所述,本發(fā)明提供了用于在模擬模型中實(shí)施設(shè)計(jì)實(shí)體的方法、系統(tǒng)和數(shù)據(jù)結(jié)構(gòu),同時(shí)避免用于創(chuàng)建單獨(dú)設(shè)備實(shí)體HDL文件所需的設(shè)計(jì)過(guò)程開(kāi)銷。
根據(jù)本發(fā)明的優(yōu)選實(shí)施例,根據(jù)個(gè)性化和可定制的設(shè)備描述符注釋將隨機(jī)設(shè)備邏輯直接部署到目標(biāo)設(shè)計(jì)實(shí)體中。將這種設(shè)備描述符注釋編碼到目標(biāo)設(shè)計(jì)實(shí)體HDL源代碼文件中并提供用于描述隨機(jī)設(shè)備邏輯、事件以及已創(chuàng)建設(shè)備邏輯與目標(biāo)設(shè)計(jì)實(shí)體之間的互連的方法。通過(guò)與用于嵌入的設(shè)備實(shí)體的技術(shù)類似的方式將隨機(jī)設(shè)備邏輯插入模擬模型,以生成設(shè)備實(shí)體而無(wú)需創(chuàng)建顯式的HDL設(shè)備實(shí)體文件。
參考圖6A,圖6A示出了其中根據(jù)本發(fā)明的優(yōu)選實(shí)施例實(shí)現(xiàn)隨機(jī)設(shè)備邏輯的典型目標(biāo)設(shè)計(jì)實(shí)體1200。在目標(biāo)設(shè)計(jì)實(shí)體1200中實(shí)例化的是設(shè)計(jì)實(shí)體1201。如圖6A進(jìn)一步示出的,在設(shè)計(jì)實(shí)體1201中實(shí)例化了設(shè)備實(shí)體1202。根據(jù)前文所述的原理來(lái)設(shè)計(jì)設(shè)備實(shí)體1202,以生成事件名稱為″Count1″的計(jì)數(shù)事件1203。目標(biāo)設(shè)計(jì)實(shí)體1200還包括通過(guò)使用隨機(jī)設(shè)備邏輯生成的設(shè)備實(shí)體1208。如圖6A中示出的,設(shè)備實(shí)體1208接收信號(hào)P、A、B、C以及計(jì)數(shù)事件1203作為輸入。
通過(guò)目標(biāo)設(shè)計(jì)實(shí)體1200的源代碼文件中的一組非常規(guī)的注釋行來(lái)構(gòu)建設(shè)備實(shí)體1208。可以在HDL源代碼文件的邏輯描述部分中的任何點(diǎn)處結(jié)合這些注釋。除了任何用于實(shí)例化設(shè)計(jì)實(shí)體1200中的嵌入設(shè)備實(shí)體的注釋之外,HDL編輯器462(圖4B)還識(shí)別非常規(guī)的注釋。在后編輯/建模階段期間,設(shè)備加載工具464通過(guò)與用于嵌入設(shè)備實(shí)體的方式類似的方式來(lái)處理這些注釋以生成設(shè)備實(shí)體1208。
可以使用各種可能的句法來(lái)表達(dá)在目標(biāo)設(shè)計(jì)實(shí)體的源代碼文件中生成隨機(jī)設(shè)備邏輯所需的非常規(guī)HDL注釋。如圖6B中所示,這些注釋中的許多句法都使用與VHDL語(yǔ)言的并存子集類似的句法,且添加了提供設(shè)備實(shí)體及其目標(biāo)設(shè)計(jì)實(shí)體之間的連接方法的句法和語(yǔ)義增強(qiáng)。此外,提供了較小的句法和語(yǔ)義增強(qiáng)以聲明事件和中間信號(hào)。
現(xiàn)在參考圖6B,其中示出了描述設(shè)計(jì)實(shí)體1200的示例性HDL源代碼文件。在HDL源代碼文件1220中,實(shí)體實(shí)例化1221生成設(shè)計(jì)實(shí)體1201,分配語(yǔ)句1222用于生成信號(hào)A、B和C。HDL源代碼文件1220中的一組非常規(guī)注釋1223用于生成設(shè)備實(shí)體1208。
針對(duì)計(jì)數(shù)、出錯(cuò)和結(jié)果事件的注釋1223被表達(dá)為如下形式的左側(cè)(l.h.s.)/右側(cè)(r.h.s.)分配語(yǔ)句 {l.h.s.}<={r.h.s.}; 其中在此稱為lhs的{l.h.s.}是分配語(yǔ)句目標(biāo),而在此稱為rhs的{r.h.s.}是指示要分配給語(yǔ)句lhs的邏輯值的表達(dá)。在優(yōu)選實(shí)施例中,同樣構(gòu)建了打印事件的注釋。但是,在該實(shí)施例中,指定打印事件的注釋僅包括lhs,而不包括分配操作符(即,<=)或rhs。若干規(guī)則描述了設(shè)備注釋中任何合法語(yǔ)句內(nèi)的lhs和rhs的可能表達(dá)。
如在本發(fā)明的設(shè)備數(shù)據(jù)結(jié)構(gòu)中使用的,lhs語(yǔ)句可以是事件聲明,也可以是在設(shè)備實(shí)體中實(shí)例化的信號(hào)的名稱。事件聲明是生成新事件的方括號(hào)中的表達(dá)式(″[A,A]″)。在注釋1223中,語(yǔ)句1230從事件名稱為″Countname()″的設(shè)備實(shí)體1208(圖6A)生成計(jì)數(shù)事件1240。同樣,語(yǔ)句1238聲明事件名稱為″Prevent1″的打印事件。
在lhs事件聲明中,第一字段指示事件類型(計(jì)數(shù)、出錯(cuò)、結(jié)果、打印等)且其后跟隨聲明事件必需的其他字段。如行1230、1234、1236和1238中所示,此類事件聲明字段一般遵循與圖4C中示出的事件聲明字段相同的格式。因此,打印事件聲明(例如,語(yǔ)句1238)具有以下的一般格式 --??![print;eventname,valid signal name,“print message”,signal name]; 其中print是將語(yǔ)句標(biāo)識(shí)為打印事件聲明的關(guān)鍵字,eventname是由語(yǔ)句聲明的打印事件的名稱,valid signal name標(biāo)識(shí)了在斷言時(shí)導(dǎo)致打印事件發(fā)生的有效信號(hào),″print message″是與特定打印事件關(guān)聯(lián)的消息,并且signal name標(biāo)識(shí)了在打印消息中報(bào)告其值的信號(hào)(如果有)。將理解的是,在本發(fā)明的某些實(shí)施例中,可以擴(kuò)展signal name以形成包含在打印消息中報(bào)告的多個(gè)信號(hào)名稱的逗號(hào)分隔列表的字段。同樣,可以擴(kuò)展validsignal name字段以支持按照可執(zhí)行模擬的模型480中多個(gè)信號(hào)的邏輯組合(例如,valid1 AND valid2)來(lái)定義打印事件的有效信號(hào)的表達(dá)式。由于本領(lǐng)域的技術(shù)人員將容易地理解對(duì)所述實(shí)施例的支持帶有表達(dá)式的有效信號(hào)名稱的定義所需的擴(kuò)展,所以未在此進(jìn)一步說(shuō)明此類擴(kuò)展。
注釋1223還包括具有在設(shè)備實(shí)體1208中聲明信號(hào)Q的lhs的行1232。為了防止歧義,任何以這種方式聲明的信號(hào)都不能具有與在頂級(jí)目標(biāo)設(shè)計(jì)實(shí)體1200上存在的任何信號(hào)的名稱對(duì)應(yīng)的名稱。在處理期間通過(guò)設(shè)備加載工具464(圖4D)檢驗(yàn)對(duì)該要求的遵守。由lhs表達(dá)式聲明的信號(hào)可以結(jié)合在rhs表達(dá)式中,如行1232和1234所示。
Rhs包括組合各種信號(hào)的邏輯連接性表達(dá)式和/或函數(shù)。這些連接性表達(dá)式中的信號(hào)可以源于多個(gè)包括以下信號(hào)的可能的源在設(shè)備注釋中的語(yǔ)句的lhs上聲明的信號(hào);在目標(biāo)設(shè)計(jì)實(shí)體中的信號(hào);或指定目標(biāo)設(shè)計(jì)實(shí)體中的其他事件的信號(hào)。
在語(yǔ)句的rhs中的信號(hào)值描述中的缺少句點(diǎn)(″.″)或方括號(hào)(″[″,″]″)字符將對(duì)象信號(hào)指定為對(duì)應(yīng)于目標(biāo)設(shè)計(jì)實(shí)體的頂級(jí)分級(jí)中的信號(hào)或?qū)?yīng)于設(shè)備語(yǔ)言中語(yǔ)句的lhs上聲明的信號(hào)。由管理在設(shè)備注釋中的語(yǔ)句的lhs上創(chuàng)建信號(hào)的規(guī)則以互斥的方式命名信號(hào),由此防止在確定給定信號(hào)源時(shí)的任何歧義。
也可以將rhs連接性表達(dá)式中的信號(hào)(對(duì)于打印事件則是lhs中的信號(hào))指定為位于在目標(biāo)設(shè)計(jì)實(shí)體中實(shí)例化的實(shí)體之內(nèi)。在這種情況下,將包括所需信號(hào)的分級(jí)中實(shí)體(多個(gè))的實(shí)例名稱以層級(jí)順序置于信號(hào)名稱之前,并以句點(diǎn)(″.″)分隔。例如,語(yǔ)句1230中的信號(hào)(″Y.P″)表示設(shè)計(jì)實(shí)體1201中的信號(hào)1204。因此,在目標(biāo)設(shè)計(jì)層級(jí)的任何級(jí)別處的信號(hào)可由設(shè)備語(yǔ)言注釋生成的設(shè)備邏輯來(lái)訪問(wèn)。
設(shè)備注釋表達(dá)式中的信號(hào)還可以指定目標(biāo)實(shí)體中的其他事件。在前文中針對(duì)分級(jí)事件說(shuō)明的事件標(biāo)識(shí)符用于表示此類“事件”信號(hào)。例如,語(yǔ)句1232執(zhí)行設(shè)備事件1203和信號(hào)A的邏輯‘與’。事件標(biāo)識(shí)符″Y.[B1.count.Count1]″將設(shè)備實(shí)體1208和設(shè)備事件1203相連。該符號(hào)允許直接訪問(wèn)在目標(biāo)設(shè)計(jì)實(shí)體1200中的設(shè)計(jì)層級(jí)的任何級(jí)別處的設(shè)備事件。
如圖6B中進(jìn)一步示出的,語(yǔ)句1232在設(shè)備實(shí)體1208中生成中間信號(hào)Q。這是聲明新的中間信號(hào)的設(shè)備注釋語(yǔ)句的實(shí)例。可以在其他語(yǔ)句中使用這些信號(hào)以構(gòu)建具有任何期望深度或復(fù)雜度的隨機(jī)設(shè)備邏輯。
語(yǔ)句1234使用中間信號(hào)Q以及信號(hào)1206來(lái)生成出錯(cuò)事件1241。出錯(cuò)事件聲明的句法包括表示事件類型的字段(″Fail″)、給出出錯(cuò)事件的事件名稱的字段(″Failname0″)以及表示與出錯(cuò)關(guān)聯(lián)的消息的結(jié)束字段。最后,語(yǔ)句1236生成結(jié)果事件1242。
一般地說(shuō),本發(fā)明的設(shè)備數(shù)據(jù)結(jié)構(gòu)中的任何語(yǔ)句的rhs表達(dá)式可以通過(guò)使用這些句法機(jī)制來(lái)訪問(wèn)任何信號(hào)或目標(biāo)設(shè)計(jì)實(shí)體中的設(shè)備事件信號(hào)??梢越M合這些信號(hào)以形成新的事件或中間信號(hào),所述新的事件或中間信號(hào)自身可以進(jìn)一步組合以形成具有任何期望深度或復(fù)雜度的設(shè)備邏輯。
可以將設(shè)備注釋置于目標(biāo)實(shí)體源代碼文件的邏輯描述部分中的任何位置。文件中的所有設(shè)備注釋都可以視為一個(gè)整體并在目標(biāo)設(shè)計(jì)實(shí)體中生成單個(gè)設(shè)備實(shí)體。
如以上簡(jiǎn)短地說(shuō)明的,打印事件的命名有助于將設(shè)計(jì)人員選擇的打印事件聚合為可以在模擬運(yùn)行期間作為組選擇性地“關(guān)閉”和“打開(kāi)”的各種打印事件組。圖7示出了根據(jù)本發(fā)明的使用打印事件和打印事件組實(shí)施的簡(jiǎn)化模擬模型的方塊圖。在示例性模擬模型中,名為T(mén)OP:TOP的頂級(jí)設(shè)計(jì)實(shí)體實(shí)例700實(shí)例化FXU設(shè)計(jì)實(shí)體的兩個(gè)實(shí)例702a、702b,它們分別命名為FXU:FXU_inst1和FXU:FXU_inst2。FXU設(shè)計(jì)實(shí)體的每個(gè)實(shí)例702又包括名為a:a的設(shè)計(jì)實(shí)體實(shí)例704,且包含名為b:b的設(shè)計(jì)實(shí)體實(shí)例706。
如在圖7中進(jìn)一步示出的,頂級(jí)設(shè)計(jì)實(shí)體實(shí)例700進(jìn)一步實(shí)例化兩個(gè)名為print1和print2的打印事件??梢岳缤ㄟ^(guò)將如下語(yǔ)句包括在描述頂級(jí)設(shè)計(jì)實(shí)體700的HDL文件中來(lái)實(shí)例化這些打印事件 --??![print;print1;top_valid;“Signal X is%h”,X(0 to 2)]; --?。print;print2;req_valid;“Request activated”]; 應(yīng)當(dāng)指出,打印事件print2的聲明不包括signal name,僅包括validsignal name。因此,當(dāng)斷言信號(hào)req_valid時(shí)將呈現(xiàn)打印事件print2。
在FXU設(shè)計(jì)實(shí)體的兩個(gè)實(shí)例702a、702b的每一個(gè)中實(shí)例化了兩個(gè)其他打印事件pevent1和pevent2。如果從描述FXU設(shè)計(jì)實(shí)體的HDL文件實(shí)例化,則可以使用以下語(yǔ)句來(lái)聲明這些打印事件 --?。print;pevent1;valid1;“Op type is%2h”,op_type(0 to 5)]; --!![print;pevent2;a.b.valid2;“Signal xyz is %2h”,a.b.xyz(0 to 5)]; 如上所述,可以在頂級(jí)設(shè)計(jì)實(shí)體700的HDL文件中使用以下語(yǔ)句來(lái)備選地聲明具有等同功能的打印事件 --?。print;pcvcnt1_FXU1;FXU_inst1.valid1; “Op type is%2h”,F(xiàn)XU_inst1.op_type(0 to 5)]; --?。print;pevent1_FXU2;FXU_inst2.valid1; “Op type is%2h”,F(xiàn)XU_inst2.op_type(0 to 5)]; --!![print;pevent2_FXU1;FXU_inst1.a.b.valid2; “Signal xyz is %2h”,F(xiàn)XU_inst1.a.b.xyz(0 to 5)]; --!![print;pevent2_FXU2;FXU_inst2.a.b.valid2; “Signal xyz is%2h”,F(xiàn)XU_inst2.a.b.xyz(0 to 5)]; 頂級(jí)設(shè)計(jì)實(shí)體700進(jìn)一步實(shí)例化了兩個(gè)打印事件組,即,print_group1(其包括打印事件print1和print2)以及print_group2(其包括打印事件print1、FXU_inst1.pevent1、FXU_inst1.pevent2、FXU_inst2.pevent1和FXU_inst2.pevent2??梢酝ㄟ^(guò)將以下語(yǔ)句包括在描述頂級(jí)設(shè)計(jì)實(shí)體700的HDL文件中來(lái)實(shí)例化這些打印事件組 --?。print_group;print_group1]<={print1, print2}; --?。print_group;print_group2]<={print1, FXU_inst1.pevent1, FXU_inst1.pevent2 FXU_inst2.pevent1, FXU_inst2.pevent2}; 因此,打印事件組的聲明一般采取以下形式 [lhs]<={rhs}; 其中l(wèi)hs以關(guān)鍵字point_group開(kāi)始以表示打印事件組的聲明并在此后包括打印事件組的名稱,rhs是屬于該打印事件組的成員打印事件或打印事件組的逗號(hào)分隔的列表。
在本發(fā)明的優(yōu)選實(shí)施例中,打印事件組的聲明可以在rhs中使用通配符和括號(hào)句法以指定成員打印事件或打印事件組。例如,可以使用以下任一語(yǔ)句通過(guò)通配符來(lái)簡(jiǎn)化打印事件組print_group2的聲明 --??![print_group;print_group2]<={print1, FXU_inst1.*, FXU_inst2.*}; 或 --!![print_group;print_group2]<={print1, FXU_iust1.pevent*, FXU_inst2.pevent* }; 其中星號(hào)(即,″*″)是表示正則表達(dá)式的通配符。同樣,通配符可以簡(jiǎn)化打印事件組print_group1的聲明,如以下語(yǔ)句中所示 --?。print_group;print_group1] ={print }; 其中問(wèn)號(hào)(即,″?″)指示單字符通配符。
還可以使用帶括號(hào)的句法來(lái)簡(jiǎn)化屬于打印事件組的打印事件和/或打印事件組的列舉。在帶括號(hào)的句法中,給定范圍中特定設(shè)計(jì)實(shí)體的所有實(shí)例中的打印事件或打印事件組的所有實(shí)例可以使用包括在括號(hào)中的單個(gè)標(biāo)識(shí)符來(lái)列舉。例如,如果設(shè)計(jì)人員想要包括圖7中示出的print group2中的pevent1的兩個(gè)實(shí)例以及pevent2的兩個(gè)實(shí)例,則可以在頂級(jí)設(shè)計(jì)實(shí)體實(shí)例700的HDL文件中使用以下打印事件組聲明語(yǔ)句 --??![print_group,print_group2]<={print1, [FXU].pevent*}; 其中帶括號(hào)的項(xiàng)是其中發(fā)生有關(guān)的打印事件或打印事件組的設(shè)計(jì)實(shí)體的名稱。在使用帶括號(hào)的句法的語(yǔ)句中,暗示了表達(dá)式的默認(rèn)范圍是其中實(shí)例化打印事件組的設(shè)計(jì)實(shí)體(在此情況下是頂級(jí)設(shè)計(jì)實(shí)體實(shí)例700)的范圍。如將理解的,可以通過(guò)顯式地列舉設(shè)計(jì)層級(jí)的選定級(jí)別來(lái)進(jìn)一步縮小使用帶括號(hào)的句法指定的標(biāo)識(shí)符的范圍。例如,表達(dá)式″FXU_inst1.[a].b″僅指FXU_inst1 702a中的打印事件或打印事件組的實(shí)例化,但不包括FXU_inst2702b中的打印事件或打印事件組的實(shí)例化。
應(yīng)當(dāng)理解,在打印事件組聲明語(yǔ)句中指定的正則表達(dá)式優(yōu)選地不支持遞歸引用。因此,在頂級(jí)設(shè)計(jì)實(shí)體實(shí)例700中實(shí)例化的名為print_group3并具有以下打印事件聲明語(yǔ)句 --??![print_group,print_group3]<={*}; 的其他打印事件組將包括在其范圍內(nèi)(而非print_group3)聲明的所有打印事件組(即,print_group1和print_group2)以及打印事件(即,F(xiàn)XU_inst1.pevent1、FXU_inst1.pevent2、FXU_inst2.pevent1和FXU_inst2.pevent2)。HDL編輯器462還進(jìn)一步防止打印組之間的自引用循環(huán),其中第一打印事件組包括其中包含該第一打印事件組的第二打印事件組。雖然優(yōu)選地不允許遞歸引用和自引用循環(huán),但是允許將特定打印事件或打印事件組包括在多個(gè)打印事件組中。
現(xiàn)在參考圖8,其中示出了對(duì)應(yīng)于圖7的模擬模型的示例性打印事件表430的方塊圖。如上所述,打印事件表430由設(shè)備加載工具464在圖4D中示出的過(guò)程期間在模擬執(zhí)行模型480的設(shè)備邏輯塊420中創(chuàng)建。
如圖所示,打印事件表430包括一個(gè)或多個(gè)表項(xiàng)800,每個(gè)都對(duì)應(yīng)于模擬模型中聲明的特定打印事件或打印事件組。打印事件表430的每個(gè)表項(xiàng)800都包括若干字段,其中包括指示是否為特定模擬運(yùn)行啟用關(guān)聯(lián)的打印事件或打印事件組的啟用(EN)字段802、指示表項(xiàng)800是用于打印事件(E)還是打印事件組(G)的組/事件字段804、標(biāo)識(shí)其中實(shí)例化打印事件或打印事件組的設(shè)計(jì)實(shí)體實(shí)例的實(shí)例字段806(值0指示頂級(jí)設(shè)計(jì)實(shí)體實(shí)例700)、指示打印事件或打印事件組的名稱的名稱字段808、包含要呈現(xiàn)的打印事件的消息以響應(yīng)打印事件的發(fā)生的消息字段810,以及包含一個(gè)或多個(gè)指針的變量長(zhǎng)度指針字段812。對(duì)于打印事件,指針字段812中的第一指針標(biāo)識(shí)了打印事件的有效信號(hào),而第二以及任何后續(xù)指針(如果有)標(biāo)識(shí)了將通過(guò)打印消息報(bào)告其值的一個(gè)或多個(gè)信號(hào)。對(duì)于打印事件組,指針字段812中的指針只是指向作為打印事件組的成員的打印事件。
現(xiàn)在參考圖9,其中示出了根據(jù)本發(fā)明實(shí)施的可執(zhí)行模擬的模型和關(guān)聯(lián)的輸入文件的運(yùn)行時(shí)處理的過(guò)程流程圖。如圖所示,在模擬處理期間,將包括打印事件表430的實(shí)施的可執(zhí)行模擬的模型480傳送到模擬系統(tǒng)900,模擬系統(tǒng)900在示出的實(shí)施例中包括模擬器902和管理模擬器902的運(yùn)行的控制例程(在本文中稱為運(yùn)行時(shí)執(zhí)行程序(RTX)904)。模擬系統(tǒng)900還接收測(cè)試用例906,其指定了要應(yīng)用到可執(zhí)行模擬的模型480的值,并且接收至少一個(gè)正則表達(dá)式(regex)輸入文件908,其指示要在模擬運(yùn)行期間啟用可執(zhí)行模擬的模型480中聲明的哪些打印事件或打印事件組。
在優(yōu)選實(shí)施例中,默認(rèn)禁用所有打印事件和打印事件組。為了啟用選定的打印事件和打印事件組,設(shè)計(jì)和模擬人員提供在模擬運(yùn)行中標(biāo)識(shí)有關(guān)的打印事件和打印事件組的一個(gè)或多個(gè)正則表達(dá)式輸入文件908。在優(yōu)選實(shí)施例中,由一對(duì)以下形式的正則表達(dá)式來(lái)標(biāo)識(shí)有關(guān)的打印事件和打印事件組 design entity instance name,eventname 其中eventname是標(biāo)識(shí)有關(guān)的一個(gè)或多個(gè)打印事件或打印事件組的正則表達(dá)式,design entity instance name是標(biāo)識(shí)其中實(shí)例化有關(guān)的打印事件或打印事件組的一個(gè)或多個(gè)設(shè)計(jì)實(shí)體實(shí)例的正則表達(dá)式。正則表達(dá)式輸入文件(多個(gè))908中的正則表達(dá)式對(duì)可以進(jìn)一步如上所述地使用通配符和帶括號(hào)的句法。
響應(yīng)于接收到正則表達(dá)式輸入文件(多個(gè))908,RTX 904啟用打印事件表430中已標(biāo)識(shí)的打印事件和打印事件組,如下文中進(jìn)一步說(shuō)明的。接下來(lái),在測(cè)試用例906的模擬處理期間,模擬系統(tǒng)900例如使用以下格式的語(yǔ)句在日志文件910中呈現(xiàn)有關(guān)的打印事件 [design entity instance name,eventname],message 其中message是為打印事件表430中的打印事件定義的消息。應(yīng)當(dāng)指出的是,對(duì)于包括在正則表達(dá)式輸入文件(多個(gè))908中的每個(gè)正則表達(dá)式對(duì),優(yōu)選地在日志文件910中包括一組單獨(dú)的一個(gè)或多個(gè)語(yǔ)句,即使此操作導(dǎo)致多次呈現(xiàn)特定的打印事件。因此,如果為圖7的示例性可執(zhí)行模擬的模型同時(shí)啟用了print_group1和print_group2,則優(yōu)選地將打印事件print1在日志文件910中呈現(xiàn)兩次,以滿足可執(zhí)行模擬的模型上由每個(gè)打印事件組表示的不同方面。
在模擬期間或在其之后,可以呈現(xiàn)日志文件910的內(nèi)容以由軟件(例如,日志查看器912)在例如顯示器22中查看。當(dāng)然,如果需要,日志文件910也可以通過(guò)硬拷貝的方式打印,以協(xié)助查看和分析模擬結(jié)果。此外,可以使用常規(guī)的文本處理或過(guò)濾軟件來(lái)處理日志文件910以允許設(shè)計(jì)人員查看僅與選定打印事件或打印事件組有關(guān)的信息。
現(xiàn)在參考圖10,其中示出了根據(jù)本發(fā)明的示例性軟件模擬環(huán)境。如圖所示,在模擬運(yùn)行期間,可執(zhí)行模擬的模型480、將測(cè)試用例906應(yīng)用到可執(zhí)行模擬的模型480的模擬器902以及控制模擬器902的運(yùn)行的關(guān)聯(lián)RTX904位于數(shù)據(jù)處理系統(tǒng)10的主存儲(chǔ)器44中。RTX 904包括初始化代碼500(其在模擬運(yùn)行期間對(duì)模擬器902和可執(zhí)行模擬的模型480進(jìn)行初始化以便正確運(yùn)行)和處理代碼502(其引導(dǎo)模擬器902使用測(cè)試用例906執(zhí)行可執(zhí)行模擬的模型480)。
如圖10所示,RTX 904的初始化代碼500包括發(fā)送到模擬器902中的API函數(shù)WRITE TABLE 504的應(yīng)用程序接口(API)調(diào)用(例如,INIT PRINTEVENTS),以便在模擬運(yùn)行之前啟用可執(zhí)行模擬的模型480的打印事件表430中的打印事件和打印事件組。在下文中參考圖11更詳細(xì)地說(shuō)明了由API函數(shù)WRITE TABLE 504執(zhí)行的處理。還如圖10所示,RTX 904的處理代碼502包括發(fā)送到模擬器902中的API函數(shù)POLL MESSAGES 508的API調(diào)用(例如,POLL EVENTS)以獲得打印事件消息(如果有),以便由RTX 904包括在日志文件910中。在典型實(shí)施方式中,將由RTX 904在模擬器902的每個(gè)函數(shù)循環(huán)的末尾做出API調(diào)用POLL EVENTS,以便在逐周期的基礎(chǔ)上呈現(xiàn)打印事件消息。在至少一些實(shí)施例中,API函數(shù)POLL MESSAGES 508可以在模擬器902中做出其他API函數(shù)GETFAC 506,以便獲得用于在打印事件消息中呈現(xiàn)的信號(hào)值。在下文中參考圖12更詳細(xì)地說(shuō)明了由API函數(shù)POLL MESSAGES 508執(zhí)行的處理。
現(xiàn)在參考圖11,其中示出了根據(jù)本發(fā)明的用于啟用打印事件和打印事件組的示例性過(guò)程的高級(jí)邏輯流程圖。如上所述,在示例性實(shí)施例中,由模擬器902的API函數(shù)WRITE TABLE 504執(zhí)行示出的過(guò)程。
示出的過(guò)程始于塊1100,以響應(yīng)由API函數(shù)WRITE TABLE 504從RTX904接收到INIT PRINT EVENTS API調(diào)用,RTX 904將指針作為參數(shù)傳遞到正則表達(dá)式輸入文件908。響應(yīng)于接收到API調(diào)用,API函數(shù)WRITE TABLE504訪問(wèn)由輸入?yún)?shù)指示的正則表達(dá)式輸入文件908(塊1102)并在正則表達(dá)式輸入文件908中選擇正則表達(dá)式對(duì)(例如,設(shè)計(jì)實(shí)體實(shí)例名稱、事件名稱)以便處理(塊1104)。
在塊1104之后,過(guò)程轉(zhuǎn)到塊1106,塊1106示出了API函數(shù)WRITE TABLE504解析在塊1104選擇的正則表達(dá)式對(duì),并在每個(gè)表項(xiàng)800的打印事件表430中設(shè)置啟用字段802(對(duì)于表項(xiàng)800,實(shí)例字段806和名稱字段808的內(nèi)容滿足正則表達(dá)式對(duì)的兩個(gè)組成部分)。通過(guò)這種方式,在事件表430中為模擬運(yùn)行啟用用戶選擇的打印事件和打印事件組。在塊1108,API函數(shù)WRITE TABLE 504判定是否已處理了正則表達(dá)式輸入文件908中的所有正則表達(dá)式對(duì)。如果否,則過(guò)程返回塊1104和已經(jīng)說(shuō)明的后續(xù)的塊。但是,如果API函數(shù)WRITE TABLE 504在塊1108判定已處理了正則表達(dá)式輸入文件908中的所有正則表達(dá)式對(duì),則圖11中示出的過(guò)程在塊1110處結(jié)束。此后,可以為一個(gè)或多個(gè)其他正則表達(dá)式輸入文件908重復(fù)示出的過(guò)程。
現(xiàn)在參考圖12,其中示出了根據(jù)本發(fā)明的用于呈現(xiàn)打印事件的示例性過(guò)程的高級(jí)邏輯流程圖。示出的過(guò)程始于塊600,以響應(yīng)由模擬器902的API函數(shù)POLL MESSAGES 508接收到RTX 904的POLL EVENTS API調(diào)用。響應(yīng)于接收到POLL EVENTS API調(diào)用,API函數(shù)POLL MESSAGES 508在塊602進(jìn)入處理循環(huán),其中判定是否已處理了打印事件表430的所有表項(xiàng)800。如果是,則API函數(shù)POLL MESSAGES 508退出處理循環(huán),并且示出的過(guò)程在塊604結(jié)束。但是,如果API函數(shù)POLL MESSAGES 508在塊602判定尚未處理打印事件表430中的所有表項(xiàng)800,則過(guò)程前進(jìn)到塊610,塊610示出了API函數(shù)POLL MESSAGES 508訪問(wèn)打印事件表430中的下一表項(xiàng)800。
接下來(lái),在塊612,API函數(shù)POLL MESSAGES 508判定是否啟用了與選定表項(xiàng)800關(guān)聯(lián)的打印事件或打印事件組。如果否,則打印事件表430的選定表項(xiàng)800的處理結(jié)束,過(guò)程返回到上文已經(jīng)說(shuō)明的塊602。但是,如果啟用了打印事件表430的選定表項(xiàng)430,則API函數(shù)POLL MESSAGES 508通過(guò)檢查組/事件字段804進(jìn)一步在塊614判定選定表項(xiàng)800是否對(duì)應(yīng)于打印事件組或單獨(dú)的打印事件。如果選定的表項(xiàng)800表示打印事件組,則過(guò)程轉(zhuǎn)到將在下文說(shuō)明的塊630。另一方面,如果選定的表項(xiàng)800表示單獨(dú)的打印事件,則API函數(shù)POLL MESSAGES 508在塊620判定是否斷言了由指針字段812的第一指針標(biāo)識(shí)的有效信號(hào)。在示出的實(shí)施例中,API函數(shù)POLL MESSAGES 508通過(guò)向API函數(shù)GETFAC 506發(fā)出調(diào)用來(lái)確定有效信號(hào)的狀態(tài),GETFAC 506從可執(zhí)行模擬的模型480獲得有效信號(hào)值并將其返回給API函數(shù)POLL MESSAGES 508。響應(yīng)于在塊620判定未斷言有效信號(hào),打印事件表430的選定表項(xiàng)800的處理結(jié)束,并且過(guò)程返回已說(shuō)明的塊602。但是,如果斷言了有效信號(hào),則過(guò)程轉(zhuǎn)到塊622。
塊622示出了API函數(shù)POLL MESSAGES 508解釋包含在選定表項(xiàng)800的消息字段810中的消息并向API函數(shù)GETFAC 506發(fā)出調(diào)用以從可執(zhí)行模擬的模型480中獲得信號(hào)值(如果有)以便在消息中呈現(xiàn)。然后,API函數(shù)POLL MESSAGES 508使用信號(hào)值(如果有)通過(guò)由消息的格式化信息指定的格式來(lái)構(gòu)建打印事件消息并在日志文件910中呈現(xiàn)消息。此后,過(guò)程返回已說(shuō)明的塊602。
現(xiàn)在返回塊630,如果打印事件表430的選定表項(xiàng)800表示打印事件組,則API函數(shù)POLL MESSAGES 508進(jìn)入第二處理循環(huán),其中通過(guò)選定表項(xiàng)800的指針字段812中的打印事件指針來(lái)處理是打印事件組的成員的所有打印事件。因此,如果API函數(shù)POLL MESSAGES 508在塊630判定尚未處理選定表項(xiàng)800的指針字段812中的所有打印事件指針,則API函數(shù)POLLMESSAGES 508在塊632訪問(wèn)下一個(gè)此類打印事件指針并在塊634處理它在打印事件表430中的表項(xiàng)800。也就是說(shuō),在塊634,API函數(shù)POLL MESSAGES508執(zhí)行打印事件的表項(xiàng)800的在塊620-624處示出的每個(gè)步驟。在此類處理之后,過(guò)程返回塊630。一旦處理了所有打印事件指針,則API函數(shù)POLL MESSAGES 508退出第二處理循環(huán)并返回已說(shuō)明的塊602。
如上所述,本發(fā)明提供了支持在模擬系統(tǒng)中呈現(xiàn)打印事件的方法、系統(tǒng)和程序產(chǎn)品。根據(jù)本發(fā)明,可以由設(shè)計(jì)人員在定義數(shù)字設(shè)計(jì)的HDL源代碼文件和/或定義該數(shù)字設(shè)計(jì)的模擬設(shè)備的HDL源代碼文件中指定打印事件和打印事件組。然后,可以選擇性地為特定模擬運(yùn)行啟用和禁用打印事件和打印事件組以協(xié)助分析和調(diào)試數(shù)字設(shè)計(jì)。
雖然參考優(yōu)選實(shí)施例具體示出并描述了本發(fā)明,但是本領(lǐng)域中的技術(shù)人員將理解,在不偏離本發(fā)明的精神和范圍的情況下,可以在其中做出各種形式和細(xì)節(jié)上的更改。例如,雖然已經(jīng)參考示例性實(shí)施例說(shuō)明了本發(fā)明,其中將可執(zhí)行模擬的模型中的數(shù)據(jù)結(jié)構(gòu)(將打印事件與可執(zhí)行模擬的模型中的有效和功能信號(hào)關(guān)聯(lián))描述為打印事件表,但是本領(lǐng)域的技術(shù)人員將理解,可以使用一個(gè)或多個(gè)數(shù)據(jù)結(jié)構(gòu)并且可以使用公知的或?qū)?lái)開(kāi)發(fā)的數(shù)據(jù)結(jié)構(gòu)而非表(例如,鏈接列表、樹(shù)等)來(lái)實(shí)現(xiàn)此類數(shù)據(jù)結(jié)構(gòu)。此外,本發(fā)明的實(shí)施例之一可以實(shí)現(xiàn)為駐留于如圖1和圖2所述的一般地配置的一個(gè)或多個(gè)計(jì)算機(jī)系統(tǒng)的隨機(jī)存取存儲(chǔ)器28中的程序代碼。直到由計(jì)算機(jī)系統(tǒng)10請(qǐng)求,所述程序代碼可以一直存儲(chǔ)在另一個(gè)計(jì)算機(jī)可讀存儲(chǔ)設(shè)備中(例如,盤(pán)驅(qū)動(dòng)器33)或可移動(dòng)存儲(chǔ)設(shè)備中(例如,最終在CD-ROM驅(qū)動(dòng)器中使用的光盤(pán)或最終在軟盤(pán)驅(qū)動(dòng)器中使用的軟盤(pán))。將此類駐留于計(jì)算機(jī)可讀介質(zhì)中的程序代碼稱為程序產(chǎn)品。此外,程序代碼可以存儲(chǔ)在另一個(gè)計(jì)算機(jī)的存儲(chǔ)器中并在用戶需要時(shí)在局域網(wǎng)或廣域網(wǎng)(例如,因特網(wǎng))上傳輸。
權(quán)利要求
1.一種在數(shù)據(jù)處理系統(tǒng)中模擬處理的方法,所述方法包括
接收一個(gè)或多個(gè)描述數(shù)字設(shè)計(jì)的HDL源文件,所述數(shù)字設(shè)計(jì)包括多個(gè)分級(jí)布置的設(shè)計(jì)實(shí)體,所述一個(gè)或多個(gè)HDL源文件包括一個(gè)或多個(gè)語(yǔ)句,所述語(yǔ)句實(shí)例化所述多個(gè)分級(jí)布置的設(shè)計(jì)實(shí)體中的多個(gè)打印事件,每個(gè)打印事件在所述數(shù)字設(shè)計(jì)中具有關(guān)聯(lián)的消息和至少一個(gè)關(guān)聯(lián)的信號(hào);以及
處理所述一個(gè)或多個(gè)HDL源文件以獲得可執(zhí)行模擬的模型,其中所述處理包括在所述可執(zhí)行模擬的模型中建立數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)描述了為所述可執(zhí)行模擬的模型定義的所述多個(gè)打印事件并且將所述多個(gè)打印事件中的每個(gè)事件與其相應(yīng)關(guān)聯(lián)的信號(hào)進(jìn)行關(guān)聯(lián)。
2.如權(quán)利要求1中所述的方法,其中
所述至少一個(gè)關(guān)聯(lián)的信號(hào)包括所述可執(zhí)行模擬的模型中被斷言以使關(guān)聯(lián)的打印事件發(fā)生的有效信號(hào)。
3.如權(quán)利要求2中所述的方法,其中
對(duì)于所述多個(gè)打印事件中的特定打印事件,所述至少一個(gè)關(guān)聯(lián)的信號(hào)還包括所述可執(zhí)行模擬的模型中的功能信號(hào);以及
所述特定打印事件的關(guān)聯(lián)消息引用所述功能信號(hào)。
4.如權(quán)利要求3中所述的方法,其中
所述關(guān)聯(lián)的消息具有描述所述功能信號(hào)的值的呈現(xiàn)格式的格式化信息;以及
所述數(shù)據(jù)結(jié)構(gòu)包含所述消息和所述格式化信息。
5.如權(quán)利要求1中所述的方法,其中
所述接收包括在所述一個(gè)或多個(gè)HDL源文件中接收在所述多個(gè)設(shè)計(jì)實(shí)體中的一個(gè)實(shí)體內(nèi)實(shí)例化打印事件組的語(yǔ)句,所述打印事件組具有所述多個(gè)打印事件中的多個(gè)打印事件作為成員;以及
所述建立數(shù)據(jù)結(jié)構(gòu)包括建立將作為所述打印事件組的成員的所述多個(gè)打印事件與所述打印事件組關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)。
6.如權(quán)利要求1中所述的方法,還包括
響應(yīng)于接收到標(biāo)識(shí)所述多個(gè)打印事件中的選定打印事件以便為模擬運(yùn)行啟用的輸入,更新所述可執(zhí)行模擬的模型中的所述數(shù)據(jù)結(jié)構(gòu)以標(biāo)識(shí)為所述模擬運(yùn)行啟用所述多個(gè)打印事件中的哪些事件;
通過(guò)將測(cè)試用例應(yīng)用到所述可執(zhí)行模擬的模型來(lái)模擬所述數(shù)字設(shè)計(jì);以及
呈現(xiàn)在所述模擬運(yùn)行期間檢測(cè)到其發(fā)生的每個(gè)啟用打印事件的關(guān)聯(lián)的消息。
7.如權(quán)利要求6中所述的方法,其中呈現(xiàn)所述關(guān)聯(lián)的消息包括在日志文件中呈現(xiàn)所述關(guān)聯(lián)的消息。
8.如權(quán)利要求6中所述的方法,其中
所述接收包括在所述一個(gè)或多個(gè)HDL源文件中接收在所述多個(gè)設(shè)計(jì)實(shí)體中的一個(gè)實(shí)體內(nèi)實(shí)例化打印事件組的語(yǔ)句,所述打印事件組具有所述多個(gè)打印事件中的多個(gè)打印事件作為成員;
所述建立數(shù)據(jù)結(jié)構(gòu)包括建立將作為所述打印事件組的成員的所述多個(gè)打印事件與所述打印事件組關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu);以及
響應(yīng)于接收到標(biāo)識(shí)所述打印事件組以在模擬運(yùn)行期間啟用的輸入,更新所述可執(zhí)行模擬的模型中的所述數(shù)據(jù)結(jié)構(gòu)以便針對(duì)所述模擬運(yùn)行將所述多個(gè)打印事件標(biāo)識(shí)為啟用。
9.一種數(shù)據(jù)處理系統(tǒng),包括
處理單元;
連接到所述處理單元的數(shù)據(jù)存儲(chǔ)裝置;以及
模型建立程序代碼,其可由所述處理單元執(zhí)行以生成可執(zhí)行模擬的模型,其中所述模型建立程序代碼接收一個(gè)或多個(gè)描述數(shù)字設(shè)計(jì)的HDL源文件,所述數(shù)字設(shè)計(jì)包括多個(gè)分級(jí)布置的設(shè)計(jì)實(shí)體,所述一個(gè)或多個(gè)HDL源文件包括一個(gè)或多個(gè)語(yǔ)句,所述語(yǔ)句實(shí)例化所述多個(gè)分級(jí)布置的設(shè)計(jì)實(shí)體中的多個(gè)打印事件,每個(gè)打印事件在所述數(shù)字設(shè)計(jì)中具有關(guān)聯(lián)的消息和至少一個(gè)關(guān)聯(lián)的信號(hào),并且其中所述模型建立代碼處理所述一個(gè)或多個(gè)HDL源文件以獲得包括數(shù)據(jù)結(jié)構(gòu)的可執(zhí)行模擬的模型,所述數(shù)據(jù)結(jié)構(gòu)描述了為所述可執(zhí)行模擬的模型定義的所述多個(gè)打印事件,其中所述數(shù)據(jù)結(jié)構(gòu)將所述多個(gè)打印事件中的每個(gè)事件與其相應(yīng)關(guān)聯(lián)的信號(hào)進(jìn)行關(guān)聯(lián)。
10.如權(quán)利要求9中所述的數(shù)據(jù)處理系統(tǒng),其中
所述至少一個(gè)關(guān)聯(lián)的信號(hào)包括所述可執(zhí)行模擬的模型中被斷言以使關(guān)聯(lián)的打印事件發(fā)生的有效信號(hào)。
11.如權(quán)利要求10中所述的數(shù)據(jù)處理系統(tǒng),其中
對(duì)于所述多個(gè)打印事件中的特定打印事件,所述至少一個(gè)關(guān)聯(lián)的信號(hào)還包括所述可執(zhí)行模擬的模型中的功能信號(hào);以及
所述特定打印事件的關(guān)聯(lián)消息引用所述功能信號(hào)。
12.如權(quán)利要求11中所述的數(shù)據(jù)處理系統(tǒng),其中
所述關(guān)聯(lián)的消息具有描述所述功能信號(hào)的值的呈現(xiàn)格式的格式化信息;以及
所述數(shù)據(jù)結(jié)構(gòu)包含所述消息和所述格式化信息。
13.如權(quán)利要求9中所述的數(shù)據(jù)處理系統(tǒng),其中
所述一個(gè)或多個(gè)HDL源文件包括在所述多個(gè)設(shè)計(jì)實(shí)體中的一個(gè)實(shí)體內(nèi)實(shí)例化打印事件組的語(yǔ)句,所述打印事件組具有所述多個(gè)打印事件中的多個(gè)打印事件作為成員;以及
所述數(shù)據(jù)結(jié)構(gòu)將作為所述打印事件組的成員的所述多個(gè)打印事件與所述打印事件組關(guān)聯(lián)。
14.一種數(shù)據(jù)處理系統(tǒng),包括
處理單元;
連接到所述處理單元的數(shù)據(jù)存儲(chǔ)裝置;以及
模型程序代碼,其可由所述處理單元執(zhí)行以使用可執(zhí)行模擬的模型來(lái)模擬數(shù)字系統(tǒng)的操作,所述可執(zhí)行模擬的模型包括描述為所述可執(zhí)行模擬的模型定義的多個(gè)打印事件的數(shù)據(jù)結(jié)構(gòu),其中所述數(shù)據(jù)結(jié)構(gòu)將所述多個(gè)打印事件中的每個(gè)事件與所述可執(zhí)行模擬的模型中的相應(yīng)關(guān)聯(lián)的信號(hào)進(jìn)行關(guān)聯(lián),其中所述模擬程序代碼,響應(yīng)于接收到標(biāo)識(shí)所述多個(gè)打印事件中的選定打印事件以便為模擬運(yùn)行啟用的輸入,更新所述可執(zhí)行模擬的模型中的所述數(shù)據(jù)結(jié)構(gòu)以標(biāo)識(shí)為所述模擬運(yùn)行啟用所述多個(gè)打印事件中的哪些事件,并且其中所述模擬程序代碼通過(guò)將測(cè)試用例應(yīng)用到所述可執(zhí)行模擬的模型來(lái)模擬所述數(shù)字設(shè)計(jì),并且呈現(xiàn)在所述模擬運(yùn)行期間檢測(cè)到其發(fā)生的每個(gè)啟用打印事件的關(guān)聯(lián)的消息。
15.如權(quán)利要求14中所述的數(shù)據(jù)處理系統(tǒng),其中所述模擬程序代碼在日志文件中呈現(xiàn)所述關(guān)聯(lián)的消息。
16.如權(quán)利要求14中所述的數(shù)據(jù)處理系統(tǒng),其中
所述數(shù)據(jù)結(jié)構(gòu)將作為打印事件組的成員的多個(gè)打印事件與所述打印事件組關(guān)聯(lián);以及
響應(yīng)于接收到標(biāo)識(shí)所述打印事件組以在模擬運(yùn)行期間啟用的輸入,所述模擬程序代碼更新所述可執(zhí)行模擬的模型中的所述數(shù)據(jù)結(jié)構(gòu)以便針對(duì)所述模擬運(yùn)行將所述多個(gè)打印事件標(biāo)識(shí)為啟用。
全文摘要
本發(fā)明涉及一種在數(shù)據(jù)處理系統(tǒng)中模擬處理的方法以及所述數(shù)據(jù)處理系統(tǒng)。根據(jù)模擬處理的方法,接收一個(gè)或多個(gè)描述數(shù)字設(shè)計(jì)的HDL源文件,所述數(shù)字設(shè)計(jì)包括多個(gè)分級(jí)布置的設(shè)計(jì)實(shí)體。所述一個(gè)或多個(gè)HDL源文件包括一個(gè)或多個(gè)語(yǔ)句,所述語(yǔ)句實(shí)例化所述多個(gè)分級(jí)布置的設(shè)計(jì)實(shí)體中的多個(gè)打印事件,其中每個(gè)打印事件在所述數(shù)字設(shè)計(jì)中具有關(guān)聯(lián)的消息和至少一個(gè)關(guān)聯(lián)的信號(hào)。處理所述一個(gè)或多個(gè)HDL源文件以獲得包括數(shù)據(jù)結(jié)構(gòu)的可執(zhí)行模擬的模型,所述數(shù)據(jù)結(jié)構(gòu)描述了為所述可執(zhí)行模擬的模型定義的所述多個(gè)打印事件,并且將所述多個(gè)打印事件中的每個(gè)事件與其相應(yīng)關(guān)聯(lián)的信號(hào)進(jìn)行關(guān)聯(lián)。
文檔編號(hào)G06F17/50GK101236574SQ20081000922
公開(kāi)日2008年8月6日 申請(qǐng)日期2008年1月29日 優(yōu)先權(quán)日2007年1月30日
發(fā)明者D·E·威廉姆斯, G·波波克, W·勒斯納 申請(qǐng)人:國(guó)際商業(yè)機(jī)器公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1