硬體設計的混合式並發及串行邏輯仿真的製作方法
2023-09-12 11:19:00 2
專利名稱:硬體設計的混合式並發及串行邏輯仿真的製作方法
技術領域:
本發明涉及邏輯仿真,且尤其涉及包括串行仿真引擎和並發仿真引擎的集成邏輯仿真器。相關技術邏輯仿真是電子電路的設計流程中的必要步驟。邏輯仿真通常藉助於被稱為邏輯仿真器的電子設計自動化(EDA)軟體工具來執行,該邏輯仿真器處理通常以硬體描述語言(HDL)代碼的形式提供的硬體設計。在將硬體設計交付給生產實際電子電路的物理實現階段之前,硬體設計者執行大量的邏輯仿真來驗證硬體設計遵循其規範。在典型的硬體設計流程中,伴隨著設計過程一起執行功能驗證過程以便使得生產出不遵循其規範的電路的風險最小化。邏輯仿真通常生成用戶有興趣觀察的一組電路信號的波形作為其結果。用戶可以分析並可視化所生成的波形以驗證該硬體設計正確地工作。邏輯仿真器也支持對具有嵌入式斷言的硬體設計的仿真,嵌入式斷言使用電路信號的值來檢測導致電路故障的條件。邏輯仿真器在仿真電路的同時評估此類斷言,並將其違例報告給用戶。基於這些違例報告,用戶可以發現和修復硬體設計中的設計錯誤。發明概述提供了一種仿真通過硬體描述語言(HDL)規定的設計的方法。在該方法中,可運行集成邏輯仿真器。該集成邏輯仿真器可包括串行仿真引擎和並發仿真引擎。串行仿真引擎每次可執行一個仿真,而並發仿真引擎可執行多個並發仿真。使用計算機,可基於由HDL的執行模型定義的事件類來同步串行仿真引擎和並發仿真引擎的仿真。該設計可劃分成由該集成邏輯仿真器執行的兩組模塊。第一組模塊可在串行仿真引擎上執行,而第二組模塊可在並發仿真引擎上執行。在一個實施例中,該劃分基於串行仿真引擎的能力和/或並發仿真引擎的能力來進行以達成期望水平的仿真性能。在另一實施例中,該劃分可由用戶手動執行。該串行仿真引擎或並發仿真引擎中任一者可被指定為該集成邏輯仿真器的主仿真引擎,其中另一個仿真引擎則被指定為副仿真引擎。在一個實施例中,該串行仿真引擎是主仿真引擎而該並發仿真引擎是副仿真引擎。在另一個實施例中,該並發仿真引擎是主仿真引擎而該串行仿真引擎是副仿真引擎。主仿真引擎在同步點調用副仿真引擎。在一個實施例中,這些同步點在由HDL的執行模型定義的隊列評估之前。在另一個實施例中,這些同步點在由HDL的執行模型定義的隊列評估之後。注意,進行設計劃分可將設計層級納入考慮。例如,在一個實施例中,第一模塊正由副仿真引擎仿真意味著該設計層級內在該第一模塊之下的更深處實例化的所有子模塊也由該副仿真引擎來仿真。在另一實施例中,若(由副仿真引擎仿真的)第一模塊實例化第二模塊,則該第二模塊可由主仿真引擎來仿真。根據該方法,可將諸副仿真引擎模塊中的某些變量標識為用於與主仿真引擎通信的接口變量。這些接口變量的值可被存儲在串行仿真引擎和並發仿真引擎兩者中。可於在副仿真引擎中評估事件之前在同步點將接口變量值傳遞至副仿真引擎。在此傳遞期間,這些接口變量值可從主仿真弓I擎存儲表示轉譯成副仿真弓I擎存儲表示。在一個實施例中,僅發生改變的接口變量值在同步點被傳遞。
也可於在副仿真引擎中評估事件之後在同步點將接口變量值傳遞至主仿真引擎。在此傳遞期間,接口變量值可從副仿真引擎存儲表示轉譯成主仿真引擎存儲表示。在一個實施例中,僅發生改變的接口變量值在同步點被傳遞。注意,執行模型中的同步點可通過行業標準應用編程接口來建立。示例性行業標準應用編程接口包括但不限於程式語言接口(PLI)和驗證規程接口(VPI)。在另一實施例中,同步點可通過專用接口來建立。值得注意的是,副仿真引擎模塊可由主仿真引擎中的樁模塊表示。該樁模塊包括用於相應的副仿真引擎模塊的接口變量。樁模塊不包括相應的副仿真引擎模塊的HDL。提供了另一種仿真以HDL描述的設計的方法。在該方法中,該設計的模塊可被劃分成用於由串行仿真引擎仿真的諸第一模塊和用於由並發仿真引擎仿真的諸第二模塊。可基於與HDL的執行模型一致的事件類來區分諸第一和第二模塊的仿真優先級。使用計算機,串行仿真引擎和並發仿真引擎的仿真可針對每一事件類來同步。同步可包括在串行仿真引擎與並發仿真引擎之間傳遞經更新的接口變量值,由諸第二模塊將其與諸第一模塊的至少一子集共享。該傳遞可包括轉譯經更新的接口變量值的表不。每個第二模塊可在串行仿真引擎中被表示為一樁模塊,其中該樁模塊是諸第一模塊之一。並發仿真引擎中的接口變量的諸值可存儲在字中,其中這些值與該樁模塊在串行仿真引擎中的多個實例相關聯。同步可進一步包括在串行仿真引擎中完成一事件類的評估,並隨後將經更新的接口變量值傳遞至並發仿真引擎以評估該相同的事件類。同步還可再包括在並發仿真引擎中完成這一事件類的評估,並隨後將經更新的接口變量值傳遞至串行仿真引擎以(I)在並發仿真引擎生成了該類中的新事件時評估該相同的事件類,或(2)根據HDL的執行模型評估下一事件類(若存在)。在一個實施例中,HDL是Verilog且這一事件類是活躍事件、非活躍事件、以及非阻塞性賦值更新事件之一。在一個實施例中,同步可包括基於由HDL指定的事件類的優先級使用串行仿真引擎和並發仿真引擎前行通過所有事件類。附圖
簡述
圖I示出Verilog HDL執行模型中的隊列評估的子集。圖2解說嵌入式模塊的埠變量,其用作該模塊的接口變量。圖3A和3B分別解說用於常規頂層模塊(top_module)和包括樁模塊(stubmodule)的頂層模塊的示例性HDL。圖4A和4B分別解說常規頂層模塊和包括樁模塊的頂層模塊的框圖。圖5A和5B分別解說串行仿真引擎和並發仿真引擎中的接口變量值的示例性存儲表不。圖6A解說用於針對活躍事件隊列評估在串行仿真引擎與並發仿真引擎之間進行轉譯和同步的示例性動作。圖6B解說用於針對多個事件隊列評估在串行仿真引擎與並發仿真引擎之間進行 轉譯和同步的示例性動作,這些事件隊列基於由Verilog HDL執行模型指定的隊列類型。圖6C解說用於針對多個事件隊列評估在串行仿真引擎與並發仿真引擎之間進行轉譯和同步的示例性動作,這些事件隊列基於由VHDL執行模型指定的隊列類型。圖7解說用於串行仿真引擎和並發仿真引擎的數據存儲。值得注意的是,用於並發仿真引擎的字存儲允許一條被執行指令仿真多個邏輯功能並生成與串行仿真引擎中的多個邏輯實例相對應的多個輸出。圖8解說如由串行和並發仿真引擎實現的各個模塊的框圖。值得注意的是,串行仿真引擎中的模塊包括將責任傳遞給並發仿真引擎的樁模塊,而並發仿真引擎中的模塊包括將責任傳遞給串行仿真引擎的樁模塊。圖9解說包括集成邏輯仿真器的示例性數字ASIC設計流程的簡化表示。附圖的詳細描述常規邏輯仿真器在本文稱為「串行仿真引擎」的技術中每次執行一個仿真。為了達成足夠的性能,串行仿真引擎被設計成儘可能快地執行每個仿真。於2009年9月24日提交並通過援引納入於此的題為「Concurrent Simulation Of Hardware Designs WithBehavioral Characteristics (對具有行為特性的硬體設計進行並發仿真)」的待決美國專利申請12/586,724描述了用於高效地執行硬體設計的並發仿真的技術,其在本文被稱為「並發仿真引擎」。並發仿真引擎通過一次執行若干仿真來達成性能。取決於串行和並發仿真引擎的實現以及正被仿真的硬體設計的具體特性,可能希望使用串行仿真引擎來執行該硬體設計的某些部分並使用並發仿真引擎來執行該硬體設計的某些其他部分。以下描述用於將並發仿真引擎和串行仿真引擎集成到單個集成邏輯仿真器中的基於軟體的技術。從此集成得到的邏輯仿真器在下文稱為「集成邏輯仿真器」。注意,邏輯仿真器實現如由硬體描述語言(HDL)規定的特定執行模型。出於描述集成邏輯仿真器的目的,將使用Verilog HDL0然而,集成邏輯仿真器可應用於其他HDL以及與那些HDL相關聯的執行模型。Verilog HDL根據潛在的離散事件執行模型來解讀。定義從其執行事件的若干事件隊列。事件⑴隨著仿真前行而生成,⑵被放在特定隊列上,⑶在仿真期間在如由執行模型所規定的特定時間點從該隊列移除,以及(4)被執行。執行事件進而可生成附加事件,這些附加事件被放在隊列上供以後執行。涉及事件的該序列繼續,直至不再生成事件,此時仿真終止。
通常,要仿真的硬體設計以Verilog HDL表達為多個模塊。Verilog模塊與實際的硬體子組件之間往往存在對應關係,但不一定需要如此(例如,Verilog模塊可表示並非由單個硬體子組件實現的抽象功能或行為)。Verilog模塊被安排成層級,其中模塊的實例被稱為「嵌入」在另一模塊中。例如,用於微處理器的模塊可被分解成各種算術模塊、邏輯模塊、控制模塊、以及存儲模塊。在該微處理器模塊內,存在每個組成模塊的以層級來組織的嵌入式實例。每個實例化的Verilog模塊根據Verilog HDL執行模型的規範來生成供邏輯仿真器執行的事件。Verilog HDL邏輯仿真器無論是僅使用串行仿真引擎、僅使用並發仿真引擎、還是使用串行仿真引擎與並發仿真引擎的組合(後者即為本文描述的集成邏輯仿真器)來實現的,都應當遵循該執行模型。例如,圖I示出由Verilog HDL執行模型規定的隊列的子集。該Verilog HDL執行模型要求來自邏輯仿真器的活躍事件隊列的所有活躍事件101在來自該邏輯仿真器的 非活躍事件隊列的任何非活躍事件102執行之前執行。一旦活躍和非活躍事件隊列耗盡,就執行來自非阻塞性賦值(non-blocking assignment即NBA)更新事件隊列的NBA更新事件103。注意,Verilog HDL執行模型中還存在除圖I中所示的那些隊列以外的其他隊列,其具有用於隨著仿真前行使得從一個隊列前進至另一個隊列的確立的規則。在使用串行仿真引擎和並發仿真引擎兩者的集成邏輯仿真器中,描述硬體設計的HDL程序可被劃分成兩組模塊。一組模塊由串行仿真引擎執行而另一組模塊由並發仿真引擎執行。在集成邏輯仿真器中從一個隊列前進至另一個隊列必須跨串行仿真引擎和並發仿真引擎進行協調,以使得該集成邏輯仿真器不會違背Verilog HDL執行模型(例如,在串行仿真引擎或並發仿真引擎任一者中仍有活躍事件和非活躍事件要執行時不執行NBA更新事件)。Verilog模塊通過輸入/輸出埠變量來彼此交互。Verilog模塊還可通過稱為跨模塊引用的設施直接讀寫其他模塊實例中的內部變量(其機理是本領域技術人員已知的且因此本文不再描述)。在模塊間交互中使用的這些內部變量可被標識並稱為模塊的「接口
變量」。圖2示出具有兩個模塊的簡單常規設計加法器模塊202以及將加法器模塊202實例化的頂層模塊201。頂層模塊201中的變量與嵌入式加法器模塊202中的變量之間的連接是通過加法器埠變量進行的。這些埠變量是該設計中的接口變量。如圖2中所示,頂層模塊201的接口變量「elk (時鐘)」、「inputl (輸入I)」和「input2 (輸入2)」映射成加法器模塊202的接口變量「clk」、「a」和「b」。因此,例如,當變量「輸入I」改變時,變量「a」也改變。類似地,加法器模塊202的接口變量「out (輸出)」映射成頂層模塊201的接口變量「sum (和)」。值得注意的是,當指派給串行仿真引擎的模塊與指派給並發仿真引擎的模塊對接時,該串行仿真引擎模塊可與用作該並發仿真引擎模塊的佔位符的樁模塊交互。該樁模塊可包含該嵌入式模塊的所有接口變量。回到圖2中所示的設計,該頂層模塊可被指派給串行仿真引擎並且該加法器模塊可被指派給並發仿真引擎。在該情形中,串行仿真並非看到加法器模塊RTL,而是替地看到該加法器的樁模塊。圖3A解說了設計200 (圖2)的常規HDL 300,而圖3B解說了在用集成邏輯仿真器來仿真時由串行仿真引擎看到的HDL 310。注意,加法器模塊(adder_module)的接口變量保留在HDL 310中(也稱為樁模塊),但該加法器模塊的功能方面(即「alWayS@(p0Sedge_elk) 」和「out=a+b」)不再存在於串行仿真引擎中。值得注意的是,如參照圖4A和4B描述的,該加法器模塊的功能方面代替地在並發仿真引擎中定義。圖4A和4B解說頂層模塊和嵌入式模塊的示例性劃分。具體而言,圖4A解說了圖2中所示的設計的常規邏輯仿真器視圖。在該情形中,所有模塊(即,頂層模塊201和加法器模塊202)都由串行仿真引擎401來仿真。作為對比,圖4B解說了在使並發仿真引擎402負責嵌入式加法器模塊202時的劃分。在這種情形中,實際的加法器模塊HDL可由並發仿真引擎402來仿真,而串行仿真引擎401可與該嵌入式加法器模塊的樁模塊202A交互。在圖4B中所示的配置中,串行仿真引擎401可將其自己的存儲403分配給每個接口變量(示出了一個接口變量)。可對用作樁模塊202A的輸入的接口變量中寫入值,並且從用作樁模塊202A的輸出的接口變量讀取值。同樣,並發仿真引擎402可將其自己的存儲404分配給每個接口變量(示出了一個接口變量)。可從用作並發仿真引擎模塊(即,加法器·模塊202)的輸入的接口變量讀取值,並且可對用作加法器模塊202的輸出的接口變量中寫入值。如以上指出的,加法器模塊202中的接口變量的值改變將反映在樁模塊202A中,由此確保頂層模塊201的正確運作。類似地,樁模塊202A中的接口變量的值改變將反映在加法器模塊202中以確保其正確運作。注意,不是接口變量的那些變量存儲在串行仿真引擎401或並發仿真引擎402任一者中但不同時存儲在這兩者中。換言之,集成邏輯仿真器中的串行仿真引擎401和並發仿真引擎402之間的共享狀態限於接口變量。值得注意的是,串行仿真引擎和並發仿真引擎可利用不同的表示法來存儲變量值。在一個實施例中,串行仿真引擎可使用其中為變量存儲多個值,其中每個仿真一個值的表示。例如,參考圖5A中所示的串行仿真引擎500,考慮8位變量V的變量值表示,其具有關於以下4個不同仿真的值仿真O、仿真I、仿真2和仿真3。變量V的每個仿真存儲8位。作為對比,參考圖5B中所示的並發仿真引擎510,這4個仿真的值存儲在多個4位字中。具體而言,分配了 8個這樣的字,變量V中的每一位一個字(S卩,V
-V [7])。圖5A和5B中的框501和502分別解說了在串行仿真引擎500和並發仿真引擎510中單個位跨多個仿真的值是如何組織的(參見例如位A、B、C和D)。由於存在接口變量的兩個副本,即串行仿真引擎中一個副本以及並發仿真引擎中一個副本,因此這兩個副本在更新時必須保持同步,以使得該集成邏輯仿真器保持整個仿真狀態的一致視圖。在一些實施例中,接口變量值在隊列評估開始和結束時被同步。同步這些接口變量值要求在用於存儲變量值的串行仿真引擎表示(參見例如圖5A)與並發仿真引擎表示(參見例如圖5B)之間進行轉譯。圖6A解說在Verilog HDL執行模型中基於活躍事件隊列在串行仿真引擎600A與並發仿真引擎600B之間的示例性同步。注意,每個仿真引擎具有其自己的活躍事件隊列。即,串行仿真引擎600A具有活躍事件601而並發仿真引擎具有活躍事件611。在一個實施例中,當串行仿真引擎600A中的活躍事件隊列中不再有活躍事件601時,就到了與並發仿真引擎600B同步的時間。在步驟630,用於並發仿真引擎模塊的埠接口變量值從串行仿真引擎600A傳遞至轉譯和同步功能620。該轉譯和同步功能620包括從由串行仿真引擎600A使用的存儲表示轉譯成由並發仿真引擎600B使用的存儲表示(例如,從圖5A中所示的存儲表示轉譯成圖5B中所示的存儲表示)。在步驟631,在並發仿真引擎600B中基於經轉譯的傳遞來的埠接口變量值執行活躍事件611。在步驟632,並發仿真引擎模塊的埠接口變量值經由轉譯和同步功能620傳遞至串行仿真引擎600A。在該方向上,轉譯和同步功能620包括從由並發仿真引擎600B使用的存儲表示轉譯成由串行仿真引擎600A使用的存儲表示。注意,轉譯和同步功能620構成膠合邏輯640的一部分。該膠合邏輯提供編譯時功能和運行時功能兩者。編譯時功能包括確保當串行仿真引擎600A被給予用於所有模塊的原始碼時,為並發仿真引擎600B提供指派給它的模塊的定義,同時為串行仿真引擎600A提供相同模塊的樁定義。運行時功能包括確保一旦仿真器開始運行並生成事件,就提供串行與並發仿真引擎之間的接口變量轉換。運行時功能還包括確保串行仿真引擎600A與並發仿真引擎600B兩者中的仿真的正確同步,以使得串行仿真引擎600A中的各隊列的執行遵循Verilog HDL執行模型。因此,轉譯和同步功能620構成膠合邏輯640的運行時功能的一部分。注意,在並發仿真引擎600B中執行活躍事件611可能會在串行仿真引擎600A中生成附加的活躍事件601,這由步驟633指示(使用轉譯和同步功能620來同步)。這些新事件隨後按照Verilog HDL執行模型來執行,並且隨後使用轉譯和同步功能620來重複步驟630、631、632和633。當串行仿真引擎600A中沒有活躍事件601時(基於由並發仿真弓丨擎600B生成的附加活躍事件或串行仿真引擎600A中已在排隊的活躍事件),則可根據Verilog HDL執行模型執行來自串行仿真引擎600A的非活躍事件隊列的非活躍事件602。參照圖6A中的活躍隊列描述的同步可擴展到Verilog HDL執行模型中的其他隊列評估。例如,圖6B解說了示例性擴展,包括串行仿真引擎600A和並發仿真引擎600B的活躍事件隊列(活躍事件601和611)、非活躍事件隊列(非活躍事件602和612)、以及NBA更新事件隊列(NBA更新事件603和613)。分別使用轉譯和同步功能620、621和622 (它們構成膠合邏輯640的一部分)來同步串行仿真引擎600A和並發仿真引擎600B之間的活躍、非活躍以及NBA更新隊列。在串行仿真引擎600A中評估了隊列之後,接口變量值被傳遞至並發仿真引擎600B。隨後從並發仿真引擎600B中的相應隊列執行這些事件。包含事件執行的結果的接口變量值隨後傳遞迴串行仿真引擎600A,串行仿真引擎600A進而根據Verilog HDL執行模型逐隊列前行。注意,如圖6B中指示的,在串行仿真引擎600A或並發仿真引擎600B任一者中執行的任何事件可生成更高或更低優先級的一個或更多個事件。一般而言,每當並發仿真引擎600B生成任何新事件時,轉譯和同步功能會得到通知,其中該新事件隨後被放在串行仿真引擎600A的恰適隊列中。注意,以上描述了基於Verilog HDL的示例性隊列,包括活躍事件、非活躍事件、以及NBA更新事件。然而,集成邏輯仿真器可有利地應用於其他HDL以及與那些HDL相關聯的執行模型。因此,一般而言,集成邏輯仿真器可與由具體HDL提供的所有事件類協作。而且,每種具體HDL可具有不同的隊列轉變規則,其可由集成邏輯仿真器兌現。 例如,圖6C解說了 VHDL (超高速集成電路(VHSIC)HDL)模型中的示例性隊列的仿真執行次序。注意,在VHDL模型中,執行次序前行通過信號更新事件、函數求值事件、以及進程評估事件,其中控制也在此方向上流動直至到達進程執行的結束,此時控制返回到信號更新。如上所述,可使用膠合邏輯640 (其包括轉譯和同步功能620、621和622)來促進串行仿真引擎600A與並發仿真引擎600B之間的每次執行轉變。考慮以下示例,其中在集成邏輯仿真器中執行相關的活躍事件和NBA更新事件。這些事件來自3個賦值(其中Verilog賦值包括將計算出的變量值寫到存儲器位置)由串行仿真引擎仿真的模塊中的兩個賦值以及來自由並發仿真引擎仿真的模塊的一個賦值。串行仿真引擎//活躍事件。alwaysi(posedge CLK)A=B+1;//NBA更新事件。
alwaysi(posedge CLK)C〈=D;並發仿真引擎//活躍事件。alwaysi (A)B=A+2;在以上示例中,當CLK在正邊沿(posedge)觸發時,生成兩個事件。一個事件被放在串行仿真引擎活躍事件隊列中,而另一個事件被放在串行仿真引擎NBA更新事件隊列中。根據關於圖6B描述的優先級序列,根據Verilog HDL執行模型,活躍事件首先執行,此後串行仿真活躍事件隊列為空。該空狀態導致集成邏輯仿真器根據參照圖6A描述的4步驟過程與並發仿真引擎同步。具體而言,變量A的值從串行仿真引擎傳遞至並發仿真引擎。在並發仿真引擎中執行活躍事件。變量B的經更新值從並發仿真引擎傳遞至串行仿真引擎。由於在並發仿真中執行的活躍事件,在串行仿真引擎中在前行至下一隊列評估之前可能有附加工作要做(即,新的活躍事件)。因此,該過程返回至串行仿真引擎中的活躍事件隊列。此時,串行仿真引擎中不再有活躍事件要執行。而且,串行仿真引擎和並發仿真引擎中皆沒有非活躍事件(後一點是在以圖6A中概述的方式在非活躍事件隊列上與並發仿真引擎同步之後確定的),這意味著串行仿真可執行待決NBA更新事件,其寫入變量C。在一個實施例中,在隊列評估點僅同步經修改的接口變量(或者替換地,僅同步接口變量中經修改的位)以減少需要完成的工作量。在其他實施例中,在隊列評估點僅同步具有經修改的接口變量的仿真。隊列評估點可發生在一個仿真弓丨擎中的具體隊列中的所有事件均已完成時。在一個實施例中,隊列評估點可觸發同步,即,膠合邏輯將任何經更新的接口變量傳遞至相應的隊列以供在另一個仿真引擎中執行。然而,在其他實施例中,一個或更多個接口變量中的改變可觸發同步。因此,同步可(全部或部分地)在隊列評估之前發生、在隊列評估之後發生、或在隊列評估之前以及隊列評估之後發生。圖7解說了由串行仿真引擎700A仿真的頂層模塊701、以及由並發仿真引擎700B仿真的加法器模塊712。在該實施例中,頂層模塊701包括多個樁加法器模塊702A、702B、702C和702D。值得注意的是,串行仿真引擎700A中的所有樁加法器模塊實例702A-702D可以是僅由並發仿真引擎700B中的一個加法器模塊實例712來定義的。有利地,這方面為集成邏輯仿真器提供了顯著的槓桿作用。具體而言,串行仿真器引擎700A中的每個樁模塊可具有用於每個接口變量的單獨存儲,而並發仿真引擎700B中的相應模塊可具有能夠存儲多個值的一個字,由此允許該字存儲與多個樁模塊相關聯的接口變量值。例如,在圖7中,樁加法器模塊702A-702D可具有分別用於每個接口變量的存儲703A-703D。作為對比,並發仿真引擎700B中的加法器模塊712僅需要一個字713來存儲來自每個樁加法器模塊702A-702D的那些接口變量。假定存儲在存儲703A-703D中的這些值是一位值(例如,elk值), 則字713的每一位可對應於由具體樁模塊所存儲的值(S卩,703A^703A^、703703B\ 7030703C,、703D^703D』)。因此,若串行仿真引擎700A中的存儲
703C中的接口變量值在事件執行期間已改變,則該值將在同步期間被傳遞至並發仿真引擎700B中的位703C』。注意,該傳遞包括與參照圖5A和5B描述的相同的轉譯。還要注意,其他實施例可具有存儲在串行仿真引擎700A中的多位值,其可作為多位值被傳遞至並發仿真引擎700B的一個字的各位置。該存儲配置允許並發仿真引擎700B在加法器模塊712中用多個(即,4個)值執行多個(即,4個)並發仿真。有利地,用於邏輯仿真的許多計算機具有擴展字值,例如,32位、64位或128位的寄存器。因此,集成邏輯仿真器的並發仿真引擎可對存儲在一個字中的相當大量的數據並發地應用相同操作。在以上描述的實施例中,在是由串行仿真引擎在同步點調用並發仿真引擎這一意義上,串行仿真引擎可以是集成邏輯仿真器的主仿真引擎。在其他實施例中,相反配置也是可能的,即,其中並發仿真引擎是主仿真引擎,其根據Verilog HDL執行模型逐隊列前進並在恰適的同步點調用串行仿真引擎。在一個實施例中,執行模型中的同步點可通過行業標準應用編程接口來建立,諸如程式語言接口(PLI)或驗證規程接口(VPI ),其用於實現對Verilog仿真的用戶定義擴展。在另一實施例中,執行模型中的同步點可通過一個或更多個專用接口來建立。在一個實施例中,為確定哪些模塊可被實例化為樁模塊(以及使其相關聯的並發仿真在並發仿真引擎中執行)對設計進行的劃分可由用戶手動執行。在另一實施例中,該劃分可由仿真工具基於潛在可能的實例的數目自動地執行(即,實例數目越大,並發仿真引擎可達成的槓桿作用就越大)。在又一實施例中,劃分可基於串行仿真引擎的能力和/或並發仿真引擎的能力來進行以達成期望水平的仿真性能。例如,若模塊通過PLI (程式語言接口)作出對用戶定義的C函數的大量調入,則該模塊可能更適合由串行仿真引擎執行,因為用戶定義的函數多半可能編寫成沒有利用並發仿真引擎的值表示的能力。注意,對設計進行劃分可將設計層級納入考慮。例如,在一個實施例中,第一模塊正由副仿真引擎仿真意味著該設計層級內在該第一模塊之下的更深處實例化的所有子模塊也由該副仿真引擎來仿真。在另一實施例中,若(由副仿真引擎仿真的)第一模塊實例化第二模塊,則該第二模塊可由主仿真引擎來仿真。如上所述,主仿真引擎可以是串行仿真引擎,而副仿真引擎可以是並發仿真引擎(以及反之)。
例如,以下代碼提供了集成邏輯仿真器中固有的靈活性的示例性情形。
Il 原始 Verilog
module top niodule;ree elk;
kD'
reg [7:0] input I;reg [7:0] input2;wire [7:0] sum;wire |7:0] product;
adder—and—mult am(.clk(clk),
.a(input l),
.b(input2),
.sum(sum),
.product(product));
endmodule
module adder—and—mult(clk, a, b, sum, product);input elk;input [7:0] a;input [7:0] b;output [7:0] sum ;output [7:0] product;
always @(posedge elk) sum = a + b;multiplier mult(.clk(clk),
.a(a),
b(b),
.product(prodiict));
endmodule
module inultiplier(clk, a, b, product); input elk; input [7:0] a; input [7:0] b; output [7:0] product;
always w)(posedge elk) product = a i! b; endmodule
// Verilog +由串行仿真引擎仿真的樁模塊。
//將由串行仿真引擎仿真。module 卿—module;reg elk;
reg j^7:0] in pul I;
reg [7:0] input2;
wire [7:0] sum;
wire [7:0] product;
adder_and_muit ain(.clk(clk),
.a( input I),
.b(input:2),
sum(sum),
.product(product));
endmodule
//將由並發仿真引擎仿真。module adder—and—mult(clk, a5 b,sum, product);input elk;input [7:0] a;input [7:0] b;output [7:0] sum;output [7:0] product;
multiplier mult(.clk(clk),
.a(a),
b(b),
;product(product));
endmodule
Il將由串行仿真引擎仿真。module multiplier(clk5 a, b, product);input elk;input [7:0] a;input [7:0] b;output [7:0] product;
always @(posedge elk) product = a * b;endmodule注意,圖8解說了表示以上代碼的框圖。在該實施例中,使串行仿真引擎811負責頂層模塊801,頂層模塊801包括樁加法器和乘法器(adder_and_mult)模塊802A。使並發仿真引擎812負責嵌入式加法器和乘法器模塊802。在這種情形中,實際的加法器HDL可由並發仿真引擎802來仿真,並且並發仿真引擎812可與嵌入式乘法器模塊的樁模塊803A交互。在該實施例中,加法器和乘法器模塊802包括樁乘法器模塊803A,其與串行仿真引擎811中的乘法器模塊803交互。換言之,在設計層級內在一模塊之下的更深處實例化的任何子模塊(任何導向成執行來自樁模塊的仿真的模塊)可被結構化為由串行仿真引擎811或並發仿真引擎812中的任一者來完成。注意,一般而言,串行仿真引擎811與並發仿真引擎812之間的這種仿真責任傳遞可執行任何次數並且可被結構化以優化系統資源。注意,儘管以上將並發仿真引擎描述為執行嵌入在頂層模塊中的加法器模塊的事件,但集成邏輯仿真可等同地應用於其他類型的頂層/嵌入式模塊。例如,另一嵌入式模塊可包括被測試設備(DUT),其可在串行仿真引擎被表示為樁模塊。在這種情形中,頂層模塊可包括測試臺。圖9示出包括集成邏輯仿真器的示例性數字ASIC設計流程的簡化表示。在高層,該過程始於產品理念(步驟900)並且在EDA軟體設計過程中實現(步驟910)。當設計最終定稿時,其可被下線流片(tape-out)(事件940)。在下線流片之後,發生製造過程(步驟950)和封裝及組裝過程(步驟960),最終得到完工的晶片(結果970)。EDA軟體設計過程(步驟910)實際包括數個步驟912-930,出於簡單起見這些步驟以線性方式示出。在實際ASIC設計過程中,特定設計可能不得不回退歷經各步驟直到通過某些測試。類似地,在任何實際的設計過程中,這些步驟可能以不同次序和組合發生。本說明書因此藉助於上下文和一般化解釋來提供,而不是作為用於特定ASIC的具體或推薦的設計流程來提供的。現在將提供EDA軟體設計過程(步驟910)的組成步驟的簡要描述系統設計(步驟912):設計人員描述他們想要實現的功能性,他們可執行假設情景(what-if)規劃以精煉功能性、核查成本等等。在此階段可進行硬體-軟體架構劃分。在此步驟可使用的來自Synopsys公司的示例性EDA軟體產品包括Model Architect、Saber、System Studio、以及Design Ware 產品。邏輯設計和功能驗證(步驟914):在該階段,編寫用於系統中的模塊的VHDL或Verilog代碼並且檢查該設計的功能準確性。更具體地,檢查該設計以確保其產生正確的輸出。在此步驟可使用的來自Synopsys公司的示例性EDA軟體產品包括VCS、VERA、DesignWare 、Magellan、Formality、ESP以及LEDA產品。在一個實施例中,以上描述的集成邏輯仿真器可在邏輯設計和功能驗證步驟914期間實現。合成及測試設計(步驟916):這裡,VHDL/Verilog被轉譯成網表。可針對目標技術對該網表進行優化。另外,發生對測試的設計和實現以準許對完工的晶片進行檢查。在此步驟可使用的來自Synopsys公司的示例性EDA軟體產品包括Design Compiler 、PowerCompiler、DFTMAX, TetraMAX、以及DesignWare 產品。網表驗證(步驟918):在此步驟,檢查網表對時序約束的順應性以及與VHDL/Verilog原始碼的對應性。在此步驟可使用的來自Synopsys公司的示例性EDA軟體產品包括 Frmality、PrimeTime> 以及 VCS 產品。設計規劃(步驟920):這裡,構造晶片的整體平面布置圖並分析其時序和頂層走線。在此步驟可使用的來自Synopsys公司的示例性EDA軟體產品包括Astro和IC Compiler (編譯器)產品。物理實現(步驟922):在此步驟發生布局(電路元件的定位)和走線(這些電路元件的連接)。在此步驟可使用的來自Synopsys公司的示例性EDA軟體產品包括Astro和ICCompiler 產品。分析和提取(步驟924):在此步驟,在電晶體級驗證電路功能,這進而準許假設情景(what-if)精煉。在此步驟可使用的來自Synopsys公司的示例性EDA軟體產品包括AstroRail、PrimeRail、Primetime、以及 Star RC/XT 產品。物理驗證(步驟926):在該步驟,執行各種檢查功能以確保以下各項的正確性製造、電氣問題、光刻問題和電路。在此步驟可使用的來自Synopsys公司的示例性EDA軟體產品包括Hercules產品。解析度增強(步驟928):此步驟涉及對版圖的幾何學操縱以改善設計的可製造性。在此步驟可使用的來自Synopsys公司的示例性EDA軟體產品包括Proteus、ProteusAF以及PSMGen產品。掩模數據製備(步驟930):該步驟提供「下線流片」數據以產生供光刻使用以生產出完工的晶片的掩模。在此步驟可使用的來自Synopsys公司的示例性EDA軟體產品包括CATS (R)產品系。以上描述的集成邏輯仿真器可使用在可編程系統上執行的一個或更多個電腦程式來運行,該可編程系統包括至少一個耦合成從數據存儲系統接收數據和指令以及將數據和指令傳送至該數據存儲系統的可編程處理器、至少一個輸入設備和至少一個輸出設備。每一個電腦程式都可以用高級過程或面向對象程式語言、或者在需要時用彙編或機器語言來實現;並且在任何情況下,該語言都可以是經編譯或經解釋的語言。合適的處理器包括例如通用和專用微處理器以及其它類型的微控制器。一般而言,處理器將從只讀存儲器和/或隨機存取存儲器接收指令和數據。一般而言,計算機將包括用於存儲數據文件的一個或更多個大容量存儲設備;這類設備包括諸如內置硬碟和可移動盤等磁碟、磁光碟和光碟。適於有形地實施電腦程式指令和數據的存儲設備包括所有形式的非易失存儲器,例如包括半導體存儲設備,諸如EPR0M、EEPR0M和快閃記憶體設備;磁碟,諸如內置硬碟或可移動盤;磁光碟;以及⑶ROM盤。上述各項中的任一個可由專用集成電路(ASIC)補充或被結合在ASIC中。以上連同解說本發明原理的附圖一起提供了對本發明一個或更多個實施例的詳細描述。雖然結合此類實施例來描述了本發明,但本發明不限於任何實施例。本發明的範圍僅由權利要求來限定,且本發明涵蓋眾多替換、修改和等效方案。在本描述中闡述了眾多具體細節以提供對本發明的透徹理解。提供這些細節是為了作為示例,且本發明可在沒有這些具體細節中的一些或全部的情況下根據權利要求來實踐。出於清楚起見,並未詳細描述本發明相關技術領域中已知的技術素材以免不必要地湮沒本發明。·
權利要求
1.一種仿真通過硬體描述語言(HDL)規定的設計的方法,所述方法包括 運行集成邏輯仿真器,所述集成邏輯仿真器包括串行仿真引擎和並發仿真引擎; 使用所述串行仿真引擎執行仿真,所述串行仿真引擎每次執行一個仿真; 使用所述並發仿真引擎執行仿真,所述並發仿真引擎執行多個並發仿真;以及 基於由所述HDL的執行模型定義的事件類來同步所述串行仿真引擎和所述並發仿真引擎的仿真。
2.如權利要求I所述的方法,其特徵在於,還包括將所述設計劃分成由所述集成邏輯仿真器執行的兩組模塊,所述兩組模塊包括用於在所述串行仿真引擎上評估的第一組模塊和用於在所述並發仿真引擎上評估的第二組模塊。
3.如權利要求2所述的方法,其特徵在於,執行所述劃分時將所述設計的設計層級納入考慮。
4.如權利要求3所述的方法,其特徵在於,當第一模塊由所述並發仿真引擎仿真時,則所述設計層級內在所述第一模塊之下的更深處實例化的任何子模塊也由所述並發仿真引擎來仿真。
5.如權利要求3所述的方法,其特徵在於,當由第一仿真引擎仿真的第一模塊實例化第二模塊時,則所述第二模塊由第二仿真引擎來仿真,其中所述第二模塊實例化由所述第一仿真引擎仿真的第三模塊,並且其中所述第一和第二仿真引擎是以下一者(I)分別為所述串行和並發仿真引擎;以及(2)分別為所述並發和串行仿真引擎。
6.如權利要求3所述的方法,其特徵在於,還包括將所述串行仿真引擎和所述並發仿真引擎之一指定為所述集成邏輯仿真器的主仿真引擎,並將另一個仿真引擎指定為所述集成邏輯仿真器的副仿真引擎,其中所述主仿真引擎在同步點調用所述副仿真引擎。
7.如權利要求6所述的方法,其特徵在於,所述同步點在由所述HDL的所述執行模型定義的隊列評估之前。
8.如權利要求6所述的方法,其特徵在於,所述同步點在由所述HDL的執行模型定義的隊列評估之後。
9.如權利要求6所述的方法,其特徵在於,還包括將副仿真引擎模塊中的某些變量標識為用於與所述主仿真引擎通信的接口變量。
10.如權利要求9所述的方法,其特徵在於,還包括將所述接口變量的值存儲在所述串行仿真引擎和所述並發仿真引擎中。
11.如權利要求9所述的方法,其特徵在於,還包括於在所述副仿真引擎中評估事件之前在所述同步點將接口變量值傳遞至所述副仿真引擎。
12.如權利要求9所述的方法,其特徵在於,還包括於在所述副仿真引擎中評估事件之後在所述同步點將接口變量值傳遞至所述主仿真弓I擎。
13.如權利要求12所述的方法,其特徵在於,副仿真引擎模塊由所述主仿真引擎中的樁模塊表不。
14.一種存儲用於仿真通過硬體描述語言(HDL)規定的設計的計算機可執行指令的計算機可讀介質,所述計算機可執行指令在由計算機執行時執行以下步驟,包括 運行集成邏輯仿真器,所述集成邏輯仿真器包括串行仿真引擎和並發仿真引擎; 使用所述串行仿真引擎執行仿真,所述串行仿真引擎每次執行一個仿真;使用所述並發仿真引擎執行仿真,所述並發仿真引擎執行多個並發仿真;以及 基於由所述HDL的執行模型定義的事件類來同步所述串行仿真引擎和所述並發仿真引擎的仿真。
15.如權利要求14所述的計算機可讀介質,其特徵在於,還包括將所述設計劃分成由所述集成邏輯仿真器執行的兩組模塊,所述兩組模塊包括用於在所述串行仿真引擎上評估的第一組模塊和用於在所述並發仿真引擎上評估的第二組模塊。
16.如權利要求15所述的計算機可讀介質,其特徵在於,執行所述劃分時將所述設計的設計層級納入考慮。
17.如權利要求16所述的計算機可讀介質,其特徵在於,當第一模塊由所述並發仿真引擎仿真時,則所述設計層級內在所述第一模塊之下的更深處實例化的任何子模塊也由所述並發仿真引擎來仿真。
18.如權利要求16所述的計算機可讀介質,其特徵在於,當由第一仿真引擎仿真的第一模塊實例化第二模塊時,所述第二模塊由第二仿真引擎來仿真,其中所述第二模塊實例化由所述第一仿真引擎仿真的第三模塊,並且其中所述第一和第二仿真引擎是以下一者(I)分別為所述串行和並發仿真引擎;以及(2)分別為所述並發和串行仿真引擎。
19.如權利要求15所述的計算機可讀介質,其特徵在於,還包括將所述串行仿真引擎和所述並發仿真引擎之一指定為所述集成邏輯仿真器的主仿真引擎,並將另一個仿真引擎指定為所述集成邏輯仿真器的副仿真引擎,其中所述主仿真引擎在同步點調用所述副仿真引擎。
20.如權利要求19所述的計算機可讀介質,其特徵在於,所述同步點在由所述HDL的所述執行模型定義的隊列評估之前。
21.如權利要求19所述的計算機可讀介質,其特徵在於,所述同步點在由所述HDL的執行模型定義的隊列評估之後。
22.如權利要求19所述的計算機可讀介質,其特徵在於,還包括將副仿真引擎模塊中的某些變量標識為用於與所述主仿真引擎通信的接口變量。
23.如權利要求19所述的計算機可讀介質,其特徵在於,所述執行模型中的所述同步點是通過行業標準應用編程接口來建立的。
全文摘要
提供了一種仿真以HDL描述的設計的方法。在該方法中,該設計的模塊可被劃分成用於由串行仿真引擎仿真的諸第一模塊和用於由並發仿真引擎仿真的諸第二模塊。可基於與HDL的執行模型一致的事件類來區分諸第一和第二模塊的仿真優先級。串行和並發仿真引擎的仿真可針對每一事件類來同步。同步可包括在串行仿真引擎與並發仿真引擎之間傳遞經更新的接口變量值,由諸第二模塊將其與諸第一模塊的至少一子集共享。該傳遞可包括轉譯經更新的接口變量值的表示。
文檔編號G06F9/455GK102782651SQ201180012415
公開日2012年11月14日 申請日期2011年3月4日 優先權日2010年3月4日
發明者C·巴賽爾, G·P·薩吉斯, K·惠斯南特 申請人:辛奧普希斯股份有限公司