国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      隨選vcd系統(tǒng)和方法

      文檔序號:6477694閱讀:451來源:國知局

      專利名稱::隨選vcd系統(tǒng)和方法
      技術(shù)領(lǐng)域
      :本發(fā)明一般涉及電子設(shè)計自動化(EDA)。更具體的說,本發(fā)明涉及對改值轉(zhuǎn)儲(ValueChangeDump--VCD)的改進,以加速設(shè)計調(diào)試進程。
      背景技術(shù)
      :通常,電子設(shè)計自動化(EDA)是一種基于計算機的工具,其配置在各種工作站上,為設(shè)計者提供自動化或半自動化的工具,用于設(shè)計和驗證用戶定制的電路設(shè)計。EDA通??捎糜谌魏文康氖悄M、仿真、原型設(shè)計、執(zhí)行,或計算的電子設(shè)計的建立,分析和編輯。EDA技術(shù)還可用來開發(fā)使用用戶設(shè)計地子系統(tǒng)或部件的系統(tǒng)(即目標(biāo)系統(tǒng))。EDA的最終結(jié)果為一個改進并增強的設(shè)計,其一般為離散集成電路或印刷電路板的形式,其改良了原始設(shè)計并且保持了原始設(shè)計的靈魂。軟件模擬電路設(shè)計后進行硬件仿真的價值在各種使用并受益于EDA技術(shù)的行業(yè)中得到了認可。然而,目前的軟件模擬和硬件仿真/加速對用戶來說很麻煩,這是因為這些處理具有分離和獨立的特點。例如,用戶可能需要在一部分時間里利用軟件模擬去模擬或調(diào)試電路設(shè)計,在其他時間中使用這些結(jié)果并利用硬件模型加速模擬過程,在選擇時間檢查電路中的各個寄存器和組合邏輯值,并且在隨后返回軟件模擬,所有這些都在一個調(diào)試/測試進程中。此外,當(dāng)內(nèi)部寄存器和組合邏輯值隨著模擬時間的推進發(fā)生改變時,即使變化發(fā)生在硬件加速/仿真過程中的硬件模型中,用戶也應(yīng)該可以監(jiān)視這些變化。為了解決使用純軟件模擬和純硬件仿真/加速這兩個分離和獨立的過程帶來的令人困擾的問題,使整個系統(tǒng)更加友好,協(xié)同模擬(Co-simulation)應(yīng)運而生。但是,協(xié)同模擬仍具有一些缺點(1)協(xié)同模擬系統(tǒng)需要手動調(diào)整分區(qū),(2)協(xié)同模擬使用兩個松散耦合的引擎,(3)協(xié)同模擬速度和軟件模擬速度一樣慢,以及(4)協(xié)同模擬系統(tǒng)遭遇競態(tài)條件。首先,軟件和硬件之間的劃分由手動而不是自動來處理,這更加重了用戶的負擔(dān)。大體上,協(xié)同模擬需要用戶自己基于非常大的功能塊,在軟件和硬件中劃分設(shè)計(開始于行為級,然后是RTL(寄存器傳送)級,接著是門級)并測試模型。這樣的限制需要用戶具有一定的熟練程度。其次,協(xié)同模擬系統(tǒng)使用兩個松散耦合的獨立引擎,其引發(fā)了引擎間同步,協(xié)調(diào)和適應(yīng)性的問題。協(xié)同模擬需要兩個不同的校驗引擎之間的同步---軟件模擬和硬件仿真。即使軟件模擬器端與硬件加速器端連接,也僅有外部輸出接腳數(shù)據(jù)可供檢查和載入。模型化電路中處于寄存器和組合邏輯等級的值無法用于簡單的檢查和從一端到另一端的下載,限制了這些協(xié)同模擬器系統(tǒng)的應(yīng)用。當(dāng)用戶從軟件模擬轉(zhuǎn)換到硬件加速或反之時,一般必須重新模擬整個設(shè)計。因此,如果用戶期望在單一調(diào)試進程中實現(xiàn)軟件模擬和硬件仿真/加速之間的轉(zhuǎn)換,同時還可以檢查寄存器和組合邏輯值,協(xié)同模擬器系統(tǒng)則無法提供此功能。第三,協(xié)同模擬速度和模擬速度一樣慢。協(xié)同模擬需要兩個不同的校驗引擎之間的同步---軟件模擬和硬件仿真。每個引擎具有自己的驅(qū)動模擬或仿真的控制機制。這表示軟件和硬件之間的同步將導(dǎo)致整體性能的速度與軟件模擬速度一樣慢。為協(xié)調(diào)這兩個引擎操作的附加消耗更加劇了協(xié)同模擬系統(tǒng)的低速問題。第四,協(xié)同模擬系統(tǒng)由于時鐘信號之間的競態(tài)狀態(tài)將會遭遇設(shè)置、占用時間和時鐘假信號問題。協(xié)同模擬器使用硬件驅(qū)動時鐘,這導(dǎo)致它們由于不同的導(dǎo)線線路長度,在不同的時間處于不同邏輯元件的輸入端。當(dāng)需要這些邏輯元件同時估算數(shù)據(jù)時,由于一些邏輯元件在某個時期估算數(shù)據(jù)而其他邏輯元件在不同的時期估算數(shù)據(jù),就會產(chǎn)生估算結(jié)果的不確定性。普通設(shè)計者會遇到的另一個問題是當(dāng)調(diào)試時,隔離和識別設(shè)計的問題的過程相對較慢。盡管設(shè)計者自身有限的解決問題能力會導(dǎo)致速度的落后,但問題的主要原因還是模擬器自身。模擬器的低速不僅因為其基于軟件的引擎,而且模擬器的調(diào)試需要整個模擬重新運行?,F(xiàn)在將提供此問題的進一步解釋。一個典型的ASIC(專用集成電路)芯片設(shè)計者使用模擬器調(diào)試他的設(shè)計;也就是說,設(shè)計者使用包括測試平臺程序模擬或測試其設(shè)計,以觀測設(shè)計對各種激勵的反應(yīng)。基于對涉及的一些關(guān)鍵結(jié)點和輸出的檢測,設(shè)計者一般可以確定其設(shè)計是否有問題。當(dāng)然,如果設(shè)計處于其初級階段,那么出現(xiàn)一些問題是難免的。但是,找尋故障并不是那么簡單的。對于一個較大和較復(fù)雜的設(shè)計(例如,具有超過一百萬個門電路)來說,模擬器在找到一個故障之前必須單步調(diào)試幾百萬個模擬時間周期。顯然,對于這樣一個設(shè)計,不能期望設(shè)計者檢查每一個模擬時步。坦白的說,對于產(chǎn)品設(shè)計開發(fā)周期的短暫時間間隔來說,這樣的任務(wù)不可能完成。一旦模擬器揭示了一個故障的存在,則必須明確定位實際的故障以去除故障的設(shè)計缺陷。問題何時(即模擬時步)發(fā)生?其發(fā)生在模擬的開始(如,t10),中間(如,t1000)還是結(jié)尾(如,t1000000)呢?還有,問題出在何處(即,電路設(shè)計中的物理位置)以便進行修復(fù)呢?在最初,即使設(shè)計者不知道故障出在何處(即模擬時步),也可以進行合理的猜測。設(shè)計者必須有一些方法轉(zhuǎn)入他懷疑存在問題的準(zhǔn)確模擬時間中。模擬器通過提供VCD(改值轉(zhuǎn)儲)文件幫助其完成任務(wù),提供VCD可使用兩種傳統(tǒng)方法之一----完全VCD和選擇性VCD。利用完全VCD方法,模擬器以VCD文件的形式儲存從模擬時間t0到模擬結(jié)束的整個模擬過程。接著,由設(shè)計者分析此VCD文件以隔離故障。設(shè)計者對其大體位置做出合理的猜測,使得他可以利用一些精確的步進分析此位置;也就是說,如果設(shè)計者以某種方式推測故障發(fā)生在模擬時間t350和t400之間的某個地方,那么他可以前進到臨近所推測模擬時間的時間處,例如模擬時間t345。接著他便可以開始仔細的檢查所猜測的區(qū)域(即t350到t400)了。但是,為了到達此模擬時間,設(shè)計者必須用VCD文件從開始(即,t0)重新運行整個模擬,無論故障發(fā)生于何處。如果他對于故障位置的最初猜測不正確,則他必須再一次做出猜測并再次從開始重新運行整個模擬。對于一個擁有超過一百萬個門電路和超過一百萬個模擬時步的設(shè)計來說,從開始重新運行整個模擬的調(diào)試過程非常耗時,并且這一情況還被錯誤的猜測所加劇。但是,一個擁有超過一百萬個門電路和超過一百萬個模擬時步的設(shè)計需要很多的磁盤空間。通常,一個完全VCD文件的大小為100GB是很普通的。此VCD文件對于大多數(shù)文件系統(tǒng)來說都太大了。而且,此巨型VCD文件對于大多數(shù)波形觀測儀來說都太龐大了,以至于無法有效的處理。此外,使用完全VCD,模擬過程慢了三倍。在每個模擬時間之后(或當(dāng)值發(fā)生變化時),完全VCD需要記錄狀態(tài)值。對于存貯器的訪問過程需要一些時間,并且因此模擬必須可以暫時中止直到在給定的模擬時間完成存儲操作。今天,完全VCD方法已經(jīng)不再適用。使用選擇性VCD方法,不保存整個模擬;相反地,模擬器保存設(shè)計者選擇的模擬部分。但是,選擇性VCD仍未使設(shè)計者避免從開始重新運行整個模擬。最初,設(shè)計者運行模擬并且不可避免的發(fā)現(xiàn)他的設(shè)計中的問題。接著,他對問題的位置進行猜測。如果設(shè)計者推測問題發(fā)生在模擬時間t350和t400之間的某個地方,則設(shè)計者重新運行模擬并命令模擬器將此模擬時間范圍保存為VCD文件。此后,設(shè)計者可以對應(yīng)于其猜測檢查VCD文件。如果他對于隔離問題的猜測不正確,則他必須進行另一次猜測,并命令模擬器將新的模擬范圍保存為VCD文件,再重新運行此模擬。接著,設(shè)計者再次分析VCD文件。和完全VCD方法不同,選擇性VCD不需要這么多的磁盤空間,因為不用保存整個模擬。但是,選擇性VCD仍需要重新運行整個模擬。如果設(shè)計者對于定位故障的猜測不正確,則他必須再次重新運行模擬并以VCD文件的形式保存新的模擬范圍。無論如何,選擇性VCD方法仍非常耗時,并且這一情況還被錯誤的猜測所加劇。因此,需要一種可以解決由目前已知的系統(tǒng)所帶來的問題的系統(tǒng)或方法,已知系統(tǒng)包括模擬系統(tǒng),硬件仿真系統(tǒng),硬件加速器,協(xié)同模擬和協(xié)同校驗系統(tǒng)。
      發(fā)明內(nèi)容本發(fā)明的一個實施例提供了不需重新運行模擬的隨選VCD文件。VCD的隨選特點包含在RCC(可重新配置計算)系統(tǒng)之中,該系統(tǒng)包括一個RCC計算系統(tǒng)和一個RCC硬件加速器。RCC計算系統(tǒng)包含用戶所需的計算資源,這些資源使得用戶可以在軟件中模擬整個軟件模型化設(shè)計以及控制設(shè)計的硬件模型化部分的硬件加速。RCC硬件加速器包含可重新配置的邏輯元件陣列(例如,F(xiàn)PGA(現(xiàn)場可編程門陣列)),其可以至少在硬件中模型化用戶設(shè)計的一部分,使得用戶可以加速調(diào)試過程。RCC計算系統(tǒng)通過軟件時鐘與RCC硬件加速器緊密耦合。VCD的隨選特點允許用戶選擇模擬歷史的一部分用于詳細的調(diào)試分析,而不需重新運行模擬。RCC系統(tǒng)允許用戶選擇兩個模擬時間范圍---大的一個稱為“模擬進程(session)范圍”,此范圍中的較小子集稱為“模擬目標(biāo)范圍”。該VCD文件將被建立用于該較小的“模擬目標(biāo)范圍”。在選擇“模擬進程范圍”之后,RCC系統(tǒng)通過從測試平臺處理提供主輸入給RCC硬件加速器中的硬件模型用于估算,在模擬進程范圍中的整個持續(xù)時間上快速模擬設(shè)計。這些相同的主輸入也被壓縮并記錄在模擬歷史文件中。利用此模擬歷史文件,RCC系統(tǒng)可以在任何時間再現(xiàn)模擬進程范圍中的任何模擬部分。在模擬進程范圍的開始處,RCC系統(tǒng)保存在此處設(shè)計的硬件狀態(tài)信息,使得用戶可以在需要時進行離線模擬。在模擬進程范圍的結(jié)尾處,RCC系統(tǒng)保存在此處設(shè)計的硬件狀態(tài)信息,使得用戶可以在任何時間快速返回此點(此點為上次離開時的點)以越過此模擬進程范圍繼續(xù)進行模擬,而不必重新進行模擬。當(dāng)用戶選擇“模擬目標(biāo)范圍”后,RCC系統(tǒng)通過解壓在模擬歷史文件中壓縮的主輸入并將這些解壓的主輸入提供給RCC硬件加速器用于估算,快速模擬至模擬目標(biāo)范圍的開始處。在模擬目標(biāo)范圍中,RCC系統(tǒng)將評估的結(jié)果或主輸出從硬件模型轉(zhuǎn)儲到VCD文件中,用于存儲在系統(tǒng)盤中。在模擬目標(biāo)范圍的結(jié)束處,RCC系統(tǒng)消除轉(zhuǎn)儲過程。一旦建立了VCD文件,用戶就可以利用波形觀測儀觀察VCD文件,以更詳盡地調(diào)試其設(shè)計。這不需要重新運行模擬就可以完成。如果故障不在此模擬目標(biāo)范圍中,用戶可以在相同的模擬進程范圍中選擇另一個模擬目標(biāo)范圍。一旦選擇了新的模擬目標(biāo)范圍,RCC系統(tǒng)則以上述方式建立新的VCD文件。接著,用戶可以分析此新的VCD文件來隔離故障。一旦將故障隔離并固定,用戶可以從當(dāng)前模擬進程范圍移到下一個模擬進程范圍繼續(xù)進行模擬。所保存的當(dāng)前模擬進程范圍結(jié)束端的硬件狀態(tài)信息被載入RCC系統(tǒng)中。接著,用戶可以開始模擬。VCD的隨選特點在在線和離線時均有效。在說明書中接下來的部分中將充分討論和說明這些和其他實施例。在下列文字和附圖的幫助下,可以更好的理解本發(fā)明的上述目標(biāo)和對本發(fā)明的描述。圖1顯示了本發(fā)明一實施例的高層概觀圖,其包括連接在一個PCI總線上的工作站,可重新配置的硬件仿真模型,仿真接口和目標(biāo)系統(tǒng)。圖2顯示了本發(fā)明的一個具體用法的流程圖。圖3顯示了根據(jù)本發(fā)明一實施例,在編譯時間和運行時間中軟件編譯和硬件配置的高層圖。圖4顯示了編譯過程的流程圖,其包括產(chǎn)生軟件/硬件模型以及軟件內(nèi)核代碼。圖5顯示了控制整個模擬仿真(Semulation)系統(tǒng)的軟件內(nèi)核。圖6顯示了通過映射,布局和布線將硬件模型映射到可重新配置的電路板上的方法。圖7顯示了圖8中所示的FPGA陣列的連通度矩陣。圖8顯示了4×4FPGA)陣列和其相互連接的一個實施例。圖9(A),9(B)和9(C)表示了時分多路轉(zhuǎn)換(TDM)電路的一個實施例,其允許一組線路以時分多路轉(zhuǎn)換的方式連接,使得一個引腳,而不是多個引腳可被用于芯片中的該組線路。圖9(A)表示了輸出接腳問題的概觀,圖9(B)顯示了用于傳輸端的TDM電路,圖9(C)顯示了用于接收端的TDM電路。圖10顯示了根據(jù)本發(fā)明一個實施例的模擬仿真系統(tǒng)結(jié)構(gòu)。圖11顯示了本發(fā)明地址指示器的一個實施例。圖12顯示了圖11所示地址指示器初始化的狀態(tài)轉(zhuǎn)變圖。圖13顯示了用于為地址指示器派生出不同MOVE信號的MOVE信號發(fā)生器的一個實施例。圖14顯示了每個FPGA芯片中多路復(fù)用地址指示器的鏈路。圖15顯示了根據(jù)本發(fā)明一個實施例的多路復(fù)用跨芯片地址指示器鏈路實施例。圖16顯示了對于軟件時鐘實現(xiàn)和硬件模型中邏輯元件估算很重要的時鐘/數(shù)據(jù)網(wǎng)絡(luò)分析流程圖。圖17顯示了根據(jù)本發(fā)明一個實施例的硬件模型的基本構(gòu)件塊。圖18(A)和18(B)顯示了鎖存器和觸發(fā)器的寄存器模型實現(xiàn)。圖19顯示了根據(jù)本發(fā)明一個實施例的時鐘邊沿檢測邏輯實施例。圖20顯示了根據(jù)本發(fā)明一個實施例的控制圖19所示時鐘邊沿檢測邏輯的四狀態(tài)有限狀態(tài)機。圖21顯示了根據(jù)本發(fā)明一個實施例的每個FPGA芯片的互連、JTAG、FPGA總線以及全局信號引腳標(biāo)志。圖22顯示了PCI總線和FPGA陣列之間的FPGA控制器實施例。圖23顯示了結(jié)合圖22討論的CTRL_FPGA單元和數(shù)據(jù)緩沖器的詳細示圖。圖24顯示了4×4FPGA陣列,其和FPGA組的關(guān)系,以及擴展能力。圖25顯示了硬件啟動方法的一個實施例。圖26顯示了要模型化和模擬的用戶電路設(shè)計示例的HDL(硬件描述語言)碼。圖27顯示了用符號表示圖26所示HDL碼電路設(shè)計的電路圖。圖28顯示了圖26所示HDL碼的部件類型分析。圖29顯示了基于圖26所示用戶定制電路設(shè)計的結(jié)構(gòu)化RTLHDL碼的信號網(wǎng)絡(luò)分析。圖30顯示了對于相同假設(shè)示例的軟件/硬件分區(qū)結(jié)果。圖31顯示了對于相同假設(shè)示例的硬件模型。圖32顯示了用戶定制電路設(shè)計的相同假設(shè)示例的一個具體的硬件模型到芯片分區(qū)結(jié)果。圖33顯示了用戶定制電路設(shè)計的相同假設(shè)示例的另一個具體的硬件模型-到-芯片分區(qū)結(jié)果。圖34顯示了用戶定制電路設(shè)計的相同假設(shè)示例的邏輯修補操作。圖35(A)到(D)利用兩個示例說明了“hops”(跳躍)原則和互連。圖36顯示了用于本發(fā)明中的FPGA芯片概觀。圖37顯示了FPGA芯片上的FPGA互連總線。圖38(A)和38(B)顯示了根據(jù)本發(fā)明一個實施例的FPGA電路板連接方案側(cè)視圖。圖39顯示了根據(jù)本發(fā)明一個實施例的FPGA陣列的直接相鄰和單跳躍六電路板互連布局。圖40(A)和40(B)顯示了FPGA電路板間互連方案。圖41(A)到41(F)顯示了電路板互連連接器的頂視圖。圖42顯示了具有代表性的FPGA電路板上的板上連接器和一些部件。圖43顯示了圖41(A)到41(F)和42中的連接器圖例。圖44顯示了根據(jù)本發(fā)明一個實施例的FPGA陣列的直接相鄰和單跳躍雙電路板連互連布局。圖45顯示了根據(jù)本發(fā)明另一實施例的具有多處理器的工作站。圖46顯示了根據(jù)本發(fā)明另一實施例的環(huán)境,其中多用戶在分時的基礎(chǔ)上共享一個模擬/仿真系統(tǒng)。圖47顯示了根據(jù)本發(fā)明一個實施例的模擬服務(wù)器的高層結(jié)構(gòu)。圖48顯示了根據(jù)本發(fā)明一個實施例的模擬服務(wù)器結(jié)構(gòu)。圖49顯示了模擬服務(wù)器的流程圖。圖50顯示了作業(yè)交換處理的流程圖。圖51顯示了在設(shè)備驅(qū)動器和可重新配置的硬件單元之間的信號。圖52表明了用于處理不同優(yōu)先等級的多個作業(yè)的模擬服務(wù)器的分時操作特性。圖53顯示了在設(shè)備驅(qū)動器和可重新配置的硬件單元之間的通信交換信號。圖54顯示了通信交換協(xié)議的狀態(tài)圖。圖55顯示了根據(jù)本發(fā)明一個實施例的模擬服務(wù)器的客戶服務(wù)器模式概觀。圖56顯示了根據(jù)本發(fā)明一個實施例的執(zhí)行存儲器交換的模擬系統(tǒng)高層結(jié)構(gòu)圖。圖57顯示了模擬系統(tǒng)存儲器映射功能的更詳細的結(jié)構(gòu)圖,其中模擬系統(tǒng)具有用于存儲器有限狀態(tài)機(MEMFSM)的支持部件以及用于每個FPGA邏輯裝置的估算有限狀態(tài)機(EVALFSMx)。圖58顯示了根據(jù)本發(fā)明一個實施例的CTRL_FPGA單元中MEMFSM單元的有限狀態(tài)機狀態(tài)圖。圖59顯示了根據(jù)本發(fā)明一個實施例的在每個FPGA芯片中的有限狀態(tài)機的狀態(tài)圖。圖60顯示了存儲器讀數(shù)據(jù)雙緩沖器。圖61顯示了根據(jù)本發(fā)明一個實施例的模擬寫/讀循環(huán)。圖62顯示了當(dāng)在CLK_EN信號之后發(fā)生DMA(存儲器直接存取)讀操作時,模擬數(shù)據(jù)傳輸操作的時序圖。圖63顯示了當(dāng)在靠近EVAL周期的末端發(fā)生DMA讀操作時,模擬數(shù)據(jù)傳輸操作的時序圖。圖64顯示了作為PCI附加卡的典型用戶設(shè)計。圖65顯示了用ASIC作為待測設(shè)備的典型硬件/軟件協(xié)同校驗系統(tǒng)。圖66顯示了使用仿真器的典型協(xié)同校驗系統(tǒng),其中待測設(shè)備程式化于仿真器之中。圖67顯示了根據(jù)本發(fā)明一個實施例的模擬系統(tǒng)。圖68顯示了根據(jù)本發(fā)明一個實施例的不具有外部輸入/輸出設(shè)備的協(xié)同校驗系統(tǒng),其中RCC計算系統(tǒng)包含不同輸入/輸出設(shè)備的軟件模型和目標(biāo)系統(tǒng)。圖69顯示了根據(jù)本發(fā)明另一實施例的具有真實外部輸入/輸出設(shè)備和目標(biāo)系統(tǒng)的協(xié)同校驗系統(tǒng)。圖70顯示了根據(jù)本發(fā)明一個實施例的控制邏輯的數(shù)據(jù)輸入部分的詳細邏輯圖。圖71顯示了根據(jù)本發(fā)明一個實施例的控制邏輯的數(shù)據(jù)輸出部分的詳細邏輯圖。圖72顯示了控制邏輯的數(shù)據(jù)輸入部分的時序圖。圖73顯示了控制邏輯的數(shù)據(jù)輸出部分的時序圖。圖74顯示了根據(jù)本發(fā)明一個實施例的RCC硬件陣列的電路板設(shè)計。圖75(A)顯示了用來解釋占用時間和時鐘假信號問題的移位寄存器電路范例。圖75(B)顯示了圖75(A)所示移位寄存器電路的時序圖,用以說明占用時間問題。圖76(A)顯示了跨過多個FPGA芯片的圖75(A)所示的相同移位寄存器電路。圖76(B)顯示了圖76(A)所示移位寄存器電路的時序圖,用以說明占用時間擾亂。圖77(A)顯示了用來說明時鐘假信號問題的邏輯電路范例。圖77(B)顯示了圖77(A)所示的邏輯電路的時序圖,用以說明時鐘假信號問題。圖78顯示了根據(jù)現(xiàn)有技術(shù)的解決占用時間擾亂問題的時序調(diào)整技術(shù)。圖79顯示了根據(jù)現(xiàn)有技術(shù)的解決占用時間擾亂問題的時序再合成技術(shù)。圖80(A)顯示了根據(jù)本發(fā)明一個實施例的原始鎖存器,圖80(B)顯示了根據(jù)本發(fā)明一個實施例的時序不靈敏和無假信號鎖存器。圖81(A)顯示了根據(jù)本發(fā)明一個實施例的原始設(shè)計觸發(fā)器,圖81(B)顯示了根據(jù)本發(fā)明一個實施例的時序不靈敏和無假信號型觸發(fā)器。圖82顯示了根據(jù)本發(fā)明一個實施例的時序不靈敏和無假信號鎖存器及觸發(fā)器的觸發(fā)機制時序圖。圖83顯示了包含本發(fā)明一實施例的RCC系統(tǒng)的部件的高層圖。圖84顯示了根據(jù)本發(fā)明一個實施例的多個模擬周期以說明VCD的隨選操作。在下文中將結(jié)合本發(fā)明的多個不同方面和實施例對這些圖進行討論。具體實施例方式此說明書在被稱為“模擬仿真器”(“SEmulator”)或“模擬仿真”(“SEmulation”)系統(tǒng)的環(huán)境下并通過這些系統(tǒng)描述本發(fā)明的不同實施例。整個說明書中,使用了術(shù)語“模擬仿真系統(tǒng)”,“模擬仿真器系統(tǒng)”,“模擬仿真器”,或僅僅是“系統(tǒng)”。這些術(shù)語指根據(jù)本發(fā)明的用于下列四種操作模式的任意組合的不同裝置和方法實施例(1)軟件模擬,(2)通過硬件加速模擬,(3)內(nèi)電路仿真(ICE),以及(4)后模擬分析,包括它們相應(yīng)的配置或預(yù)處理階段。在其他時候,可以使用術(shù)語“模擬仿真”。此術(shù)語代表在此所述的新的處理。同樣的,如“可重新配置的計算(RCC)陣列系統(tǒng)”或“RCC計算系統(tǒng)”這樣的術(shù)語指模擬/協(xié)同校驗系統(tǒng)中包含主處理器,軟件內(nèi)核和用戶設(shè)計的軟件模型的部分。如“可重新配置的硬件陣列”或“RCC硬件陣列”這樣的術(shù)語指模擬/協(xié)同校驗系統(tǒng)中包含用戶設(shè)計的硬件模型的部分,在一個實施例中還指包含可重新配置的邏輯元件陣列的部分。說明書中還使用到了“用戶”和用戶的“電路設(shè)計”或“電子設(shè)計”?!坝脩簟笔峭ㄟ^其界面使用模擬仿真系統(tǒng)的人,可能是電路的設(shè)計者或參與了一些或未參與設(shè)計過程的測試/調(diào)試人員?!半娐吩O(shè)計”或“電子設(shè)計”為定制設(shè)計的系統(tǒng)或部件,可以是軟件或硬件,其可以被模擬仿真系統(tǒng)模型化以實現(xiàn)測試/調(diào)試。在許多情況下,“用戶”也設(shè)計了“電路設(shè)計”或“電子設(shè)計”。說明書還使用了如“導(dǎo)線”,“導(dǎo)線線路”,“導(dǎo)線/總線線路”和“總線”這樣的術(shù)語。這些術(shù)語指不同的導(dǎo)電線路。每條線路可以是兩點間的單線或點間的多線。這些術(shù)語可以互換使用,因為“導(dǎo)線”可以包括一條或多條導(dǎo)電線,“總線”也可以包括一條或多條導(dǎo)電線。此說明書根據(jù)提綱進行展開。首先,說明書介紹了模擬仿真系統(tǒng)的大致概觀,包括四種操作模式和硬件實現(xiàn)方案的概述。其次,說明書對模擬仿真系統(tǒng)進行了詳細的討論。在一些情況下,一些圖會顯示其前面的圖中所示實施例的變體。此時,使用相同的序號表示相同的部件/單元/過程。說明書的提綱如下I.概述A.模擬/硬件加速模式B.利用目標(biāo)系統(tǒng)模式仿真C.后模擬分析模式D.硬件實現(xiàn)方案E.模擬服務(wù)器F.存儲器模擬G.協(xié)同校驗系統(tǒng)II.系統(tǒng)描述HI.模擬/硬件加速模式IV.利用目標(biāo)系統(tǒng)模式仿真V.后模擬分析模式VI.硬件實現(xiàn)方案A.概述B.地址指示器C.門控數(shù)據(jù)/時鐘網(wǎng)絡(luò)分析D.FPGA陣列和控制E.使用更密集FPGA芯片的替代實施例F.TIGF邏輯裝置VII.模擬服務(wù)器VIII.存儲器模擬IX.協(xié)同校驗系統(tǒng)X.范例------------------------------------I.概述本發(fā)明的各個實施例一般具有四種操作模式(1)軟件模擬,(2)通過硬件加速模擬,(3)內(nèi)電路仿真(ICE),以及(4)后模擬分析。包括這些模式的系統(tǒng)和方法的不同實施例至少具有下列特征中的一些(1)具有一個單一緊密耦合模擬引擎的一軟件和硬件模型,一個軟件內(nèi)核,一循環(huán)接一循環(huán)控制軟件和硬件模型;(2)編譯處理過程中的自動部件類型分析,用于軟件和硬件模型的生成和分區(qū);(3)具有在軟件模擬模式、通過硬件加速模式模擬、內(nèi)電路仿真模式,和后模擬分析模式之間轉(zhuǎn)換(一循環(huán)接一循環(huán))的能力;(4)透過軟件組合部件重建的完全硬件模型可見度;(5)具有軟件時鐘和門控時鐘/數(shù)據(jù)邏輯的雙緩沖時鐘模型,以避免競態(tài)狀態(tài);以及(6)從過去模擬進程中的任意選擇點重新模擬或用硬件加速用戶電路設(shè)計的能力。最終結(jié)果是具有完全HDL功能和仿真器執(zhí)行性能的靈活的快速模擬器/仿真器系統(tǒng)與方法。A.模擬/硬件加速模式模擬仿真器系統(tǒng)通過自動部件類型分析,可以將用戶的定制電路設(shè)計以軟件和硬件進行模型化。整個用戶電路設(shè)計用軟件模型化,而估算部件(即存儲器元件,組合部件)則用硬件模型化。部件類型分析有助于進行硬件模型化。存在于通用處理器系統(tǒng)主存儲器中的軟件內(nèi)核充當(dāng)模擬仿真器系統(tǒng)的主程序,主程序負責(zé)控制其不同模式和功能的總體操作和執(zhí)行。只要有任何的測試平臺程序激活,內(nèi)核就估算激活的測試平臺分量,估算時鐘分量,檢測時鐘邊沿以更新寄存器和存儲器以及傳遞組合邏輯數(shù)據(jù),和推進模擬時間。此軟件內(nèi)核為模擬器引擎的緊密耦合特性提供硬件加速引擎。對于軟件/硬件邊界,模擬仿真器系統(tǒng)提供了大量輸入/輸出地址空間-REG(寄存器),CLK(軟件時鐘),S2H(軟件到硬件),以及H2S(硬件到軟件)。模擬仿真器具有在四種操作模式之間選擇變換的能力。系統(tǒng)的使用者可以開始模擬、停止模擬、斷言輸入值、檢查值、逐循環(huán)單步執(zhí)行,以及轉(zhuǎn)回或轉(zhuǎn)向四個不同的模式。例如,系統(tǒng)可以在一段時間內(nèi)在軟件中模擬電路,通過硬件模型加速模擬,然后再返回軟件模擬模式。通常,模擬仿真系統(tǒng)為用戶提供可以“看見”每個模型元件的能力,無論其是在軟件還是在硬件中模型化。由于多種原因,組合部件不像寄存器那樣“可見”,并且因此,獲取組合部件數(shù)據(jù)是很困難的。一個原因是用于可重新配置的電路板中將用戶電路設(shè)計的硬件部分模型化的FPGA(可現(xiàn)場編程門陣列)一般將組合部件模擬為查找表(look-uptable,LUT),而不是實際的組合部件。因此,模擬仿真系統(tǒng)讀取寄存器中的值并重新生成組合部件。因為需要一些開銷以重新生成組合部件,所以此再生成過程并不總在執(zhí)行;而是僅在用戶需要的時候執(zhí)行。因為軟件內(nèi)核存在于軟件端,所以提供時鐘邊沿檢測機制引發(fā)所謂軟件時鐘的生成,該軟件時鐘將啟動輸入送到硬件模型的各個寄存器中。通過雙緩沖電路設(shè)備嚴(yán)格控制時序,使軟件時鐘啟動信號在數(shù)據(jù)之前進入寄存器模型中。一旦這些輸入寄存器模型的數(shù)據(jù)穩(wěn)定下來,軟件時鐘同步門控數(shù)據(jù),以確保共同門控所有的數(shù)據(jù)值而無任何發(fā)生占用時間擾亂的危險。軟件模擬也很快,因為系統(tǒng)記錄所有的輸入值和選定的寄存器值/狀態(tài),因此通過減少輸入/輸出操作的數(shù)量最小化了開銷。用戶可以有選擇地對記錄頻率進行選擇。B.利用目標(biāo)系統(tǒng)模式仿真模擬仿真系統(tǒng)可以在其目標(biāo)系統(tǒng)環(huán)境中仿真用戶的電路。目標(biāo)系統(tǒng)向硬件模型輸出數(shù)據(jù)用于估算,硬件模型也向目標(biāo)系統(tǒng)輸出數(shù)據(jù)。此外,軟件內(nèi)核控制此模式的操作,使得用戶仍可以選擇開始、停止、斷言值、檢查值、單步執(zhí)行,以及從一個模式向另一個的轉(zhuǎn)換。C.后模擬分析模式工作記錄為用戶提供了模擬進程的歷史記錄。不同于已知的模擬系統(tǒng),模擬仿真系統(tǒng)并不記錄模擬過程中的每個單值、內(nèi)部狀態(tài),或值變化。模擬仿真系統(tǒng)僅基于記錄頻率(即,每N個周期記錄1個記錄)記錄選定的值和狀態(tài)。在后模擬階段,如果用戶需要檢查在剛結(jié)束的模擬進程中點X周圍的多個數(shù)據(jù),則用戶先轉(zhuǎn)到最接近點X并暫時位于X之前的一個記錄點上,比方說記錄點Y。接著,用戶從選定記錄點Y到目標(biāo)點X進行模擬以獲得模擬結(jié)果。還將描述VCD隨選系統(tǒng)。此VCD隨選系統(tǒng)允許用戶根據(jù)需要觀察任何模擬目標(biāo)范圍(即,模擬時間),而不需重新進行模擬。D.硬件實現(xiàn)方案模擬仿真系統(tǒng)在可重新配置的電路板上實現(xiàn)FPGA芯片陣列?;谟布P停M仿真系統(tǒng)將用戶電路設(shè)計的每個選定部分分區(qū)、映射、寄存,以及路由布線在FPGA芯片上。因此,例如一個具有16個芯片的4×4陣列可以將展開于這16個芯片上的大型電路模型化。此互連方案使得每個芯片可以在2次“跳躍”或連結(jié)之內(nèi)對另一芯片進行訪問。每個FPGA芯片為每個輸入/輸出地址空間(即,REG,CLK,S2H,H2S)提供一個地址指示器。關(guān)于特定地址空間的所有地址指示器的組合都是鏈接在一起的。于是,在數(shù)據(jù)傳輸過程中,每個芯片中的字?jǐn)?shù)據(jù)被順序地選出/選入主FPGA總線和PCI總線,對于每個芯片中的選定地址空間一次一個字,并且一次一個芯片,直到訪問到對應(yīng)于選定地址空間的所需字?jǐn)?shù)據(jù)為止。利用一個傳遞字選擇信號完成字?jǐn)?shù)據(jù)的順序選擇。此字選擇信號穿過一個芯片中的地址指示器,并接著傳遞到下一個芯片中的地址指示器,此過程繼續(xù)直到最后的芯片或系統(tǒng)對地址指示器進行初始化。在可重新配置的電路板中的FPGA總線系統(tǒng)工作時的帶寬是PCI總線的兩倍,但速度僅為PCI總線的一半。因此,F(xiàn)PGA芯片被分成若干組以利用更大帶寬的總線。此FPGA總線系統(tǒng)的處理能力可以比得上PCI總線系統(tǒng)的處理能力,所以并沒有因為總線速度的降低而損失性能??梢酝ㄟ^機載電路板延伸組長度來實現(xiàn)擴展。在本發(fā)明的另一實施例中,使用更密集的FPGA芯片。一種更密集的芯片為Altera10K130V和10K250V芯片。這種芯片的使用改變了電路板的設(shè)計,使得每個電路板上僅使用四個FPGA芯片,而不是八個不密集的FPGA芯片(如Altera10K100)。模擬系統(tǒng)中的FPGA陣列通過一個特殊的板互連結(jié)構(gòu)制造在主板上。每個芯片可以有多達8組互連,其中互連在單一電路板上和不同的板之間根據(jù)鄰接的直接相鄰互連(即,N[730],W[730],E[730]),以及“單跳躍”(one-hop)相鄰互連排列(即,NH[270],SH[270],XH[360],XH[7237]),不包括局部總線連接。每個芯片可以直接與相鄰的鄰居芯片連接,或在單跳中與位于其上、下、左、右的非鄰接芯片相連接。在X方向(東-西),陣列為環(huán)形。在Y方向(北-南),陣列為網(wǎng)格狀?;ミB可以在單一電路板上單獨連接邏輯裝置與其他部件。但是,板間連接器可以在不同電路板間連接這些板和互連,以便(1)在經(jīng)由主板的PCI總線和陣列板之間,以及(2)在任何兩個陣列板之間傳遞信號。一個主板連接器將電路板與主板連接,并且因此與PCI總線、電源,和地電位連接。對于一些電路板,主板連接器不用于與主板的直接連接。在一個六電路板結(jié)構(gòu)中,僅板1、3和5與主板直接連接,同時板2、4和6依靠其相鄰板實現(xiàn)與主板的連接。因此,每隔一個板就有一個與主板直接連接,并且這些板的互連與局部總線通過排列在焊接面到元件面的板間連接器相互連接。PCI信號僅通過一個板(通常為第一電路板)進行發(fā)送。電源和地電位被接至其他的主板連接器用于那些電路板。位于焊接面到元件面之間的各個板間連接器實現(xiàn)了PCI總線部件,F(xiàn)PGA邏輯裝置,存儲器裝置和各個模擬系統(tǒng)控制電路間的通信。E.模擬服務(wù)器在本發(fā)明的另一實施例中,具有模擬服務(wù)器以允許多個用戶訪問相同的可重新配置的硬件單元。在一個系統(tǒng)結(jié)構(gòu)中,網(wǎng)絡(luò)中的多個工作站或非網(wǎng)絡(luò)環(huán)境中的多個用戶/處理可以訪問相同的基于服務(wù)器的可重新配置硬件單元,以對相同或不同的用戶電路設(shè)計進行檢查/調(diào)試。訪問通過分時處理完成,其中一個調(diào)度程序確定多個用戶的訪問優(yōu)先級,交換作業(yè),并在預(yù)定用戶間選擇性的鎖住硬件模型訪問。在一種情景下,每個用戶可以訪問服務(wù)器以將他/她的獨立用戶設(shè)計第一次映射到可重新配置的硬件模型,在此情況下系統(tǒng)對設(shè)計進行編譯以生成硬件和軟件模型,執(zhí)行群集操作,執(zhí)行布局及布線操作,生成位流配置文件,并且在可重新配置的硬件單元中重新配置FPGA芯片以將用戶設(shè)計的硬件部分模型化。當(dāng)一個用戶使用硬件模型加速其設(shè)計并將硬件狀態(tài)下載到他自己的存儲器中以供軟件模擬時,可以釋放硬件單元以供另一個用戶訪問。服務(wù)器向多個用戶或處理提供對可重新配置的硬件單元的訪問,以實現(xiàn)加速和硬件狀態(tài)交換的目的。模擬服務(wù)器包括調(diào)度程序,一個或多個設(shè)備驅(qū)動器,以及可重新配置的硬件單元。模擬服務(wù)器中的調(diào)度程序基于優(yōu)先循環(huán)算法。服務(wù)器調(diào)度程序包括一個模擬作業(yè)隊列表,一個優(yōu)先級分類器,以及一個作業(yè)交換程序。本發(fā)明的恢復(fù)和回放功能使非網(wǎng)絡(luò)多重處理環(huán)境以及網(wǎng)絡(luò)多用戶環(huán)境更加便利,其中可以下載前一個檢查點的狀態(tài)數(shù)據(jù),并且可以恢復(fù)關(guān)于此檢查點的整個模擬狀態(tài),用于回放調(diào)試或按一循環(huán)接一循環(huán)地步進。F.存儲器模擬本發(fā)明的存儲器模擬或存儲器交換方式提供了一種模擬系統(tǒng)管理關(guān)于用戶設(shè)計的已配置硬件模型的不同存儲區(qū)的有效途徑,硬件模型被程式化在可重新配置硬件單元上的FPGA芯片陣列中。本發(fā)明的存儲器模擬方式提供了一種結(jié)構(gòu)和方案,其中與用戶設(shè)計有關(guān)的大量存儲器區(qū)塊被映射到模擬系統(tǒng)的SRAM存儲器裝置中,而不是用來配置和模型化用戶設(shè)計的邏輯裝置內(nèi)。存儲器模擬系統(tǒng)包括一個存儲器狀態(tài)機,一個估算狀態(tài)機,以及其相關(guān)的邏輯電路,用來控制和連接(1)主計算系統(tǒng)和其相關(guān)存儲器系統(tǒng),(2)模擬系統(tǒng)中與FPGA總線連接的SRAM存儲器裝置,以及(3)FPGA邏輯裝置,其包含正在調(diào)試的已配置和程式化的用戶設(shè)計。根據(jù)本發(fā)明的一個實施例,存儲器模擬系統(tǒng)的操作通常如下。模擬寫/讀循環(huán)分成三個周期---DMA(直接存儲器存取)數(shù)據(jù)傳輸、估算,以及存儲器存取。存儲器模擬系統(tǒng)的FPGA邏輯裝置端包括一個估算狀態(tài)機,一個FPGA總線驅(qū)動器,以及一個邏輯接口,用于每個存儲器區(qū)塊N與用戶設(shè)計中用戶自身存儲器接口的連接,以處理(1)FPGA邏輯裝置間的數(shù)據(jù)估計,以及(2)FPGA邏輯裝置和SRAM存儲器裝置間的寫/讀存儲器存取。連同F(xiàn)PGA邏輯裝置端,F(xiàn)PGA輸入/輸出控制器端包括一個存儲器狀態(tài)機和接口邏輯,以處理(1)主計算系統(tǒng)和SRAM存儲器裝置,以及(2)FPGA邏輯裝置和SRAM存儲器裝置之間的DMA(直接存儲器存取)、寫和讀操作。G.協(xié)同校驗系統(tǒng)本發(fā)明的一個實施例為協(xié)同校驗系統(tǒng),其包括一個可重新配置的計算系統(tǒng)(在下文稱為“RCC計算系統(tǒng)”)和一個可重新配置的計算硬件陣列(在下文稱為“RCC硬件陣列”)。在一些實施例中,不需要目標(biāo)系統(tǒng)和外部輸入/輸出設(shè)備,因為它們可以模擬于軟件之中。在另一些實施例中,目標(biāo)系統(tǒng)和外部輸入/輸出設(shè)備實際上與協(xié)同校驗系統(tǒng)連接以獲得速度并使用實際數(shù)據(jù),而不是模擬測試平臺數(shù)據(jù)。因此,協(xié)同校驗系統(tǒng)可以包括RCC計算系統(tǒng)和RCC硬件陣列并結(jié)合其它功能,以在使用實際的目標(biāo)系統(tǒng)和/或輸入/輸出設(shè)備的同時,調(diào)試用戶設(shè)計的軟件部分和硬件部分。RCC計算系統(tǒng)還包括時鐘邏輯(用于時鐘邊沿檢測和軟件時鐘生成),用于測試用戶設(shè)計的測試平臺程序,以及設(shè)備模型,其用于用戶決定在軟件中模擬的任何輸入/輸出設(shè)備,以代替使用真實的物理輸入/輸出設(shè)備。當(dāng)然,用戶可以決定在一個調(diào)試進程中使用真實的輸入/輸出設(shè)備以及模擬的輸入/輸出設(shè)備。軟件時鐘被提供給外部接口作為用于目標(biāo)系統(tǒng)和外部輸入/輸出設(shè)備的外部時鐘脈沖源。該軟件時鐘的使用實現(xiàn)了處理輸入和輸出數(shù)據(jù)必需的同步。因為RCC計算系統(tǒng)生成的軟件時鐘是調(diào)試進程的時基,所以模擬和硬件加速數(shù)據(jù)與在協(xié)同校驗系統(tǒng)和外部接口間傳輸?shù)娜魏螖?shù)據(jù)同步。當(dāng)目標(biāo)系統(tǒng)和外部輸入/輸出設(shè)備與協(xié)同校驗系統(tǒng)連接時,必須在協(xié)同校驗系統(tǒng)和其外部接口之間提供輸出接腳數(shù)據(jù)。協(xié)同校驗系統(tǒng)包括一個控制邏輯,其提供(1)RCC計算系統(tǒng)和RCC硬件陣列,以及(2)外部接口(其與目標(biāo)系統(tǒng)和外部輸入/輸出設(shè)備連接)和RCC硬件陣列之間的流量控制。因為RCC計算系統(tǒng)具有整個設(shè)計在軟件中的模型,包括用戶設(shè)計模型化在RCC硬件陣列中的部分,所以RCC計算系統(tǒng)還必須具有通向經(jīng)過外部接口和RCC硬件陣列之間的所有數(shù)據(jù)的入口??刂七壿嫶_保了RCC計算系統(tǒng)擁有這些數(shù)據(jù)的入口。II.系統(tǒng)描述圖1顯示了本發(fā)明一實施例的高層概觀圖。工作站10通過PCI總線系統(tǒng)50與可重新配置的硬件模型20和仿真接口30連接??芍匦屡渲玫挠布P?0通過PCI總線50以及電纜61與仿真接口30連接。目標(biāo)系統(tǒng)40通過電纜60與仿真接口30連接。在另一些實施例中,當(dāng)在特定的測試/調(diào)試進程中不需要在目標(biāo)系統(tǒng)環(huán)境下仿真用戶電路設(shè)計時,在此裝置中則不具有包含仿真接口30和目標(biāo)系統(tǒng)40的內(nèi)電路仿真裝置70(如虛線框中所示)。沒有內(nèi)電路仿真裝置70,可重新配置的硬件模型20通過PCI總線50與工作站10進行通信。協(xié)同內(nèi)電路仿真裝置70,可重新配置的硬件模型20在目標(biāo)系統(tǒng)中模擬或模仿用戶的一些電子子系統(tǒng)的電路設(shè)計。為了確保在目標(biāo)系統(tǒng)環(huán)境下對用戶的電子子系統(tǒng)電路設(shè)計的正確操作,必須將在目標(biāo)系統(tǒng)40和模擬電子子系統(tǒng)間的輸入和輸出信號提供給可重新配置的硬件模型20以供估算。因此,目標(biāo)系統(tǒng)40對于可重新配置的硬件模型20的輸入和輸出信號通過電纜60途經(jīng)仿真接口30和PCI總線50傳輸?;蛘撸繕?biāo)系統(tǒng)40的輸入/輸出信號可通過仿真接口30和電纜61傳輸至可重新配置的硬件模型20??刂茢?shù)據(jù)和一些獨立的模擬數(shù)據(jù)通過PCI總線50在可重新配置的硬件模型20和工作站10之間傳遞。事實上,工作站10運行控制整個模擬仿真系統(tǒng)操作的軟件內(nèi)核,并且必須具有與可重新配置的硬件模型20的接口(讀/寫)。工作站10包括計算機,鍵盤,鼠標(biāo),顯示器和合適的總線/網(wǎng)絡(luò)接口,使用戶可以進入并修改描述電子系統(tǒng)電路設(shè)計的數(shù)據(jù)。工作站范例包括SunMicrosystems公司的SPARC或ULTRA-SPARC工作站或基于Intel/Microsoft的計算站。如所屬
      技術(shù)領(lǐng)域
      中的技術(shù)人員所知的,工作站10包括一個CPU11,一根局部總線12,一個主機/PCI橋接器13,一根存儲器總線14,以及主存儲器15。工作站10,可重新配置的硬件模型20和仿真接口30中具有與本發(fā)明有關(guān)的軟件模擬、硬件加速模擬、內(nèi)電路仿真,以及后模擬分析的各種形式。體現(xiàn)在軟件中的算法在一個測試/調(diào)試進程中儲存在主存儲器15中并利用CPU11通過工作站的操作系統(tǒng)執(zhí)行。如所屬
      技術(shù)領(lǐng)域
      中的技術(shù)人員所知的,當(dāng)通過啟動固件將操作系統(tǒng)載入工作站10的存儲器中后,控制系統(tǒng)轉(zhuǎn)到其初始化編碼以建立必要的數(shù)據(jù)結(jié)構(gòu),載入并初始化設(shè)備驅(qū)動器。接著控制系統(tǒng)轉(zhuǎn)到命令行解釋程序(CLI),CLI提示用戶指出將要運行的程序。操作系統(tǒng)接下來確定運行程序所需的存儲器數(shù)量,定位存儲器區(qū)塊,或分配存儲器區(qū)塊并直接或通過BIOS(基本輸入輸出系統(tǒng))訪問存儲器。在完成存儲器載入過程后,開始執(zhí)行應(yīng)用程序。本發(fā)明的一個實施例是一種特定的模擬仿真應(yīng)用程序。在其執(zhí)行過程中,應(yīng)用程序需要操作系統(tǒng)提供多種服務(wù),包括但不限于,對磁盤文件的讀出和寫入,執(zhí)行數(shù)據(jù)通信,以及連接顯示器/鍵盤/鼠標(biāo)。工作站10具有適當(dāng)?shù)挠脩艚涌?,以允許用戶輸入電路設(shè)計數(shù)據(jù),編輯電路設(shè)計數(shù)據(jù),監(jiān)視模擬和仿真進程,同時獲得結(jié)果,以及本質(zhì)上控制模擬和仿真過程。盡管圖1中未顯示,但用戶接口包括可利用鍵盤和鼠標(biāo)輸入并顯示在顯示器上的用戶可訪問的菜單驅(qū)動選項和命令集。用戶通常使用具有鍵盤90的計算站80。用戶通常建立電子系統(tǒng)的特定電路設(shè)計并將其所設(shè)計系統(tǒng)的HDL(硬件描述語言)(一般為RTL級結(jié)構(gòu))編碼說明輸入工作站10。本發(fā)明的模擬仿真系統(tǒng)在其它操作中執(zhí)行部件類型分析,用于劃分硬件和軟件之間的模型化。模擬仿真系統(tǒng)用軟件模型化行為級,RTL級和門級編碼。對于硬件模型化來說,系統(tǒng)可以模型化RTL級和門級編碼;但是,RTL級設(shè)計必須在硬件模擬之前與門級設(shè)計合成。門級編碼可被直接處理成可用的源設(shè)計數(shù)據(jù)庫格式,用于硬件模擬。使用RTL級和門級編碼,系統(tǒng)自動執(zhí)行部件類型分析以完成劃分步驟。基于發(fā)生在軟件編譯時間中的劃分分析,系統(tǒng)將電路設(shè)計的一些部分映射入硬件以通過硬件加速來快速模擬。用戶還可將模型化的電路設(shè)計與目標(biāo)系統(tǒng)相連以進行真實環(huán)境下的內(nèi)電路仿真。因為軟件模擬和硬件加速引擎緊密耦合,所以通過軟件內(nèi)核,用戶可以使用軟件模擬模擬整個電路設(shè)計,通過使用所映射電路設(shè)計的硬件模型來加速測試/調(diào)試過程,返回模擬部分,并返回硬件加速直到測試/調(diào)試過程完成。按每一循環(huán)周期模式以及按用戶意愿在軟件模擬和硬件加速之間變換是本實施例的有價值的特點之一。此特點在調(diào)試過程中尤其有用,其使得用戶可以使用硬件加速模式快速的進入特定的點或周期,并接著使用軟件模擬檢測其后的多個點以調(diào)試電路設(shè)計。此外,模擬仿真系統(tǒng)使得用戶可以看見所有的部件,無論部件的內(nèi)部實現(xiàn)是用硬件還是用軟件。模擬仿真系統(tǒng)通過從硬件模型中讀取寄存器值并接著當(dāng)用戶要求此讀取時,使用軟件模型重新建立組合部件完成此過程。將在下文中更充分的討論這些及其他特點。工作站10與總線系統(tǒng)50相連??偩€系統(tǒng)可為任何可用的總線系統(tǒng),其使不同主體,例如工作站10,可重新配置的硬件模型20和仿真接口30實現(xiàn)可操作的連接??偩€系統(tǒng)最好足夠快以為用戶提供實時或接近實時的結(jié)果。一種此類總線系統(tǒng)為外設(shè)部件互連(PCI)標(biāo)準(zhǔn)中所述的總線系統(tǒng),其內(nèi)容以引用的方式并入本文。目前,PCI標(biāo)準(zhǔn)的2.0版提供了33MHz的總線速度。2.1版提供了對66MHz總線速度的支持。從而,工作站10,可重新配置的硬件模型20和仿真接口30將遵循PCI標(biāo)準(zhǔn)。在一個實施例中,在PCI總線上處理工作站10和可重新配置的硬件模型20之間的通信。在此總線系統(tǒng)中還可發(fā)現(xiàn)其他的PCI適用設(shè)備。這些設(shè)備可以以和工作站10,可重新配置的硬件模型20和仿真接口30連接相同或不同等級連接至PCI總線。每個不同等級的PCI總線,例如PCI總線52,通過PCI到PCI橋接器51與另外等級的PCI總線連接,例如PCI總線50(如果存在的話)。在PCI總線52上,可能連接有兩個PCI設(shè)備53和54。可重新配置的硬件模型20包括現(xiàn)場可編程門陣列(FPGA)芯片陣列,其可被程式化配置和重新配置以模擬用戶電子系統(tǒng)設(shè)計的硬件部分。在此實施例中,硬件模型可重新配置;也就是說,其可重新配置其硬件以適合即將開始的特定計算或用戶電路設(shè)計。例如,如果需要許多加法器和乘法器,則系統(tǒng)就配置有許多加法器和乘法器。當(dāng)需要其他的計算單元或功能時,它們也將模擬或形成在系統(tǒng)之中。這樣,可以最優(yōu)化系統(tǒng)以執(zhí)行專門的計算或邏輯操作??芍匦屡渲玫南到y(tǒng)同時也具有靈活性,使得用戶在制造,測試或使用過程中較少的遇到硬件故障。在一個實施例中,可重新配置的硬件模型20包括一個由FPGA芯片組成的計算元件二元陣列,以向不同用戶電路設(shè)計和應(yīng)用提供計算資源。后文將會討論更詳細的硬件配置過程。兩種此類FPGA芯片,包括Altera和Xilinx公司所銷售的芯片。在一些實施例中,通過使用現(xiàn)場可編程設(shè)備將可重新配置的硬件模型重新配置。但是,本發(fā)明的其他實施例可能通過使用專用集成電路(ASIC)技術(shù)實現(xiàn)。在其他一些實施例可為定制集成電路的形式。在典型的測試/調(diào)試環(huán)境下,將使用可重新配置的設(shè)備模擬/仿真用戶的電路設(shè)計,使得在真正的原形制造之前可以進行適當(dāng)?shù)母淖?。但是,在其他一些情況下,可以使用實際的ASIC或定制集成電路,盡管這樣剝奪了用戶快速經(jīng)濟的改變可能的非功能電路設(shè)計以重新模擬和重新仿真的能力。然而有時,此類ASIC或定制集成電路已經(jīng)制造完成并容易獲得,使可重新配置結(jié)合的芯片進行的仿真更為可取。根據(jù)本發(fā)明,工作站中的軟件,結(jié)合其外部硬件模型,與現(xiàn)有系統(tǒng)相比為終端用戶提供了程度更高的靈活性,控制性和性能。為了運行模擬和仿真,將確定電路設(shè)計的模型和相關(guān)參數(shù)(如,輸入測試平臺激勵,總系統(tǒng)輸出,中間結(jié)果)并提供給模擬軟件系統(tǒng)。用戶可以使用原理圖獲取工具或合成工具定義系統(tǒng)電路設(shè)計。用戶以電子系統(tǒng)的電路設(shè)計(一般為簡單示意圖的形式)為開始,接著使用合成工具將其轉(zhuǎn)變?yōu)镠DL(硬件描述語言)形式。也可由用戶直接編寫HDL。作為范例的HDL語言包括Verilog和VHDL(VHSIC硬件描述語言);但是,也可使用其他語言。以HDL表示的電路設(shè)計包括許多并行部件。每個部件為一個編碼序列,其即定義了電路元件的行為又控制了模擬的執(zhí)行。模擬仿真系統(tǒng)分析這些部件以確定其部件類型,并且編譯程序利用這些部件類型信息建立軟件和硬件中不同的執(zhí)行模式。此后,用戶可使用本發(fā)明的模擬仿真系統(tǒng)。設(shè)計者可以通過對模擬模型應(yīng)用多個激勵,例如輸入信號和測試向量圖型的模擬來驗證電路的精確性。如果在模擬過程中電路未按計劃運轉(zhuǎn),則用戶通過修改電路示意圖或HDL文件重新定義電路。圖2中的流程圖顯示了本發(fā)明該實施例的應(yīng)用。算法開始于步驟100。在將HDL文件載入系統(tǒng)后,系統(tǒng)對電路設(shè)計進行編譯,劃分并映射到適當(dāng)?shù)挠布P?。將在下文詳細討論編譯,劃分和映射步驟。在運行模擬之前,系統(tǒng)必須運行一個復(fù)位序列,以在硬件加速模型起作用之前去除軟件中所有的未知“x”值。本發(fā)明的一個實施例使用一2位寬數(shù)據(jù)通路提供總線信號的4個狀態(tài)值---“00”為邏輯低,“01”為邏輯高,“10”為“z”,“11”為“x”。如所屬
      技術(shù)領(lǐng)域
      的技術(shù)人員所知,軟件模型可以處理“0”,“1”,“x”(總線爭用或未知值)和“z”(無驅(qū)動器或高阻抗)。相比而言,硬件無法處理未知值“x”,所以根據(jù)特定適用編碼而不同的復(fù)位序列將寄存器值復(fù)位成全“0”或全“1”。在步驟105,用戶確定是否模擬電路設(shè)計。通常,用戶首先以軟件模擬開始啟動系統(tǒng)。因此,如果步驟105的決定為“是”,則在步驟110開始軟件模擬。用戶可以停止模擬并檢查值(如步驟115所示)。事實上,用戶可以在測試/調(diào)試進程中的任何時間停止模擬,如從步驟115展開的虛線內(nèi)所示,轉(zhuǎn)至硬件加速模式,ICE模式和后模擬模式中各個結(jié)點。執(zhí)行步驟115將用戶帶到了步驟160。在停止之后,系統(tǒng)內(nèi)核讀回硬件寄存器部件的狀態(tài)以重新生成整個軟件模型,如果用戶期望檢查組合部件值,則還包括組合部件。在恢復(fù)整個軟件模型之后,用戶可以檢查系統(tǒng)中的任何信號值。在停止和檢查之后,用戶可以繼續(xù)在唯模擬模式或硬件加速模式中運行。如流程圖中所示,步驟115轉(zhuǎn)到停止/值檢查程序。停止/值檢查程序開始于步驟160。在步驟165,用戶必須確定是否在此點停止模擬并檢查值。如果步驟165的結(jié)果為“是”,則步驟170停止當(dāng)前可能正在進行的模擬并檢查各個值以檢驗電路設(shè)計的正確性。在步驟175,算法返回分支點,即步驟115。在此,用戶可以繼續(xù)模擬并為剩余的測試/調(diào)試進程停止/檢查值或前進到內(nèi)電路仿真步驟。同樣的,如果步驟105的結(jié)果為“否”,則算法將繼續(xù)硬件加速確定步驟120。在步驟120,用戶確定是否通過模型化電路設(shè)計的硬件部分加速模擬來加快測試/調(diào)試過程。如果步驟120的結(jié)果為“是”,那么在步驟125開始硬件模型加速。在系統(tǒng)編譯過程中,模擬仿真系統(tǒng)將一些部分映射到硬件模型中。在此,當(dāng)需要硬件加速時,系統(tǒng)將寄存器和組合部件移到硬件模型中并將輸入和估算值移到硬件模型中。因此,在硬件加速過程中,估算以增加的速度長時期發(fā)生在硬件模型中。內(nèi)核將測試平臺輸出寫入硬件模型,更新軟件時鐘,接著按一循環(huán)接一循環(huán)模式讀取硬件模型輸出值。如果用戶需要,可以通過利用寄存器值重新生成組合部件以輸出寄存器值和組合部件,使來自用戶電路設(shè)計(整個電路設(shè)計)的整個軟件模型的值可用。因為需要軟件介入來重新生成這些組合部件,所以并非在每個循環(huán)周期都提供整個軟件模型值的輸出;而是僅在用戶需要時提供這些值。此說明書將在其后討論組合部件的重新生成過程。此外,如步驟115所示,用戶可以在任何時間停止硬件加速模式。如果用戶想要停止,算法進入步驟115和160以轉(zhuǎn)到停止/值檢查程序。在此,如在步驟115中,用戶可以在任何時間停止硬件加速模擬過程并檢查模擬過程的結(jié)果值,或者用戶可以繼續(xù)硬件加速模擬過程。停止/值檢查程序轉(zhuǎn)到步驟160,165,170和175,其在上文中已有介紹。在步驟125后返回主程序,用戶可以在步驟135確定是否繼續(xù)硬件加速模擬或執(zhí)行純模擬。如果用戶想要進一步模擬,則算法進入步驟105。如果不是,則算法進入步驟140的后模擬分析。在步驟140,模擬仿真系統(tǒng)提供了多個后模擬分析特征。系統(tǒng)記錄所有對硬件模型的輸入。對于硬件模型輸出,系統(tǒng)以用戶定義的記錄頻率(如,1/10,000記錄/周期)記錄硬件寄存器部件的所有值。記錄頻率決定了輸出值被記錄的頻度。對于1/10,000記錄/周期的記錄頻率來說,每10,000個周期記錄一次輸出值。記錄頻率越高,記錄下的用于后模擬分析的信息也越多。因為所選記錄頻率與模擬仿真速度有因果關(guān)系,所以用戶應(yīng)仔細選擇記錄頻率。較高的記錄頻率將減低模擬仿真速度,因為在執(zhí)行進一步模擬之前,系統(tǒng)必須花費時間和資源通過對存儲器執(zhí)行輸入/輸出操作來記錄輸出值。關(guān)于后模擬分析,用戶將選擇期望模擬的特定點。然后用戶可以在模擬仿真后接著將記錄輸入硬件模型以計算值變化和所有硬件部件的內(nèi)部狀態(tài),通過運行軟件模擬來進行分析。應(yīng)注意使用了硬件加速器模擬所選定記錄點的數(shù)據(jù)以分析模擬結(jié)果。該后模擬分析方法可以聯(lián)接至任何的模擬波形觀測儀以用于后模擬分析。隨后將有更詳細的討論。在步驟145,用戶可以選擇在其目標(biāo)系統(tǒng)環(huán)境中仿真模擬的電路設(shè)計。如果步驟145的結(jié)果為“否”,算法終止并且模擬仿真過程終止于步驟155。如果期望結(jié)合目標(biāo)系統(tǒng)進行仿真,則算法進入步驟150。此步驟涉及激活仿真接口板,將電纜和芯片引腳接頭插入目標(biāo)系統(tǒng),以及運行目標(biāo)系統(tǒng)以獲取來自目標(biāo)系統(tǒng)的系統(tǒng)輸入/輸出。來自目標(biāo)系統(tǒng)的系統(tǒng)輸入/輸出包括目標(biāo)系統(tǒng)和電路設(shè)計的仿真之間的信號。仿真的電路設(shè)計從目標(biāo)系統(tǒng)接收輸入信號,處理這些信號,將信號傳送給模擬仿真系統(tǒng)用于進一步處理,并且將處理后的信號輸出給目標(biāo)系統(tǒng)。另一方面,仿真的電路設(shè)計將輸出信號傳送給目標(biāo)系統(tǒng),目標(biāo)系統(tǒng)對信號進行處理,并且可能將處理后的信號輸出回仿真的電路設(shè)計。按這種方法,可以在其自然的目標(biāo)系統(tǒng)環(huán)境下評估電路設(shè)計的性能。在結(jié)合目標(biāo)系統(tǒng)進行仿真之后,用戶具有的結(jié)果可以驗證電路設(shè)計或揭示其非功能特征。此時,如步驟135所示,用戶可以再次進行模擬/仿真,全部停止以改進電路設(shè)計,或基于驗證的電路設(shè)計進行集成電路的制造。III.模擬/硬件加速模式圖3顯示了根據(jù)本發(fā)明一實施例,在編譯時間和運行時間中軟件編譯和硬件配置的高層圖。圖3顯示了兩組信息一組信息區(qū)分了在編譯時間和模擬/仿真運行時間中執(zhí)行的操作;另一組信息顯示了軟件模型和硬件模型之間的劃分。開始時,根據(jù)本發(fā)明一實施例的模擬仿真系統(tǒng)需要用戶電路設(shè)計作為輸入數(shù)據(jù)200。用戶電路設(shè)計為某種HDL文件的形式(如Verilog,VHDL)。模擬仿真系統(tǒng)分析HDL文件,將行為級碼,寄存器傳送碼和門級編碼歸納為可供模擬仿真系統(tǒng)使用的形式。系統(tǒng)生成源設(shè)計數(shù)據(jù)庫用于前端處理步驟205?,F(xiàn)在,處理后的HDL文件可供模擬仿真系統(tǒng)使用。如所屬
      技術(shù)領(lǐng)域
      的技術(shù)人員所知,分析過程將ASCII數(shù)據(jù)轉(zhuǎn)換成內(nèi)部二進制數(shù)據(jù)結(jié)構(gòu)。請參見ALFREDV.AHO,RAVISETHI,和JEFFREYD.ULLMAN的COMPILERSPRINCIPLES,TECHNIQUES,ANDTOOLS(1988),其內(nèi)容以引用的方式并入本文。編譯時間由過程225表示而運行時間由過程/單元230表示。如過程225所示,在編譯時間內(nèi),模擬仿真系統(tǒng)通過執(zhí)行部件類型分析編譯處理后的HDL文件。部件類型分析將HDL部件分成組合部件,寄存器部件,時鐘部件,存儲器部件以及測試平臺部件。實質(zhì)上,系統(tǒng)將用戶電路設(shè)計分成控制和估算部件。模擬仿真編譯程序210實質(zhì)上將模擬的控制部件映射到軟件中,將估算部件映射到軟件和硬件中。編譯程序210生成用于所有HDL部件的軟件模型。軟件模型形成于編碼215中。此外,模擬仿真編譯程序210使用HDL文件的部件類型信息,從程序庫或模塊發(fā)生器中選擇或生成硬件邏輯塊/元件,并生成用于特定HDL部件的硬件模型。最終結(jié)果為所謂的“位流”配置文件220。在運行時間的準(zhǔn)備期,編碼形式的軟件模型儲存在主存儲器中,與根據(jù)本發(fā)明一實施例的模擬仿真程序有關(guān)的應(yīng)用程序也儲存在主存儲器中。在通用處理器或工作站240中處理此編碼?;旧吓c此同時,用于硬件模型的配置文件220被用來將用戶電路設(shè)計映射到可重新配置的硬件板250中。在此,電路設(shè)計已經(jīng)在硬件中模型化的部分被映射并分配到可重新配置的硬件板250中的FPGA芯片中。如上所述,對通用處理器或工作站240應(yīng)用用戶測試平臺激勵和測試向量數(shù)據(jù)以及其他測試平臺資源235以用于模擬目的。此外,用戶可以通過軟件控制執(zhí)行電路設(shè)計的仿真。可重新配置的硬件板250包含用戶的仿真電路設(shè)計。該模擬仿真系統(tǒng)使用戶可以選擇性的在軟件模擬和硬件仿真之間變換,以及按一循環(huán)接一循環(huán)模式在任何時間停止模擬或仿真過程,以檢查模型中每個部件(寄存器或組合部件)的值。因此,模擬仿真系統(tǒng)在測試平臺235和處理器/工作站240之間傳送數(shù)據(jù)用于模擬,在測試平臺235和可重新配置的硬件板250之間通過數(shù)據(jù)總線245和處理器/工作站240傳送數(shù)據(jù)用于仿真。如果包括一個用戶目標(biāo)系統(tǒng)260,則仿真數(shù)據(jù)可以通過仿真接口255和數(shù)據(jù)總線245在可重新配置的硬件板250和目標(biāo)系統(tǒng)260之間傳送。內(nèi)核存在于處理器/工作站240的存儲器的軟件模擬模型中,所以數(shù)據(jù)必須通過數(shù)據(jù)總線245在處理器/工作站240和可重新配置的硬件板250之間傳送。圖4顯示了根據(jù)本發(fā)明一實施例的編譯過程流程圖。圖3中的編譯過程由過程205和210表示。圖4中的編譯過程開始于步驟300。步驟301處理前端信息。在此,生成門級HDL編碼。用戶通過直接手寫編碼或使用一些形式的原理圖獲取或合成工具生成門級HDL編碼以將初始電路設(shè)計轉(zhuǎn)化為HDL形式。模擬仿真系統(tǒng)將HDL文件(ASCII格式)解析成二進制格式,從而將行為級編碼,寄存器傳送(RTL)級編碼和門級編碼歸納為可供模擬仿真系統(tǒng)使用的內(nèi)部數(shù)據(jù)結(jié)構(gòu)形式。系統(tǒng)生成包含解析后HDL編碼的源設(shè)計數(shù)據(jù)庫。步驟302通過將HDL部件分成如部件類型資源303所示的組合部件,寄存器部件,時鐘部件,存儲器部件以及測試平臺部件執(zhí)行部件類型分析。模擬仿真系統(tǒng)生成用于寄存器和組合部件的硬件模型,并伴隨一些例外情況,將在下文中討論。測試平臺和存儲器部件被映射在軟件中。一些時鐘部件(如,派生的時鐘)在硬件中模擬,其他則位于軟件/硬件邊界處(如,軟件時鐘)。組合部件為無狀態(tài)邏輯部件,其輸出值為當(dāng)前輸入值的函數(shù)并且不依賴于輸入值的歷史。組合部件的范例包括基本門電路(如,與,或,異或,非),選擇器,加法器,乘法器,移位器,和總線驅(qū)動器。寄存器部件為簡單的存儲部件。寄存器的狀態(tài)轉(zhuǎn)變由時鐘信號控制。一種寄存器的形式為邊緣觸發(fā)式,當(dāng)檢測到邊緣時其發(fā)生狀態(tài)改變。另一種寄存器的形式為鎖存器形式,其為電平觸發(fā)。示范例包括觸發(fā)器(D-型,JK-型)以及電平敏感鎖存器。時鐘部件為將周期信號傳送給邏輯裝置以控制其行為的部件。通常,時鐘信號控制寄存器的更新。主時鐘由自時序的測試平臺程序生成。例如,用于生成時鐘的典型測試平臺Verilog程序如下alwaysbeginClock=0;#5;Clock=1;#5;end;根據(jù)此編碼,時鐘信號初始于邏輯“0”。在5個時間單位后,時鐘信號變?yōu)檫壿嫛?”。再在5個時間單位后,時鐘信號返回邏輯“0”。主時鐘信號一般用軟件生成并且在典型用戶電路設(shè)計中僅有少數(shù)(即,1-10個)主時鐘。從由主時鐘依次驅(qū)動的組合邏輯和寄存器的網(wǎng)絡(luò)中生成派生的或門控時鐘。在典型用戶電路設(shè)計中有許多(即,1000或更多)派生的時鐘。存儲器部件為塊存儲部件,其具有地址和控制線以訪問特定存儲位置中的單獨數(shù)據(jù)。范例包括ROM(只讀存儲器),異步RAM(隨機存貯器),和同步RAM。測試平臺部件為用于控制和監(jiān)視模擬過程的軟件處理。因此,這些部件不是在試驗中的硬件電路設(shè)計的一部分。測試平臺部件通過生成時鐘信號,初始化模擬數(shù)據(jù),并從磁盤/存儲器中讀取模擬測試向量圖型來控制模擬。測試平臺部件還通過檢查值的變化,執(zhí)行變值轉(zhuǎn)儲,檢查信號值關(guān)系上的斷言約束,將輸出測試向量寫入磁盤/存儲器,并與不同的波形觀測儀與調(diào)試程序連接來監(jiān)視模擬過程。模擬仿真系統(tǒng)按下列步驟執(zhí)行部件類型分析。系統(tǒng)檢查二進制源設(shè)計數(shù)據(jù)庫?;谠丛O(shè)計數(shù)據(jù)庫,系統(tǒng)可將元件歸為上述部件類型的一種。連續(xù)賦值語句被歸為組合部件。門基元(gateprimitives)根據(jù)語言定義可為組合類型或寄存器類型的鎖存器形式。初始化編碼被看作初始化類型的測試平臺。不使用網(wǎng)絡(luò)而驅(qū)動網(wǎng)絡(luò)的始終處理(alwaysprocess)為驅(qū)動器類型的測試平臺。不驅(qū)動網(wǎng)絡(luò)而讀取網(wǎng)絡(luò)的始終處理為監(jiān)示器類型的測試平臺。具有延遲控制或多重事件控制的始終處理為通用類型的測試平臺。具有單一事件控制并驅(qū)動單一網(wǎng)絡(luò)的始終處理可為下列中的一種(1)如果事件控制為邊緣觸發(fā)事件,那么此程序為一個邊緣觸發(fā)型寄存器部件。(2)如果在一程序中被驅(qū)動的網(wǎng)絡(luò)未定義在所有可能的執(zhí)行通路中,那么該網(wǎng)絡(luò)為寄存器的鎖存器類型。(3)如果在一程序中被驅(qū)動的網(wǎng)絡(luò)定義在所有可能的執(zhí)行通路中,那么該網(wǎng)絡(luò)為組合部件。具有單一事件控制但驅(qū)動多個網(wǎng)絡(luò)的始終處理可分解成單獨驅(qū)動每個網(wǎng)絡(luò)的程序以分別取得其相應(yīng)的部件類型??墒褂梅纸膺^程確定部件類型。步驟304生成用于所有HDL部件的軟件模型,不考慮其部件類型。通過適當(dāng)?shù)挠脩艚涌冢脩艨梢允褂猛暾能浖P湍M整個電路設(shè)計。使用測試平臺程序驅(qū)動激勵輸入,測試向量圖型,控制總體模擬,并監(jiān)視模擬過程。步驟305執(zhí)行時鐘分析。時鐘分析包括兩個一般步驟(1)提取時鐘提取和順序映射,以及(2)時鐘網(wǎng)絡(luò)分析。提取時鐘提取和順序映射步驟包括將用戶的寄存器部件映射到模擬仿真系統(tǒng)的硬件寄存器模型中,并接著從系統(tǒng)硬件寄存器部件中提取時鐘信號。時鐘網(wǎng)絡(luò)分析步驟包括基于提取的時鐘信號確定主時鐘和派生的時鐘,并分離門控時鐘網(wǎng)絡(luò)和門控數(shù)據(jù)網(wǎng)絡(luò)。將結(jié)合圖16進行更詳細的說明。步驟306執(zhí)行滯留選擇(residenceselection)。與用戶相結(jié)合,系統(tǒng)為硬件模型選擇部件;也就是說,在所有可以在用戶電路設(shè)計的硬件模型中實現(xiàn)的可能硬件部件中,一些硬件部件由于多種原因?qū)⒉粫谟布心M。這些原因包括部件類型,硬件資源限制(即,停留在軟件中的浮點運算和大型乘法運算),模擬和通信開支(即,停留在軟件中測試平臺程序之間的小型橋接器邏輯,以及停留在軟件中由測試平臺程序監(jiān)視的信號),以及用戶偏愛。由于包括性能和模擬監(jiān)測的眾多原因,用戶可以迫使本應(yīng)在硬件中模擬的特定部件留在軟件中。步驟307將所選硬件模型映射到可重新配置的硬件仿真板上。具體的說,步驟307獲取連線表并將電路設(shè)計映射到特定的FPGA芯片中。此步驟包括將邏輯元件分組或群集。系統(tǒng)然后將每一組分配到一唯一FPGA芯片和將幾個組分配到一個FPGA芯片中??傮w上說,系統(tǒng)將元件組分配到FPGA芯片中。下文將結(jié)合圖6進行更詳細的說明。系統(tǒng)將硬件模型部件放入FPGA芯片網(wǎng)格中以最小化芯片間通信的開支。在一個實施例中,陣列包括一個4×4的FPGA陣列,一個PCI接口單元,以及一個軟件時鐘控制單元。FPGA陣列實現(xiàn)了用戶電路設(shè)計的一部分,如上述此軟件編譯過程的步驟302-306中所確定的一樣。PCI接口單元允許了可重新配置的硬件仿真模型通過PCI總線和工作站進行通信。軟件時鐘避免了多個時鐘信號進入FPGA陣列時的競態(tài)狀態(tài)。此外,步驟307根據(jù)硬件模型間的通信進度表給FPGA芯片布線。步驟308插入控制電路。這些控制電路包括輸入/輸出地址指示器和數(shù)據(jù)總線邏輯,其用于聯(lián)系DMA引擎到模擬器(下文中將結(jié)合圖11,12和14進行討論),以及估算控制邏輯,以控制硬件狀態(tài)轉(zhuǎn)變和導(dǎo)線多重傳輸(下文中將結(jié)合圖19和20進行討論)。如所屬
      技術(shù)領(lǐng)域
      中的技術(shù)人員所知,一個直接存儲器存取(DMA)單元提供了外圍設(shè)備和主存儲器之間的附加數(shù)據(jù)通道,在其中外圍設(shè)備可以直接訪問(即,讀,寫)主存儲器而不需CPU的介入。每個FPGA芯片中的地址指示器允許數(shù)據(jù)根據(jù)總線尺寸限制在軟件模型和硬件模型之間移動。估算控制邏輯實質(zhì)上為一個有限狀態(tài)機,其確保在時鐘和數(shù)據(jù)輸入進入這些寄存器之前時鐘啟動到待斷言的寄存器的輸入。步驟309生成用于將硬件模型映射到FPGA芯片的配置文件。實質(zhì)上,步驟309將電路設(shè)計部件分配給每個芯片上的特定單元或門級部件。鑒于步驟307確定硬件模型組到特定FPGA芯片的映射,步驟309取得此映射結(jié)果并為每個FPGA芯片生成配置文件。步驟310生成軟件內(nèi)核代碼。內(nèi)核為控制整個模擬仿真系統(tǒng)的軟件代碼序列。直到此點才可以生成內(nèi)核,因為代碼的一部分需要更新和估算硬件部件。僅在步驟309之后,才發(fā)生到硬件模型和FPGA芯片的正確映射。下文中將結(jié)合圖5進行更詳細的討論。編譯終止于步驟311。如上文中結(jié)合圖4所述,在確定軟件和硬件模型之后,于步驟310生成軟件內(nèi)核代碼。內(nèi)核為模擬仿真系統(tǒng)中控制整個系統(tǒng)操作的一段軟件。內(nèi)核控制軟件模擬以及硬件仿真的執(zhí)行。因為內(nèi)核也存在于硬件模型的中心,所以模擬器是與仿真器相結(jié)合的。與其他已知的協(xié)同模擬系統(tǒng)相比較,根據(jù)本發(fā)明一實施例的模擬系統(tǒng)不需要模擬器從外部與仿真器互相作用。內(nèi)核的一個實施例為圖5所示的控制回路。參見圖5,內(nèi)核開始于步驟330。步驟331對初始化編碼進行估算??刂苹芈烽_始于步驟332并結(jié)束于決策步驟339,不斷的開始并循環(huán)直到系統(tǒng)觀測不到有效的測試平臺程序,在此情況下表示模擬或仿真進程已完成。步驟332估算有效的測試平臺部件用于模擬或仿真。步驟333估算時鐘部件。這些時鐘部件來自測試平臺程序。通常,由用戶規(guī)定所生成的供給模擬系統(tǒng)的時鐘信號類型。在一個例子中(在上文結(jié)合部件類型分析時討論過并復(fù)制在此),用戶在測試平臺程序中設(shè)計的時鐘部件如下alwaysbeginClock=0;#5;Clock=1;#5;end;在此時鐘部件示例中,用戶決定首先產(chǎn)生邏輯“0”信號,并且在5個模擬時間后,將產(chǎn)生一個邏輯“1”信號。此時鐘生成過程將不斷循環(huán)直到被用戶停止。這些模擬時間由內(nèi)核推進。決策步驟334詢問是否檢測到任何有效的、將導(dǎo)致形成軟件中一些類型的邏輯估算和可能硬件模型(如果仿真正在運行)的時鐘邊沿。內(nèi)核用來檢測有效時鐘邊沿的時鐘信號為來自測試平臺程序的時鐘信號。如果決策步驟334的估算結(jié)果為“否”,則內(nèi)核進入步驟337。如果決策步驟334的估算結(jié)果為“是”,則導(dǎo)致步驟335更新寄存器和存儲器,步驟336傳送組合部件。步驟336實質(zhì)上維護組合邏輯,組合邏輯在斷言一個時鐘信號之后,需要一些時間通過組合邏輯網(wǎng)絡(luò)傳送值。一旦值已通過組合部件傳送并已穩(wěn)定,內(nèi)核進入步驟337。應(yīng)注意寄存器和組合部件也在硬件中模擬,因此,內(nèi)核控制模擬仿真系統(tǒng)的仿真器部分。事實上,內(nèi)核可以在步驟334和335中加速對硬件模型的估算,無論是否檢測到任何有效的時鐘邊沿。因此,不同于現(xiàn)有技術(shù),根據(jù)本發(fā)明一實施例的模擬仿真系統(tǒng)可以通過軟件內(nèi)核并基于部件類型(如,寄存器,組合部件)加速硬件仿真器。此外,內(nèi)核按每一循環(huán)周期模式控制軟件和硬件模型的執(zhí)行。實質(zhì)上,仿真器硬件模型可以被特征化為運用模擬內(nèi)核的通用處理器的模擬協(xié)同處理器,其可以運行模擬內(nèi)核。協(xié)同處理器加速了模擬任務(wù)。步驟337估算有效的測試平臺部件。步驟338推進模擬時間。步驟339提供開始于步驟332的控制回路的邊界。步驟339確定是否有任何的測試平臺程序是有效的。如果有,那么將繼續(xù)運行模擬和/或仿真并估算更多的數(shù)據(jù)。這樣,內(nèi)核循環(huán)到步驟332去估算任何有效的測試平臺部件。如果沒有測試平臺程序是有效的,則完成模擬和仿真過程。步驟340終止模擬/仿真過程??偠灾瑑?nèi)核為控制整個模擬仿真系統(tǒng)操作的主控制回路。只要有任何測試平臺程序是有效的,內(nèi)核就估算有效的測試平臺部件,估算時鐘部件,檢測時鐘邊沿以更新寄存器和存儲器以及傳送組合邏輯數(shù)據(jù),并推進模擬時間。圖6顯示了自動將硬件模型映射到可重新配置的電路板上的方法的一個實施例。連線表文件提供了硬件實現(xiàn)過程的輸入。連線表描述了邏輯功能和其互連。硬件模型到FPGA實現(xiàn)過程包括三個獨立的任務(wù)映射,布局和布線。工具通常被稱為“布局及布線”工具。使用的設(shè)計工具可以是ViewlogicViewdraw(一種原理圖獲取系統(tǒng)),和XilinxXact布局及布線軟件,或Altera的MAX+PLUSII系統(tǒng)。映射任務(wù)將電路設(shè)計分成邏輯塊,輸入/輸出塊,和其他FPGA資源。盡管一些邏輯功能,例如觸發(fā)器和緩沖器可直接映射到相應(yīng)的FPGA資源中,但其他的邏輯功能,例如組合邏輯則必須使用映射算法在邏輯塊中實現(xiàn)。用戶通??梢詫τ成溥M行選擇以獲得最佳的密度或最佳的性能。布局任務(wù)涉及從映射任務(wù)中取得邏輯和輸入/輸出塊并將它們分配到FPGA陣列中的物理位置。目前的FPGA工具一般使用三種技術(shù)的組合極小切割(minicut),模擬退火(simulatingannealing),和常規(guī)力指向松弛(generalforce-directedrelaxation,GFDR)。這些技術(shù)本質(zhì)上確定了基于不同費用函數(shù)的最佳布局,費用函數(shù)依賴于互連的總網(wǎng)絡(luò)長度或沿一組關(guān)鍵信號通路的延遲,以及其他的變量。XilinxXC4000系列FPGA工具使用一種極小切割技術(shù)的變型進行初始布局,再使用GFDR技術(shù)對布局進行細微改進。布線任務(wù)涉及確定用于互連多個經(jīng)過映射和布局的塊的布線路徑。一種此類路由器,被稱為迷宮路由器,可尋找兩點間的最短路徑。由于布線任務(wù)提供了芯片間的直接互連,所以與芯片有關(guān)的電路布局就很關(guān)鍵。在開始時,可在門級連線表350或RTL357中描述硬件模型。RTL級編碼可被進一步的合成為門級連線表。在映射過程中,可以使用合成器服務(wù)器360,例如Altera的MAX+PLUSII可編程邏輯開發(fā)工具系統(tǒng)和軟件,產(chǎn)生用于映射目的的輸出文件。合成器服務(wù)器360可以將用戶的電路設(shè)計部件與程序庫361中的任何標(biāo)準(zhǔn)的現(xiàn)有邏輯元件(例如,標(biāo)準(zhǔn)加法器或標(biāo)準(zhǔn)乘法器)相匹配,生成任何參數(shù)化和頻繁使用的邏輯模塊362(如,非標(biāo)準(zhǔn)的乘法器或非標(biāo)準(zhǔn)的加法器),并合成隨機邏輯元件363(如,執(zhí)行定制邏輯功能的基于檢查表的邏輯)。合成器服務(wù)器還去除多余的邏輯和未使用的邏輯。輸出文件實質(zhì)上合成或優(yōu)化了用戶電路設(shè)計所需的邏輯。當(dāng)一些或所有的HDL處于RTL級時,電路設(shè)計部件處于足夠高的級別,使得模擬仿真系統(tǒng)可以輕易的利用模擬仿真寄存器或部件將這些部件模型化。當(dāng)一些或所有的HDL處于門級連線表層次時,電路設(shè)計部件可能為更加電路設(shè)計專業(yè)化,使用戶電路設(shè)計部件到模擬部件的映射更加困難。因此,合成器服務(wù)器有能力生成任何基于標(biāo)準(zhǔn)邏輯元件變體或與這些變體無任何類似的隨機邏輯元件或程序庫標(biāo)準(zhǔn)邏輯元件的邏輯元件。如果電路設(shè)計為門級連線表的形式,模擬仿真系統(tǒng)將首先執(zhí)行分組或分類操作351。硬件模型結(jié)構(gòu)基于分類過程,因為組合邏輯和寄存器是與時鐘分離的。因此,共享一個公共主時鐘或門控時鐘信號的邏輯元件通過將它們集合在一起并共同安置在一個芯片上,可以被更好的服務(wù)。分類算法基于連通性驅(qū)動,分級析取,以及規(guī)則結(jié)構(gòu)析取。如果描述是在結(jié)構(gòu)化的RTL358中,那么模擬仿真系統(tǒng)可以將功能分解成更小的單元,如邏輯功能分解操作359所表示的一樣。在任何階段,如果需要邏輯合成或邏輯優(yōu)化,則可用合成器服務(wù)器360根據(jù)用戶的指令將電路設(shè)計轉(zhuǎn)變?yōu)楦行У谋硎尽τ诜诸惒僮?51,由虛線箭頭364表示其與合成器服務(wù)器的連接。對于結(jié)構(gòu)化RTL358,由箭頭365表示其與合成器服務(wù)器360的連接。對于邏輯功能分解操作359,由箭頭366表示其與合成器服務(wù)器360的連接。分群操作351基于功能和尺寸以選擇性的方式將邏輯部件組成在一起。操作可能僅涉及一小型電路設(shè)計的一個群集或一大型電路設(shè)計的多個群集。無論如何,這些邏輯元件的群集將在后面步驟中使用以將其映射到指定的FPGA芯片中;也就是說,一個群集將指向一個特定的芯片,而另一個群集指向一個不同的芯片或可能與第一個群集指向相同的芯片。一個群集中的邏輯元件通常一起安置于一個芯片中,但是為了最優(yōu)化目的,也可能不得不將一個群集分解到多個芯片中。在分群操作351中形成群集后,系統(tǒng)執(zhí)行布局及布線操作。首先,執(zhí)行將群集安置入FPGA芯片的粗粒布局操作352。粗粒布局操作352首先將邏輯元件的群集安置于所選的FPGA芯片中。如果需要,系統(tǒng)可將合成器服務(wù)器360提供給粗粒布局操作352使用,如箭頭367所示。在粗粒布局操作后執(zhí)行細粒布局操作以細微調(diào)整初始的布局。模擬仿真系統(tǒng)使用基于引腳使用率要求,門電路使用率要求和門到門跳躍的費用函數(shù)確定粗粒和細粒布局操作的最佳布局。群集怎樣布局在特定芯片中是基于布局成本確定的,布局成本通過兩個或多個電路(即,CKTQ=CKT1,CKT2,.....,CKTN)的費用函數(shù)f(P,G,D)和電路在FPGA芯片陣列中的相應(yīng)位置計算而成,其中P一般指引腳使用/可用性,G一般指門電路使用/可用性,D為連通度矩陣M定義的門到門跳躍的距離或數(shù)量(如圖7和圖8所示)。模型化在硬件模型中的用戶電路設(shè)計包含電路CKTQ的總的組合。定義每個費用函數(shù),使得計算出的布局成本的計算值總體上有助于(1)在FPGA陣列中,實現(xiàn)任何兩個電路CKTN-1和CKTN之間“跳躍”的最小數(shù)量,以及(2)FPGA陣列中電路CKTN-1和CKTN的布局,以獲得最低的引腳使用率。在一個實施例中,費用函數(shù)F(P,G,D)被定義為此方程可簡化為下列形式f(P,G,D)=C0*P+C1*G+C2*D第一項(即,C0*P)基于所使用引腳的數(shù)量和可用的引腳數(shù)量生成第一布局成本值。第二項(即,C1*G)基于所使用門電路的數(shù)量和可用的門電路數(shù)量生成第二布局成本值。第三項(即,C2*D)基于在電路CKTQ(即CKT1,CKT2,.....,CKTN)中不同互連門電路間存在的跳躍的數(shù)量生成一布局成本值。通過迭代地累加這三個布局成本值產(chǎn)生總的布局成本值。常數(shù)C0,C1和C2代表加權(quán)常數(shù),通過這三個加權(quán)常數(shù),可以選擇性地使從該費用函數(shù)得出的總的布局成本值,偏向在任何累加的布局成本計算過程中最為重要的一個因素或多個因素(即,引腳使用、門電路使用或門到門跳躍)。隨著系統(tǒng)為加權(quán)常數(shù)C0,C1和C2選擇不同的相關(guān)值,重復(fù)計算布局成本。因此,在一個實施例中,在粗粒布局操作過程中,系統(tǒng)相對于C2為C0和C1選擇較大值。在此重復(fù)過程中,系統(tǒng)確定在FPGA芯片陣列中電路CKTQ的初始布局中,最優(yōu)化引腳使用/可用性和門電路使用/可用性比最優(yōu)化門到門跳躍更重要。在隨后的重復(fù)過程中,系統(tǒng)相對于C2為C0和C1選擇較小值。在此重復(fù)過程中,系統(tǒng)確定最優(yōu)化門到門跳躍比最優(yōu)化引腳使用/可用性和門電路使用/可用性更重要。在細粒布局操作過程中,系統(tǒng)使用相同的費用函數(shù)。在一個實施例中,關(guān)于選擇C0,C1和C2的反復(fù)步驟與粗粒布局操作中的步驟是相同的。在另一個實施例中,細粒布局操作涉及讓系統(tǒng)相對于C2為C0和C1選擇較小值。現(xiàn)在將解釋這些變量和方程。為確定是否在FPGA芯片x或FPGA芯片y(在其他FPGA芯片中)中布置特定電路CKTQ,費用函數(shù)將檢查引腳使用/可用性(P),門電路使用/可用性(G),和門到門跳躍(D)?;谫M用函數(shù)變量P,G和D,費用函數(shù)f(P,G,D)生成在FPGA陣列的特定位置布置特定電路CKTQ的布局成本值。引腳使用/可用性P還表示輸入/輸出容量。Pused為每個FPGA芯片的電路CKTQ所使用的引腳數(shù)量。Pavailable為在FPGA芯片中可用的引腳數(shù)量。在一個實施例中,Pavailable為264(44個引腳×6個互連/芯片),而在另一個實施例中,Pavailable為265(44個引腳×6個互連/芯片+1個附加引腳)。但是,可用引腳的特定數(shù)量取決于所使用的FPGA芯片的類型,每芯片所使用互連的總數(shù)量,以及每個互連所使用的引腳數(shù)量。因此,Pavailable可以有很大變化。所以,為估算費用函數(shù)F(P,G,D)方程的第一項(即,C0*P),要計算每個FPGA芯片的Pused/Pavailable的比率。這樣,對于一個4×4FPGA芯片陣列,要計算16個Pused/Pavailable比率。對于一給定的可用引腳數(shù)量來說,所使用的引腳數(shù)量越多,比率就越高。在計算出的16個比率中,選擇最高的比率值。通過將所選最大比率Pused/Pavailable與加權(quán)常數(shù)C0相乘,從第一項C0*P中計算出第一布局成本值。因為此第一項依賴于計算出的比率Pused/Pavailable和為每個FPGA芯片計算出的比率中的特定最大比率,所以在其他因素相同的情況下,引腳使用率越高,布局成本值也越高。系統(tǒng)選擇布局成本最低的布局。通常認為,所有其他因素都相同的情況下,達到在所有為不同布局計算的最大值中最小的一個最大比率Pused/Pavailable的特定布局為FPGA陣列中的最佳布局。門電路使用/可用性G基于每個FPGA芯片所容許的門電路數(shù)量。在一個實施例中,基于陣列中電路CKTQ的位置,如果在每個芯片中所使用的門電路數(shù)量Gused高于一個固定閾值,那么此第二布局成本(C1*G)將被賦予一個值,表明布局不可行。類似的,如果在每個包含電路CKTQ的芯片中所使用的門電路數(shù)量等于或低于固定閾值,那么此第二項(C1*G)將被賦予一個值,表明布局可行。因此,如果系統(tǒng)開始時期望在一特定芯片中布置電路CKT1,并且此芯片不具有足夠多的門電路以容納電路CKT1,那么系統(tǒng)將通過費用函數(shù)得出此特定布局不可行的結(jié)論。通常,G具有很高的數(shù)字(如,無限)保證了費用函數(shù)將產(chǎn)生高的布局成本值,表明所期望的電路CKTQ的布局不可行,并且應(yīng)該確定替代的布局。在另一個實施例中,基于陣列中電路CKTQ的位置,計算每個芯片的比率Gused/Gavailable,其中Gused為每個FPGA芯片中電路CKTQ所使用的門電路數(shù)量,Gavailable為在FPGA芯片中可用的門電路數(shù)量。在一個實施例中,系統(tǒng)將FLEX10K100芯片用于FPGA陣列。FLEX10K100芯片包含大約100,000個門電路。因此,在該實施例中,Gavailable等于100,000個門電路。這樣,對于一個4×4FPGA芯片陣列,要計算16個Gused/Gavailable比率。對于一給定的可用門電路數(shù)量來說,所使用的門電路數(shù)量越多,比率就越高。在計算出的16個比率中,選擇最高的比率值。通過將所選最大比率Gused/Gavailable與加權(quán)常數(shù)C1相乘,從第二項C1*G中計算出第二布局成本值。因為此第二項依賴于計算出的比率Gused/Gavailable和為每個FPGA芯片計算出的比率中的特定最大比率,所以在其他因素相同的情況下,門電路使用率越高,布局成本值也越高。系統(tǒng)選擇布局成本最低的布局。通常認為,在所有其他因素都相同的情況下,達到在所有為不同布局計算的最大值中最小的一個最大比率Gused/Gavailable的特定布局為FPGA陣列中的最佳布局。在另一個實施例中,系統(tǒng)首先為C1選擇一些值。如果比率Gused/Gavailable大于“1”,則此特定布局不可行(即,至少一個芯片不具有足夠多的門電路用于此特定電路布局)。從而,系統(tǒng)將C1修改成非常大的數(shù)字(如,無限)并因此,第二項C1*G也將為非常大的數(shù)字,總的布局成本值f(P,G,D)也將很高。另一方面,如果比率Gused/Gavailable小于或等于“1”,那么此特定布局可行(即,每個芯片具有足夠多的門電路以支持電路的實現(xiàn))。從而,系統(tǒng)不修改C1并因此,第二項C1*G將具有一個特定值。第三項C2*D代表需要互連的所有門電路之間的跳躍的數(shù)量。跳躍的數(shù)量也取決于互連矩陣。連通度矩陣提供了確定需要芯片-到-芯片互連的任何兩個門電路之間電路通道的基礎(chǔ)。并非每個門電路都需要門-到-門的互連?;谟脩舻脑茧娐吩O(shè)計和將群集劃分到特定芯片,一些門電路不需要任何互連,因為與其各自輸入(多個輸入)和輸出(多個輸出)相連的邏輯元件(多個邏輯元件)位于相同芯片中。但是其他的門電路則需要互連,因為與其各自輸入(多個輸入)和輸出(多個輸出)相連的邏輯元件(多個邏輯元件)位于不同的芯片中。為了理解“跳躍”,請參看圖7中表格形式和圖8中圖像形式的連通度矩陣。在圖8中,芯片間的每個互連,例如芯片F(xiàn)11和芯片F(xiàn)14間的互連602,代表44個引腳或44條導(dǎo)線線路。在其他實施例中,每個互連代表超過44個的引腳。再在其他實施例中,每個互連代表少于44個的引腳。利用此互連方案,數(shù)據(jù)可以在兩次“跳躍”或“跳轉(zhuǎn)”中從一個芯片傳到另一個芯片。因此,數(shù)據(jù)可以利用一次跳躍通過互連601從芯片F(xiàn)11傳到芯片F(xiàn)12,數(shù)據(jù)可以利用兩次跳躍通過互連600和606或互連603和610從芯片F(xiàn)11傳到芯片F(xiàn)33。這些跳躍的示例為這些芯片組之間最短的跳躍路徑。在一些情況下,信號的路徑將穿過多個芯片,使得在一個芯片中的門電路和另一個芯片中的門電路之間跳躍的數(shù)量超過了最短跳躍路徑。只有需要互連的電路通道必須被檢測以確定門-到-門跳躍的數(shù)量。連通度由所有需要芯片間互連的門電路間跳躍的總和表示。使用圖7和圖8的連通度矩陣,任何兩芯片間的最短路徑可以由一次或兩次“跳躍”代表。但是,對于特定硬件模型實現(xiàn)來說,輸入/輸出容量可能限制了陣列中任何兩門電路之間最短路徑直接連接的數(shù)量,并且因此,這些信號將經(jīng)過更長的路徑(因此多于兩次跳躍)以到達目的地。從而,對于一些門-到-門連接,跳躍的數(shù)量可能超過兩次。通常,在其他條件相等的情況下,越少的跳躍次數(shù)將產(chǎn)生越低的布局成本。第三項(即,C2*D)的詳細形式如下此第三項為加權(quán)常數(shù)C2和總和部分(S...)的乘積??偤筒糠謱嵸|(zhì)上為需要芯片到芯片互連的用戶電路設(shè)計中每個門電路i和門電路j之間所有跳躍的總和。如上所述,并非所有的門電路都需要芯片間互連。對于那些需要芯片間互連的門電路i和門電路j來說,跳躍的次數(shù)已經(jīng)確定。對于所有的門電路i和門電路j來說,將總的跳躍次數(shù)相加。距離計算也可定義如下在此,M為連通度矩陣。連通度矩陣的一個實施例如圖7所示。計算每個需要互連的門到門連接的距離。因此,對于每個門電路i和門電路j的關(guān)系,檢驗連通度矩陣M。更明確表示為,建立包含陣列中所有芯片的矩陣,使得每個芯片具有可識別的編號。這些識別編號設(shè)置在矩陣的頂部作為列標(biāo)題。同樣的,將這些識別編號設(shè)置在矩陣的一側(cè)作為行標(biāo)題。在此矩陣中行和列相交的地方的特定表列值提供了行編號和列編號相交的兩芯片之間的直接連通數(shù)據(jù)。對于芯片i和芯片j之間任何的距離計算,矩陣Mi,j中的表列值包括“1”(直接連接)或“0”(非直接連接)。指數(shù)k指的是連接需要互連的芯片i中任何門電路和芯片j中任何門電路所需的跳躍次數(shù)。首先,應(yīng)測試k=1的連通度矩陣Mi,j。如果表列值為“1”,則此芯片i中的門電路和芯片j中所選門電路之間存在直接連接。因此,指定指數(shù)或跳躍k=1作為Mi,j的結(jié)果并且此結(jié)果為兩個門電路之間的距離。在此時,可以測試其他的門-到-門連接。但是,如果表列值為“0”,則不存在直接連接。如果不存在直接連接,則應(yīng)測試下一個k。這個新的k(即,k=2)可以通過將矩陣Mi,j與其自身相乘而計算出;換句話說,M2=M*M,其中k=2。此將M與其自身相乘直到芯片i和芯片j的特定行和列的表列值的過程將繼續(xù),直到計算出的結(jié)果為“1”,此時選擇指數(shù)k作為跳躍的次數(shù)。操作包括對矩陣M進行“與”操作,并接著對“與”操作的結(jié)果進行“或”運算。如果矩陣mi,l和ml,j之間“與”操作的結(jié)果為邏輯值“1”,那么在芯片i中所選門電路和芯片j中所選門電路之間存在連接,此連接通過任何芯片l并在k次跳躍之內(nèi);如果不是,則在此特定的k次跳躍之內(nèi)不存在連接并且需要進一步的計算。矩陣mi,l和ml,j為被定義用于硬件模型化的連通度矩陣M。對于任何需要互連的給定門電路i和門電路j來說,包含用于矩陣mi,l中門電路i的FPGA芯片的行和包含用于門電路j和ml,j的FPGA芯片的列進行邏輯“與”操作。對單獨的“與”后地分量進行“或”操作以確定對于指數(shù)或跳躍k的結(jié)果Mi,j值是“1”還是“0”。如果結(jié)果是“1”,則存在連接并且指定指數(shù)k為跳躍的次數(shù)。如果結(jié)果是“0”,則不存在連接。下面的例子表明了這些原則。參見圖35(A)到35(D)。圖35(A)顯示了由云狀物1090表示的用戶的電路設(shè)計。此電路設(shè)計1090可以簡單或復(fù)雜。電路設(shè)計109的一部分包括“或”門1091和兩個“與”門1092和1093?!芭c”門1092和1093的輸出與“或”門1091的輸入連接。這些門電路1091,1092和1093也可以與電路設(shè)計1090的其他部分連接。參見圖35(B),電路1090的部件,包括包含三個門電路1091,1092和1093的部分,被設(shè)置并布局在FPGA芯片1094,1095和1096上。此FPGA芯片陣列的具體示范例具有所示的互連方案;即,一組互連1097連接芯片1094和芯片1095,另一組互連1098連接芯片1095和芯片1096。在芯片1094和芯片1096之間沒有直接的互連。當(dāng)將此電路設(shè)計1090的部件安置在芯片中時,系統(tǒng)使用預(yù)設(shè)計的互連方案在不同的芯片之間連接電路通道。參見圖35(C),一個可能的結(jié)構(gòu)和布局是將“或”門1091安置在芯片1094上,將“與”門1092安置在芯片1095上,并將“與”門1093安置在芯片1096上。未顯示電路1090的其他部分作為示范?!盎颉遍T1091和“與”門1092之間的連接需要一個互連,因為它們位于不同的芯片中,于是使用了一組互連1097。此互連的跳躍次數(shù)為“1”?!盎颉遍T1091和“與”門1093之間的連接也需要一個互連,于是使用了互連組1097和1098。跳躍次數(shù)為“2”。對于此布局示例,不考慮未圖示的電路1090剩下部分的其他門電路和互連的作用,跳躍總次數(shù)為“3”。圖35(D)顯示了另一個布局示例。在此,“或”門1091安置于芯片1094上,“與”門1092和1093安置于芯片1095上。也未顯示電路1090的其他部分作為示范?!盎颉遍T1091和“與”門1092之間的連接需要一個互連,因為它們位于不同的芯片中,于是使用了一組互連1097。此互連的跳躍次數(shù)為“1”?!盎颉遍T1091和“與”門1093之間的連接也需要一個互連,于是使用了互連組1097。跳躍次數(shù)也為“1”。對于此布局示例,不考慮未圖示的電路1090剩下部分的其他門電路和互連的作用,跳躍總次數(shù)為“2”。于是,僅基于距離參數(shù)D并假設(shè)任何其他因素都相等,所計算出的圖35(D)布局示例的費用函數(shù)要低于圖35(C)布局示例的費用函數(shù)。但是,其他的因素并不都相等。很可能,圖35(D)的費用函數(shù)還基于門電路使用/可用性G。在圖35(D)中,芯片1095中比圖35(C)中的相同芯片多使用了一個門電路。此外,在圖35(C)的布局示例中的芯片1095的引腳使用/可用性P要大于圖35(D)的另一布局示例中的相同芯片的引腳使用/可用性。在粗粒布局之后,對于展平的群集布局的細微調(diào)整將進一步優(yōu)化布局結(jié)果。此細粒布局操作353改進了由粗粒布局操作352開始時選擇的布局。在此,如果能達到更優(yōu)化的效果,可能將初始的群集分離。例如,假設(shè)邏輯元件X和Y原來是群集A的一部分并分配到FPGA芯片1。由于細粒布局操作353,現(xiàn)在邏輯元件X和Y可能被指定為獨立的群集B或成為另一個群集C的一部分并布局在FPGA芯片2中。接著將生成聯(lián)系用戶電路設(shè)計和指定FPGA的FPGA連線表354。怎樣分離群集并將其布局在特定芯片中也是基于布局成本而確定,布局成本則通過電路CKTQ的費用函數(shù)f(P,G,D)計算。在一個實施例中,細粒布局過程所使用的費用函數(shù)與粗粒布局過程所使用的費用函數(shù)是相同的。兩個布局過程之間僅有的差異在于它們布局的群集的大小,而不是過程本身。粗粒布局過程與細粒布局過程相比使用更大的群集。在另一個實施例中,粗粒和細粒布局過程所使用的費用函數(shù)是不同的,如上文介紹加權(quán)常數(shù)C0,C1和C2的選擇時所述的一樣。一旦布局完成,就執(zhí)行芯片間的布線任務(wù)355。如果連接位于不同芯片中電路的布線線路數(shù)量超過了這些FPGA芯片中分配給電路到電路布線的可用引腳數(shù)量,則可以使用時分多路轉(zhuǎn)換(TDM)電路。例如,如果每個FPGA芯片僅允許44個引腳用于連接兩個不同F(xiàn)PGA芯片中的電路,并且一個特殊的模型實現(xiàn)需要在芯片間具有45根導(dǎo)線,那么將在每個芯片中安置專門的時分多路轉(zhuǎn)換電路。此專門的TDM電路至少連接兩根導(dǎo)線。TDM電路的一個實施例顯示在圖9(A),9(B)和9(C)中,將在下文中討論。因此,由于可將引腳設(shè)置成芯片間的時分多路轉(zhuǎn)換形式,所以布線任務(wù)總可以完成。一旦確定了每個FPGA的布局和布線,則可將每個FPGA配置成最佳的工作電路并且系統(tǒng)因而生成“位流”配置文件356。根據(jù)Altera的術(shù)語,系統(tǒng)生成一個或多個ProgrammerObjectFiles(可編程目的文件)(.pof)。其他生成的文件包括SRAMObjectFiles(SRAM目的文件)(.sof),JEDECFiles(JEDEC文件)(.jed),Hexadecimal(Intel格式)Files(十六進制文件)(.hex),以及TabularTextFiles(表格文本文件)(.ttf)。Altera的MAX+PLUSII程序器使用POFs,SOFs,和JEDEC文件,結(jié)合Altera的硬件可編程設(shè)備為FPGA陣列編程?;蛘?,系統(tǒng)生成一個或多個原二進制文件(.rbf)。CPU修正.rbf文件并通過PCI總線為FPGA陣列編程。此時,所配置的硬件為硬件啟動370做好了準(zhǔn)備。這樣在可重新配置的板上完成了硬件模型的自動結(jié)構(gòu)?;氐絋DM電路,TDM電路允許多組引腳輸出被一起進行時分多路轉(zhuǎn)換,這樣實際上僅使用一個引腳輸出,TDM電路實質(zhì)上是一個多路復(fù)用器,其具有至少兩個輸入(用于兩根導(dǎo)線),一個輸出,以及配置成回路作為選擇器信號的一對寄存器。如果模擬系統(tǒng)需要更多的導(dǎo)線成組連接,那么將可以提供更多的輸入和回路寄存器。作為此TDM電路的選擇器信號,幾個配置成回路的寄存器向多路復(fù)用器提供了適當(dāng)?shù)男盘?,使得在一段時期,一個輸入被選擇作為輸出,而在另一段時期,另一個輸入被選擇作為輸出。因此,舉例而言,TDM電路設(shè)法在芯片間僅使用一根輸出線路,使得在特定芯片中電路硬件模型的實現(xiàn)可以使用44個引腳,而不是45個完成。這樣,由于可將引腳設(shè)置成芯片間的時分多路轉(zhuǎn)換形式,所以布線任務(wù)總可以完成。圖9(A)顯示了輸出接腳問題的概觀。由于需要TDM電路,圖9(B)提供了傳輸端的TDM電路,圖9(C)提供了接收端的TDM電路。這些圖僅顯示了一個具體示例,其中模擬仿真系統(tǒng)需要在芯片間具有一個導(dǎo)線,而不是兩根。如果必須在時分多路轉(zhuǎn)換裝置中連接超過兩根導(dǎo)線,則所屬
      技術(shù)領(lǐng)域
      的技術(shù)人員可根據(jù)下面的內(nèi)容進行適當(dāng)?shù)母倪M。圖9(A)顯示了TDM電路的一個實施例,其中模擬仿真系統(tǒng)在TDM結(jié)構(gòu)中連接兩根導(dǎo)線。其中具有兩個芯片,990和991。作為完整的用戶電路設(shè)計的一部分的電路960被模擬并布局在芯片991中。作為完整的用戶電路設(shè)計的一部分的電路973被模擬并布局在芯片990中。在電路960和電路973之間具有多個互連,包括互連組994,互連992和互連993。在此例中,互連的總數(shù)為45個。如果,在一個實施例中,每個芯片至多僅提供44個引腳用于這些互連,則本發(fā)明的一個實施例提供至少兩個待被時分多路轉(zhuǎn)換的互連,以在芯片990和991之間只需要一個互連。在此例中,互連組994將繼續(xù)使用43個引腳。對于第44個,也是最后一個引腳,可以使用根據(jù)本發(fā)明一實施例的TDM電路按時分多路轉(zhuǎn)換的形式連接互連992和互連993。圖9(B)顯示了TDM電路的一個實施例。FPGA芯片991中的模型電路(或其一部分)960在導(dǎo)線966和967上提供了兩個信號。對于電路960,導(dǎo)線966和967為輸出。這些輸出一般與芯片990中的模型電路973連接(見圖9(A)和9(C))。但是,僅為這兩個輸出導(dǎo)線966和967提供一個引腳阻礙了引腳對引腳的直接聯(lián)系。因為輸出966和967對其他芯片采用單向傳輸,所以必須提供適當(dāng)?shù)膫鬏敽徒邮掌鱐DM電路以連接這些線路。圖9(B)顯示了傳輸端TDM電路的一個實施例。傳輸端TDM電路包括“與”門961和962,它們各自的輸出與“或”門963的輸入相連。“或”門963的輸出972是分配給一個引腳并與另一芯片990相連的芯片的輸出。由電路模型960提供分別對“與”門961和962的一組輸入966和967。另一組輸入968和969由作為時分多路轉(zhuǎn)換選擇器信號的回路寄存器電路提供?;芈芳拇嫫麟娐钒拇嫫?64和965。寄存器964的輸出995被提供給寄存器965的輸入和“與”門961的輸入968。寄存器965的輸出996與寄存器964的輸入和“與”門962的輸入969連接。寄存器964和965由一個公共時鐘脈沖源控制。在任何給定的時間瞬間,輸出995或996中僅有一個為邏輯“1”。另一個為邏輯“0”。因此,在每個時鐘邊沿之后,邏輯“1”在輸出995和輸出996之間變換。反過來說,這不是向“與”門961就是向“與”門962提供了一個邏輯“1”,以“選擇”導(dǎo)線966或?qū)Ь€967上的信號。因此,導(dǎo)線972上的數(shù)據(jù)通過導(dǎo)線966或?qū)Ь€967來自電路960。圖9(C)顯示了TDM電路接收器端部分的一個實施例。來自導(dǎo)線966和導(dǎo)線967上的芯片991中電路960(圖9(A)和9(B))的信號必須與適當(dāng)?shù)膶?dǎo)線985或986相連以到達圖9(C)中的電路973。來自芯片991的時分多路轉(zhuǎn)換信號從導(dǎo)線/引腳978進入。接收器端TDM電路可以將導(dǎo)線/引腳978上的這些信號與適當(dāng)?shù)膶?dǎo)線985或986相連以到達電路973。TDM電路包括輸入寄存器974和975。導(dǎo)線/引腳978上的信號分別通過導(dǎo)線979或980提供給這些輸入寄存器974和975。輸入寄存器974的輸出985被提供給電路973中適當(dāng)?shù)亩丝?。同樣的,輸入寄存?75的輸出986被提供給電路973中適當(dāng)?shù)亩丝?。這些輸入寄存器974和975由回路寄存器976和977控制。寄存器976的輸出984與寄存器977的輸入和寄存器974的時鐘輸入981相連。寄存器977的輸出983與寄存器976的輸入和寄存器975的時鐘輸入982相連。寄存器976和977由一個公共時鐘脈沖源控制。在任何給定的時間瞬間,啟動輸入981或982中僅有一個為邏輯“1”。另一個為邏輯“0”。因此,在每個時鐘邊沿之后,邏輯“1”在啟動輸入981和輸出982之間變換。反過來說,這“選擇”了導(dǎo)線979或?qū)Ь€980上的信號。因此,導(dǎo)線978上來自電路960的數(shù)據(jù)通過導(dǎo)線985或?qū)Ь€986與電路973正確連接?,F(xiàn)在將詳細討論結(jié)合圖4簡單介紹的根據(jù)本發(fā)明一實施例的地址指示器。再次重申,在硬件模型中的每個FPGA芯片中安置有多個地址指示器。通常,安置地址指示器的主要目的是使系統(tǒng)可以通過32位PCI總線328在軟件模型315和硬件模型325中的特定FPGA芯片之間傳送數(shù)據(jù)(參見圖10)。更明確的說,地址指示器的主要目的是根據(jù)該32位PCI總線的帶寬限制選擇性的控制在軟件/硬件邊界中的每個地址空間(即,REG,S2H,H2S,和CLK)和FPGA芯片組326a-326d中的每個FPGA芯片之間的數(shù)據(jù)傳送。即使安裝了64位PCI總線,仍需要這些地址指示器來控制數(shù)據(jù)傳送。因此,如果軟件模型具有5個地址空間(即,REG讀,REG寫,S2H讀,H2S寫,和CLK寫),則每個FPGA芯片對應(yīng)于這5個地址空間具有5個地址指示器。每個FPGA都需要這5個地址指示器,因為在正被處理的所選地址空間中特定所選字可能位于任何一個或多個FPGA芯片中。FPGA輸入/輸出控制器381通過使用SPACE指數(shù)選擇對應(yīng)于軟件/硬件邊界特定地址空間(即,REG,S2H,H2S,和CLK)。一旦選擇了地址空間,每個FPGA芯片中對應(yīng)于所選地址空間的特定地址指示器則選擇對應(yīng)于所選地址空間中相同的字的特定字。軟件/硬件邊界中的地址空間和每個FPGA芯片中的地址指示器的最大尺寸取決于所選FPGA芯片的存儲容量/字長。例如,本發(fā)明的一個實施例使用AlteraFLEX10K系列FPGA芯片。因此,每個地址空間的預(yù)計最大尺寸為REG,3,000個字;CLK,1個字;S2H,10個字;H2S,10個字。每個FPGA芯片大約可以容納100個字。模擬仿真器系統(tǒng)還具有允許用戶在模擬仿真過程中的任何時間開始,停止,斷言輸入值,以及檢查值的特點。為了使模擬器具有靈活性,模擬仿真器還必須使所有部件對用戶可見,無論部件是在軟件還是硬件中完成內(nèi)部實現(xiàn)。在軟件中,在模擬過程中模型化組合部件并計算值。因此,這些值對于用戶來說清晰“可見”,可在模擬過程中的任何時間進行存取。但是,硬件模型中的組合部件值并不像這樣直接“可見”。盡管寄存器可以很容易被軟件內(nèi)核直接訪問(即,讀/寫),但組合部件卻更難確定。在FPGA中,大多數(shù)組合部件被模型成查找表以獲得高的門電路利用率。從而,查找表映射提供了有效的硬件模型,但損失了大多數(shù)組合邏輯信號的可見性。盡管具有組合部件缺乏可見性的問題,但模擬仿真系統(tǒng)可以在硬件加速模式之后重新建立或生成組合部件以供用戶檢查。如果用戶的電路設(shè)計僅具有組合和寄存器部件,則可以從寄存器部件中獲得所有組合部件的值。也就是說,根據(jù)電路設(shè)計所需的特定邏輯功能,組合部件以不同形式由寄存器構(gòu)造或包含寄存器。模擬仿真器僅具有寄存器和組合部件的硬件模型,并且因此,模擬仿真器將從硬件模型中讀出所有的寄存器值,然后重新建立或生成所有的組合部件。因為執(zhí)行此重新生成過程需要額外開支,所以并不總是執(zhí)行組合部件的重新生成;而是基于用戶的需要執(zhí)行。事實上,使用硬件模型的一個好處是可以加速模擬過程。在每個循環(huán)(或大部分循環(huán))確定組合部件值進一步降低了模擬的速度。在任何情況下,僅寄存器值的檢查就可以滿足大多數(shù)模擬分析的要求。從寄存器值重新生成組合部件值的過程假設(shè)模擬仿真系統(tǒng)處于硬件加速模式或ICE模式。否則,軟件模擬已經(jīng)將組合部件值提供給了用戶。模擬仿真系統(tǒng)在硬件加速開始之前保持駐留在軟件模型中的組合部件值以及寄存器值。這些值保留在軟件模型中直到被系統(tǒng)再次重寫。因為軟件模型從正好在硬件加速運行開始之前的時期已經(jīng)擁有了寄存器值和組合部件值,所以重新生成組合部件的過程涉及根據(jù)更新的輸入寄存器值更新這些值中的一些或全部。組合部件的重新生成過程如下首先,如果用戶需要,軟件內(nèi)核可將硬件寄存器部件的所有輸出值從FPGA芯片讀到REG緩沖器中。此過程涉及FPGA芯片中寄存器值通過地址指示器到REG地址空間的鏈接的DMA(直接存儲器存取)轉(zhuǎn)換。將硬件模型中的寄存器值安置于位于軟件/硬件邊界的REG緩沖器中,允許軟件模型訪問數(shù)據(jù)用于進一步處理。第二,軟件內(nèi)核比較硬件加速運行之前和硬件加速運行之后的寄存器值。如果硬件加速運行之前的寄存器值與硬件加速運行之后的值相同,則組合部件中的值沒有變化??蓮能浖P椭凶x出這些值,而不是耗費時間和資源重新生成組合部件,軟件模型已經(jīng)具有正好在硬件加速運行之前儲存于其中的組合部件值。另一方面,如果這些寄存器值的一個或多個已改變,依賴于改變的寄存器值的一個或多個組合部件值也將改變。必須通過下面的第三步驟重新生成這些組合部件。第三,對于加速之前和加速之后寄存器具有不同值,軟件內(nèi)核將其扇出的組合部件安排到事件隊列中。在此,那些在加速運行過程中改變了值的寄存器檢測到一個事件。很可能,依賴于這些改變的寄存器值的組合部件將產(chǎn)生不同的值。無論這些組合部件值如何變化,系統(tǒng)確保這些組合部件在下一個步驟中估算這些改變的寄存器值。第四,軟件內(nèi)核接著執(zhí)行標(biāo)準(zhǔn)事件模擬算法,以將值變化從寄存器傳送到軟件模型中的所有組合部件。換句話說,在加速之前到加速之后的時間間隔中變化的寄存器值被傳送到所有依賴于這些寄存器值的下游組合部件中。接著,這些組合部件估算新的寄存器值。根據(jù)扇出和傳送原則,安置于依次直接依賴變化的寄存器值的一級組合部件下游的其他二級組合部件也必須估算變化的數(shù)據(jù),如果有的話。此將寄存器值傳送到其他可能受影響的下游部件的過程延續(xù)到扇出網(wǎng)絡(luò)的末端。因此,僅更新了軟件模型中位于下游并受變化的寄存器值影響的組合部件。并非所有的組合部件值都受影響。因此,如果在加速之前到加速之后的時間間隔中僅有一個寄存器值發(fā)生改變,并且僅有一個組合部件受此寄存器值改變的影響,那么僅僅這個組合部件將根據(jù)此改變的寄存器值重新估算它的值。模型電路的其他部分不受影響。對于這個小的變化,組合部件的重新生成過程將進行的相對較快。最后,當(dāng)事件傳送完成后,系統(tǒng)準(zhǔn)備好了進行任何模式的操作。通常,用戶期望在長期運行之后檢查值。在組合部件的重新生成過程之后,用戶將繼續(xù)進行純軟件模擬,以供調(diào)試/測試。但是,在其他時間,用戶可能希望繼續(xù)進行硬件加速以到達下一個目標(biāo)點。在其他情況下,用戶可能希望在ICE模式下繼續(xù)執(zhí)行過程??偠灾?,組合部件的重新生成涉及使用寄存器值去更新軟件模型中的組合部件值。當(dāng)任何寄存器值發(fā)生改變時,當(dāng)值被更新時改變的寄存器值將通過該寄存器的扇出網(wǎng)絡(luò)被傳送。當(dāng)沒有寄存器值發(fā)生改變時,軟件模型中的值也不會改變,于是系統(tǒng)不需重新生成組合部件。通常,硬件加速運行將持續(xù)一段時間。從而,許多寄存器值將改變,并影響位于這些值發(fā)生改變的寄存器的扇出網(wǎng)絡(luò)下游的很多組合部件值。在此情況下,組合部件的重新生成過程將相對較慢。在其他情況下,在硬件加速運行之后,只有少數(shù)寄存器值發(fā)生改變。值發(fā)生改變的寄存器的扇出網(wǎng)絡(luò)可能較小,因此,組合部件的重新生成過程將相對較快。IV.利用目標(biāo)系統(tǒng)模式仿真圖10顯示了根據(jù)本發(fā)明一個實施例的模擬仿真系統(tǒng)結(jié)構(gòu)。圖10也顯示了當(dāng)系統(tǒng)在內(nèi)電路仿真模式中操作時,軟件模型,硬件模型和仿真接口以及目標(biāo)系統(tǒng)之間的一個關(guān)系。如前所述,該模擬仿真系統(tǒng)包括一個通用微處理器和一個由諸如PCI總線的高速總線互連的可重新配置的硬件板。該模擬仿真系統(tǒng)編譯用戶的電路設(shè)計并且為硬件模型到可重新配置電路板的映射過程生成仿真硬件配置數(shù)據(jù)。然后用戶可以通過通用處理器模擬電路,硬件加速模擬程序,通過仿真接口利用目標(biāo)系統(tǒng)仿真電路設(shè)計,之后進行后模擬分析。在編譯過程中確定軟件模型315和硬件模型325。在內(nèi)電路仿真模式的系統(tǒng)中也提供仿真接口382和目標(biāo)系統(tǒng)387。在用戶的判斷下,仿真接口和目標(biāo)系統(tǒng)在開始時不需要耦聯(lián)到系統(tǒng)上。軟件模型315包括內(nèi)核316,該內(nèi)核316控制整個系統(tǒng),以及用于軟件/硬件邊界的四個地址空間-REG,S2H,H2S和CLK。模擬仿真系統(tǒng)根據(jù)不同的部件類型和控制功能將硬件模型映射到主存儲器中的4個地址空間指定REG空間317用于寄存器部件;指定CLK空間320用于軟件時鐘;指定S2H空間318用于軟件測試平臺部件到硬件模型的輸出中;指定H2S空間319用于硬件模型到軟件測試平臺部件的輸出。在系統(tǒng)的初始化時間中,將這些專用輸入/輸出緩沖空間映射到內(nèi)核的主存儲空間里。硬件模型包括FPGA芯片的幾個FPGA組326a-326d和FPGA輸入/輸出控制器327。每個組(例如,326b)至少包括一個FPGA芯片。在一個實施例中,每個組包括4個FGPA芯片。在一個4×4FPGA芯片陣列中,組326b和組326d可能是低端組,組326a和組326c可能是高端組。圖6中討論了映射,布局和從特定硬件模型化的用戶電路設(shè)計部件到特定的芯片和它們的互連的布線。軟件模型315和硬件模型325之間的互連328是一個PCI總線系統(tǒng)。硬件模型也包括FPGA輸入/輸出控制器327,該控制器327包括一個PCI接口380和一個用于在維持PCI總線通過量的同時控制PCI總線和FPGA芯片組326a-326d之間的數(shù)據(jù)通信的控制單元381。每個FPGA芯片還包括幾個地址指示器,其中每個地址指示器對應(yīng)于軟件/硬件邊界中的每個地址空間(即REG,S2H,H2S和CLK),以此耦聯(lián)每個地址空間和FPGA芯片組326a-326d中的每個FPGA芯片之間的數(shù)據(jù)。軟件模型315和硬件模型325之間的通信通過硬件模型中的一個DMA引擎或地址指示器發(fā)生?;蛘撸ㄐ乓餐ㄟ^硬件模型中的DMA引擎和地址指示器發(fā)生。內(nèi)核通過直接映射輸入/輸出控制寄存器啟動DMA傳送和估算請求。REG空間317、CLK空間320、S2H空間318和H2S空間319分別使用輸入/輸出數(shù)據(jù)路徑線路321、322、323和324用于軟件模型315和硬件模型325之間的數(shù)據(jù)傳輸。S2H和CLK空間的所有的主輸入都需要雙緩沖,因為這些空間需要幾個時鐘周期來完成更新過程。雙緩沖避免了可能會造成競態(tài)狀態(tài)的對內(nèi)部硬件模型狀態(tài)的干擾。S2H和CLK空間是從內(nèi)核到硬件模型的主輸入。如上所述,硬件模型實質(zhì)上容納用戶電路設(shè)計的所有寄存器部件和組合部件。此外,軟件時鐘在軟件中模型化并在CLK輸入/輸出地址空間里被提供給至硬件模型的接口。內(nèi)核推進模擬時間,尋找有效的測試平臺部件并且估算時鐘部件。當(dāng)內(nèi)核檢測到任何時鐘邊沿時,更新寄存器和存儲器并且通過組合部件傳送數(shù)值。這樣,如果選擇硬件加速模式,這些空間中數(shù)值的任何變化將觸發(fā)硬件模型改變邏輯狀態(tài)。對于內(nèi)電路仿真模式,仿真接口382耦聯(lián)到PCI總線328以此與硬件模型325和軟件模型315通信。在硬件加速模擬模式和內(nèi)電路仿真模式的過程中,內(nèi)核316不僅控制軟件模式而且控制硬件模式。仿真接口382也通過電纜390被耦聯(lián)到目標(biāo)系統(tǒng)387中。仿真接口382還包括接口端口385,仿真輸入/輸出控制386,目標(biāo)到硬件的輸入/輸出緩沖器(T2H)384和硬件到目標(biāo)的輸入/輸出緩沖器(H2T)383。目標(biāo)系統(tǒng)387包括一個連接器389,一個信號輸入/信號輸出接口插座388以及屬于目標(biāo)系統(tǒng)387的其他模塊或芯片。例如,目標(biāo)系統(tǒng)387可以是一個EGA視頻控制器,用戶電路設(shè)計可以是一個特別的輸入/輸出控制器電路。用于EGA視頻控制器的輸入/輸出控制器的用戶電路設(shè)計在軟件模型315中完全模型化并且在硬件模型325中部分地模型化。軟件模型315中的內(nèi)核316也控制內(nèi)電路仿真模式。對模擬時鐘的控制仍是在軟件中通過軟件時鐘、門控時鐘邏輯和門控數(shù)據(jù)邏輯進行,所以在內(nèi)電路仿真模式中不會出現(xiàn)裝配和占用時間的問題。這樣,用戶可以在內(nèi)電路模擬過程中的任何時間里開啟,停止,單步執(zhí)行,斷言數(shù)值和檢查數(shù)值。要這樣運行,要識別目標(biāo)系統(tǒng)和硬件模型之間的所有時鐘節(jié)點。禁用目標(biāo)系統(tǒng)中的時鐘發(fā)生器,斷開來自目標(biāo)系統(tǒng)的時鐘端口,或是阻止來自目標(biāo)系統(tǒng)的時鐘信號進入硬件模型。相反地,時鐘信號來自一個測試平臺程序或軟件生成時鐘的其它形式,這樣軟件內(nèi)核可以檢測到有效的時鐘邊沿以觸發(fā)數(shù)據(jù)估算。因此,在ICE模式中,模擬仿真系統(tǒng)使用軟件時鐘而不是目標(biāo)系統(tǒng)時鐘來控制硬件模型。為了在目標(biāo)系統(tǒng)的環(huán)境中模擬用戶電路設(shè)計的操作,將目標(biāo)系統(tǒng)40和模型化的電路設(shè)計之間的主輸入(信號輸入)和輸出信號(信號輸出)提供給硬件模型325以供估算。這是通過目標(biāo)到硬件緩沖器(T2H)384和硬件到目標(biāo)緩沖器(H2T)383這兩個緩沖器來實現(xiàn)的。目標(biāo)系統(tǒng)387使用T2H緩沖器384將輸入信號應(yīng)用到硬件模型325。硬件模型325使用H2T緩沖器383將輸出信號輸送到目標(biāo)系統(tǒng)387。在該內(nèi)電路仿真模式中,硬件模型通過T2H和H2T緩沖器而不是S2H和H2S緩沖器接收和發(fā)送輸入/輸出信號,因為現(xiàn)在系統(tǒng)使用目標(biāo)系統(tǒng)387而不是軟件模型315中的測試平臺程序來估算數(shù)據(jù)。因為目標(biāo)系統(tǒng)以一個實質(zhì)上高于軟件模擬速度的速度運行,所以內(nèi)電路仿真模式也將以一個較高速度運行。這些輸入和輸出信號的傳輸發(fā)生在PCI總線328中。此外,在仿真接口382和硬件模型325之間也有一條總線61。這條總線與圖1中的總線61類似。該總線61允許仿真接口382和硬件模型325通過T2H緩沖器384和H2T緩沖器383通信。通常,不將目標(biāo)系統(tǒng)387耦聯(lián)到PCI總線。但是,如果將仿真接口382合并到目標(biāo)系統(tǒng)387的設(shè)計中,這樣的一個耦聯(lián)是可行的。在該裝配中,電纜390將不存在。目標(biāo)系統(tǒng)387和硬件模型325之間的信號仍將穿過仿真接口。V.后模擬分析模式本發(fā)明的模擬仿真系統(tǒng)可以支持改值轉(zhuǎn)儲(VCD),一種廣泛用于后模擬分析的模擬器功能。本質(zhì)上,VCD提供硬件模型的所有輸入和所選寄存器輸出的歷史記錄,使得后來在后模擬分析中用戶可以檢查模擬過程的不同輸入和引起的輸出。為了支持VCD,系統(tǒng)將所有的輸入記錄到硬件模型中。對于輸出,系統(tǒng)以一個用戶定義的記錄頻率(例如,1/10,000記錄/周期)記錄硬件寄存器部件的所有值。記錄頻率決定輸出值多長時間記錄一次。對于一個1/10,000記錄/周期的記錄頻率來說,每10,000個周期記錄一次輸出值。記錄頻率越高,用于之后的后模擬分析的信息就記錄越多。記錄頻率越低,用于之后的后模擬分析的存儲的信息就越少。因為選擇的記錄頻率與模擬仿真速度有因果關(guān)系,所以用戶應(yīng)該仔細選擇記錄頻率。一個較高的記錄頻率將降低模擬仿真速度,因為在進一步模擬之前,系統(tǒng)必須耗費時間和資源通過執(zhí)行對存儲器的輸入/輸出操作來記錄輸出數(shù)據(jù)。關(guān)于后模擬分析,用戶選擇一個模擬所需的特定點。如果記錄頻率是1/500記錄/周期,寄存器值在每隔500周期的點0,500,1000,1500等等被記錄。如果用戶需要例如在點610的結(jié)果,用戶選擇已被記錄的點500,并且在時間上向前模擬直到點610。在分析階段,分析速度和模擬速度是一樣的,因為用戶一開始訪問500點的數(shù)據(jù),然后向前模擬到點610。注意在較高的記錄頻率上,為后模擬分析存儲了更多的數(shù)據(jù)。這樣,對于一個1/300記錄/周期的記錄頻率,每隔300周期在點0,300,600,900等等存儲數(shù)據(jù)。為了獲得在點610上的結(jié)果,用戶一開始選擇已被記錄的點600然后向前模擬到點610。注意當(dāng)記錄頻率是1/300而不是1/500時,在后模擬分析中系統(tǒng)可以更快地達到期望的點610。但是,情況并不總是如此。特別分析點連同記錄頻率決定可以以多快的速度到達后模擬分析點。例如,如果VCD記錄頻率是1/500而不是1/300,那么系統(tǒng)可以較快地達到點523。然后用戶可以通過用到硬件模型的輸入記錄執(zhí)行軟件模擬,以此計算所有硬件部件的改值轉(zhuǎn)儲,從而執(zhí)行模擬仿真之后的分析。用戶也可以及時選擇任何寄存器記錄點并及時地從那個記錄點向前開始改值轉(zhuǎn)儲。這種改值轉(zhuǎn)儲方法可以鏈接到任何模擬波形觀測儀用于后模擬分析。VCD隨選系統(tǒng)本發(fā)明的一個實施例是一個不需要重新運行模擬的VCD隨選系統(tǒng)。根據(jù)本發(fā)明的一個實施例,在此所述的VCD隨選技術(shù)包括以下高標(biāo)準(zhǔn)特性(1)基于RCC的平行模擬歷史壓縮和記錄,(2)基于RCC的平行模擬歷史解壓和VCD文件生成,以及(3)在沒有模擬再運行的情況下對一個選擇的模擬目標(biāo)范圍和設(shè)計檢查的隨選軟件再生成。每一種特性將在下文詳細討論。在一個調(diào)試進程中,EDA工具(以下指RCC系統(tǒng),它包括了本發(fā)明的不同方面)記錄來自一個測試平臺程序的主輸入這樣可以再現(xiàn)模擬的任何部分。然后用戶可以選擇地命令EDA工具或RCC系統(tǒng)將硬件狀態(tài)信息從任何模擬時間范圍轉(zhuǎn)儲到一個VCD文件用于以后的分析。此后,用戶可以在選擇的模擬時間范圍內(nèi)立即開始調(diào)試他的設(shè)計。如果選擇的模擬時間范圍不包括用戶尋求解決的故障,他可以選擇另一個模擬時間范圍轉(zhuǎn)儲到VCD文件。然后用戶可以分析這個新的VCD文件。由于VCD的這種隨選特性,用戶可以在任何點停止模擬并要求從任何所需的模擬時間起始點到任何模擬時間終點生成另一個選擇的VCD文件隨選。在一個典型的調(diào)試進程內(nèi),用戶使用如圖83所示的RCC系統(tǒng)調(diào)試他的設(shè)計。在第一次模擬運行中,用戶快速地從一個期望的開始模擬時間到任何期望的終止模擬時間模擬他的設(shè)計,這段時間在這稱作一個模擬進程范圍(simulationsessionrange)。在該快速的模擬運行中,主輸入的一個高度壓縮形式被記錄在一個“輸入歷史”文件中以此可以再現(xiàn)該模擬進程的任何部分。在模擬進程范圍的末端,RCC系統(tǒng)可以從該終點將硬件狀態(tài)信息存儲在一個“模擬歷史”文件中,使得用戶如果需要的話可以越過這個終點恢復(fù)調(diào)試設(shè)計。在快速模擬運行的末端,用戶將分析結(jié)果,并不可避免的檢測到他設(shè)計中存在的一些問題。然后用戶做出猜測,問題的根源(即故障)存在于一個特定的狹窄模擬時間范圍內(nèi),在這里稱作模擬目標(biāo)范圍,該模擬目標(biāo)范圍在更寬的模擬進程范圍內(nèi)。例如,如果模擬進程范圍包括1,000個模擬時間步驟,較窄的模擬目標(biāo)范圍可能在較寬的模擬進程范圍內(nèi)的一個特別位置僅包括100個模擬時間步驟。一旦用戶對模擬目標(biāo)范圍的精確位置作出猜測以隔離故障,RCC系統(tǒng)一開始就通過解壓輸入歷史文件中的壓縮的主輸入以及將解壓的主輸入傳送到硬件模型中用于估算,進行快速地模擬。當(dāng)RCC系統(tǒng)達到模擬目標(biāo)范圍時,它轉(zhuǎn)儲估算的結(jié)果(例如,硬件節(jié)點值和寄存器狀態(tài))到一個VCD文件。此后,用戶可以通過使用從模擬目標(biāo)范圍的起始的VCD文件重放他的設(shè)計來更仔細地分析這個區(qū)域,而不是必須從模擬進程范圍的開始或者甚至從模擬的一開始再運行模擬。將硬件狀態(tài)從模擬目標(biāo)范圍以一個VCD文件存儲起來的這個特征節(jié)省了用戶大量的調(diào)試時間,不然時間就會浪費在模擬再運行上。現(xiàn)在參照圖83,圖83描述了包含本發(fā)明的一個實施例的RCC系統(tǒng)的一個高層圖。RCC系統(tǒng)包括一個RCC計算系統(tǒng)2600和一個RCC硬件加速器2620。如本專利說明書其他地方描述的一樣,RCC計算系統(tǒng)2600包含計算資源,該計算資源對于在軟件中允許用戶模擬用戶整個軟件模型化的設(shè)計以及控制設(shè)計中硬件模型化部分的硬件加速是必需的。為此,RCC計算系統(tǒng)2600包括CPU2601,RCC系統(tǒng)的各種部件所需的各種時鐘2602(包括在本專利說明書其他地方描述的軟件時鐘),測試平臺程序2603和系統(tǒng)磁盤2604。與一些常規(guī)的以硬件為基礎(chǔ)的事件歷史緩沖器相比,系統(tǒng)磁盤用于記錄壓縮的數(shù)據(jù)而不是一個小的硬件RAM緩沖器。盡管在圖中沒有顯示,RCC計算系統(tǒng)2600包括其他邏輯部件和為電路設(shè)計者提供計算能力的總線子系統(tǒng),以此在一個計算系統(tǒng)執(zhí)行的其他任務(wù)中運行診斷程序,不同的軟件和處理文件。RCC硬件加速器2620,在本專利說明書中的其他部分也被稱作RCC陣列,其包括邏輯部件中的可重新配置的陣列(例如FPGA),該陣列可以至少在硬件中模型化用戶設(shè)計的一部分使得用戶可以加速調(diào)試過程。為此,RCC硬件加速器2620包括可重新配置的邏輯部件的陣列2621,該陣列提供用戶設(shè)計的一部分的硬件模型。RCC計算系統(tǒng)2600通過如本專利說明書中其他地方描述的軟件時鐘和一個總線系統(tǒng),其一部分如圖83中的線路2610和2611所示,與RCC硬件加速器2620緊密耦合。本發(fā)明的VCD隨選方面將參照圖84予以討論。圖84顯示了幾個模擬時間-t0,t1,t2和t3的一個時間序列。模擬進程范圍在模擬時間t0和模擬時間t3之間,其中當(dāng)然包括模擬時間t1和t2。模擬時間t0代表快速模擬開始的模擬進程范圍內(nèi)的第一模擬時間。該模擬時間t0代表任何可分離的模擬進程或模擬進程范圍的第一模擬時間。換句話說,假定今天的調(diào)試進程包括從t=10,000到t=12,000的模擬進程范圍的一個檢查。用戶猜測特定的故障位于t=10,500和t=10,750之間的某一處。對于該模擬進程范圍,模擬時間t0為t=10,000。假定為該模擬進程范圍t=10,000到t=12,000找到并解決特定的故障。明天,用戶接著移動到下一個模擬進程范圍t=12,000到t=15,000。這里,模擬時間t0為t=12,000。有時,模擬時間t0代表用戶設(shè)計的第一個調(diào)試進程的最初模擬時間,即,t0對應(yīng)于t=0。類似地,模擬時間t3代表選擇的模擬進程范圍的最后模擬時間。換句話說,假定今天的調(diào)試進程包括從t=14,555到t=16,750的模擬進程范圍的一個檢測。對于該模擬進程范圍,模擬時間t3為t=16,750。假定在模擬進程范圍t=14,555到t=16,750找到并解決特定的故障。然后用戶移到下一個模擬進程范圍t=16,750到t=19,100。這里,模擬時間t3為t=19,100。有時,模擬時間t3代表用戶設(shè)計的最后一個調(diào)試進程的最后模擬時間。如果此時不急著需要,用戶在該模擬時間t3之外可以繼續(xù)模擬,他集中在模擬時間t0到t3,即當(dāng)前的模擬進程范圍調(diào)試他的設(shè)計。通常,當(dāng)在當(dāng)前模擬進程范圍內(nèi)解決故障時,用戶將在模擬時間t3之外進入到下一個模擬進程范圍繼續(xù)模擬他的設(shè)計。在模擬進程范圍的這個抽象表示中,這些模擬時間段t0-t3不必彼此相鄰,即模擬時間t0和t1不立即相鄰。確實,模擬時間t0和t1可以相隔成千個模擬時間段。因為將在RCC系統(tǒng)中實施本發(fā)明的一個實施例,所以要參考圖83所示的RCC系統(tǒng)的各種部件。首先將討論RCC系統(tǒng)的輸入和模擬歷史生成操作。該生成操作包括主輸入的數(shù)據(jù)壓縮的一些形式和壓縮的主輸入的記錄。其次將討論RCC系統(tǒng)的VCD生成操作。該VCD生成操作包括解壓主輸入以復(fù)制模擬歷史并且將硬件狀態(tài)轉(zhuǎn)儲到一個模擬目標(biāo)范圍的VCD文件中。第三,討論VCD文件檢測程序。盡管有時使用術(shù)語“模擬歷史”,但這不意味著整個調(diào)試進程涉及軟件模擬。確實,RCC系統(tǒng)從硬件狀態(tài)中生成VCD文件并且僅為了后來的VCD文件分析使用軟件模型。輸入和模擬歷史生成---壓縮和記錄最初,用戶在圖83的RCC計算系統(tǒng)2600中的軟件中模型化設(shè)計。對于設(shè)計的一些部分,RCC計算系統(tǒng)2600基于硬件描述語言(例如,VHDL)自動地生成設(shè)計的一個硬件模型。配置硬件模型在可重新配置的邏輯部件2621的陣列中進行,該陣列是RCC硬件加速器2620的一部分。有了這個裝置,用戶可以在RCC計算系統(tǒng)2600中的軟件中模擬設(shè)計并使用RCC硬件加速器2620加速設(shè)計的一個部分(即模擬時間步驟或電路的獨特物理部分),或一個模擬和硬件加速的組合。用戶剛剛完成他的最新電路設(shè)計?,F(xiàn)在應(yīng)該調(diào)試設(shè)計來尋找缺陷。如果用戶先前已經(jīng)調(diào)試了設(shè)計的一個較早版本,他知道一個故障或許出現(xiàn)的地方。另一方面,如果這是該新設(shè)計的最初調(diào)試進程,用戶必須對于一個潛在故障的出現(xiàn)位置做出猜測。不論哪種狀況,需要一些猜測來大概確定故障位置。為了進行討論,假定這是最初的調(diào)試設(shè)計的情況。在調(diào)試設(shè)計中,用戶選擇一個模擬進程范圍。理論上,該模擬進程范圍可以是任何長度的模擬時間。然而實際上,模擬進程范圍應(yīng)該選擇得足夠短以隔離設(shè)計中的幾個故障,并且應(yīng)該選擇得足夠長以快速進行調(diào)試程序并使充分調(diào)試一個設(shè)計所需的調(diào)試進程數(shù)量最小化。顯然,兩個或三個模擬時間步驟的一個模擬進程范圍不會揭示任何故障的存在。而且,這個小模擬進程范圍將迫使用戶進行許多減慢調(diào)試程序的重復(fù)任務(wù)。如果選擇的模擬進程范圍是一百萬個模擬時間步驟,太多的故障可以顯現(xiàn)出來,這樣用戶將發(fā)現(xiàn)很難集中的解決一個問題。如圖84所示,一旦用戶選擇了一個模擬進程范圍,他就命令RCC系統(tǒng)快速的從模擬時間t0到模擬時間t3模擬。如前所述,模擬時間t0到t3的間隔可以是任何選擇的范圍,但是模擬時間t0代表模擬的開始而模擬時間t3代表該模擬進程范圍的最后模擬時間。在模擬時間t0,在RCC計算系統(tǒng)2600中開始快速模擬。從模擬時間t0到模擬時間t3執(zhí)行快速的模擬而不是正常的模擬模式,因為在該時間段內(nèi)不需要再生成軟件模型。如本專利說明書的其他地方所述,再生成操作需要RCC計算系統(tǒng)2620來接收硬件狀態(tài)信息(如節(jié)點值,寄存器狀態(tài))使得在軟件中可以再生成更復(fù)雜邏輯部件(如組合邏輯)以為用戶作進一步分析。當(dāng)然,一些用戶在模擬過程中可能想檢查軟件模型,在這種情況下,RCC計算系統(tǒng)2600不進行快速模擬。在此情況下,由于RCC計算系統(tǒng)2600需要額外的時間從硬件模型的主輸出中再生成軟件模型,模擬過程更慢了。一開始,設(shè)計的完全狀態(tài),諸如軟件模型狀態(tài)和硬件模型寄存器和節(jié)點值在模擬時間t0被存儲到一個在系統(tǒng)磁盤中稱作“模擬歷史”的文件。這允許了用戶在將來的任何時間將設(shè)計的狀態(tài)載入RCC系統(tǒng)以供調(diào)試之用。在從模擬時間t0到模擬時間t3的模擬進程范圍的該快速模擬期間,RCC計算系統(tǒng)2600將兩個不同程序并行地應(yīng)用到主輸入Ip中。在線路2610上將來自試驗平臺程序2603的原始主輸入提供到RCC硬件加速器2620以作估算。同時,將來自試驗平臺程序的相同主輸入作為一個單獨的稱作“輸入歷史”的文件壓縮并記錄在系統(tǒng)磁盤中,使得主輸入的整個歷史被集中到一起,以允許用戶再現(xiàn)模擬的任何部分。特別地,與模擬時間t0到模擬時間t3相對應(yīng)的主輸入被壓縮并存儲在系統(tǒng)磁盤中。當(dāng)RCC硬件加速器2620接收來自測試平臺程序2603的主輸入Ip時,它處理主輸入。因此,當(dāng)不同邏輯和其他電路設(shè)備估算數(shù)據(jù)時,硬件模型中的硬件狀態(tài)很有可能改變。在從模擬時間t0到模擬時間t3這個期間,由于用戶在該快速模擬期間內(nèi)對細致地調(diào)試設(shè)計并不感興趣,所以RCC系統(tǒng)不需要等候RCC計算系統(tǒng)2600來執(zhí)行它的邏輯再生成。RCC系統(tǒng)也沒有存儲主輸出(例如,硬件節(jié)點值和寄存器狀態(tài))。注意當(dāng)RCC計算系統(tǒng)2600壓縮主輸入用于記錄到“輸入歷史”文件時,RCC硬件加速器2620估算原始未壓縮的主輸入。在其他實施例中,RCC系統(tǒng)并不壓縮主輸入,用于將其記錄到輸入歷史文件中。為什么RCC計算系統(tǒng)2600將主輸入傳送到RCC硬件加速器中用于估算而同時在快速模擬進程間根本不存儲這些輸出?RCC系統(tǒng)需要存儲基于來自模擬開始到模擬時間t3的主輸入的估算的設(shè)計的硬件狀態(tài)。除非硬件模型已經(jīng)估算了從開始到點t3的主輸入的整個歷史,而不只是來自模擬時間t3的輸入,否則在模擬時間t3上不能獲得硬件模型狀態(tài)的精確抽點打印。邏輯電路具有基于輸入順序影響估算結(jié)果的存儲屬性。這樣,如果僅將從模擬時間t3(或是緊鄰模擬時間t3之前的模擬時間)的主輸入供給硬件模型用于估算,硬件模型或許將在該模擬時間t3上呈現(xiàn)錯誤的狀態(tài)。為什么在模擬時間t3存儲硬件模型狀態(tài)?在一個相對較短的時間內(nèi)不可能調(diào)試一個有著超過一百萬的門電路和超過一百萬的模擬時間步驟的大型設(shè)計。用戶需要多個模擬進程來調(diào)試該設(shè)計。為了從一個模擬進程快速地移動到下一個模擬進程,RCC系統(tǒng)從模擬時間t3存儲硬件狀態(tài)(連同壓縮的主輸入)使得用戶可以調(diào)試在模擬時間t3開始的下一個模擬進程范圍。有了存儲的硬件模型狀態(tài),用戶不需要從模擬的一開始模擬,相反地,用戶在從模擬時間t0到模擬時間t3期間調(diào)試了設(shè)計之后,可以快速并且便捷地回到模擬時間t3。在模擬時間t3上的硬件模型狀態(tài)存儲在模擬歷史文件中并代表他的設(shè)計的正確抽點打印,該抽點打印是直到那個點的主輸入的整個歷史的一個反映。如果有必要而且用戶需要的話,RCC硬件加速器2620中的硬件模型在線路2611上提供內(nèi)部硬件狀態(tài)給RCC計算系統(tǒng)2600,使得RCC計算系統(tǒng)2600可以在軟件模型上建立或再生不同的邏輯部件(如組合邏輯)。但是,如上所述,用戶并不關(guān)心在模擬進程范圍的快速模擬期間觀察軟件模擬。因此,由于用戶目前不會為了查明故障來檢查內(nèi)部硬件狀態(tài),所以來自RCC硬件加速器的這些內(nèi)部硬件狀態(tài)并不存儲在系統(tǒng)磁盤中。在模擬時間t3或在模擬進程范圍的末端,停止這一特定的快速模擬操作。在模擬歷史文件中存儲與模擬時間t3相對應(yīng)的RCC硬件加速器2620中的來自設(shè)計的硬件模型的估算結(jié)果或主輸入(例如寄存器值)。這樣,當(dāng)用戶已經(jīng)從模擬時間t0到模擬時間t3調(diào)試設(shè)計時,如果需要的話他可以繼續(xù)向前到模擬時間t3以作進一步調(diào)試。用戶不需從模擬時間t0再運行模擬以此在超過模擬時間t3的某點調(diào)試他的設(shè)計。總之,從模擬時間t0到模擬時間t3(即模擬進程范圍),用戶通過將來自測試平臺程序2603的主輸入在線路2610上供給RCC硬件加速器2620,同時壓縮同樣的主輸入并且將它們存儲到系統(tǒng)磁盤以供未來參考從而在實質(zhì)上加速設(shè)計。RCC計算系統(tǒng)2600需要在輸入歷史文件中存儲主輸入(壓縮或別的方式)以再現(xiàn)調(diào)試進程。壓縮操作也與在RCC硬件加速器2620中的數(shù)據(jù)估算并行發(fā)生。最后,在模擬進程范圍末端的模擬時間t3上,RCC系統(tǒng)將硬件模型的狀態(tài)信息存儲到一個模擬歷史文件中。在本發(fā)明的一個實施例中,來自模擬進程范圍的所有記錄的壓縮的主輸入是之后將被修改用于來自模擬時間t3的硬件狀態(tài)信息的同樣文件的一部分。在另一個實施例中,在系統(tǒng)磁盤中將來自模擬進程范圍的存儲信息和來自模擬時間t3的硬件狀態(tài)信息分別存儲為獨立的文件。相似地,用VCD隨選信息可以修改上述任何文件,該VCD隨選信息是之后為模擬目標(biāo)范圍生成的?;蛘?,VCD隨選信息可以存儲在系統(tǒng)磁盤的一個不同的VCD文件中,該VCD文件與壓縮的主輸入文件和模擬時間t3硬件狀態(tài)信息文件分離。換句話說,根據(jù)本發(fā)明的一個實施例,輸入歷史文件,模擬歷史文件和VCD文件可以合并在一個文件中。同時,輸入歷史文件和模擬歷史文件也可以合并在一個與VCD文件分離的文件中?,F(xiàn)在討論壓縮方案。根據(jù)本發(fā)明的一個實施例,RCC系統(tǒng)的壓縮邏輯允許每個模擬時間步驟10%輸入事件的主輸入事件的壓縮率為20X。這樣,一個具有超過一百萬個門電路的大型ASIC設(shè)計可能需要200個主輸入事件。對于每個模擬時間步驟發(fā)生的10%輸入事件,大約有20個輸入需要被壓縮和記錄。如果每個輸入信號是2字節(jié)長,20個輸入信號導(dǎo)致在每個模擬時間步驟的主輸入上需要處理40個字節(jié)的數(shù)據(jù)。對于一個壓縮率20X來說,每個模擬時間步驟可以將40個字節(jié)壓的數(shù)據(jù)縮成2個字節(jié)的數(shù)據(jù)。這樣,對于一個需要大約一百萬個模擬時間步驟的設(shè)計,RCC系統(tǒng)將主輸入壓縮成2兆字節(jié)的數(shù)據(jù)。該大小的文件通過任何計算文件系統(tǒng)和波形觀測儀可以容易地處理。在一個實施例中,使用ZIP壓縮。根據(jù)一個實施例,主輸入壓縮與RCC硬件加速器2620進行的主輸入估算同時執(zhí)行;輸入歷史文件生成與主輸入估算同時發(fā)生。因此,壓縮方案不對RCC系統(tǒng)的性能產(chǎn)生直接的負面影響。唯一可能發(fā)生的瓶頸是將壓縮的主輸入記錄到系統(tǒng)磁盤中的過程。然而,由于數(shù)據(jù)被高度壓縮,對于以每秒50,000模擬時間步驟運行的大多數(shù)設(shè)計,RCC系統(tǒng)的減速將小于5%。至于在RCC系統(tǒng)中控制記錄的具體方式,根據(jù)本發(fā)明的一個實施例,用戶必須首先使用$rcc(record)命令以初始化RCC記錄功能$rcc(record,name,<diskspace>,<checkpointcontrol>);現(xiàn)在將討論對于變元name,<diskspace>和<checkpointcontrol>的解釋?!皀ame”變元是當(dāng)前模擬進程范圍的記錄名稱。需要不同的名稱來辨別同樣設(shè)計的不同模擬運行。對于脫機的VCD隨選調(diào)試尤其需要一個獨立的記錄名稱。<diskspace>變元是一個規(guī)定分配給RCC系統(tǒng)記錄程序的最大磁盤空間(以Mb(兆字節(jié))為單位)的可選參數(shù)。系統(tǒng)設(shè)定值是100MB。RCC系統(tǒng)僅僅記錄在規(guī)定的磁盤空間里當(dāng)前模擬進程范圍的最新部分。換句話說,如果將<diskspace>值規(guī)定為100MB但是當(dāng)前的模擬進程范圍占據(jù)140MB,則RCC系統(tǒng)僅記錄壓縮的主輸入的最后的100MB同時刪除前40MB。本發(fā)明的該特征為故障分析提供了一個好處。在本發(fā)明的一個實施例中,測試臺程序具有一些自測功能來檢測模擬故障并且停止模擬。RCC模擬的最新歷史可以為這樣的故障分析提供大部分信息。<checkpointcontrol>變元是一個規(guī)定執(zhí)行一個完全狀態(tài)檢查點所需的模擬時間步驟的數(shù)量的可選參數(shù)。系統(tǒng)設(shè)定是1,000,000時間步驟。如大多數(shù)常規(guī)壓縮算法一樣,壓縮主輸入也基于連續(xù)的模擬時間步驟之間的狀態(tài)差別。對于長期的模擬運行,在一個既定的低頻率上完整的RCC狀態(tài)的檢查點可以大大地促進模擬歷史析取。對于一個在RCC系統(tǒng)中每秒20K到200K模擬時間步驟的解壓率和每一百萬個步驟一個檢查點,RCC系統(tǒng)可以在5到50秒內(nèi)析取(即復(fù)制主輸入和選擇的VCD文件生成的模擬)任何模擬歷史。當(dāng)調(diào)用該$rcc(record)命令時,RCC系統(tǒng)將記錄模擬歷史;即,壓縮并在一個文件中記錄主輸入用于儲存在系統(tǒng)磁盤中。由于在該時間不需要重建軟件邏輯,所以來自RCC硬件加速器的主輸出被忽視。記錄程序可以用命令$rcc(stop)或$rcc(off)來被終止,在該點,RCC系統(tǒng)將模擬控制切換回軟件模型。此時,處理主輸出用于軟件邏輯重建。VCD生成---解壓和轉(zhuǎn)儲如上所述,RCC系統(tǒng)在模擬時間t0已經(jīng)存儲了模擬進程范圍的開始處的軟件模型和硬件模型,在輸入歷史文件中記錄了壓縮的用于整個模擬進程范圍的主輸入,并且在模擬時間t3處,在模擬歷史文件中,存儲了模擬進程范圍末尾的設(shè)計的硬件模型狀態(tài)。現(xiàn)在用戶有足夠的信息從來自模擬時間t0的設(shè)計信息載入模擬進程范圍開始處的設(shè)計。有了壓縮的主輸入,用戶可以軟件模擬他的設(shè)計的任何部分。但是,由于VCD隨選特征,用戶或許不想在該點軟件模擬他的設(shè)計。相反地,用戶想生成一個用于所選的模擬目標(biāo)范圍的VCD文件用于精細的分析來隔離和解決故障。確實,有了記錄的壓縮主輸入,RCC系統(tǒng)可以再現(xiàn)在模擬進程范圍內(nèi)的任何點。而且,若需要的話,RCC系統(tǒng)可以通過載入先前的從模擬時間t3存儲的硬件狀態(tài)信息,在當(dāng)前的模擬進程范圍之外進行模擬。在快速模擬設(shè)計之后,用戶檢查結(jié)果以確定是否存在一個故障。如果沒有明顯的故障,那么對于當(dāng)前的模擬進程范圍設(shè)計可能沒有故障。然后用戶可以繼續(xù)在當(dāng)前的模擬進程范圍之外到下一個模擬進程范圍繼續(xù)模擬,無論所選擇的范圍是什么。但是,如果用戶已經(jīng)確定設(shè)計有某種問題,他必須更仔細地模擬來隔離并解決故障。因為整個模擬進程范圍對于仔細詳盡的分析來說太大,所以用戶必須瞄準(zhǔn)一個特定的較窄范圍以做進一步研究?;谟脩魧υO(shè)計的熟悉和或許過去的調(diào)試努力,用戶在模擬進程范圍內(nèi)對于故障的位置做出合理的猜測。用戶將集中在一個選擇的模擬目標(biāo)范圍,該模擬目標(biāo)范圍應(yīng)該與用戶對故障位置的猜測(或故障將出現(xiàn)的位置)相對應(yīng)。用戶確定模擬目標(biāo)范圍位于如圖84所示的模擬時間t1與模擬時間t2之間。RCC系統(tǒng)用先前的從模擬狀態(tài)t0存儲的配置信息在RCC計算系統(tǒng)2600中載入設(shè)計的軟件模型并在RCC硬件加速器2620中載入硬件模型。然后RCC系統(tǒng)從模擬時間t0到模擬時間t1快速模擬。在快速模擬操作中,RCC計算系統(tǒng)載入先前存儲的含有壓縮的主輸入的文件。RCC計算系統(tǒng)解壓壓縮的主輸入并且傳送解壓的主輸入到RCC硬件加速器2620用于估算。像開始的快速模擬操作壓縮并存儲模擬進程范圍的主輸入一樣,在從模擬時間t0到模擬時間t1的快速模擬操作中不存儲作為估算結(jié)果的主輸出(例如,硬件模型節(jié)點值和寄存器狀態(tài))。一旦快速模擬操作達到模擬目標(biāo)范圍的開始或模擬時間t1,RCC系統(tǒng)將來自RCC硬件加速器2620中的硬件模型的估算結(jié)果(即主輸出Op)轉(zhuǎn)儲到系統(tǒng)磁盤的一個VCD文件中。與模擬進程范圍的最初快速模擬操作不同,RCC計算系統(tǒng)2600不執(zhí)行任何壓縮。而且,由于用戶不需要在該時間檢查估算結(jié)果,所以RCC計算系統(tǒng)2600不執(zhí)行任何軟件模型的重建操作。通過不執(zhí)行任何軟件模型的重建操作,RCC系統(tǒng)可以快速地生成VCD文件。但是,在其他實施例中,用戶可能在存儲主輸出的同時檢查從t1到t2的該模擬時間段的他的設(shè)計的軟件模型。假如那樣的話,RCC計算系統(tǒng)2600執(zhí)行軟件模型重建操作以允許用戶檢查來自他設(shè)計的任何方面的所有狀態(tài)。在模擬時間t2,RCC計算系統(tǒng)2600停止在VCD文件中存儲來自RCC硬件加速器2620的估算輸出。在該點,用戶可以停止快速模擬?,F(xiàn)在RCC系統(tǒng)具有完整的模擬目標(biāo)范圍的VCD文件并且用戶可以繼續(xù)更詳盡地分析VCD文件。當(dāng)用戶想分析VCD文件時,他不需要重新運行從一開始(例如,模擬時間t0)的模擬。相反地,用戶可以命令RCC系統(tǒng)來載入從模擬目標(biāo)范圍的開始存儲的硬件狀態(tài)信息,并且用軟件模型檢查模擬的結(jié)果。這部分將在模擬歷史檢查部分更詳細地說明?;赩CD文件的分析,用戶可能發(fā)現(xiàn)或可能未發(fā)現(xiàn)故障。如果發(fā)現(xiàn)故障,用戶當(dāng)然會開始調(diào)整設(shè)計。如果沒有發(fā)現(xiàn)故障,用戶可能對懷疑存在故障的模擬目標(biāo)范圍做出了錯誤的猜測。用戶必須利用他上述使用的關(guān)于解壓和VCD文件轉(zhuǎn)儲的同樣的程序。用戶做了另一個猜測,希望在模擬進程范圍內(nèi)有一個更好的模擬目標(biāo)范圍。然后,RCC系統(tǒng)從模擬進程范圍的開始到新的模擬目標(biāo)范圍的開始快速地模擬,解壓主輸入并且將它們傳送到RCC硬件加速器2620用于估算。當(dāng)RCC系統(tǒng)達到新的模擬目標(biāo)范圍的起始處時,來自RCC硬件加速器2620的主輸出被轉(zhuǎn)儲到一個VCD文件中。在新的模擬目標(biāo)范圍的末尾,RCC系統(tǒng)停止將硬件狀態(tài)信息轉(zhuǎn)儲到VCD文件中。在該點,用戶可以檢查VCD文件用于隔離故障??傊?,從模擬時間t0到模擬時間t1,RCC系統(tǒng)通過解壓先前壓縮的主輸入并且將它們傳送到硬件模型用于估算,快速地模擬設(shè)計。在從模擬時間t1到模擬時間t2的模擬目標(biāo)范圍過程中,RCC系統(tǒng)將來自硬件模型的主輸出轉(zhuǎn)儲到一個VCD文件中。在模擬目標(biāo)范圍的末尾,用戶可以停止快速地模擬設(shè)計。在該點,用戶可以通過直接進入模擬時間t1而不在模擬時間t0重新運行從一開始的模擬來檢查VCD文件。當(dāng)完成對該模擬目標(biāo)范圍的檢查并且隔離和消除故障時,用戶可以繼續(xù)到下一個模擬進程范圍。該新的模擬進程范圍在模擬時間t3開始。用戶選擇新的模擬目標(biāo)范圍的特定長度,該新的模擬目標(biāo)范圍的特定長度可與先前的模擬進程范圍同樣長。RCC系統(tǒng)載入與模擬時間t3相對應(yīng)的先前存儲的硬件狀態(tài)信息。現(xiàn)在RCC系統(tǒng)準(zhǔn)備好了該新的模擬進程范圍的快速模擬。注意該新的模擬進程范圍與從模擬時間t0到t3的范圍相對應(yīng),其中載入的硬件狀態(tài)現(xiàn)在與模擬時間t0相對應(yīng)??焖倌M,VCD隨選轉(zhuǎn)儲和VCD檢查過程與上述的內(nèi)容相似。根據(jù)本發(fā)明的一個實施例,解壓步驟并不對性能造成負面影響。RCC系統(tǒng)可以以每秒20,000到200,000模擬時間步驟的速率解壓模擬歷史(即壓縮的和記錄的主輸入)。有了適當(dāng)?shù)臋z查點控制,RCC系統(tǒng)可以在50秒內(nèi)析取(即再現(xiàn)由主輸入和選擇的VCD文件生成的模擬)模擬歷史。至于在RCC系統(tǒng)中控制VCD隨選特征的具體方式,用戶必須使用$axis_rpd命令。$axis_rpd是一個交互命令,用來析取RCC估算記錄并且根據(jù)需要生成一個VCD文件。與常規(guī)的模擬重繞技術(shù)不同,$axis_rpd命令的執(zhí)行既不能重繞內(nèi)部模擬狀態(tài)也不破壞外部和文件I/O狀態(tài)。用戶可以在調(diào)用$axis_rpd命令后繼續(xù)模擬,所用方式與用戶在$stop命令之后能夠模擬的方式一樣。當(dāng)不規(guī)定變元時,$axis_rpd命令顯示在模擬進程范圍內(nèi)的所有可用模擬時間段,即,用戶可以選擇模擬目標(biāo)范圍。時間單位是在命令行接口中同樣的時間單位。一個模擬記錄的例子如下C1>$rcc(record,r1);C2>#1000$rcc(xt0,run);C3>#50000$rcc(off);C4>#50500$rcc(run);C5>#60000$rcc(stop);---StartRCCengineat100500.---BacktoSIMstopRCCengineat5000000.---StartRCCengineat5050500.---BacktoSIMstopRCCengineat6000000.Interruptatsimulaiontime60000.0000nsC6>$axis_rpd;availablesimulationhistory1005.000000to50000.00000050505.000000to60000.000000Interruptatsimulaiontime60000.0000ns從該模擬記錄中,用戶使用RCC引擎在緊鄰1000到50000之后形成時間并在緊鄰50500到60000之后形成時間。這樣,$axis_rpd顯示記錄的模擬窗口。為了從模擬歷史生成一個VCD文件,用戶使用具有下述控制變元的$axis_rpd命令$axis_rpd(start-time,end-time,“dump-file-name”,<levelandscopecontrol>);start-time和end-time規(guī)定了VCD文件的模擬時間窗口,或者模擬目標(biāo)范圍。時間控制變元的單位是用于命令行接口的時間單位?!癲ump-file-name”是VCD文件名。轉(zhuǎn)儲<levelandscopecontrol>參數(shù)與IEEEVerilog中的標(biāo)準(zhǔn)$dumpvars命令等同。以下是一個$axis_rpd命令的例子C7>$axis_rpd(50505,50600,“f1.dump”);---StartRCCVCDat50505.010000?。?--EndRCCVCDat50600.000000?。nterruptatsimulationtime60000.0000ns該$axis_rpd命令生成了一個名為“f1.dump”的、從模擬時間50505到50600的模擬目標(biāo)范圍的VCD文件。正如$dumpvars,如果不提供levelandscopecontrol參數(shù),$axis_rpd命令將轉(zhuǎn)儲整個硬件狀態(tài)或主輸出。另一個使用$axis_rpd命令的例子如下C8>$axis_rpd(40444,50600,“f1.dump”,2,dp0);---StartRCCVCDat40000.000000!!---Skipattime50000.000000.---Continueattime50505.000000!!---EndRCCVCDat50600.000000??!Interruptatsimulationtime60000.0000ns該$axis_rpd命令生成了一個在從時間40000到50600的范圍dp0上的2級的VCD文件“f2.dump”。由于在時間50000到50500期間模擬交換回軟件控制,$axis_rpd跳過那個窗口,因為不存在可用的模擬記錄。在用戶結(jié)束模擬過程之后,也可以得到VCD隨選。為了得到離線VCD隨選,用戶用+rccplay選項啟動名為“vlg”的模擬程序。有了該選項,可以指示RCC系統(tǒng)析取模擬記錄而不是執(zhí)行模擬的正常初始化序列。一旦用戶進入模擬程序,用戶可以使用同樣的$axis_rpd命令獲得VCD隨選。該過程的一個例子如下axis153-dp0_rtlc>vlg+rccplay+rl-s---Startreplayrecord./AxisWork/rlattime100500C1>$axis_rpd;availablesimulationhistory1005.000000to50000.00000050505.000000to60000.000000Interruptatsimulationtime100500C2>$axis_rpd(40000,45000,“f2.dump”);---StartRCCVCDat40000.000000??!---EndRCCVCDat45000.000000?。nterruptatsimulationtime4500000C3>在上述例子中,用模擬記錄“rl”析取模擬歷史并且產(chǎn)生在從時間40000到45000的整個設(shè)計中的VCD。模擬歷史復(fù)查一旦模擬目標(biāo)范圍(例如模擬時間t1到t2)的VCD文件已由RCC系統(tǒng)生成,用戶不需要從模擬時間t2到t3快速地模擬。相反,RCC系統(tǒng)允許用戶停止模擬并且直接運行到模擬目標(biāo)范圍的開始,或是模擬時間t1。這樣,與現(xiàn)有技術(shù)相比,用戶不必重新運行從一開始(例如,模擬時間t0)的模擬。已經(jīng)轉(zhuǎn)儲到VCD文件中的硬件狀態(tài)反映了來自模擬時間t0的主輸入的整個歷史的估算,包括從模擬時間t1到t2的主輸入。RCC系統(tǒng)載入VCD文件。此后,將存儲的主輸出傳送給RCC計算系統(tǒng)2600使得可以用正確的狀態(tài)信息重建軟件模型和其所有組合邏輯電路。然后用戶用一個波形觀測儀檢查軟件模型來進行調(diào)試。使用現(xiàn)有的VCD,用戶可以非常仔細地一步一步調(diào)試他的軟件模型直到隔離故障。有了該VCD隨選特征,用戶可以在模擬進程范圍內(nèi)選擇任何模擬目標(biāo)范圍并且執(zhí)行軟件模擬以隔離故障。如果在選擇的模擬目標(biāo)范圍中不能發(fā)現(xiàn)故障,用戶可以根據(jù)需要選擇另一個不同的模擬目標(biāo)范圍。因為記錄了來自測試臺程序的所有主輸入用于整個模擬進程范圍,所以可以根據(jù)需要再現(xiàn)并檢查該模擬的任何部分。該特征允許用戶反復(fù)地集中多種不同的模擬目標(biāo)范圍直到用戶在該模擬進程范圍內(nèi)修復(fù)故障。此外,該VCD隨選特征在模擬過程中在線狀況下是得到支持的,在模擬過程已經(jīng)結(jié)束之后,離線狀況下也支持該VCD隨選特征。在線支持是可行的,因為在模擬時間t0上的硬件狀態(tài)可以存儲在系統(tǒng)磁盤中并且可以壓縮和記錄用于任何長度的模擬進程范圍的主輸入。因此,用戶接著可以規(guī)定一個模擬目標(biāo)范圍以此對主輸出做更集中的分析。離線支持是可行的,因為在模擬時間t0上的硬件狀態(tài),模擬進程范圍的全部主輸入以及在模擬時間t1上的硬件狀態(tài)都存儲在系統(tǒng)磁盤中。這樣,用戶可以通過載入與模擬時間t0相對應(yīng)的設(shè)計并且接著規(guī)定模擬目標(biāo)范圍回到調(diào)試他的設(shè)計上。同時,用戶可以通過載入與模擬時間t3相對應(yīng)的硬件狀態(tài)而直接地繼續(xù)進行到下一個模擬目標(biāo)范圍。VI.硬件實現(xiàn)方案A.概述模擬仿真系統(tǒng)在可重新配置的電路板上實現(xiàn)FPGA芯片陣列。基于硬件模型,模擬仿真系統(tǒng)將用戶電路設(shè)計的每個所選部分分區(qū),映射,布局和布線在FPGA芯片上。因此,例如擁有16個芯片的4×4陣列可以模擬展開在這16個芯片上的大型電路?;ミB方案可以使每個芯片在2次“跳轉(zhuǎn)”或連接之內(nèi)訪問另一個芯片。每個FPGA芯片為每個輸入/輸出地址空間(即,REG,CLK,S2H,H2S)設(shè)置一個地址指示器。與特定地址空間有關(guān)的所有地址指示器互相鏈接在一起。所以,在數(shù)據(jù)傳輸過程中,順序的從/向主FPGA總線和PCI總線選擇每個芯片中的字?jǐn)?shù)據(jù),針對每個芯片中的所選地址空間一次一個字,并且一次一個芯片,直到為所選地址空間訪問到所期望的字?jǐn)?shù)據(jù)為止。這種字?jǐn)?shù)據(jù)的順序選擇通過傳送字選擇信號完成。該字選擇信號穿過芯片中的地址指示器并接著傳送到下一個芯片的地址指示器中,這樣繼續(xù)直到最后一個芯片或系統(tǒng)對地址指示器進行初始化。在可重新配置的電路板中的FPGA總線系統(tǒng)工作時的帶寬是PCI總線的兩倍,但速度僅為PCI總線的一半。因此,F(xiàn)PGA芯片被分成若干組以利用更大帶寬的總線。此FPGA總線系統(tǒng)的處理能力可以比得上PCI總線系統(tǒng)的處理能力,所以并沒有因為總線速度的降低而損失性能??梢圆捎冒郌PGA芯片的更大的電路板或機載電路板延伸組長度來實現(xiàn)擴展。B.地址指示器圖11顯示了本發(fā)明地址指示器的一個實施例。所有的輸入/輸出操作都要經(jīng)過DMA流。因為系統(tǒng)僅有一根總線,所以系統(tǒng)按一次一個字的方式順序的訪問數(shù)據(jù)。因此,地址指示器的一個實施例使用移位寄存器鏈順序的訪問這些地址空間中的所選的字。地址指示器400包括觸發(fā)器401-405,“與”門406,以及一對控制信號,INITIALIZE407和MOVE408。每個地址指示器具有n個輸出(W0,W1,W2,...,Wn-1),用于從每個FPGA芯片中的n個可能的字中選擇一個對應(yīng)于所選地址空間中的相同字的字。根據(jù)模型化的特定用戶電路設(shè)計,不同電路設(shè)計的字的數(shù)量n也不同,對于給定的電路設(shè)計,不同F(xiàn)PGA芯片的n也不同。在圖11中,地址指示器400僅為一個5個字(即,n=5)的地址指示器。因此,此包含用于特定地址空間5字地址指示器的的特定FPGA芯片僅具有5個字可供選擇。不用說,地址指示器400可以具有任何數(shù)量n的字。該輸出信號Wn也可被稱為字選擇信號。當(dāng)該字選擇信號到達此地址指示器中最后一個觸發(fā)器的輸出時,其被稱為OUT信號,并被傳送給下一個FPGA芯片的地址指示器的輸入。當(dāng)斷言INITIALIZE信號時,初始化地址指示器。第一觸發(fā)器401被設(shè)置為“1”,所有其他觸發(fā)器402-405被設(shè)置為“0”。此時,地址指示器的初始化不會啟動任何字選擇;也就是說,初始化之后,所有的Wn輸出仍為“0”。地址指示器的初始化過程將結(jié)合圖12討論。MOVE信號控制指示器字選擇的進程。此MOVE信號來源于來自FPGA輸入/輸出控制器的指數(shù)控制信號READ,WRITE和SPACE。因為每次操作本質(zhì)上都是一次讀或?qū)?,所以SPACE指數(shù)信號實質(zhì)上確定了MOVE信號將應(yīng)用于哪個地址指示器。因此,系統(tǒng)一次僅激活一個與一所選輸入/輸出地址空間相關(guān)的地址指示器,并且在此過程中,系統(tǒng)將MOVE信號僅用于此地址指示器。將結(jié)合圖13進一步討論MOVE信號的生成。根據(jù)圖11,當(dāng)斷言MOVE信號時,將MOVE信號提供給“與”門406的一個輸入和觸發(fā)器401-405的啟動輸入。這樣,在每系統(tǒng)時鐘周期,一個邏輯“1”將從字輸出Wi移動到Wi+1;也就是說,在每時鐘周期,指示器將從Wi移動到Wi+1以選擇特定的字。當(dāng)移位字選擇信號前進到最后一個觸發(fā)器405的輸出413(在此標(biāo)記為“OUT”)時,除非再次初始化地址指示器,此OUT信號應(yīng)在此后通過多路傳輸?shù)目缧酒刂分甘酒麈溌愤M入下一個FPGA芯片(將結(jié)合圖14和15討論此過程)?,F(xiàn)在闡述地址指示器的初始化過程。圖12顯示了圖11所示地址指示器初始化的狀態(tài)轉(zhuǎn)變圖。開始時,狀態(tài)460為空閑。當(dāng)將DATA_XSFR設(shè)置為“1”時,系統(tǒng)進入狀態(tài)461,地址指示器在這里被初始化。在此,斷言INITIALIZE信號。每個地址指示器中的第一觸發(fā)器被設(shè)置為“1”,地址指示器中的所有其他觸發(fā)器被設(shè)置為“0”。此時,地址指示器的初始化不會啟動任何字選擇;也就是說,所有的Wn輸出仍為“0”。下一個狀態(tài)是等待狀態(tài)462,同時DATA_XSFR仍為“1”。當(dāng)DATA_XSFR為“0”時,完成地址指示器的初始化過程并且系統(tǒng)返回空閑狀態(tài)460?,F(xiàn)在闡述為地址指示器產(chǎn)生不同MOVE信號的MOVE信號發(fā)生器。由FPGA輸入/輸出控制器(圖10中的327;圖22)產(chǎn)生的SPACE指數(shù)選擇特定的地址空間(即,REG讀,REG寫,S2H讀,H2S寫,和CLK寫)。在該地址空間中,本發(fā)明的系統(tǒng)順序的選擇特定的字以供訪問。順序字選擇在每個地址指示器中通過MOVE信號完成。圖13顯示了MOVE信號發(fā)生器的一個實施例。每個FPGA芯片450具有對應(yīng)于不同的軟件/硬件邊界地址空間(即,REG,S2H,H2S,和CLK)的地址指示器。除了地址指示器和模擬并實現(xiàn)在FPGA芯片450中的用戶電路設(shè)計,F(xiàn)PGA芯片450中還具有MOVE信號發(fā)生器470。MOVE信號發(fā)生器470包括一個地址空間譯碼器451和若干“與”門452-456。輸入信號為導(dǎo)線線路457上的FPGA讀信號(F_RD),導(dǎo)線線路458上的FPGA寫信號(F_WR),以及地址空間信號459。用于每個地址指示器的輸出MOVE信號根據(jù)應(yīng)用哪個地址空間的地址指示器,對應(yīng)于導(dǎo)線線路464上的REGR-move,導(dǎo)線線路465上的REGW-move,導(dǎo)線線路466上的S2H-move,導(dǎo)線線路467上的H2S-move,以及導(dǎo)線線路468上的CLK-move。這些輸出信號對應(yīng)于導(dǎo)線線路408上的MOVE信號(圖11)。地址空間譯碼器451接收一個3位輸入信號459。其也可以接收2位輸入信號。該2位信號提供4個可能的地址空間,而3位信號提供8個可能的地址空間。在一個實施例中,將CLK分配為“00”,S2H分配為“01”,H2S分配為“10”,REG分配為“11”。根據(jù)輸入信號459,地址空間譯碼器的輸出端在導(dǎo)線線路460-463中的一條上輸出一個“1”,分別對應(yīng)于REG,S2H,H2S,和CLK,同時將剩下的導(dǎo)線線路設(shè)置為“0”。因此,如果這些輸出導(dǎo)線線路460-463中任何一個為“0”,那么其對應(yīng)的“與”門452-456的輸出也為“0”。同樣的,如果這些輸入導(dǎo)線線路460-463中任何一個為“1”,那么其對應(yīng)的“與”門452-456的輸出也為“1”。例如,如果地址空間信號459為“10”,則選擇了地址空間H2S。導(dǎo)線線路461為“1”而剩下的導(dǎo)線線路460,462和463為“0”。相應(yīng)的,導(dǎo)線線路466為“1”而剩下的輸出導(dǎo)線線路464,465,467和468為“0”。同樣,如果導(dǎo)線線路460為“1”,則選擇了地址空間REG并且根據(jù)所選擇的是讀(F_RD)還是寫(F_WR)操作,導(dǎo)線線路464上的REGR-move信號或?qū)Ь€線路465上的REGW-move信號將為“1”。如前文中所解釋的,SPACE指數(shù)由FPGA輸入/輸出控制器產(chǎn)生。用編碼表示,MOVE控制為REG空間讀指示器REGR-move=(SPACE-index==#REG)&READ;REG空間寫指示器REGW-move=(SPACE-index==#REG)&WRITE;S2H空間讀指示器S2H-move=(SPACE-index==#S2H)&READ;H2S空間寫指示器H2S-move=(SPACE-index==#H2S)&WRITE;CLK空間寫指示器CLK-move=(SPACE-index==#CLK)&WRITE;這是和圖13所示的MOVE信號發(fā)生器的邏輯圖等價的編碼。如上所述,每個FPGA芯片具有相同數(shù)量的地址指示器作為軟件/硬件邊界中的地址空間。如果軟件/硬件邊界中具有4個地址空間(即,REG,S2H,H2S,和CLK),則每個FPGA芯片具有對應(yīng)于這4個地址空間的4個地址指示器。每個FPGA需要這4個地址指示器,因為在所選地址空間中被處理的特定選擇字可位于任何一個或多個FPGA芯片中,或所選地址空間中的數(shù)據(jù)影響在每個FPGA芯片中模擬并實現(xiàn)的不同電路元件。為確保在合適的FPGA芯片中用合適的電路元件處理所選擇的字,與一給定軟件/硬件邊界地址空間(即,REG,S2H,H2S,和CLK)相關(guān)的每組地址指示器跨越多個FPGA芯片被“鏈接”在一起。如上文結(jié)合圖11所述,仍然使用通過MOVE信號進行特定移位或傳送的字選擇機制,除了在此“鏈接”實施例中,一個FPGA芯片中與一特定地址空間相關(guān)的一地址指示器與下一個FPGA芯片中與相同地址空間相關(guān)的一地址指示器“鏈接”。利用4個輸入引腳和4個輸出引腳鏈接地址指示器可以實現(xiàn)同樣的目的。但是,此實施方式就有效的利用資源而言太浪費了;也就是說,在兩個芯片之間需要4根導(dǎo)線,在每個芯片中需要4個輸入引腳和4個輸出引腳。根據(jù)本發(fā)明的系統(tǒng)的一個實施例使用多路復(fù)用跨芯片地址指示器鏈路,其使得硬件模型在芯片之間僅使用一根導(dǎo)線并且在每個芯片中僅使用1個輸入引腳和1個輸出引腳(一個芯片中的2個輸入/輸出引腳)。多路復(fù)用跨芯片地址指示器鏈路的一個實施例如圖14所示。在圖14所示實施例中,用戶的電路設(shè)計被映射和劃分在可重新配置的硬件板470上的三個FPGA芯片415-417中。由塊421-432表示地址指示器。每個地址指示器,例如地址指示器427具有類似于圖11所示的地址指示器的結(jié)構(gòu)和功能,除了字的數(shù)量Wn有所不同,并且因此觸發(fā)器的數(shù)量也可能根據(jù)用于用戶定制電路設(shè)計的每個芯片中字的數(shù)量而有所不同。對于REGR地址空間,F(xiàn)PGA芯片415具有地址指示器421,F(xiàn)PGA芯片416具有地址指示器425,F(xiàn)PGA芯片417具有地址指示器429。對于REGW地址空間,F(xiàn)PGA芯片415具有地址指示器422,F(xiàn)PGA芯片416具有地址指示器426,F(xiàn)PGA芯片417具有地址指示器430。對于S2H地址空間,F(xiàn)PGA芯片415具有地址指示器423,F(xiàn)PGA芯片416具有地址指示器427,F(xiàn)PGA芯片417具有地址指示器431。對于H2S地址空間,F(xiàn)PGA芯片415具有地址指示器424,F(xiàn)PGA芯片416具有地址指示器428,F(xiàn)PGA芯片417具有地址指示器432。每個芯片415-417分別具有一個多路復(fù)用器418-420。應(yīng)注意這些多路復(fù)用器418-420可能是模型,而真正的實現(xiàn)則可能是寄存器和邏輯元件的組合,如所屬
      技術(shù)領(lǐng)域
      的技術(shù)人員所知。例如,多路復(fù)用器可以是如圖15所示的多個“與”門輸入到一個“或”門的形式。多路復(fù)用器487包括四個“與”門481-484和一個“或”門485。多路復(fù)用器487的輸入為來自芯片中每個地址指示器的OUT和MOVE信號。多路復(fù)用器487的輸出486為傳送到下一個FPGA芯片輸入端的鏈連信號。在圖15中,此特定FPGA芯片具有對應(yīng)于輸入/輸出地址空間的四個地址指示器475-478。地址指示器的輸出,OUT和MOVE信號,為多路復(fù)用器487的輸入。例如,地址指示器475在導(dǎo)線線路479上具有一個OUT信號,在導(dǎo)線線路480上具有一個MOVE信號。這些信號被輸入“與”門481。“與”門481的輸出為“或”門485的一個輸入?!盎颉遍T485的輸出即為此多路復(fù)用器487的輸出。在操作中,每個地址指示器475-478的輸出端的OUT信號連同其相應(yīng)的MOVE信號以及SPACE指數(shù)充當(dāng)多路復(fù)用器487的選擇器信號;也就是說,OUT和MOVE信號(其來源于SPACE指數(shù)信號)必須都被斷言有效(即,邏輯“1”)以將字選擇信號傳送出多路復(fù)用器到達鏈連導(dǎo)線線路。將周期性的斷言MOVE信號,以通過地址指示器中的觸發(fā)器移動字選擇信號,從而使其具有輸入MUX數(shù)據(jù)信號的特征。參見圖14,這些多路復(fù)用器418-420具有四組輸入和一個輸出。每組輸入包括(1)與特定地址空間相關(guān)的地址指示器的最后一個輸出Wn-1導(dǎo)線線路(例如,圖11中地址指示器的導(dǎo)線線路413)上的OUT信號,以及(2)MOVE信號。每個多路復(fù)用器418-420的輸出為鏈連信號。當(dāng)每個地址指示器中通過觸發(fā)器的字選擇信號Wn到達地址指示器中最后一個觸發(fā)器的輸出端時,其成為OUT信號。僅當(dāng)與相同地址指示器相關(guān)的一個OUT信號和一個MOVE信號均被斷言為有效(即,斷言為“1”)時,導(dǎo)線線路433-435上的鏈連信號才為“1”。對于多路復(fù)用器418,輸入為分別對應(yīng)于來自地址指示器421-424的OUT和MOVE信號的MOVE信號436-439和OUT信號440-443。對于多路復(fù)用器419,輸入為分別對應(yīng)于來自地址指示器425-428的OUT和MOVE信號的MOVE信號444-447和OUT信號452-455。對于多路復(fù)用器420,輸入為分別對應(yīng)于來自地址指示器429-432的OUT和MOVE信號的MOVE信號448-451和OUT信號456-459。在操作中,對于任何給定的字Wn的移位來說,只有那些與軟件/硬件邊界中一所選輸入/輸出地址空間相關(guān)的地址指示器或地址指示器鏈路是有效的。因此,在圖14中,對于一給定的移位,只有芯片415,416和417中與地址空間REGR,REGW,S2H或H2S中的一個相關(guān)的地址指示器才是有效的。同樣,對于一個通過觸發(fā)器的字選擇信號Wn的給定移位來說,由于總線帶寬的限制所選的字被順序的訪問。在一個實施例中,總線帶寬為32位并且一個字也為32位,所以一次僅可以訪問一個字,并將其送給適當(dāng)?shù)馁Y源。當(dāng)?shù)刂分甘酒髡ㄟ^其觸發(fā)器進行字選擇信號的傳送或移位時,輸出鏈連信號未被激活(即,不是“1”),并因此,此芯片中的此多路復(fù)用器未準(zhǔn)備好將字選擇信號傳送給下一個FPGA芯片。當(dāng)OUT信號被斷言為有效(即,“1”)時,鏈連信號被斷言為有效(即,“1”),表明系統(tǒng)準(zhǔn)備好了將字選擇信號傳送或移位到下一個FPGA芯片。因此,一次對一個芯片進行訪問;也就是說,在為另一個芯片執(zhí)行字選擇移位操作之前,一個芯片中的字選擇信號通過觸發(fā)器移位。事實上,僅當(dāng)字選擇信號到達每個芯片中地址指示器的終端時斷言鏈連信號。以編碼表示,鏈連信號為Chain-out=(REGR-move&REGR-out)|(REGW-move&REGW-out)|(S2H-move&S2H-out)|(H2S-move&H2S-out);總之,對于系統(tǒng)中的X個輸入/輸出地址空間(即,REG,S2H,H2S,和CLK)來說,每個FPGA具有X個地址指示器,一個地址指示器對應(yīng)于一個地址空間。每個地址指示器的尺寸取決于在每個FPGA芯片中模擬用戶定制電路設(shè)計所需的字的數(shù)量。假設(shè)一特定FPGA芯片需n個字,并因而,地址指示器也有n個字,此特定地址指示器具有n個輸出(即,W0,W1,W2,...,Wn-1)。這些輸出Wi也被稱為字選擇信號。當(dāng)選擇了特定字Wi時,Wi信號被斷言為有效(即,“1”)。此字選擇信號向此芯片的下游地址指示器移位或傳送直到到達此芯片中地址指示器的末端,在此處,其觸發(fā)鏈連信號的生成,鏈連信號使字選擇信號Wi開始在下一個芯片的地址指示器中傳送。按此方式,在跨越此可重新配置的硬件板上的所有FPGA芯片上,可實現(xiàn)與給定輸入/輸出地址空間相關(guān)的一系列地址指示器。C.門控數(shù)據(jù)/時鐘網(wǎng)絡(luò)分析本發(fā)明的不同實施例與門控數(shù)據(jù)邏輯和門控時鐘邏輯分析相結(jié)合執(zhí)行時鐘分析。門控時鐘邏輯(或時鐘網(wǎng)絡(luò))和門控數(shù)據(jù)網(wǎng)絡(luò)確定對軟件時鐘的成功實現(xiàn)和在仿真過程中硬件模型中的邏輯估算非常關(guān)鍵。如結(jié)合圖4所述,在步驟305執(zhí)行時鐘分析。為進一步闡述該時鐘分析過程,圖16顯示了根據(jù)本發(fā)明一實施例的流程圖。圖16還顯示了門控數(shù)據(jù)分析。模擬仿真系統(tǒng)在軟件中具有用戶電路設(shè)計的完整模型,在硬件中具有用戶電路設(shè)計的一些部分。這些硬件部分包括時鐘部件,尤其是派生的時鐘。由于此軟件和硬件之間的邊界,而產(chǎn)生了時鐘傳送時序問題。因為軟件中具有完整模型,所以軟件可以檢測影響寄存器值的時鐘邊沿。除了寄存器的軟件模型,這些寄存器還真實存在于硬件模型中。為了確保硬件寄存器也估算其相應(yīng)的輸入(即,將D輸入的數(shù)據(jù)移到Q輸出),軟件/硬件邊界包含一個軟件時鐘。軟件時鐘確保硬件模型中的寄存器正確的進行估算。軟件時鐘實質(zhì)上控制硬件寄存器的啟動輸入,而不是控制對硬件寄存器部件的時鐘輸入。此軟件時鐘避免了競態(tài)狀態(tài)并因此,不需要用精確的時序控制來避免占用時間擾亂。圖16所示的時鐘網(wǎng)絡(luò)和門控數(shù)據(jù)邏輯分析過程向硬件寄存器提供了一種模擬和實現(xiàn)時鐘和數(shù)據(jù)傳輸系統(tǒng)的方法,其避免了競態(tài)狀態(tài)并提供了靈活的軟件/硬件邊界實施方式。如前所述,主時鐘為來自測試平臺程序的時鐘信號。所有其他時鐘,例如源自組合部件的那些時鐘信號,為派生的或門控時鐘。主時鐘可以派生門控時鐘和門控數(shù)據(jù)信號。對于大多數(shù)部分,僅有很少的(如,1-10個)派生的或門控時鐘存在于用戶的電路設(shè)計中。這些派生的時鐘可以以軟件時鐘的形式實現(xiàn)并存在于軟件中。如果在電路設(shè)計中存在相對數(shù)量較大的(如,超過10個)派生的時鐘,模擬仿真系統(tǒng)會將其模型化在硬件之中以減少輸入/輸出開支并維持模擬仿真系統(tǒng)的性能。門控數(shù)據(jù)為數(shù)據(jù)或寄存器的控制輸入,其不同于通過一些組合邏輯來自主時鐘驅(qū)動的時鐘。門控數(shù)據(jù)/時鐘分析過程開始于步驟500。步驟501獲取產(chǎn)生于HDL編碼的有用的源設(shè)計數(shù)據(jù)庫編碼并將用戶的寄存器元件映射到模擬仿真系統(tǒng)的寄存器部件。該用戶寄存器到模擬仿真寄存器的一對一映射有助于隨后的模型化步驟。在一些情況下,需要此映射以處理用特定的原語言描述寄存器元件的用戶電路設(shè)計。因此,對于RTL級的編碼來說,可以相當(dāng)容易地使用模擬仿真寄存器,因為RTL編碼的等級足夠高,可以改變較低等級的實施方式。對于門級連線表來說,模擬仿真系統(tǒng)將訪問部件的單元庫并對其進行修改,使其適合特定電路設(shè)計的專用邏輯元件。步驟502從硬件模型的寄存器部件中析取時鐘信號。此步驟允許系統(tǒng)確定主時鐘和派生的時鐘。此步驟還確定電路設(shè)計中不同部件所需的所有時鐘信號。來自此步驟的信息有助于軟件/硬件時鐘模型化步驟。步驟503確定主時鐘和派生的時鐘。主時鐘源自測試平臺部件并僅被模型化在軟件中。派生的時鐘來自組合邏輯,其反過來由主時鐘驅(qū)動。根據(jù)系統(tǒng)設(shè)定,本發(fā)明的模擬仿真系統(tǒng)將保持派生的時鐘在軟件中。如果派生的時鐘的數(shù)量較少(如,少于10個),那么可將這些派生的時鐘模型化為軟件時鐘。因為生成這些派生的時鐘的組合部件的數(shù)量較小,所以將這些組合部件保存在軟件中并不增加大量的輸入/輸出開支。但是,如果派生的時鐘的數(shù)量較大(如,超過10個),那么可將這些派生的時鐘模型化在硬件中以最小化輸入/輸出開支。有時,用戶的電路設(shè)計使用大量的來源于主時鐘的派生的時鐘部件。因此,系統(tǒng)在硬件中建立時鐘,以保持較小的軟件時鐘數(shù)量。決策步驟504需要系統(tǒng)去確定是否在用戶的電路設(shè)計中發(fā)現(xiàn)任何的派生的時鐘。如果沒有,則步驟504的結(jié)果為“否”并且時鐘分析終止于步驟508,因為用戶的電路設(shè)計中所有的時鐘都為主時鐘并且這些時鐘都簡單模擬在軟件之中。如果在用戶的電路設(shè)計中發(fā)現(xiàn)派生的時鐘,則步驟504的結(jié)果為“是”并且算法進入步驟505。步驟505確定從主時鐘到派生的時鐘的扇出組合部件。換句話說,此步驟通過組合部件跟蹤來自主時鐘的時鐘信號數(shù)據(jù)通路。步驟506確定來自派生的時鐘的扇入組合部件。換句話說,此步驟跟蹤從組合部件到派生的時鐘的時鐘信號數(shù)據(jù)通路。在軟件中循環(huán)進行系統(tǒng)輸出和扇入組的確定。網(wǎng)絡(luò)N的扇入組如下  FanInSetofanetN  findallthecomponentsdrivingnetN;  foreachcomponentXdrivingnetNdo  ifthecomponentXisnotacombinationalcomponentthen return;  else  foreachinputnetYofthecomponentX  addtheFanInsetWofnetYtotheFanInSetofnetN  endfor  addthecomponentXintoN;  endif  endfor通過反復(fù)的確定網(wǎng)絡(luò)N的扇入(fan-in)組和扇出(fan-out)組以及它們的交集,來確定門控時鐘或數(shù)據(jù)邏輯網(wǎng)絡(luò)。此處的最終目標(biāo)是確定網(wǎng)絡(luò)N的所謂扇入組。網(wǎng)絡(luò)N通常是一個時鐘輸入節(jié)點,用于從輸入的角度確定門控時鐘邏輯。對于從輸入的角度確定門控數(shù)據(jù)邏輯來說,網(wǎng)絡(luò)N是一個與臨近的數(shù)據(jù)輸入相關(guān)的時鐘輸入節(jié)點。如果節(jié)點在寄存器上,網(wǎng)絡(luò)N為對此寄存器的時鐘輸入,此寄存器用于與其相關(guān)的數(shù)據(jù)輸入。系統(tǒng)發(fā)現(xiàn)所有驅(qū)動網(wǎng)絡(luò)N的部件。對于每個驅(qū)動網(wǎng)絡(luò)N的部件X,系統(tǒng)確定部件X是否為組合部件。如果每個部件X均不為組合部件,那么網(wǎng)絡(luò)N的扇入組不含有組合部件并且網(wǎng)絡(luò)N為主時鐘。但是,如果至少有一個部件X為組合部件,則系統(tǒng)接著確定部件X的輸入網(wǎng)絡(luò)Y。在此,系統(tǒng)通過發(fā)現(xiàn)到部件X的輸入節(jié)點可以進一步的在電路設(shè)計中向后探詢。對于每個部件X的每個輸入網(wǎng)絡(luò)Y,可能存在與網(wǎng)絡(luò)Y連接的扇入組W。將網(wǎng)絡(luò)Y的該扇入組W與網(wǎng)絡(luò)N的扇入組Fan-InSet相加,則部件X加入組N。以類似的方式確定網(wǎng)絡(luò)N的扇出組。網(wǎng)絡(luò)N的扇出組如下  FanOutSetofanetN  findallthecomponentsusingnetN;  foreachcomponentXusingthenetNdo  ifthecomponentXisnotacombinationalcomponentthen  return;  else  foreachoutputnetYofthecomponentX  addtheFanOutSetofnetYtotheFanOutSetofnetN endfor  addthecomponentXintoN;  endif  endfor再一次,通過反復(fù)的確定網(wǎng)絡(luò)N的扇入組和扇出組以及它們的交集來確定門控時鐘或數(shù)據(jù)邏輯網(wǎng)絡(luò)。此處的最終目標(biāo)是確定網(wǎng)絡(luò)N的所謂扇出組。網(wǎng)絡(luò)N通常是一個時鐘輸出節(jié)點,用于從扇出的角度確定門控時鐘邏輯。因此,將確定使用網(wǎng)絡(luò)N的所有邏輯元件的組。對于從扇出的角度確定門控時鐘邏輯來說,網(wǎng)絡(luò)N是一個與臨近的數(shù)據(jù)輸出相關(guān)的時鐘輸出節(jié)點。如果節(jié)點在寄存器上,網(wǎng)絡(luò)N為此寄存器的時鐘輸出,此寄存器用于與其相關(guān)的主時鐘驅(qū)動輸入。系統(tǒng)發(fā)現(xiàn)所有使用網(wǎng)絡(luò)N的部件。對于每個使用網(wǎng)絡(luò)N的部件X,系統(tǒng)確定部件X是否為組合部件。如果每個部件X均不為組合部件,那么網(wǎng)絡(luò)N的扇出組不含有組合部件并且網(wǎng)絡(luò)N為主時鐘。但是,如果至少有一個部件X為組合部件,則系統(tǒng)接著確定部件X的輸出網(wǎng)絡(luò)Y。在此,系統(tǒng)通過發(fā)現(xiàn)來自部件X的輸出節(jié)點可以進一步的從電路設(shè)計中的主時鐘向前探詢。對于每個部件X的每個輸出網(wǎng)絡(luò)Y,可能存在與網(wǎng)絡(luò)Y連接的扇出組W。將此網(wǎng)絡(luò)Y的扇出組W與網(wǎng)絡(luò)N的扇出組Fan-OutSet相加,則部件X加入組N。步驟507確定時鐘網(wǎng)絡(luò)或門控時鐘邏輯。時鐘網(wǎng)絡(luò)為扇入和扇出組合部件的交集。類似的,可以使用相同的扇入和扇出原則來確定門控數(shù)據(jù)邏輯。與門控時鐘類似,門控數(shù)據(jù)為由一主時鐘通過一些組合邏輯驅(qū)動的一寄存器的數(shù)據(jù)或控制輸入(除了時鐘)。門控數(shù)據(jù)邏輯是門控數(shù)據(jù)的扇入和來自主時鐘的扇出的交集。因此,時鐘分析和門控數(shù)據(jù)分析通過一些組合邏輯和一門控數(shù)據(jù)邏輯產(chǎn)生門控時鐘網(wǎng)絡(luò)/邏輯。如下文所述,門控時鐘網(wǎng)絡(luò)和門控數(shù)據(jù)網(wǎng)絡(luò)確定對軟件時鐘的成功實現(xiàn)和在仿真過程中硬件模型中的邏輯估算非常關(guān)鍵。時鐘/數(shù)據(jù)網(wǎng)絡(luò)分析終止于步驟508。圖17顯示了根據(jù)本發(fā)明一個實施例的硬件模型的基本構(gòu)件塊。對于寄存器部件,模擬仿真系統(tǒng)使用具有異步負載控制的D型觸發(fā)器作為構(gòu)成邊緣觸發(fā)器(即,觸發(fā)器)和電平感應(yīng)(即,鎖存器)寄存器硬件模型的基本塊。此寄存器模型構(gòu)件塊具有下列端口Q(輸出狀態(tài));A_E(異步啟動);A_D(異步數(shù)據(jù));S_E(同步啟動);S_D(同步數(shù)據(jù));當(dāng)然還有System.clk(系統(tǒng)時鐘)。此模擬仿真寄存器模型由系統(tǒng)時鐘的正沿或異步啟動(A_E)輸入的正電平觸發(fā)。當(dāng)正沿或正電平觸發(fā)事件發(fā)生時,寄存器模型尋找異步啟動(A_E)輸入。如果異步啟動(A_E)輸入被激活,則輸出Q具有異步數(shù)據(jù)(A_D)的值;否則,如果同步啟動(S_E)輸入被激活,則輸出Q具有同步數(shù)據(jù)(S_D)的值。另一方面,如果異步啟動(A_E)或同步啟動(S_E)輸入都未被激活,則不估算輸出Q的值,盡管已檢測系統(tǒng)時鐘的正沿。按此方法,對這些啟動端口的輸入控制了基本構(gòu)件塊寄存器模型的操作。系統(tǒng)使用軟件時鐘(其為專門的啟動寄存器)控制這些寄存器模型的啟動輸入。在復(fù)雜的用戶電路設(shè)計中,在電路設(shè)計中具有數(shù)百萬個元件并且因此,模擬仿真器系統(tǒng)將在硬件模型中實現(xiàn)數(shù)百萬個元件。單個控制所有這些元件的成本將是很高的,因為向硬件模型傳送數(shù)百萬個控制信號的操作比在軟件中估算這些元件將花費更長的時間。但是,即使此復(fù)雜的電路設(shè)計通常也只調(diào)用很少的(1-10個)時鐘,并且僅就時鐘而言足夠控制僅具有寄存器和組合部件的系統(tǒng)的狀態(tài)轉(zhuǎn)變。模擬仿真器系統(tǒng)的硬件模型僅使用寄存器和組合部件。模擬仿真器系統(tǒng)還通過軟件時鐘控制硬件模型的估算。在模擬仿真器系統(tǒng)中,用于寄存器的硬件模型不具有直接連接其他硬件部件的時鐘;而是由軟件內(nèi)核控制所有時鐘的值。通過控制幾個時鐘信號,內(nèi)核具有對硬件模型估算的全面控制,同時協(xié)同處理器干涉開銷可以忽略。根據(jù)寄存器模型被當(dāng)作鎖存器還是觸發(fā)器使用,將軟件時鐘輸入異步啟動(A_E)或同步啟動(S_E)導(dǎo)線線路。由時鐘部件的邊緣檢測觸發(fā)從軟件模型到硬件模型的軟件時鐘應(yīng)用。當(dāng)軟件內(nèi)核檢測到時鐘部件的邊緣時,其通過CLK地址空間設(shè)置時鐘邊沿寄存器。此時鐘邊沿寄存器控制對硬件寄存器模型的啟動輸入,而不是時鐘輸入。全局系統(tǒng)時鐘仍提供對硬件寄存器模型的時鐘輸入。但是,時鐘邊沿寄存器通過一個雙緩沖器接口向硬件寄存器模型提供軟件時鐘信號。如下文將解釋的,從軟件時鐘到硬件模型的雙緩沖器接口保證了所有寄存器模型將關(guān)于全局系統(tǒng)時鐘被同步更新。因此,軟件時鐘的使用消除了占用時間擾亂的危險。圖18(A)和18(B)顯示了實現(xiàn)鎖存器和觸發(fā)器的構(gòu)件塊寄存器模型。這些寄存器模型借由合適的啟動輸入受軟件時鐘的控制。根據(jù)寄存器模型被當(dāng)作鎖存器還是觸發(fā)器使用,異步端口(A_E,A_D)和同步端口(S_E,S_D)被用于軟件時鐘或輸入/輸出操作。圖18(A)顯示了被當(dāng)作鎖存器使用的寄存器模型的實現(xiàn)。鎖存器為電平感應(yīng)的;也就是說,只要斷言了時鐘信號(如,“1”),則輸出Q跟隨輸入(D)。在此,軟件時鐘信號被提供給異步啟動(A_E)輸入,數(shù)據(jù)輸入被提供給異步數(shù)據(jù)(A_D)輸入。對于輸入/輸出操作,軟件內(nèi)核使用同步啟動(S_E)和同步數(shù)據(jù)(S_D)輸入,將值下載到Q端口。S_E端口被用作REG空間地址指示器,S_D端口用于向/從局部數(shù)據(jù)總線存取數(shù)據(jù)。圖18(B)顯示了被當(dāng)作設(shè)計觸發(fā)器使用的寄存器模型的實現(xiàn)。設(shè)計觸發(fā)器使用下列端口確定下一個狀態(tài)邏輯數(shù)據(jù)(D),設(shè)置(S),復(fù)位(R),和啟動(E)。設(shè)計觸發(fā)器的所有下一個狀態(tài)邏輯都作為進入同步數(shù)據(jù)(S_D)輸入的硬件組合部件的因子。軟件時鐘被輸入到同步啟動(S_E)輸入。對于輸入/輸出操作,軟件內(nèi)核使用異步啟動(A_E)和異步數(shù)據(jù)(A_D)輸入,將值下載到Q端口。A_E端口被用作REG空間寫地址指示器,A_D端口用于向/從局部數(shù)據(jù)總線存取數(shù)據(jù)?,F(xiàn)在討論軟件時鐘。本發(fā)明軟件時鐘的一個實施例是對硬件寄存器模型的一時鐘啟動信號,這樣使得這些硬件寄存器模型輸入端的數(shù)據(jù)被一同估算并與系統(tǒng)時鐘同步。這消除了競態(tài)狀態(tài)和占用時間擾亂。軟件時鐘邏輯的一個實施例包括軟件中的時鐘邊沿檢測邏輯,其根據(jù)時鐘邊沿檢測觸發(fā)硬件中的附加邏輯。此啟動信號邏輯在數(shù)據(jù)到達這些硬件寄存器模型之前,為硬件寄存器模型的啟動輸入生成啟動信號。門控時鐘網(wǎng)絡(luò)和門控數(shù)據(jù)網(wǎng)絡(luò)確定對軟件時鐘的成功實現(xiàn)和在硬件加速模式中硬件模型的邏輯估算非常關(guān)鍵。如前文所述,時鐘網(wǎng)絡(luò)或門控時鐘邏輯為門控時鐘扇入和主時鐘扇出的交集。類似的,門控數(shù)據(jù)邏輯也為門控數(shù)據(jù)扇入和數(shù)據(jù)信號主時鐘扇出的交集。上文中結(jié)合圖16討論了扇入和扇出的概念。如上文所述,主時鐘由軟件中的測試平臺程序生成。派生的或門控時鐘由反過來受主時鐘驅(qū)動的組合邏輯和寄存器網(wǎng)絡(luò)生成。根據(jù)系統(tǒng)設(shè)定,本發(fā)明的模擬仿真系統(tǒng)也將派生的時鐘保留在軟件中。如果派生的時鐘的數(shù)量較少(如,少于10個),那么可將這些派生的時鐘模型化為軟件時鐘。因為生成這些派生的時鐘的組合部件的數(shù)量較小,所以將這些組合部件模型化在軟件中并沒有增加大量的輸入/輸出開支。但是,如果派生的時鐘的數(shù)量較大(如,超過10個),那么可將這些派生的時鐘和它們的組合部件模型化在硬件中以最小化輸入/輸出開支。最終,根據(jù)本發(fā)明的一個實施例,在軟件中發(fā)生的時鐘邊沿檢測(通過對主時鐘的輸入)可被翻譯成硬件中的時鐘檢測(通過對時鐘邊沿寄存器的輸入)。軟件中的時鐘邊沿檢測觸發(fā)硬件中的一個事件,使得硬件模型中的寄存器在接收數(shù)據(jù)信號之前接收時鐘啟動信號,確保數(shù)據(jù)信號的估算與系統(tǒng)時鐘同步發(fā)生以避免占用時間擾亂。如前文所述,模擬仿真系統(tǒng)在軟件中具有用戶電路設(shè)計的完整模型,在硬件中具有用戶電路設(shè)計的一些部分。如內(nèi)核中所規(guī)定的,軟件可以檢測影響硬件寄存器值的時鐘邊沿。為確保硬件寄存器也估算其相應(yīng)的輸入,軟件/硬件邊界包括一個軟件時鐘。軟件時鐘確保硬件模型中的寄存器的估算與系統(tǒng)時鐘同步,并且沒有占用時間擾亂。軟件時鐘實質(zhì)上控制硬件寄存器部件的啟動輸入,而不是控制對硬件寄存器部件的時鐘輸入。實現(xiàn)軟件時鐘的雙緩沖法確保了寄存器的估算與系統(tǒng)時鐘同步,避免了競態(tài)狀態(tài),并消除了對精確時序控制的需要,從而避免了占用時間擾亂。圖19顯示了根據(jù)本發(fā)明的時鐘執(zhí)行系統(tǒng)的一個實施例。開始時,如結(jié)合圖16所述,由模擬仿真器系統(tǒng)確定門控時鐘邏輯和門控數(shù)據(jù)邏輯。接著分離門控時鐘邏輯和門控數(shù)據(jù)邏輯。當(dāng)實現(xiàn)雙緩沖器時,還必須分離驅(qū)動源和雙緩沖主邏輯。因此,根據(jù)扇入和扇出分析,門控數(shù)據(jù)邏輯513和門控時鐘邏輯514已經(jīng)分離。模擬的主時鐘寄存器510包括一個第一緩沖器511和一個第二緩沖器512,其均為D寄存器。該主時鐘被模型化在軟件中,但雙緩沖器裝置被模型化在軟件和硬件中。時鐘邊沿檢測發(fā)生在軟件中的主時鐘寄存器510中以觸發(fā)硬件模型生成對硬件模型的軟件時鐘信號。數(shù)據(jù)和地址分別在導(dǎo)線線路519和520上進入第一緩沖器511。第一緩沖器511在導(dǎo)線線路521上的Q輸出與第二緩沖器512的D輸入相連。第一緩沖器511的Q輸出還通過導(dǎo)線線路522被提供給門控時鐘邏輯514以最終驅(qū)動時鐘邊沿寄存器515的第一緩沖器516的時鐘輸入。第二緩沖器512的Q輸出通過導(dǎo)線線路523被提供給門控數(shù)據(jù)邏輯513以通過導(dǎo)線線路530最終驅(qū)動在用戶定制設(shè)計的電路模型中的寄存器518的輸入。主時鐘寄存器510的第二緩沖器512的啟動輸入為導(dǎo)線線路533上來自狀態(tài)機的INPUT-EN信號,其確定估算周期并相應(yīng)地控制不同的信號。時鐘邊沿寄存器515還包括一個第一緩沖器516和一個第二緩沖器517。時鐘邊沿寄存器515實現(xiàn)在硬件中。當(dāng)在軟件中發(fā)生時鐘邊沿檢測時(通過主時鐘寄存器510的輸入),可以觸發(fā)在硬件中相同的時鐘邊沿檢測(通過時鐘邊沿寄存器515)。導(dǎo)線線路524上對第一緩沖器516的D輸入被設(shè)置為“1”。導(dǎo)線線路525上的時鐘信號來自門控時鐘邏輯514并最終來自主時鐘寄存器510中第一緩沖器511在導(dǎo)線線路522上的輸出。導(dǎo)線線路525上的該時鐘信號為門控時鐘信號。第一緩沖器516的啟動導(dǎo)線線路526上的信號為來自狀態(tài)機的控制輸入/輸出和估算周期(將在下文介紹)的~EVAL信號。第一緩沖器516還在導(dǎo)線線路527上具有RESET信號。此相同的RESET信號還將被提供給時鐘邊沿寄存器515的第二緩沖器517。第一緩沖器516在導(dǎo)線線路529上的Q輸出被提供給第二緩沖器517的D輸入。第二緩沖器517在導(dǎo)線線路528上還具有啟動輸入CLK-EN信號,在導(dǎo)線線路527上具有一個RESET輸入。第二緩沖器517的Q輸出通過導(dǎo)線線路532被提供給用戶定制設(shè)計的電路模型中的寄存器518的啟動輸入。緩沖器511,512和517連同寄存器518由系統(tǒng)時鐘控制。僅時鐘邊沿寄存器515中的緩沖器516由來自門控時鐘邏輯514的門控時鐘控制。寄存器518為模擬在硬件中的典型的D型寄存器模型,并且為用戶定制電路設(shè)計的一部分。由本發(fā)明時鐘實施方案的此實施例嚴(yán)格控制其估算過程。此時鐘設(shè)定的最終目標(biāo)為確保導(dǎo)線線路532上的時鐘啟動信號在導(dǎo)線線路530上的數(shù)據(jù)信號之前到達寄存器518,使得此寄存器對數(shù)據(jù)信號的估算與系統(tǒng)時鐘同步發(fā)生并且沒有競態(tài)狀態(tài)的發(fā)生。再次重申,模擬的主時鐘寄存器510被模型化在軟件中,但其雙緩沖器裝置被模型化在軟件和硬件中。時鐘邊沿寄存器515實現(xiàn)在硬件中。根據(jù)扇入和扇出分析,門控數(shù)據(jù)邏輯513和門控時鐘邏輯514也被分離以用于模型化的目的,并且它們可以被模型化在軟件中(如果門控數(shù)據(jù)和門控時鐘的數(shù)量較小)或硬件中(如果門控數(shù)據(jù)和門控時鐘的數(shù)量較大)。門控時鐘網(wǎng)絡(luò)和門控數(shù)據(jù)網(wǎng)絡(luò)的確定對軟件時鐘的成功實現(xiàn)和在硬件加速過程中硬件模型的邏輯估算非常關(guān)鍵。軟件時鐘的實現(xiàn)主要依賴于圖19所示的時鐘設(shè)定以及信號~EVAL,INPUT-EN,CLK-EN和RESET的斷言時序。主時鐘寄存器510檢測時鐘邊沿來為硬件模型觸發(fā)軟件時鐘的生成。此時鐘邊沿檢測事件通過導(dǎo)線線路525上的時鐘輸入,門控時鐘邏輯514,和導(dǎo)線線路522觸發(fā)時鐘邊沿寄存器515的“激活”,使得時鐘邊沿寄存器515也檢測相同的時鐘邊沿。按此方式,在軟件中發(fā)生的時鐘檢測(通過主時鐘寄存器510的輸入519和520)可被翻譯成硬件中的時鐘邊沿檢測(通過時鐘邊沿寄存器515的輸入525)。此時,主時鐘寄存器510的第二緩沖器512的INPUT-EN導(dǎo)線線路533和時鐘邊沿寄存器515的第二緩沖器517的CLK-EN導(dǎo)線線路528還未被斷言,因此沒有數(shù)據(jù)估算發(fā)生。因此,檢測時鐘邊沿將在硬件寄存器模型中估算數(shù)據(jù)之前發(fā)生。應(yīng)注意在此階段,導(dǎo)線線路519上來自數(shù)據(jù)總線的數(shù)據(jù)還沒有被傳送到門控數(shù)據(jù)邏輯513并進入硬件模型化的用戶寄存器518。事實上,數(shù)據(jù)甚至還沒有到達主時鐘寄存器510的第二緩沖器512,因為導(dǎo)線線路533上的INPUT-EN信號還沒有被斷言。在輸入/輸出階段,斷言導(dǎo)線線路526上的~EVAL信號以啟動時鐘邊沿寄存器515中的第一緩沖器516?!獷VAL信號在通過門控時鐘邏輯到第一緩沖器516的導(dǎo)線線路525的時鐘輸入時,還經(jīng)過門控時鐘邏輯514對門控時鐘信號進行監(jiān)視。因此,如下文中結(jié)合4狀態(tài)估算狀態(tài)機所述,可以根據(jù)需要盡可能長時間地維持~EVAL信號,以穩(wěn)定經(jīng)過系統(tǒng)中圖19所示部分的數(shù)據(jù)和時鐘信號。當(dāng)信號穩(wěn)定后,輸入/輸出終止,或系統(tǒng)準(zhǔn)備估算數(shù)據(jù),~EVAL被去斷言(deasserted)以禁用第一緩沖器516。斷言CLK-EN信號并通過導(dǎo)線線路528將其應(yīng)用于第二緩沖器517以啟動第二緩沖器517,并將導(dǎo)線線路529上的邏輯值“1”送給導(dǎo)線線路532上的Q輸出,至寄存器518的啟動輸入。寄存器518現(xiàn)在已經(jīng)被啟動并且導(dǎo)線線路530上的任何數(shù)據(jù)將由系統(tǒng)時鐘同步時鐘輸入到寄存器518。如讀者可觀察到的一樣,寄存器518的啟動信號比輸入到此寄存器518的數(shù)據(jù)信號的估算運行的更快。導(dǎo)線線路533上的INPUT-EN信號未被斷言給第二緩沖器512。并且,導(dǎo)線線路527上的RESET邊緣寄存器信號被斷言給時鐘邊沿寄存器515中的緩沖器516和517以將這些緩沖器復(fù)位并確保它們的輸出為邏輯“0”?,F(xiàn)在INPUT-EN信號已被斷言給緩沖器512,導(dǎo)線線路521上的數(shù)據(jù)被傳送到門控數(shù)據(jù)邏輯513以通過導(dǎo)線線路530到達用戶電路寄存器518。因為寄存器518的啟動輸入現(xiàn)在為邏輯“0”,導(dǎo)線線路530上的數(shù)據(jù)無法被時鐘輸入寄存器518。但是,先前的數(shù)據(jù)在RESET信號被斷言給禁用的寄存器518之前已經(jīng)通過先前斷言的導(dǎo)線線路532上的啟動信號被時鐘輸入。因此寄存器518的輸入數(shù)據(jù),以及其他寄存器(其為用戶硬件模型化電路設(shè)計的一部分)的輸入對于它們相應(yīng)的寄存器輸入端口穩(wěn)定。當(dāng)隨后在軟件中檢測到時鐘邊沿時,主時鐘寄存器510和硬件中的時鐘邊沿寄存器515激活寄存器518的啟動輸入,使得等待輸入寄存器518的數(shù)據(jù)和其他等待輸入其對應(yīng)寄存器的數(shù)據(jù)一同被時鐘輸入并與系統(tǒng)時鐘同步。如前所述,軟件時鐘實現(xiàn)主要依賴于圖19所示的時鐘設(shè)定以及信號~EVAL,INPUT-EN,CLK-EN和RESET的斷言時序。圖20顯示了根據(jù)本發(fā)明一個實施例的控制圖19所示軟件時鐘邏輯的四狀態(tài)有限狀態(tài)機。在狀態(tài)540,系統(tǒng)空閑或一些輸入/輸出操作正在進行。EVAL信號為邏輯“0”。EVAL信號確定估算周期,其由系統(tǒng)控制器生成,并且可以根據(jù)需要持續(xù)很多個時鐘周期以穩(wěn)定系統(tǒng)中的邏輯。通常,EVAL信號持續(xù)的時間由編譯過程中的布局方案確定并基于最長直接線的長度和最長分段多路傳輸導(dǎo)線(即,TDM電路)的長度。在估算過程中,EVAL信號為邏輯“1”。在狀態(tài)541,時鐘被啟動。CLK-EN信號被斷言為邏輯“1”并且因此,斷言了硬件寄存器模型的啟動信號。在此,硬件寄存器模型中先前的門控數(shù)據(jù)被同步估算,而沒有占用時間擾亂的危險。在狀態(tài)542,當(dāng)INPUT-EN信號被斷言為邏輯“1”時,新的數(shù)據(jù)被啟動。還斷言RESET信號以從硬件寄存器模型中去除啟動信號。但是,通過門控數(shù)據(jù)邏輯網(wǎng)絡(luò)被允許進入硬件寄存器模型的新數(shù)據(jù),將繼續(xù)被傳送到它期望的硬件寄存器模型目的地或已經(jīng)到達其目的地,并等待當(dāng)啟動信號再次被斷言時被時鐘輸入硬件寄存器模型。在狀態(tài)543,傳遞的新數(shù)據(jù)在邏輯中穩(wěn)定,同時EVAL信號保持在邏輯“1”。如上文中結(jié)合圖9(A),9(B)和9(C)描述時分多路轉(zhuǎn)換(TDM)電路時所介紹的,多路復(fù)用導(dǎo)線也為邏輯“1”。當(dāng)EVAL信號被去斷言或設(shè)置為邏輯“0”時,系統(tǒng)返回空閑狀態(tài)540并等待根據(jù)軟件對時鐘邊沿的檢測進行估算。D.FPGA陣列和控制模擬仿真器系統(tǒng)首先基于包括部件類型的一系列控制將用戶電路設(shè)計數(shù)據(jù)編譯到軟件和硬件模型中。在硬件編譯過程中,如結(jié)合圖6所述,系統(tǒng)執(zhí)行映射,布局和布線過程,以最佳的劃分,布局以及互連組成用戶電路設(shè)計的不同部件。使用已知的編程工具,引用位流配置文件或可編程目的文件(.pof)(或者,原二進制文件(.rbf))來重新置包含許多FPGA芯片的硬件板。每個芯片包含對應(yīng)用戶電路設(shè)計的硬件模型的一部分。在一個實施例中,模擬仿真器系統(tǒng)使用4×4的FPGA芯片陣列,總共擁有16個芯片。FPGA芯片的范例包括XilinxXC4000系列FPGA邏輯裝置和AlteraFLEX10K裝置??梢允褂玫腦ilinxXC4000系列FPGA,包括XC4000,XC4000A,XC4000D,XC4000H,XC4000E,XC4000EX,XC4000L,和XC4000XL。特定的FPGA包括XilinxXC4005H,XC4025和Xilinx4028EX。XilinxXC4028EXFPGA在一個單一PCI板上可以驅(qū)動將近50萬個門電路。這些XilinxFPGA的詳細資料可以在它們的數(shù)據(jù)手冊中獲取,[Xilinx,TheProgrammableLogicDataBook](9/96),其內(nèi)容以引用的方式并入本文。對于AlteraFPGA,可以在下列數(shù)據(jù)手冊中獲取詳細資料,[Altera,The1996DataBook](1996年六月),其內(nèi)容以引用的方式并入本文。下面對XC402FPGA進行簡要介紹。每個陣列芯片由一個240引腳的Xilinx芯片組成。組裝有XilinxXC4025芯片的陣列板包含大約440,000個可配置的門電路,并且可以執(zhí)行計算密集的任務(wù)。XilinxXC4025FPGA芯片包含1024個可配置的邏輯塊(CLBs)。每個CLB可以實現(xiàn)32位的異步SRAM,或少量的通用布爾(Boolean)邏輯,以及兩個選通寄存器。在芯片的外圍,具有非選通輸入/輸出寄存器。可以用XC4005H替代XC4025。這是一個成本較低的具有120,000個可配置的門電路的陣列板。XC4005H裝置具有大功率的24mA驅(qū)動電路,但缺少標(biāo)準(zhǔn)XC4000系列的輸入/輸出觸發(fā)器。可以通過公開的數(shù)據(jù)表獲得這些和其他XilinxFPGA的詳細資料,其內(nèi)容以引用的方式并入本文。通過將配置數(shù)據(jù)載入內(nèi)部存儲單元可以定制XilinxXC4000系列FPGA的功能。存儲在這些存儲單元中的值確定了FPGA中的邏輯功能和互連。這些FPGA的配置數(shù)據(jù)可以儲存在片上存儲器中并且可以從外部存儲器載入。FPGA可以從外部串聯(lián)或并聯(lián)PROM讀取配置數(shù)據(jù),或從外部設(shè)備將配置數(shù)據(jù)寫入FPGA??梢詿o數(shù)次的將這些FPGA重新編程,特別是在硬件動態(tài)變化或用戶期望硬件能適應(yīng)不同應(yīng)用時。XC4000系列FPGA一般具有多達1024個CLB。每個CLB具有兩級查找表,其中兩個4輸入查找表(或函數(shù)發(fā)生器F和G)為第三個3輸入查找表(或函數(shù)發(fā)生器H)提供部分輸入,以及兩個觸發(fā)器或鎖存器??梢元毩⒂谶@些觸發(fā)器或鎖存器驅(qū)動這些查找表的輸出。CLB可以實現(xiàn)下列任意布爾(Boolean)函數(shù)的組合(1)具有四個或五個變量的任何函數(shù),(2)具有四個變量的任何函數(shù),具有多達四個無關(guān)變量的任何第二函數(shù),以及具有多達三個無關(guān)變量的任何第三函數(shù),(3)一個具有四個變量的函數(shù)和一個具有六個變量的函數(shù),(4)具有四個變量的任何兩個函數(shù),以及(5)一些具有九個變量的函數(shù)。兩個D型觸發(fā)器或鎖存器可用于寄存CLB輸入或儲存查找表的輸出??梢元毩⒂诓檎冶硎褂眠@些觸發(fā)器??梢允褂肈IN作為或者是這兩個觸發(fā)器或者是鎖存器中的直接輸入并且H1可以通過H函數(shù)發(fā)生器驅(qū)動另一個。在CLB中的每個4輸入函數(shù)發(fā)生器(即,F(xiàn)和G)包含用于進位和借位信號快速生成的專用算術(shù)邏輯,可以將其配置成具有進位輸入和進位輸出的2位加法器。這些函數(shù)發(fā)生器還可被配置成讀/寫隨機存取存儲器(RAM)。4輸入導(dǎo)線線路可以用作為RAM的地址線。AlteraFLEX10K芯片在概念上有些相似。這些芯片為基于SRAM的可編程邏輯器件(PLD),具有多個32位總線。更明確的說,每個FLEX10K100芯片包含大約100,000個門電路,12個嵌入式陣列區(qū)塊(EAB),624個邏輯陣列區(qū)塊(LAB),每個LAB具有8個邏輯元件(LE)(或4,992個LE),5,392個觸發(fā)器或鎖存器,406個輸入/輸出引腳,和總共503個引腳。AlteraFLEX10K芯片包含嵌入式陣列區(qū)塊(EAB)的嵌入式陣列和邏輯陣列區(qū)塊(LAB)的邏輯陣列。可以使用一個EAB實現(xiàn)多種存儲器(如,RAM,ROM,F(xiàn)IFO)和復(fù)雜邏輯功能(如,數(shù)字信號處理器(DSP),微控制器,乘法器,數(shù)據(jù)轉(zhuǎn)換功能,狀態(tài)機)。對于實現(xiàn)存儲器功能來說,EAB提供2,048個位。對于實現(xiàn)邏輯功能來說,EAB提供100到600個門電路。通過LE,可以使用LAB實現(xiàn)中等大小的邏輯塊。每個LAB代表大約96個邏輯門并包含8個LE和一個局部互連。一個LE包含一個4輸入查找表,一個可編程觸發(fā)器,和用于傳送和級聯(lián)函數(shù)的專用信號通路??梢越⒌牡湫偷倪壿嫻δ馨ㄓ嫈?shù)器,地址譯碼器,或小型狀態(tài)機。可以在[Altera,1996DATABOOK](1996年六月)中找到對AlteraFLEX10K芯片更詳細的描述,其內(nèi)容以引用的方式并入本文。數(shù)據(jù)手冊還包含所支持的程序設(shè)計軟件的詳細資料。圖8顯示了4×4FPGA陣列和其相互連接的一個實施例。應(yīng)注意此模擬仿真器的實施例未在FPGA芯片中使用縱橫開關(guān)或局部縱橫開關(guān)連接。FPGA芯片包括第一行中的芯片F(xiàn)11到F14,第二行中的芯片F(xiàn)21到F24,第三行中的芯片F(xiàn)31到F34和第四行中的芯片F(xiàn)41到F44。在一個實施例中,每個FPGA芯片(如,芯片F(xiàn)23)具有下列用于模擬仿真器系統(tǒng)的FPGA輸入/輸出控制器接口的引腳因此,在一個實施例中,每個FPGA芯片僅將41個引腳用于模擬仿真器系統(tǒng)的接口。將結(jié)合圖22進一步討論這些引腳。這些FPGA芯片通過非縱橫開關(guān)或非局部縱橫開關(guān)互連相互連接在一起。芯片間的每個互連,例如芯片F(xiàn)11和芯片F(xiàn)14之間的互連602,代表44個引腳或44根導(dǎo)線線路。在其他實施例中,每個互連代表超過44個的引腳。再在其他實施例中,每個互連代表少于44個的引腳。每個芯片具有六個互連。例如,芯片F(xiàn)11具有互連600到605。同樣,芯片F(xiàn)33具有互連606到611。這些互連排成水平的行和垂直的列。每個互連提供一行內(nèi)兩芯片間或一列內(nèi)兩芯片之間的直接連接。因此,例如,互連600直接連接芯片F(xiàn)11和F13;互連601直接連接芯片F(xiàn)11和F12;互連602直接連接芯片F(xiàn)11和F14;互連603直接連接芯片F(xiàn)11和F31;互連604直接連接芯片F(xiàn)11和F21;以及互連605直接連接芯片F(xiàn)11和F41。同樣的,對于不位于陣列邊緣(如,芯片F(xiàn)11)的芯片F(xiàn)33來說,互連606直接連接芯片F(xiàn)33和F13;互連607直接連接芯片F(xiàn)33和F23;互連608直接連接芯片F(xiàn)33和F34;互連609直接連接芯片F(xiàn)33和F43;互連610直接連接芯片F(xiàn)33和F31;以及互連611直接連接芯片F(xiàn)33和F32。因為芯片F(xiàn)11位于從芯片F(xiàn)13開始的一次跳躍之內(nèi),所以互連600被標(biāo)記為“1”。因為芯片F(xiàn)11位于從芯片F(xiàn)12開始的一次跳躍之內(nèi),所以互連601被標(biāo)記為“1”。同樣的,因為芯片F(xiàn)11位于從芯片F(xiàn)14開始的一次跳躍之內(nèi),所以互連602被標(biāo)記為“1”。同樣的,對于芯片F(xiàn)33,所有的互連都被標(biāo)記為“1”。此互連方案使得每個芯片都可以在兩次“跳轉(zhuǎn)”或互連之內(nèi)與陣列中的其他任何芯片取得聯(lián)系。因此,芯片F(xiàn)11可以通過下列兩條路徑中的任何一條與芯片F(xiàn)33連接(1)互連600到互連606;或(2)互連603到互連610??傊?,路徑可以是(1)首先沿著行,再沿著列,或(2)首先沿著列,再沿著行。盡管圖8顯示了配置成4×4陣列的具有水平和垂直互連的FPGA芯片,但在電路板上的實際物理實現(xiàn)是依靠具有擴展機載電路板的低端和高端組實現(xiàn)的。所以,在一個實施例中,芯片F(xiàn)41-F44和F21-F24在低端組中。芯片F(xiàn)31-F34和F11-F14在高端組中。機載電路板包含芯片F(xiàn)11-F14和芯片F(xiàn)21-F24。因此,為了擴展陣列,可以將含有多個芯片(如,8個)的機載電路板加在組上,并位于當(dāng)前包括芯片F(xiàn)11-F14的行的上方。在另一個實施例中,機載電路板在當(dāng)前包括芯片F(xiàn)41-F44的行的下方擴展陣列。另外的實施例允許其擴展在芯片F(xiàn)14,F(xiàn)24,F(xiàn)34和F44的右邊。再另外的實施例允許其擴展在芯片F(xiàn)11,F(xiàn)21,F(xiàn)31和F41的左邊。圖7顯示了圖8中所示的4×4FPGA(現(xiàn)場可編程門陣列)陣列以“0”和“1”的方式表示的連通度矩陣。利用此連通度矩陣生成由在模擬仿真系統(tǒng)的硬件映射、布局和布線過程中使用的費用函數(shù)產(chǎn)生的布局成本。上文中結(jié)合圖6介紹了費用函數(shù)。舉例而言,芯片F(xiàn)11位于從芯片F(xiàn)13開始的一次跳躍之內(nèi),所以F11-F13的連通度矩陣表列值為“1”。圖21顯示了根據(jù)本發(fā)明一個實施例的單一FPGA芯片的互連輸出接腳。每個芯片具有六組互連,其中每組互連包含特定數(shù)量的引腳。在一個實施例中,每組互連具有44個引腳。每個FPGA芯片的互連按水平(東-西)和垂直(北-南)方向排列。向西的互連組被標(biāo)記為W[430]。向東的互連組被標(biāo)記為E[430]。向北的互連組被標(biāo)記為N[430]。向南的互連組被標(biāo)記為S[430]。這些互連的完整組用于相鄰芯片間的連接;也就是說,這些互連沒有“跳躍”過任何芯片。例如,在圖8中,芯片F(xiàn)33的N[430]為互連607,E[430]為互連608,S[430]為互連609,W[430]為互連611?;氐綀D21,還有兩個附加互連組。一個互連組用于垂直的非鄰接互連-YH[210]和YH[4322]。另一個互連組用于水平的非鄰接互連-XH[210]和XH[4322]。每一組,YH[...]和XH[...],被分成兩部分,其中每半個組包含22個引腳。此配置使得每個芯片的制造都相同。因此,每個芯片都可以與其上方,下方,左方和右方的非鄰接芯片在一次跳躍中互連。此FPGA芯片還顯示了用于全局信號,F(xiàn)PGA總線和JTAG信號的引腳?,F(xiàn)在討論FPGA輸入/輸出控制器。此前在圖10中已簡要介紹了該控制器327。FPGA輸入/輸出控制器管理PCI總線和FPGA陣列之間的數(shù)據(jù)和控制通信。圖22顯示了PCI總線和FPGA陣列之間的FPGA控制器實施例,以及FPGA芯片組。FPGA輸入/輸出控制器700包括CTRL_FPGA單元701、時鐘緩沖器702、PCI控制器703、EEPROM704、FPGA串行配置接口705、邊界掃描測試接口706,以及緩沖器707。提供了所屬
      技術(shù)領(lǐng)域
      的技術(shù)人員熟知的適當(dāng)?shù)墓β?電壓調(diào)節(jié)電路。電源的范例包括Vcc,其與電壓檢測器/調(diào)節(jié)器和讀出放大器連接,在不同環(huán)境下維持電壓。在每個FPGA芯片和其Vcc之間具有快速作用的薄膜保險絲。將Vcc-HI提供給所有FPGA芯片的CONFIG#和LOCAL_BUS708的LINTI#。CTRL_FPGA單元701為FPGA輸入/輸出控制器700的主控制器,負責(zé)處理不同的控制,測試,和讀/寫不同單元和總線間的大量數(shù)據(jù)。CTRL_FPGA單元701與FPGA芯片的低端和高端組連接。FPGA芯片F(xiàn)41-F44和F21-F24(即,低端組)與低端FPGA總線718相連。FPGA芯片F(xiàn)31-F34和F11-F14(即,高端組)與高端FPGA總線719相連。這些FPGA芯片F(xiàn)11-F14,F(xiàn)21-F24,F(xiàn)31-F34和F41-F44對應(yīng)于圖8中相同編號的FPGA芯片。在這些FPGA芯片F(xiàn)11-F14,F(xiàn)21-F24,F(xiàn)31-F34和F41-F44與低端組總線718和高端組總線719之間為厚膜片狀電阻器,用于正確載入。電阻器組713包括例如電阻器716和電阻器717,與低端組總線718相連。電阻器組712包括例如電阻器714和電阻器715,與高端組總線719相連。如果需要擴展,可以在低端組總線718和高端組總線719上FPGA芯片F(xiàn)11和F21的右方安置更多的FPGA芯片。在一個實施例中,通過類似機載電路板720的機載電路板進行擴展。因此,如果這些FPGA芯片組最初僅具有8個FPGA芯片F(xiàn)41-F44和F31-F34,那么可以通過增加機載電路板720實現(xiàn)進一步的擴展,機載電路板720包含在低端組中的FPGA芯片F(xiàn)24-F21和在高端組中的芯片F(xiàn)14-F11。機載電路板720還包括附加低端和高端組總線,和厚膜片狀電阻器。PCI控制器703為FPGA輸入/輸出控制器700和32位PCI總線709之間的主接口。如果PCI總線擴展到64位和/或66MHz,可以適當(dāng)?shù)恼{(diào)整系統(tǒng)而不會偏離本發(fā)明的精神和范圍。將在下文中介紹這些調(diào)整。在系統(tǒng)中可以使用的PCI控制器703的一個示例為PLXTechnology公司的PCI9080或9060。PCI9080具有適當(dāng)?shù)木植靠偩€接口,控制寄存器,F(xiàn)IFO(先入先出),以及對PCI總線的PCI接口。PLXTechnology公司的數(shù)據(jù)手冊,[PCI9080DataSheet](0.93版,1997年2月28日)的內(nèi)容以引用的方式并入本文。PCI控制器703通過LOCAL_BUS708在CTRL_FPGA單元701和PCI總線709之間傳遞數(shù)據(jù)。LOCAL_BUS包括分別用于控制信號,地址信號和數(shù)據(jù)信號的控制總線部分,地址總線部分,以及數(shù)據(jù)總線部分。如果PCI總線擴展到64位,LOCAL_BUS708的數(shù)據(jù)總線部分也可以擴展到64位。PCI控制器703與EEPROM704連接,其包含PCI控制器703的配置數(shù)據(jù)。EEPROM704的一個范例是NationalSemiconductor(國家半導(dǎo)體公司)的93CS46。PCI總線709為FPGA輸入/輸出控制器700提供33MHz的時鐘信號。時鐘信號通過導(dǎo)線線路710被提供給時鐘緩沖器702用于同步目的以及低時滯目的。該時鐘緩沖器702的輸出為33MHz的全局時鐘(GL_CLK)信號,其通過導(dǎo)線線路711被提供給所有的FPGA芯片,并通過導(dǎo)線線路721被提供給CTRL_FPGA單元701。如果PCI總線擴展到66MHz,時鐘緩沖器也將為系統(tǒng)提供66MHz的信號。FPGA串行配置接口705提供配置數(shù)據(jù)以配置FPGA芯片F(xiàn)11-F14,F(xiàn)21-F24,F(xiàn)31-F34和F41-F44。Altera數(shù)據(jù)手冊,[Altera,1996DATABOOK](1996年六月)提供了配制裝置和過程的詳細資料。FPGA串行配置接口705還和LOCAL_BUS708與并行端口721連接。此外,F(xiàn)PGA串行配置接口705通過CONF_INTF導(dǎo)線線路723連接CTRL_FPGA單元701和FPGA芯片F(xiàn)11-F14,F(xiàn)21-F24,F(xiàn)31-F34和F41-F44。邊界掃描測試接口706提供指定的測試命令集的JTAG實施方式,以利用軟件在外部檢測處理器或系統(tǒng)的邏輯單元和電路。此接口706遵守IEEE標(biāo)準(zhǔn)1149.1-1990規(guī)范。參見Altera數(shù)據(jù)手冊,[Altera,1996DATABOOK](1996年六月)和[ApplicationNote39](JTAGBoundary-ScanTestinginAlteraDevices)以獲得更多信息,其內(nèi)容以引用的方式并入本文。邊界掃描測試接口706還與LOCAL_BUS708和并行端口722連接。此外,邊界掃描測試接口706通過BST_INTF導(dǎo)線線路724連接CTRL_FPGA單元701和FPGA芯片F(xiàn)11-F14,F(xiàn)21-F24,F(xiàn)31-F34和F41-F44。CTRL_FPGA單元701分別通過低端組32位總線718和高端組32位總線719,以及緩沖器707和F_BUS725(用于低端組32位FD[310])、F_BUS726(用于高端組32位FD[6332])將數(shù)據(jù)傳入或傳出低端(芯片F(xiàn)41-F44和F21-F24)和高端(芯片F(xiàn)31-F34和F11-F14)FPGA芯片組。一個實施例在低端組總線718和高端組總線719中具有雙倍的PCI總線709的數(shù)據(jù)吞吐量。PCI總線709在33MHz時位寬為32位。吞吐量因此為132MBXs(=33MHz*4字節(jié))。低端組總線718在PCI總線頻率的一半時(33/2MHz=16.5MHz)為32位。高端組總線719在PCI總線頻率的一半時(33/2MHz=16.5MHz)也為32位。64位低端和高端組總線的吞吐量也為132MBXs(=16.5MHz*8字節(jié))。因此,低端和高端組總線的性能比得上PCI總線的性能。換句話說,性能限制在于PCI總線,而不在低端和高端組總線。根據(jù)本發(fā)明一實施例,在每個FPGA芯片中都為每個軟件/硬件邊界地址空間實現(xiàn)若干地址指示器。這些地址指示器通過多路復(fù)用的跨芯片地址指示器鏈路跨越多個FPGA芯片被鏈接在一起。請參見上文結(jié)合圖9,11,12,14和15對地址指示器的描述。為了跨越與給定地址空間有關(guān)的地址指示器鏈路和跨越多個芯片移動字選擇信號,必須具有鏈連導(dǎo)線線路。這些鏈連導(dǎo)線線路用芯片之間的箭頭表示。一個用于低端組的鏈連導(dǎo)線線路為芯片F(xiàn)23和F22之間的導(dǎo)線線路730。另一個用于高端組的鏈連導(dǎo)線線路為芯片F(xiàn)31和F32之間的導(dǎo)線線路731。在低端組末端芯片F(xiàn)21上的鏈連導(dǎo)線線路732與CTRL_FPGA單元701連接,作為LAST_SHIFT_L。在高端組末端芯片F(xiàn)11上的鏈連導(dǎo)線線路733與CTRL_FPGA單元701連接,作為LAST_SHIFT_H。當(dāng)字選擇信號穿過FPGA芯片傳遞時,這些信號LAST_SHIFT_L和LAST_SHIFT_H為其對應(yīng)組的字選擇信號。當(dāng)這些信號LAST_SHIFT_L和LAST_SHIFT_H中的任何一個將邏輯“1”提供給CTRL_FPGA單元701時,表明字選擇信號前進到了相應(yīng)組的末端芯片。CTRL_FPGA單元701通過下列導(dǎo)線線路向FPGA芯片傳入或從FPGA芯片傳出信號,導(dǎo)線線路734上為寫信號(F_WR),導(dǎo)線線路735上為讀信號(F_RD),導(dǎo)線線路736上為DATA_XSFR信號,導(dǎo)線線路737上為EVAL信號,導(dǎo)線線路738上為SPACE[20]信號。CTRL_FPGA單元701接收導(dǎo)線線路739上的EVAL_REQ#信號。寫信號(F_WR),讀信號(F_RD),DATA_XSFR信號和SPACE[20]信號共同服務(wù)于FPGA芯片中的地址指示器。利用寫信號(F_WR),讀信號(F_RD)和SPACE[20]信號為與由SPACE指數(shù)(SPACE[20])確定的所選地址空間相關(guān)的地址指示器生成MOVE信號。利用DATA_XSFR信號初始化地址指示器并開始逐字的數(shù)據(jù)傳輸過程。如果任何FPGA芯片斷言EVAL_REQ#信號,則利用此信號重新開始估算循環(huán)。例如,為估算數(shù)據(jù),通PCI總線將數(shù)據(jù)從主處理器計算站的主存儲器傳輸?shù)交驅(qū)懭隖PGA。在傳輸?shù)淖詈?,開始估算循環(huán),這包括地址指示器的初始化和軟件時鐘的操作以推動估算過程。但是,由于多種原因,特定的FPGA芯片可能需要再次估算數(shù)據(jù)。此FPGA芯片斷言EVAL_REQ#信號并且CTRL_FPGA單元701再次開始估算循環(huán)。圖23顯示了圖22所示的CTRL_FPGA單元701和緩沖器707的詳細示圖。圖23與圖22使用相同的關(guān)于CTRL_FPGA單元701的輸入/輸出信號及其對應(yīng)的編號。但是,圖22中未顯示的其他信號和導(dǎo)線/總線線路將由新的編號表示,例如SEM_FPGA輸出啟動1016,局部中斷輸出(局部INTO)708a,局部讀/寫控制信號708b,局部地址總線708c,局部中斷輸入(局部INTI#)708d,以及局部數(shù)據(jù)總線708e。CTRL_FPGA單元701包含傳輸完成檢查邏輯(XSFR_DONE邏輯)1000,估算控制邏輯(EVAL邏輯)1001,DMA描述符塊1002,控制寄存器1003,估算計時器邏輯(EVAL計時器)1004,地址譯碼器1005,寫標(biāo)志序列發(fā)生器邏輯1006,F(xiàn)PGA芯片讀/寫控制邏輯(SEM_FPGAR/W邏輯)1007,多路分離器和鎖存器(DEMUX邏輯)1008,以及鎖存器1009-1012,其對應(yīng)于圖22中的緩沖器707。導(dǎo)線/總線721上的一個全局時鐘信號(CTRL_FPGA_CLK)被提供給CTRL_FPGA單元701中所有的邏輯元件/塊。傳輸完成檢查邏輯(XSFR_DONE邏輯)1000接收LAST_SHIFT_H733,LAST_SHIFT_L732和局部INTO708a。XSFR_DONE邏輯1000通過導(dǎo)線/總線1013將傳輸完成信號(XSFR_DONE)輸出到EVAL邏輯1001?;贚AST_SHIFT_H733和LAST_SHIFT_L732的接收,XSFR_DONE邏輯1000將檢查數(shù)據(jù)傳輸?shù)耐瓿?,使得可以根?jù)需要開始估算循環(huán)。EVAL邏輯1001接收導(dǎo)線/總線739上的EVAL_REQ#信號和導(dǎo)線/總線1015上的WR_XSFR/RD_XSFR信號,外加導(dǎo)線/總線1013上的傳輸完成信號(XSFR_DONE)。EVAL邏輯1001生成兩個輸出信號,導(dǎo)線/總線1014上的開始EVAL和導(dǎo)線/總線736上的DATA_XSFR。EVAL邏輯表明FPGA總線和PCI總線之間的數(shù)據(jù)傳輸將于何時開始初始化地址指示器。當(dāng)數(shù)據(jù)傳輸完成后它接收XSFR_DONE信號。WR_XSFR/RD_XSFR信號表明傳輸是讀還是寫操作。一旦輸入/輸出周期結(jié)束(或在一個輸入/輸出周期開始之前),EVAL邏輯可以開始估算循環(huán)伴隨啟動EVAL計時器的EVAL信號。EVAL計時器規(guī)定了估算循環(huán)的持續(xù)時間并通過保持估算循環(huán)在所需要的時間內(nèi)有效以穩(wěn)定對所有寄存器和組合部件的數(shù)據(jù)傳遞,來確保軟件時鐘機制的成功操作。DMA描述符塊1002接收導(dǎo)線/總線1019上的局部總線地址,導(dǎo)線/總線1020上的來自地址譯碼器1005的寫啟動信號,以及導(dǎo)線/總線1029上的經(jīng)由局部數(shù)據(jù)總線708e的局部總線數(shù)據(jù)。其輸出為導(dǎo)線/總線1046上的DMA描述符輸出,其通過導(dǎo)線/總線1045進入DEMUX邏輯1008。DMA描述符塊1002包含對應(yīng)于主存儲器內(nèi)信息的描述符塊信息,包括PCI地址,局部地址,傳輸計數(shù),傳輸方向,和下一個描述符塊的地址。主機將在PCI控制器的描述符指示寄存器中建立最初描述符塊的地址??梢酝ㄟ^設(shè)置控制位啟動傳輸。PCI載入第一描述符塊并開始數(shù)據(jù)傳輸。PCI控制器繼續(xù)載入描述符塊并傳輸數(shù)據(jù)直到其檢測到相鏈接的位的末端位于下一個描述符指示寄存器中。地址譯碼器1005接收并傳輸總線708b上的局部R/W控制信號,接收并傳輸總線708c上的局部地址信號。地址譯碼器1005在導(dǎo)線/總線1020上生成輸入DMA描述符1002的寫啟動信號,在導(dǎo)線/總線1021上生成輸入控制寄存器1003的寫啟動信號,在導(dǎo)線/總線738上生成FPGA地址SPACE指數(shù),在導(dǎo)線/總線1027上生成控制信號,以及在導(dǎo)線/總線1024上生成輸入DEMUX邏輯1008的另一個控制信號??刂萍拇嫫?003接收導(dǎo)線/總線1021上的來自地址譯碼器1005的寫啟動信號,以及導(dǎo)線/總線1030上的經(jīng)由局部數(shù)據(jù)總線708e的數(shù)據(jù)??刂萍拇嫫?003在導(dǎo)線/總線1015上生成輸入EVAL邏輯1001的WR_XSFR/RD_XSFR信號,在導(dǎo)線/總線1041上生成輸入EVAL計時器1004的設(shè)置EVAL時間信號,以及在導(dǎo)線/總線1016上生成輸入FPGA芯片的SEM_FPGA輸出啟動信號。系統(tǒng)使用SEM_FPGA輸出啟動信號選擇性的接通或激活每個FPGA芯片。系統(tǒng)通常一次激活一個FPGA芯片。EVAL計時器1004接收導(dǎo)線/總線1014上的開始EVAL信號,以及接收導(dǎo)線/總線1041上的設(shè)置EVAL時間信號。EVAL計時器1004在導(dǎo)線/總線737上生成EVAL信號,在導(dǎo)線/總線1017上生成估算完成(EVAL_DONE)信號,以及在導(dǎo)線/總線1018上生成輸入寫標(biāo)志序列發(fā)生器邏輯1006的開始寫標(biāo)志信號。在一個實施例中,EVAL計時器的位長為6位。寫標(biāo)志序列發(fā)生器邏輯1006接收導(dǎo)線/總線1018上的來自EVAL計時器1004的開始寫標(biāo)志信號。寫標(biāo)志序列發(fā)生器邏輯1006在導(dǎo)線/總線1022上生成輸入局部R/W導(dǎo)線/總線708b的局部R/W控制信號,在導(dǎo)線/總線1023上生成輸入局部地址總線708c的局部地址信號,在導(dǎo)線/總線1028上生成輸入局部數(shù)據(jù)總線708e的局部數(shù)據(jù)信號,在導(dǎo)線/總線708d上生成局部INTI#。一旦收到開始寫標(biāo)志信號,寫標(biāo)志序列發(fā)生器邏輯開始控制信號的序列以開始存儲器對PCI總線的寫周期。SEM_FPGAR/W控制邏輯1007接收導(dǎo)線/總線1027上的來自地址譯碼器1005的控制信號,以及導(dǎo)線/總線1047上的經(jīng)由局部R/W控制總線708b的局部R/W控制信號。SEM_FPGAR/W控制邏輯1007在導(dǎo)線/總線1035上生成輸入鎖存器1009的啟動信號,在導(dǎo)線/總線1025上生成輸入DEMUX邏輯1008的控制信號,在導(dǎo)線/總線1037上生成輸入鎖存器1011的啟動信號,在導(dǎo)線/總線1040上生成輸入鎖存器1012的啟動信號,在導(dǎo)線/總線734上生成F_WR信號,以及在導(dǎo)線/總線735上生成F_RD信號。SEM_FPGAR/W控制邏輯1007控制向/從FPGA低端組和高端組總線的不同寫和讀數(shù)據(jù)傳輸。DEMUX邏輯1008為一個多路復(fù)用器和一個鎖存器,其接收四組輸入信號并在導(dǎo)線/總線1026上向局部數(shù)據(jù)總線708e輸出一組信號。選擇器信號為導(dǎo)線/總線1025上來自SEM_FPGAR/W控制邏輯1007的控制信號和導(dǎo)線/總線1024上來自地址譯碼器1005的控制信號。DEMUX邏輯1008接收來自導(dǎo)線/總線1042上的EVAL_DONE信號,導(dǎo)線/總線1043上的XSFR_DONE信號,以及導(dǎo)線/總線1044上的EVAL信號的一組輸入信號。此單一信號組被標(biāo)記為編號1048。在任何一個時間周期,這三個信號EVAL_DONE,XSFR_DONE,EVAL中只有一個將被提供給DEMUX邏輯1008用于可能的選擇。DEMUX邏輯1008還接收導(dǎo)線/總線1045上來自DMA描述符塊1002的DMA描述符輸出信號,導(dǎo)線/總線1039上來自鎖存器1012的數(shù)據(jù)輸出,以及導(dǎo)線/總線1034上來自鎖存器1010的另一個數(shù)據(jù)輸出,作為其他三組輸入信號。CTRL_FPGA單元701與低端和高端FPGA組總線之間的數(shù)據(jù)緩沖器包括鎖存器1009到1012。鎖存器1009接收導(dǎo)線/總線1032上經(jīng)由導(dǎo)線/總線1031和局部數(shù)據(jù)總線708e的局部總線數(shù)據(jù),以及導(dǎo)線/總線1035上來自SEM_FPGAR/W控制邏輯1007的啟動信號。鎖存器1009通過導(dǎo)線/總線1033將數(shù)據(jù)輸出到鎖存器1010。鎖存器1010接收導(dǎo)線/總線1033上來自鎖存器1009的數(shù)據(jù),以及導(dǎo)線/總線1036上經(jīng)由導(dǎo)線/總線1037來自SEM_FPGAR/W控制邏輯1007的啟動信號。鎖存器1010通過導(dǎo)線/總線725將數(shù)據(jù)輸出到FPGA低端組總線并通過導(dǎo)線/總線1034輸出到DEMUX邏輯1008。鎖存器1011接收導(dǎo)線/總線1031上來自局部數(shù)據(jù)總線708e的數(shù)據(jù),以及導(dǎo)線/總線1037上來自SEM_FPGAR/W控制邏輯1007的啟動信號。鎖存器1011通過導(dǎo)線/總線726將數(shù)據(jù)輸出到FPGA高端組總線并通過導(dǎo)線/總線1038輸出到鎖存器1012。鎖存器1012接收導(dǎo)線/總線1038上來自鎖存器1011的數(shù)據(jù),以及導(dǎo)線/總線1040上來自SEM_FPGAR/W控制邏輯1007的啟動信號。鎖存器1012通過導(dǎo)線/總線1039將數(shù)據(jù)輸出到DEMUX邏輯1008。圖24顯示了4×4FPGA陣列,其和FPGA組的關(guān)系,以及擴展能力。類似圖8,圖24顯示了同樣的4×4陣列。也顯示了CTRL_FPGA單元740。低端組芯片(芯片F(xiàn)41-F44和F21-F24)和高端組芯片(芯片F(xiàn)31-F34和F11-F14)以交替的方式排列。因此,F(xiàn)PGA芯片行從底部行到頂部行依次是低端組--高端組--低端組--高端組。數(shù)據(jù)傳輸鏈按預(yù)定順序沿各組形成。箭頭741表示低端組的數(shù)據(jù)傳輸鏈。箭頭742表示高端組的數(shù)據(jù)傳輸鏈。箭頭743表示JTAG配置鏈,其經(jīng)過整個陣列的所有16個芯片,從F41到F44,F(xiàn)34到F31,F(xiàn)21到F24,F(xiàn)14到F11,再回到CTRL_FPGA單元740??梢岳脵C載電路板完成擴展。假設(shè)圖24中原始FPGA芯片陣列包括F41-F44和F31-F34,可以由機載電路板745增加另外兩行芯片F(xiàn)21-F24和F11-F14。機載電路板745還具有適當(dāng)?shù)目偩€以擴展組??梢詫⒏嗟臋C載電路板安置于其他電路板的頂部以完成陣列中進一步的擴展。圖25顯示了硬件啟動方法的一個實施例。步驟800開始執(zhí)行通電操作或執(zhí)行熱啟動程序。在步驟801中,PCI控制器讀取EEPROM以進行初始化。步驟802根據(jù)初始化次序?qū)CI控制器寄存器進行讀和寫操作。步驟803對陣列中所有的FPGA芯片進行邊界掃描測試。步驟804配置FPGA輸入/輸出控制器中的CTRL_FPGA單元。步驟805對CTRL_FPGA單元中的寄存器進行讀和寫操作。步驟806為DMA主讀/寫模式建立PCI控制器。此后,傳輸并校驗數(shù)據(jù)。步驟807利用試驗設(shè)計配置所有的FPGA芯片并驗證其正確性。在步驟808,硬件已準(zhǔn)備好可供使用。此時,系統(tǒng)假設(shè)所有步驟的結(jié)果都確認了硬件的可操作性,否則,系統(tǒng)不會到達步驟808。E.使用更密集FPGA芯片的替代實施例在本發(fā)明的一實施例中,F(xiàn)PGA邏輯裝置安裝在單個電路板上。如果使用戶電路設(shè)計模型化所需要的FPGA邏輯裝置比安裝在電路板上的要多,可提供帶有更多FPGA邏輯裝置的多個電路板。能夠在模擬系統(tǒng)中增加更多的電路板是本發(fā)明的一個優(yōu)良特點。在該實施例中,使用更密集的FPGA芯片,(如Altera10k130v和10k250v)。這些芯片的使用改變了電路板的設(shè)計,以致每個電路板上僅用四個更密集的FPGA芯片替代了八個較低密度的FPGA芯片(如Altera10k100)。這樣,我們就需要解決這些電路板和模擬系統(tǒng)主板之間的耦聯(lián)問題,在它們的互連和接線方案中必須作出對底板缺失的補償。模擬系統(tǒng)中的FPGA陣列是通過一個獨特的電路板互連結(jié)構(gòu)安裝在主板上的。每個芯片可能最多有8套互連,這些互連的配置是依照在同一電路板內(nèi)和不同電路板之間,鄰近的直接相鄰互連(即N[730]、S[730]、W[730]、E[730])和單跳躍相鄰的互連(即NH[270]、SH[270]、XH[360]、XH[7237]),不包括局部總線連接。每個芯片能夠直接和鄰近的芯片互連或通過單跳躍和非鄰近的位于上、下、左或右的芯片互連。陣列在X方向(東到西)下呈環(huán)形,而在Y方向(北到南)下則呈網(wǎng)格狀。這些互連能在單獨的電路板中獨立地連接邏輯裝置和其它部件。然而,在不同的電路板之間是通過電路板間的連接器將這些電路板和互連器連接在一起,并在(1)通過主板的PCI總線和陣列電路板之間(2)任何兩個陣列電路板之間傳輸數(shù)據(jù)。每個電路板包含自帶的使FPGA邏輯裝置互相聯(lián)系的FPGA總線FD[630]、SRAM存儲器裝置和CTRL_FPGA單元(FPGA輸入/輸出控制器)。FPGA總線FD[630]不是安裝在多個電路板之間的。雖然FPGA互連和FPGA總線沒有關(guān)聯(lián),但是這些互連在多個電路板之間建立起FPGA邏輯裝置之間的連接()。而另一方面,所有的電路板間設(shè)有局部總線。主板連接器將電路板連到主板上,且因此連接到PCI總線、電源及接地。對于有些電路板來說,主板連接器并不是作為與主板的直接連接之用的。在一個帶六個電路板的構(gòu)造中,只有編號為1、3、5的電路板是直接連到主板上的,而編號為2、4和6的電路板是通過鄰近的電路板連接到主板上的。因此,每個相隔的電路板是直接連到主板上的并且這些電路板的互連器和局部總線是通過安裝在焊接面到元件面上的板間連接器連接在一起的。PCI信號僅通過其中的一個電路板(通常是第一個電路板)進行傳輸。電源和接地連接到其它的主板連接器用于那些電路板。位于焊接面與元件面上的各種電路板間連接器使PCI總線部件、FPGA邏輯裝置、存儲器裝置以及各種模擬系統(tǒng)控制電路之間進行相互通訊。圖56所示的是根據(jù)本發(fā)明一實施例的一個FPGA芯片陣列的高層結(jié)構(gòu)圖。上面所描述的CTRL_FPGA單元1200是通過1209線路連接到1210總線上的。在一個實施例中,CTRL_FPGA單元1200是FPGA芯片(如Altera10K50芯片)形式的可編程邏輯裝置(PLD)??偩€1210使CTRL_FPGA單元1200連接到其它模擬陣列電路板(如果有的話)和其它芯片(如PCI控制器、EEPROM、時鐘緩沖器等)。圖56還顯示了邏輯裝置和存儲器裝置形式的其它主要功能塊。在一實施例中,邏輯裝置是FPGA芯片(如Altera10K130V或10K250V芯片)形式的可編程邏輯裝置(PLD)。10K130V或10K250V芯片是引腳兼容的,兩者都是599引腳的PGA包。因此與上面所示在陣列中帶8個AlteraFLEX10K100芯片的實施例不同的是,在此實施例中只使用4個AlteraFLEX10K130芯片。本發(fā)明的一實施例描述了帶有這4個邏輯裝置以及它們的互連的電路板。由于用戶設(shè)計被模型化和配置成該陣列中任何數(shù)目的這些邏輯裝置中,F(xiàn)PGA邏輯裝置之間的通訊必須能將用戶電路設(shè)計的一部分連接到另一部分。而且,最初的配置信息和邊界掃描測試也是由FPGA之間的互連所支持的。最后,還需要保證模擬系統(tǒng)與FPGA邏輯裝置之間必要的模擬系統(tǒng)控制信號可是訪問的。圖36所示的是本發(fā)明所使用的一FPGA邏輯裝置的硬件結(jié)構(gòu)。此FPGA邏輯裝置1500包括102個頂部輸入/輸出引腳、102個底部輸入/輸出引腳、111個左側(cè)輸入/輸出引腳和110個右側(cè)輸入/輸出引腳。這樣,互連引腳總數(shù)就是425個。而且,還有以下裝置專用的附加的45個輸入/輸出引腳GCLK、FPGA總線FD[310](對于高端組,專用FD[6332])、F_RD、F_WR、DATAXSFR、SHIFTIN、SHIFTOUT、SPACE[20]、EVAL、EVAL_REQ_N、DEVICE_OE(CRTL_FPGA單元發(fā)出的開啟FPGA邏輯裝置的輸出引腳的信號)和DEV_CLRN(CRTL_FPGA單元發(fā)出的在開始模擬前清除所有內(nèi)部觸發(fā)器的信號)。這樣,這些互連就負載著傳輸于任何兩個FPGA邏輯裝置之間的任何數(shù)據(jù)和控制信號。剩下的引腳是為電源和接地專用的。圖37所示的是根據(jù)本發(fā)明的一實施例的一個獨立FPGA芯片的FPGA互連輸出接腳。每個芯片1510最多可以有8組互連,每組包含特定數(shù)目的引腳。根據(jù)它們在電路板上的位置,一些芯片可能包含少于8組互連。在優(yōu)選實施例中,雖然根據(jù)它們在電路板上的不同位置,芯片與芯片間所使用的具體互連組有所不同,但是所有的芯片都具有7組互連。每個FPGA芯片的互連是水平(東到西)和垂直(北到南)安裝的。西向的互連組標(biāo)為W[730],東向的互連組標(biāo)為E[730],北向的互連組標(biāo)為N[730],而南向的互連組標(biāo)為S[730]。這些互連的完整組只能連接到鄰近的芯片上而不能跳過任何一個芯片。例如在圖39中,芯片1570的N[730]為互連1540,W[730]為互聯(lián)裝置1542,E[730]為互連1543,S[730]為互連1545。注意該FPGA芯片1570,即FPGA2芯片,有全部的四組鄰近互連--N[730]、S[730]、W[730]和E[730]。FPGA0西向的互連通過線路1539以圓環(huán)方式與FPGA3東向互連進行連接。這樣,線路1539將1569(FPGA0)與1572(FPGA3)直接連接起來的方法與把電路板的東西兩端環(huán)繞并連接起來的方式類似。回到圖37,這里還有四組“跳躍”互連。其中兩組互連是為非鄰近的垂直排列的互連而設(shè)置的,即NH[270]和SH[270]。例如,圖39中FPGA2芯片1570所示NH互連1541及SH互連1546。再回到圖37,另外兩組互連是為非鄰近的水平排列的互連而設(shè)置的,即XH[360]和XH[7237]。例如,圖37中FPGA2芯片1570所示XH互連1544。還回到圖37,垂直的跳躍互連NH[270]和SH[270]各有28個引腳。而水平的互連XH[360]和XH[7237]則有73個引腳。水平連接(XH[360]和XH[7237])的引腳可被用在西面(如圖39中FPGA3芯片1576的互連1605)上和/或東面(如圖39中FPGA0芯片1573的互連1602)上。這個配置使得每個芯片的生產(chǎn)變得相同。這樣,每個芯片能夠通過單跳躍連接到一個位于上、下、左和右的非鄰近芯片上。圖39顯示的是根據(jù)本發(fā)明的一個實施例位于一個單個主板上的六個電路板的一個直接鄰近和單跳躍鄰近的FPGA陣列設(shè)計。此圖是用來演示兩種可能的配置,即一個六電路板系統(tǒng)和一個雙電路板系統(tǒng)。位置指示器1550顯示了“Y”方向是北到南而“X”方向是東到西。在X方向下陣列呈環(huán)形,而在Y方向下陣列呈網(wǎng)格狀。在圖39中只顯示了高層的電路板、FPGA邏輯裝置、互連以及連接器,而沒有顯示主板和其它的支持部件(如SRAM存儲器裝置)和導(dǎo)線線路(如FPGA總線)。注意圖39給出了電路板及其部件、互連和連接器的陣列視圖。實際的物理配置和安裝包括將這些電路板放置到各自的從元件面到焊接面的邊緣上。大約有一半的電路板是直接連接到主板上的而另一半則是連接到各自相鄰的電路板上的。在本發(fā)明六電路板的實施例中,六個電路板1551(電路板1)、1552(電路板2)、1553(電路板3)、1554(電路板4)、1555(電路板5)和1556(電路板6)是作為圖1中可重新配置硬件單元20的一部分安裝在主板(未顯示)上的。每個電路板包含幾乎完全相同的一套部件和連接器。這樣,為演示方便起見第六電路板1556包含F(xiàn)PGA邏輯裝置1565到1568和連接器1557到1560和1581;第五電路板1555包含F(xiàn)PGA邏輯裝置1569到1572和連接器1582和1583;第四電路板1554包含F(xiàn)PGA邏輯裝置1573到1576和連接器1584和1585。在此六電路板的配置中,第一電路板1551和第六電路板1556為包含Y-網(wǎng)格終端,如第六電路板1556上的R-包終端1557到1560和第一電路板1551上的終端1591到1594的“書擋”電路板。還有位于中間的電路板(即1552(電路板2)、1553(電路板3)、1554(電路板4)和1555(電路板5))形成完整陣列。正如上面闡述的,這些互連的配置是依照在同一個電路板內(nèi)和不同電路板之間鄰近的直接相鄰互連(即N[730]、S[730]、W[730]、E[730])和單跳躍相鄰的互連(即NH[270]、SH[270]、XH[360]、XH[7237]),不包括局部總線連接。此互連能夠獨立連接在一個單獨的電路板內(nèi)的邏輯裝置和其它部件。然而電路板間連接器1581到1590能夠使不同電路板(第一電路板到第六電路板)上的邏輯裝置進行通訊。FPGA總線是電路板間連接器1581到1590的一部分。這些連接器1581到1590是600引腳連接器,它們?yōu)閮蓚€相鄰陣列電路板負載520個信號和80個電源/接地連接。在圖39中,不同的電路板對于電路板間連接器1581到1590是以不對稱的方式連接的。例如,存在于電路板1551和1552之間的是電路板間連接器1589和1590?;ミB1515將FPGA邏輯裝置1511和1577連接在一起而依照連接器1589和1590此連接是對稱的。然而互連1603則是不對稱的。它將第三電路板1553中的一個FPGA邏輯裝置連接到電路板1551中FPGA邏輯裝置1577上。相對于連接器1589和1590而言,這種連接是不對稱的。類似地,相對于連接器1589和1590而言,互連1600也是不對稱的。因為它將FPGA邏輯裝置1577連接到終端1591上,而此終端則是通過互連1601連接到FPGA邏輯裝置1577。其它類似的互連進一步表現(xiàn)了這種不對稱。這種不對稱導(dǎo)致了互連通過電路板間的連接器,按照兩種不同的方式進行布線----一種是象互連器1515的對稱型而另一種則是象互連器1603和1600的不對稱型。圖40(A)和40(B)顯示了互連布線方案。在圖39中,一個單獨電路板內(nèi)的直接相鄰連接的一個例子是互連1543,它將電路板1555上的邏輯裝置1570和邏輯裝置1571沿著東西方向連接起來。一個單獨電路板內(nèi)的直接相鄰連接的一個另外的例子是互連1607,它將電路板1554上的邏輯裝置1573和邏輯裝置1576連接起來。兩個不同電路板間的直接相鄰連接的一個例子是互連1545,它通過連接器1583和1584將電路板1555上的邏輯裝置1570和電路板1554上的邏輯裝置1574沿著南北方向連接起來。在此,兩個電路板間連接器1583和1584是用來傳輸信號的。一個單獨電路板內(nèi)的單跳躍互連的一個例子是互連1544,它將電路板1555上的邏輯裝置1570和邏輯裝置1572沿著東西方向連接起來。兩個不同電路板間單跳躍互連的一個例子是互連1599,它通過連接器1581到1584將電路板1556上的邏輯裝置1565和電路板1554上的邏輯裝置1573連接起來。在此,四個電路板間連接器1581到1584是用來傳輸信號的。一些電路板,尤其是位于主板南北端的那些電路板也包含用來終止一些連接的10歐姆R包(R-pack)。這樣,第六電路板1556包括10歐姆R包連接器1557到1560而第一電路板1551包括10歐姆R包連接器1591到1594。第六電路板1556包含的R包連接器1557用于互連1970和1971,R包連接器1558用于互連1972和1541,R包連接器1559用于互連1973和1974,而R包連接器1560用于互連1975和1976。此外,互連1561到1564不與任何裝置相連。這些南北互連與東西的圓環(huán)式互連不同,它們是網(wǎng)格式的。這些網(wǎng)格終端增加了南北方向直接互連的數(shù)目。否則位于FPGA網(wǎng)格南北兩端的互連將會被浪費。例如,F(xiàn)PGA邏輯裝置1511和1577除了有一組直接互連1515,還具有通過R包1591和互連1600和1601的附加的互連。也就是說,R包1591將互連1600和1601連接在一起。這增加了FPGA邏輯裝置1511和1577之間直接連接的數(shù)目。還配置了電路板間的連接。電路板1551上的邏輯裝置1577、1578、1579和1580通過互連1515、1516、1517和1518和電路板間連接器1589和1590與電路板1552上的邏輯裝置1511、1512、1513和1514相連。這樣,互連1515通過連接器1589和1590將電路板1552上的邏輯裝置1511與電路板1551上的邏輯裝置1577連接起來;1516通過連接器1589和1590將電路板1552上的邏輯裝置1512與電路板1551上的邏輯裝置1578連接起來;1517通過連接器1589和1590將電路板1552上的邏輯裝置1513與電路板1551上的邏輯裝置1579連接起來;1518通過連接器1589和1590將電路板1552上的邏輯裝置1514與電路板1551上的邏輯裝置1580連接起來。一些互連如1595、1596、1597和1598并不與任何裝置相連因為它們沒有被使用到。然而正如以上所述,對于邏輯裝置1511和1577而言,R包1591將互連1600和1601連接起來增加了南北方向互連的數(shù)目。本發(fā)明的一個雙電路板的實施例如圖44所示。在本發(fā)明的雙電路板實施例中,使模擬系統(tǒng)的用戶設(shè)計模型化只需兩個電路板。正如圖39中的六電路板配置,圖44的雙電路板的配置是使用的與之相同的作為“書擋”的兩個電路板,即電路板1551和電路板1556。它們位于主板上并作為圖1中可重新配置硬件單元的一部分。在圖44中,其中一個書擋電路板是第一電路板,另一個則是第六電路板。圖44所用的第六電路板顯示了與圖39的第六電路板的相似之處。也就是說,象第一和第六電路板這樣的書擋電路板應(yīng)該有用于南北網(wǎng)格連接所必需的終端。這個雙電路板配置包含第一電路板1551上的四個FPGA邏輯裝置1577(FPGA0),1578(FPGA1),1579(FPGA2)和1580(FPGA3)和第六電路板1556上的四個FPGA邏輯裝置1565(FPGA0),1566(FPGA1),1567(FPGA2)和1568(FPGA3)。這兩塊電路板通過電路板間連接器1581和1590連接在一起。這些電路板包含用來終止一些連接的10歐姆R包。在雙電路板的實施例中,兩塊電路板都是“書擋”板。電路板1551包含作為電阻終端的10歐姆R包連接器1591,1592,1593和1594。另一塊電路板也包含10歐姆R包連接器1557到1560。電路板1551和電路板1556上分別有用于電路板間通訊的連接器1590和1581。連接兩塊電路板的互連,如1600,1971,1977,1541和1540,是穿過連接器1590和1581的;換句話說,電路板間連接器1590和1581使互連1600,1971,1977,1541和1540能夠完成不同電路板上部件之間的連接。電路板間連接器1590和1581傳輸著FPGA總線上的控制數(shù)據(jù)和控制信號。在四電路板的配置中,第一電路板和第六電路板是書擋電路板,而第二電路板1552和第三電路板1553(見圖39)則是中間電路板。當(dāng)依照本發(fā)明將其與主板連接時(將參照圖38(A)和圖38(B)討論),電路板1與電路板2成對而電路板3與電路板6成對。在六電路板的配置中,如上所述第一電路板和第六電路板是書擋電路板而第二電路板1552、第三電路板1553、第四電路板1554和第五電路板1555(見圖39)是中間電路板。當(dāng)依照本發(fā)明與主板連接時(將參照圖38(A)和圖38(B)討論),電路板1與電路板2成對,電路板3與電路板4成對而電路板5與電路板6成對。必要時可以安裝更多的電路板。然而不管將要增加到系統(tǒng)中的電路板的數(shù)目如何,書擋電路板(如圖39中的電路板1和電路板6)應(yīng)該有必備的終端來完成網(wǎng)格狀陣列的連接。在一實施例中,最小配置是如圖44所示的雙電路板型??赏ㄟ^增加雙電路板而增加電路板的數(shù)量。如果最初的配置是第一電路板和第六電路板,那么將來對四電路板配置的改動就包括如上所述的將第六電路板移出一些,將第一電路板和第二電路板配對,以及將第三電路板和第六電路板配對。正如以上描述的,每個邏輯裝置都是連接到鄰近的邏輯裝置和非鄰近單跳躍的邏輯裝置。這樣,在圖39和圖44中邏輯裝置1577通過互連1547連接到鄰近的邏輯裝置1578。邏輯裝置1577還通過單跳躍互連1548連接到非鄰近的邏輯裝置1579。然而因為互連1549提供連接的環(huán)繞的環(huán)形配置,邏輯裝置1580與邏輯裝置1577被認為是鄰近的。圖42顯示的是一個單獨電路板上部件和連接器的頂視圖(元件面)。在本發(fā)明的一個實施例中,模型化模擬系統(tǒng)中的用戶設(shè)計只需一個電路板。在其它的實施例中,多個電路板(即至少兩個電路板)是必需的。因此,例如圖39顯示了六個電路板1551到1556通過不同的600引腳連接器1581到1590連接在一起。在頂端和底端,電路板1551,電路板1556分別被另一組10歐姆R包中斷?;氐綀D42,電路板1820包含四個FPGA邏輯裝置1822(FPGA0),1823(FPGA1),1824(FPGA2)和(FPGA3)。另外還有兩個SRAM存儲器裝置1828和1829。這兩個SRAM存儲器裝置是用來從該電路板上邏輯裝置映射存儲區(qū)塊的;也就是說,本發(fā)明的存儲器模擬將該電路板上邏輯裝置的存儲區(qū)塊映射到此電路板的SRAM存儲器裝置中。其它的電路板包含完成類似映射操作的其它邏輯裝置和存儲器裝置。在一實施例中,存儲器映射是依賴于電路板的;也就是說,第一電路板的存儲器映射只限于該電路板上的邏輯裝置和存儲器裝置而與其它電路板無關(guān)。在其它的實施例中存儲器映射是獨立于電路板的。這樣只需要使用幾個大的存儲器裝置將存儲區(qū)塊從一個電路板上的邏輯裝置映射到另一個電路板的存儲器裝置上。還配置了發(fā)光二極管(LED)1821用來指示一些現(xiàn)象。根據(jù)本發(fā)明的一實施例,LED所顯示的內(nèi)容如下表A所示表ALED顯示各種其它的控制芯片如PLXPCI控制器1826和CTRL_FPGA單元1827控制著FPGA間和PCI的通訊。一個可能被用在系統(tǒng)內(nèi)的PLXPCI控制器1826的例子是PLXTechnology的PCI9080或9060。PCI9080有合適的局部總線接口,控制寄存器,F(xiàn)IFO以及到PCI總線的PCI接口。PLXTechnology的數(shù)據(jù)手冊PCI9080數(shù)據(jù)表DataSheet(1997年2月28日,0.93版)的內(nèi)容以引用的方式并入本文。CTRL_FPGA單元1827的一個例子是FPGA芯片形式的可編程邏輯裝置(PLD),如Altera10K50芯片。在多電路板配置中,只有與PCI總線連接的第一電路板包含PCI控制器。連接器1830將電路板1820連接到主板(未顯示出來),并因此連接到PCI總線、電源及接地。在某些電路板中,連接器1830不用于與主板直接連接。這樣在一個雙電路板的配置中,只有第一電路板是與主板直接相連的。在一個六電路板的配置中,只有電路板1,3,5是與主板直接相連的而電路板2,4,6是通過與它們相鄰的電路板與主板相連的。另外還配置了電路板間連接器J1到J28,顧名思義,連接器J1到J28能建立不同電路板間的連接。連接器J1是連接外部電源和接地的。下表B所顯示的是根據(jù)本發(fā)明的一實施例外部電源連接器J1的引腳和相關(guān)描述。表B外部電源-J1連接器J2用于并行端口連接。連接器J1和J2是在生產(chǎn)過程中用于獨立單獨電路板的邊界掃描測試。下表C顯示的是根據(jù)本發(fā)明的一實施例的并行JTAG端口J2的引腳和相關(guān)描述。表C并行JTAG端口-J2連接器J3和J4是用于電路板間的局部總線連接。連接器J5到J16是一套FPGA的互連連接。連接器J17到J28是另一套FPGA的互連連接。當(dāng)位于元件面到焊接面時,這些連接器為不同電路板之間的部件建立起有效的連接。下表D和E是根據(jù)本發(fā)明的一實施例對連接器J1到J28所作的完整的列表和描述。表D連接器J1-J28帶陰影的連接器是穿孔型的。注意在表D中,括號[]中的數(shù)字代表FPGA邏輯裝置號0到3。這樣,S就表示南向互連(即圖37中的S[730])及其FPGA0的74字節(jié)。表E局部總線連接器-J3,J4其中的輸入/輸出方向指的是對于電路板1。圖43是圖41(A)到41(F)和圖42中連接器J1到J28的圖例。總體來說,白色區(qū)塊表示的是表面安裝,其中用灰色填滿的區(qū)塊則代表穿孔類型。另外,外框為實線的區(qū)塊代表元件面上的連接器,外框為虛線的區(qū)塊代表焊接面上的連接器。這樣,用外框為實線的白色區(qū)塊1840就代表2×30頂蓋,表面安裝并固定在元件面上。外框為虛線的白色區(qū)塊1841代表2×30插座,表面安裝并固定在電路板的焊接面上。外框為實線的灰色區(qū)塊1842代表2×30或2×45頂蓋,穿孔并固定在元件面上。外框為虛線的灰色區(qū)塊1843代表2×30或2×45插座,穿孔并固定在焊接面上。在一實施例中,模擬系統(tǒng)使用Samtec的SFM和TFM系列適用于表面安裝和穿孔類型的2×30或2×45微帶線路連接器。外框為實線的斜線填充區(qū)塊1844代表R包,表面安裝并固定在電路板的元件面上。外框為虛線的的斜線填充區(qū)塊1845代表R包,表面安裝并固定在焊接面上。Samtec網(wǎng)站上的Samtec產(chǎn)品目錄中的Samtec說明書中的內(nèi)容以引用的方式并入本文。回到圖42,連接器J3到J28是圖43的圖例所指明的類型。圖41(A)到41(F)顯示了每個電路板以及它們各自的連接器的頂視圖。圖41(A)顯示的是第六電路板的連接器。這樣,電路板1660包含連接器1661到1681以及主板連接器1682。圖41(B)顯示的是第五電路板的連接器。這樣,電路板1690就包含連接器1691到1708以及主板連接器1709。圖41(C)顯示的是第四電路板的連接器。因此,電路板1715就包含連接器1716到1733以及主板連接器1734。圖41(D)顯示的是第三電路板的連接器。因此,電路板1740就包含連接器1741到1758以及主板連接器1759。圖41(E)顯示的是第二電路板的連接器。因此,電路板1765就包含連接器1766到1783以及主板連接器1784。圖41(F)顯示的是第一電路板的連接器。因此,電路板1790就包含連接器1791到1812以及主板連接器1813。正如圖43的圖例所指明的,第六電路板的這些連接器是以下幾種連接的不同組合(1)表面安裝或穿孔,(2)元件面或焊接面,(3)頂蓋、插座或R包。在一實施例中,這些連接器是用來進行電路板間的通訊的。相關(guān)的總線和信號被組合在一起并且通過這些電路板間的連接器在任何兩塊電路板間傳輸信號。而且,只有一半的電路板是直接與主板相連的。在圖41(A)中,第六電路板1660包含指定用于一組FPGA互連的連接器1661到1668,和指定用于另一組FPGA互連的連接器1669到1674和1676、1679,以及指定用于局部總線的連接器1681。因為第六電路板1660是位于主板末端(圖41(F)中的第一電路板1790位于另一端)的一塊電路板,所以連接器1675、1677、1678和1680是指定用于確定的南北向互連的10歐姆R包的連接。另外主板連接器1682也不是用于第六電路板1660的,正如圖38(B)所示,在圖38(B)中第六電路板1535是與第五電路板1534相連的而不是直接連接到主板1520上的。在圖41(B)中,第五電路板1690包含指定用于一組FPGA互連的連接器1691到1698,和指定用于另一組FPGA互連的連接器1699到1706,以及指定用于局部總線的連接器1707和1708。連接器1709用于將第五電路板1690連接到主板上。在圖41(C)中,第四電路板1715包含指定用于一組FPGA互連的連接器1716到1723,和指定用于另一組FPGA互連的連接器1724到1731,以及指定用于局部總線的連接器1732和1733。連接器1709不是用于將第四電路板1715直接連接到主板上的。這個配置在圖38(B)也有顯示,其中第四電路板1533是直接與第三電路板1532和第五電路板1534相連而不是直接與主板1520相連的。在圖41(D)中,第三電路板1740包含指定用于一組FPGA互連的連接器1741到1748,和指定用于另一組FPGA互連的連接器1749到1756,以及指定用于局部總線的連接器1757和1758。連接器1759用于將第三電路板1740連接到主板上。在圖41(E)中,第二電路板1765包含指定用于一組FPGA互連的連接器1766到1773,和指定用于另一組FPGA互連的連接器1774到1781,以及指定用于局部總線的連接器1782和1783。連接器1784不是用于將第二電路板1765直接連接到主板上的。這個配置在圖38(B)也有顯示,其中第二電路板1525是直接與第三電路板1532和第一電路板1526相連而不是直接與主板1520相連的。在圖41(F)中,第一電路板1790包含指定用于一組FPGA互連的連接器1791到1698,和指定用于另一組FPGA互連的連接器1799到1804、1806和1809,以及指定用于局部總線的連接器1811和1812。連接器1813用于將第一電路板1790連接到主板上。因為第一電路板1790是主板末端(圖41(A)中的第六電路板1660位于另一端)的一塊電路板,所以連接器1805、1807、1808和1810是指定用于確定的南北向互連的10歐姆R包的連接。在本發(fā)明的一實施例中,多電路板是以一種獨特的方式連接于主板以及互相連接的。多個電路板是按照從元件面對焊接面的順序連接在一起的。其中一個電路板,比方說第一電路板是通過一個主板連接器與主板相連然后與PCI總線連接。第一電路板上的FPGA互連總線,通過一對FPGA互連連接器連接到另一塊電路板(比如第二電路板)的FPGA互連總線上。第一電路板的FPGA互連連接器是位于元件面上的而第二電路板的FPGA互連是位于焊接面上的。第一電路板的元件面上的連接器和第二電路板的焊接面上的連接器使得FPGA的互連總線能夠互相連接。類似地,該兩個電路板的局部總線是通過局部總線連接器連接在一起的。第一電路板上的局部總線連接器位于元件面上,而第二電路板上的局部總線連接器位于焊接面上。這樣,第一電路板的元件面上的連接器和第二電路板的焊接面上的連接器使得FPGA的互連總線能夠互相連接。還可以增加更多的電路板??梢栽黾右粋€第三個電路板,使其焊接對著第二電路板的元件面。這樣就建立了類似的FPGA互連和局部總線電路板間的連接。第三電路板也是通過另一個連接器與主板相連,但此連接器僅為第三電路板提供電源和接地,這將在下文中進行討論。雙電路板配置的元件面到焊接面的連接器將參照圖38(A)進行討論。此圖顯示的是根據(jù)本發(fā)明一實施例的主板上FPGA電路板連接的側(cè)視圖。圖38(A)顯示的是雙電路板配置,顧名思義只使用了兩塊電路板。圖38(A)中的兩塊電路板1525(第二電路板)和1526(第一電路板)與圖39中的兩塊電路板1552和1551一致。編號1989代表了電路板1525和1526的元件面。編號1988代表了電路板1525和1526的焊接面。正如圖38(A)所示,電路板1525和1526是通過主板連接器1523與主板1520相連的。為擴展之需,還可提供其它的主板連接器1521、1522及1524。PCI總線和電路板1525及1526之間的信號是通過主板連接器1523傳輸?shù)?。此雙電路板結(jié)構(gòu)和PCI總線之間的PCI信號傳輸是首先通過第一電路板1526進行的。這樣,從PCI總線發(fā)出的信號在到第二電路板1525前首先遇到第一電路板1526。類似地,從雙電路板結(jié)構(gòu)到PCI總線的信號是由第二電路板1526發(fā)出的。另外電源裝置(未顯示)還通過主板連接器1523為該配置提供電源。正如圖38(A)所示,電路板1526包含幾個部件和連接器。其中一個部件就是FPGA邏輯裝置1530。另外還有連接器1528A和1531A。類似地,電路板1525也包含幾個部件和連接器。其中一個部件就是FPGA邏輯裝置1529。另外還有連接器1528B和1531B。在一實施例中,1528A和1528B是用于FPGA總線的電路板間連接器(如1590和1581,見圖44)。這些電路板間連接器為各種FPGA互連建立了電路板間的連接,如N[730]、S[730]、W[730]、E[730]、NH[270]、SH[270]、XH[360]和XH[7237],而不包括局部總線連接。另外,連接器1531A和1531B是用于局部總線的電路板間連接器。局部總線處理PCI總線(通過PCI控制器)和FPGA總線(通過FPGA輸入/輸出控制器(CRTL_FPGA)單元)之間的信號。局部總線還處理PCI控制器、FPGA邏輯裝置與FPGA輸入/輸出控制器(CRTL_FPGA)單元之間的配置和邊界掃描測試信息??傊靼暹B接器將一對電路板中的一個連接到PCI總線和電源。一套連接器通過一個電路板的元件面將FPGA互連連接到另一個電路板的焊接面。另一套連接器通過一個電路板的元件面將局部總線連接到另一個電路板的焊接面。在本發(fā)明的另一個實施例中使用了兩個以上的電路板。圖38(B)顯示了六電路板的配置。這個配置與圖38(A)的配置類似,都是每隔一個電路板與主板相連,而且這些電路板的互連與局部總線都是通過電路板間連接器按照焊接面對元件面的方式進行連接的。圖38(B)顯示了六個電路板1526(第一電路板)、1525(第二電路板)、1532(第三電路板)、1533(第四電路板)、1534(第五電路板)和1535(第六電路板)。這六個電路板通過1526(第一電路板)、1532(第三電路板)和1534(第五電路板)上的連接器與主板1520相連。其它的電路板1525(第二電路板)、1533(第四電路板)和1535(第六電路板)不與主板直接相連,它們是通過與各自鄰近電路板的連接間接與主板相連的。位于焊接面與元件面之間的各種電路板間連接器建立了PCI總線部件、FPGA邏輯裝置、存儲器裝置以及各種模擬系統(tǒng)控制電路之間的連接。第一套電路板間連接器1990對應(yīng)圖42中的連接器J5到J16。第二套電路板間連接器1991對應(yīng)圖42中的連接器J17到J28。第三套電路板間連接器1992對應(yīng)圖42中的連接器J3和J4。主板1520上的主板連接器1521到1524將主板(和PCI總線)連接到六塊電路板上。如上所述,1526(第一電路板)、1532(第三電路板)和1534(第五電路板)分別直接與連接器1523、1522和1521相連。其它的電路板1525(第二電路板)、1533(第四電路板)和1535(第六電路板)不是直接與主板1520相連的。因為六塊電路板總共只需要一個PCI控制器,所以只有第一電路板1526包含一個PCI控制器。與第一電路板1526相連的主板連接器1523提供向/從PCI總線的訪問。連接器1522和1521只連接至電源和接地。在一實施例中,鄰近主板連接器之間的中心到中心的間距大約為20.32mm。對于分別直接與連接器1523、1522和1521相連的電路板1526(第一電路板)、1532(第三電路板)和1534(第五電路板),它們的J5到J16連接器是位于元件面上,J17到J28是位于焊接面上而局部總線連接器J3到J4是位于元件面上的。對于不直接與主板連接器1523、1522和1521相連的電路板1525(第二電路板)、1533(第四電路板)和1535(第六電路板),它們的J5到J16連接器是位于焊接面上,J17到J28是位于元件面上而局部總線連接器J3到J4是位于焊接面上的。對于末端電路板1526(第一電路板)和1535(第六電路板),連接器J17到J28部分是10歐姆R包終端。圖40(A)和圖(B)顯示不同電路板間的陣列連接。為有利于生產(chǎn)過程,對所有的電路板使用同一種設(shè)計方案。正如上面所解釋的,電路板通過沒有底板的連接器連接到其它電路板上。圖40(A)顯示了兩塊示例電路板1611(第二電路板)和1610(第一電路板)。電路板1610的元件面對著電路板1611的焊接面。電路板1611包含許多FPGA邏輯裝置、其它部件和導(dǎo)線線路。電路板1611上這些邏輯裝置和其它部件的特定節(jié)點用節(jié)點A’(編號1612)和B’(編號1614)表示。節(jié)點A’通過PCB線跡1620連接到連接器墊1616。類似地,節(jié)點B’通過PCB線跡1623連接到連接器墊1617。類似地,電路板1610也包含許多FPGA邏輯裝置、其它部件和導(dǎo)線線路。電路板1610上這些邏輯裝置和其它部件的特定節(jié)點用節(jié)點A(編號1613)和B(編號1615)表示。節(jié)點A通過PCB線跡1625連接到連接器墊1618。類似地,節(jié)點B通過PCB線跡1622連接到連接器墊1619?,F(xiàn)在我們將要討論位于使用表面安裝連接器的不同電路板上的節(jié)點之間的信號的布線路。在圖40(A)中,所需的連接是建立在(1)虛構(gòu)路徑1620、1621和1622所指示的節(jié)點A和B’之間以及(2)虛構(gòu)路徑1623、1624和1625所指示的節(jié)點B和A’之間的。這些連接是用于象圖39中電路板1551和電路板1552之間的不對稱互連1600這樣的路徑的。其它的不對稱互連包括在連接器1589和1590兩面的NH到SH的互連1977、1979和1981。A-A’和B-B’對應(yīng)于互連1515(N,S)這樣的對稱互連。N和S互連使用穿孔連接器,其中NH和SH不對稱互連使用SMD連接器。詳情參考表D?,F(xiàn)在參照圖40(B)來討論使用表面安裝連接器的實際安裝,使用相同的序號表示相同的零件。在圖40(B)中,電路板1611顯示了元件面上的節(jié)點A’通過PCB線跡1620連接到元件面上的連接器墊1636。元件面上的連接器墊1636通過導(dǎo)電路徑1651連接到焊接面的連接器墊1639。焊接面上的連接器墊1639通過導(dǎo)電路徑1648連接到電路板1610元件面上的連接器墊1642。最后,元件面上的連接器墊1642通過PCB線跡1622連接到節(jié)點B。這樣,電路板1611上的節(jié)點A’就可以連接到電路板1610上的節(jié)點B。同樣,在圖40(B)中,電路板1611顯示了元件面上的節(jié)點B’通過PCB線跡1623連接到元件面上的連接器墊1638。元件面上的連接器墊1638通過導(dǎo)電路徑1650連接到焊接面的連接器墊1637。焊接面上的連接器墊1637通過導(dǎo)電路徑1645連接到元件面上的連接器墊1640。最后,元件面上的連接器墊1640通過PCB線跡1625連接到節(jié)點A。這樣,電路板1611上的節(jié)點B’就可以連接到電路板1610上的節(jié)點A。因為這些電路板都采用同樣的設(shè)計方案,所以導(dǎo)電路徑1652和1653可以象導(dǎo)電路徑1650和1651那樣用于與電路板1610鄰近的其它電路板。這樣,就建立了一種使用表面安裝和穿孔連接器而不需使用開關(guān)部件的獨特的電路板間的連接方案。F.時序不靈敏和無假信號邏輯裝置本發(fā)明的一實施例解決了占用時間和時鐘假信號兩方面的問題。根據(jù)本發(fā)明的一實施例,在將用戶的設(shè)計配置入可重新配置計算系統(tǒng)的硬件模型的過程中,在用戶設(shè)計中發(fā)現(xiàn)的標(biāo)準(zhǔn)邏輯裝置(如鎖存器,觸發(fā)器)被仿真邏輯裝置或時序不靈敏和無假信號(timing-insensitiveglitch-free,TIGF)邏輯裝置代替。在一實施例中,整合到EVAL信號中的觸發(fā)信號用來更新這些TIGF邏輯裝置中所儲存的值。在等待各種輸入和其它信號在用戶設(shè)計的硬件模型中傳輸并在估算過程中達到穩(wěn)定狀態(tài)后,會產(chǎn)生用來更新TIGF邏輯裝置所儲存或鎖存的值的觸發(fā)信號。此后,開始了新的估算周期。在一實施例中,這個從估算到觸發(fā)的階段是循環(huán)的?,F(xiàn)在簡要地討論一下上面所提到的占用時間的問題。所屬
      技術(shù)領(lǐng)域
      的技術(shù)人員都知道邏輯電路設(shè)計的一個普遍的問題就是占用時間擾亂。占用時間是指一個邏輯元件的數(shù)據(jù)輸入在控制輸入(如時鐘輸入)的變化引起了數(shù)據(jù)輸入所指示的值的鎖存、獲取或儲存后必須保持穩(wěn)定的最小時間;否則邏輯元件將不能正常作業(yè)。現(xiàn)在我們將要通過討論一個移位寄存器的例子來演示占用時間的要求。圖75(A)顯示了一個串行連接了三個D型觸發(fā)器的示例性移位寄存器,即觸發(fā)器2400的輸出連接的是與觸發(fā)器2401的輸入,而2401的輸出連接至觸發(fā)器2402的輸入。總的輸入信號Sin與觸發(fā)器2400的輸入相連而總的輸出信號Sout是由觸發(fā)器2402的輸出產(chǎn)生的。這三個觸發(fā)器在它們各自的時鐘輸入端接收一個共同的時鐘信號。這個移位寄存器是根據(jù)以下假設(shè)設(shè)計(1)時鐘信號同時到達所有觸發(fā)器,(2)在檢測到時鐘信號邊緣后,觸發(fā)器的輸入在占用時間的時段內(nèi)不會改變。圖75(B)的時序圖演示了占用時間的假設(shè),其中系統(tǒng)沒有破壞占用時間的要求。在邏輯元件之間占用時間會有所不同,但這些不同的占用時間都在說明書被規(guī)定。在時間t0時鐘輸入從邏輯0變化到邏輯1。如圖75(A)所示,時鐘輸入提供給2400到2402中的每個觸發(fā)器。從t0處的該時鐘邊沿開始,輸入Sin必須在從時間t0到t1的占用時間TH時段內(nèi)保持穩(wěn)定。類似地,到觸發(fā)器2401(即D2)和2402(即D3)的輸入也必須在從時鐘信號的觸發(fā)邊緣開始的占用時間時段內(nèi)保持穩(wěn)定。既然圖75(A)和75(B)滿足了這個要求,那么輸入Sin就被移位到觸發(fā)器2400,D2的輸入(邏輯0)被移位到觸發(fā)器2401而D3的輸入(邏輯1)則被移位到觸發(fā)器2402。所屬
      技術(shù)領(lǐng)域
      的技術(shù)人員都知道在時鐘邊沿被觸發(fā)后,假設(shè)占用時間的要求被滿足的話,那么觸發(fā)器2401輸入端的新值(輸入D2的邏輯1)和觸發(fā)器2402輸入端的新的值(輸入D3的邏輯0)將要在下一個時鐘循環(huán)移位并儲存到下一個觸發(fā)器中。下表總結(jié)了對這些典型賦值的移位寄存器的操作在實際實施時,時鐘信號不會同時達到所有的邏輯元件。更確切地說,電路的設(shè)計使得時鐘信號將會幾乎同時或?qū)嵸|(zhì)上同時到達所有的邏輯元件。電路的設(shè)計必須使得時鐘偏移或時鐘信號到達每個觸發(fā)器之間的時序差異遠比占用時間要求的要小。相應(yīng)地,所有的邏輯元件將獲得適當(dāng)?shù)妮斎胫怠T谝陨蠄D75(A)和75(B)所示的例子中,由于時鐘信號在不同時間到達觸發(fā)器2400到2402引起的占用時間擾亂可能會導(dǎo)致一些觸發(fā)器獲取舊的輸入值而另一個觸發(fā)器獲取新的輸入值。結(jié)果使得移位寄存器不能正常作業(yè)。在同樣的移位寄存器設(shè)計的可重新配置邏輯(如FPGA)的裝置中,如果時鐘不是從主輸入直接產(chǎn)生的話,那么可以將電路設(shè)計成使得低偏移網(wǎng)絡(luò)能夠?qū)r鐘信號分布到所有的邏輯元件中去,這樣這些邏輯元件就可以在實質(zhì)上同一時間檢測時鐘邊沿。主時鐘由自計時測試平臺程序產(chǎn)生。通常主時鐘信號是在軟件中產(chǎn)生的,在典型的用戶電路設(shè)計中只有很少一些主時鐘(即1-10個)。然而,如果時鐘信號是從內(nèi)部邏輯而不是由主輸入產(chǎn)生,占用時間的問題就顯得更為重要。派生的或門控時鐘是由主時鐘驅(qū)動的組合邏輯和寄存器的組合網(wǎng)絡(luò)產(chǎn)生的。在典型的用戶電路設(shè)計中有許多(即1000或更多)派生的時鐘。沒有預(yù)防和另外的控制措施,這些時鐘信號就可以在不同的時間到達每個邏輯元件而時鐘偏移可能會比占用時間要長。這將會導(dǎo)致電路設(shè)計的失敗,比如圖75(A)和75(B)所示的移位寄存器電路?,F(xiàn)在通過圖75(A)中所示的同樣的移位寄存器電路來討論占用時間擾亂。這時,移位寄存器電路的單個的觸發(fā)器跨越圖76(A)所顯示的多個可重新配置邏輯芯片(如多個FPGA芯片)展開。第一FPGA芯片2411包含將其時鐘信號CLK反饋到FPGA芯片2412到2416的一些部件的內(nèi)部派生的時鐘邏輯2410。在這個例子中,內(nèi)部產(chǎn)生的時鐘信號CLK將會提供給移位寄存器電路的觸發(fā)器2400到2402。芯片2412包含觸發(fā)器2400,芯片2415包含觸發(fā)器2401而芯片2416包含觸發(fā)器2402。另外的兩個芯片2413和2414是用來演示占用時間擾亂概念的。芯片2411內(nèi)的時鐘邏輯2410接收一個主時鐘輸入(或者可能是另外的一個派生的時鐘輸入)并產(chǎn)生一個內(nèi)部時鐘信號CLK。此內(nèi)部時鐘信號CLK將傳輸?shù)叫酒?412并標(biāo)為CLK1。從時鐘邏輯2410發(fā)出的該內(nèi)部時鐘信號CLK也會通過芯片2413和2414傳輸?shù)叫酒?415并標(biāo)為CLK2。如圖所示,CLK1輸入到觸發(fā)器2400而CLK2則輸入到觸發(fā)器2401。CLK1和CLK2都會經(jīng)歷線路線跡延遲,這樣CLK1和CLK2的邊沿就比內(nèi)部時鐘信號CLK的邊緣延遲。而且CLK2還會因為穿過其它兩個芯片2413和2414而具有附加延遲。參照圖76(B)的時序圖,內(nèi)部時鐘信號CLK在時間t2產(chǎn)生及被觸發(fā)。由于線路線跡延遲,CLK1會到時間t3才到達芯片2412內(nèi)的觸發(fā)器2400,此延遲時間標(biāo)為T1。如上表所示,Q1的輸出(或輸入D2)在CLK1時鐘邊沿到達前是邏輯0。在觸發(fā)器2400檢測到CLK1的邊緣后,D1的輸入必須在必要的占用時間H2期間(即直到時間t4)保持穩(wěn)定。這時觸發(fā)器2400移位或儲存邏輯1以使Q1的輸出(或D2)為邏輯1。當(dāng)這些在觸發(fā)器2400上發(fā)生時,時鐘信號CLK2正向芯片2415內(nèi)的觸發(fā)器2401移動。芯片2413和2414所引起的延遲T2使得CLK2在時間t5到達觸發(fā)器2401。D2的輸入這時為邏輯1。在此觸發(fā)器2401所需的占用時間后,此邏輯賦值1將會出現(xiàn)在輸出Q2(或D3)上。這樣,在CLK2到達前輸出Q2為邏輯1而在CLK2到達后輸出仍然為邏輯1。這個結(jié)果是不正確的。此移位寄存器應(yīng)移位到邏輯0。當(dāng)寄存器2400正確地移位到舊的輸入值(邏輯1)時,觸發(fā)器2401錯誤地移位到新的輸入值(邏輯1)。這是當(dāng)時鐘偏移(或時序延遲)比占用時間大時所發(fā)生的典型錯誤操作。在這個例子當(dāng)中,T2>T1+H2??偟膩碚f,除非采取一些預(yù)防措施,否則如圖76(A)所示,當(dāng)一個芯片產(chǎn)生時鐘信號并將其分布到不同芯片上的邏輯元件時很可能會發(fā)生占用時間擾亂?,F(xiàn)在將參照圖77(A)和77(B)來討論時鐘假信號問題。一般地,當(dāng)一電路的輸入改變時,輸出也會在其定為一個正確值前的相當(dāng)短的時間內(nèi)變?yōu)橐粋€隨機值。如果另一個電路恰好在那個錯誤的時間檢測輸出并讀出隨機值,那么結(jié)果將是不正確的而且難以調(diào)試。這種對另外電路產(chǎn)生有害影響的隨機值就稱為假信號(glitch)。在典型的邏輯電路中,一個電路會為另一個電路產(chǎn)生時鐘信號。如果一個或兩個電路存在著未得到補償?shù)臅r序延遲,那么將會產(chǎn)生一個時鐘假信號(即預(yù)料之外的時鐘邊沿)并導(dǎo)致一個錯誤的結(jié)果。與占用時間擾亂相同,引起時鐘假信號的原因是電路設(shè)計中的某些邏輯元件在不同的時間改變了值。圖77(A)顯示了一些邏輯元件為另一組邏輯元件產(chǎn)生時鐘信號的示范邏輯電路;即,D型觸發(fā)器2420,D型觸發(fā)器2421和“異或”門(XOR)2422為D型觸發(fā)器2423產(chǎn)生一時鐘信號(CLK3)。觸發(fā)器2420在線路2425上的D1接收到它的輸入數(shù)據(jù)而在線路2427上的Q1輸出數(shù)據(jù)。它從一時鐘邏輯2424接收它的時鐘輸入(CLK1)。CLK指由時鐘邏輯2424最初產(chǎn)生的時鐘信號而CLK1指相同的信號到達觸發(fā)器2420所延遲的信號。觸發(fā)器2421在線路2426上的D2接收到它的輸入數(shù)據(jù)而在線路2428的Q2上輸出數(shù)據(jù)。它從一時鐘邏輯2424接收它的時鐘輸入(CLK2)。如上所述,CLK指由時鐘邏輯2424最初產(chǎn)生的時鐘信號,而CLK1指相同的信號到達觸發(fā)器2421所延遲的信號。線路2427和2428上觸發(fā)器2420和2421的各自的輸出輸入到“異或”門2422。“異或”門2422將標(biāo)記為CLK3的數(shù)據(jù)輸出到觸發(fā)器2423的時鐘輸入。觸發(fā)器2423也在線路2429上的D3輸入數(shù)據(jù)并在Q3輸出數(shù)據(jù)。現(xiàn)在將參照圖77(B)中的時序圖來討論此電路可能引起的時鐘假信號問題。CLK信號在時間t0被觸發(fā)。在時鐘信號(即CLK1)到達觸發(fā)器2420時為時間t1。到達觸發(fā)器2421時為CLK2時間t2。假定到D1和D2的輸入都為邏輯1。當(dāng)CLK1在時間t1到達觸發(fā)器2420時Q1的輸出將為邏輯1(如圖77(B)所示)。CLK2在稍后的時間t2到達觸發(fā)器2421,這樣,線路2428上的Q2輸出從時間t1到時間t2都保持在邏輯0。即使所需的信號是一個邏輯0(1XOR1=0),但“異或”門2422在時間t1到時間t2期間產(chǎn)生一個邏輯1作為CLK3出現(xiàn)在觸發(fā)器2423的時鐘輸入端。這個在時間t1到時間t2期間內(nèi)CLK3的產(chǎn)生是一個時鐘假信號。因此,無論期望與否,任何出現(xiàn)在觸發(fā)器2423輸入線路2429上的D3的邏輯值都被存儲了下來,并且此時觸發(fā)器2423準(zhǔn)備好了接收在線路2429上的下一次輸入。如果設(shè)計正確,那么CLK1和CLK2的時間延遲會減少到最小,這樣就不會產(chǎn)生時鐘假信號,或者至少時鐘假信號所持續(xù)的時間非常短,不會對電路剩下的部分產(chǎn)生影響。后一種情況時,如果在CLK1和CLK2之間的時鐘偏移足夠短,則XOR門延遲將足夠長,可以濾掉假信號干擾,不會對電路的其余部分產(chǎn)生影響。兩種已知的解決占用時間擾亂問題的方法如下(1)時序調(diào)整,(2)時序再合成。在美國專利5,475,830中所討論的時序調(diào)整要求在某些信號路徑中插入足夠的延遲元件(如緩沖器)來延長邏輯元件的占用時間。例如,在上述移位寄存器電路中的輸入D2和D3上增加足夠的延遲可以避免占用時間擾亂。這樣,在圖78中顯示了分別將延遲元件2430和2431加到輸入D2和D3的同樣的移位寄存器電路。結(jié)果就可以設(shè)計延遲元件2430使得時間t4發(fā)生在時間t5后,T2<T1+H2(圖76(B)),這樣就沒有占用時間擾亂的發(fā)生。時序調(diào)整方法的一個潛在問題是它過于依賴FPGA芯片的技術(shù)參數(shù)。所屬
      技術(shù)領(lǐng)域
      的技術(shù)人員都知道象FPGA芯片這樣的可重新配置邏輯芯片,是通過查找表實現(xiàn)邏輯元件的。芯片中查找表的延遲是在說明書中標(biāo)明,而設(shè)計者要依賴于具體的時間延遲來使用時序調(diào)整方法避免占用時間擾亂。然而,這個延遲只是個估計值并會隨著芯片的不同而變化。時序調(diào)整方法的另一個潛在問題是設(shè)計者必須補償在整個電路設(shè)計過程都存在的線路延遲。雖然這并不是不可能完成的任務(wù),但是線路延遲的估算是需要消耗時間的而且容易引發(fā)錯誤。另外,時序調(diào)整并沒有解決時鐘假信號的問題。另一個解決方法是IKOS的VirtualWires技術(shù)所引進的時序再合成。時序再合成的概念包括將一個用戶的電路設(shè)計轉(zhuǎn)變成一個功能等同的設(shè)計同時通過有限狀態(tài)機和寄存器嚴(yán)格控制時鐘和輸出接腳信號的時序。時序再合成通過引入一個單獨高速時鐘來為用戶電路設(shè)計的重新設(shè)定時序。它還將鎖存器、門控時鐘和多重同步和異步時鐘轉(zhuǎn)變成一個基于觸發(fā)器的單時鐘同步設(shè)計。這樣,時序再合成在每個芯片的輸入和輸出輸出接腳使用寄存器來控制芯片間信號移動的精度并避免芯片間占用時間擾亂的發(fā)生。時序再合成還在每個芯片內(nèi)使用一個有限狀態(tài)機并基于參考時鐘來排定來自其它芯片的輸入、到達其它芯片的輸出以及內(nèi)部觸發(fā)器的更新。圖79顯示了使用與圖75(A)、75(B)、76(A)和76(B)關(guān)聯(lián)的上述討論中所引入的同樣的移位寄存器的時序再合成電路的一個例子。基本的三觸發(fā)器移位寄存器設(shè)計已被轉(zhuǎn)變成一個功能等同的設(shè)計。芯片2430包括通過線路2448與一寄存器2443相連的原始內(nèi)部時鐘生成邏輯2435。時鐘邏輯2435產(chǎn)生CLK信號。第一有限狀態(tài)機2438也是通過線路2449與寄存器2443相連的。寄存器2443和第一有限狀態(tài)機2438都是由不依賴于設(shè)計的全局參考時鐘控制的。CLK在到達芯片2434之前還穿過芯片2432和2433進行傳遞。在芯片2432中,第二有限狀態(tài)機2440通過線路2462控制一寄存器2445。CLK信號從寄存器2443通過線路2461傳遞到寄存器2445。寄存器2445通過線路2463將CLK信號輸出到下一個芯片2433。芯片2433包含一個通過線路2464控制著寄存器2446的第三個有限狀態(tài)機2441。寄存器2446將CLK信號輸出到芯片2434。芯片2431包括最初觸發(fā)器2436。寄存器2444接收輸入Sin并通過線路2452將輸入Sin輸出到觸發(fā)器2436的D1輸入中。觸發(fā)器2436的Q1輸出是通過線路2454與寄存器2466相連的。第四有限狀態(tài)機2439通過線路2451控制寄存器2444,通過線路2455控制寄存器2466并通過鎖存器啟動線路2453控制觸發(fā)器2436。第四有限狀態(tài)機2439還通過線路2450從芯片2430接收最初時鐘信號CLK。芯片2434包括最初觸發(fā)器2437,它通過線路2456從芯片2431上的寄存器2466接收信號到D2輸入。觸發(fā)器2437的Q2輸出是通過線路2457與寄存器2447相連的。第五有限狀態(tài)機2439通過線路2459控制寄存器2447并通過鎖存器啟動線路2458控制觸發(fā)器2437。第五有限狀態(tài)機2442還通過芯片2432和2433從芯片2430接收最初時鐘信號CLK。利用時序再合成,有限狀態(tài)機2438到2442,寄存器2443到2447和2466,以及單獨全局參考時鐘被用來控制跨過多芯片的信號流并更新內(nèi)部觸發(fā)器。這樣,在芯片2430中CLK信號到其它芯片的分布由第一有限狀態(tài)機2438通過寄存器2443來排定。類似地,在芯片2431中第四有限狀態(tài)機2439安排通過寄存器2444到觸發(fā)器2436的輸入Sin的傳遞,以及通過寄存器2466的Q1輸出的傳遞。觸發(fā)器2436的鎖存功能也是由來自第四有限狀態(tài)機2439的一個鎖存啟動信號控制的。其它芯片2432到2434的邏輯也適用同樣的原則。由于對芯片間輸入傳遞時間、芯片間輸出傳遞時間以及內(nèi)部觸發(fā)器狀態(tài)更新進行了嚴(yán)格的控制,從而排除了芯片間占用時間擾亂。然而,時序再合成技術(shù)要求將用戶電路設(shè)計轉(zhuǎn)變成一個包括附加的有限狀態(tài)機和寄存器的功能相當(dāng)?shù)碾娐?,這個功能相當(dāng)?shù)碾娐芬蟮枚唷R话銇碚f,用以執(zhí)行此技術(shù)所必需的附加的邏輯最多可達每個芯片的有用邏輯的20%。而且此技術(shù)并不能完全避免時鐘假信號問題。為避免時鐘假信號問題,使用時序再合成技術(shù)的設(shè)計者還必須采取附加的預(yù)防手段。一個保守的方法是設(shè)計一個電路使得用門控時鐘的邏輯裝置的輸入在同樣的時間不會發(fā)生改變。一個積極的方法是使用閘延遲來過濾假信號以使它們不會影響電路剩下的部分。然而正如上所述,時序再合成需要一些附加的有效措施來避免時鐘假信號。現(xiàn)在將討論本發(fā)明的解決占用時間和時鐘假信號問題的各種實施例。在將用戶設(shè)計配置映射到RCC計算系統(tǒng)的軟件模型和RCC陣列的硬件模型的過程中,根據(jù)本發(fā)明的一實施例,用一時序不靈敏無假信號(TIGF)鎖存器對圖18(A)所顯示的鎖存器進行仿真。類似地,圖18(B)所顯示的設(shè)計觸發(fā)器用根據(jù)本發(fā)明的一實施例的一TIGF觸發(fā)器進行仿真。這些TIGF邏輯裝置無論是以鎖存器還是觸發(fā)器的形式,也可以被稱作仿真邏輯裝置。TIGF鎖存器和觸發(fā)器的更新是由全局觸發(fā)信號控制的。在本發(fā)明的一實施例中,不是在用戶設(shè)計電路中的所有邏輯裝置都是由TIGF代替的。一個用戶設(shè)計電路包括由主時鐘啟動或計時的部分以及由門控或派生的時鐘控制的其它部分。因為占用時間擾亂和時鐘假信號是屬于后者的問題,其中邏輯裝置是由門控或派生的時鐘控制的。根據(jù)本發(fā)明的一實施例,只有這些特定的由門控或派生的時鐘控制的邏輯裝置被TIGF邏輯裝置代替。在其它的實施例中,在用戶設(shè)計電路中的所有的邏輯裝置都由TIGF邏輯裝置代替。在討論本發(fā)明的TIGF鎖存器和觸發(fā)器實施例之前,先討論全局觸發(fā)信號??傮w來說,全局觸發(fā)信號是用來使TIGF鎖存器和觸發(fā)器在估算過程中保持其狀態(tài)(即保持舊的輸入值)并在很短的觸發(fā)期間更新其狀態(tài)(即儲存新的輸入值)。在一實施例中,圖82所示的全局觸發(fā)信號是從上述EVAL信號分離并衍生出來的。在該實施例中,全局觸發(fā)信號具有一個長的估算周期,和隨后的一個短的觸發(fā)周期。全局觸發(fā)信號在估算過程中追蹤EVAL信號,而當(dāng)EVAL循環(huán)完結(jié)時會產(chǎn)生用來更新TIGF鎖存器和觸發(fā)器的短觸發(fā)信號。在另一個實施例中,EVAL信號就是全局觸發(fā)信號,其在估算周期是處于一個邏輯狀態(tài)(如邏輯0)而在非估算或TIGF鎖存器/觸發(fā)器更新階段是處于另一個邏輯狀態(tài)(如邏輯1)。正如上文關(guān)于RCC計算系統(tǒng)和RCC硬件陣列的討論,估算周期用于將所有的主輸入和觸發(fā)器/鎖存裝置的變化傳輸?shù)秸麄€用戶設(shè)計中,一次一個模擬循環(huán)。在傳輸?shù)倪^程中,RCC系統(tǒng)一直處于等待狀態(tài)直到系統(tǒng)的所有信號都達到穩(wěn)定狀態(tài)。將用戶設(shè)計映射并配置到RCC陣列的適當(dāng)?shù)目芍匦屡渲玫倪壿嬔b置(如FPGA芯片)中去之后,計算估算周期。相應(yīng)地,估算周期是由具體設(shè)計確定的,也就是說,不同用戶設(shè)計的估算周期可以是不同的。此估算周期的持續(xù)時間應(yīng)能確保系統(tǒng)所有的信號都可以通過整個系統(tǒng)進行傳輸并在下一個短觸發(fā)階段前達到穩(wěn)定狀態(tài)。正如圖82所示,短的觸發(fā)階段與估算周期鄰近。在一實施例中,短觸發(fā)階段落后于估算周期。在短觸發(fā)階段前,輸入信號在估算周期內(nèi)貫穿用戶設(shè)計電路的硬件模型配置部分進行傳輸。根據(jù)本發(fā)明的一實施例,用EVAL信號邏輯狀態(tài)的一個變化來標(biāo)記的短觸發(fā)階段控制著用戶設(shè)計中的所有TIGF鎖存器和觸發(fā)器,這樣它們就可以被更新為所傳輸?shù)膩碜赃_到穩(wěn)定狀態(tài)后的估算周期的新值。該短觸發(fā)階段通過一低偏移網(wǎng)絡(luò)進行全局分布并且其持續(xù)時間之短(即圖82所示的從t0到t1以及從t2到t3)能滿足可重新配置邏輯裝置進行正確操作所允許的要求。在該短觸發(fā)階段中,在TIGF鎖存器和觸發(fā)器的每個輸入階段會對新的主輸入進行取樣,而舊的儲存在相同的TIGF鎖存器和觸發(fā)器中的值會被輸出到用戶設(shè)計的RCC硬件的下一個階段。在下面的討論中,在短觸發(fā)階段中所發(fā)生的全局觸發(fā)信號的部分將會被稱為TIGF觸發(fā),TIGF觸發(fā)信號,觸發(fā)信號或簡單地稱為觸發(fā)。圖80(A)顯示了最初在圖18(A)中所顯示的鎖存器2470。此鎖存器按以下程序進行操作if(#S),Q←1elseif(#R),Q←0elseif(en),Q←DelseQKeepstheoldvalue.(保持舊值)因為該鎖存器是電平感應(yīng)并且是異步的,所以只要時鐘輸入和鎖存器啟動輸入被啟動,那么輸出Q將追蹤輸入D。圖80(B)顯示的是根據(jù)本發(fā)明的一實施例的TIGF鎖存器。正如圖80(A)中的鎖存器,TIGF鎖存器有一D輸入、一啟動輸入、一設(shè)置(S)、一復(fù)位(R)和一輸出Q。另外它有一觸發(fā)輸入。TIGF鎖存器包括一D型觸發(fā)器2471、一多路復(fù)用器2472、一“或”門2473和一“與”門2474以及各種互連。D型觸發(fā)器2471通過線路2476從“與”門2474的輸出接收其輸入。D型觸發(fā)器還通過線路2477上的一觸發(fā)信號在其時鐘輸入端被觸發(fā),此觸發(fā)信號是RCC系統(tǒng)根據(jù)一依賴于估算循環(huán)的嚴(yán)格的進程表進行全局分布的。D型觸發(fā)器2471的輸出是通過線路2478與多路復(fù)用器2472相連的。多路復(fù)用器2472的另外的輸入與線路2475上的TIGF鎖存器D輸入相連。多路復(fù)用器由線路2484上的一啟動信號控制。多路復(fù)用器2472的輸出通過線路2479與“或”門2473的一輸入相連?!盎颉遍T2473另外的輸入是與線路2480上的設(shè)置(S)輸入相連的?!盎颉遍T2473的輸出通過線路2481與“與”門2474的輸入相連?!芭c”門2474另外的輸入是與線路2482上的復(fù)位(R)信號相連的。如上所述,“與”門2474的輸出通過線路2476反饋到D型觸發(fā)器2471的輸入?,F(xiàn)在討論本發(fā)明TIGF鎖存器實施例的操作。在此TIGF鎖存器的實施例中,D型觸發(fā)器2471保持TIGF鎖存器的當(dāng)前狀態(tài)(即舊值)。D型觸發(fā)器2471輸入端上的線路2476給出了需要鎖存到TIGF鎖存器的新的輸入值。線路2476給出新值是因為線路2475上TIGF鎖存器的主輸入(D輸入)最后會從多路復(fù)用器2472(帶有線路2484上將最終給出的正確啟動信號),穿過“或”門2473并最后穿過“與”門2474到達線路2483,線路2483則將TIGF鎖存器新的輸入信號反饋給線路2476上的D型觸發(fā)器2471。線路2477上的觸發(fā)信號通過將線路2476上新的輸入值記錄到D型觸發(fā)器2471上來更新TIGF鎖存器。這樣,線路2478上D型觸發(fā)器2471的輸出就顯示了TIGF鎖存器的當(dāng)前狀態(tài)(即舊值),而線路2478上的輸入則顯示了需要鎖存到TIGF鎖存器中的新輸入值。多路復(fù)用器2472接收來自D型觸發(fā)器2471的當(dāng)前狀態(tài)以及線路2475上的新的輸入值。啟動線路2484的功能是作為多路復(fù)用器2472的選擇器信號。因為TIGF鎖存器直到線路2477上有觸發(fā)信號才會更新(即儲存新的輸入值),所以線路2475上TIGF鎖存器的D輸入值和線路2484上的啟動值可以以任何順序到達TIGF。如果此TIGF鎖存器(和用戶設(shè)計硬件模型的其它鎖存器)碰到在使用一常規(guī)鎖存器的電路中通常會引起占用時間擾亂的情況,如上文所提到的圖76(A)和76(B)中一個時鐘信號遠遲于另一個時鐘信號到達,那么此TIGF鎖存器可以通過將正確的舊值保持到線路2477上出現(xiàn)觸發(fā)信號時為止來正常作業(yè)。觸發(fā)信號是通過低偏移全局時鐘網(wǎng)絡(luò)來分布的。***此TIGF鎖存器還解決了時鐘假信號的問題。注意時鐘信號由TIGF鎖存器中的啟動信號代替。線路2484上的啟動信號可能在估算周期的過程中出現(xiàn)干擾但TIGF將能持續(xù)保持當(dāng)前狀態(tài)而不會失效。在一個實施例中,當(dāng)信號達到穩(wěn)定狀態(tài)時TIGF可以被更新的唯一機制是通過估算周期后產(chǎn)生的觸發(fā)信號。圖81(A)顯示了最初在圖18(B)中所顯示的觸發(fā)器2490。此鎖存器按以下程序進行操作if(#S),Q←1elseif(#R),Q←0elseif(positiveedgeofCLK),Q←DelseQkeepstheoldvalue(保持舊值)。因為該鎖存器是邊緣觸發(fā)的,所以只要觸發(fā)器啟動輸入被啟動,那么輸出Q將在時鐘信號的正邊沿追蹤輸入D。圖81(B)顯示的是根據(jù)本發(fā)明的一實施例的TIGFD型觸發(fā)器。如圖81(A)中的觸發(fā)器,TIGF觸發(fā)器有一D輸入、一時鐘輸入、一設(shè)置(S)、一復(fù)位(R)和一輸出Q。另外它有一觸發(fā)輸入。TIGF觸發(fā)器包括三個D型觸發(fā)器2491、2492和2496,一多路復(fù)用器2493,一“或”門2494和兩個“與”門2495和2497以及各種互連。觸發(fā)器2491接收線路2498上的TIGFD輸入、線路2499上的觸發(fā)輸入,并在線路2500上給出一Q輸出。此輸出線路2500也作為多路復(fù)用器2493的一個輸入。多路復(fù)用器2493的另一個輸入是通過線路2503來自觸發(fā)器2492的Q輸出。多路復(fù)用器2493的輸出通過線路2505與“或”門2494的一個輸入相連?!盎颉遍T2494另外的輸入是線路2506上的設(shè)置(S)信號?!盎颉遍T2494的輸出通過線路2507與“與”門2495的一輸入相連?!芭c”門2495另外的輸入是線路2508上的復(fù)位(R)?!芭c”門2495的輸出(也即TIGF整體輸出Q)通過線路2501與觸發(fā)器2492的輸入相連。觸發(fā)器2492在線路2502上也有一觸發(fā)輸入。回到多路復(fù)用器2493,它的選擇器輸入通過線路2509與“與”門2497的輸出相連?!芭c”門2497的一個輸入是來自線路2510上的CLK信號,另一個輸入來自線路2512上觸發(fā)器2496的輸出。觸發(fā)器2496也從線路2511上的CLK信號接收輸入并從線路2513上接收其觸發(fā)信號?,F(xiàn)在討論本發(fā)明TIGF觸發(fā)器實施例的操作。在此實施例中,TIGF觸發(fā)器在以下三個不同的點接收觸發(fā)信號經(jīng)由線路2499的D型觸發(fā)器2491,經(jīng)由線路2502的D型觸發(fā)器2492以及經(jīng)由線路2513的D型觸發(fā)器2496。TIGF觸發(fā)器只有在時鐘信號的邊緣被檢測到時才會儲存輸入值。根據(jù)本發(fā)明的一實施例,所要求的邊緣是時鐘信號的正邊沿。為檢測該時鐘信號的正邊沿,提供了邊緣檢測器2515。邊緣檢測器2515包括一D型觸發(fā)器2496和一“與”門2497。邊緣檢測器也通過線路2513上D型觸發(fā)器2496的觸發(fā)信號來更新。D型觸發(fā)器2491保持TIGF觸發(fā)器的新輸入值并阻止線路2498上D輸入的任何改變,直到線路2499上具有觸發(fā)信號。這樣,在TIGF觸發(fā)器的每個估算周期前,新值儲存在D型觸發(fā)器2491中。相應(yīng)地,TIGF觸發(fā)器就通過預(yù)存新值直到TIGF觸發(fā)器被觸發(fā)信號更新來避免占用時間擾亂。D型觸發(fā)器2492在線路2502上出現(xiàn)觸發(fā)信號前保持TIGF觸發(fā)器的當(dāng)前值(或舊值)。此值是仿真TIGF觸發(fā)器更新后和下一估算周期前的狀態(tài)。到線路2501上D型觸發(fā)器2492的輸入保持新值(也是在估算周期的有效期間線路2500上的值)。多路復(fù)用器2493接收線路2500上的新的輸入值以及當(dāng)前儲存在線路2503上TIGF觸發(fā)器內(nèi)的舊值?;诰€路2504上的選擇器信號,多路復(fù)用器或者輸出新值(線路2500)或輸出舊值(線路2503)作為仿真TIGF觸發(fā)器的輸出。在用戶設(shè)計硬件模型中所有的傳輸信號接近穩(wěn)定狀態(tài)前此輸出是隨著時鐘假信號變化的。這樣,線路2501上的輸入將在估算末期給出儲存在觸發(fā)器2491中的新值。當(dāng)TIGF觸發(fā)器接收到觸發(fā)信號時,觸發(fā)器2492現(xiàn)在儲存著在線路2501上出現(xiàn)的新值,而觸發(fā)器2491則儲存著線路2498上的下一個新值。這樣,根據(jù)本發(fā)明一實施例的TIGF觸發(fā)器就不再受到時鐘假信號的負面影響。更為詳盡地闡述一下此TIGF觸發(fā)器還有一些抵制時鐘假信號的作用。所屬
      技術(shù)領(lǐng)域
      的技術(shù)人員們將會意識到如果用圖81(B)實施例中的TIGF觸發(fā)器代替圖77(A)中的觸發(fā)器2420、2421和2423,那么時鐘假信號就不會影響任何使用該TIGF觸發(fā)器的電路。參考一下圖77(A)和77(B),時鐘假信號會對圖77(A)的電路產(chǎn)生負面影響是因為在從時間t1到t2的期間內(nèi)觸發(fā)器2423在不應(yīng)該記錄新值的時候記錄了新值。CLK1和CLK2信號偏斜的特性迫使“異或”門2422在t1到t2期間內(nèi)產(chǎn)生一邏輯1狀態(tài),驅(qū)動著下一個觸發(fā)器2423的時鐘線路。根據(jù)本發(fā)明的一實施例,如果使用TIGF觸發(fā)器時鐘假信號就不會影響記錄新值。用TIGF觸發(fā)器代替觸發(fā)器2423,一旦信號在估算周期達到穩(wěn)定狀態(tài),那么短觸發(fā)階段的觸發(fā)信號將使得TIGF觸發(fā)器儲存觸發(fā)器2491中(圖81(B))的新值。其后像圖77(B)中的時鐘假信號那樣的任何從t1到t2的時段內(nèi)的時鐘假信號都不會記錄新值。TIGF觸發(fā)器只會隨著觸發(fā)信號而更新,而此觸發(fā)信號只有在估算周期之后當(dāng)傳輸于電路中的信號達到穩(wěn)定狀態(tài)時才會被提供給TIGF觸發(fā)器。雖然此特定的TIGF觸發(fā)器實施例是D型觸發(fā)器,但是其它的觸發(fā)器(如T,JK,SR)也在本發(fā)明的范圍內(nèi)。其它類型的邊緣觸發(fā)的觸發(fā)器可以通過在在D輸入前增加一些“與”/“或”邏輯而由D型觸發(fā)器衍生出來。VII.模擬服務(wù)器根據(jù)本發(fā)明另一實施例的模擬服務(wù)器可以允許多用戶進入相同的可重新配置的硬件單元,以便有效地以分時操作的方式模擬和加速相同或不同的用戶設(shè)計。使用高速的模擬調(diào)度程序和狀態(tài)轉(zhuǎn)換機制,為模擬服務(wù)器提供導(dǎo)致高吞吐量地有效模擬處理。服務(wù)器使多用戶或處理進入可重新配置硬件單元,以實現(xiàn)加速和硬件狀態(tài)交換的目的。一旦完成加速或到達硬件狀態(tài),每個用戶或處理就可以只在軟件中模擬,這樣就釋放了對可重新配置硬件單元的控制,使得其他用戶或處理能夠?qū)ζ溥M行控制。在此說明書的模擬服務(wù)器的部分,我們使用了諸如“作業(yè)”和“處理”這樣的術(shù)語。在此說明書中,術(shù)語“作業(yè)”和“處理”通??梢曰Q使用。過去的批處理系統(tǒng)執(zhí)行“作業(yè)”而分時操作系統(tǒng)儲存并執(zhí)行“處理”或程序。而在如今的系統(tǒng)中這些作業(yè)和處理是類似的。這樣在此說明書中術(shù)語“作業(yè)”就不限于批處理系統(tǒng),而“處理”就不限于分時操作系統(tǒng)。而且在某個極端情況下“作業(yè)”與“處理”是等同的,那就是當(dāng)“處理”能夠在一個時間片(timeslice)內(nèi)執(zhí)行或沒有其它分時干預(yù)打斷的情況下。另一個極端情況就是如果“作業(yè)”要求多時間片來完成,那么“作業(yè)”是“處理”的子集。因此,如果一個“處理”由于其它同等優(yōu)先權(quán)的用戶/處理的出現(xiàn)而需要多時間片來完成執(zhí)行,那么它就分為一些“作業(yè)”。而且,如果一個“處理”由于它是唯一最高優(yōu)先權(quán)的用戶,或者處理很短以至在一個時間片內(nèi)就可以完成,那么一個“處理”就等同于一個“作業(yè)”。這樣一個用戶就可以與一個或更多的“處理”或已經(jīng)在模擬系統(tǒng)中裝載并執(zhí)行的程序相互作用,并且每個“處理”可能需要一個或更多的“作業(yè)”來在分時系統(tǒng)中完成。在一個系統(tǒng)配置中,多用戶通過遠程終端可以在非網(wǎng)絡(luò)環(huán)境下利用相同的多處理器工作站,并進入同樣的可重新配置硬件單元,從而檢查或調(diào)試相同或不同用戶電路設(shè)計。在非網(wǎng)絡(luò)環(huán)境中,遠程終端是通過與一主計算系統(tǒng)相聯(lián)來實現(xiàn)它的處理功能。這個非網(wǎng)絡(luò)設(shè)置使得多用戶能夠進入同一用戶設(shè)計來達到并行調(diào)試的目的。這種進入是通過分時操作處理來實現(xiàn)的,而在進行此分時操作時,調(diào)度程序決定多用戶的優(yōu)先進入權(quán)的、交換作業(yè),以及在預(yù)定的用戶中選擇性地鎖存硬件單元入口。在其它情況下,多用戶可以通過用于他(她)自己的分離的并且不同的用戶設(shè)計的服務(wù)器進入同一可重新配置的硬件單元來進行調(diào)試。在這一配置中,多用戶或者處理與操作系統(tǒng)共享工作站中的多微處理器。在另一配置中,分離的基于微處理器的工作站中的多用戶或者處理可以通過網(wǎng)絡(luò)來進入同一重新配置的硬件單元,從而來檢查或調(diào)試相同或不同用戶電路設(shè)計。類似地,這種進入是通過分時操作處理來實現(xiàn)的,而在進行此分時操作中,調(diào)度程序決定多用戶的優(yōu)先進入權(quán)、交換作業(yè),以及在預(yù)定的用戶中選擇性地鎖存硬件單元入口。在網(wǎng)絡(luò)環(huán)境下,調(diào)度程序聽從由UNIX套接字(socket)系統(tǒng)調(diào)用的網(wǎng)絡(luò)請求。此操作系統(tǒng)使用套接字來給調(diào)度程序發(fā)出指令。如前所述,模擬調(diào)度程序使用搶先多優(yōu)先權(quán)輪轉(zhuǎn)算法。換句話說,具有更高優(yōu)先權(quán)的用戶或者處理首先被服務(wù),直到這個用戶或者處理完成它的作業(yè)并結(jié)束進程為止。在具有相同優(yōu)先權(quán)的用戶或者處理中,使用搶先輪轉(zhuǎn)算法,每個用戶或處理都被分配給一相同的時間片去執(zhí)行操作直到完成。該時間片很短,以至于多用戶或處理在被服務(wù)前無需等待太久。這段時間也足夠長,使得在模擬服務(wù)器的調(diào)度程序中斷一個用戶或者處理而交換進來并進行新的用戶作業(yè)之前,已經(jīng)執(zhí)行了充分的操作。在一實施例中,默認時間片是5秒鐘,并且可由用戶設(shè)定。在一實施例中,調(diào)度程序向操作系統(tǒng)內(nèi)置的調(diào)度程序發(fā)出特別調(diào)用。圖45是根據(jù)本發(fā)明的一實施例的一個具有多處理器工作站的非網(wǎng)絡(luò)環(huán)境。圖45是圖1的變型,因此,對相同的元件、單元使用了相同的編號。工作站1100包括局部總線1105、一個主機/PCI橋接器1106、存儲器總線1107,以及主存儲器1108。還可能具有一超高速緩沖存儲器子系統(tǒng)(未示出)。還具有其他的用戶接口單元(如顯示器,鍵盤),但沒有在圖45中顯示出來。工作站1100還包括多重微處理器1101、1102、1103、1104,它們通過調(diào)度程序1117和連接/路徑1118耦聯(lián)到局部總線1105上。如所屬
      技術(shù)領(lǐng)域
      的技術(shù)人員所知,操作系統(tǒng)1121為整個的計算環(huán)境提供用戶硬件接口基礎(chǔ),用于為計算環(huán)境中的不同用戶、處理和裝置管理文件和分配資源。為了使概念更加清楚,我們顯示了操作系統(tǒng)1121和總線1122。在AbrahamSilberschatz和JamesL.Peterson合著的《OPERATINGSYSTEMCONCEPTS(1988)》與WilliamStalling的《MODERNOPERATINGSYSTEMS(1996)》中可以找到關(guān)于操作系統(tǒng)的參考文獻,其內(nèi)容以引用的方式并入本文。在一實施例中,工作站1100采用的是SunMicrosystem的Enterprise450系統(tǒng),它使用的是UltraSPARCII處理器。Sun450系統(tǒng)不通過局部總線對存儲器進行訪問,而是通過一些專用總線經(jīng)由縱橫制接線器與儲存器相連來訪問儲存器。因此,多處理可以由多微處理器執(zhí)行各自指令,并不通過局部總線對存儲器進行訪問來運行。Sun450系統(tǒng)和UltraSPARC的說明書的內(nèi)容將以引用的方式并入本文。雖然SunUltra60系統(tǒng)僅能允許2個處理器,但是它仍然是微處理器系統(tǒng)另外的一個例子。調(diào)度程序1117提供通過設(shè)備驅(qū)動器1119和連接/路徑1120對可重新配置的硬件單元20的分時訪問。調(diào)度程序1117主要在軟件中實現(xiàn),以便與主計算系統(tǒng)的操作系統(tǒng)進行交互作用,另外還部分的在硬件中實現(xiàn),以便通過支持模擬作業(yè)中斷和交換入/出模擬進程來與模擬服務(wù)器進行交互作用。調(diào)度程序1117和設(shè)備驅(qū)動器1119將在下面做詳細討論。在工作站1101中,每一個微處理器1101到1104都具有獨立處理而不依賴于其它微處理器的能力。在本發(fā)明一實施例中,工作站1100在以UNIX為基礎(chǔ)的操作系統(tǒng)下運行,盡管其它的實施例中,1101工作站可以在以Windows或者Macintosh為基礎(chǔ)的操作系統(tǒng)下運行。以UNIX為基礎(chǔ)的系統(tǒng)為用戶配置了X-Windows作為用戶根據(jù)需要進行管理程序、任務(wù)和文件的用戶界面。如果想了解UNIX操作系統(tǒng)的詳細情況,請參考MauriceJ.Bach的《THEDESIGNOFTHEUNIXOPERATINGSYSTEM(1986)》。在圖45中,多用戶可以通過遠程終端進入工作站1100。有時,每個用戶可以用一個特定的CPU來運行程序。在另外情況下,每個用戶根據(jù)資源限制來使用不同的CPU。通常,操作系統(tǒng)1121決定這些訪問,實際上,操作系統(tǒng)本身可以從一個CPU跳到另一個來完成其任務(wù)。為了處理分時操作,調(diào)度程序通過套接字系統(tǒng)調(diào)用聽從網(wǎng)絡(luò)請求,對操作系統(tǒng)1121發(fā)出系統(tǒng)調(diào)用,操作系統(tǒng)1121反過來通過設(shè)備驅(qū)動器1119向可重新配置的硬件單元20開始產(chǎn)生中斷信號產(chǎn)生來處理搶先操作。中斷信號的產(chǎn)生是許多調(diào)度算法步驟中的一步,這些步驟還包括終止當(dāng)前作業(yè)、為當(dāng)前終止的作業(yè)存儲狀態(tài)信息、交換作業(yè),和執(zhí)行新的作業(yè)。服務(wù)器調(diào)度算法將在下面討論。現(xiàn)在簡要地討論套接字(socket)和套接字系統(tǒng)調(diào)用。在一個實施例中,UNIX操作系統(tǒng)可以以分時操作模式運行。在一定的時間(即時間片)內(nèi),UNIX內(nèi)核將CPU分配給一個處理,到這段時間結(jié)束時,搶先這個處理,然后為另外一個處理安排下一個時間片。在前一時間片被搶先的處理被再次進行調(diào)度,在稍晚時間片內(nèi)執(zhí)行。實現(xiàn)并推動處理間的通訊以及允許使用復(fù)雜網(wǎng)絡(luò)協(xié)議的方法之一是采用套接字。內(nèi)核有三個在客戶服務(wù)器模式下發(fā)揮功能的層,包括套接字層、協(xié)議層和設(shè)備層。最頂層(套接字層)提供系統(tǒng)調(diào)用與其他層(協(xié)議層和設(shè)備層)之間的接口。一般來說,套接字層具有耦聯(lián)客戶程序和服務(wù)器程序的端點(endpoints)。套接字端點可以位于不同的機器上。中間層即協(xié)議層提供通信的協(xié)議模式,比如TCP和IP。底層即設(shè)備層包括控制網(wǎng)絡(luò)設(shè)備的設(shè)備驅(qū)動器。一個設(shè)備驅(qū)動器的示例為基于以太網(wǎng)的以太網(wǎng)驅(qū)動器。處理應(yīng)用客戶服務(wù)器模式進行交流。在這個模式里,服務(wù)器程序聽從于一個端點的套接字,而客戶程序通過在一個雙向通信通路中的另一端點的套接字聽從于服務(wù)器程序。內(nèi)核維持著每個客戶、服務(wù)器的三個層之間的內(nèi)在通信并根據(jù)需要從客戶到服務(wù)器發(fā)送數(shù)據(jù)。套接字包含幾個系統(tǒng)調(diào)用,其中包括一個建立了通信通路端點的套接字系統(tǒng)調(diào)用。很多程序使用在許多系統(tǒng)調(diào)用中的套接字描述符sd。綁定系統(tǒng)調(diào)用(bindsystemcall)把一個名字和一個套接描述符sd聯(lián)系起來。一些其它系統(tǒng)調(diào)用的范例包括連接系統(tǒng)調(diào)用(connectsystemcall),其要求內(nèi)核與套接字相聯(lián)系,關(guān)閉系統(tǒng)調(diào)用(closesystemcall)關(guān)閉套接字,切斷系統(tǒng)調(diào)用(shutdownsystemcall)關(guān)閉套接字連接,發(fā)送和接收系統(tǒng)調(diào)用(sendandrecvsystemcall)通過一連接的套接字傳輸數(shù)據(jù)。圖46顯示了的是本發(fā)明的另一個實施例,其中許多工作站通過一個網(wǎng)絡(luò)共享一個單獨的基于分時操作基礎(chǔ)上的模擬系統(tǒng)。許多工作站通過調(diào)度程序1117與模擬系統(tǒng)耦聯(lián)。在模擬系統(tǒng)的計算環(huán)境下,單獨的CPU11與在工作站1110上的局部總線12耦聯(lián)。這種系統(tǒng)也可配備多CPU。如所屬
      技術(shù)領(lǐng)域
      的技術(shù)人員所知,另外裝備了操作系統(tǒng)1118,并且?guī)缀跛械某绦蚝蛻?yīng)用存在于操作系統(tǒng)的頂部。為使概念清晰,操作系統(tǒng)1121連同總線1122一同被示出。在圖46中,工作站1110包括那些在圖1中的部件/單元,他們連同調(diào)度程序1117和調(diào)度程序總線1118通過操作系統(tǒng)1121被耦聯(lián)到局部總線12。調(diào)度程序1117通過向操作系統(tǒng)1121發(fā)出套接字調(diào)用控制分時訪問用戶站1111、1112,和1113。調(diào)度程序1117大部分在軟件中實現(xiàn),部分地在硬件中實現(xiàn)。在這個圖中,只顯示了三個能夠通過網(wǎng)絡(luò)訪問模擬系統(tǒng)的用戶。當(dāng)然,其他系統(tǒng)設(shè)置可具有三個以上或者不到三個用戶。每一用戶通過遠程工作站1111、1112,或1113訪問系統(tǒng)。遠程用戶站1111、1112和1113分別通過網(wǎng)絡(luò)連接站1114、1115和1116被耦聯(lián)到調(diào)度程序1117。如所屬
      技術(shù)領(lǐng)域
      的技術(shù)人員所知,設(shè)備驅(qū)動器1119是連接到PCI總線50和可重新配置的硬件單元20之間的。在設(shè)備驅(qū)動器1119和可重新配置的硬件單元20之間具有連接或?qū)щ娐窂?120。在本發(fā)明的該網(wǎng)絡(luò)多用戶實施例中,調(diào)度程序1117通過操作系統(tǒng)1121與設(shè)備驅(qū)動器1119連接,來聯(lián)絡(luò)和控制可重新配置的硬件單元20,用于硬件加速和硬件狀態(tài)恢復(fù)后進行模擬。另外,在一實施例中,模擬工作站1110是一個SunMicrosystem的Enterprise450系統(tǒng),其使用UltraSPARCII多處理器。與通過局部總線訪問存儲器不同,Sun450系統(tǒng)可以使得多處理器通過一專門總線經(jīng)由一縱橫制接線器與存儲器相連來訪問存儲器,而非聯(lián)合局部總線。圖47顯示了根據(jù)本發(fā)明的網(wǎng)絡(luò)實施例的一模擬服務(wù)器的高層結(jié)構(gòu)。這里,并沒有明確顯示出操作系統(tǒng),但所屬
      技術(shù)領(lǐng)域
      的技術(shù)人員都知道,總是存在著用于文件管理和資源分配的操作系統(tǒng),服務(wù)于在模擬計算環(huán)境中的不同的用戶、處理和裝置。模擬服務(wù)器1130包括調(diào)度程序1137、一個或多個設(shè)備驅(qū)動器1138,和可重新配置的硬件單元1139。雖然在圖45和46中,模擬服務(wù)器并未作為一個單個整體單元被清楚地顯示出來的,但它包括調(diào)度程序1117,設(shè)備驅(qū)動器1119和可重新配置的硬件單元20?;氐綀D47,模擬服務(wù)器1130分別通過網(wǎng)絡(luò)連接/路徑1134、1135和1136與三個用戶工作站1131、1132和1133耦聯(lián)。如上所述,也可有多于三個或不到三個工作站與模擬服務(wù)器1130耦聯(lián)。在模擬服務(wù)器中的調(diào)度程序建立在一個搶先輪轉(zhuǎn)算法基礎(chǔ)上。實質(zhì)上,輪轉(zhuǎn)方案允許幾個用戶或程序按順序地執(zhí)行以完成循環(huán)操作。這樣,每個模擬作業(yè)(與網(wǎng)絡(luò)環(huán)境下的一個工作站或多處理非網(wǎng)絡(luò)環(huán)境下的一個用戶/程序相聯(lián)系)就被授予優(yōu)先等級和執(zhí)行所需的固定的時間片。通常,具有更高優(yōu)先權(quán)的作業(yè)首先被執(zhí)行完。在一種極端情況下,如果每一個不同的用戶有不同的優(yōu)先權(quán),那么就先服務(wù)擁有最高優(yōu)先權(quán)的用戶直到其作業(yè)結(jié)束為止,而最后服務(wù)擁有最低優(yōu)先權(quán)的用戶。在此不使用分時,因為每一個用戶有不同的優(yōu)先權(quán),并且調(diào)度程序僅根據(jù)優(yōu)先權(quán)來服務(wù)于用戶。這種情形與只有一位用戶訪問模擬系統(tǒng)直到完成的情況相似。另一個極端情況就是不同的用戶有相同的優(yōu)先權(quán)。這樣就使用先進先出(FIFO)排列的時間片概念。對于擁有相同優(yōu)先權(quán)的作業(yè),無論從哪一個先開始,每一項作業(yè)都執(zhí)行到其結(jié)束或固定時間片終止。如果作業(yè)在其時間片內(nèi)沒有完成,則必須保存與其已完成的任務(wù)相關(guān)的模擬圖象,用于以后的恢復(fù)和執(zhí)行。然后這項未完的作業(yè)就排在序列最后。然后在下一個時間片內(nèi)恢復(fù)和執(zhí)行已經(jīng)保存的下一個作業(yè)的模擬圖象(如果有的話)。較高優(yōu)先權(quán)的作業(yè)可以搶先較低優(yōu)先權(quán)的作業(yè)。換句話說,相同優(yōu)先權(quán)的作業(yè)以輪轉(zhuǎn)模式執(zhí)行直到其通過時間片完成。其后,以輪轉(zhuǎn)模式執(zhí)行較低優(yōu)先權(quán)的作業(yè)。如果某一較高優(yōu)先權(quán)的作業(yè)被插入到序列中而一個較低優(yōu)先權(quán)的作業(yè)正在運行,那么較高優(yōu)先權(quán)的作業(yè)將優(yōu)先于較低優(yōu)先權(quán)的作業(yè),直到較高優(yōu)先權(quán)的作業(yè)執(zhí)行完。因此,較高優(yōu)先權(quán)的作業(yè)在較低優(yōu)先權(quán)的作業(yè)開始執(zhí)行之前就運行完成了。如果較低優(yōu)先權(quán)的作業(yè)已經(jīng)開始執(zhí)行,則會中止執(zhí)行較低優(yōu)先權(quán)的作業(yè)直到較高優(yōu)先權(quán)的作業(yè)執(zhí)行完。在一個實施中,UNIX操作系統(tǒng)提供基本和基礎(chǔ)的搶先輪轉(zhuǎn)調(diào)度算法。根據(jù)本發(fā)明的一實施例,模擬服務(wù)器的調(diào)度程序算法與操作系統(tǒng)的調(diào)度程序算法協(xié)同工作。在以UNIX為基礎(chǔ)的系統(tǒng)中,調(diào)度程序算法的搶先特征使操作程序可以搶占用戶定義的調(diào)度。為使分時操作計劃能夠?qū)嵤?,模擬調(diào)度程序使用了一種在操作系統(tǒng)本身調(diào)度算法之上的搶先多重優(yōu)先權(quán)輪轉(zhuǎn)算法。根據(jù)本發(fā)明的一實施例,多用戶和模擬服務(wù)器之間的關(guān)系遵循一個客戶服務(wù)器模式,其中多用戶是客戶,而模擬服務(wù)器是服務(wù)器。用戶客戶與服務(wù)器之間通過套接字調(diào)用進行通訊。簡要參考圖55,客戶包括客戶程序1109、一個套接字系統(tǒng)調(diào)用部件1123、UNIX內(nèi)核1124和TCP/IP協(xié)議部件1125。服務(wù)器包括一個TCP/IP協(xié)議部件1126、UNIX內(nèi)核1127、套接字系統(tǒng)調(diào)用部件1128和模擬服務(wù)器1129。多客戶可能需要模擬作業(yè)通過客戶應(yīng)用程序發(fā)出的UNIX套接字調(diào)用在服務(wù)器中被執(zhí)行模擬。在一個實施例中,一個典型的事件順序包括多個客戶通過UNIX套接字協(xié)議向服務(wù)器發(fā)送請求。對于每個請求,服務(wù)器都認為它是關(guān)于指令是否執(zhí)行成功的??墒?,對于服務(wù)器隊列狀態(tài)的請求,服務(wù)器應(yīng)答以當(dāng)前隊列的狀況以便恰當(dāng)?shù)爻尸F(xiàn)給用戶。下表F列出了來自客戶的相關(guān)套接字指令表F客戶套接指令對于每一個套接字調(diào)用,用整數(shù)編碼的每一條指令后面可能有一些附加參數(shù)如代表設(shè)計名稱的<design>參數(shù)。如果這條指令成功執(zhí)行,模擬服務(wù)器發(fā)出的回應(yīng)是0,如果失敗則是1。對于要求隊列狀態(tài)的指令5,指令反饋的一個實施例是以“\0”字符結(jié)尾的ASCII文字,顯示在用戶的顯示屏上。在使用了這些系統(tǒng)套接字調(diào)用后,可通過設(shè)備驅(qū)動器向可重新配置的硬件單元發(fā)出或從其接收正確的通訊協(xié)議信號。圖48是根據(jù)本發(fā)明一個實施例的模擬服務(wù)器的結(jié)構(gòu)。如上所述,單個模擬服務(wù)器可對多用戶或處理提供服務(wù)以達到在分時操作方式下對用戶設(shè)計中的模擬和硬件加速的目的。因此,用戶/處理1147、1148、1149分別通過處理間通訊線路1150、1151、1152與模擬服務(wù)器1140耦聯(lián)。這些處理間通訊線路可存在于同一個工作站中用于多處理器設(shè)置和操作,或者存在于網(wǎng)絡(luò)中用于多工作站的使用。為了與可重新配置的硬件單元進行通訊,每個模擬進程包含軟件模擬狀態(tài)及硬件狀態(tài)。軟件進程之中的處理間通訊通過UNIX套接字或系統(tǒng)調(diào)用來執(zhí)行,它能夠讓裝備有模擬器插入卡時,這個模擬進程存在于同一工作站上,或者存在于通過TCP/IP網(wǎng)絡(luò)相連的分離的工作站上。這樣,與模擬服務(wù)器的通訊可以自動啟動。在圖48中,模擬服務(wù)器1140包括服務(wù)器顯示器1141、一個模擬作業(yè)隊列表1142、一個優(yōu)先級分類器1143、一個作業(yè)交換器1144、設(shè)備驅(qū)動器1145和可重新配置的硬件單元1146,模擬作業(yè)隊列表1142、優(yōu)先級分類器1143和作業(yè)轉(zhuǎn)換器1144組成了圖47所示的調(diào)度程序1137。服務(wù)器顯示器1141為系統(tǒng)管理員提供用戶接口功能。用戶可以通過命令系統(tǒng)顯示隊列中的模擬作業(yè),調(diào)度優(yōu)先權(quán)、使用記錄和模擬作業(yè)交換效率來監(jiān)控模擬服務(wù)器的狀態(tài)。其他使用功能還包括編輯作業(yè)優(yōu)先權(quán),刪除模擬作業(yè)以及重新設(shè)置模擬服務(wù)器狀態(tài)。模擬作業(yè)隊列表1142所列出的是由調(diào)度程序插入的隊列中所有未完成的模擬請求。這個表格包括作業(yè)號、軟件模擬處理號、軟件模擬圖象、硬件模擬圖象文件、設(shè)計配置文件、優(yōu)先權(quán)號、硬件大小、軟件大小、模擬運行的積累時間和擁有者的身份。作業(yè)隊列按照“先進先出”(FIFO)的排隊方式實現(xiàn)。因此,當(dāng)要求一個新的作業(yè)時,它被置于隊列的末尾。優(yōu)先級分類器1143決定執(zhí)行隊列中哪一個模擬作業(yè)。在一個實施例中,模擬作業(yè)優(yōu)先方案是可以由用戶定義(即可以被系統(tǒng)管理員控制和設(shè)定),以此來控制哪一個模擬處理享有當(dāng)前執(zhí)行的優(yōu)先權(quán)。在一個實施例中,根據(jù)特定處理的緊迫性或者具體用戶的重要性來確定優(yōu)先級別。在另外一個實施例中,優(yōu)先級是動態(tài)的,在模擬過程中可以改變。在優(yōu)選實施例中,根據(jù)用戶ID設(shè)置優(yōu)先級。典型的,一個用戶擁有高的優(yōu)先權(quán),而其他用戶享有較低但相同的優(yōu)先權(quán)。優(yōu)先性的級別可由系統(tǒng)管理員設(shè)定。模擬服務(wù)器從UNIX環(huán)境中獲得所有用戶信息,比較典型的是在名為“/etc/passwd”的UNIX用戶文件中發(fā)現(xiàn)的。增加新的用戶過程是與在UNIX系統(tǒng)內(nèi)增加新用戶過程一致。當(dāng)所有的用戶被定義后,就可以用模擬器服務(wù)器的顯示器來為不同用戶調(diào)整優(yōu)先級別。作業(yè)交換器1144根據(jù)為調(diào)度程序編程的優(yōu)先級確定來臨時用與一個處理或工作站關(guān)聯(lián)的模擬作業(yè)替換與不同處理或工作站關(guān)聯(lián)的另一個的模擬作業(yè)。如果多用戶正在模擬同一設(shè)計,作業(yè)交換器只換入存儲的模擬狀態(tài)用于模擬進程。但是,如果多用戶正在模擬多個設(shè)計,那么作業(yè)交換器將在換入模擬狀態(tài)前為硬件配置加載這個設(shè)計。在一個實施例中,由于只需要為可重新配置的硬件單元的訪問完成作業(yè)交換,所以這個作業(yè)交換機制提高了本發(fā)明的分時操作實施例的性能。因此,如果一個用戶在某時間段內(nèi)需要進行軟件模擬,那么服務(wù)器便會為其他用戶換入其它作業(yè),這樣那個用戶便可以訪問可重新配置的硬件單元用于硬件加速。用戶可以調(diào)節(jié)并設(shè)定作業(yè)交換頻率。設(shè)備驅(qū)動器也可以和可重新配置的硬件單元進行通訊以交換作業(yè)?,F(xiàn)在將討論模擬服務(wù)器的操作。圖49是一個模擬服務(wù)器在操作過程中的流程圖。起初系統(tǒng)在步驟1160是空閑的,此時,模擬服務(wù)器沒有必要處于待用狀態(tài),或者說模擬進程不在運行當(dāng)中。其實,空閑狀態(tài)可能意味著如下情況之一(1)沒有模擬運行,(2)在單個處理器環(huán)境中只有一個用戶/工作站是處于激活狀態(tài)以致不需要分時操作,或(3)在多處理環(huán)境中只有一個用戶或工作站處于激活狀態(tài),但是僅一個處理在運行。因此,上述2和3兩種情況表明,模擬服務(wù)器僅需處理一項作業(yè),因此排列作業(yè),決定優(yōu)先級和作業(yè)交換都是不需要和不必要的。由于沒有從其他工作站或者處理中接收請求,因此模擬服務(wù)器處于空閑狀態(tài)。當(dāng)從多用戶環(huán)境下的一工作站或從多處理器環(huán)境下的一微處理器發(fā)出一個或多個請求信號而導(dǎo)致一個模擬請求產(chǎn)生的時候,模擬服務(wù)器將在步驟1162對進入的一個或多個模擬作業(yè)進行排序。調(diào)度程序保持一模擬作業(yè)隊列表,將所有未完成的模擬請求插入其中并列出所有未完成的模擬請求。對于批處理模擬作業(yè),服務(wù)器中的調(diào)度程序給進入的所有模擬請求排隊,并且自動處理這些作業(yè),不需人工介入。接著在步驟1163中,模擬服務(wù)器將對排列好的各作業(yè)進行分類以便決定優(yōu)先權(quán)。這一步對于多個作業(yè)特別重要,因為服務(wù)器必須在各作業(yè)中確定優(yōu)先順序以訪問可重新配置的硬件單元。優(yōu)先級分類器決定執(zhí)行隊列中的哪個模擬作業(yè)。在一個實施例中,若出現(xiàn)資源爭用,模擬作業(yè)優(yōu)先級方案可由用戶定義(即可由系統(tǒng)管理員控制和定義),以控制哪個模擬程序具有當(dāng)前執(zhí)行優(yōu)先級。在步驟1163優(yōu)先級分類之后,服務(wù)器在需要時將在步驟1164交換模擬作業(yè)。這一步驟將根據(jù)為服務(wù)器中的調(diào)度程序設(shè)定的優(yōu)先順序,暫時用與一程序或工作站關(guān)聯(lián)的一模擬作業(yè)來代替與另一程序或工作站關(guān)聯(lián)的另一模擬作業(yè)。如果多個用戶模擬同一個設(shè)計,作業(yè)交換器將只換入已存儲的模擬狀態(tài)用于模擬進程。而若多個用戶在模擬不同的設(shè)計,作業(yè)交換器將先加載設(shè)計再換入模擬狀態(tài)。這里,設(shè)備驅(qū)動器也與可重新配置的硬件單元進行通訊以交換作業(yè)。在一實施例中,作業(yè)交換機制提高了本發(fā)明的分時操作實施效果,因為作業(yè)交換只在訪問可重新配置的硬件單元時需要執(zhí)行。因此,若一個用戶在某個時間段內(nèi)進行軟件模擬,服務(wù)器會為另一用戶換入另一作業(yè),這樣該另一用戶就可訪問可重新配置的硬件單元以進行硬件加速。例如,假設(shè)用戶1和用戶2均通過模擬服務(wù)器訪問可重新配置的硬件單元。首先,在一段時間內(nèi)用戶1訪問系統(tǒng),可以調(diào)試他/她的用戶設(shè)計。若用戶1只在軟件模式下進行調(diào)試,服務(wù)器就可釋放可重新配置的硬件單元,此時用戶2即可訪問它。服務(wù)器換入用戶2的作業(yè),于是用戶2可以軟件模擬或硬件加速模型。根據(jù)用戶1和用戶2之間的優(yōu)先順序,用戶2在預(yù)定的時間內(nèi)可以繼續(xù)訪問可重新配置的硬件單元,或者在用戶1需要可重新配置的硬件單元來加速時,服務(wù)器可搶占用戶2的作業(yè),這樣用戶1的作業(yè)即可被換入并通過可重新配置的硬件單元進行硬件加速。預(yù)定的時間是指基于具有相同優(yōu)先級的多個請求的模擬器作業(yè)的占先。在一實施例中,雖然用戶可以對它進行設(shè)置,但系統(tǒng)默認時間是5分鐘。這個5分鐘的設(shè)置代表了一種超時計時器的形式。本發(fā)明的模擬系統(tǒng)使用超時計時器來停止當(dāng)前模擬作業(yè)的執(zhí)行是因為該作業(yè)太耗時,系統(tǒng)因此決定其他具有同樣優(yōu)先級的待決作業(yè)應(yīng)該訪問可重新配置的硬件模型。在步驟1164,作業(yè)交換步驟完成以后,服務(wù)器中的設(shè)備驅(qū)動器將鎖住可重新配置的硬件單元,這樣只有當(dāng)前計劃中的用戶或程序可以模擬并使用硬件模型。鎖存和模擬步驟發(fā)生在步驟1165。一旦在事件1166模擬完成或是當(dāng)前模擬進程發(fā)生暫停,服務(wù)器將返回優(yōu)先級分類步驟1163以決定各待決模擬作業(yè)的優(yōu)先級,并在必要時進行隨后的模擬作業(yè)交換。類似地,在步驟1167中服務(wù)器也可能搶占當(dāng)前模擬作業(yè)的執(zhí)行而返回至優(yōu)先級分類狀態(tài)1163。搶占只在特定條件下發(fā)生。其中一個這樣條件是具有更高優(yōu)先權(quán)的作業(yè)等待處理。另外一個這樣的條件是當(dāng)系統(tǒng)正運行一個計算密集的模擬任務(wù),此時調(diào)度程序可被設(shè)計為利用超時計時器阻止當(dāng)前運行的作業(yè)而處理具有同樣優(yōu)先性的另一個作業(yè)。在一實施例中,超時計時器被設(shè)定在5分鐘。若當(dāng)前作業(yè)執(zhí)行了5分鐘,系統(tǒng)將搶占當(dāng)前作業(yè)而換入即使處于同等優(yōu)先地位的待決作業(yè)。圖50顯示了作業(yè)交換處理的流程圖。作業(yè)交換功能在圖49的步驟1164中實現(xiàn),并在圖48中作為作業(yè)交換器1144顯示在模擬服務(wù)器的硬件里。在圖50中,當(dāng)一個模擬作業(yè)需要與另外一個模擬作業(yè)交換時,作業(yè)交換器會在步驟1180中向可重新配置的硬件單元傳送一個中斷。如果可重新配置的硬件單元當(dāng)前并不運行任何作業(yè)(即系統(tǒng)空閑或者用戶只在軟件模式中進行操作,沒有涉及任何硬件加速),則該中斷使可重新配置的硬件單元立即作好作業(yè)交換的準(zhǔn)備。然而,若可重新配置的硬件單元正在運行一項作業(yè)并正在執(zhí)行一個指令或處理數(shù)據(jù),中斷信號將被識別,但可重新配置的硬件單元仍繼續(xù)執(zhí)行當(dāng)前待決指令并處理當(dāng)前作業(yè)的數(shù)據(jù)。若可重新配置的硬件單元并非在對當(dāng)前作業(yè)進行指令執(zhí)行或數(shù)據(jù)處理的過程中接受了中斷信號,則該信號實質(zhì)上立即終止了可重新配置的硬件單元的操作。在步驟1181中,模擬系統(tǒng)保存了當(dāng)前模擬圖像(即軟件和硬件狀態(tài))。通過保存該圖像,用戶隨后可以不必重新運行至該保存點的整個模擬而恢復(fù)模擬的運行。在步驟1182中,模擬系統(tǒng)為可重新配置的硬件單元配置了新的用戶設(shè)計。這個配置步驟只有在下面的情況下才是必要的即與新的作業(yè)相關(guān)的用戶設(shè)計與剛被中止執(zhí)行的可重新配置的硬件單元中已配置并加載的用戶設(shè)計不同。在配置完成之后,被保存的硬件模擬圖像在步驟1183中重新加載,而被保存的軟件模擬圖像則在步驟1184中重新加載。若新的模擬作業(yè)與同樣的設(shè)計相關(guān),則不需要再進行設(shè)置。對于同樣的設(shè)計,模擬系統(tǒng)將在步驟1183中加載所期望的與相同設(shè)計的新的模擬作業(yè)有關(guān)的硬件模擬圖像,因為新作業(yè)的模擬圖像與剛被中止的作業(yè)的模擬圖像可能有所不同。配置步驟的詳情請見本專利說明書。此后,相關(guān)的軟件模擬圖像在步驟1184中重新加載。在重新加載軟件和硬件模擬圖像后,新作業(yè)的模擬將在步驟1185中開始,而前一個被中止的作業(yè)只能在軟件模擬模式下進行,因為它暫時不能訪問可重新配置的硬件單元。圖51顯示設(shè)備驅(qū)動器和可重新配置的硬件單元之間的信號。設(shè)備驅(qū)動器1171提供了調(diào)度程序1170和可重新配置的硬件單元1172之間的接口。如圖45和46所示,設(shè)備驅(qū)動器1171還提供了整個計算環(huán)境(即工作站,PCI總線,PCI設(shè)備)和可重新配置的硬件單元1172之間的接口,但圖51只顯示了模擬服務(wù)器部分。設(shè)備驅(qū)動器和可重新配置的硬件單元之間的信號包括雙向通信交換信號、從計算環(huán)境經(jīng)由調(diào)度程序傳向可重新配置的硬件單元的不定向設(shè)計配置信息、換入模擬狀態(tài)信息、換出模擬狀態(tài)信息,以及從設(shè)備驅(qū)動器傳向可重新配置的硬件單元以交換模擬作業(yè)的中斷信號。線路1173傳遞雙向通信交換信號,這些信號和交換協(xié)議將結(jié)合圖53和圖54進行討論。線路1174傳遞從計算環(huán)境經(jīng)由調(diào)度程序1170傳向可重新配置的硬件單元1172的不定向設(shè)計配置信息。為進行模型化初始,配置信息可以通過線路1174傳向可重新配置的硬件單元1172。另外,當(dāng)用戶在模型化和模擬不同的用戶設(shè)計時,配置信息必須在一個分時內(nèi)傳送至可重新配置的硬件單元1172。當(dāng)不同的用戶在模型化同一個用戶設(shè)計時,新的設(shè)計配置是不必要的;而為了不同的模擬運行,可能需要將與同一個設(shè)計相關(guān)的不同的模擬硬件狀態(tài)傳向可重新配置的硬件單元1172。線路1175向可重新配置的硬件單元1172傳送換入模擬狀態(tài)信息。線路1176傳送從可重新配置的硬件單元到計算環(huán)境(通常為存儲器)的換出模擬狀態(tài)信息。換入模擬狀態(tài)信息包括先前保存的硬件模型狀態(tài)信息和可重新配置的硬件單元1172需要加速的硬件存儲器狀態(tài)。換入模擬狀態(tài)信息是時間片的開始進行傳送的,這樣預(yù)定的當(dāng)前用戶就可以訪問可重新配置的硬件單元以進行加速。換出模擬狀態(tài)信息包括可重新配置的硬件單元1172接收中斷信號而移至與一不同的用戶/程序相關(guān)的下一個時間片后,在一時間片的末尾必須被保存到存儲器中的硬件模型和存儲器狀態(tài)信息。狀態(tài)信息的存儲使得當(dāng)前用戶/程序可以在稍后的時間內(nèi)(例如分配給當(dāng)前用戶/程序的下一個時間片)恢復(fù)該狀態(tài)。線路1177從設(shè)備驅(qū)動器1171向可重新配置的硬件單元傳送中斷信號以進行模擬作業(yè)的交換。中斷信號在時間片之間傳送,這樣才能在當(dāng)前時間片換出當(dāng)前模擬作業(yè)而在下一時間片換入新的模擬作業(yè)?,F(xiàn)在,在參照圖53和圖54的基礎(chǔ)上,討論根據(jù)本發(fā)明的一實施的通信交換協(xié)議。圖53顯示了設(shè)備驅(qū)動器和可重新配置的硬件單元之間通過一交換邏輯接口傳輸?shù)耐ㄐ沤粨Q信號。圖54是通信協(xié)議的狀態(tài)圖。圖51顯示了線路1173上的通信交換信號。圖53則是設(shè)備驅(qū)動器和可重新配置的硬件單元之間的通信交換信號的詳細情形。在圖53中,交換邏輯接口1234位于可重新配置的硬件單元1172中?;蛘?,交換邏輯接口1234可安裝在可重新配置的硬件單元1172的外部。在設(shè)備驅(qū)動器1171和交換邏輯接口1234之間有四組信號。這些信號是線路1230上的3字節(jié)SPACE(空間)信號、線路1231上的單字節(jié)讀/寫信號、線路1232上的4字節(jié)COMMAND(命令)信號,以及線路1233上的單字節(jié)DONE(完成)信號。交換邏輯接口包含了處理這些信號的邏輯電路,將可重新配置的硬件單元放置于適當(dāng)?shù)哪J街乱詧?zhí)行需要運行的不同操作。該接口與CTRLFPGA單元(或者FPGA輸入/輸出控制器)相連。對于3字節(jié)SPACE信號來說,建立在PCI總線之上的模擬系統(tǒng)計算環(huán)境與可重新配置的硬件單元之間的數(shù)據(jù)傳輸被指定到軟件/硬件邊界中的特定I/O地址空間--REG(寄存器)、CLK(軟件時鐘)、S2H(軟件到硬件)和H2S(硬件到軟件)中。正如前文所述,模擬系統(tǒng)根據(jù)不同的部件類型和控制功能將硬件模型映射到主存儲器的四個地址空間中REG空間被指定用于寄存器部件;CLK空間被指定用于軟件時鐘;S2H空間被指定用于軟件測試平臺部件到硬件模型的輸出;H2S空間則被指定用于硬件模型到軟件測試平臺部件的輸出。在系統(tǒng)初始化的時間中,這些專用的輸入/輸出緩沖空間將被映射到內(nèi)核的主存儲空間。下表G表明了描述了每個SPACE信號的描述表GSPACE信號線路1231上的讀/寫信號表明該數(shù)據(jù)是讀還是寫。線路1233上的DONE信號表示一個DMA數(shù)據(jù)傳輸期間的結(jié)束。4字節(jié)COMMAND表明該數(shù)據(jù)傳輸操作是讀、寫、配置新的用戶設(shè)計進入可重新配置的硬件單元中,還是中斷模擬。COMMAND協(xié)議如下表H所示表HCOMMAND信號現(xiàn)在參考圖54的狀態(tài)圖討論通信交換協(xié)議。在狀態(tài)1400,設(shè)備驅(qū)動器模擬系統(tǒng)空閑。只要沒有新的命令發(fā)出,該系統(tǒng)將如路徑1401所示保持空閑狀態(tài)。當(dāng)新的命令發(fā)出時,命令處理器將在狀態(tài)1402中處理新的命令。在本實施例中,命令處理器是FPGA輸入/輸出控制器。若COMMAND=0000或者COMMAND=0001,系統(tǒng)將如狀態(tài)1403的SPACE指數(shù)表明的那樣在指定空間進行讀或?qū)?。若COMMAND=0010,系統(tǒng)在狀態(tài)1104將開始用一用戶設(shè)計對在可重新配置的硬件中的FPGA進行配置,或者用一新的用戶設(shè)計對FPGA進行配置。系統(tǒng)將為所有的FPGA進行配置信息的排序,以模型化用戶設(shè)計中可以在硬件中模擬的一部分。然而,如果COMMAND=0011,系統(tǒng)將在狀態(tài)1405中斷可重新配置的硬件單元以中斷模擬系統(tǒng),因為時間片已經(jīng)超時,準(zhǔn)備為新的用戶/程序換入新的模擬狀態(tài)。在這些狀態(tài)1403、1404、1405結(jié)束之后,模擬系統(tǒng)會進入DONE狀態(tài)1406以產(chǎn)生DONE信號,然后即返回狀態(tài)1400并保持空閑狀態(tài)直到新的命令出現(xiàn)?,F(xiàn)在討論模擬服務(wù)器在處理多個處于不同優(yōu)先級上的作業(yè)時的分時操作特征。圖52給出了一個例子模擬作業(yè)隊列中有四個即將進行的作業(yè)(作業(yè)A、作業(yè)B、作業(yè)C、作業(yè)D)。但這四個作業(yè)的優(yōu)先級有所不同作業(yè)A和作業(yè)B被指定為高優(yōu)先級I,作業(yè)C和作業(yè)D則為低優(yōu)先級II。正如圖52的時線圖中所顯示的,可重新配置的硬件分時操作的使用取決于待決作業(yè)隊列的優(yōu)先等級。在時間1190,模擬從作業(yè)A開始,準(zhǔn)許其訪問可重新配置的硬件單元。在時間1191,作業(yè)A被作業(yè)B搶占,因為作業(yè)B和作業(yè)A有同等的優(yōu)先級,調(diào)度程序?qū)勺鳂I(yè)提供了平等的分時操作訪問權(quán)限。作業(yè)B現(xiàn)在訪問可重新配置的硬件單元。在時間1192,作業(yè)A搶占作業(yè)B并在時間1193執(zhí)行至完成。在時間1193,作業(yè)B接著進行并在時間1194執(zhí)行至完成。在時間1194,處于作業(yè)隊列中下一位但比作業(yè)A和作業(yè)B的優(yōu)先級低的作業(yè)C訪問可重新配置的硬件單元并開始執(zhí)行。在時間1195,作業(yè)D搶占作業(yè)C,進行分時操作訪問,因為它們具有同等優(yōu)先級。作業(yè)D的訪問權(quán)限到時間1196中止,此時它被作業(yè)C搶占。作業(yè)C在時間1197執(zhí)行完畢,然后作業(yè)D在時間1197重新獲得訪問權(quán)限并在時間1198執(zhí)行完畢。VIII.存儲器模擬本發(fā)明的存儲器模擬或存儲器映射特征為模擬系統(tǒng)提供了一個有效的方法來管理多個與用戶設(shè)計的配置好的硬件模型相關(guān)的存儲器區(qū)塊,而此用戶設(shè)計的程序是編在可重新配置的硬件單元的FPGA芯片陣列中的。通過實施本發(fā)明的實施例,存儲器模擬方案不需要FPGA芯片上任何專用的引腳來處理存儲器訪問。這里所用的“存儲器訪問”是指FPGA邏輯裝置和SARAM存儲器裝置之間的一讀或一寫的訪問,用戶設(shè)計被配置在FPGA邏輯裝置中,而SRAM存儲器裝置存儲了所有與用戶設(shè)計有關(guān)的存儲器區(qū)塊。因此,寫操作涉及FPGA邏輯裝置到SRAM存儲器裝置的數(shù)據(jù)傳送,而讀操作涉及從SRAM存儲器裝置到FPGA邏輯裝置的數(shù)據(jù)傳送。參照圖56,F(xiàn)PGA邏輯裝置包括1201(FPGA1)、1202(FPGA3)、1203(FPGA0)和1204(FPGA2),而SRAM存儲器裝置則包括存儲器裝置1205和1206。同時,“DMA數(shù)據(jù)傳送”除了所屬
      技術(shù)領(lǐng)域
      的技術(shù)人員所了解的普通用法,它還指在計算系統(tǒng)和模擬系統(tǒng)之間的數(shù)據(jù)傳送。圖1、圖45和圖46顯示的計算系統(tǒng)是整個基于PCI并帶有存儲器的系統(tǒng),它支持位于軟件和可重新配置中的模擬系統(tǒng)。所選的設(shè)備驅(qū)動器和操作系統(tǒng)所發(fā)出或接收的套接字/系統(tǒng)調(diào)用也是模擬系統(tǒng)的一部分,該部分提供了與操作系統(tǒng)和可重新配置的硬件單元的適當(dāng)?shù)慕涌?。在本發(fā)明的一實施例中,一個DMA讀取傳送包括從FPGA邏輯裝置(和用于初始化和存儲內(nèi)容轉(zhuǎn)儲的FPGASRAM存儲器裝置)到主機計算系統(tǒng)的數(shù)據(jù)傳送。一個DMA寫傳送包括從主機計算系統(tǒng)到FPGA邏輯裝置(和用于初始化和存儲內(nèi)容轉(zhuǎn)儲的FPGASRAM存儲器裝置)的數(shù)據(jù)傳送。這里提到的術(shù)語“FPGA數(shù)據(jù)總線”、“FPGA總線”、“FD總線”以及其他種種變化的說法是指高端組總線FD[6332]和低端組總線FD[310],這些總線連接了包含有待調(diào)試的已配置和已編程的用戶設(shè)計的FPGA邏輯裝置和SRAM存儲器裝置。存儲器模擬系統(tǒng)包括一存儲狀態(tài)機、一估算狀態(tài)機以及與它們相關(guān)的邏輯,控制和連接(1)主計算系統(tǒng)和其相關(guān)存儲系統(tǒng),(2)模擬系統(tǒng)中與FPGA總線相連的SRAM存儲器裝置,(3)包含正被調(diào)試的配置好并編程好的用戶設(shè)計的FPGA邏輯裝置。存儲器模擬系統(tǒng)的FPGA邏輯裝置端包括一估算狀態(tài)機、一FPGA總線驅(qū)動器,以及用于每個存儲器區(qū)塊N與用戶設(shè)計中用戶自身的存儲器接口相連的一邏輯接口,處理(1)FPGA邏輯裝置之間的數(shù)據(jù)估算,以及(2)SRAM存儲器裝置和FPGA邏輯裝置之間的讀/寫存儲器訪問。FPGA輸入/輸出控制器端是與FPGA邏輯裝置端相連的,它包括存儲狀態(tài)機和邏輯接口并處理(1)主計算系統(tǒng)和SRAM存儲器裝置,以及(2)FPGA邏輯裝置和SRAM存儲器裝置之間的DMA、讀、寫操作。根據(jù)本發(fā)明的一實施例,存儲器模擬系統(tǒng)的操作的描述大體如下。模擬讀/寫循環(huán)分為三個階段DMA數(shù)據(jù)傳輸,估算和存儲器訪問。DATAXSFR信號表明DMA數(shù)據(jù)傳輸階段的出現(xiàn),在此階段,計算系統(tǒng)和SRAM存儲單元之間通過FPGA數(shù)據(jù)總線——高端組總線1212(FD[6332])和低端組總線1213(FD[310])——互相傳送數(shù)據(jù)。在估算階段,每個FPGA邏輯裝置中的邏輯電路生成正確的軟件時鐘、輸入啟動和多路復(fù)用啟動信號到用戶的設(shè)計邏輯中進行數(shù)據(jù)估算。FPGA邏輯裝置間的通信在這個階段發(fā)生。在存儲器訪問階段,存儲器模擬系統(tǒng)等待高端和低端組FPGA邏輯裝置將它們各自的地址和控制信號放置于各自的FPGA數(shù)據(jù)總線上。CTRL_FPGA單元將鎖存這些地址和控制信號。若進行寫操作,則地址、控制和數(shù)據(jù)信號將被從FPGA邏輯裝置傳送至各自的SRAM存儲器裝置。若進行讀操作,則地址和控制信號將被提供給指定的SRAM存儲器裝置,而數(shù)據(jù)信號則由SRAM存儲器裝置傳向各自的FPGA邏輯裝置。在所有FPGA邏輯裝置中的所有需要的存儲器區(qū)塊被訪問之后,存儲器模擬讀/寫循環(huán)完成,而存儲器模擬系統(tǒng)在下一個存儲器模擬讀/寫循環(huán)到來之前保持閑置狀態(tài)。圖56顯示的是根據(jù)本發(fā)明一實施例的存儲器模擬配置的高層結(jié)構(gòu)圖。與本發(fā)明的存儲器模擬不相關(guān)的信號、連接以及總線沒有被顯示出來。上面敘述過的CTRL_FPGA單元1200,通過線路1209和總線1210相連接。在一實施例中,CTRL_FPGA單元1200是FPGA芯片形式的可編程邏輯裝置(PLD),例如Altera10K50芯片。局部總線1210使得CTRL_FPGA單元1200可以和其他模擬陣列板(如果有的話)和其它芯片(如PCI控制器、EEPROM、時鐘緩沖器)相連接。線路1209傳送DONE信號,該信號表示一個模擬DMA數(shù)據(jù)傳輸階段的完成。圖56以邏輯裝置和存儲器裝置的形式顯示了其他主要的功能性區(qū)塊。在本發(fā)明的一實施例中,邏輯裝置是以FPGA芯片形式的可編程邏輯裝置(PLD),例如Altera10K130或10K250芯片。因此,與前面所示的實施例中陣列內(nèi)有8個AlteraFLEX10K100芯片不司,本實施例只使用了四個AlteraFLEX10K130芯片。存儲器裝置是一個同步的管線式高速緩存SRAM,例如Cypress128Kx32CY7C1335或CY7C1336芯片。邏輯裝置包括1201(FPGA1)、1202(FPGA3)、1203(FPGA0)和1204(FPGA2)。SRAM芯片包括低端組存儲器裝置1205(L-SRAM)和高端組存儲器裝置1206(H-SRAM)。這些邏輯裝置和存儲器裝置通過高端組總線1212(FD[6332])和低端組總線1213(FD[310])與CTRL_FPGA單元1200相連接。邏輯裝置1201(FPGA1)和1202(FPGA3)分別通過總線1223和總線1225與高端組總線1212相連接,而邏輯裝置1203(FPGA0)和1204(FPGA2)則分別通過總線1224和總線1226與低端組數(shù)據(jù)總線1213相連接。高端組存儲器裝置1206通過總線1220與高端組總線1212相連接,而低端組存儲器裝置1205通過總線1219與低端組總線1213相連接。這種雙重的組總線結(jié)構(gòu)可以使模擬系統(tǒng)以更高的通過率并行進入高端組裝置和低端組裝置。這種雙重的組數(shù)據(jù)總線結(jié)構(gòu)同時支持其他信號,如控制信號和地址信號,這樣就可以控制模擬讀/寫循環(huán)。翻到圖61,每個模擬讀/寫循環(huán)包括DMA數(shù)據(jù)傳輸階段、估算階段和存儲器訪問階段。多種控制信號的結(jié)合控制并表明模擬系統(tǒng)是否處于與另外一階段相對的某階段。主計算系統(tǒng)與可重新配置的硬件單元的邏輯裝置1201到1204之間的DMA數(shù)據(jù)傳輸通過PCI總線(如圖46中的總線50)、局部總線1210和1236,以及FPGA總線1212(FD[6332])和1213(FD[310])進行的。DMA數(shù)據(jù)傳輸所涉及的存儲器裝置1205和1206是執(zhí)行初始化和存儲內(nèi)容轉(zhuǎn)儲的??芍匦屡渲玫挠布卧羞壿嬔b置1201到1204之間的估算數(shù)據(jù)傳輸是通過互連(如上文所述)和FPGA總線1212(FD[6332])和1213(FD[310])進行。邏輯裝置1201到1204以及存儲器裝置1205和1206之間的存儲器訪問是通過FPGA總線1212(FD[6332])和1213(FD[310])進行的。再回到圖56,CTRL_FPGA單元1200提供并接收了許多控制和地址信號,以控制模擬讀/寫循環(huán)。CTRL_FPGA單元1200通過線路1221分別向邏輯裝置1201和1203,以及通過線路1222分別向邏輯裝置1202和1204提供線路1211上的DATAXSFR和EVAL信號。CTRL_FPGA單元1200還分別通過總線1229和1214向低端組存儲器裝置1205和高端組存儲器裝置1206提供MA[182]信號。為了控制這些存儲器裝置的模式,CTRL_FPGA單元1200分別通過總線1216和1215向低端組存儲器裝置1205和高端組存儲器裝置1206提供芯片選擇讀(和寫)信號。存儲器模擬系統(tǒng)可以在總線1209上向CTRL_FPGA單元1200和計算系統(tǒng)發(fā)出或接收DONE信號來表明DMA數(shù)據(jù)傳輸?shù)耐瓿?。正如在前面結(jié)合圖9、11、12、14和15時提到的,邏輯裝置1201到1204是通過多路復(fù)用跨芯片地址指示器鏈路連接在一起的,這種指示器鏈在圖56中體現(xiàn)為兩組SHIFTIN/SHIFTOUT線路線路1207、1227和1218以及線路1208、1228和1217。這些線路組在鏈的開始處初始于線路1207和1208上的Vcc。SHIFTIN信號從前面的組中的FPGA邏輯裝置中傳出并開始對當(dāng)前FPGA邏輯裝置的存儲訪問。在通過一組特定的鏈所進行的移位完成之后,最后的邏輯裝置向CTRL_FPGA單元1200發(fā)出LAST信號(即LASTL或LASTH)。對于高端組,邏輯裝置1202在線路1218上向CTRL_FPGA單元1200發(fā)出LASTH移出信號,而對于低端組,邏輯裝置1204在線路1217上向CTRL_FPGA單元1200發(fā)出LASTL信號。至于電路板實施和圖56,本發(fā)明的一實施例將部件(如邏輯裝置1201-1204,存儲器裝置1205-1206,和CTRL_FPGA單元1200)和總線(如FPGA總線1212-1213和局部總線1210)合并在一個電路板上。這個電路板通過主板連接器與主板相連接。因此,在一個電路板上有四個邏輯裝置(每個組上兩個),兩個存儲器裝置(每個組上一個),以及總線。第二個電路板上則包括它自身的邏輯裝置(通常為四個),存儲器裝置(通常為兩個),F(xiàn)PGA輸入/輸出控制器(CTRL_FPGA單元)和總線。但PCI控制器只安裝在第一個電路板上。電路板之間有上文提到的電路板間連接器,這樣所有電路板上的邏輯裝置可以連在一起,并在估算時可以互相通訊,另外在所有電路板之間設(shè)有局部總線。每個電路板上都設(shè)有FPGA總線FD[630],但它們不跨越多個電路板。在此電路板配置中,模擬系統(tǒng)在每個電路板上的邏輯裝置和存儲器裝置之間進行存儲器映射,但不支持不同電路板之間的存儲器映射。因此,電路板5上的邏輯裝置只能將存儲器區(qū)塊映射到電路板5上的存儲器裝置而不能映射到其他電路板上的存儲器裝置。但在其它實施例中,模擬系統(tǒng)則可以將存儲器區(qū)塊從一個電路板上的邏輯裝置映射到另外一個電路板上的存儲器裝置。根據(jù)本發(fā)明的一實施例的存儲器模擬系統(tǒng)的操作大致如下。模擬讀寫循環(huán)分為三個階段DMA數(shù)據(jù)傳輸、估算和存儲器訪問。為顯示一個模擬讀寫循環(huán)的完成,存儲器模擬系統(tǒng)可以在線路1209上向/從CTRL_FPGA單元1200和計算系統(tǒng)傳送/接收DONE信號。總線1211上的DATAXSFR信號表明DMA數(shù)據(jù)傳輸階段的發(fā)生,在該階段中,計算系統(tǒng)和FPGA邏輯裝置1201到1204通過FPGA數(shù)據(jù)總線、高端組總線1212(FD[6332])和低端組總線1213(FD[610])互相傳送數(shù)據(jù)。總的說來,DMA傳送發(fā)生在主計算系統(tǒng)和FPGA邏輯裝置之間。對于初始化和存儲內(nèi)容轉(zhuǎn)儲,DMA傳送發(fā)生在主計算系統(tǒng)與SRAM存儲器裝置1205和1206之間。在估算階段,每個FPGA邏輯裝置1201-1204中的邏輯電路為用戶設(shè)計邏輯生成適當(dāng)?shù)能浖r鐘、輸入啟動和多路復(fù)用啟動信號以進行數(shù)據(jù)估算。FPGA邏輯裝置間的通信發(fā)生于此階段。CTRL_FPGA單元1200也啟動估算計數(shù)器以控制估算周期的持續(xù)時間。計數(shù)的數(shù)量,以及相應(yīng)的估算周期的持續(xù)時間由系統(tǒng)通過確定信號的最長路徑來設(shè)定。路徑長度與具體數(shù)量的步驟相關(guān)。系統(tǒng)使用此步驟信息并計算出使得估算循環(huán)能夠完成運行所需要的計數(shù)數(shù)量。在存儲器訪問階段,存儲器模擬系統(tǒng)等待高低端組FPGA邏輯裝置1201-1204分別將其地址和控制信號存放于各自的FPGA數(shù)據(jù)總線上。CTRL_FPGA單元1200將鎖存這些地址和控制信號。對于寫操作,地址、控制和數(shù)據(jù)信號將從FPGA邏輯裝置1201-1204傳送至各自的SRAM存儲器裝置1205和1206。對于讀操作,地址和控制信號將從FPGA邏輯裝置1201-1204傳送至各自的SRAM存儲器裝置1205和1206,而數(shù)據(jù)信號則由SRAM存儲器裝置1205和1206傳向各自的FPGA邏輯裝置1201-1204。在FPGA邏輯裝置端,F(xiàn)D總線驅(qū)動器將一存儲器區(qū)塊的地址和控制信號置于FPGA數(shù)據(jù)總線(FD總線)之上。若是寫操作,寫數(shù)據(jù)被放置于FD總線上用于該存儲器區(qū)塊。若是讀操作,雙緩沖器將從SRAM存儲器裝置為FD總線上的存儲器區(qū)塊鎖存數(shù)據(jù)存儲器區(qū)塊。這個操作在每個FPGA邏輯裝置的每個存儲器區(qū)塊中按順序進行,每次只在一個存儲器區(qū)塊中進行。當(dāng)一個FPGA邏輯裝置上所有需要的存儲器區(qū)塊均已被訪問時,存儲器模擬系統(tǒng)將進入每個組的下一個FPGA邏輯裝置并開始對該FPGA邏輯裝置的存儲器區(qū)塊的訪問。在所有FPGA邏輯裝置1201-1204上所有需要的存儲器區(qū)塊均被訪問后,存儲器模擬讀/寫循環(huán)完成,存儲器模擬系統(tǒng)將保持閑置狀態(tài),直到下一個存儲器模擬讀/寫循環(huán)的到來。圖57是本發(fā)明存儲器模擬方面的更詳細的結(jié)構(gòu)圖,包括CTRL_FPGA單元1200更加詳細的結(jié)構(gòu)圖以及與存儲器模擬相關(guān)的所有邏輯裝置。圖57顯示了CTRL_FPGA單元1200和邏輯裝置1203的一部分(其結(jié)構(gòu)類似于其它邏輯裝置1201、1202和1204的部分)。CTRL_FPGA單元1200包括存儲器有限狀態(tài)機(MEMFSM)1240,“與”門1241,估算(EVAL)計數(shù)器1242,低端組存儲器地址/控制鎖存器1243,低端組地址/控制多路復(fù)用器1244,地址計數(shù)器1245,高端組存儲器地址/控制鎖存器1247以及高端組地址/控制多路復(fù)用器1246。每個邏輯裝置,例如圖57中所顯示的邏輯裝置1203,包括估算有限狀態(tài)機(EVALFSMx)1248和數(shù)據(jù)總線多路復(fù)用器(用于邏輯裝置FPGA01203的FDO-MUXx)1249。EVALFSM結(jié)尾所附的“x”表示與之相關(guān)的特定邏輯裝置(FPGA0,F(xiàn)PGA1,F(xiàn)PGA2,F(xiàn)PGA3),這個例子中的“x”表示從0到3之間的一個數(shù)。因此,EVALFSM0與邏輯裝置1203的FPGA0相關(guān)??偟恼f來,每個邏輯裝置都與一些數(shù)字x相關(guān)。而對于使用的N個邏輯裝置,x則代表從0到N-1的某個數(shù)。在1201-1204的每個邏輯裝置中,大量存儲器區(qū)塊與配置好并被映射的用戶設(shè)計相關(guān)。因此,用戶邏輯中的存儲器區(qū)塊接口1253為計算系統(tǒng)進入需要的FPGA邏輯裝置陣列的存儲器區(qū)塊提供了途徑。存儲器區(qū)塊接口1253還將總線1295上的存儲器寫數(shù)據(jù)提供給FPGA數(shù)據(jù)總線多路復(fù)用器(FDO-MUXx)1249,并從存儲器讀數(shù)據(jù)雙緩沖器1251接收總線1297上的存儲器讀數(shù)據(jù)。每個FPGA邏輯裝置都有一存儲器區(qū)塊數(shù)據(jù)/邏輯接口1298。每個這樣的存儲器區(qū)塊數(shù)據(jù)/邏輯接口1298都連接著FPGA數(shù)據(jù)總線多路復(fù)用器(FDO-MUXx)1249、估算有限狀態(tài)機(EVALFSMx)1248,和FPGA總線FD[630]。存儲器區(qū)塊數(shù)據(jù)/邏輯接口1298包括存儲器讀數(shù)據(jù)雙緩沖器1251、地址補償單元1250、存儲器模型1252以及每個存儲器區(qū)塊N的存儲器區(qū)塊接口1253。它們同樣也存在于每個存儲器區(qū)塊N的任何給定的FPGA邏輯裝置1201-1204中。因此,如果有5個存儲器區(qū)塊,那么就有5組存儲器區(qū)塊數(shù)據(jù)/邏輯接口1298;也就是說對每個存儲器區(qū)塊N(mem_block_N),有5組存儲器讀數(shù)據(jù)雙緩沖器1251、地址補償單元1250、存儲器模型1252,以及存儲器區(qū)塊接口1253。和EVALFSMx一樣,F(xiàn)DO-MUXx中的“x”也表示與之相關(guān)的特定邏輯裝置(FPGA0、FPGA1、FPGA2、FPGA3),這里“x”表示從0到3之間的一個數(shù)。FDO-MUXx1249的輸出位于總線1282上,而總線1282則與高端組總線FD[6332]或低端組總線FD[310]相連,至于與哪個總線相連取決于FDOMUXx1249和哪個芯片(FPGA0、FPGA1、FPGA2、FPGA3)相關(guān)。在圖57中,F(xiàn)DO-MUXx是和低端組邏輯裝置FPGA01203相連的FDO-MUX0。因此,總線1282上的輸出在低端組總線FD[310]上??偩€1283部分被用來從高端組總線FD[6332]或低端組總線FD[310]向讀總線1283傳送讀數(shù)據(jù),以將其輸入到存儲器讀數(shù)據(jù)雙緩沖器1251中。因此,寫數(shù)據(jù)通過FDO-MUXx1249從每個邏輯裝置1201-1204上的存儲器區(qū)塊傳輸?shù)礁叨私M總線FD[6332]或低端組總線FD[310]中,而讀數(shù)據(jù)則通過讀總線1283從高端組總線FD[6332]或低端組總線FD[310]傳輸?shù)酱鎯ζ髯x數(shù)據(jù)雙緩沖器1251中。存儲器讀數(shù)據(jù)雙緩沖器利用雙重緩沖機制鎖存第一個緩沖器中的數(shù)據(jù),然后再進行緩沖,同時釋放被鎖存數(shù)據(jù)以使偏差最小化。存儲器讀數(shù)據(jù)雙緩沖器1251將在下文詳細討論。再回到存儲器模型1252,它將用戶的存儲器類型轉(zhuǎn)化為存儲器模擬系統(tǒng)的SRAM類型。因為用戶設(shè)計中的存儲器類型可能各不相同,因此對于每個用戶設(shè)計,存儲器區(qū)塊接口1253也可能是唯一的。例如,用戶存儲類型可能是DRAM、閃存或EEPROM。但各種存儲器區(qū)塊接口1253中,均具有存儲器地址和控制信號(如讀、寫、芯片選擇、mem_clk)。在本發(fā)明的一實施例中,存儲器模擬將用戶存儲器類型轉(zhuǎn)化為在存儲器模擬系統(tǒng)中使用的SRAM類型。若用戶存儲器類型為SRAM,那么它向SRAM型存儲器模型的轉(zhuǎn)化十分簡單。因此,存儲器地址和控制信號存在于總線1296上并傳輸?shù)酱鎯δP?252,而由1252執(zhí)行轉(zhuǎn)化。存儲器模型1252在總線1293上提供存儲器區(qū)塊地址信息并在總線1292上提供控制信息。地址補償單元1250接收用于各存儲器區(qū)塊的地址信息,并根據(jù)總線1293上的原始地址在總線1291上提供修改補償?shù)刂?。因為特定的存儲器區(qū)塊地址可能互相覆蓋,因此補償很有必要。例如,一存儲器區(qū)塊可能占用并存在于空間0-2K,而另一存儲器區(qū)塊則可能占用并存在于空間0-3K。因為兩個存儲器區(qū)塊在空間0-2K上重疊,所以如果沒有一種地址補償機制就很難進行單個地址讀寫。因此,第一個存儲器區(qū)塊可以占用并存在于空間0-2K,而第二個存儲器區(qū)塊則可占用并存在于2K以上至5K的空間。來自地址補償單元1250的補償?shù)刂泛涂偩€1292上的控制信號被結(jié)合起來提供給總線1299并被傳輸?shù)紽PGA總線多路復(fù)用器(FDO-MUXx)1249中。FPGA數(shù)據(jù)總線多路復(fù)用器FDO-MUXx接收總線1289上的SPACE2數(shù)據(jù)、總線1290上的SPACE3數(shù)據(jù)、總線1299上的地址/控制數(shù)據(jù),以及總線1295上的存儲器寫數(shù)據(jù)。如前所述,SPACE2和SPACE3是具體SPACE指數(shù)。由FPGA輸入/輸出控制器(圖10中的327;圖22)產(chǎn)生的SPACE指數(shù)選擇出特定地址空間(即REG讀,REG寫,S2H讀,H2S寫,以及CLK寫)。在該地址空間中,本發(fā)明的系統(tǒng)將按順序選擇將被訪問的特定的字。SPACE2指專用于硬件至軟件H2S數(shù)據(jù)的DMA讀取傳送的存儲空間。SPACE3則指專用于REGISTER_READ數(shù)據(jù)的DMA讀取傳送的存儲空間。參見上表G。作為其輸出,F(xiàn)DO_MUXx1249在總線1282上為低端組或高端組總線提供數(shù)據(jù)。選擇器信號是來自EVALFSMx單元1248的線路1284上的輸出啟動(output_en)信號以及線路1285上的選擇信號。線路1284上的輸出啟動信號啟動(或禁用)FDO_MUXx1249的運行。對在FPGA總線上的數(shù)據(jù)訪問而言,輸出啟動信號被啟動來允許FDO_MUXx發(fā)揮功能。1285線路上的選擇信號由EVALFSMx單元1248所產(chǎn)生,以便在來自總線1289上的SPACE2數(shù)據(jù)、總線1290上的SPACE3數(shù)據(jù)、總線1299上的地址/控制信號,以及總線1295上的存儲器寫數(shù)據(jù)的多個輸入之中進行選擇。EVALFSMx單元1248產(chǎn)生選擇信號將會在下面得到進一步的討論。EVALFSMx單元1248是有關(guān)存儲器模擬系統(tǒng)的每個邏輯裝置1201-1204的操作核心。EVALFSMx單元1248接收下列信號作為其輸入線路1279上的SHIFTIN信號,線路1274上的來自CTRL_FPGA單元1200的EVAL信號,以及線路1287上的寫信號wrx。EVALFSMx單元1248輸出線路1280上的SHIFTOUT的信號、線路1286上發(fā)往存儲器讀數(shù)據(jù)雙緩沖器1251的讀鎖存器信號rd_latx、線路1284上發(fā)往FDO_MUXx1249的輸出啟動信號、線路1285上發(fā)往FDO_MUXx1249的選擇信號,以及線路1281上發(fā)往用戶邏輯的三個信號(input_en,mux_en和clk_en)。根據(jù)本發(fā)明一個實施例的、用于存儲器模擬系統(tǒng)的FPGA邏輯裝置1201-1204的運行通常如下所述。當(dāng)EVAL信號處于邏輯1的時候,F(xiàn)PGA邏輯裝置1201-1204內(nèi)的數(shù)據(jù)估算開始;否則,模擬系統(tǒng)就正在運行DMA數(shù)據(jù)傳輸或存儲器訪問。在EVAL=1時,EVALFSMx單元1248產(chǎn)生clk_en信號,input_en信號,和信號,以便允許用戶邏輯分別估算數(shù)據(jù)、鎖存相關(guān)數(shù)據(jù),以及多路傳輸邏輯裝置間的信號。EVALFSMx單元1248產(chǎn)生clk_en信號來啟動用戶的設(shè)計邏輯中所有時鐘邊緣寄存器觸發(fā)器中的第二觸發(fā)器(見圖19)。clk_en信號另外也被當(dāng)作軟件時鐘。如果用戶的存儲器類型是同步的,clk_en也啟動每個存儲器區(qū)塊中的存儲器讀數(shù)據(jù)雙緩沖器1251的第二時鐘。EVALFSMx單元1248為用戶的設(shè)計邏輯產(chǎn)生input_en信號,以鎖存由DMA傳輸從CPU傳到用戶邏輯的輸入信號。input_en信號為主時鐘寄存器中的第二觸發(fā)器(見圖19)提供啟動輸入。最后,EVALFSMx單元1248產(chǎn)生mux_en信號,打開每個FPGA邏輯裝置中的多路傳輸電路,以開始與陣列中其他的FPGA邏輯裝置進行通信。其后,如果FPGA邏輯裝置1201-1204包含至少一個存儲器區(qū)塊,那么存儲器模擬系統(tǒng)就等待被選擇的數(shù)據(jù)被移入所選的FPGA邏輯裝置,然后為FPGA數(shù)據(jù)總線驅(qū)動器產(chǎn)生output_en和選擇信號,以便把存儲器區(qū)塊接口1253(mem_block_N)的地址和控制信號放在FD總線上。如果線路1287上的寫信號wrx被啟動(即,邏輯1),那么選擇信號和output_en信號也被啟動,將寫數(shù)據(jù)放在低端或高端組總線之上,這取決于FPGA芯片被連接到哪一個組上。在圖57中,邏輯裝置1203是FPGA0,并且被連接到低端組總線FD[310]上。如果線路1287上的寫信號wrx被禁用(即,邏輯0),那么選擇信號和output_en信號被禁用,線路1286上的讀鎖存器信號rd-latx將通過低端或高端組總線(取決于FPGA芯片被連接到哪一個組)讓存儲器讀數(shù)據(jù)雙緩沖器1251鎖存并雙重緩沖來自SRAM的所選數(shù)據(jù)。wrx信號是起源于用戶設(shè)計邏輯的存儲器接口的存儲器寫信號。的確,線路1287上的wrx信號經(jīng)由控制總線1292來自存儲器模型1252。這個讀或?qū)憯?shù)據(jù)的過程在每個FPGA邏輯裝置中都會發(fā)生。在所有的存儲器區(qū)塊都經(jīng)由SRAM訪問得到處理之后,EVALFSMx單元1248產(chǎn)生SHIFTOUT信號,以便允許鏈路中的下一個FPGA邏輯裝置進行SRAM訪問。請注意,針對高端和低端組的裝置的存儲器訪問是并行發(fā)生的。有時,針對一個組的存儲器訪問可能在針對另一個組的存儲器訪問之前完成。對于所有這些訪問而言,適當(dāng)?shù)牡却芷诒徊迦耄员阒挥挟?dāng)邏輯準(zhǔn)備好、而且數(shù)據(jù)可用的時候,邏輯才會處理數(shù)據(jù)。在CTRL_FPGA單元1200一方,MEMFSM1240處于本發(fā)明存儲器模擬方面的核心。它發(fā)送并接收許多控制信號,以便控制存儲器模擬寫/讀周期的激活,并對周期所支持的各種運行進行控制。MEMFSM1240經(jīng)由線路1258接收線路1260上的DATAXSFR信號。這個信號也被提供到線路1273上的每個邏輯裝置。當(dāng)DATAXSFR變低時(即,邏輯低),DMA數(shù)據(jù)傳輸周期結(jié)束,而估算和存儲器訪問周期則開始。MEMFSM1240也接收線路1254上的一個LASTH信號,以及線路1255上的一個LASTL信號,以表明與所選的地址空間相關(guān)的所選字已經(jīng)經(jīng)由PCI總線和FPGA總線在計算系統(tǒng)和模擬系統(tǒng)之間得到訪問。與這個移出過程相關(guān)的MOVE信號通過每個邏輯裝置(舉例來說,邏輯裝置1201-1204)傳播,直到所需的字得到訪問,且MOVE信號最后在鏈路末端變成LAST信號(即,對于高端組的LASTH和對于低端組的LASTL)。在EVALFSM1248(即,圖57為邏輯裝置FPGA01203顯示為EVALFSMO)中,對應(yīng)的LAST信號是線路1280上的SHIFTOUT信號。因為特定的邏輯裝置1203并非如圖56所示的低端組鏈路中的最后一個邏輯裝置(圖56中邏輯設(shè)備1204是低端存儲體鏈路中的最后一個邏輯設(shè)備),所以針對EVALFSMO的SHIFTOUT信號不是LAST信號。如果EVALFSM1248對應(yīng)于圖56中的EVALFSM2,那么線路1280上的SHIFTOUT信號就是在線路1255上提供到MEMFSM的LASTL信號。否則,線路1280上的SHIFTOUT信號就被提供到邏輯裝置1204(見圖56)。類似的,線路1279上的SHIFTIN信號代表FPGA0邏輯裝置(見圖56)1203的Vcc。LASTL和LASTH信號是分別經(jīng)由線路1256和線路1257進入“與”門1241的輸入?!芭c”門1241具有一個漏極開路?!芭c”門1241的輸出產(chǎn)生線路1259上的DONE信號,這個信號被提供到計算系統(tǒng)和MEMFSM1240。因此,只有當(dāng)LASTL和LASTH信號都是邏輯高、表明移出鏈過程結(jié)束時,“與”門才輸出一個邏輯高。MEMFSM1240在線路1261上產(chǎn)生一個到EVAL計數(shù)器1242的起始信號。正如該名稱所暗示的那樣,起始信號觸發(fā)EVAL計數(shù)器1242的開始,并且在DMA數(shù)據(jù)傳輸周期完成之后被發(fā)送。起始信號在偵測到DATAXSFR信號從高到低(1到0)的過渡時產(chǎn)生。EVAL計數(shù)器1242是一個可編程的計數(shù)器,其計數(shù)一個預(yù)定數(shù)目的時鐘周期。EVAL計數(shù)器1242內(nèi)經(jīng)過編程的計數(shù)長度決定估算周期的長度。線路1274上的EVAL計數(shù)器1242的輸出是一個邏輯水平1或0,這取決于計數(shù)器是否在計數(shù)。當(dāng)EVAL計數(shù)器1242正在計數(shù)時,線路1274上的輸出處于邏輯1,該輸出經(jīng)由EVALFSMx1248被提供到每個FPGA邏輯裝置1201-1204。當(dāng)EVAL=1時,F(xiàn)PGA邏輯裝置1201-1204運行FPGA間通信以便在用戶設(shè)計中估算數(shù)據(jù)。EVAL計數(shù)器1242的輸出也被在線路1262上反饋到MEMFSM單元1240,以便實現(xiàn)它自己的軌跡。在編程計數(shù)結(jié)束的時候,EVAL計數(shù)器1242產(chǎn)生線路1274和1262上的一個邏輯0信號表明估算周期的結(jié)束。如果不需要存儲器訪問,那么線路1272上的MEM_EN信號被斷言為邏輯0,而且被提供到MEMFSM單元1240,在這種情況下,存儲器模擬系統(tǒng)等待另外一個DMA數(shù)據(jù)傳輸周期。如果需要存儲器訪問,那么線路1272上的MEM_EN信號被斷言為邏輯1。實質(zhì)上,MEM_EN信號是一個用來啟動訪問FPGA邏輯裝置的電路板上的SRAM存儲器裝置的、來自CPU的控制信號。在這里,MEMFSM單元1240等待FPGA邏輯裝置1201-1204來將地址和控制信號放置在FPGA總線上,即FD[6332]和FD[310]。剩余的功能性單元和它們的相關(guān)控制信號和線路是為了將地址/控制信息提供給SRAM存儲器裝置用來寫和讀數(shù)據(jù)。這些單元包括用于低端組的存儲器地址/控制鎖存器1243,用于低端組的地址控制多路復(fù)用器1244,用于高端組的存儲器地址/控制鎖存器1247,用于高端組的地址控制多路復(fù)用器1246,和地址計數(shù)器1245。用于低端組的存儲器地址/控制鎖存器1243接收來自FPGA總線FD[310]1275的地址和控制信號,與總線1213以及線路1263上的一個鎖存器信號保持一致。鎖存器1243在線路1264上產(chǎn)生mem_wr_L信號,并經(jīng)由總線1266將來自FPGA總線FD[310]的接入地址/控制信號提供給地址/控制多路復(fù)用器1244。這個mem_wr信號與芯片選擇寫信號相同。地址/控制多路復(fù)用器1244接收總線1266上的地址和控制信息以及經(jīng)由總線1268來自地址計數(shù)器1245的地址信息作為其輸入。作為輸出,它在總線1276上將地址/控制信息發(fā)送給低端組SRAM存儲器裝置1205。線路1265上的選擇信號提供來自MEMFSM單元1240的正確的選擇信號??偩€1276上的地址/控制信息對應(yīng)于圖56中總線1229和1216上的MA[182]和芯片選擇讀/寫信號。地址計數(shù)器1245經(jīng)由總線1267接收來自SPACE4和SPACE5的信息。SPACE4包括DMA寫傳輸信息。SPACE5包括DMA讀傳輸信息。因此,這些DMA傳輸在PCI總線上在計算系統(tǒng)(經(jīng)由工作站CPU的高速緩存/主存儲器)和模擬系統(tǒng)(SRAM存儲器裝置1205,1206)之間發(fā)生。地址計數(shù)器1245將其輸出提供給總線1288和1268,并提供給地址/控制多路復(fù)用器1244和1246。有了線路1265上用于低端組的適當(dāng)選擇信號,地址/控制多路復(fù)用器1244要么將總線1266上的地址/控制信息放置在總線1276上以便在SRAM裝置1205和FPGA邏輯裝置1203、1204之間進行寫/讀存儲器訪問,要么將總線1267上來自SPACE4或SPACE5的DMA寫/讀傳輸數(shù)據(jù)放置到總線1276上。在存儲器訪問周期內(nèi),MEMFSM單元1240將線路1263上的鎖存器信號提供到存儲器地址/控制鎖存器1243,以便得到來自FPGA總線FD[310]的輸入。MEMFSM單元1240提取來自FD[310]上的地址/控制信號的mem_wr_L控制信息以便作出進一步控制。如果線路1264上的mem_wr_L信號是一個邏輯1,就需要一個寫操作,而且MEMFSM單元1240將在線路1265上產(chǎn)生適當(dāng)?shù)倪x擇信號發(fā)送給地址/控制多路復(fù)用器1244,以便總線1266上的地址和控制信號在總線1276上被發(fā)送到的低端組SRAM。其后,一個寫數(shù)據(jù)從FPGA邏輯裝置傳輸?shù)絊RAM存儲器裝置。如果線路1264上的mem_wr_L信號是一個邏輯0,那么就需要一個讀操作,因此模擬系統(tǒng)等待被SRAM存儲器裝置放置在FPGA總線FD[310]上的數(shù)據(jù)。一旦數(shù)據(jù)準(zhǔn)備好了,讀數(shù)據(jù)就從SRAM存儲器裝置傳輸?shù)紽PGA邏輯裝置。高端組具有相似的配置及操作。用于高端組的存儲器地址/控制鎖存器1247接收來自FPGA總線FD[6332]1278的地址和控制信號,該信號與總線1212和線路1270上的一個鎖存器信號保持一致。鎖存器1270在線路1271上產(chǎn)生mem_wr_H信號,而且經(jīng)由總線1239將來自FPGA總線FD[6332]的接入地址/控制信號提供給地址/控制多路復(fù)用器1246。地址/控制多路復(fù)用器1246接收總線1239上的地址和控制信息以及經(jīng)由總線1268來自地址計數(shù)器1245的地址信息作為輸入。作為輸出,它將總線1277上的地址/控制信息發(fā)送給高端組SRAM存儲器裝置1206。線路1269上的選擇信號提供來自MEMFSM單元1240的正確的選擇信號??偩€1277上的地址/控制信息對應(yīng)于圖56中的總線1214和1215上的MA[182]和芯片選擇讀/寫信號。地址計數(shù)器1245如上文所述經(jīng)由總線1267接收來自SPACE4和SPACE5的信息以便進行DMA寫和讀傳輸。地址計數(shù)器1245將它的輸出提供給總線1288和1268以及地址/控制多路復(fù)用器1244和1246。有了線路1269上用于高端組的適當(dāng)選擇信號,地址/控制多路復(fù)用器1246要么將總線1239上的地址/控制信息放置在總線1277上以便在SRAM裝置1206和FPGA邏輯裝置1201,1202之間進行寫/讀存儲器訪問,或者可以替代的方法是,將總線1267上來自SPACE4或SPACE5的DMA寫/讀傳輸數(shù)據(jù)放置在總線1277上。在存儲器訪問周期內(nèi),MEMFSM單元1240將線路1270上的鎖存器信號提供到存儲器地址/控制鎖存器1247以便獲得來自FPGA總線FD[6332]的輸入。MEMFSM單元1240提取來自FD[6332]上的地址/控制信號的mem_wr_H控制信息以便作出進一步的控制。如果線路1271上的mem_wr_H信號是一個邏輯1,那么就需要一個寫操作,而且MEMFSM單元1240將在線路1269上產(chǎn)生適當(dāng)?shù)倪x擇信號發(fā)送到地址/控制多路復(fù)用器1246,以便總線1239上的地址和控制作信號在總線1277上被發(fā)送到高端組SRAM。其后,一個寫數(shù)據(jù)從FPGA邏輯裝置傳輸?shù)絊RAM存儲器裝置。如果線路1271上的mem_wr_H信號是一個邏輯0,那么就需要一個讀操作,這樣模擬系統(tǒng)可以等待被SRAM存儲器裝置放置在FPGA總線FD[6332]上的數(shù)據(jù)。一旦數(shù)據(jù)準(zhǔn)備好了,讀數(shù)據(jù)就從SRAM存儲器裝置傳輸?shù)紽PGA邏輯裝置。如圖57所示,地址和控制信號分別經(jīng)由總線1276和1277被提供到低端組SRAM存儲器裝置和高端組存儲器設(shè)備。用于低端組的總線1276對應(yīng)于圖56中的總線1229和1216組合。同樣地,用于高端組的總線1277對應(yīng)于圖56中的總線1214和1215組合。根據(jù)本發(fā)明一個實施例的、存儲器模擬系統(tǒng)的CTRL_FPGA單元1200的運行通常如下所述。線路1259上的DONE信號被提供到計算系統(tǒng)和在CTRL_FPGA單元1200中的MEMFSM單元1240,表明模擬寫/讀周期的完成。線路1260上的DATAXSFR信號表明模擬寫/讀周期的DMA數(shù)據(jù)傳輸周期的發(fā)生。FPGA總線FD[310]和FD[6332]上的存儲器地址/控制信號被分別提供到用于高端和低端組的存儲器地址/控制鎖存器1243和1247。對于任一組而言,MEMFSM單元1240都產(chǎn)生鎖存器信號(1263或1269)來鎖存地址和控制信息。這個信息然后被提供到SRAM存儲器裝置。mem_wr信號被用來決定需要一個寫操作還是讀操作。如果需要一個寫操作,數(shù)據(jù)就經(jīng)由FPGA總線從FPGA邏輯裝置1201-1204被傳輸?shù)絊RAM存儲器裝置。如果需要讀操作,模擬系統(tǒng)就等待SRAM存儲器裝置將被請求的數(shù)據(jù)放置在PFGA總線之上以便在SRAM存儲器裝置和FPGA邏輯裝置之間進行傳輸。為了進行SPACE4和SPACE5的DMA數(shù)據(jù)傳輸,線路1265、1269上的選擇信號能選擇地址計數(shù)器1245的輸出作為主計算系統(tǒng)和模擬系統(tǒng)中的SRAM存儲器裝置之間進行傳輸?shù)臄?shù)據(jù)。對所有這些訪問,插入適當(dāng)?shù)牡却芷?,這樣只有當(dāng)邏輯準(zhǔn)備好、且數(shù)據(jù)可用時,邏輯才處理數(shù)據(jù)。圖60顯示存儲器讀數(shù)據(jù)雙緩沖器1251(圖57)更為詳細的視圖。在每個FPGA邏輯裝置中的每個存儲器區(qū)塊N都有一個雙緩沖器,用來鎖存可能在不同時間進入的有關(guān)數(shù)據(jù),然后最終同時緩沖出該有關(guān)鎖存數(shù)據(jù)。在圖60中,用于存儲器區(qū)塊0的雙緩沖器1391包括兩個D型觸發(fā)器1340和1341。第一個D型觸發(fā)器1340的輸出1343被連接到第二個D型觸發(fā)器1341的輸入。第二個D型觸發(fā)器1341的輸出1344是雙緩沖器的輸出,其被提供到用戶設(shè)計邏輯中的存儲器區(qū)塊N接口。全局時鐘輸入在線路1393上被提供到第一個觸發(fā)器1340,在線路1394上被提供給第二個觸發(fā)器1341。第一個D型觸發(fā)器1340在線路1342上經(jīng)由總線1283和用于高端組的FPGA總線FD[6332]以及用于低端組的FD[310]接收來自SRAM存儲器裝置的數(shù)據(jù)輸入。啟動輸入被連接到線路1345,該線路為每個FPGA邏輯裝置接收來自EVALFSMx單元的rd_latx(舉例來說,rd_lat0)信號。因此,對讀操作(即,wrx=0)而言,EVALFSMx單元產(chǎn)生rd_latx信號,以便將線路1342上的數(shù)據(jù)鎖存到線路1343。用于所有存儲器區(qū)塊的所有雙緩沖器的輸入數(shù)據(jù)可能在不同時間進入,雙緩沖器確保所有的數(shù)據(jù)首先得到鎖存。一旦所有的數(shù)據(jù)被鎖存到D型觸發(fā)器1340,clk_en信號(即,軟件時鐘)就被提供到線路1346上,作為第二個D型觸發(fā)器1341的時鐘輸入。當(dāng)clk_en信號被斷言時,線路1343上的鎖存數(shù)據(jù)被緩沖進入D型觸發(fā)器1341,再到線路1344。下一個存儲器區(qū)塊1具有實質(zhì)上等于雙緩沖器1391的另一個雙緩沖器1392。來自SRAM存儲器裝置的數(shù)據(jù)是在線路1396上的輸入。全局時鐘信號是線路1397上的輸入。clk_en(軟件時鐘)信號在線路1398上被輸入雙緩沖器1392中的第二個觸發(fā)器(未顯示)。這些線路被連接到存儲器區(qū)塊0的第一雙緩沖器1391和其他存儲器區(qū)塊N的其他所有雙緩沖器的模擬信號線路。輸出的雙緩沖數(shù)據(jù)被輸出到線路1399上。針對第二個雙緩沖器1392的rd_latx信號(舉例來說,rd_latl)獨立于其他雙緩沖器的其他rd_latx信號,提供到線路1395上。更多的雙緩沖器被提供到其他的存儲器區(qū)塊N?,F(xiàn)在將針對本發(fā)明的一個實施例討論MEMFSM單元1240的狀態(tài)圖。圖58顯示了CTRL_FPGA單元中的MEMFSM單元的有限狀態(tài)機的一個狀態(tài)圖。圖58中的狀態(tài)圖中擬寫/讀周期內(nèi)的三個周期也與它們的對應(yīng)狀態(tài)一起顯示。因此,狀態(tài)1300-1301對應(yīng)DMA數(shù)據(jù)傳輸周期;狀態(tài)1302-1304對應(yīng)估算周期;狀態(tài)1305-1314對應(yīng)存儲器訪問周期。在下文討論中結(jié)合圖58并參照圖57。一般情況下,設(shè)定了DMA傳輸、估算以及存儲器訪問的信號順序。在一個實施例中,順序如下DATA_XSFR觸發(fā)DMA數(shù)據(jù)傳輸(如果有DATA_XSFR的話)。用于高端和低端組的LAST信號在DMA數(shù)據(jù)傳輸完成時產(chǎn)生,并且觸發(fā)DONE信號,表明DMA數(shù)據(jù)傳輸周期的完成。然后產(chǎn)生XSFR_DONE信號,而且接著估算(EVAL)周期開始。在EVAL結(jié)束時,可以開始存儲器讀/寫。轉(zhuǎn)向圖58的頂端,每當(dāng)DATAXSFR信號處于邏輯0時,狀態(tài)1300都是空閑的。這表明當(dāng)時沒有發(fā)生DMA數(shù)據(jù)傳輸。當(dāng)DATAXSFR信號處于邏輯1時,MEMFSM單元1240就進行到狀態(tài)1301。這里,計算系統(tǒng)需要在計算系統(tǒng)(圖1、45,和46中的主存儲器)和模擬系統(tǒng)(圖56中的FPGA邏輯裝置1201-1204或SRAM存儲器裝置1205、1206)之間進行DMA數(shù)據(jù)傳輸。適當(dāng)?shù)牡却芷诒徊迦?,直到DMA數(shù)據(jù)傳輸完成。當(dāng)DMA傳輸完成時,DATAXSFR信號返回到邏輯0。當(dāng)DATAXSFR信號回到邏輯0時,在狀態(tài)1302起始信號的產(chǎn)生在MEMFSM單元1240中被觸發(fā)。起始信號啟動EVAL計數(shù)器1242,這是一個可編程的計數(shù)器。EVAL計數(shù)器內(nèi)的編程計數(shù)時長等于估算周期的時長。只要EVAL計數(shù)器在狀態(tài)1303進行計數(shù),那么EVAL信號就被斷言為邏輯1,并被提供到每個FPGA邏輯裝置的EVALFSMx和MEMFSM單元1240。在計數(shù)結(jié)束時,EVAL計數(shù)器將處于邏輯0的EVAL信號提供到每個FPGA邏輯裝置內(nèi)的EVALFSMx和MEMFSM單元1240。當(dāng)MEMFSM單元1240接收EVAL信號邏輯0時,它在狀態(tài)1304打開EVAL_DONE標(biāo)記。EVAL_DONE標(biāo)記被MEMFSM用來指示估算周期已經(jīng)結(jié)束,而且如果需要,存儲器訪問周期現(xiàn)在可以進行。CPU將通過讀XSFR_EVAL寄存器(見下表K)檢查EVAL_DONE和XSFR_DONE以便確定DMA傳輸和EVAL已經(jīng)在開始下一個DMA傳輸之前成功完成。然而,在某些情況下,模擬系統(tǒng)可能不想在此刻運行存儲器訪問。這時,模擬系統(tǒng)保持存儲器啟動信號MEM_EN為邏輯0。這個禁用的(邏輯0)MEM_EN信號把MEMFSM單元保持在空閑狀態(tài)1300,等待DMA數(shù)據(jù)傳輸或FPGA邏輯裝置的數(shù)據(jù)估算。另一方面,如果存儲器啟動信號MEM_EN處于邏輯1,那么表明模擬系統(tǒng)有進行存儲器訪問的需要。在圖58中的狀態(tài)1304下,狀態(tài)圖被分為兩個并行進行的區(qū)段。一個區(qū)段包含針對低端組存儲器訪問的狀態(tài)1305、1306、1307、1308,和1309。另一個區(qū)段包含針對高端組存儲器訪問的狀態(tài)1311、1312、1313、1314,和1309。在狀態(tài)1305,模擬系統(tǒng)等待一個周期以便當(dāng)前選擇的FPGA邏輯裝置將地址和控制信號放置在FPGA總線FD[310]上。在狀態(tài)1306,MEMFSM在線路1263上產(chǎn)生鎖存器信號至存儲器地址/控制鎖存器1243以便獲得來自FD[310]的輸入。對應(yīng)于這個特定獲得的地址和控制信號的數(shù)據(jù)將從SRAM存儲器裝置或者被讀或者被寫到SRAM存儲器裝置。為了決定模擬系統(tǒng)是需要一個讀操作還是一個寫操作,從地址和控制信號中將用于低端組的存儲器寫信號mem_wr_L提取出來。如果mem_wr_L=0,一個讀操作被請求。如果mem_wr_L=1,一個寫操作被請求。如上文所述,這個mem_wr信號等于芯片選擇寫信號。在狀態(tài)1307,產(chǎn)生針對地址/控制多路復(fù)用器1244的適當(dāng)?shù)倪x擇信號,以便將地址和控制信號發(fā)送給低端組SRAM。MEMFSM單元檢查mem_wr信號和LASTL信號。如果mem_wr_L=1且LASTL=0,一個寫操作被請求,但是FPGA邏輯裝置鏈路中最后一個數(shù)據(jù)還沒有被移出。因此,模擬系統(tǒng)回到狀態(tài)1305,等待一個周期以便FPGA邏輯裝置將更多的地址和控制信號放置到FD[310]之上。這個過程繼續(xù)進行,直到最后一個數(shù)據(jù)被移出FPGA邏輯裝置。然而,如果mem_wr_L=1且LASTL=1,最后一個數(shù)據(jù)就被移出了FPGA邏輯裝置。同樣地,如果mem_wr_L=0指示一個讀操作,MEMFSM就進行到狀態(tài)1308。在狀態(tài)1308,模擬系統(tǒng)等待一個周期以便SRAM存儲器裝置將數(shù)據(jù)放置在FPGA總線FD[310]之上。如果LASTL=0,F(xiàn)PGA邏輯裝置鏈路中的最后一個數(shù)據(jù)還沒有被移出。因此,模擬系統(tǒng)回到狀態(tài)1305,等待一個周期,以便FPGA邏輯裝置將更多的地址和控制信號放置在FD[310]之上。這個過程繼續(xù)進行,直到最后一個數(shù)據(jù)被移出FPGA邏輯裝置。注意寫操作(mem_wr_L=1)和讀操作(mem_wr_L=0)能交叉存取或相互交互進行,直到LASTL=1。當(dāng)LASTL=1時,MEMFSM進行到狀態(tài)1309,當(dāng)DONE=0時,保持等待。當(dāng)DONE=1時,LASTL和LASTH都處于邏輯1,因此,模擬寫/讀周期完成。模擬系統(tǒng)然后進行到狀態(tài)1300,在狀態(tài)1300,只要DATAXSFR=0,它就保持空閑。相同的過程也適用于高端組。在狀態(tài)1311,模擬系統(tǒng)等待一個周期,以便當(dāng)前所選的FPGA邏輯裝置將地址和控制信號放置到FPGA總線FD[6332]上。在狀態(tài)1312,MEMFSM在1270線路上對存儲器地址/控制鎖存器1247產(chǎn)生鎖存器信號,以便獲得來自FD[6332]的輸入。對應(yīng)于這個特定獲得的地址和控制信號的數(shù)據(jù)將或者從SRAM存儲器裝置中讀取或者寫到SRAM存儲器裝置。為了決定模擬系統(tǒng)是需要一個讀操作還是一個寫操作,從地址和控制信號中提取針對高端組的存儲器寫信號mem_wr_H。如果mem_wr_H=0,一個讀操作被請求。如果men_w_H=1,一個寫操作被請求。在狀態(tài)1313,產(chǎn)生用于針對地址/控制多路復(fù)用器1246的適當(dāng)選擇信號,以便將地址和控制信號發(fā)送給高端組SRAM。MEMFSM單元檢查mem_wr信號和LASTH信號。如果mem_wr_H=1且LASTH=0,一個寫操作被請求,但是FPGA邏輯裝置鏈路中最后一個數(shù)據(jù)還沒有被移出。因此,模擬系統(tǒng)回到狀態(tài)1311,等待一個周期,以便FPGA邏輯裝置將更多的地址和控制信號放置在FD[6332]之上。這個過程繼續(xù)進行,直到最后一個數(shù)據(jù)被移出FPGA邏輯裝置。然而,如果mem_wr_H=1且LASTH=1,那么最后一個數(shù)據(jù)已經(jīng)被移出FPGA邏輯裝置。同樣地,如果mem_wr_H=0指示一個讀操作,MEMFSM就進行到狀態(tài)1314。在狀態(tài)1314,模擬系統(tǒng)等待一個周期,以便SRAM存儲器裝置將數(shù)據(jù)放置在FPGA總線FD[6332]之上。如果LASTH=0,那么FPGA邏輯裝置鏈路中最后一個數(shù)據(jù)還沒有被移出。因此,模擬系統(tǒng)回到狀態(tài)1311,等待一個周期,以便FPGA邏輯裝置將更多的地址和控制信號放置在FD[6332]之上。這個過程繼續(xù)進行,直到到最后一個數(shù)據(jù)被移出FPGA邏輯裝置。注意寫操作(mem_wr_H=1)和讀操作(mem_wr_H=0)能交叉存取或相互交互進行,直到LASTH=1。當(dāng)LASTH=1時,MEMFSM進行到狀態(tài)1309,當(dāng)DONE=0時保持等待。當(dāng)DONE=1時,LASTL和LASTH處于邏輯1,因此模擬寫/讀周期已經(jīng)完成。模擬系統(tǒng)然后進行到狀態(tài)1300,在狀態(tài)1300,只要DATAXSFR=0就保持空閑?;蛘?,根據(jù)本發(fā)明另一個實施例,對高端組和低端組兩者,狀態(tài)1309和1310都沒有執(zhí)行。因此,在低端組中,MEMFSM將在通過狀態(tài)1308(LASTL=1)或1307(MEM_WR_L=1且LASTL=1)之后直接進行到狀態(tài)1300。在高端組中,MEMFSM將在通過狀態(tài)1314(LASTH=1)或1313(MEM_WR_H=1且LASTH=1)之后直接進行到狀態(tài)1300。EVALFSM單元1248的狀態(tài)圖將結(jié)合本發(fā)明的一個實施例來討論。圖59顯示每個FPGA芯片中的這種EVALFSMx有限狀態(tài)機的一個狀態(tài)圖。象圖58一樣,圖59中的狀態(tài)圖中模擬寫/讀周期里面的兩個周期與它們對應(yīng)的狀態(tài)一起顯示。因此,狀態(tài)1320-1326A對應(yīng)估算周期,狀態(tài)1326B-1336對應(yīng)存儲器訪問周期。在下面的討論中參照圖57并結(jié)合圖59。EVALFSMx單元1248接收來自CTRL_FPGA單元1200的線路1274上的EVAL信號(見圖57)。當(dāng)EVAL=0時,沒有發(fā)生FPGA邏輯裝置進行的數(shù)據(jù)估算。因此,在狀態(tài)1320,當(dāng)EVAL=0時,EVALFSMx處于空閑。當(dāng)EVAL=1時,EVALFSMx進行到狀態(tài)1321。狀態(tài)1321、1322,和1323與FPGA間通信有關(guān),其中數(shù)據(jù)經(jīng)由FPGA邏輯裝置被用戶設(shè)計所估算。這里,EVALFSMx對用戶邏輯產(chǎn)生信號input_en、mux_en和clk_en(圖57中的1281)。在狀態(tài)1321,EVALFSMx產(chǎn)生clk_en信號,該信號在這個周期中啟動用戶設(shè)計邏輯中的所有時鐘邊緣寄存器觸發(fā)器的第二個觸發(fā)器(見圖19)。clk_en信號也被認為是軟件時鐘。如果用戶存儲器類型是同步的,clk_en也啟動在每個存儲器區(qū)塊中的存儲器讀數(shù)據(jù)雙緩沖器1251的第二個時鐘。在這個周期中,針對每個存儲器區(qū)塊的SRAM數(shù)據(jù)輸出被發(fā)送到用戶設(shè)計邏輯。在狀態(tài)1322,EVALFSMx為用戶設(shè)計邏輯產(chǎn)生input_en信號,以鎖存DMA傳輸從CPU到用戶邏輯發(fā)送的輸入信號。input_en信號為主時鐘寄存器中的第二個觸發(fā)器提供啟動輸入(見圖19)。在狀態(tài)1323,EVALFSMx產(chǎn)生mux_en信號,以便打開在每個FPGA邏輯裝置中的多路復(fù)用電路,開始與陣列中其他FPGA邏輯裝置進行通信。如前文所解釋的那樣,F(xiàn)PGA間導(dǎo)線線路時常被多路復(fù)用,以便有效地使用每個FPGA邏輯裝置芯片中有限的引腳資源。在狀態(tài)1324,只要EVAL=1,EVALFSM就等待。當(dāng)EVAL=0時,估算周期完成,而且因此狀態(tài)1325需要EVALFSMx停用mux_en信號。如果存儲器區(qū)塊M的數(shù)目(其中M是一個整數(shù),包括0)是零,EVALFSMx回到狀態(tài)1320,如果EVAL=0,它就保持空閑。在大部分的情形下,M>0,因此,EVALFSMx進行到狀態(tài)1326A/1326B。″M″是FPGA邏輯裝置中存儲器區(qū)塊的數(shù)目。是來自映射且配置到FPGA邏輯裝置中的用戶設(shè)計的一個常數(shù);它不會遞減計數(shù)。如果M>0,圖59的右側(cè)部分(存儲器訪問周期)將會被配置到FPGA邏輯裝置中。如果M=0,只有圖59的左邊部分(EVAL周期)被配置。在狀態(tài)1327,只要SHIFTIN=0,EVALFSMx就將保持在等待狀態(tài)。當(dāng)SHIFTIN=1時,早先的FPGA邏輯裝置已經(jīng)完成了它的存儲器訪問,而且當(dāng)前的FPGA邏輯裝置準(zhǔn)備好運行它的存儲器訪問任務(wù)??梢蕴娲姆椒ㄊ牵?dāng)SHIFTIN=1時,當(dāng)前的FPGA邏輯裝置在組中是第一邏輯裝置,而且SHIFTIN輸入線路被連接到Vcc。然而,SHIFTIN=1信號的接收指示當(dāng)前的FPGA邏輯裝置已經(jīng)準(zhǔn)備好運行存儲器訪問。在狀態(tài)1328,存儲器區(qū)塊數(shù)N被設(shè)定在N=1。數(shù)目N將會在每個循環(huán)發(fā)生時增加,以便針對特定存儲器區(qū)塊N的存儲器訪問可被完成。最初,N=1,因此EVALFSMx將會進行到為存儲器區(qū)塊1訪問存儲器。在狀態(tài)1329,EVALFSMx為FPGA總線驅(qū)動器FDO_MUXx1249產(chǎn)生線路1285上的選擇信號以及線路1284上的output_en信號,以便將Mem_Block_N接口1253的地址和控制信號放置在FPGA總線FD[6332]或FD[310]之上。如果需要一個寫操作,wr=1;否則,需要一個讀操作,則wr=0。EVALFSMx接收線路1287上的wr信號作為其輸入之一?;谶@個wr信號,線路1285上的正確的選擇信號將被斷言。當(dāng)wr=1時,EVALFSMx進行到狀態(tài)1330。EVALFSMx為FD總線驅(qū)動器產(chǎn)生選擇和output_en信號,以便把Mem_Block_N1253的寫數(shù)據(jù)放在FPGA總線FD[6332]或FD[310]上。其后,EVALFSMx等待一個周期,以便讓SRAM存儲器裝置完成寫周期。然后EVALFSMx進入狀態(tài)1335,存儲器區(qū)塊數(shù)目N獲得一個增量;也就是說,N=N+1。然而,如果在狀態(tài)1329的wr=0,一個讀操作被請求,而且EVALFSMx進入狀態(tài)1332,等待一個周期,然后進入狀態(tài)1333,等待另外一個周期。在狀態(tài)1334,EVALFSMx產(chǎn)生線路1286上的rd_latch信號,以便讓存儲器區(qū)塊N的存儲器讀數(shù)據(jù)雙緩沖器1251將SRAM數(shù)據(jù)帶出到FD總線之上。EVALFSMx然后進行到狀態(tài)1335,其中存儲器區(qū)塊數(shù)目N獲得一個增量;也就是說,N=N+1。因此,如果在增量狀態(tài)1335之前N=1,N現(xiàn)在就是2,于是順序的存儲器訪問將會適用到存儲器區(qū)塊2。如果目前的存儲器區(qū)塊數(shù)目N少于或者等于用戶設(shè)計中的存儲器區(qū)塊總數(shù)M(也就是,N≤M),EVALFSMx進行到狀態(tài)1329,基于運行寫操作還是讀操作而÷為FD總線驅(qū)動器產(chǎn)生特定的選擇和output_en信號。然后,為下個存儲器區(qū)塊N進行的寫或讀操作將會發(fā)生。然而,如果當(dāng)前的存儲器區(qū)塊的數(shù)目N比用戶設(shè)計中的存儲器區(qū)塊總數(shù)M更大(也就是,N>M),EVALFSMx進行到狀態(tài)1336,打開SHIFTOUT輸出信號,以便允許組中下一個FPGA邏輯裝置訪問SRAM存儲器裝置。其后,EVALFSMx進行到狀態(tài)1320,直到模擬系統(tǒng)需要在FPGA邏輯裝置之間進行數(shù)據(jù)估算,它一直是空閑的(也就是,EVAL=1)。圖61顯示了根據(jù)本發(fā)明一個實施例的模擬寫/讀周期。圖61在編號1366處顯示了模擬寫/讀周期中的三個周期-DMA數(shù)據(jù)傳輸周期、估算周期和存儲器訪問周期。雖然未顯示,但是可以得出暗示,即前一個DMA傳輸、估算和存儲器訪問可能已經(jīng)事先發(fā)生。此外,到達/來自低端組SRAM的數(shù)據(jù)傳輸時序可能不同于高端組SRAM的傳輸時序。為了敘述簡潔,圖61顯示了一個例子,其中針對低端和高端組的訪問時序是相同的。全局時鐘GCLK1350為系統(tǒng)中所有的部件提供了時鐘信號。DATAXSFR信號1351表明DMA數(shù)據(jù)傳輸周期的發(fā)生。當(dāng)軌跡1367上DATAXSFR=1時,DMA數(shù)據(jù)傳輸正在主計算系統(tǒng)和FPGA邏輯裝置或SRAM存儲器裝置之間發(fā)生。因此,數(shù)據(jù)被提供到FPGA高端組總線FD[6332]1359和軌跡1369之上,以及FPGA低端組總線FD[310]1358和軌跡1368上。DONE信號1364用一個邏輯0到1的信號(舉例來說,軌跡1390)表明存儲器訪問周期的完成,或者用邏輯0(舉例來說,軌跡1390的邊沿和軌跡1370的邊沿的組合)表明模擬寫/讀周期的持續(xù)時間。在DMA傳輸周期期間,DONE信號處于邏輯0。在DMA傳輸周期結(jié)束的時候,DATAXSFR信號從邏輯1變?yōu)檫壿?,觸發(fā)估算周期的開始。因此,如軌跡1371所指示,EVAL1352處于邏輯1。處于邏輯1的EVAL信號時長是預(yù)定的,并且可編程。在這個估算周期期間,用clk_en信號1353對用戶設(shè)計邏輯中的數(shù)據(jù)進行估算,如軌跡1372所示,1353處于邏輯1,如軌跡1373所示,input_en信號1354也處于邏輯1,如軌跡1374所示,mux_en信號1355也處于邏輯1,但是時長比clk_en和input_en更長。在這個特定的FPGA邏輯裝置里數(shù)據(jù)得到估算。當(dāng)mux_en信號1355在軌跡1374處從邏輯1進入0時,而且至少一個存儲器區(qū)塊存在于FPGA邏輯裝置中,那么估算周期就會結(jié)束,而存儲器訪問周期則開始。SHIFTIN信號1356在軌跡1375被斷言為邏輯1。這表明之前的FPGA已經(jīng)完成了它的估算,而且所有需要的數(shù)據(jù)已經(jīng)被存取進入/來自這個之前的FPGA邏輯裝置?,F(xiàn)在,組中下一個FPGA邏輯裝置已經(jīng)準(zhǔn)備好開始存儲器訪問。在軌跡1377到1386中,將使用下列術(shù)語。ACj_k表示地址和控制信號與FPGAj和存儲器區(qū)塊k有關(guān),其中j和k是包括0的整數(shù)。WDj_k表示用于FPGAj和存儲器區(qū)塊k的寫數(shù)據(jù)。RDj_k表示用于FPGAj和存儲器區(qū)塊k的讀數(shù)據(jù)。因此,AC3_1表示與FPGA3和存儲器區(qū)塊1有關(guān)的地址和控制信號。低端組SRAM訪問和高端組SRAM訪問1361被顯示為軌跡1387。接下來的幾個軌跡1377到1387將顯示存儲器訪問是如何完成的?;诎l(fā)往EVALFSMx的wrx信號邏輯水平,以及相應(yīng)的發(fā)往MEMFSM的mem_wr信號水平,一個寫操作或讀操作將得到執(zhí)行。如果需要一個寫操作,存儲器模型與用戶存儲器區(qū)塊N的接口(圖57中的Mem_Block_N接口1253)連接,提供wrx作為其控制信號之一。這個控制信號wrx被提供到FD總線驅(qū)動器和EVALFSMx單元。如果wrx處于邏輯1,適當(dāng)?shù)倪x擇信號和output_en信號被提供到FD總線驅(qū)動器以便將存儲器寫數(shù)據(jù)放置到FD總線上。這個當(dāng)前位于FD總線上的相同控制信號能被CTRL_FPGA單元中的存儲器地址/控制鎖存器鎖存。存儲器地址/控制鎖存器經(jīng)由一個MA[182]/控制總線將地址和控制信號發(fā)送給SRAM。處于邏輯1的wrx控制信號被從FD總線上提取出來,而且因為一個寫操作被請求,所以FD總線上的與地址和控制信號相關(guān)的數(shù)據(jù)被發(fā)送到SRAM存儲器裝置。因此,如圖61所示,這個下一個FPGA邏輯裝置,即低端組中的邏輯裝置FPGA0,如軌跡1377所示,將AC0_0放置到FD[310]上。模擬系統(tǒng)為WD0_0運行一個寫操作。然后,AC0_1被放置在FD[310]總線上。然而,如果一個讀操作被請求,在將AC0_1放置到FD總線FD[310]之后,在RD0_0(而不是對應(yīng)于AC0_0的WD0_0)被放置在SRAM存儲器裝置的FD總線上之前,會出現(xiàn)一些時延。注意,如軌跡1383所指示,在MA[182]/控制總線上放置AC0_0與在FD總線上放置地址、控制和數(shù)據(jù)相比有稍微的延遲。這是因為MEMFSM單元需要時間來鎖存從FD總線來的地址/控制信號、提取mem_wr信號,以及為地址/控制多路復(fù)用器產(chǎn)生適當(dāng)?shù)倪x擇信號以便地址/控制信號能被放置在MA[182]/控制總線上。此外,在MA[182]/控制總線上放置地址/控制信號至SRAM存儲器裝置之后,模擬系統(tǒng)必須等待來自SRAM存儲器裝置的對應(yīng)數(shù)據(jù)被放置在FD總線上。一個例子是軌跡1384和軌跡1381之間的時間偏移,其中在AC1_1被放置在MA[182]/控制總線上之后,RD1_1才被放置在FD總線上。在高端組上,F(xiàn)PGA1正在將AC1_0放置在總線FD[6332]上,隨后是WD1_0的放置。其后,AC1_1被放置在總線FD[6332]上。這由軌跡1380表明。當(dāng)AC1_1被放置在FD總線上時,控制信號在這個例子中表明一個讀操作。因此,依照上文描述,當(dāng)AC1_1如軌跡1384所示被放置在MA[18;2]/控制總線上時,處于邏輯0的正確的wrx和mem_wr信號被提供到地址/控制信號中,并發(fā)送至EVALFSMx和MEMFSM單元。因為模擬系統(tǒng)知道這是一個讀操作,寫數(shù)據(jù)就不會被傳輸?shù)絊RAM存儲器裝置;相反,與AC1_1有關(guān)的讀數(shù)據(jù)被SRAM存儲器裝置放置FD總線上以便用戶設(shè)計邏輯后來通過模擬存儲器區(qū)塊接口讀取。這由高端組上的軌跡1381表示。在低端組上,如軌跡1378所示,在MA[182]/控制總線上放置AC0_1(未顯示)之后,RD0_1被放置在FD總線上。當(dāng)EVALFSMx如軌跡1388所示為模擬存儲器區(qū)塊接口中的存儲器讀數(shù)據(jù)雙緩沖器產(chǎn)生rd_lat0信號1362時,用戶設(shè)計邏輯經(jīng)由模擬存儲器區(qū)塊接口的讀操作就完成了。這個rd_lat0信號被提供到低端組FPGA0和高端組FPGA1。其后,每個FPGA邏輯裝置的下一個存儲器區(qū)塊被放置在FD總線上。AC2_0被放置在低端組FD總線上,而AC3_0被放置在高端組FD總線上。如果需要一個寫操作,WD2_0被放置在低端組FD總線上,WD3_0被放置在高端組FD總線上。如軌跡1385所示,AC3_0被放置在高端組MA[182]/控制總線上。這個過程繼續(xù)進行,以便下一個存儲器區(qū)塊進行寫和讀操作。注意,針對低端組和高端組的寫和讀操作可能在不一致的時間和速度上發(fā)生,而且圖61顯示一個特定的例子,其中低端和高端組的時序是相同的。另外,低端和高端組的寫操作一起發(fā)生,然后兩個組上的讀操作跟隨其后。但情況并不總是這樣。低端和高端組的存在允許連接到這些組的設(shè)備并行操作;也就是說,低端組上的活動獨立于高端組上的活動。也能設(shè)想其他的情況,即當(dāng)?shù)投私M正在運行一系列的寫操作,而高端組正在并行運行一系列的讀操作時。當(dāng)遇到每個組的最后一個FPGA邏輯裝置中的最后一個數(shù)據(jù)時,如軌跡1376所示,SHIFTOUT信號1357被斷言。對于讀操作,如軌跡1389所示,對應(yīng)于低端組上的FPGA2和高端組上的FPGA3的一個rd_latl信號1363被斷言到軌跡1382上的讀RD2_1和軌跡1379上的讀RD3_1。因為最后一個FPGA單元的最后一個數(shù)據(jù)已經(jīng)被訪問,所以如軌跡1390所示,DONE信號1364表明模擬寫/讀周期的完成。下表H列出并描述了模擬系統(tǒng)電路板上的各種部件和它們對應(yīng)的寄存器/存儲器、PCI存儲器地址,以及局部地址。表H存儲器映射下面在表J中顯示了根據(jù)本發(fā)明一個實施例的用于配置文件的數(shù)據(jù)格式。CPU通過PCI總線每次發(fā)送一個字以便為所有的板上FPGAs并行配置一個比特。表J配置數(shù)據(jù)格式下表K列出了XSFR_EVAL寄存器。它存在于所有的電路板中。XSFR_EVAL寄存器被主計算系統(tǒng)用來對EVAL周期進行編程、控制DMA讀/寫以及讀EVAL_DONE和XSFR_DONE字段的狀態(tài)。主計算系統(tǒng)也使用這個寄存器來啟動存儲器訪問。有關(guān)這個寄存器的模擬系統(tǒng)的運行將在下面連同圖62和63進行描述。表K所有6個電路板的XSFR_EVAL寄存器(局部地址0h)下表L列出了CONFIG_JTAG[61]寄存器的內(nèi)容。CPU配置FPGA邏輯裝置,并通過這個寄存器為FPGA邏輯裝置運行邊界掃描測試。每個電路板都有一個專門的寄存器。表LCONFIG_JTAG[61]寄存器圖62和63顯示了本發(fā)明另外一個實施例的時序圖。這兩個圖展現(xiàn)了有關(guān)XSFR_EVAL寄存器的模擬系統(tǒng)的運行。XSFR_EVAL寄存器被主計算系統(tǒng)用來對EVAL周期進行編程、控制DMA讀/寫,以及讀EVAL_DONE和XSFR_DONE字段的狀態(tài)。主計算系統(tǒng)也使用這個寄存器來啟動存儲器訪問。這兩個圖之間的主要不同點之一是WAIT_EVAL字段的狀態(tài)。當(dāng)WAIT_EVAL字段被設(shè)定成″0″的時候,正如圖62的情形一樣,DMA讀傳輸在CLK_EN之后開始。當(dāng)WAIT_EVAL字段被設(shè)定成″1″的時候,正如圖63的情形一樣,DMA讀傳輸在EVAL_DONE之后開始。在圖62中,WR_XSFR_EN和RD_XSFR_EN都被設(shè)定成″1″。這兩個字段啟動DMA寫/讀傳輸,且能被XSFR_DONE所清除。因為兩個字段都被設(shè)定成″1″,所以CTRL_FPGA單元首先自動運行DMA寫傳輸,然后運行DMA讀傳輸。然而,WAIT_EVAL字段被設(shè)定成″0″,表明DMA讀傳輸在CLK_EN斷言之后開始(且在DMA寫操作完成之后開始)。因此,在圖62中,一旦CLK_EN信號(軟件時鐘)被偵測到,DMA讀操作在DMA寫操作完成之后幾乎立刻發(fā)生。DMA讀傳輸操作不等待EVAL周期的完成。在時序圖的開始處,當(dāng)多個FPGA邏輯裝置爭奪注意時,EVAL_REQ_N信號會經(jīng)歷爭用。如先前所解釋的那樣,如果任何一個FPGA邏輯裝置斷言這個信號,EVAL_REQ_N(或EVAL_REQ#)信號就被用來啟動估算循環(huán)。在數(shù)據(jù)傳輸結(jié)束的時候,估算周期開始,包括地址指示器初始化和軟件時鐘的運行,以便幫助估算過程。在DMA數(shù)據(jù)傳輸周期完成時產(chǎn)生的DONE信號,當(dāng)多個LAST信號(來自每個FPGA邏輯裝置輸出斷的shiftin和shiftout信號)被產(chǎn)生、而且被提供到CTRL_FPGA單元,也會經(jīng)歷爭用。當(dāng)所有LAST信號都被接收、且經(jīng)過處理時,就產(chǎn)生DONE信號,且可以開始一個新的DMA數(shù)據(jù)傳輸運行。EVAL_REQ_N信號和DONE信號在分時的基礎(chǔ)上使用相同的線路,我們將在下文討論其方式。系統(tǒng)首先自動開始DMA寫傳輸,正如時間1409處的WR_XSFR信號所示。WR_XSFR信號的開始部分包括與PCI控制器有關(guān)的一些開銷,在一個實施例中,是PCI9080或9060。其后,主計算系統(tǒng)經(jīng)由局部總線LD[310]和FPGA總線FD[630]對連接到FPGA總線FD[630]的FPGA邏輯裝置運行一個DMA寫操作。在時間1412處,WR_XSFR信號被停用,表明DMA寫操作的完成。125EVAL信號在從時間1412到時間1410的一個預(yù)定的時序被激活。EVALTIME時長是可編程的,且最初設(shè)定在8+X,其中X來源于最長的信號軌跡路徑。XSFR_DONE信號也在一個短時間內(nèi)被激活,表明這個DMA傳輸操作的完成,其中當(dāng)前運行是一個DMA寫操作。同樣也在時間1412,EVAL_REQ_N信號之間的爭用停止了,但是攜帶DONE信號的線路當(dāng)前傳輸EVAL_REQ_N信號給CTRL_FPGA單元。對于3個時鐘周期,EVAL_REQ_N信號通過攜帶DONE信號的線路而得到處理。在3個時鐘周期之后,EVAL_REQ_N信號不再由FPGA邏輯裝置產(chǎn)生,但是先前被發(fā)送到CTRL_FPGA單元的EVAL_REQ_N信號將會得到處理。EVAL_REQ_N信號不再由FPGA邏輯裝置為門控時鐘產(chǎn)生的最大時序大約是23個時鐘周期。比這個周期長的EVAL_REQ_N信號將會被忽略。在時間1413處,大約在時間1412后的2個時鐘周期(在DMA寫操作的結(jié)束處),CTRL_FPGA單元將一個寫地址選通信號WPLX_ADS_N發(fā)送給PCI控制器(舉例來說,PLXPCI9080),開始DMA讀傳輸。從時間1413開始大約24個時鐘周期后,PCI控制器將會啟動DMA讀傳輸過程,同時DONE信號產(chǎn)生。在時間1414處,在PCI控制器開始DMA讀過程之前,RD_XSFR信號被激活,啟動DMA讀傳輸。一些PLX開銷數(shù)據(jù)被首先傳輸和處理。在時間1415處,在這個開銷數(shù)據(jù)被處理期間,DMA讀數(shù)據(jù)被放置在FPGA總線FD[630]和局部總線LD[310]上。在從時間1413開始的24個時鐘周期結(jié)束的時候,和來自FPGA邏輯裝置的DONE信號啟動和EVAL_REQ_N信號產(chǎn)生的時候,PCI控制器通過將來自FPGA總線FD[630]和局部總線LD[310]的數(shù)據(jù)傳輸?shù)街饔嬎銠C系統(tǒng)來處理DMA讀數(shù)據(jù)。在時間1410處,DMA讀數(shù)據(jù)將會繼續(xù)得到處理,而EVAL信號被停用,而且EVAL_DONE信號將會被激活,表明EVAL周期的完成。當(dāng)FPGA邏輯裝置產(chǎn)生EVAL_REQ_N信號時,它們之間的爭用也開始出現(xiàn)。在時間1417處,恰好在DMA讀周期在時間1416處完成之前,主計算機系統(tǒng)將輪詢PLX中斷寄存器以確定DMA周期是否接近末尾。PCI控制器知道完成DMA數(shù)據(jù)傳輸過程需多少周期。在預(yù)定數(shù)目的周期之后,PCI控制器將會在它的中斷寄存器中設(shè)定一個特別位。主計算機系統(tǒng)中的CPU輪詢這個PCI控制器中的中斷寄存器。如果該位被設(shè)定,CPU就知道DMA周期幾乎完成。主機系統(tǒng)中的CPU并不始終輪詢中斷寄存器,因為然后它將用一個讀周期來阻礙PCI總線。因此,在本發(fā)明的一個實施例中,在輪詢中斷寄存器之前,主計算機系統(tǒng)中的CPU被編程來等待一定數(shù)量的周期。在一個短的時序之后,DMA讀周期的結(jié)束在時間1416處發(fā)生,同時RD_XSFR被停用,而且DMA讀數(shù)據(jù)也不再位于FPGA總線FD[630]或局部總線LD[310]之上。XSFR_DONE信號也在時間1416處被激活,LAST信號之間為產(chǎn)生DONE信號的爭用也開始了。在從時間1409WR_XSFR信號產(chǎn)生到時間1417的整個DMA周期內(nèi),主計算機系統(tǒng)中的CPU不訪問模擬硬件系統(tǒng),在一個實施例中,這個周期的時長是(1)PCI控制器時序2的開銷時序和(2)WR_XSFR和RD_XSFR的字?jǐn)?shù)目,以及(3)主計算機系統(tǒng)的(例如SunULTRASparc)PCI開銷的總和。當(dāng)CPU輪詢PCI控制器中的中斷寄存器的時候,DMA周期之后的第一個訪問在時間1419處發(fā)生。在時間1411,大約在時間1416之后3個時鐘周期處,MEM_EN信號被激活,以啟動板上SRAM存儲器裝置,這樣FPGA邏輯裝置和SRAM存儲器裝置之間的存儲器訪問就能開始。存儲器訪問繼續(xù)直到時間1419,而且在一個實施例中,每一個訪問必需5個時鐘周期。如果不需要DMA讀傳輸,那么存儲器訪問能在時間1410處更早開始,而不是在時間1411處開始。當(dāng)存儲器訪問在FPGA總線FD[630]上在FPGA邏輯裝置和SRAM存儲器裝置之間發(fā)生時,主計算機系統(tǒng)中的CPU可以經(jīng)由局部總線LD[310]從時間1418到時間1429與PCI控制器和CTRL_FPGA單元進行通信。這發(fā)生在CPU完成輪詢PCI控制器的中斷寄存器之后。CPU在不同的寄存器上寫數(shù)據(jù),以便準(zhǔn)備下一個數(shù)據(jù)傳輸。這個周期的時長大于4微秒。如果存儲器訪問比這個周期短,那么FPGA總線FD[630]將不經(jīng)歷任何的沖突。在時間1429處,XSFR_DONE信號被停用。在圖63中,時序圖不同于圖62的時序圖,因為在圖63中,WAIT_EVAL字段被設(shè)定成″1″。換句話說,DMA讀傳遞周期在EVAL_DONE信號已被激活且?guī)缀跬瓿芍箝_始。它等待EVAL周期的接近完成,而不是在DMA寫操作完成之后立刻開始。EVAL信號在從時間1412到時間1410之間的一個預(yù)定時序被激活。在時間1410處,EVAL_DONE信號被激活,表明EVAL周期的完成。在圖63中,在時間1412處DMA寫操作之后,CTRL_FPGA單元直到時間1420處才位PCI控制器產(chǎn)生寫地址選通信號WPLX_ADS_N,這大約是在EVAL周期結(jié)束之前的16個時鐘周期。XSFR_DONE信號也被延長到時間1423處。在時間1423處,XSFR_DONE字段被設(shè)定,然后產(chǎn)生WPLX_ADS_N信號,以便啟動DMA讀過程。在時間1420,即大約在EVAL_DONE信號激活之前16個時鐘周期,CTRL_FPGA單元將一個寫地址選通信號WPLX_ADS_N發(fā)送給PCI控制器(舉例來說,PLXPCI9080)以便開始DMA讀傳輸。在從時間1420開始大約24個時鐘周期處,PCI控制器將啟動DMA讀傳輸過程,而且DONE信號也被產(chǎn)生。在時間1421處,在PCI控制器開始進行DMA讀處理之前,RD_XSFR信號被激活,以啟動DMA讀傳輸。一些PLX開銷數(shù)據(jù)首先得到傳輸和處理。在時間1422處,在這個開銷數(shù)據(jù)被處理的期間,DMA讀數(shù)據(jù)被放置在FPGA總線FD[630]和局部總線LD[310]上。在時間1424處的24個時鐘周期結(jié)束的時候,PCI控制器通過將來自FPGA總線FD[630]和局部總線LD[310]的數(shù)據(jù)傳輸?shù)街饔嬎銠C系統(tǒng)來處理DMA讀數(shù)據(jù)。時序圖的剩余部分與圖62的剩余部分相同。因此,圖63中的RD_XSFR信號的激活比圖62中的要晚。圖63中的RD_XSFR信號在EVAL周期的接近完成處之后,以便延遲DMA讀操作。圖62中的RD_XSFR信號在DMA寫傳遞完成之后跟隨CLK_EN信號的偵測。IX.協(xié)同校驗系統(tǒng)本發(fā)明的協(xié)同校驗系統(tǒng)能通過向設(shè)計者提供靈活的軟件模擬以及因使用一個硬件模型的更快速度來加速設(shè)計/開發(fā)周期。設(shè)計的硬件和軟件部分在ASIC制造之前都能得到檢驗,并且沒有以仿真器為基礎(chǔ)的協(xié)同校驗工具的種種限制。調(diào)試功能得到增強,而且整體調(diào)試時間也可能得到顯著的縮短。以ASIC為待測設(shè)備的傳統(tǒng)協(xié)同校驗工具圖64顯示了一個典型的PCI附加卡(add-oncard)的最終設(shè)計,例如視頻、多媒體、以太網(wǎng)或SCSI卡。這個卡2000包括一個允許與其他外圍設(shè)備通信的直接接口連接器2002。連接器2002被連接到總線2001,以便發(fā)送來自錄像機、照相機或電視調(diào)諧器的視頻信號;輸出視頻和音頻到顯示器或揚聲器;以及將信號傳輸?shù)酵ㄐ呕虼疟P驅(qū)動器接口。根據(jù)用戶設(shè)計,該領(lǐng)域的技術(shù)人員能預(yù)測其他的接口需求。本設(shè)計的大量功能存在于經(jīng)由總線2003連接到接口連接器2002的芯片2004中,以及經(jīng)由總線2007被用來產(chǎn)生一個局部時鐘信號的局部振蕩器2005,和經(jīng)由總線2008的存儲器2006。附加卡2000還包括一個PCI連接器2009,用來與PCI總線2010連接。在實施如圖64所顯示的一個附加卡的設(shè)計之前,本設(shè)計被簡化為ASIC形式,這是為了測試的目的。在圖65顯示了一個傳統(tǒng)的硬件/軟件協(xié)同校驗工具。用戶設(shè)計具體化為ASIC的形式——在圖65中被標(biāo)為待測設(shè)備(或″DUT″)2024。為了獲得來自設(shè)計為與其連接的多種資源的激勵,待測設(shè)備2024被放在目標(biāo)系統(tǒng)2020之內(nèi),該系統(tǒng)是主板上的中央計算系統(tǒng)2021和一些外設(shè)的組合。目標(biāo)系統(tǒng)2020包括一個中央計算系統(tǒng)2021,2021包括一個CPU和存儲器,而且在一些操作系統(tǒng)(如MicrosoftWindows或SunMicrosystem公司的Solaris)下進行操作以運行一些應(yīng)用程序。如本領(lǐng)域的技術(shù)人員所知,SunMicroSystem公司的Solaris是一個操作環(huán)境和軟件產(chǎn)品組合,支持Internet(因特網(wǎng))、Intranet(內(nèi)部網(wǎng))和企業(yè)計算。Solaris操作環(huán)境基于工業(yè)標(biāo)準(zhǔn)UNIX系統(tǒng)V版本4,而且被設(shè)計用來在一個分布網(wǎng)絡(luò)環(huán)境中執(zhí)行客戶機一服務(wù)器應(yīng)用程序,為較小的工作組提供適當(dāng)?shù)馁Y源,而且提供電子商務(wù)所需要的WebTone。待測設(shè)備2024的設(shè)備驅(qū)動器2022在中央計算系統(tǒng)2021中,以實現(xiàn)操作系統(tǒng)(以及任何應(yīng)用程序)和待測設(shè)備2024之間的通信。如本領(lǐng)域的技術(shù)人員所知,一個設(shè)備驅(qū)動器是控制計算機系統(tǒng)硬件部件或外設(shè)的特殊軟件。一個設(shè)備驅(qū)動器負責(zé)訪問設(shè)備的硬件寄存器,而且通常包括一個中斷處理程序以處理設(shè)備產(chǎn)生的中斷。設(shè)備驅(qū)動器時常構(gòu)成操作系統(tǒng)內(nèi)核的最低級別的一部分,通過這些部分,在內(nèi)核建造的時候,它們被聯(lián)接。一些比較新近的系統(tǒng)有可載入的驅(qū)動器,可以在操作系統(tǒng)運行之后從文件安裝。待測設(shè)備2024和中央計算系統(tǒng)2021被連接到一個PCI總線2023上。目標(biāo)系統(tǒng)2020中的其他外設(shè)包括一個以太網(wǎng)PCI附加卡2025,用于通過總線2034將目標(biāo)系統(tǒng)連接到一個網(wǎng)絡(luò)2030,一個經(jīng)由總線2036和2035連接到SCSI驅(qū)動器2027和2031的SCSIPCI附加卡2026,一臺經(jīng)由總線2032連接到待測設(shè)備2024的錄像機2028(如果在待測設(shè)備2024的設(shè)計中是必需的),以及一個經(jīng)由總線2033連接到待測設(shè)備2024的顯示器及/或揚聲器2029(如果在待測設(shè)備2024的設(shè)計中是必需的)。如本領(lǐng)域的技術(shù)人員所知,SCSI代表″小型計算機系統(tǒng)接口″,這是一種在計算機和智能設(shè)備(例如,硬盤、軟盤、光盤、打印機、掃描儀和更多設(shè)備)之間進行系統(tǒng)級接口的獨立于處理器的標(biāo)準(zhǔn)。在這種目標(biāo)系統(tǒng)環(huán)境中,待測設(shè)備2024能利用來自中央計算系統(tǒng)(即操作系統(tǒng)、應(yīng)用程序)和外設(shè)的多種激勵得到檢測。如果時間不是要考慮的問題,而且設(shè)計者只尋求一種簡單的通過/失敗測試,這個協(xié)同校驗工具應(yīng)該能充分滿足他們的需要。然而,在大多數(shù)情形中,一個設(shè)計項目有嚴(yán)格的預(yù)算,并且在產(chǎn)品推出之前有嚴(yán)格的預(yù)定日程。正如上文所解釋的那樣,這個特定的基于ASIC的協(xié)同校驗工具并不令人滿意,因為其調(diào)試功能并不存在(沒有熟練的技術(shù),設(shè)計者無法隔離″失敗″測試的原因,而且項目開始時無法預(yù)知發(fā)現(xiàn)的每個錯誤的″修復(fù)″數(shù)目,因此也無法預(yù)知日程安排和預(yù)算)。以仿真器作為待測試設(shè)備的傳統(tǒng)協(xié)同校驗工具圖66舉例說明了帶有一個仿真器的傳統(tǒng)協(xié)同校驗工具。與上文在圖64中說明的裝置不同,待測設(shè)備在仿真器2048中編程,仿真器2048連接到目標(biāo)系統(tǒng)2040和一些外設(shè)以及一個測試工作站2052。仿真器2048包括一個仿真時鐘2066和被編程納入仿真器中的待測設(shè)備。仿真器2048經(jīng)由PCI總線橋接器2044和PCI總線2057以及控制線路2056連接到目標(biāo)系統(tǒng)2040。目標(biāo)系統(tǒng)2040包括主板上的中央計算系統(tǒng)2041和一些外設(shè)的組合。目標(biāo)系統(tǒng)2040包括一個中央計算系統(tǒng)2041,2041包括處理器和存儲器,而且在一些操作系統(tǒng)(如MicrosoftWindows或SunMicrosystem公司的Solaris)下進行操作以運行一定數(shù)量的應(yīng)用程序。待測設(shè)備2024的設(shè)備驅(qū)動器2042在中央計算系統(tǒng)2041中,以實現(xiàn)操作系統(tǒng)(以及任何應(yīng)用程序)和仿真器2048中的待測設(shè)備之間的通信。為了和仿真器2048以及作為計算環(huán)境一部分的其他設(shè)備進行通信,中央計算系統(tǒng)2041被連接到PCI總線2043上。目標(biāo)系統(tǒng)2040中的其他外設(shè)包括一個以太網(wǎng)PCI附加卡2045,用于通過總線2058將目標(biāo)系統(tǒng)連接到一個網(wǎng)絡(luò)2049,一個經(jīng)由總線2060和2059連接到SCSI驅(qū)動器2047和2050的SCSIPCI附加卡2046。仿真器2048也經(jīng)由總線2062被連接到測試工作站2052。測試工作站2052包括一個CPU和存儲器,執(zhí)行其功能。測試工作站2052也可能包括測試?yán)?067和用于其它模型化的、但沒有與仿真器2048物理連接的設(shè)備的設(shè)備模型2068。最后,仿真器2048經(jīng)由總線2061被連接到一些其他外設(shè),如幀緩沖器或數(shù)據(jù)流記錄/播放系統(tǒng)2051。這個幀緩沖器或數(shù)據(jù)流記錄/播放系統(tǒng)2051也可能經(jīng)由總線2063被連接到通信設(shè)備或信道2053、經(jīng)由總線2064連接到錄象機2054,以及經(jīng)由總線2065連接到顯示器及/或揚聲器2055。如本領(lǐng)域的技術(shù)人員所知,仿真時鐘的運行速度遠遠慢于實際的目標(biāo)系統(tǒng)速度。因此,圖66的陰影部分以仿真速度運行,而其它沒有陰影的部分以實際的目標(biāo)系統(tǒng)速度運行。如上文所述,這種帶有仿真器的協(xié)同校驗工有一些局限性。當(dāng)使用一個邏輯分析儀或一個取樣及保存設(shè)備來獲取待測設(shè)備的內(nèi)部狀態(tài)信息時,設(shè)計者必須編譯他的設(shè)計,以便他想要檢查的、用于調(diào)試目的的有關(guān)信號能被提供到輸出引腳進行取樣。如果設(shè)計者想對設(shè)計的一個不同部分進行調(diào)試,他就必須確定該部分有能被邏輯分析儀或取樣及保存設(shè)備取樣的輸出信號,否則他必須在仿真器2048中重新編譯他的設(shè)計,以便這些信號能在輸出引腳上實現(xiàn)取樣目的。這些重新編譯的時間可能需要數(shù)天或數(shù)星期,對于一個時間要求嚴(yán)格的設(shè)計/開發(fā)時間表而言,這可能是過于冗長的延遲。此外,因為這種協(xié)同校驗工具使用信號,所以必須提供復(fù)雜的電路來或者將這些信號轉(zhuǎn)換成數(shù)據(jù),或提供一些信號到信號的時序控制。而且,要取樣的每個信號必須使用很多的線路2061和2062,這就增加了調(diào)試設(shè)置的負擔(dān)和時間。帶有可重新配置的計算陣列的模擬作為一個簡短的總結(jié),圖67舉例說明了本發(fā)明的一種具有單一引擎可重新配置計算(RCC)陣列系統(tǒng)的高級別的配置,此專利權(quán)說明書曾在上文對其進行了描述。這個單一引擎RCC系統(tǒng)將被合并到根據(jù)本發(fā)明的一個實施例的協(xié)同校驗系統(tǒng)中。在圖67中,RCC陣列系統(tǒng)2080包括一個RCC計算系統(tǒng)2081,一個可重新配置的計算(RCC)硬件陣列2084,和一個將它們連接在一起的PCI總線2089。重要的是,RCC計算系統(tǒng)2081包括包括軟件中用戶設(shè)計的完整模型,而RCC硬件陣列2084包括用戶設(shè)計的一個硬件模型。RCC計算系統(tǒng)2081包括CPU、存儲器、一個操作系統(tǒng),和運行單一引擎RCC系統(tǒng)2080的必需軟件。提供一個軟件時鐘2082以便實現(xiàn)RCC計算系統(tǒng)2081中的軟件模型以及RCC硬件陣列2084中的硬件模型的嚴(yán)格控制。測試平臺數(shù)據(jù)2083也被儲存在RCC計算系統(tǒng)2081中。RCC硬件陣列系統(tǒng)2084包括一個PCI接口2085,一組RCC硬件陣列板2086,以及實現(xiàn)接口目的的各種總線。RCC硬件陣列板組2086至少包括模型化在硬件中的用戶設(shè)計的一部分(也就是,硬件模型2087)以及用于測試平臺數(shù)據(jù)的存儲器2088。在一個實施例中,在配置期間,這個硬件模型的各部分被分布在多個可重新配置的邏輯元件(舉例來說,F(xiàn)PGA芯片)之間。因為要使用更多的可重新配置的邏輯元件或芯片,因此需要使用更多的電路板。在一個實施例中,一個單一電路板上具有四個可重新配置的邏輯元件。在其他的實施例中,一個單一電路板上具有八個可重新配置的邏輯元件。在四芯片電路板中的可重新配置的邏輯元件的容量和能力與八芯片電路板可重新配置的部件的容量和能力可能有顯著的不同??偩€2090從PCI接口2085到硬件模型2087為硬件模型提供不同的時鐘??偩€2091經(jīng)由連接器2093和內(nèi)部總線2094在PCI接口2085和硬件模型2087之間提供其他輸入/輸出數(shù)據(jù)??偩€2092起到PCI接口2085和硬件模型2087之間的PCI總線的功能。測試平臺數(shù)據(jù)也能被儲存在硬件模型2087中的存儲器中。如上文所述,硬件模型2087包括除了實現(xiàn)硬件模型與RCC計算系統(tǒng)2081面接所需要的用戶設(shè)計的硬件模型之外的其他結(jié)構(gòu)和功能。這個RCC系統(tǒng)2080可能設(shè)置在一個單一工作站中,或者連接到一個工作站網(wǎng)絡(luò),其中每個工作站以分時的方式訪問RCC系統(tǒng)2080。事實上,RCC陣列系統(tǒng)2080作為模擬服務(wù)器,其具有一個模擬調(diào)度程序和狀態(tài)交換機制。服務(wù)器允許一個工作站中的每個用戶為實現(xiàn)高速加速和硬件狀態(tài)交換目的而訪問RCC硬件陣列2084。在加速和狀態(tài)交換之后,每個用戶都能在本地用軟件模擬用戶設(shè)計,同時可以對其他工作站的其他用戶釋放RCC硬件陣列2084的控制。這個網(wǎng)絡(luò)模型也將被用于下面描述的協(xié)同校驗系統(tǒng)。RCC陣列系統(tǒng)2080為設(shè)計者提供模擬整個設(shè)計的能力和靈活性,設(shè)計者還可以經(jīng)由可重新配置的計算陣列中的硬件模型來加速部分在選擇的周期內(nèi)測試點的部分,并隨時獲得其設(shè)計中任何部分的內(nèi)部狀態(tài)信息。的確,單一引擎的、可重新配置的計算陣列(RCC)系統(tǒng)可以被不精確的描述為一個硬件加速模擬器,它能在單一調(diào)試期間被用來運行下列任務(wù)(1)獨自模擬;(2)與硬件加速一起模擬,其中用戶能隨時啟動、停止、斷言值,以及檢查設(shè)計的內(nèi)部狀態(tài),(3)后模擬分析,以及(4)內(nèi)電路仿真。因為軟件模型和硬件模型都處于單一引擎經(jīng)由一個軟件時鐘的嚴(yán)格控制之下,可重新配置的計算陣列中的硬件模型被緊密耦合到軟件模擬模型。這允許設(shè)計者一個周期接一個周期進行調(diào)試,以及經(jīng)過一定數(shù)量的周期來加速和減速硬件模型,以便獲得有價值的內(nèi)部狀態(tài)信息。而且,因為這個模擬系統(tǒng)處理數(shù)據(jù),而不是信號,所以不需要復(fù)雜的信號-數(shù)據(jù)轉(zhuǎn)換/時序電路。此外,如果設(shè)計者希望檢查不同的節(jié)點組,可重新配置的計算陣列中的硬件模型不需要重新編譯,這一點不像典型的仿真系統(tǒng)。有關(guān)進一步的詳細情況,請回顧上文的描述。沒有外部輸入/輸出的協(xié)同校驗系統(tǒng)本發(fā)明一個實施例是一個不使用真實和物理外部輸入/輸出設(shè)備和目標(biāo)應(yīng)用程序的協(xié)同校驗系統(tǒng)。因此,根據(jù)本發(fā)明的一個實施例的一個協(xié)同校驗系統(tǒng)能被整合到RCC系統(tǒng)中連同其他的功能性一起工作,以便調(diào)試用戶設(shè)計的軟件部分和硬件部分,而不需使用任何實際的目標(biāo)系統(tǒng)或輸入/輸出設(shè)備。相反,目標(biāo)系統(tǒng)和外部輸入/輸出設(shè)備被模型化在RCC計算系統(tǒng)的軟件中。參照圖68,協(xié)同校驗系統(tǒng)2100包括一個RCC計算系統(tǒng)2101,RCC硬件陣列2108,和將它們連接起來的一個PCI總線2114。重要的是,RCC計算系統(tǒng)2101包括在軟件中的用戶設(shè)計的整個模型,且可重新配置的計算陣列2108包括用戶設(shè)計的一個硬件模型。RCC計算系統(tǒng)2101包括CPU、存儲器、一個操作系統(tǒng),和運行單一引擎協(xié)同校驗系統(tǒng)2100的必需軟件。一個軟件時鐘2104被提供以實現(xiàn)RCC計算系統(tǒng)2101中的軟件模型以及可重新配置的計算陣列2108中的硬件模型的嚴(yán)格控制。測試?yán)?103也被儲存在RCC計算系統(tǒng)2101中。根據(jù)本發(fā)明一個實施例,RCC計算系統(tǒng)2101還包括標(biāo)記為2106的目標(biāo)應(yīng)用程序2102、用戶設(shè)計硬件模型的一個驅(qū)動器2105、一個設(shè)備(舉例來說,一個視頻卡)模型和它的在軟件中的驅(qū)動器,以及標(biāo)記為2107的其他設(shè)備(舉例來說,一個顯示器)的模型和它的在軟件中的驅(qū)動器。本質(zhì)上,RCC計算系統(tǒng)2101按照需要包含盡可能多的設(shè)備模型和驅(qū)動器,傳輸?shù)接脩粼O(shè)計的軟件模型和硬件模型,真實目標(biāo)系統(tǒng)和其他輸入/輸出設(shè)備是該計算環(huán)境的組成部分。RCC硬件陣列2108包括一個PCI接口2109,一組RCC硬件陣列板2110,和各種為實現(xiàn)接口目的的總線。RCC硬件陣列板組2110至少包括模型化在硬件內(nèi)的部分用戶設(shè)計2112以及用于測試平臺數(shù)據(jù)的存儲器2113。依照上文的描述,每個電路板包含多個可重新配置的邏輯元件或芯片??偩€2115從PCI接口2109到硬件模型2112為硬件模型提供各種時鐘??偩€2116經(jīng)由連接器2111和內(nèi)部總線2118提供PCI接口2109和硬件模型2112之間的其他輸入/輸出數(shù)據(jù)??偩€2117的功能相當(dāng)于PCI接口2109和硬件模型2112之間的PCI總線。測試平臺數(shù)據(jù)可以被儲存在硬件模型2113中的存儲器中。依照上文的描述,硬件模型包括除了使得硬件模型與RCC計算系統(tǒng)2101面接所需要的用戶設(shè)計的硬件模型之外的其他結(jié)構(gòu)和功能。為了將圖68中的協(xié)同校驗系統(tǒng)和傳統(tǒng)的基于仿真器的協(xié)同校驗系統(tǒng)進行比較,圖66顯示了連接到目標(biāo)系統(tǒng)2040的仿真器2048、一些輸入/輸出設(shè)備(舉例來說,幀緩沖器或數(shù)據(jù)流記錄/播放系統(tǒng)2051)和一個工作站2052。這個仿真器配置為設(shè)計者提出了很多問題和設(shè)定上的麻煩。仿真器需要一個邏輯分析儀或一個取樣及保存設(shè)備,以便測量模型化在仿真器中的用戶設(shè)計內(nèi)部狀態(tài)。因為邏輯分析儀和取樣及保存設(shè)備需要信號,因此要求有復(fù)雜的信號-數(shù)據(jù)轉(zhuǎn)換電路。此外,也需要復(fù)雜的信號-信號時序控制電路。每個信號都需要許多導(dǎo)線來測量仿真器的內(nèi)部狀態(tài),這將進一步增加用戶在安排時遇到的負擔(dān)。在調(diào)試期間,每次用戶想要檢驗一組不同的內(nèi)部邏輯電路時,他都必須重新編譯仿真器,這樣來自那個邏輯電路的適當(dāng)信號作為輸出用于測量,并由邏輯分析儀或取樣及保存設(shè)備進行記錄。漫長的重新編譯時間成本太貴。本發(fā)明的協(xié)同校驗系統(tǒng)中沒有連接外部輸入/輸出設(shè)備,目標(biāo)系統(tǒng)和其他的輸入/輸出設(shè)備被模型化在軟件中,因此不需要實際存在真實的物理目標(biāo)系統(tǒng)和輸入/輸出設(shè)備。因為RCC計算系統(tǒng)2101處理數(shù)據(jù),所以不需要信號-數(shù)據(jù)轉(zhuǎn)換電路或信號-信號時序控制電路。導(dǎo)線數(shù)目也不受信號數(shù)目的限制,因此,裝配相對簡單。此外,因為協(xié)同校驗系統(tǒng)處理數(shù)據(jù)而不是信號,所以調(diào)試用戶設(shè)計的硬件模型中邏輯電路的不同部分也不需要重新編譯。因為RCC計算系統(tǒng)用軟件控制的時鐘(也就是,軟件時鐘和時鐘邊緣偵測電路)控制RCC硬件陣列,所以硬件模型的開始和停止變得容易了。因為整個用戶設(shè)計的模型處于軟件中,而且軟件時鐘實現(xiàn)同步,所以從硬件模型讀數(shù)據(jù)也是容易的。因此,用戶能僅通過軟件模擬來調(diào)試,加速硬件中的部分或全部用戶設(shè)計,一個周期接一個周期經(jīng)過各個需要的測試點,檢查軟件和硬件模型的內(nèi)部狀態(tài)(也就是,寄存器和組合邏輯狀態(tài))。舉例來說,用戶能用一些測試平臺數(shù)據(jù)模擬設(shè)計,然后將內(nèi)部狀態(tài)信息下載到硬件模型,用帶硬件模型的各種測試平臺數(shù)據(jù)加速設(shè)計,通過寄存器/組合邏輯重建和從硬件模型到軟件模型載入值來檢查最終的硬件模型的內(nèi)部狀態(tài)值,而且用戶能最后通過使用硬件模型加速過程的結(jié)果,采用軟件來模擬用戶設(shè)計的其他部分。然而,依照上文的描述,為了調(diào)試進程控制,仍需要一個工作站。在一個網(wǎng)絡(luò)配置中,一個工作站可能被遠程連接到協(xié)同校驗系統(tǒng)中,遠程訪問調(diào)試數(shù)據(jù)。在一個非網(wǎng)絡(luò)配置中,一個工作站可能在本地連接到協(xié)同校驗系統(tǒng),或者在一些其他實施例中,工作站可能將協(xié)同校驗系統(tǒng)合并在內(nèi)部,以便可以在本地訪問調(diào)試數(shù)據(jù)。帶有外部輸入/輸出的協(xié)同校驗系統(tǒng)在圖68中,各種輸入/輸出設(shè)備和目標(biāo)應(yīng)用程序被模型化在RCC計算系統(tǒng)2101中。然而,當(dāng)太多的輸入/輸出設(shè)備和目標(biāo)應(yīng)用程序在RCC計算系統(tǒng)2101中運行的時候,整體速度會減慢。如果RCC計算系統(tǒng)2101中只有一個單一處理器,就必需更多的時間來處理來自所有設(shè)備模型和目標(biāo)應(yīng)用程序的各種數(shù)據(jù)。為了增加數(shù)據(jù)傳輸量,真實輸入/輸出設(shè)備和目標(biāo)應(yīng)用程序(而不是輸入/輸出設(shè)備和目標(biāo)應(yīng)用程序的軟件模型)可能被物理連接到協(xié)同校驗系統(tǒng)。本發(fā)明一個實施例是一個使用真實和物理外部輸入/輸出設(shè)備和目標(biāo)應(yīng)用程序的協(xié)同校驗系統(tǒng)。因此,使用真實的目標(biāo)系統(tǒng)及輸入/輸出設(shè)備的同時,一個協(xié)同校驗系統(tǒng)能合并RCC系統(tǒng)連同其他功能,以調(diào)試用戶設(shè)計的軟件部分和硬件部分。為了測試目的,協(xié)同校驗系統(tǒng)能使用來自軟件的測試平臺數(shù)據(jù)和來自外部接口(舉例來說,目標(biāo)系統(tǒng)和外部輸入/輸出設(shè)備)的激勵。測試平臺數(shù)據(jù)不僅能被用來給用戶設(shè)計的接腳分布提供測試數(shù)據(jù),而且為用戶設(shè)計中的內(nèi)部節(jié)點提供測試數(shù)據(jù)。來自外部輸入/輸出設(shè)備(或目標(biāo)系統(tǒng))的真實輸入/輸出信號只可能被引入用戶設(shè)計接腳分布。因此,來自一個外部接口(舉例來說,目標(biāo)系統(tǒng)或外部輸入/輸出設(shè)備)的測試數(shù)據(jù)和軟件中的測試平臺處理之間的主要區(qū)別之一,就在于測試平臺數(shù)據(jù)能被用來通過應(yīng)用于接腳分布和內(nèi)部節(jié)點的激勵來測試用戶設(shè)計,而來自目標(biāo)系統(tǒng)或外部輸入/輸出設(shè)備的真實數(shù)據(jù)只能經(jīng)由其接腳分布(或在用戶設(shè)計中代表接腳分布的節(jié)點)被應(yīng)用到用戶設(shè)計。在下列討論中,我們將呈現(xiàn)有關(guān)一個目標(biāo)系統(tǒng)和外部輸入/輸出設(shè)備的協(xié)同校驗系統(tǒng)結(jié)構(gòu)和它的配置。作為與圖66中的系統(tǒng)配置進行的比較,根據(jù)本發(fā)明的一個實施例的協(xié)同校驗系統(tǒng)替換了虛線框2070內(nèi)的結(jié)構(gòu)和功能。換句話說,圖66顯示虛線2070的范圍內(nèi)的仿真器和工作站,而本發(fā)明的一個實施例在虛線2070處包括協(xié)同校驗系統(tǒng)2140(和它的相聯(lián)工作站),正如圖69所顯示的協(xié)同校驗系統(tǒng)2140。參照圖69,根據(jù)本發(fā)明的一個實施例的協(xié)同校驗系統(tǒng)配置包括一個目標(biāo)系統(tǒng)2120、一個協(xié)同校驗系統(tǒng)2140、一些可選輸入/輸出設(shè)備,和將它們連接起來的控制/數(shù)據(jù)總線2131和2132。目標(biāo)系統(tǒng)2120包括一個中央計算系統(tǒng)2121,該計算系統(tǒng)包括一個CPU和存儲器,而且在一些操作系統(tǒng)中運行,例如MicrosoftWindows或SunMicrosystem公司的Solaris以便運行一定數(shù)量的應(yīng)用程序2122和測試?yán)?123。用于用戶設(shè)計的硬件模型的設(shè)備驅(qū)動器2124被包含在中央計算系統(tǒng)2121中,以實現(xiàn)操作系統(tǒng)(以及任何應(yīng)用程序)和用戶設(shè)計之間的通信。為了與協(xié)同校驗系統(tǒng)以及構(gòu)成該計算環(huán)境部分的其他設(shè)備進行通信,中央計算系統(tǒng)2121被連接到PCI總線2129。目標(biāo)系統(tǒng)2120中的其他外設(shè)包括一個以太網(wǎng)PCI附加卡2125,用來將目標(biāo)系統(tǒng)連接到一個網(wǎng)絡(luò),經(jīng)由總線2130連接到SCSI驅(qū)動器2128的一個SCSIPCI附加卡2126,和一個PCI總線橋接器2127。協(xié)同校驗系統(tǒng)2140包括一個RCC計算系統(tǒng)2141,一個RCC硬件陣列2190,外部輸入/輸出擴展器形式的一外部接口2139,和一個將RCC計算系統(tǒng)2141和RCC硬件陣列2190連接到一起的PCI總線2171。RCC計算系統(tǒng)2141包括CPU、存儲器、一個操作系統(tǒng),和運行單一引擎協(xié)同校驗系統(tǒng)2140所必需的軟件。重要的是,RCC計算系統(tǒng)2141包括軟件中用戶設(shè)計的整個模型,而RCC硬件陣列2190包括用戶設(shè)計的一個硬件模型。依照上文的討論,協(xié)同校驗系統(tǒng)的單一引擎從一個主軟件內(nèi)核處獲得它的能力和靈活性,該內(nèi)核駐留在RCC計算系統(tǒng)2141的主存儲器中,并且控制協(xié)同校驗系統(tǒng)2140的全部運行和執(zhí)行。只要任何測試平臺處理處于活動狀態(tài),或來自外部世界的任何信號被送到協(xié)同校驗系統(tǒng),內(nèi)核就估算激活的測試平臺部件、估算時鐘部件、偵測時鐘邊緣以更新寄存器和存儲器,同時也傳播組合邏輯數(shù)據(jù),并推進模擬時間。這個主軟件內(nèi)核實現(xiàn)了RCC計算系統(tǒng)2141和RCC硬件陣列2190的緊密耦合性質(zhì)。軟件內(nèi)核產(chǎn)生一個來自一個軟件時鐘源2142的軟件時鐘信號,該信號被提供到RCC硬件陣列2190和外部世界。時鐘源2142能根據(jù)軟件時鐘的不同目的地在不同的頻率上產(chǎn)生多重時鐘。通常,軟件時鐘確保在用戶設(shè)計硬件模型中的寄存器與系統(tǒng)時鐘同步估算,且沒有任何占用時間擾亂的現(xiàn)象。軟件模型能在軟件中偵測影響硬件模型寄存器值的時鐘邊緣。因此,一種時鐘偵測機制確保在主軟件模型中,一個時鐘邊緣偵測可以被轉(zhuǎn)換成硬件模型時鐘偵測。關(guān)于軟件時鐘和時鐘邊緣偵測邏輯的更為詳細的討論,請參照圖17-19以及專利說明書中的相應(yīng)文本。根據(jù)本發(fā)明的一個實施例的情形是,RCC計算系統(tǒng)2141也可能包括一定數(shù)量的輸入/輸出設(shè)備的一個或多個模型,盡管其他真實的物理輸入/輸出設(shè)備可能被連接到協(xié)同校驗系統(tǒng)中。舉例來說,RCC計算系統(tǒng)2141可能包括標(biāo)記為2143的設(shè)備(舉例來說,一個揚聲器)模型和其驅(qū)動器以及軟件中的測試平臺數(shù)據(jù),以及標(biāo)記為2144的另外一個設(shè)備(舉例來說,一個圖形加速器)模型連同其驅(qū)動器和軟件中的測試平臺數(shù)據(jù)。用戶決定哪些設(shè)備(以及它們各自的驅(qū)動器和測試平臺數(shù)據(jù))將會被模型化并合并到RCC計算系統(tǒng)2141中,以及哪些設(shè)備將實際上被連接到協(xié)同校驗系統(tǒng)中。協(xié)同校驗系統(tǒng)包含一個控制邏輯,該控制邏輯提供(1)RCC計算系統(tǒng)2141和RCC硬件陣列2190,以及(2)外部接口(被連接到目標(biāo)系統(tǒng)和外部輸入/輸出設(shè)備的接口)和RCC硬件陣列2190之間的通信量控制。因為一些輸入/輸出設(shè)備可能被模型化在RCC計算系統(tǒng)中,所以在RCC硬件陣列2190和RCC計算系統(tǒng)2141之間有一些數(shù)據(jù)通過。此外,RCC計算系統(tǒng)2141具有軟件中的整個設(shè)計模型,包括模型化在RCC硬件陣列2190中的部分用戶設(shè)計。結(jié)果,RCC計算系統(tǒng)2141也必須能訪問經(jīng)過外部接口和RCC硬件陣列2190之間的所有數(shù)據(jù)。控制邏輯確保RCC計算系統(tǒng)2141能訪問這些數(shù)據(jù)。下文將對控制邏輯作更為詳細的描述。RCC硬件陣列2190包括一定數(shù)量的陣列板。在圖69中顯示的這個特定實施例中,硬件陣列2190包括電路板2145-2149。電路板2146-2149包含大部分配置的硬件模型。電路板2145(或電路板m1)包含可重新配置的計算元件(舉例來說,F(xiàn)PGA芯片)2153,協(xié)同校驗系統(tǒng)能使用這個元件來至少配置部分硬件模型,還包含一個在外部接口(目標(biāo)系統(tǒng)和輸入/輸出設(shè)備)和協(xié)同校驗系統(tǒng)2140之間引導(dǎo)通信量和數(shù)據(jù)的外部輸入/輸出控制器2152。電路板2145經(jīng)由外部輸入/輸出控制器允許RCC計算系統(tǒng)2141訪問在外部世界(也就是,目標(biāo)系統(tǒng)和輸入/輸出設(shè)備)和RCC硬件陣列2190之間傳輸?shù)乃袛?shù)據(jù)。這個訪問很重要,因為協(xié)同校驗系統(tǒng)中的RCC計算系統(tǒng)2141包含在軟件中整個用戶設(shè)計的一個模型,而且RCC計算系統(tǒng)2141也能控制RCC硬件陣列2190的功能。如果來自一個外部輸入/輸出設(shè)備的激勵被提供到硬件模型,軟件模型必須也能訪問這個激勵,以便這個協(xié)同校驗系統(tǒng)的用戶能有選擇地控制下一個調(diào)試步驟,該步驟可能包括檢查作為該應(yīng)用激勵結(jié)果的設(shè)計內(nèi)部狀態(tài)值。正如上文有關(guān)電路板布局和互連方案所討論的那樣,第一個和最后一個電路板被包含在硬件陣列2190中。因此,電路板1(標(biāo)記為電路板2146)和電路板8(標(biāo)記為電路板2149)被包含在一個由八個電路板組成的硬件陣列中(不包括電路板m1)。除了電路板2145-2149之外,可能還具有帶有芯片m2的電路板m2(不在圖69中顯示,但是見圖74)。這個電路板m2類似于電路板m1,除了電路板m2沒有任何的外部接口,且如果需要附加板,它能被用來實現(xiàn)擴展目的?,F(xiàn)在將討論這些電路板的內(nèi)容。電路板2145(電路板m1)包括一個PCI控制器2151,一個外部輸入/輸出控制器2152,數(shù)據(jù)芯片(m1)2153,存儲器2154和多路復(fù)用器2155。在一個實施例中,這個PCI控制器是PLX9080。PCI控制器2151經(jīng)由總線2171被連接到RCC計算系統(tǒng)2141,并經(jīng)由總線2172被連接到三狀態(tài)緩沖器2179。在外部世界(目標(biāo)系統(tǒng)2120和輸入/輸出設(shè)備)和RCC計算系統(tǒng)2141之間的協(xié)同校驗系統(tǒng)中的主通信量控制器是一個外部輸入/輸出控制器2152(在圖69、71,和73中也被稱為″CTRLXM″),該控制器被連接到RCC計算系統(tǒng)2141、RCC硬件陣列中的其他電路板2146-2149、目標(biāo)系統(tǒng)2120和真實外部輸入/輸出設(shè)備中。當(dāng)然,如同上文所描述的那樣,RCC計算系統(tǒng)2141和RCC硬件陣列2190之間的主通信量控制器一直都是每個陣列板2146-2149中的單個內(nèi)部輸入/輸出控制器(舉例來說,輸入/輸出控制器2156和2158)和PCI控制器2151的組合。在一個實施例中,這些單個內(nèi)部輸入/輸出控制器,例如控制器2156和2158,是在上文圖22(單元700)和圖56(單元1200)等示范圖中被描述和舉例說明的FPGA輸入/輸出控制器。外部輸入/輸出控制器2152被連接到三狀態(tài)緩沖器2179,以便允許外部輸入/輸出控制器和RCC計算系統(tǒng)2141面接。在一個實施例中,在有些情況下,三狀態(tài)緩沖器2179允許來自RCC計算系統(tǒng)2141的數(shù)據(jù)傳給局部總線2180,同時防止來自局部總線的數(shù)據(jù)傳給RCC計算系統(tǒng)2141,而另外一些情況下,允許數(shù)據(jù)從局部總線2180傳遞至RCC計算系統(tǒng)2141。外部輸入/輸出控制器2152還經(jīng)由數(shù)據(jù)總線2176被連接到芯片(m1)2153和存儲器/外部緩沖器2154。在一個實施例中,芯片(m1)2153是可重新配置的計算部件,例如一個FPGA芯片,它能被用來至少配置用戶設(shè)計的部分硬件模型(或所有硬件模型,如果用戶設(shè)計足夠小)。在一個實施例中,外部緩沖器2154是DRAMDIMM,而且能被用被芯片2153用來實現(xiàn)多種目的。外部緩沖器2154提供許多存儲器容量,超過在本地連接到每個可重新配置的邏輯元件(舉例來說,可重新配置的邏輯元件2157)的單個SRAM存儲器裝置。這個大的存儲器容量允許RCC計算系統(tǒng)儲存大量的數(shù)據(jù),例如測試平臺數(shù)據(jù)、微控制器嵌入碼(如果用戶設(shè)計是一個微控制器),以及一個存儲器裝置中的大型LUT表。依照上面的描述,外部緩沖器2154也能被用來儲存硬件模型化必需的數(shù)據(jù)。實質(zhì)上,這個外部緩沖器2154可以部分起到上面描述和說明的另一個高端或低端組SRAM存儲器裝置一樣的功能,例如圖56中的SRAM1205和1206,但是它有更多的存儲器。外部緩沖器2154也能被協(xié)同校驗系統(tǒng)用來儲存從目標(biāo)系統(tǒng)2120和外部的輸入/輸出設(shè)備處收到的數(shù)據(jù),以便讓這些數(shù)據(jù)稍后能被RCC計算系統(tǒng)2141回收。芯片(m1)2153和外部緩沖器2154還包含在本專利說明書″存儲器模擬″部分中描述的存儲器映射邏輯。為了訪問在外部緩沖器2154中的需要的數(shù)據(jù),芯片2153和RCC計算系統(tǒng)2141(經(jīng)由外部輸入/輸出控制器2152)都能為需要的數(shù)據(jù)傳輸?shù)刂贰P酒?153在地址總線2182上提供地址,外部輸入/輸出控制器2152在地址總線2177上提供地址。這些地址總線2182和2177是多路復(fù)用器2155的輸入,它在被連接到外部緩沖器2154的輸出2178線路上提供所選的地址。針對多路復(fù)用器2155的選擇信號是由外部輸入/輸出控制器2152經(jīng)由線路2181提供的。外部輸入/輸出控制器2152也經(jīng)由總線2180被連接到其他電路板2146-2149上。在一個實施例中,總線2180是在上文圖22(局部總線708)和圖56(局部總線1210)等示范圖中得到描述和舉例說明的局部總線。在這個實施例中,只有五個電路板(包括電路板2145(電路板m1))被用到,電路板的真實數(shù)目將由模型化在硬件中的用戶設(shè)計的復(fù)雜性和大小來決定。具有中等復(fù)雜程度的用戶設(shè)計硬件模型比具有較高復(fù)雜程度的用戶設(shè)計硬件模型需要更少的電路板。為了實現(xiàn)可量測性,除了一些板間互連線路以外,電路板2146-2149實質(zhì)上是相同的。這些互連線路使得在一個芯片(舉例來說,電路板2146中的芯片2157)里的部分用戶設(shè)計硬件模型,與被物理放置在另外的一個芯片中(舉例來說,電路板2148中的芯片2161)、相同用戶設(shè)計中的硬件模型的另外部分進行通信。簡短參照圖74,了解這個協(xié)同校驗系統(tǒng)的互連結(jié)構(gòu),同時參照圖8和36-44,以及本專利說明書中它們相應(yīng)的描述。電路板2148是一個代表性的電路板。電路板2148是這個由四個電路板組成的布局(排除電路板2145(電路板m1))中的第三個電路板。因此,它不是一個需要適當(dāng)?shù)幕ミB線路終端的末端板。電路板2148包括一個內(nèi)部輸入/輸出控制器2158,一些可重新配置的邏輯元件(舉例來說,F(xiàn)PGA芯片)2159-2166,高端組FD總線2167,低端組FD總線2168,高端組存儲器2169,和低端組存儲器2170。如上文所述,在一個實施例中,內(nèi)部輸入/輸出控制器2158是如上文圖22(單元700)和圖56(單元1200)等示范圖中得到描述和舉例說明的FPGA輸入/輸出控制器。同樣地,高端和低端組存儲器設(shè)備2169和2170是在上文,舉例來說,圖56(SRAM1205和1206))中被描述和舉例說明的SRAM存儲器裝置。在一個實施例中,高端和低端組FD總線2167和2168是如上文圖22(FPGA總線718和719)、圖56(FD總線1212和1213)和圖57(FD總線1282)等示范圖中得到描述和舉例說明的FD總線或FPGA總線。為了將協(xié)同校驗系統(tǒng)2140連接到目標(biāo)系統(tǒng)2120和其他輸入/輸出設(shè)備,提供以一個外部輸入/輸出擴展器的形式出現(xiàn)的一個外部接口2139。在目標(biāo)系統(tǒng)一側(cè),外部輸入/輸出擴展器2139經(jīng)由次級PCI總線2132和一個控制線路2131被連接到PCI橋接器2127上,用來傳輸軟件時鐘。在輸入/輸出設(shè)備一側(cè),外部輸入/輸出擴展器2139經(jīng)由總線2136-2138被連接到各種輸入/輸出設(shè)備,用于軟件時鐘的控制線路2133-2135和接腳分布數(shù)據(jù)。能被連接到輸入/輸出擴展器2139的輸入/輸出設(shè)備的數(shù)目由用戶決定。無論如何,根據(jù)需要,盡可能多的數(shù)據(jù)總線和軟件時鐘控制線路被提供到外部輸入/輸出擴展器2139中,以便將盡可能多的輸入/輸出設(shè)備連接到協(xié)同校驗系統(tǒng)2140,成功運行調(diào)試進程。在協(xié)同校驗系統(tǒng)2140一側(cè),外部輸入/輸出擴展器2139經(jīng)由數(shù)據(jù)總線2175、軟件時鐘控制線路2174和掃描控制線路2173被連接到外部輸入/輸出控制器2152。數(shù)據(jù)總線2175被用來在外部世界(目標(biāo)系統(tǒng)2120和外部輸入/輸出設(shè)備)和協(xié)同校驗系統(tǒng)2140之間傳遞接腳分布數(shù)據(jù)。軟件時鐘控制線路2174被用來從RCC計算系統(tǒng)2141到外部世界傳輸軟件時鐘數(shù)據(jù)。出現(xiàn)在控制線路2174和2131上的軟件時鐘由RCC計算系統(tǒng)2141中的主軟件內(nèi)核來產(chǎn)生。RCC計算系統(tǒng)2141經(jīng)由PCI總線2171、PCI控制器2151、總線2171、三狀態(tài)緩沖器2179、局部總線2180、外部輸入/輸出控制器2152,和控制線路2174傳輸一個軟件時鐘給外部輸入/輸出擴展器2139。從外部輸入/輸出擴展器2139出發(fā),軟件時鐘被作為時鐘輸入提供給目標(biāo)系統(tǒng)2120(經(jīng)由PCI橋接器2127),并經(jīng)由控制線路2133-2135提供給其他的外部輸入/輸出設(shè)備。因為軟件時鐘起到主時鐘源的功能,所以目標(biāo)系統(tǒng)2120和輸入/輸出設(shè)備以比較慢的速度運行。然而,提供到目標(biāo)系統(tǒng)2120和外部輸入/輸出設(shè)備的數(shù)據(jù)被同步到軟件時鐘速度,正如RCC計算系統(tǒng)2141中的軟件模型和RCC硬件陣列2190中的硬件模型。同樣地,來自目標(biāo)系統(tǒng)2120和外部輸入/輸出設(shè)備的數(shù)據(jù)與軟件時鐘同步被傳輸?shù)絽f(xié)同校驗系統(tǒng)2140。因此,在外部接口和協(xié)同校驗系統(tǒng)之間傳輸?shù)妮斎?輸出數(shù)據(jù)與軟件時鐘同步。本質(zhì)上,每當(dāng)數(shù)據(jù)在它們之間傳遞時,軟件時鐘使外部輸入/輸出設(shè)備和目標(biāo)系統(tǒng)的運行與協(xié)同校驗系統(tǒng)(在RCC計算系統(tǒng)和RCC硬件陣列中)的運行保持同步。軟件時鐘作被用來進行數(shù)據(jù)輸入運行和數(shù)據(jù)輸出運行。對數(shù)據(jù)輸入運行而言,當(dāng)一個指示器(在下文討論)鎖存來自RCC計算系統(tǒng)2141的軟件時鐘到外部接口時,其他指示器將從外部接口到RCC硬件陣列2190的硬件模型中的所選內(nèi)部節(jié)點鎖存這些輸入/輸出數(shù)據(jù)。在軟件時鐘被傳輸?shù)酵獠拷涌谶@個周期內(nèi),指示器將以一個接一個的方式鎖存這些輸入/輸出數(shù)據(jù)。當(dāng)所有的數(shù)據(jù)都被鎖存時,RCC計算系統(tǒng)能再一次產(chǎn)生另一個軟件時鐘,以便在需要時在另一個軟件時鐘周期內(nèi)鎖存更多數(shù)據(jù)。對數(shù)據(jù)輸出運行而言,RCC計算系統(tǒng)能將軟件時鐘傳輸給外部接口,而且隨后在指示器的幫助下,控制從RCC硬件陣列2190到外部接口的硬件模型內(nèi)部節(jié)點的數(shù)據(jù)的選通。再一次,指示器以一個接一個的方式從內(nèi)部節(jié)點到外部接口對數(shù)據(jù)進行門控。如果更多的數(shù)據(jù)需要被傳輸?shù)酵獠拷涌?,RCC計算系統(tǒng)能產(chǎn)生另一個軟件時鐘周期,然后啟動所選指示器來對數(shù)據(jù)進行門控,送到外部接口。軟件時鐘的產(chǎn)生受到嚴(yán)格的控制,因此允許協(xié)同校驗系統(tǒng)使協(xié)同校驗系統(tǒng)和連接到外部接口的任何外部輸入/輸出設(shè)備之間的數(shù)據(jù)傳輸和數(shù)據(jù)估算保持同步。掃描控制線路2173被用來允許協(xié)同校驗系統(tǒng)2140針對可能出現(xiàn)的任何數(shù)據(jù)掃描數(shù)據(jù)總線2132、2136、2137,和2138。支持掃描信號的外部輸入/輸出控制器2151中的邏輯電路是一個指示器邏輯電路,其中各種輸入被提供作為經(jīng)由一個MOVE信號行進到下一個輸入之前的一特定時間周期的輸出。這個邏輯電路類似于圖11中的方案。實際上,掃描信號起到一個針對一個多路復(fù)用器的選擇信號的功能,除了它在輪轉(zhuǎn)順序中選擇對多路復(fù)用器的各種輸入。因此,在一個時序周期中,掃描控制線路2173上的掃描信號為可能來自目標(biāo)系統(tǒng)2120的數(shù)據(jù)對數(shù)據(jù)總線2132進行取樣操作。在下一個時序周期中,掃描控制線路2173上的掃描信號為可能來自一個可能被連接在那里的外部輸入/輸出設(shè)備的數(shù)據(jù)對數(shù)據(jù)總線2136進行取樣操作。在下一個時序周期中,數(shù)據(jù)總線2137被取樣,等等,所以協(xié)同校驗系統(tǒng)2140在這個調(diào)試期間能接收并處理來自目標(biāo)系統(tǒng)2120或外部輸入/輸出設(shè)備的所有接腳分布數(shù)據(jù)。由協(xié)同校驗系統(tǒng)2140從取樣數(shù)據(jù)總線2132、2136、2137和2138的過程中收到的任何數(shù)據(jù)都被經(jīng)由外部輸入/輸出控制器2152傳輸?shù)酵獠烤彌_器2154。注意,圖69中的配置假設(shè)目標(biāo)系統(tǒng)2120包含主CPU,而且用戶設(shè)計是一些外設(shè),例如一個視頻控制器、網(wǎng)絡(luò)適配器、圖形適配器、鼠標(biāo)或一些其他的支持設(shè)備、卡或邏輯電路。因此,目標(biāo)系統(tǒng)2120包含連接到主PCI總線2129的目標(biāo)應(yīng)用程序(包括操作系統(tǒng)),而且協(xié)同校驗系統(tǒng)2140包含用戶設(shè)計,且被連接到次級PCI總線2132。根據(jù)用戶設(shè)計的主題,該配置可能是完全不同的。舉例來說,如果用戶設(shè)計是一個CPU,目標(biāo)應(yīng)用程序會在協(xié)同校驗系統(tǒng)2140的RCC計算系統(tǒng)2141中運行,而目標(biāo)系統(tǒng)2120不再包含中央計算系統(tǒng)2121。實際上,總線2132現(xiàn)在會是一個主PCI總線,而總線2129會是一個次級PCI總線。實際上,用戶設(shè)計并非是支持中央計算系統(tǒng)2121的外設(shè),相反,用戶設(shè)計當(dāng)前是主計算中心,而所有的其他外設(shè)都支持用戶設(shè)計。為外部接口(外部輸入/輸出擴展器2139)和協(xié)同校驗系統(tǒng)2140之間的傳輸數(shù)據(jù)的控制邏輯位于每個電路板2145-2149中??刂七壿嫷闹饕糠治挥谕獠枯斎?輸出控制器2152中,但是其他部分位于各種內(nèi)部輸入/輸出控制器(舉例來說,2156和2158)以及可重新配置的邏輯元件中(舉例來說,F(xiàn)PGA芯片2159和2165)。為實現(xiàn)說明的目的,有必要僅顯示這個控制邏輯的一些部分,而不是所有的電路板中所有芯片相同的重復(fù)邏輯結(jié)構(gòu)。圖69中的虛線2150內(nèi)的協(xié)同校驗系統(tǒng)2140部分包含控制邏輯的一個子集?,F(xiàn)在將參照圖70-73更詳細地討論這個控制邏輯??刂七壿嬤@個特定子集中的部件包括外部輸入/輸出控制器2152、三狀態(tài)緩沖器2179、內(nèi)部輸入/輸出控制器2156(CTRL1)、可重新配置的邏輯元件2157(芯片01,表示電路板1的芯片0),和部分連接到這些部件的各種總線以及部分控制線路。具體而言,圖70舉例說明了用于數(shù)據(jù)輸入周期的控制邏輯部分,其中來自外部接口(外部輸入/輸出擴展器2139)和RCC計算系統(tǒng)2141的數(shù)據(jù)被傳輸?shù)絉CC硬件陣列2190。圖72舉例說明了數(shù)據(jù)輸入周期的時序圖。圖71舉例說明了用于數(shù)據(jù)輸出周期的控制邏輯部分,其中來自RCC硬件陣列2190的數(shù)據(jù)被傳輸?shù)絉CC計算系統(tǒng)2141和外部接口(外部輸入/輸出擴展器2139)。圖73舉例說明了數(shù)據(jù)輸出周期的時序圖。數(shù)據(jù)輸入根據(jù)本發(fā)明一個實施例的數(shù)據(jù)輸入控制邏輯負責(zé)處理從RCC計算系統(tǒng)或外部接口到RCC硬件陣列傳輸?shù)臄?shù)據(jù)。數(shù)據(jù)輸入控制邏輯的一個特定子集2150(見圖69)被顯示在圖70中,而且包括外部輸入/輸出控制器2200、三狀態(tài)緩沖器2202、內(nèi)部輸入/輸出控制器2203、可重新配置的邏輯元件2204和允許在其中進行數(shù)據(jù)傳輸各種總線和控制線路。在這個數(shù)據(jù)輸入實施例中也顯示了外部緩沖器2201。這個子集舉例說明了數(shù)據(jù)輸入運行所必需的邏輯,其中來自外部接口和RCC計算系統(tǒng)的數(shù)據(jù)被傳輸?shù)絉CC硬件陣列。圖70數(shù)據(jù)輸入控制邏輯和圖72的數(shù)據(jù)輸入時序圖將會在一起得到討論。數(shù)據(jù)周期的兩種類型在本發(fā)明的這個數(shù)據(jù)輸入實施例中得到使用——一個全局周期和一個軟件到硬件(S2H)周期。全局周期被用于任何指向RCC硬件陣列中的所有芯片的數(shù)據(jù),例如時鐘、重新設(shè)置和一些其他被指向RCC硬件陣列中的許多不同節(jié)點的S2H數(shù)據(jù)。對于這些后者的″全局″S2H數(shù)據(jù),更可行的方法時經(jīng)由全局周期將這些數(shù)據(jù)送出去,而不是經(jīng)由后續(xù)S2H數(shù)據(jù)。軟件到硬件周期被用來在所有的電路板中從一個芯片到另一個芯片以順序的方式將數(shù)據(jù)從RCC計算系統(tǒng)中的測試平臺處理,發(fā)送給RCC硬件陣列。因為用戶設(shè)計的硬件模型被分布在幾個電路板上,測試平臺數(shù)據(jù)必須被提供到每個芯片以便進行數(shù)據(jù)估算。因此,數(shù)據(jù)被以順序的方式傳輸?shù)矫總€芯片中的每個內(nèi)部節(jié)點,一次傳輸?shù)揭粋€內(nèi)部節(jié)點。后續(xù)的傳輸允許一個被指定給一特定內(nèi)部節(jié)點的特定數(shù)據(jù)被RCC硬件陣列中的所有芯片處理,因為硬件模型被分布在多個芯片之中。對于該數(shù)據(jù)估算而言,協(xié)同校驗提供兩個地址空間-S2H和CLK。如上文所述,S2H和CLK空間是從內(nèi)核到硬件模型的主輸入。硬件模型實質(zhì)上保持用戶電路設(shè)計的所有寄存器部件和組合部件。此外,軟件時鐘被模型化在軟件中,且被提供在CLK輸入/輸出地址空間中,以便與硬件模型連接。內(nèi)核推動模擬時間,尋找有效的測試平臺部件,且估算時鐘部件。當(dāng)任何時鐘邊緣被內(nèi)核偵測到的時候,寄存器和存儲器被更新,而且值通過組合部件被傳播。因此,如果硬件加速模式被選中,在這些空間中的任何值改變都將觸發(fā)硬件模型改變邏輯狀態(tài)。在數(shù)據(jù)傳輸時,DATA_XSFR信號處于邏輯″1″。在這個期間,局部總線2222-2230將被協(xié)同校驗系統(tǒng)用來根據(jù)下列數(shù)據(jù)周期傳輸數(shù)據(jù)(1)從RCC計算系統(tǒng)到RCC硬件陣列和CLK空間的全局?jǐn)?shù)據(jù);(2)從外部接口到RCC硬件陣列和外部緩沖器的全局?jǐn)?shù)據(jù);和(3)從RCC計算系統(tǒng)到RCC硬件陣列的S2H數(shù)據(jù),在每個電路板中,一次一個芯片。因此,最初兩個數(shù)據(jù)周期是全局周期的部分,而最后一個數(shù)據(jù)周期是S2H周期的部分。對于數(shù)據(jù)輸入全局周期的第一個部分(其中來自RCC計算系統(tǒng)的全局?jǐn)?shù)據(jù)被發(fā)送去RCC硬件陣列)而言,外部輸入/輸出控制器2200使2255線路上的一個CPU_IN信號變?yōu)檫壿嫛?″。線路2255被連接到三狀態(tài)緩沖器2202的一個啟動輸入端。通過線路2255上的邏輯″1″,三狀態(tài)緩沖器2202允許局部總線2222上的數(shù)據(jù)傳給三狀態(tài)緩沖器2202另一側(cè)的局部總線2223-2230。在這個特定例子中,局部總線2223、2224、2225、2226、2227、2228、2229,和2230分別對應(yīng)于LD3、LD4(來自外部輸入/輸出控制器2200)、LD6(來自外部輸入/輸出控制器2200)、LD1、LD6、LD4、LD5和LD7。全局?jǐn)?shù)據(jù)從這些局部總線傳輸?shù)絻?nèi)部輸入/輸出控制器2203中的總線線路2231-2235,然后再到FD總線線路2236-2240。在這個例子中,F(xiàn)D總線線路2236、2237、2238、2239,和2240分別對應(yīng)于FD總線線路FD1、FD6、FD4、FD5和FD7。這些FD總線線路2236-2240被連接到可重新配置的邏輯元件2204中的鎖存器2208-2213的輸入端。在這個例子中,可重新配置的邏輯元件對應(yīng)于芯片0_1(也就是,電路板1中的芯片0)。同時,F(xiàn)D總線線路2236被連接到鎖存器2208,F(xiàn)D總線線路2237被連接到鎖存器2209和2211,F(xiàn)D總線線路2238被連接到鎖存器2210,F(xiàn)D總線線路2239被連接到鎖存器2212,F(xiàn)D總線線路2240被連接到鎖存器2213。這些鎖存器2208-2213的每一個的啟動輸入被連接到一些全局指示器和軟件到硬件(S2H)指示器。鎖存器2208-2211的啟動輸入被連接到全局指示器,而鎖存器2212-2213的啟動輸入被連接到S2H指示器。一些示范性全局指示器包括線路2241上的GLB_PTR0、線路2242上的GLB_PTR1、線路2243上的GLB_PTR2,和線路2244上的GLB_PTR3。一些示范性S2H指示器包括線路2245上的S2H_PTR0和線路2246上的S2H_PTR1。因為這些鎖存器的啟動輸入被連接到這些指示器,所以鎖存器在沒有各自的正確指示器信號時,不能將數(shù)據(jù)鎖存到用戶設(shè)計的硬件模型中它們打算鎖存的目的地節(jié)點。這些全局和S2H指示器信號由一個數(shù)據(jù)輸入指示器狀態(tài)機2214在輸出2254上產(chǎn)生。數(shù)據(jù)輸入指示器狀態(tài)機2214由線路2253上的DATA_XSFR和F_WR信號所控制。內(nèi)部輸入/輸出控制器2203在線路2253上產(chǎn)生DATA_XSFR和F_WR信號。每當(dāng)RCC硬件陣列和RCC計算系統(tǒng)或者和外部接口之間需要數(shù)據(jù)傳輸時,DATA_XSFR總是處于邏輯″1″。F_WR信號與F_RD信號相反,當(dāng)需要對RCC硬件陣列進行一個寫操作時,它處于邏輯″1″。一個經(jīng)由F_RD信號的讀操作需要從RCC硬件陣列到RCC計算系統(tǒng)或外部接口的數(shù)據(jù)傳輸。如果DATA_XSFR和F_WR信號都處于邏輯″1″,數(shù)據(jù)輸入指示器狀態(tài)機能按照適當(dāng)?shù)木幊添樞虍a(chǎn)生合適的全局或S2H指示器信號。這些鎖存器的輸出2247-2252被連接到用戶設(shè)計硬件模型中的各種內(nèi)部節(jié)點。一些這種內(nèi)部節(jié)點對應(yīng)于用戶設(shè)計的輸入接腳分布。用戶設(shè)計有其他內(nèi)部節(jié)點,它們正常情況下不可以經(jīng)由接腳分布來訪問,但是這些非接腳分布內(nèi)部節(jié)點可以實現(xiàn)其他的調(diào)試目的,為需要在用戶設(shè)計中將激勵應(yīng)用到各種內(nèi)部節(jié)點的設(shè)計者提供靈活性,無論它們是否是輸入接腳分布。對于被外部接口應(yīng)用到用戶設(shè)計的精細硬件模型的激勵而言,數(shù)據(jù)輸入邏輯和那些對應(yīng)于輸入接腳分布的內(nèi)部節(jié)點是有關(guān)聯(lián)的。舉例來說,如果用戶設(shè)計是一個CRTC6845視頻控制器,那么一些輸入接腳分布可能如下所述LPSTB-alightpenstrobepin(一個光筆選通接腳)~RESET-lowlevelsignaltoresetthe6845controller(低電平信號以復(fù)位6845控制器)RS-registerselect(寄存器選擇)E-enable(啟動)CLK-clock(時鐘)~CS-Chipselect(芯片選擇)在這個視頻控制器中,其他輸入接腳分布也是可用的?;谂c外部世界連接的輸入接腳分布的數(shù)目,節(jié)點的數(shù)目得到確定,而且因此鎖存器的數(shù)目和指示器的數(shù)目也可以得到確定。被配置在RCC硬件陣列中的一些硬件模型,可能有,舉例來說,三十個分開的鎖存器,它們與每一個GLB_PTR0、GLB_PTR1、GLB_PTR2、GLB_PTR3、S2H-PTR0和S2H_PTR1是相關(guān)的,形成總數(shù)為180的鎖存器(=30X6)。在其他的設(shè)計中,如果需要的話可以使用更多的全局指示器例如GLB_PTR4到GLB_PTR30。同樣地,更多S2H指示器例如S2H_PTR2到S2H_PTR30也可以根據(jù)需要使用。這些指示器和它們對應(yīng)的鎖存器基于每個用戶設(shè)計的硬件模型的需求?;氐綀D70和72,只有當(dāng)鎖存器被用適當(dāng)?shù)娜种甘酒骰騍2H指示器信號啟動時,F(xiàn)D總線線路上的數(shù)據(jù)才設(shè)法進入這些內(nèi)部節(jié)點。否則,這些內(nèi)部節(jié)點得不到FD總線上任何數(shù)據(jù)的驅(qū)動。在CPU_IN=1時序周期的前半周期內(nèi),當(dāng)F_WR處于邏輯″1″時,GLB_PTR0處于邏輯″1″,以便經(jīng)由線路2247驅(qū)動FD1上的數(shù)據(jù)到對應(yīng)的內(nèi)部節(jié)點。如果存在依賴GLB_PTR0啟動的其他鎖存器,這些鎖存器也會鎖存數(shù)據(jù)到它們對應(yīng)的內(nèi)部節(jié)點。在CPU_IN=1時序周期的后個半周期中,F(xiàn)_WR再一次進入邏輯″1″,觸發(fā)GLB_PTR1上升到邏輯″1″。這驅(qū)動FD6上的數(shù)據(jù)到連接到線路2248的內(nèi)部節(jié)點。這也將軟件時鐘信號發(fā)送到線路2223上,以便被鎖存器2205和啟動線路2215上的GLB_PTR1信號鎖存到線路2216上。這個軟件時鐘被傳輸?shù)侥繕?biāo)系統(tǒng)和其他外部輸入/輸出設(shè)備的外部時鐘輸入端。因為GLB_PTR0和GLB_PTR1僅僅被用于數(shù)據(jù)輸入全局周期的第一部分,CPU_IN回到邏輯″0″,而且這就完成了全局?jǐn)?shù)據(jù)從RCC計算系統(tǒng)到RCC硬件陣列的傳輸。現(xiàn)在將討論數(shù)據(jù)輸入全局周期的第二部分,其中來自外部接口的全局?jǐn)?shù)據(jù)被傳輸?shù)絉CC硬件陣列和外部緩沖器。同樣,來自目標(biāo)系統(tǒng)或外部輸入/輸出設(shè)備的、被引向用戶設(shè)計的各種輸入接腳分布信號必須被提供到硬件模型和軟件模型。通過使用適當(dāng)?shù)闹甘酒?,這些數(shù)據(jù)能被傳輸?shù)接布P?,并且被鎖存以便驅(qū)動內(nèi)部節(jié)點。通過首先將它們儲存在外部緩沖器2201中以便稍后由RCC計算系統(tǒng)取回,并更新軟件模型的內(nèi)部狀態(tài),這些數(shù)據(jù)也被傳輸?shù)杰浖P?。CPU_IN當(dāng)前處于邏輯″0″,而且EXT_IN處于邏輯″1″。因此,外部輸入/輸出控制器2200中的三狀態(tài)緩沖器2206被啟動,以便將數(shù)據(jù)放在PCI總線線路上(例如總線線路2217和2218)。這些PCI總線線路也被連接至FD總線線路2219,以便儲存到外部緩沖器2201中。在EXT_IN信號處于邏輯″1″的時序周期的前半周期中,GLB_PTR2處于邏輯″1″。這將鎖存在FD4上的數(shù)據(jù)(經(jīng)由總線線路2217、2224,和局部總線線路2228(LD4)),這些數(shù)據(jù)將被鎖存到連接到線路2249上的硬件模型中的內(nèi)部節(jié)點。在EXT_IN信號處于邏輯″1″的時序周期的后半周期中,GLB_PTR3處于邏輯″1″。這將鎖存FD6上的數(shù)據(jù)(經(jīng)由總線線路2218,2225,和局部總線線路2227(LD6)),這些數(shù)據(jù)將被鎖存到連接到線路2250上的硬件模型中的內(nèi)部節(jié)點。如上文所述,通過首先將它們儲存在緩沖器2201中以便稍后由RCC計算系統(tǒng)取回并更新軟件模型的內(nèi)部狀態(tài),這些來自目標(biāo)系統(tǒng)或一些其他外部輸入/輸出設(shè)備的數(shù)據(jù)也被傳輸?shù)杰浖P汀?偩€線路2217和2218上的這些數(shù)據(jù)在FD總線FD[630]2219上被提供給外部緩沖器2201。在外部緩沖器2201中儲存每個數(shù)據(jù)的特定存儲器地址由存儲器地址計數(shù)器2207經(jīng)由總線2220提供到外部緩沖器2201。為了實現(xiàn)這些儲存,WR_EXT_BUF信號被經(jīng)由線路2221提供到外部緩沖器2201。在外部緩沖器2201充滿之前,RCC計算系統(tǒng)將會讀外部緩沖器2201的內(nèi)容,以便對軟件模型進行適當(dāng)?shù)母隆T赗CC硬件陣列中被傳輸?shù)接布P偷母鞣N內(nèi)部節(jié)點的任何數(shù)據(jù)將可能導(dǎo)致硬件模型的一些內(nèi)部狀態(tài)改變。因為RCC計算系統(tǒng)在軟件中具有整個用戶設(shè)計的模型,這些在硬件模型中的內(nèi)部狀態(tài)變化也應(yīng)該在軟件模型中得到反映。這就完成了數(shù)據(jù)輸入的全局周期?,F(xiàn)在將討論S2H周期。S2H周期被用來從RCC計算系統(tǒng)到RCC硬件陣列傳輸測試平臺數(shù)據(jù),然后按序列為每個電路板從一個芯片向另一個芯片傳輸那個數(shù)據(jù)。CPU_IN信號進入邏輯″1″,而EXT_IN信號進入邏輯″0″,表明數(shù)據(jù)傳輸是在RCC計算系統(tǒng)和RCC硬件陣列之間進行。不涉及外部接口。CPU_IN信號也啟動三狀態(tài)緩沖器2202,以便允許數(shù)據(jù)從局部總線2222進入內(nèi)部輸入/輸出控制器2203。在CPU_IN=1時序周期的開始處,S2H_PTR0進入邏輯″1″,它可以鎖存FD5上的數(shù)據(jù)(經(jīng)由局部總線2222、局部總線2229、總線線路2234,以及FD總線2239),這些數(shù)據(jù)將被鎖存到連接到線路2251上的硬件模型中的內(nèi)部節(jié)點。在CPU_IN=1時序周期的第二部分中,S2H_PTR1進入邏輯″1″,它可以鎖存在FD7上的數(shù)據(jù)(經(jīng)由局部總線2222、局部總線2230、總線線路2235,以及FD總線2240),這些數(shù)據(jù)將被鎖存到連接到線路2252上的硬件模型中的內(nèi)部節(jié)點。在后續(xù)數(shù)據(jù)估算期間,來自RCC計算系統(tǒng)的數(shù)據(jù)被首先傳輸?shù)叫酒琺1,然后到芯片0_1(也就是,電路板1上的芯片0),芯片1_1(也就是,電路板1上的芯片1),直到最后一個電路板上的最后一個芯片,芯片7_8.(也就是,電路板8上的芯片7)。如果芯片m2是可用的,數(shù)據(jù)也被移進這個芯片。在這個數(shù)據(jù)傳輸結(jié)束的時候,DATA_XSFR返回邏輯″0″。注意,來自外部接口輸入/輸出的數(shù)據(jù)被當(dāng)作全局?jǐn)?shù)據(jù),并在全局周期期間得到處理。這就完成了數(shù)據(jù)輸入控制邏輯和數(shù)據(jù)輸入周期的討論。數(shù)據(jù)輸出現(xiàn)在討論本發(fā)明的數(shù)據(jù)輸出控制邏輯實施例。根據(jù)本發(fā)明實施例的數(shù)據(jù)輸出控制邏輯負責(zé)處理從RCC硬件陣列被傳輸?shù)絉CC計算系統(tǒng)和外部接口的數(shù)據(jù)。在響應(yīng)激勵(外部或其它的)處理數(shù)據(jù)的期間,硬件模型產(chǎn)生某種輸出目標(biāo)應(yīng)用程序或一些輸入/輸出設(shè)備可能需要的數(shù)據(jù)。這些輸出數(shù)據(jù)可能是實質(zhì)的數(shù)據(jù)、地址、控制信息或其他應(yīng)用程序或設(shè)備可能在自身處理中需要的其他有關(guān)信息。進入RCC計算系統(tǒng)(它在軟件中可能有其他外部輸入/輸出設(shè)備的模型)、目標(biāo)系統(tǒng)或外部輸入/輸出設(shè)備的這些輸出數(shù)據(jù)被提供在各種內(nèi)部節(jié)點上。如上文關(guān)于數(shù)據(jù)輸入邏輯的討論的那樣,一些這種內(nèi)部節(jié)點對應(yīng)于用戶設(shè)計的輸出接腳分布。用戶設(shè)計有其他的內(nèi)部節(jié)點,它們正常是不能經(jīng)由接腳分布來訪問的,但是這些非接腳分布的內(nèi)部節(jié)點針對其他的調(diào)試目的,以便為設(shè)計者提供靈活性,他們希望在用戶設(shè)計中的各種內(nèi)部節(jié)點讀并且分析激勵,不管它們是否是輸出接腳分布。對于來自用戶設(shè)計的精細硬件模型、被應(yīng)用到外部接口或RCC計算系統(tǒng)(它可能在軟件中有其他輸入/輸出設(shè)備的模型)得激勵而言,數(shù)據(jù)輸出邏輯和對應(yīng)于輸出引出腳的那些內(nèi)部節(jié)點是有關(guān)聯(lián)的。舉例來說,如果用戶設(shè)計是一個CRTC6845視頻控制器,一些輸出接腳分布可能如下MA0-MA13-memoryaddress(存儲器地址)D0-D7-databus(數(shù)據(jù)總線)DE-displayenable(顯示啟動)CURSOR-cursorposition(光標(biāo)位置)VS-verticalsynchronization(垂直同步)HS-horizontalsynchronization(水平同步)在這個視頻控制器中的其他輸出引出腳也是可用的。基于與外部世界連接的輸出接腳分布的數(shù)目,節(jié)點的數(shù)目以及門控邏輯的數(shù)目和指示器數(shù)目也能得到容易的確定。因此,視頻控制器上的輸出接腳分布MA0-MA13為視頻RAM提供存儲器地址。VS輸出接腳分布為垂直同步提供信號,并因此引起顯示器上的一個垂直回掃。輸出接腳分布D0-D7是八個終端,它們形成雙向數(shù)據(jù)總線用于目標(biāo)系統(tǒng)中CPU訪問內(nèi)部6845寄存器。這些輸出接腳分布對應(yīng)于硬件模型中的某些內(nèi)部節(jié)點。當(dāng)然,這些內(nèi)部節(jié)點的數(shù)目和性質(zhì)根據(jù)用戶設(shè)計而不同。來自這些輸出接腳分布內(nèi)部節(jié)點的數(shù)據(jù)必須被提供到RCC計算系統(tǒng),因為RCC計算系統(tǒng)在軟件中包含整個用戶設(shè)計的一個模型,而且在硬件模型中發(fā)生的任何事件都必須被傳遞到軟件模型,以便作出相應(yīng)的變化。這樣,軟件模型將具有與硬件模型一致的信息。此外,RCC計算系統(tǒng)可能有輸入/輸出設(shè)備的設(shè)備模型,用戶或設(shè)計者決定將這些設(shè)備模型化在軟件中,而不是將一個真實設(shè)備連結(jié)到外部輸入/輸出擴展器上的端口之一。舉例來說,用戶可能作出決定,認為將顯示器或揚聲器模型化在軟件中要比在外部輸入/輸出擴展器上的端口之一插入一個真實的顯示器或揚聲器更容易、且更有效。此外,來自硬件模型中的這些內(nèi)部節(jié)點的數(shù)據(jù)必須被提供到目標(biāo)系統(tǒng)和任何其他外部輸入/輸出設(shè)備。為了讓這些輸出接腳分布內(nèi)部節(jié)點中的數(shù)據(jù)被傳輸?shù)絉CC計算系統(tǒng)和目標(biāo)系統(tǒng)以及其他的外部輸入/輸出設(shè)備,根據(jù)本發(fā)明一個實施例的數(shù)據(jù)輸出控制邏輯被提供在協(xié)同校驗系統(tǒng)中。數(shù)據(jù)輸出控制邏輯使用數(shù)據(jù)輸出周期,該周期涉及從RCC硬件陣列2190到RCC計算系統(tǒng)2141以及外部接口(外部輸入/輸出擴展器2139)的數(shù)據(jù)傳輸。在圖69中,用于在外部接口(外部輸入/輸出擴展器2139)和協(xié)同校驗系統(tǒng)2140之間傳輸數(shù)據(jù)的控制邏輯存在于每個電路板2145-2149中??刂七壿嫷闹饕糠执嬖谟谕獠枯斎?輸出控制器2152中,但是其他部分存在于各種內(nèi)部輸入/輸出控制器(舉例來說,2156和2158)和可重新配置的邏輯元件中(舉例來說,F(xiàn)PGA芯片2159和2165)。同樣,為了說明的目的,在所有的電路板中為所有的芯片只展現(xiàn)這個控制邏輯的一些部分,而不是相同的重復(fù)邏輯結(jié)構(gòu)。圖69中虛線2150里面的協(xié)同校驗系統(tǒng)2140部分包含控制邏輯的一個子集?,F(xiàn)在將參照圖71和73詳細討論這個控制邏輯。圖71舉例說明了用于數(shù)據(jù)輸出周期的控制邏輯部分。圖73舉例說明了數(shù)據(jù)輸出周期的時序圖。數(shù)據(jù)輸出控制邏輯的一個特定子集被顯示在圖71中,并且包括外部輸入/輸出控制器2300、三狀態(tài)緩沖器2301、內(nèi)部輸入/輸出控制器2302、一個可重新配置的邏輯元件2303,以及允許數(shù)據(jù)在其間傳輸?shù)母鞣N總線和控制線路。這個子集顯示了用于數(shù)據(jù)輸出運行必需的邏輯,其中來自外部接口和RCC計算系統(tǒng)的數(shù)據(jù)被傳輸?shù)絉CC硬件陣列。圖71的數(shù)據(jù)輸出控制邏輯和圖73的數(shù)據(jù)輸出時序圖將在一起得到討論。與數(shù)據(jù)輸入周期的二周期類型相反,數(shù)據(jù)輸出周期只包括一個類型的周期。數(shù)據(jù)輸出控制邏輯需要來自RCC硬件模型的數(shù)據(jù)被順序傳輸?shù)?1)RCC計算系統(tǒng),然后到(2)RCC計算系統(tǒng)和外部接口(到目標(biāo)系統(tǒng)和外部輸入/輸出設(shè)備)。具體而言,數(shù)據(jù)輸出周期需要在RCC硬件陣列中來自硬件模型內(nèi)部節(jié)點的數(shù)據(jù)首先被傳輸?shù)絉CC計算系統(tǒng),然后到RCC計算系統(tǒng),其次到每個芯片內(nèi)的外部接口,在每個電路板中,一次一個芯片,而且一次一個電路板。如同數(shù)據(jù)輸入控制邏輯一樣,指示器將被用來從內(nèi)部節(jié)點到RCC計算系統(tǒng)和外部接口來選擇(或門控)數(shù)據(jù)。在圖71和73中舉例說明的一個實施例中,一個數(shù)據(jù)輸出指示器狀態(tài)機2319在總線2359上產(chǎn)生五個指示器H2S_PTR[40],既用于硬件到軟件數(shù)據(jù),也用于硬件到外部接口數(shù)據(jù)。數(shù)據(jù)輸出指示器狀態(tài)機2319由線路2358上的DATA_XSFR和F_RD信號控制。內(nèi)部輸入/輸出控制器2302產(chǎn)生線路2358上的DATA_XSFR和F_RD信號。只要RCC硬件陣列和RCC計算系統(tǒng)或外部接口之間需要數(shù)據(jù)傳輸時,DATA_XSFR總是處于邏輯″1″。F_RD信號與F_WR信號相反,只要需要從RCC硬件陣列進行讀操作,它就處于邏輯“1″。如果DATA_XSFR和F_RD信號都處于邏輯″1″,數(shù)據(jù)輸出指示器狀態(tài)機2319就能在適當(dāng)?shù)木幊绦蛄兄挟a(chǎn)生適當(dāng)?shù)腍2S指示器信號。其他的實施例可能因為用戶設(shè)計的需要而使用較多的指示器(或較少的指示器)。這些H2S指示器信號被提供到一個門控邏輯。門控邏輯的一組輸入2353-2357被指向一些“與”門2314-2318。另一組輸入2348-2352被連接到硬件模型的內(nèi)部節(jié)點。因此,“與”門2314具有來自一個內(nèi)部節(jié)點的輸入2348,和來自H2S_PTR0的輸入2353;“與”門2315具有來自一個內(nèi)部節(jié)點的輸入2349和來自H2S_PTR1的輸入2354;“與”門2316具有來自一個內(nèi)部節(jié)點的輸入2350和來自H2S_PTR2的輸入2355;“與”門2317具有來自一個內(nèi)部節(jié)點的輸入235和來自H2S_TR3的輸入2356;“與”門2318具有來自一個內(nèi)部節(jié)點的輸入2352和來自H2S_PTR4的輸入2357。沒有正確的H2S_PTR指示器信號,內(nèi)部節(jié)點就不能被驅(qū)動到RCC計算系統(tǒng)或外部接口。這些“與”門2314-2318的各自輸出2343-2347被連接到“或”門2310-2313。因此,“與”門輸出2343被連接到“或”門2310的輸入;“與”門輸出2344被連接到“或”門2311的輸入;“與”門輸出2345被連接到“或”門2311的輸入;“與”門輸出2346被連接到“或”門2312的輸入;“與”門輸出2347被連接到“或”門2313的輸入。注意,“與”門2315的輸出2344不被連接到一個獨享的“或”門;相反,輸出2344被連接到“或”門2311,2311同時也被連接到“與”門2316的輸出2345?!盎颉遍T2310-2313的其它輸入2360-2366能被連接到其他的“與”門的輸出(未顯示),這些“與”門自己被連接到其他內(nèi)部節(jié)點和H2S_PTR指示器。這些“或”門和它們的特定輸入的使用以用戶設(shè)計和被配置的硬件模型為基礎(chǔ)。因此,在其他的設(shè)計中,可能使用較多的指示器,而且來自“與”門2315的輸出2344被連接到一個不同的“或”門,而不是“或”門2311。“或”門2310-2313的輸出2339-2342被連接到FD總線線路FD0、FD3、FD1和FD4。在用戶設(shè)計的這個特定例子中,只有四個輸出接腳分布信號將被傳輸?shù)絉CC計算系統(tǒng)和外部接口。因此,F(xiàn)D0被連接到“或”門2310的輸出;FD3被連接到“或”門2311的輸出;FD1被連接到“或”門2312的輸出;FD4被連接到“或”門2313的輸出。這些FD總線線路經(jīng)由內(nèi)部輸入/輸出控制器2302中的內(nèi)部線路2334-2338被連接到局部總線線路2330-2333。在這個實施例中,局部總線線路2330是LD0,局部總線線路2331是LD3,局部總線線路2332是LD1,局部總線線路2333是LD4。為了實現(xiàn)將這些局部總線線路2330-2333上的數(shù)據(jù)傳輸?shù)絉CC計算系統(tǒng),這些局部總線線路被連接到三狀態(tài)緩沖器2301。在它的正常狀態(tài)中,三狀態(tài)緩沖器2301允許數(shù)據(jù)從局部總線線路2330-2333進入到局部總線2320。對比而言,在數(shù)據(jù)輸入期間,只有當(dāng)CPU_IN信號被提供到三狀態(tài)緩沖器2301的時候,數(shù)據(jù)才被允許從RCC計算系統(tǒng)通過到RCC硬件陣列。為了使這些局部總線線路2330-2333上的數(shù)據(jù)被傳輸?shù)酵獠拷涌?,這里提供了線路2321-2324。線路2321被連接到線路2330和外部輸入/輸出控制器2300中的一些鎖存器(未顯示);線路2322被連接到線路2331和外部輸入/輸出控制器2300中的一些鎖存器(未顯示);線路2323被連接到線路2332和外部輸入/輸出控制器2300中的鎖存器2305;線路2324被連接到線路2333和外部輸入/輸出個控制器2300中的鎖存器2306。這些鎖存器2305和2306的每個輸出都被連接到一個緩沖器,接著到外部接口,然后被連接到目標(biāo)系統(tǒng)或外部輸入/輸出設(shè)備的適當(dāng)輸出接腳分布。因此,鎖存器2305的輸出被連接到緩沖器2307和線路2327。同樣,鎖存器2306的輸出被連接到緩沖器2308和線路2328。另外一個鎖存器(未顯示)的另外一個輸出可以被連接到線路2329。在這個例子中,線路2327-2329分別相應(yīng)目標(biāo)系統(tǒng)或某外部輸入/輸出設(shè)備的導(dǎo)線1、導(dǎo)線4和導(dǎo)線3。最終,在一個數(shù)據(jù)從硬件模型到外部接口進行傳輸期間,用戶設(shè)計的硬件模型得到配置,以便連接到線路2350的內(nèi)部節(jié)點對應(yīng)線路2329上的導(dǎo)線3,連接到線路2351的內(nèi)部節(jié)點對應(yīng)于線路2327上的導(dǎo)線1,而且連接到線路2352的內(nèi)部節(jié)點對應(yīng)于線路2328上的導(dǎo)線4。同樣,導(dǎo)線3對應(yīng)于線路2331上的LD3,導(dǎo)線1對應(yīng)于線路2332上的LD1,而且導(dǎo)線4對應(yīng)于線路2333上的LD4。一個LUT表2309被連接到這些鎖存器2305和2306的啟動輸入。LUT表2309由線路2367上觸發(fā)LUT表地址計數(shù)器2304運行的F_RD信號所控制。在每個計數(shù)器增量處,指示器在LUT表2309中啟動一個特定的行。如果該特定行中的一項(或比特)處于邏輯″1″,連接到LUT表2309中那個特定項的LUT輸出線路將啟動它的對應(yīng)鎖存器,并驅(qū)動數(shù)據(jù)進入外部接口,且最終進入目標(biāo)系統(tǒng)或某外部輸入/輸出設(shè)備中的所需目的地。舉例來說,LUT輸出線路2325被連接到鎖存器2305的啟動輸入,而且LUT輸出線路2326被連接到鎖存器2306的啟動輸入。在這個例子中,LUT表2309的行0-3被編程來啟動對應(yīng)于芯片m1中的內(nèi)部節(jié)點輸出接腳分布導(dǎo)線的鎖存器。同樣,行4-6被編程來啟動對應(yīng)于芯片0_1(也就是,電路板1中的芯片0)中的內(nèi)部節(jié)點輸出接腳分布導(dǎo)線的鎖存器。在行4中,比特3處于邏輯″1″。在行5中,比特1處于邏輯″1″。在行6中,比特4處于邏輯″1″。所有其他項目或比特位都處于邏輯″0″。因為一個單一輸出接腳分布線路不能驅(qū)動多重輸入/輸出設(shè)備,所以對LUT表中任何給定比特位(或列)而言,只有一項處于邏輯″1″。換句話說,硬件模型中的一個輸出接腳分布內(nèi)部節(jié)點只能為連接到外部接口的一個單一線路提供數(shù)據(jù)。如上文所述,數(shù)據(jù)輸出控制邏輯需要RCC硬件模型中的每個芯片中的每個可重新配置的邏輯元件中的數(shù)據(jù)被順序傳輸?shù)?1)RCC計算系統(tǒng),然后到(2)RCC計算系統(tǒng)和外部接口(到目標(biāo)系統(tǒng)和外部輸入/輸出設(shè)備)。RCC計算系統(tǒng)需要這些數(shù)據(jù),因為它在軟件中具有一些輸入/輸出設(shè)備的模型,而且對那些沒被用于這些模型化的輸入/輸出設(shè)備之一的數(shù)據(jù)而言,RCC計算系統(tǒng)需要監(jiān)測它們,以便其內(nèi)部狀態(tài)與RCC硬件陣列中的硬件模型的狀態(tài)是一致的。在圖71和73中舉例說明的這個例子中,只有七個內(nèi)部節(jié)點將被驅(qū)動,用于輸出到RCC計算系統(tǒng)和外部接口。那些內(nèi)部節(jié)點中的二個節(jié)點位于芯片m1中,其他五個內(nèi)部節(jié)點位于芯片0_1中(也就是,電路板1中的芯片0)。當(dāng)然,對這個特定的用戶設(shè)計而言,可能需要在這些芯片和其他芯片中的其他內(nèi)部節(jié)點,但圖71和73將只舉例說明這七個節(jié)點。在數(shù)據(jù)傳輸期間,DATA_XSFR信號處于邏輯″1″。在這個期間,局部總線2330-2333將被協(xié)同校驗系統(tǒng)用來將來自RCC硬件陣列中每個電路板中的每個芯片的數(shù)據(jù)順序傳輸?shù)絉CC計算系統(tǒng)和外部接口。DATA_XSFR和F_RD信號控制數(shù)據(jù)輸出指示器狀態(tài)機的運行,以便產(chǎn)生適當(dāng)?shù)闹甘酒餍盘朒2S_PTR[40]輸出接腳分布內(nèi)部節(jié)點的適當(dāng)門電路。F_RD信號也控制LUT表地址計數(shù)器2304,以便將內(nèi)部節(jié)點數(shù)據(jù)傳輸?shù)酵獠拷涌?。芯片m1中的內(nèi)部節(jié)點將首先得到處理。當(dāng)F_RD在數(shù)據(jù)傳輸周期開始時升到邏輯″1″的時候,芯片m1中的H2S_PTR0進入邏輯″1″。這經(jīng)由三狀態(tài)緩沖器2301和局部總線2320驅(qū)動芯片m1中的那些內(nèi)部節(jié)點中的、取決于H2S_PTR0的數(shù)據(jù)進入RCC計算系統(tǒng)中。LUT表地址計數(shù)器2304對LUT表2309列0進行計數(shù)和指向,以便將芯片m1的適當(dāng)數(shù)據(jù)鎖存到外部接口。當(dāng)F_RD信號再一次進入邏輯″1″的時候,內(nèi)部節(jié)點中能被H2S_PTR1驅(qū)動的數(shù)據(jù)被傳輸?shù)絉CC計算系統(tǒng)和外部接口。H2S_PTR1進入邏輯″1″,并且對應(yīng)于第二F_RD信號,LUT表地址計數(shù)器2304對LUT表2309列1進行計數(shù)和指向,以便將芯片m1的適當(dāng)數(shù)據(jù)鎖存到外部接口。可重新配置的邏輯元件2303(也就是,芯片0_1,或電路板1中的芯片0)的五個內(nèi)部節(jié)點現(xiàn)在將得到處理。在這個例子中,來自與H2S_PTR0和H2SPTR1有關(guān)的兩個內(nèi)部節(jié)點的數(shù)據(jù)將只被傳輸?shù)絉CC計算系統(tǒng)。來自與H2S_PTR2,H2S_PTR3和H2S_PTR4有關(guān)的三個內(nèi)部節(jié)點的數(shù)據(jù)將被傳輸?shù)絉CC計算系統(tǒng)和外部接口。當(dāng)F_RD升到邏輯″1″的時候,芯片2303中的H2S_PTR0進入邏輯″1″。這驅(qū)動芯片2303中的內(nèi)部節(jié)點里取決于H2S_PTR0的數(shù)據(jù),使其經(jīng)由三狀態(tài)緩沖器2301和局部總線2320進入RCC計算系統(tǒng)。在這個例子中,連接到線路2348的內(nèi)部節(jié)點取決于線路2353上的H2S_PTR0。當(dāng)F_RD信號再一次進入邏輯″1″的時候,內(nèi)部節(jié)點中能被H2S_PTR1驅(qū)動的數(shù)據(jù)被傳輸?shù)絉CC計算系統(tǒng)。這里,連接到線路2349上的內(nèi)部節(jié)點受到影響。這個數(shù)據(jù)被驅(qū)動去線路2331和2322上的LD3。當(dāng)F_RD信號再一次進入邏輯″1″的時候,H2S_PTR2進入邏輯″1″,而且在被連接到線路2350的內(nèi)部節(jié)點里的數(shù)據(jù)被提供到LD3上。這個數(shù)據(jù)被提供到RCC計算系統(tǒng)和外部接口。三狀態(tài)緩沖器2301允許數(shù)據(jù)傳輸?shù)骄植靠偩€2320,然后進入RCC計算系統(tǒng)之內(nèi)。至于外部接口,通過啟動H2S_PTR2信號,這個數(shù)據(jù)被驅(qū)動到在線路2331和2322上的LD3。響應(yīng)于F_RD信號,LUT表地址計數(shù)器2304計數(shù)并指向LUT表2309的列4,以便將適當(dāng)?shù)臄?shù)據(jù)從這個連接到線路2350上的內(nèi)部節(jié)點鎖存到位于外部接口的線路2329(導(dǎo)線3)。當(dāng)F_RD信號再一次進入邏輯″1″的時候,H2S_PTR3進入邏輯″1″,而且在被連接到線路2351的內(nèi)部節(jié)點里的數(shù)據(jù)被提供到LD1上。這個數(shù)據(jù)被提供到RCC計算系統(tǒng)和外部接口。三狀態(tài)緩沖器2301允許數(shù)據(jù)傳輸?shù)骄植靠偩€2320,然后進入RCC計算系統(tǒng)之內(nèi)。至于外部接口,通過啟動H2S_PTR3信號,這個數(shù)據(jù)被驅(qū)動到線路2332和2323上的LD1。響應(yīng)于F_RD信號,LUT表地址計數(shù)器2304計數(shù)并指向LUT表2309的列5,以便將適當(dāng)?shù)臄?shù)據(jù)從這個連接到線路2351上的內(nèi)部節(jié)點鎖存到位于外部接口的線路2327(導(dǎo)線1)。當(dāng)F_RD信號再一次進入邏輯″1″的時候,H2S_PTR4進入邏輯″1″,而且在被連接到線路2352的內(nèi)部節(jié)點里的數(shù)據(jù)被提供到LD4上。這個數(shù)據(jù)被提供到RCC計算系統(tǒng)和外部接口。三狀態(tài)緩沖器2301允許數(shù)據(jù)傳輸?shù)骄植靠偩€2320,然后進入RCC計算系統(tǒng)之內(nèi)。至于外部接口,通過啟動H2S_PTR4信號,這個數(shù)據(jù)在線路2333和2324上被驅(qū)動到LD4。對響應(yīng)于FRD信號,LUT表地址計數(shù)器2304計數(shù)并指向LUT表2309的列6,以便將適當(dāng)?shù)臄?shù)據(jù)從這個連接到線路2352上的內(nèi)部節(jié)點鎖存到位于外部接口的線路2328(導(dǎo)線4)。將芯片m1的內(nèi)部節(jié)點中的數(shù)據(jù)首先驅(qū)動到RCC計算系統(tǒng)然后到RCC計算系統(tǒng)和外部接口的這個過程在其他芯片上以順序方式繼續(xù)進行。首先,芯片m1的內(nèi)部節(jié)點受到驅(qū)動。其次,芯片0_1(芯片2303)的內(nèi)部節(jié)點受到驅(qū)動。然后,芯片1_1如果有任何的內(nèi)部節(jié)點,將受到驅(qū)動。這個過程繼續(xù)進行,直到最后一個電路板中的最后一個芯片中的最后一個節(jié)點被驅(qū)動。因此,如果芯片7_8有任何的內(nèi)部節(jié)點,它都將受到驅(qū)動。最后,如果芯片m2有任何內(nèi)部節(jié)點,它將受到驅(qū)動。雖然圖71顯示了用來僅在芯片2303中驅(qū)動內(nèi)部節(jié)點的數(shù)據(jù)輸出控制邏輯,但是其他芯片也可能有內(nèi)部節(jié)點需要被驅(qū)動進入RCC計算系統(tǒng)和外部接口。不管內(nèi)部節(jié)點數(shù)目多少,數(shù)據(jù)輸出邏輯將驅(qū)動數(shù)據(jù)從一個芯片內(nèi)部節(jié)點進入RCC計算系統(tǒng),然后在另一個周期,驅(qū)動相同芯片中不同組的內(nèi)部節(jié)點進入RCC計算系統(tǒng)和外部接口。數(shù)據(jù)輸出控制邏輯然后繼續(xù)行進到下一個芯片,并且運行相同兩步操作,即首先驅(qū)動指定到RCC計算系統(tǒng)的數(shù)據(jù),然后驅(qū)動指定到外部接口的數(shù)據(jù)到RCC計算系統(tǒng)和外部接口。即使數(shù)據(jù)將被用于外部接口,RCC計算系統(tǒng)也必須了解那個數(shù)據(jù),因為RCC計算系統(tǒng)在軟件中有整個用戶設(shè)計的一個模型,該模型必須具有與RCC硬件陣列中的硬件模型信息一致的內(nèi)部狀態(tài)信息。電路板布局現(xiàn)在將參照圖74討論根據(jù)本發(fā)明的一個實施例的協(xié)同校驗系統(tǒng)的電路布局。電路板被安裝在RCC硬件陣列中。電路板布局類似于圖8、36-44舉例說明以及相關(guān)文本描述的布局。RCC硬件陣列包括六個電路板,在一個實施例中。電路板m1被連接到電路板1,而電路板m2被連接到電路板8。電路板1、電路板2、電路板3和電路板8的連接和安排在上文已經(jīng)參照圖8和36-44得到描述。電路板m1包含芯片m1。電路板m1相關(guān)于其他電路板的互連結(jié)構(gòu)便于芯片m1被連接到電路板1的芯片0、芯片2、芯片4和芯片6的南方向上的互連。類似的情況是,電路板m2包含芯片m2。電路板m2相關(guān)于其他電路板的互連結(jié)構(gòu)便于芯片m2被連接到電路板8的芯片0、芯片2、芯片4和芯片6的南方向上的互連。X.范例為了說明本發(fā)明一個實施例的操作,將使用一個假設(shè)的用戶電路設(shè)計。在結(jié)構(gòu)性寄存器轉(zhuǎn)移電平(RTL)HDL碼中,示范性用戶電路設(shè)計如下所示moduleregister(clock,reset,d,q)(;inputclock,d,reset;outputq;regq;always@(posedgeclockornegedgereset)<!--SIPO<DPn="243">--><dpn="d243"/>if(~reset)q=0;elseq=d;endmodulemoduleexample;wired1,d2,d3;wireq1,q2,q3;regsigin;wiresigout;regclk,reset;registerreg1(clk,reset,d1,q1);registerreg2(clk,reset,d2,q2);registerreg3(clk,reset,d3,q3);assignd1=sigin^q3;assignd2=q1^q3;assignd3=q2^q3;assignsigout=q3;//aclockgeneratoralwaysbeginclk=0;<!--SIPO<DPn="244">--><dpn="d244"/>#5;clk=1;#5;end//asignalgeneratoralwaysbegin#10;sigin=$random;end//initializationinitialbeginreset=0;sigin=0;#1;reset=1;#5;$monitor($time,″%b,%b,″sigin,sigout);#1000$finish;endendmodule這個碼在圖26中被再現(xiàn)。要理解本發(fā)明,不必了解這個電路設(shè)計的特定功能性細節(jié)。然而,讀者應(yīng)該了解,用戶產(chǎn)生這個HDL碼以便設(shè)計一個電路用于模擬。通過這段碼所代表的電路執(zhí)行用戶所設(shè)計的一些功能以便響應(yīng)輸入信號,并產(chǎn)生一個輸出。圖27顯示了參照圖26討論的HDL碼的電路圖。在大部分情形下,在以HDL形式代表之前用戶可能實際上產(chǎn)生這種性質(zhì)的一個電路圖。一些原理圖攫取工具允許輸入圖示性電路圖,而且在處理之后,這些工具產(chǎn)生可使用的碼。如圖28所示,模擬系統(tǒng)執(zhí)行部件類型分析。作為代表用戶特定電路設(shè)計的本來在圖26中呈現(xiàn)的HDL編碼,現(xiàn)在已經(jīng)得到了分析。由″moduleregister(clock,reset,d,q))))″開始,且以″endmodule″為結(jié)束,并進一步標(biāo)記為編號900的最初幾行碼是一個寄存器定義區(qū)段。下幾行碼,編號907,代表了一些導(dǎo)線互連信息。本領(lǐng)域的技術(shù)人員應(yīng)該了解,HDL中的導(dǎo)線變量被用來代表例如門電路之類的結(jié)構(gòu)性實體之間的實際連結(jié)。因為HDL主要被用來模型化數(shù)字電路,因此導(dǎo)線變量是必需的變量。通常,″q″(舉例來說,q1、q2、q3)代表輸出導(dǎo)線線路,而且″d″(舉例來說,d1、d2、d3)代表輸入導(dǎo)線線路。編號908顯示了作為一個測試平臺輸入的″sigin″。編號909顯示了作為一個測試平臺輸出的″sigout″。編號901顯示了寄存器部件S1、S2和S3。編號902顯示了組合部件S4、S5、S6和S7。注意,組合部件S4-S7有輸出變量d1、d2和d3,它們是寄存器部件S1-S3的輸入。編號903顯示了時鐘部件S8。下幾個系列的碼的行號顯示了測試平臺部件。編號904顯示了測試平臺部件(驅(qū)動器)S9。編號905顯示了測試平臺部件(初始化)S10和S11。編號906顯示了測試平臺部件(顯示器)S12。下表概述了部件類型分析基于部件類型分析,系統(tǒng)為整個電路產(chǎn)生一個軟件模型,并為寄存器和組合部件產(chǎn)生一個硬件模型。S1-S3是寄存器部件,而S4-S7是組合部件。這些部件將被模型化在硬件中,以便允許模擬仿真系統(tǒng)的用戶或者在軟件中模擬整個電路,或者在軟件中模擬、并且在硬件中進行選擇性加速。無論在哪一種情況下,用戶都可對模擬和硬件加速模式進行控制。另外,用戶能用一個目標(biāo)系統(tǒng)來仿真電路,同時仍然保留軟件控制,一個循環(huán)接一個循環(huán)啟動、停止、檢查值,和斷言值。圖29顯示了同樣的結(jié)構(gòu)性RTL級HDL碼的一個信號網(wǎng)絡(luò)分析。如圖所示,S8、S9、S10和S11被模型化或提供在軟件中。S9本質(zhì)上是測試平臺程序,它產(chǎn)生sigin信號,而S12本質(zhì)上是測試平臺顯示器過程,它接收sigout信號。在這個例子中,S9產(chǎn)生一個隨機sigin來模擬電路的信號。然而,寄存器S1-S3和組合部件S4-S7被模型化到硬件和軟件中。對于軟件/硬件邊界而言,系統(tǒng)為將被用來連接軟件模型和硬件模型的各種駐留信號(也就是,q1、q2、q3、CLK、sigin、sigout)分配存儲器空間。下表列出了存儲器空間的分配圖30為這個例證性電路設(shè)計顯示了軟件/硬件劃分結(jié)果。圖30是有關(guān)軟件/硬件劃分的一個更可實現(xiàn)的例示圖。軟件端910通過軟件/硬件邊界911和PCI總線913被連接到硬件端912。軟件端910包含軟件內(nèi)核,而且被它控制。一般而言,內(nèi)核是控制全部模擬仿真系統(tǒng)運行的主要控制回路。只要任何測試平臺程序被激活,內(nèi)核就估算有效的測試平臺部件、估算時鐘部件、偵測時鐘邊緣以便更新寄存器和存儲器,并傳播組合邏輯數(shù)據(jù),推動模擬時間。即使內(nèi)核駐留在軟件端,它的一些運行或語句也能在硬件中運行,因為存在一個硬件模型來用于那些語句和運行。因此,軟件控制軟件模型和硬件模型。軟件端910包括用戶電路的整個模型,包括S1-S12。軟件端中的軟件/硬件邊界部分包括輸入/輸出緩沖器或地址空間S2H、CLK、H2S,以及REG。注意,驅(qū)動器測試平臺程序S9被連接到S2H存儲器空間,顯示器測試平臺程序S12被連接到H2S存儲器空間,而時鐘產(chǎn)生器S8被連接到CLK存儲器空間。輸出信號q1-q3的寄存器S1-S3將被指定到REG空間。硬件模型912具有組合部件S4-S7的模型,它駐留在純硬件端。在硬件模型912的軟件/硬件邊界上,sigout、sigin、寄存器輸出q1-q3和軟件時鐘916被實現(xiàn)。除了用戶定制電路設(shè)計的模型以外,系統(tǒng)還產(chǎn)生軟件時鐘和地址指示器。軟件時鐘提供信號來啟動寄存器S1-S3的輸入。如上文所述,根據(jù)本發(fā)明的軟件時鐘避免了競爭狀態(tài)和占用時間擾亂問題。當(dāng)主時鐘在軟件中偵測到時鐘邊緣的時候,偵測邏輯在硬件中觸發(fā)一個對應(yīng)的偵測邏輯。時鐘邊緣寄存器916對寄存器啟動輸入及時地產(chǎn)生一個啟動信號,以便對任何駐留在寄存器輸入端的數(shù)據(jù)進行門控。為了描述和認識的目的,這里也顯示了地址指示器914。地址指示器實際上在每個FPGA芯片中得到實現(xiàn),并且允許數(shù)據(jù)以選擇性和順序性的方式被傳輸?shù)剿哪康牡?。組合部件S4-S7也被連接到寄存器部件S1-S3、sigin,和sigout。這些信號在輸入/輸出總線915上來自或被送達PCI總線913。在映射、布局,和步線步驟之前,一個完全的硬件模型被顯示在圖31中,不包括地址指示器。系統(tǒng)還沒有把模型映射到具體的芯片。寄存器S1-S3被連接到輸入/輸出總線和組合部件S4-S6。組合部件S7僅僅是寄存器S3的輸出q3。sigin、sigout和軟件時鐘920也被模型化。一旦硬件模型被確定了,系統(tǒng)就可以接著將模型進行映射、布局,以及在一個或多個芯片之內(nèi)布線。這個特定例子實際上能在單一AlteraFLEX10K芯片上實現(xiàn),但是為了指導(dǎo)的目的,這個例子將假設(shè)需要兩個芯片來實現(xiàn)這個硬件模型。圖32為這個例子顯示了這個例子的一個具體的硬件模型-芯片劃分結(jié)果。在圖32中,完整的模型(除了輸入/輸出和時鐘邊緣寄存器以外)與被虛線代表的芯片邊界一起顯示。這個結(jié)果由模擬仿真系統(tǒng)的編譯器在最后的配置文件產(chǎn)生之前產(chǎn)生。因此,硬件模型針對導(dǎo)線921、922和923在這兩個芯片之間至少需要三個導(dǎo)線。為了將在這兩個芯片(芯片1和芯片2)之間需要的引腳/導(dǎo)線數(shù)目減到最少,可以產(chǎn)生另一個模型-芯片劃分,或使用一個多路復(fù)用方案。分析圖32中顯示的這個特定劃分結(jié)果,在這兩個芯片之間的導(dǎo)線數(shù)目能被減少到兩個,方法是將sigin導(dǎo)線923從芯片2中移動到芯片1。事實上,圖33顯示了這樣一個劃分結(jié)果。雖然僅從導(dǎo)線數(shù)目上考慮,圖33中的特定劃分似乎比圖32中顯示的劃分更好,但是這個例子將假設(shè)模擬仿真系統(tǒng)在執(zhí)行了映射、布局,和布線之后選擇了圖32的劃分。圖32的劃分結(jié)果將被用來作為產(chǎn)生配置文件的基礎(chǔ)。圖34為同樣的假設(shè)例子顯示了邏輯修補操作,其中顯示了在兩個芯片中的最終實現(xiàn)。該系統(tǒng)使用圖32的劃分結(jié)果來產(chǎn)生配置文件。然而,為了簡便未顯示地址指示器。圖中顯示了兩個FPGA芯片930和940。芯片930包括,用戶電路設(shè)計被劃分的部分,一個TDM單元931(接收器端),軟件時鐘932和輸入/輸出總線933,以及其他部件。芯片940包括用戶電路設(shè)計被劃分的部分,發(fā)送端的TDM單元941,軟件時鐘942和輸入/輸出總線943,及其他部件。TDM單元931和941已經(jīng)參照圖9(A)、9(B),和9(C)得到了討論。這些芯片930和940有兩個互連導(dǎo)線944和945,它們將硬件模型連接在一起。這兩個互連導(dǎo)線是圖8中顯示的互連結(jié)構(gòu)的一部分。參照圖8,這樣的一個互連是位于芯片F(xiàn)32和F33之間的互連611。在一個實施例中,每個互連的導(dǎo)線/引腳最大數(shù)目是44。在圖34中,模型化的電路在芯片930和940之間只需要兩個導(dǎo)線/引腳。這些芯片930和940被連接到組總線950。因只要實現(xiàn)兩個芯片,所以兩個芯片都位于相同的組中,或每個芯片屬于一個不同的組。最佳的方法是,一個芯片被連接到一個組總線,而另一個芯片被連接到另一個組總線,以便確保在FPGA接口處的傳輸量等于PCI接口處的傳輸量。前面為了例證和說明的目的描述了本發(fā)明的一個優(yōu)選實施例。這個說明并非是沒有遺漏的,也并非為了將本發(fā)明限制為呈現(xiàn)出的特定形式。顯而易見,本領(lǐng)域的技術(shù)人員可以清楚地發(fā)現(xiàn)許多修改和變更。本領(lǐng)域的技術(shù)人員將容易地發(fā)現(xiàn),其他的應(yīng)用可以替換此處提供的應(yīng)用,而不會背離本發(fā)明的精神和范圍。因此,本發(fā)明只應(yīng)受到權(quán)利要求書的限制。權(quán)利要求1.一種根據(jù)需要為模型化設(shè)計創(chuàng)建改值轉(zhuǎn)儲(VCD)文件的方法,其包含下列步驟選擇一個模擬進程范圍,該范圍在模擬時間t0處開始,在模擬時間t3處結(jié)束;選擇一個模擬進程范圍,該范圍在模擬時間t1處開始,在模擬時間t2處結(jié)束,其中模擬時間t1大于或等于模擬時間t0,而且模擬時間t2小于或等于模擬時間t3;產(chǎn)生用于所選模擬目標(biāo)范圍的一個模型化設(shè)計的VCD文件;并直接從模擬時間t1訪問VCD文件以便調(diào)試模型化設(shè)計。2.根據(jù)權(quán)利要求1所述的方法,其進一步包含下列步驟將主輸入提供給模型化設(shè)計用于進行估算;且為模擬進程范圍記錄一模擬歷史記錄。3.根據(jù)權(quán)利要求2所述的方法,其進一步包含下列步驟處理模擬歷史記錄;且在模型化設(shè)計中估算從模擬時間t0到模擬時間t2的經(jīng)過處理的模擬歷史記錄。4.根據(jù)權(quán)利要求3所述的方法,其中產(chǎn)生VCD文件的步驟進一步包含基于經(jīng)過處理的模擬歷史記錄從模型化設(shè)計產(chǎn)生模型化設(shè)計估算結(jié)果;且將模擬目標(biāo)范圍期間的估算結(jié)果儲存進VCD文件。5.根據(jù)權(quán)利要求4所述的方法,其中記錄步驟進一步包含下列步驟壓縮主輸入;且將被壓縮的主輸入記錄為模擬歷史記錄。6.根據(jù)權(quán)利要求4所述的方法,其中處理步驟進一步包含對被壓縮的主輸入解壓縮;且將被解壓縮的主輸入作為經(jīng)過處理的模擬歷史記錄提供給模型化設(shè)計用于估算。7.根據(jù)權(quán)利要求4所述的方法,其中記錄步驟包括下列步驟將主輸入記錄為模擬歷史記錄。8.根據(jù)權(quán)利要求1所述的方法,其進一步包含下列步驟在一個第一文件中儲存模型化設(shè)計在模擬時間t0處的狀態(tài)信息;且在一個第二文件中儲存模型化設(shè)計在模擬時間t3處的狀態(tài)信息。9.一種用于驗證一個用戶設(shè)計的電子設(shè)計自動化系統(tǒng),其包含包括一個中央處理單元和存儲器的一個計算系統(tǒng),用于在軟件中模擬用戶設(shè)計;一個連接到計算系統(tǒng)的內(nèi)部總線系統(tǒng);連接到內(nèi)部總線系統(tǒng)的可重新配置的硬件邏輯,用于在硬件中模擬至少部分用戶設(shè)計;連接到內(nèi)部總線系統(tǒng)的控制邏輯,用來控制可重新配置的硬件邏輯和計算系統(tǒng)之間的數(shù)據(jù)傳輸;以及為所選模擬進程范圍記錄一個模擬歷史記錄的VCD隨選邏輯,它還為一個所選模擬目標(biāo)范圍將狀態(tài)信息從硬件模型轉(zhuǎn)儲到一個VCD文件,其中模擬目標(biāo)范圍在模擬進程范圍之內(nèi)。10.根據(jù)權(quán)利要求9所述的電子設(shè)計自動化系統(tǒng),其中VCD隨選邏輯進一步包含第一范圍選擇邏輯,用來選擇一個模擬進程范圍,該范圍在模擬時間t0處開始,并在模擬時間t3處結(jié)束;第二范圍選擇邏輯,用來選擇一個模擬目標(biāo)范圍,該范圍在模擬時間t1處開始,并在模擬時間t2處結(jié)束,其中模擬時間t1大于或等于模擬時間t0,而模擬時間t2小于或等于模擬時間t3;轉(zhuǎn)儲邏輯,用來針對所選模擬目標(biāo)范圍產(chǎn)生硬件模型化設(shè)計的一個VCD文件;以及存取邏輯,用來直接從模擬時間t1訪問VCD文件以便調(diào)試用戶設(shè)計。11.根據(jù)權(quán)利要求10所述的電子設(shè)計自動化系統(tǒng),其中VCD隨選邏輯進一步包含測試平臺處理,用于將主輸入提供給硬件模型化設(shè)計用于進行估算;以及計算系統(tǒng)中的記錄邏輯,用于為模擬進程范圍記錄一模擬歷史記錄。12.根據(jù)權(quán)利要求11所述的電子設(shè)計自動化系統(tǒng),其中VCD隨選邏輯進一步包含計算系統(tǒng)中的處理邏輯,用于處理模擬歷史記錄;以及可重新配置的硬件邏輯中的估算邏輯,用來在硬件模型化設(shè)計中估算從模擬時間t0到模擬時間t2的經(jīng)過處理的模擬歷史記錄。13.根據(jù)權(quán)利要求12所述的電子設(shè)計自動化系統(tǒng),其中轉(zhuǎn)儲邏輯將模擬目標(biāo)范圍期間,根據(jù)經(jīng)過處理的模擬歷史記錄,將來自硬件模型設(shè)計的估算結(jié)果轉(zhuǎn)儲進入VCD文件。14.根據(jù)權(quán)利要求13所述的電子設(shè)計自動化系統(tǒng),其中記錄邏輯進一步包含壓縮邏輯,用于壓縮主輸入;和寫邏輯,用于將被壓縮的主輸入作為模擬歷史記錄寫入。15.根據(jù)權(quán)利要求14所述的電子設(shè)計自動化系統(tǒng),其中處理邏輯進一步包含解壓縮邏輯,用于對被壓縮的主輸入解壓縮;和數(shù)據(jù)傳輸邏輯,用于將被解壓縮的主輸入作為經(jīng)過處理的模擬歷史記錄傳輸給硬件模型化設(shè)計用于估算。16.根據(jù)權(quán)利要求13所述的電子設(shè)計自動化系統(tǒng),其中記錄邏輯進一步包含寫邏輯,用于將主輸入作為模擬歷史記錄寫入。17.根據(jù)權(quán)利要求9所述的電子設(shè)計自動化系統(tǒng),其進一步包含狀態(tài)儲存邏輯,用于在一個第一文件中儲存硬件模型化設(shè)計在模擬時間t0處的狀態(tài)信息和在一個第二文件中儲存硬件模型化設(shè)計在模擬時間t3處的狀態(tài)信息。18.一種VCD隨選系統(tǒng),用來為模擬時間的所選模擬目標(biāo)范圍提供估算信息,估算發(fā)生在模型化設(shè)計中,其包含第一邏輯,用來選擇一個模擬進程范圍,該范圍在模擬時間t0處開始,并在模擬時間t3處結(jié)束;第二邏輯,用來選擇一個模擬目標(biāo)范圍,該范圍在模擬時間t1處開始,并在模擬計時t2處結(jié)束,其中模擬時間t1大于或等于模擬時間t0,而模擬時間t2小于或等于模擬時間t3;產(chǎn)生邏輯,用于為所選模擬目標(biāo)范圍產(chǎn)生一個估算信息的VCD文件;以及存取邏輯,用來從模擬時間t1直接訪問VCD文件,以調(diào)試模型化設(shè)計。19.根據(jù)權(quán)利要求18所述的VCD隨選系統(tǒng),其進一步包含壓縮邏輯,用于針對模擬進程范圍的持續(xù)時間接收且壓縮主輸入數(shù)據(jù);和解壓縮邏輯,用于對被壓縮的主輸入數(shù)據(jù)解壓縮,而且將被解壓縮的主輸入數(shù)據(jù)傳輸進入模型化設(shè)計用于估算。20.根據(jù)權(quán)利要求19所述VCD隨選系統(tǒng),其中產(chǎn)生邏輯進一步包含轉(zhuǎn)儲邏輯,用于將估算信息轉(zhuǎn)儲到VCD文件,即由模型化設(shè)計通過對被解壓縮的主輸入進行估算所產(chǎn)生的估算信息。全文摘要此處介紹的技術(shù)被稱為隨選VCD。在一個典型的系統(tǒng)中,整合隨選VCD技術(shù)的EDA(電子設(shè)計自動化)工具有下列高水準(zhǔn)的屬性(1)以RCC為基礎(chǔ)并行模擬歷史記錄壓縮和記錄,(2)以RCC為基礎(chǔ)的并行模擬歷史記錄解壓縮和產(chǎn)生VCD文件,以及(3)針對所選模擬目標(biāo)范圍的隨選軟件重建,以及不需要重新運行模擬的設(shè)計審查。這些屬性中的每一個屬性都將在下文得到更具體的討論。當(dāng)用戶選擇一個模擬進程范圍時,RCC系統(tǒng)以高度壓縮的方式記錄來自測試平臺程序的主輸入。用戶然后選擇一個更窄的區(qū)域,其位于模擬進程范圍內(nèi)被稱為模擬目標(biāo)范圍,用于更集中的分析。RCC系統(tǒng)將硬件模型的硬件狀態(tài)信息(也就是,主輸出)轉(zhuǎn)儲到一個VCD文件之內(nèi)。RCC系統(tǒng)然后允許用戶從模擬目標(biāo)范圍開始處直接查看VCD文件,而不必從模擬進程范圍的開始處重新運行整個模擬。文檔編號G06F17/50GK1491385SQ0182279公開日2004年4月21日申請日期2001年8月14日優(yōu)先權(quán)日2001年8月14日發(fā)明者曾平圣,約格西·庫馬·戈爾,沈崐旭,庫馬戈爾申請人:阿克西斯系統(tǒng)公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1