新四季網

隨選vcd系統和方法

2023-09-24 00:25:20 2


專利名稱::隨選vcd系統和方法
技術領域:
:本發明一般涉及電子設計自動化(EDA)。更具體的說,本發明涉及對改值轉儲(ValueChangeDump--VCD)的改進,以加速設計調試進程。
背景技術:
:通常,電子設計自動化(EDA)是一種基於計算機的工具,其配置在各種工作站上,為設計者提供自動化或半自動化的工具,用於設計和驗證用戶定製的電路設計。EDA通常可用於任何目的是模擬、仿真、原型設計、執行,或計算的電子設計的建立,分析和編輯。EDA技術還可用來開發使用用戶設計地子系統或部件的系統(即目標系統)。EDA的最終結果為一個改進並增強的設計,其一般為離散集成電路或印刷電路板的形式,其改良了原始設計並且保持了原始設計的靈魂。軟體模擬電路設計後進行硬體仿真的價值在各種使用並受益於EDA技術的行業中得到了認可。然而,目前的軟體模擬和硬體仿真/加速對用戶來說很麻煩,這是因為這些處理具有分離和獨立的特點。例如,用戶可能需要在一部分時間裡利用軟體模擬去模擬或調試電路設計,在其他時間中使用這些結果並利用硬體模型加速模擬過程,在選擇時間檢查電路中的各個寄存器和組合邏輯值,並且在隨後返回軟體模擬,所有這些都在一個調試/測試進程中。此外,當內部寄存器和組合邏輯值隨著模擬時間的推進發生改變時,即使變化發生在硬體加速/仿真過程中的硬體模型中,用戶也應該可以監視這些變化。為了解決使用純軟體模擬和純硬體仿真/加速這兩個分離和獨立的過程帶來的令人困擾的問題,使整個系統更加友好,協同模擬(Co-simulation)應運而生。但是,協同模擬仍具有一些缺點(1)協同模擬系統需要手動調整分區,(2)協同模擬使用兩個鬆散耦合的引擎,(3)協同模擬速度和軟體模擬速度一樣慢,以及(4)協同模擬系統遭遇競態條件。首先,軟體和硬體之間的劃分由手動而不是自動來處理,這更加重了用戶的負擔。大體上,協同模擬需要用戶自己基於非常大的功能塊,在軟體和硬體中劃分設計(開始於行為級,然後是RTL(寄存器傳送)級,接著是門級)並測試模型。這樣的限制需要用戶具有一定的熟練程度。其次,協同模擬系統使用兩個鬆散耦合的獨立引擎,其引發了引擎間同步,協調和適應性的問題。協同模擬需要兩個不同的校驗引擎之間的同步---軟體模擬和硬體仿真。即使軟體模擬器端與硬體加速器端連接,也僅有外部輸出接腳數據可供檢查和載入。模型化電路中處於寄存器和組合邏輯等級的值無法用於簡單的檢查和從一端到另一端的下載,限制了這些協同模擬器系統的應用。當用戶從軟體模擬轉換到硬體加速或反之時,一般必須重新模擬整個設計。因此,如果用戶期望在單一調試進程中實現軟體模擬和硬體仿真/加速之間的轉換,同時還可以檢查寄存器和組合邏輯值,協同模擬器系統則無法提供此功能。第三,協同模擬速度和模擬速度一樣慢。協同模擬需要兩個不同的校驗引擎之間的同步---軟體模擬和硬體仿真。每個引擎具有自己的驅動模擬或仿真的控制機制。這表示軟體和硬體之間的同步將導致整體性能的速度與軟體模擬速度一樣慢。為協調這兩個引擎操作的附加消耗更加劇了協同模擬系統的低速問題。第四,協同模擬系統由於時鐘信號之間的競態狀態將會遭遇設置、佔用時間和時鐘假信號問題。協同模擬器使用硬體驅動時鐘,這導致它們由於不同的導線線路長度,在不同的時間處於不同邏輯元件的輸入端。當需要這些邏輯元件同時估算數據時,由於一些邏輯元件在某個時期估算數據而其他邏輯元件在不同的時期估算數據,就會產生估算結果的不確定性。普通設計者會遇到的另一個問題是當調試時,隔離和識別設計的問題的過程相對較慢。儘管設計者自身有限的解決問題能力會導致速度的落後,但問題的主要原因還是模擬器自身。模擬器的低速不僅因為其基於軟體的引擎,而且模擬器的調試需要整個模擬重新運行。現在將提供此問題的進一步解釋。一個典型的ASIC(專用集成電路)晶片設計者使用模擬器調試他的設計;也就是說,設計者使用包括測試平臺程序模擬或測試其設計,以觀測設計對各種激勵的反應。基於對涉及的一些關鍵結點和輸出的檢測,設計者一般可以確定其設計是否有問題。當然,如果設計處於其初級階段,那麼出現一些問題是難免的。但是,找尋故障並不是那麼簡單的。對於一個較大和較複雜的設計(例如,具有超過一百萬個門電路)來說,模擬器在找到一個故障之前必須單步調試幾百萬個模擬時間周期。顯然,對於這樣一個設計,不能期望設計者檢查每一個模擬時步。坦白的說,對於產品設計開發周期的短暫時間間隔來說,這樣的任務不可能完成。一旦模擬器揭示了一個故障的存在,則必須明確定位實際的故障以去除故障的設計缺陷。問題何時(即模擬時步)發生?其發生在模擬的開始(如,t10),中間(如,t1000)還是結尾(如,t1000000)呢?還有,問題出在何處(即,電路設計中的物理位置)以便進行修復呢?在最初,即使設計者不知道故障出在何處(即模擬時步),也可以進行合理的猜測。設計者必須有一些方法轉入他懷疑存在問題的準確模擬時間中。模擬器通過提供VCD(改值轉儲)文件幫助其完成任務,提供VCD可使用兩種傳統方法之一----完全VCD和選擇性VCD。利用完全VCD方法,模擬器以VCD文件的形式儲存從模擬時間t0到模擬結束的整個模擬過程。接著,由設計者分析此VCD文件以隔離故障。設計者對其大體位置做出合理的猜測,使得他可以利用一些精確的步進分析此位置;也就是說,如果設計者以某種方式推測故障發生在模擬時間t350和t400之間的某個地方,那麼他可以前進到臨近所推測模擬時間的時間處,例如模擬時間t345。接著他便可以開始仔細的檢查所猜測的區域(即t350到t400)了。但是,為了到達此模擬時間,設計者必須用VCD文件從開始(即,t0)重新運行整個模擬,無論故障發生於何處。如果他對於故障位置的最初猜測不正確,則他必須再一次做出猜測並再次從開始重新運行整個模擬。對於一個擁有超過一百萬個門電路和超過一百萬個模擬時步的設計來說,從開始重新運行整個模擬的調試過程非常耗時,並且這一情況還被錯誤的猜測所加劇。但是,一個擁有超過一百萬個門電路和超過一百萬個模擬時步的設計需要很多的磁碟空間。通常,一個完全VCD文件的大小為100GB是很普通的。此VCD文件對於大多數文件系統來說都太大了。而且,此巨型VCD文件對於大多數波形觀測儀來說都太龐大了,以至於無法有效的處理。此外,使用完全VCD,模擬過程慢了三倍。在每個模擬時間之後(或當值發生變化時),完全VCD需要記錄狀態值。對於存貯器的訪問過程需要一些時間,並且因此模擬必須可以暫時中止直到在給定的模擬時間完成存儲操作。今天,完全VCD方法已經不再適用。使用選擇性VCD方法,不保存整個模擬;相反地,模擬器保存設計者選擇的模擬部分。但是,選擇性VCD仍未使設計者避免從開始重新運行整個模擬。最初,設計者運行模擬並且不可避免的發現他的設計中的問題。接著,他對問題的位置進行猜測。如果設計者推測問題發生在模擬時間t350和t400之間的某個地方,則設計者重新運行模擬並命令模擬器將此模擬時間範圍保存為VCD文件。此後,設計者可以對應於其猜測檢查VCD文件。如果他對於隔離問題的猜測不正確,則他必須進行另一次猜測,並命令模擬器將新的模擬範圍保存為VCD文件,再重新運行此模擬。接著,設計者再次分析VCD文件。和完全VCD方法不同,選擇性VCD不需要這麼多的磁碟空間,因為不用保存整個模擬。但是,選擇性VCD仍需要重新運行整個模擬。如果設計者對於定位故障的猜測不正確,則他必須再次重新運行模擬並以VCD文件的形式保存新的模擬範圍。無論如何,選擇性VCD方法仍非常耗時,並且這一情況還被錯誤的猜測所加劇。因此,需要一種可以解決由目前已知的系統所帶來的問題的系統或方法,已知系統包括模擬系統,硬體仿真系統,硬體加速器,協同模擬和協同校驗系統。
發明內容本發明的一個實施例提供了不需重新運行模擬的隨選VCD文件。VCD的隨選特點包含在RCC(可重新配置計算)系統之中,該系統包括一個RCC計算系統和一個RCC硬體加速器。RCC計算系統包含用戶所需的計算資源,這些資源使得用戶可以在軟體中模擬整個軟體模型化設計以及控制設計的硬體模型化部分的硬體加速。RCC硬體加速器包含可重新配置的邏輯元件陣列(例如,FPGA(現場可編程門陣列)),其可以至少在硬體中模型化用戶設計的一部分,使得用戶可以加速調試過程。RCC計算系統通過軟體時鐘與RCC硬體加速器緊密耦合。VCD的隨選特點允許用戶選擇模擬歷史的一部分用於詳細的調試分析,而不需重新運行模擬。RCC系統允許用戶選擇兩個模擬時間範圍---大的一個稱為「模擬進程(session)範圍」,此範圍中的較小子集稱為「模擬目標範圍」。該VCD文件將被建立用於該較小的「模擬目標範圍」。在選擇「模擬進程範圍」之後,RCC系統通過從測試平臺處理提供主輸入給RCC硬體加速器中的硬體模型用於估算,在模擬進程範圍中的整個持續時間上快速模擬設計。這些相同的主輸入也被壓縮並記錄在模擬歷史文件中。利用此模擬歷史文件,RCC系統可以在任何時間再現模擬進程範圍中的任何模擬部分。在模擬進程範圍的開始處,RCC系統保存在此處設計的硬體狀態信息,使得用戶可以在需要時進行離線模擬。在模擬進程範圍的結尾處,RCC系統保存在此處設計的硬體狀態信息,使得用戶可以在任何時間快速返回此點(此點為上次離開時的點)以越過此模擬進程範圍繼續進行模擬,而不必重新進行模擬。當用戶選擇「模擬目標範圍」後,RCC系統通過解壓在模擬歷史文件中壓縮的主輸入並將這些解壓的主輸入提供給RCC硬體加速器用於估算,快速模擬至模擬目標範圍的開始處。在模擬目標範圍中,RCC系統將評估的結果或主輸出從硬體模型轉儲到VCD文件中,用於存儲在系統盤中。在模擬目標範圍的結束處,RCC系統消除轉儲過程。一旦建立了VCD文件,用戶就可以利用波形觀測儀觀察VCD文件,以更詳盡地調試其設計。這不需要重新運行模擬就可以完成。如果故障不在此模擬目標範圍中,用戶可以在相同的模擬進程範圍中選擇另一個模擬目標範圍。一旦選擇了新的模擬目標範圍,RCC系統則以上述方式建立新的VCD文件。接著,用戶可以分析此新的VCD文件來隔離故障。一旦將故障隔離並固定,用戶可以從當前模擬進程範圍移到下一個模擬進程範圍繼續進行模擬。所保存的當前模擬進程範圍結束端的硬體狀態信息被載入RCC系統中。接著,用戶可以開始模擬。VCD的隨選特點在在線和離線時均有效。在說明書中接下來的部分中將充分討論和說明這些和其他實施例。在下列文字和附圖的幫助下,可以更好的理解本發明的上述目標和對本發明的描述。圖1顯示了本發明一實施例的高層概觀圖,其包括連接在一個PCI總線上的工作站,可重新配置的硬體仿真模型,仿真接口和目標系統。圖2顯示了本發明的一個具體用法的流程圖。圖3顯示了根據本發明一實施例,在編譯時間和運行時間中軟體編譯和硬體配置的高層圖。圖4顯示了編譯過程的流程圖,其包括產生軟體/硬體模型以及軟體內核代碼。圖5顯示了控制整個模擬仿真(Semulation)系統的軟體內核。圖6顯示了通過映射,布局和布線將硬體模型映射到可重新配置的電路板上的方法。圖7顯示了圖8中所示的FPGA陣列的連通度矩陣。圖8顯示了4×4FPGA)陣列和其相互連接的一個實施例。圖9(A),9(B)和9(C)表示了時分多路轉換(TDM)電路的一個實施例,其允許一組線路以時分多路轉換的方式連接,使得一個引腳,而不是多個引腳可被用於晶片中的該組線路。圖9(A)表示了輸出接腳問題的概觀,圖9(B)顯示了用於傳輸端的TDM電路,圖9(C)顯示了用於接收端的TDM電路。圖10顯示了根據本發明一個實施例的模擬仿真系統結構。圖11顯示了本發明地址指示器的一個實施例。圖12顯示了圖11所示地址指示器初始化的狀態轉變圖。圖13顯示了用於為地址指示器派生出不同MOVE信號的MOVE信號發生器的一個實施例。圖14顯示了每個FPGA晶片中多路復用地址指示器的鏈路。圖15顯示了根據本發明一個實施例的多路復用跨晶片地址指示器鏈路實施例。圖16顯示了對於軟體時鐘實現和硬體模型中邏輯元件估算很重要的時鐘/數據網絡分析流程圖。圖17顯示了根據本發明一個實施例的硬體模型的基本構件塊。圖18(A)和18(B)顯示了鎖存器和觸發器的寄存器模型實現。圖19顯示了根據本發明一個實施例的時鐘邊沿檢測邏輯實施例。圖20顯示了根據本發明一個實施例的控制圖19所示時鐘邊沿檢測邏輯的四狀態有限狀態機。圖21顯示了根據本發明一個實施例的每個FPGA晶片的互連、JTAG、FPGA總線以及全局信號引腳標誌。圖22顯示了PCI總線和FPGA陣列之間的FPGA控制器實施例。圖23顯示了結合圖22討論的CTRL_FPGA單元和數據緩衝器的詳細示圖。圖24顯示了4×4FPGA陣列,其和FPGA組的關係,以及擴展能力。圖25顯示了硬體啟動方法的一個實施例。圖26顯示了要模型化和模擬的用戶電路設計示例的HDL(硬體描述語言)碼。圖27顯示了用符號表示圖26所示HDL碼電路設計的電路圖。圖28顯示了圖26所示HDL碼的部件類型分析。圖29顯示了基於圖26所示用戶定製電路設計的結構化RTLHDL碼的信號網絡分析。圖30顯示了對於相同假設示例的軟體/硬體分區結果。圖31顯示了對於相同假設示例的硬體模型。圖32顯示了用戶定製電路設計的相同假設示例的一個具體的硬體模型到晶片分區結果。圖33顯示了用戶定製電路設計的相同假設示例的另一個具體的硬體模型-到-晶片分區結果。圖34顯示了用戶定製電路設計的相同假設示例的邏輯修補操作。圖35(A)到(D)利用兩個示例說明了「hops」(跳躍)原則和互連。圖36顯示了用於本發明中的FPGA晶片概觀。圖37顯示了FPGA晶片上的FPGA互連總線。圖38(A)和38(B)顯示了根據本發明一個實施例的FPGA電路板連接方案側視圖。圖39顯示了根據本發明一個實施例的FPGA陣列的直接相鄰和單跳躍六電路板互連布局。圖40(A)和40(B)顯示了FPGA電路板間互連方案。圖41(A)到41(F)顯示了電路板互連連接器的頂視圖。圖42顯示了具有代表性的FPGA電路板上的板上連接器和一些部件。圖43顯示了圖41(A)到41(F)和42中的連接器圖例。圖44顯示了根據本發明一個實施例的FPGA陣列的直接相鄰和單跳躍雙電路板連互連布局。圖45顯示了根據本發明另一實施例的具有多處理器的工作站。圖46顯示了根據本發明另一實施例的環境,其中多用戶在分時的基礎上共享一個模擬/仿真系統。圖47顯示了根據本發明一個實施例的模擬伺服器的高層結構。圖48顯示了根據本發明一個實施例的模擬伺服器結構。圖49顯示了模擬伺服器的流程圖。圖50顯示了作業交換處理的流程圖。圖51顯示了在設備驅動器和可重新配置的硬體單元之間的信號。圖52表明了用於處理不同優先等級的多個作業的模擬伺服器的分時操作特性。圖53顯示了在設備驅動器和可重新配置的硬體單元之間的通信交換信號。圖54顯示了通信交換協議的狀態圖。圖55顯示了根據本發明一個實施例的模擬伺服器的客戶伺服器模式概觀。圖56顯示了根據本發明一個實施例的執行存儲器交換的模擬系統高層結構圖。圖57顯示了模擬系統存儲器映射功能的更詳細的結構圖,其中模擬系統具有用於存儲器有限狀態機(MEMFSM)的支持部件以及用於每個FPGA邏輯裝置的估算有限狀態機(EVALFSMx)。圖58顯示了根據本發明一個實施例的CTRL_FPGA單元中MEMFSM單元的有限狀態機狀態圖。圖59顯示了根據本發明一個實施例的在每個FPGA晶片中的有限狀態機的狀態圖。圖60顯示了存儲器讀數據雙緩衝器。圖61顯示了根據本發明一個實施例的模擬寫/讀循環。圖62顯示了當在CLK_EN信號之後發生DMA(存儲器直接存取)讀操作時,模擬數據傳輸操作的時序圖。圖63顯示了當在靠近EVAL周期的末端發生DMA讀操作時,模擬數據傳輸操作的時序圖。圖64顯示了作為PCI附加卡的典型用戶設計。圖65顯示了用ASIC作為待測設備的典型硬體/軟體協同校驗系統。圖66顯示了使用仿真器的典型協同校驗系統,其中待測設備程式化於仿真器之中。圖67顯示了根據本發明一個實施例的模擬系統。圖68顯示了根據本發明一個實施例的不具有外部輸入/輸出設備的協同校驗系統,其中RCC計算系統包含不同輸入/輸出設備的軟體模型和目標系統。圖69顯示了根據本發明另一實施例的具有真實外部輸入/輸出設備和目標系統的協同校驗系統。圖70顯示了根據本發明一個實施例的控制邏輯的數據輸入部分的詳細邏輯圖。圖71顯示了根據本發明一個實施例的控制邏輯的數據輸出部分的詳細邏輯圖。圖72顯示了控制邏輯的數據輸入部分的時序圖。圖73顯示了控制邏輯的數據輸出部分的時序圖。圖74顯示了根據本發明一個實施例的RCC硬體陣列的電路板設計。圖75(A)顯示了用來解釋佔用時間和時鐘假信號問題的移位寄存器電路範例。圖75(B)顯示了圖75(A)所示移位寄存器電路的時序圖,用以說明佔用時間問題。圖76(A)顯示了跨過多個FPGA晶片的圖75(A)所示的相同移位寄存器電路。圖76(B)顯示了圖76(A)所示移位寄存器電路的時序圖,用以說明佔用時間擾亂。圖77(A)顯示了用來說明時鐘假信號問題的邏輯電路範例。圖77(B)顯示了圖77(A)所示的邏輯電路的時序圖,用以說明時鐘假信號問題。圖78顯示了根據現有技術的解決佔用時間擾亂問題的時序調整技術。圖79顯示了根據現有技術的解決佔用時間擾亂問題的時序再合成技術。圖80(A)顯示了根據本發明一個實施例的原始鎖存器,圖80(B)顯示了根據本發明一個實施例的時序不靈敏和無假信號鎖存器。圖81(A)顯示了根據本發明一個實施例的原始設計觸發器,圖81(B)顯示了根據本發明一個實施例的時序不靈敏和無假信號型觸發器。圖82顯示了根據本發明一個實施例的時序不靈敏和無假信號鎖存器及觸發器的觸發機制時序圖。圖83顯示了包含本發明一實施例的RCC系統的部件的高層圖。圖84顯示了根據本發明一個實施例的多個模擬周期以說明VCD的隨選操作。在下文中將結合本發明的多個不同方面和實施例對這些圖進行討論。具體實施例方式此說明書在被稱為「模擬仿真器」(「SEmulator」)或「模擬仿真」(「SEmulation」)系統的環境下並通過這些系統描述本發明的不同實施例。整個說明書中,使用了術語「模擬仿真系統」,「模擬仿真器系統」,「模擬仿真器」,或僅僅是「系統」。這些術語指根據本發明的用於下列四種操作模式的任意組合的不同裝置和方法實施例(1)軟體模擬,(2)通過硬體加速模擬,(3)內電路仿真(ICE),以及(4)後模擬分析,包括它們相應的配置或預處理階段。在其他時候,可以使用術語「模擬仿真」。此術語代表在此所述的新的處理。同樣的,如「可重新配置的計算(RCC)陣列系統」或「RCC計算系統」這樣的術語指模擬/協同校驗系統中包含主處理器,軟體內核和用戶設計的軟體模型的部分。如「可重新配置的硬體陣列」或「RCC硬體陣列」這樣的術語指模擬/協同校驗系統中包含用戶設計的硬體模型的部分,在一個實施例中還指包含可重新配置的邏輯元件陣列的部分。說明書中還使用到了「用戶」和用戶的「電路設計」或「電子設計」。「用戶」是通過其界面使用模擬仿真系統的人,可能是電路的設計者或參與了一些或未參與設計過程的測試/調試人員。「電路設計」或「電子設計」為定製設計的系統或部件,可以是軟體或硬體,其可以被模擬仿真系統模型化以實現測試/調試。在許多情況下,「用戶」也設計了「電路設計」或「電子設計」。說明書還使用了如「導線」,「導線線路」,「導線/總線線路」和「總線」這樣的術語。這些術語指不同的導電線路。每條線路可以是兩點間的單線或點間的多線。這些術語可以互換使用,因為「導線」可以包括一條或多條導電線,「總線」也可以包括一條或多條導電線。此說明書根據提綱進行展開。首先,說明書介紹了模擬仿真系統的大致概觀,包括四種操作模式和硬體實現方案的概述。其次,說明書對模擬仿真系統進行了詳細的討論。在一些情況下,一些圖會顯示其前面的圖中所示實施例的變體。此時,使用相同的序號表示相同的部件/單元/過程。說明書的提綱如下I.概述A.模擬/硬體加速模式B.利用目標系統模式仿真C.後模擬分析模式D.硬體實現方案E.模擬伺服器F.存儲器模擬G.協同校驗系統II.系統描述HI.模擬/硬體加速模式IV.利用目標系統模式仿真V.後模擬分析模式VI.硬體實現方案A.概述B.地址指示器C.門控數據/時鐘網絡分析D.FPGA陣列和控制E.使用更密集FPGA晶片的替代實施例F.TIGF邏輯裝置VII.模擬伺服器VIII.存儲器模擬IX.協同校驗系統X.範例------------------------------------I.概述本發明的各個實施例一般具有四種操作模式(1)軟體模擬,(2)通過硬體加速模擬,(3)內電路仿真(ICE),以及(4)後模擬分析。包括這些模式的系統和方法的不同實施例至少具有下列特徵中的一些(1)具有一個單一緊密耦合模擬引擎的一軟體和硬體模型,一個軟體內核,一循環接一循環控制軟體和硬體模型;(2)編譯處理過程中的自動部件類型分析,用於軟體和硬體模型的生成和分區;(3)具有在軟體模擬模式、通過硬體加速模式模擬、內電路仿真模式,和後模擬分析模式之間轉換(一循環接一循環)的能力;(4)透過軟體組合部件重建的完全硬體模型可見度;(5)具有軟體時鐘和門控時鐘/數據邏輯的雙緩衝時鐘模型,以避免競態狀態;以及(6)從過去模擬進程中的任意選擇點重新模擬或用硬體加速用戶電路設計的能力。最終結果是具有完全HDL功能和仿真器執行性能的靈活的快速模擬器/仿真器系統與方法。A.模擬/硬體加速模式模擬仿真器系統通過自動部件類型分析,可以將用戶的定製電路設計以軟體和硬體進行模型化。整個用戶電路設計用軟體模型化,而估算部件(即存儲器元件,組合部件)則用硬體模型化。部件類型分析有助於進行硬體模型化。存在於通用處理器系統主存儲器中的軟體內核充當模擬仿真器系統的主程序,主程序負責控制其不同模式和功能的總體操作和執行。只要有任何的測試平臺程序激活,內核就估算激活的測試平臺分量,估算時鐘分量,檢測時鐘邊沿以更新寄存器和存儲器以及傳遞組合邏輯數據,和推進模擬時間。此軟體內核為模擬器引擎的緊密耦合特性提供硬體加速引擎。對於軟體/硬體邊界,模擬仿真器系統提供了大量輸入/輸出地址空間-REG(寄存器),CLK(軟體時鐘),S2H(軟體到硬體),以及H2S(硬體到軟體)。模擬仿真器具有在四種操作模式之間選擇變換的能力。系統的使用者可以開始模擬、停止模擬、斷言輸入值、檢查值、逐循環單步執行,以及轉回或轉向四個不同的模式。例如,系統可以在一段時間內在軟體中模擬電路,通過硬體模型加速模擬,然後再返回軟體模擬模式。通常,模擬仿真系統為用戶提供可以「看見」每個模型元件的能力,無論其是在軟體還是在硬體中模型化。由於多種原因,組合部件不像寄存器那樣「可見」,並且因此,獲取組合部件數據是很困難的。一個原因是用於可重新配置的電路板中將用戶電路設計的硬體部分模型化的FPGA(可現場編程門陣列)一般將組合部件模擬為查找表(look-uptable,LUT),而不是實際的組合部件。因此,模擬仿真系統讀取寄存器中的值並重新生成組合部件。因為需要一些開銷以重新生成組合部件,所以此再生成過程並不總在執行;而是僅在用戶需要的時候執行。因為軟體內核存在於軟體端,所以提供時鐘邊沿檢測機制引發所謂軟體時鐘的生成,該軟體時鐘將啟動輸入送到硬體模型的各個寄存器中。通過雙緩衝電路設備嚴格控制時序,使軟體時鐘啟動信號在數據之前進入寄存器模型中。一旦這些輸入寄存器模型的數據穩定下來,軟體時鐘同步門控數據,以確保共同門控所有的數據值而無任何發生佔用時間擾亂的危險。軟體模擬也很快,因為系統記錄所有的輸入值和選定的寄存器值/狀態,因此通過減少輸入/輸出操作的數量最小化了開銷。用戶可以有選擇地對記錄頻率進行選擇。B.利用目標系統模式仿真模擬仿真系統可以在其目標系統環境中仿真用戶的電路。目標系統向硬體模型輸出數據用於估算,硬體模型也向目標系統輸出數據。此外,軟體內核控制此模式的操作,使得用戶仍可以選擇開始、停止、斷言值、檢查值、單步執行,以及從一個模式向另一個的轉換。C.後模擬分析模式工作記錄為用戶提供了模擬進程的歷史記錄。不同於已知的模擬系統,模擬仿真系統並不記錄模擬過程中的每個單值、內部狀態,或值變化。模擬仿真系統僅基於記錄頻率(即,每N個周期記錄1個記錄)記錄選定的值和狀態。在後模擬階段,如果用戶需要檢查在剛結束的模擬進程中點X周圍的多個數據,則用戶先轉到最接近點X並暫時位於X之前的一個記錄點上,比方說記錄點Y。接著,用戶從選定記錄點Y到目標點X進行模擬以獲得模擬結果。還將描述VCD隨選系統。此VCD隨選系統允許用戶根據需要觀察任何模擬目標範圍(即,模擬時間),而不需重新進行模擬。D.硬體實現方案模擬仿真系統在可重新配置的電路板上實現FPGA晶片陣列。基於硬體模型,模擬仿真系統將用戶電路設計的每個選定部分分區、映射、寄存,以及路由布線在FPGA晶片上。因此,例如一個具有16個晶片的4×4陣列可以將展開於這16個晶片上的大型電路模型化。此互連方案使得每個晶片可以在2次「跳躍」或連結之內對另一晶片進行訪問。每個FPGA晶片為每個輸入/輸出地址空間(即,REG,CLK,S2H,H2S)提供一個地址指示器。關於特定地址空間的所有地址指示器的組合都是連結在一起的。於是,在數據傳輸過程中,每個晶片中的字數據被順序地選出/選入主FPGA總線和PCI總線,對於每個晶片中的選定地址空間一次一個字,並且一次一個晶片,直到訪問到對應於選定地址空間的所需字數據為止。利用一個傳遞字選擇信號完成字數據的順序選擇。此字選擇信號穿過一個晶片中的地址指示器,並接著傳遞到下一個晶片中的地址指示器,此過程繼續直到最後的晶片或系統對地址指示器進行初始化。在可重新配置的電路板中的FPGA總線系統工作時的帶寬是PCI總線的兩倍,但速度僅為PCI總線的一半。因此,FPGA晶片被分成若干組以利用更大帶寬的總線。此FPGA總線系統的處理能力可以比得上PCI總線系統的處理能力,所以並沒有因為總線速度的降低而損失性能。可以通過機載電路板延伸組長度來實現擴展。在本發明的另一實施例中,使用更密集的FPGA晶片。一種更密集的晶片為Altera10K130V和10K250V晶片。這種晶片的使用改變了電路板的設計,使得每個電路板上僅使用四個FPGA晶片,而不是八個不密集的FPGA晶片(如Altera10K100)。模擬系統中的FPGA陣列通過一個特殊的板互連結構製造在主板上。每個晶片可以有多達8組互連,其中互連在單一電路板上和不同的板之間根據鄰接的直接相鄰互連(即,N[730],W[730],E[730]),以及「單跳躍」(one-hop)相鄰互連排列(即,NH[270],SH[270],XH[360],XH[7237]),不包括局部總線連接。每個晶片可以直接與相鄰的鄰居晶片連接,或在單跳中與位於其上、下、左、右的非鄰接晶片相連接。在X方向(東-西),陣列為環形。在Y方向(北-南),陣列為網格狀。互連可以在單一電路板上單獨連接邏輯裝置與其他部件。但是,板間連接器可以在不同電路板間連接這些板和互連,以便(1)在經由主板的PCI總線和陣列板之間,以及(2)在任何兩個陣列板之間傳遞信號。一個主板連接器將電路板與主板連接,並且因此與PCI總線、電源,和地電位連接。對於一些電路板,主板連接器不用於與主板的直接連接。在一個六電路板結構中,僅板1、3和5與主板直接連接,同時板2、4和6依靠其相鄰板實現與主板的連接。因此,每隔一個板就有一個與主板直接連接,並且這些板的互連與局部總線通過排列在焊接面到元件面的板間連接器相互連接。PCI信號僅通過一個板(通常為第一電路板)進行發送。電源和地電位被接至其他的主板連接器用於那些電路板。位於焊接面到元件面之間的各個板間連接器實現了PCI總線部件,FPGA邏輯裝置,存儲器裝置和各個模擬系統控制電路間的通信。E.模擬伺服器在本發明的另一實施例中,具有模擬伺服器以允許多個用戶訪問相同的可重新配置的硬體單元。在一個系統結構中,網絡中的多個工作站或非網絡環境中的多個用戶/處理可以訪問相同的基於伺服器的可重新配置硬體單元,以對相同或不同的用戶電路設計進行檢查/調試。訪問通過分時處理完成,其中一個調度程序確定多個用戶的訪問優先級,交換作業,並在預定用戶間選擇性的鎖住硬體模型訪問。在一種情景下,每個用戶可以訪問伺服器以將他/她的獨立用戶設計第一次映射到可重新配置的硬體模型,在此情況下系統對設計進行編譯以生成硬體和軟體模型,執行群集操作,執行布局及布線操作,生成位流配置文件,並且在可重新配置的硬體單元中重新配置FPGA晶片以將用戶設計的硬體部分模型化。當一個用戶使用硬體模型加速其設計並將硬體狀態下載到他自己的存儲器中以供軟體模擬時,可以釋放硬體單元以供另一個用戶訪問。伺服器向多個用戶或處理提供對可重新配置的硬體單元的訪問,以實現加速和硬體狀態交換的目的。模擬伺服器包括調度程序,一個或多個設備驅動器,以及可重新配置的硬體單元。模擬伺服器中的調度程序基於優先循環算法。伺服器調度程序包括一個模擬作業隊列表,一個優先級分類器,以及一個作業交換程序。本發明的恢復和回放功能使非網絡多重處理環境以及網絡多用戶環境更加便利,其中可以下載前一個檢查點的狀態數據,並且可以恢復關於此檢查點的整個模擬狀態,用於回放調試或按一循環接一循環地步進。F.存儲器模擬本發明的存儲器模擬或存儲器交換方式提供了一種模擬系統管理關於用戶設計的已配置硬體模型的不同存儲區的有效途徑,硬體模型被程式化在可重新配置硬體單元上的FPGA晶片陣列中。本發明的存儲器模擬方式提供了一種結構和方案,其中與用戶設計有關的大量存儲器區塊被映射到模擬系統的SRAM存儲器裝置中,而不是用來配置和模型化用戶設計的邏輯裝置內。存儲器模擬系統包括一個存儲器狀態機,一個估算狀態機,以及其相關的邏輯電路,用來控制和連接(1)主計算系統和其相關存儲器系統,(2)模擬系統中與FPGA總線連接的SRAM存儲器裝置,以及(3)FPGA邏輯裝置,其包含正在調試的已配置和程式化的用戶設計。根據本發明的一個實施例,存儲器模擬系統的操作通常如下。模擬寫/讀循環分成三個周期---DMA(直接存儲器存取)數據傳輸、估算,以及存儲器存取。存儲器模擬系統的FPGA邏輯裝置端包括一個估算狀態機,一個FPGA總線驅動器,以及一個邏輯接口,用於每個存儲器區塊N與用戶設計中用戶自身存儲器接口的連接,以處理(1)FPGA邏輯裝置間的數據估計,以及(2)FPGA邏輯裝置和SRAM存儲器裝置間的寫/讀存儲器存取。連同FPGA邏輯裝置端,FPGA輸入/輸出控制器端包括一個存儲器狀態機和接口邏輯,以處理(1)主計算系統和SRAM存儲器裝置,以及(2)FPGA邏輯裝置和SRAM存儲器裝置之間的DMA(直接存儲器存取)、寫和讀操作。G.協同校驗系統本發明的一個實施例為協同校驗系統,其包括一個可重新配置的計算系統(在下文稱為「RCC計算系統」)和一個可重新配置的計算硬體陣列(在下文稱為「RCC硬體陣列」)。在一些實施例中,不需要目標系統和外部輸入/輸出設備,因為它們可以模擬於軟體之中。在另一些實施例中,目標系統和外部輸入/輸出設備實際上與協同校驗系統連接以獲得速度並使用實際數據,而不是模擬測試平臺數據。因此,協同校驗系統可以包括RCC計算系統和RCC硬體陣列並結合其它功能,以在使用實際的目標系統和/或輸入/輸出設備的同時,調試用戶設計的軟體部分和硬體部分。RCC計算系統還包括時鐘邏輯(用於時鐘邊沿檢測和軟體時鐘生成),用於測試用戶設計的測試平臺程序,以及設備模型,其用於用戶決定在軟體中模擬的任何輸入/輸出設備,以代替使用真實的物理輸入/輸出設備。當然,用戶可以決定在一個調試進程中使用真實的輸入/輸出設備以及模擬的輸入/輸出設備。軟體時鐘被提供給外部接口作為用於目標系統和外部輸入/輸出設備的外部時鐘脈衝源。該軟體時鐘的使用實現了處理輸入和輸出數據必需的同步。因為RCC計算系統生成的軟體時鐘是調試進程的時基,所以模擬和硬體加速數據與在協同校驗系統和外部接口間傳輸的任何數據同步。當目標系統和外部輸入/輸出設備與協同校驗系統連接時,必須在協同校驗系統和其外部接口之間提供輸出接腳數據。協同校驗系統包括一個控制邏輯,其提供(1)RCC計算系統和RCC硬體陣列,以及(2)外部接口(其與目標系統和外部輸入/輸出設備連接)和RCC硬體陣列之間的流量控制。因為RCC計算系統具有整個設計在軟體中的模型,包括用戶設計模型化在RCC硬體陣列中的部分,所以RCC計算系統還必須具有通向經過外部接口和RCC硬體陣列之間的所有數據的入口。控制邏輯確保了RCC計算系統擁有這些數據的入口。II.系統描述圖1顯示了本發明一實施例的高層概觀圖。工作站10通過PCI總線系統50與可重新配置的硬體模型20和仿真接口30連接。可重新配置的硬體模型20通過PCI總線50以及電纜61與仿真接口30連接。目標系統40通過電纜60與仿真接口30連接。在另一些實施例中,當在特定的測試/調試進程中不需要在目標系統環境下仿真用戶電路設計時,在此裝置中則不具有包含仿真接口30和目標系統40的內電路仿真裝置70(如虛線框中所示)。沒有內電路仿真裝置70,可重新配置的硬體模型20通過PCI總線50與工作站10進行通信。協同內電路仿真裝置70,可重新配置的硬體模型20在目標系統中模擬或模仿用戶的一些電子子系統的電路設計。為了確保在目標系統環境下對用戶的電子子系統電路設計的正確操作,必須將在目標系統40和模擬電子子系統間的輸入和輸出信號提供給可重新配置的硬體模型20以供估算。因此,目標系統40對於可重新配置的硬體模型20的輸入和輸出信號通過電纜60途經仿真接口30和PCI總線50傳輸。或者,目標系統40的輸入/輸出信號可通過仿真接口30和電纜61傳輸至可重新配置的硬體模型20。控制數據和一些獨立的模擬數據通過PCI總線50在可重新配置的硬體模型20和工作站10之間傳遞。事實上,工作站10運行控制整個模擬仿真系統操作的軟體內核,並且必須具有與可重新配置的硬體模型20的接口(讀/寫)。工作站10包括計算機,鍵盤,滑鼠,顯示器和合適的總線/網絡接口,使用戶可以進入並修改描述電子系統電路設計的數據。工作站範例包括SunMicrosystems公司的SPARC或ULTRA-SPARC工作站或基於Intel/Microsoft的計算站。如所屬
技術領域:
中的技術人員所知的,工作站10包括一個CPU11,一根局部總線12,一個主機/PCI橋接器13,一根存儲器總線14,以及主存儲器15。工作站10,可重新配置的硬體模型20和仿真接口30中具有與本發明有關的軟體模擬、硬體加速模擬、內電路仿真,以及後模擬分析的各種形式。體現在軟體中的算法在一個測試/調試進程中儲存在主存儲器15中並利用CPU11通過工作站的作業系統執行。如所屬
技術領域:
中的技術人員所知的,當通過啟動固件將作業系統載入工作站10的存儲器中後,控制系統轉到其初始化編碼以建立必要的數據結構,載入並初始化設備驅動器。接著控制系統轉到命令行解釋程序(CLI),CLI提示用戶指出將要運行的程序。作業系統接下來確定運行程序所需的存儲器數量,定位存儲器區塊,或分配存儲器區塊並直接或通過BIOS(基本輸入輸出系統)訪問存儲器。在完成存儲器載入過程後,開始執行應用程式。本發明的一個實施例是一種特定的模擬仿真應用程式。在其執行過程中,應用程式需要作業系統提供多種服務,包括但不限於,對磁碟文件的讀出和寫入,執行數據通信,以及連接顯示器/鍵盤/滑鼠。工作站10具有適當的用戶接口,以允許用戶輸入電路設計數據,編輯電路設計數據,監視模擬和仿真進程,同時獲得結果,以及本質上控制模擬和仿真過程。儘管圖1中未顯示,但用戶接口包括可利用鍵盤和滑鼠輸入並顯示在顯示器上的用戶可訪問的菜單驅動選項和命令集。用戶通常使用具有鍵盤90的計算站80。用戶通常建立電子系統的特定電路設計並將其所設計系統的HDL(硬體描述語言)(一般為RTL級結構)編碼說明輸入工作站10。本發明的模擬仿真系統在其它操作中執行部件類型分析,用於劃分硬體和軟體之間的模型化。模擬仿真系統用軟體模型化行為級,RTL級和門級編碼。對於硬體模型化來說,系統可以模型化RTL級和門級編碼;但是,RTL級設計必須在硬體模擬之前與門級設計合成。門級編碼可被直接處理成可用的源設計資料庫格式,用於硬體模擬。使用RTL級和門級編碼,系統自動執行部件類型分析以完成劃分步驟。基於發生在軟體編譯時間中的劃分分析,系統將電路設計的一些部分映射入硬體以通過硬體加速來快速模擬。用戶還可將模型化的電路設計與目標系統相連以進行真實環境下的內電路仿真。因為軟體模擬和硬體加速引擎緊密耦合,所以通過軟體內核,用戶可以使用軟體模擬模擬整個電路設計,通過使用所映射電路設計的硬體模型來加速測試/調試過程,返回模擬部分,並返回硬體加速直到測試/調試過程完成。按每一循環周期模式以及按用戶意願在軟體模擬和硬體加速之間變換是本實施例的有價值的特點之一。此特點在調試過程中尤其有用,其使得用戶可以使用硬體加速模式快速的進入特定的點或周期,並接著使用軟體模擬檢測其後的多個點以調試電路設計。此外,模擬仿真系統使得用戶可以看見所有的部件,無論部件的內部實現是用硬體還是用軟體。模擬仿真系統通過從硬體模型中讀取寄存器值並接著當用戶要求此讀取時,使用軟體模型重新建立組合部件完成此過程。將在下文中更充分的討論這些及其他特點。工作站10與總線系統50相連。總線系統可為任何可用的總線系統,其使不同主體,例如工作站10,可重新配置的硬體模型20和仿真接口30實現可操作的連接。總線系統最好足夠快以為用戶提供實時或接近實時的結果。一種此類總線系統為外設部件互連(PCI)標準中所述的總線系統,其內容以引用的方式併入本文。目前,PCI標準的2.0版提供了33MHz的總線速度。2.1版提供了對66MHz總線速度的支持。從而,工作站10,可重新配置的硬體模型20和仿真接口30將遵循PCI標準。在一個實施例中,在PCI總線上處理工作站10和可重新配置的硬體模型20之間的通信。在此總線系統中還可發現其他的PCI適用設備。這些設備可以以和工作站10,可重新配置的硬體模型20和仿真接口30連接相同或不同等級連接至PCI總線。每個不同等級的PCI總線,例如PCI總線52,通過PCI到PCI橋接器51與另外等級的PCI總線連接,例如PCI總線50(如果存在的話)。在PCI總線52上,可能連接有兩個PCI設備53和54。可重新配置的硬體模型20包括現場可編程門陣列(FPGA)晶片陣列,其可被程式化配置和重新配置以模擬用戶電子系統設計的硬體部分。在此實施例中,硬體模型可重新配置;也就是說,其可重新配置其硬體以適合即將開始的特定計算或用戶電路設計。例如,如果需要許多加法器和乘法器,則系統就配置有許多加法器和乘法器。當需要其他的計算單元或功能時,它們也將模擬或形成在系統之中。這樣,可以最優化系統以執行專門的計算或邏輯操作。可重新配置的系統同時也具有靈活性,使得用戶在製造,測試或使用過程中較少的遇到硬體故障。在一個實施例中,可重新配置的硬體模型20包括一個由FPGA晶片組成的計算元件二元陣列,以向不同用戶電路設計和應用提供計算資源。後文將會討論更詳細的硬體配置過程。兩種此類FPGA晶片,包括Altera和Xilinx公司所銷售的晶片。在一些實施例中,通過使用現場可編程設備將可重新配置的硬體模型重新配置。但是,本發明的其他實施例可能通過使用專用集成電路(ASIC)技術實現。在其他一些實施例可為定製集成電路的形式。在典型的測試/調試環境下,將使用可重新配置的設備模擬/仿真用戶的電路設計,使得在真正的原形製造之前可以進行適當的改變。但是,在其他一些情況下,可以使用實際的ASIC或定製集成電路,儘管這樣剝奪了用戶快速經濟的改變可能的非功能電路設計以重新模擬和重新仿真的能力。然而有時,此類ASIC或定製集成電路已經製造完成並容易獲得,使可重新配置結合的晶片進行的仿真更為可取。根據本發明,工作站中的軟體,結合其外部硬體模型,與現有系統相比為終端用戶提供了程度更高的靈活性,控制性和性能。為了運行模擬和仿真,將確定電路設計的模型和相關參數(如,輸入測試平臺激勵,總系統輸出,中間結果)並提供給模擬軟體系統。用戶可以使用原理圖獲取工具或合成工具定義系統電路設計。用戶以電子系統的電路設計(一般為簡單示意圖的形式)為開始,接著使用合成工具將其轉變為HDL(硬體描述語言)形式。也可由用戶直接編寫HDL。作為範例的HDL語言包括Verilog和VHDL(VHSIC硬體描述語言);但是,也可使用其他語言。以HDL表示的電路設計包括許多並行部件。每個部件為一個編碼序列,其即定義了電路元件的行為又控制了模擬的執行。模擬仿真系統分析這些部件以確定其部件類型,並且編譯程序利用這些部件類型信息建立軟體和硬體中不同的執行模式。此後,用戶可使用本發明的模擬仿真系統。設計者可以通過對模擬模型應用多個激勵,例如輸入信號和測試向量圖型的模擬來驗證電路的精確性。如果在模擬過程中電路未按計劃運轉,則用戶通過修改電路示意圖或HDL文件重新定義電路。圖2中的流程圖顯示了本發明該實施例的應用。算法開始於步驟100。在將HDL文件載入系統後,系統對電路設計進行編譯,劃分並映射到適當的硬體模型。將在下文詳細討論編譯,劃分和映射步驟。在運行模擬之前,系統必須運行一個復位序列,以在硬體加速模型起作用之前去除軟體中所有的未知「x」值。本發明的一個實施例使用一2位寬數據通路提供總線信號的4個狀態值---「00」為邏輯低,「01」為邏輯高,「10」為「z」,「11」為「x」。如所屬
技術領域:
的技術人員所知,軟體模型可以處理「0」,「1」,「x」(總線爭用或未知值)和「z」(無驅動器或高阻抗)。相比而言,硬體無法處理未知值「x」,所以根據特定適用編碼而不同的復位序列將寄存器值復位成全「0」或全「1」。在步驟105,用戶確定是否模擬電路設計。通常,用戶首先以軟體模擬開始啟動系統。因此,如果步驟105的決定為「是」,則在步驟110開始軟體模擬。用戶可以停止模擬並檢查值(如步驟115所示)。事實上,用戶可以在測試/調試進程中的任何時間停止模擬,如從步驟115展開的虛線內所示,轉至硬體加速模式,ICE模式和後模擬模式中各個結點。執行步驟115將用戶帶到了步驟160。在停止之後,系統內核讀回硬體寄存器部件的狀態以重新生成整個軟體模型,如果用戶期望檢查組合部件值,則還包括組合部件。在恢復整個軟體模型之後,用戶可以檢查系統中的任何信號值。在停止和檢查之後,用戶可以繼續在唯模擬模式或硬體加速模式中運行。如流程圖中所示,步驟115轉到停止/值檢查程序。停止/值檢查程序開始於步驟160。在步驟165,用戶必須確定是否在此點停止模擬並檢查值。如果步驟165的結果為「是」,則步驟170停止當前可能正在進行的模擬並檢查各個值以檢驗電路設計的正確性。在步驟175,算法返回分支點,即步驟115。在此,用戶可以繼續模擬並為剩餘的測試/調試進程停止/檢查值或前進到內電路仿真步驟。同樣的,如果步驟105的結果為「否」,則算法將繼續硬體加速確定步驟120。在步驟120,用戶確定是否通過模型化電路設計的硬體部分加速模擬來加快測試/調試過程。如果步驟120的結果為「是」,那麼在步驟125開始硬體模型加速。在系統編譯過程中,模擬仿真系統將一些部分映射到硬體模型中。在此,當需要硬體加速時,系統將寄存器和組合部件移到硬體模型中並將輸入和估算值移到硬體模型中。因此,在硬體加速過程中,估算以增加的速度長時期發生在硬體模型中。內核將測試平臺輸出寫入硬體模型,更新軟體時鐘,接著按一循環接一循環模式讀取硬體模型輸出值。如果用戶需要,可以通過利用寄存器值重新生成組合部件以輸出寄存器值和組合部件,使來自用戶電路設計(整個電路設計)的整個軟體模型的值可用。因為需要軟體介入來重新生成這些組合部件,所以並非在每個循環周期都提供整個軟體模型值的輸出;而是僅在用戶需要時提供這些值。此說明書將在其後討論組合部件的重新生成過程。此外,如步驟115所示,用戶可以在任何時間停止硬體加速模式。如果用戶想要停止,算法進入步驟115和160以轉到停止/值檢查程序。在此,如在步驟115中,用戶可以在任何時間停止硬體加速模擬過程並檢查模擬過程的結果值,或者用戶可以繼續硬體加速模擬過程。停止/值檢查程序轉到步驟160,165,170和175,其在上文中已有介紹。在步驟125後返回主程序,用戶可以在步驟135確定是否繼續硬體加速模擬或執行純模擬。如果用戶想要進一步模擬,則算法進入步驟105。如果不是,則算法進入步驟140的後模擬分析。在步驟140,模擬仿真系統提供了多個後模擬分析特徵。系統記錄所有對硬體模型的輸入。對於硬體模型輸出,系統以用戶定義的記錄頻率(如,1/10,000記錄/周期)記錄硬體寄存器部件的所有值。記錄頻率決定了輸出值被記錄的頻度。對於1/10,000記錄/周期的記錄頻率來說,每10,000個周期記錄一次輸出值。記錄頻率越高,記錄下的用於後模擬分析的信息也越多。因為所選記錄頻率與模擬仿真速度有因果關係,所以用戶應仔細選擇記錄頻率。較高的記錄頻率將減低模擬仿真速度,因為在執行進一步模擬之前,系統必須花費時間和資源通過對存儲器執行輸入/輸出操作來記錄輸出值。關於後模擬分析,用戶將選擇期望模擬的特定點。然後用戶可以在模擬仿真後接著將記錄輸入硬體模型以計算值變化和所有硬體部件的內部狀態,通過運行軟體模擬來進行分析。應注意使用了硬體加速器模擬所選定記錄點的數據以分析模擬結果。該後模擬分析方法可以聯接至任何的模擬波形觀測儀以用於後模擬分析。隨後將有更詳細的討論。在步驟145,用戶可以選擇在其目標系統環境中仿真模擬的電路設計。如果步驟145的結果為「否」,算法終止並且模擬仿真過程終止於步驟155。如果期望結合目標系統進行仿真,則算法進入步驟150。此步驟涉及激活仿真接口板,將電纜和晶片引腳接頭插入目標系統,以及運行目標系統以獲取來自目標系統的系統輸入/輸出。來自目標系統的系統輸入/輸出包括目標系統和電路設計的仿真之間的信號。仿真的電路設計從目標系統接收輸入信號,處理這些信號,將信號傳送給模擬仿真系統用於進一步處理,並且將處理後的信號輸出給目標系統。另一方面,仿真的電路設計將輸出信號傳送給目標系統,目標系統對信號進行處理,並且可能將處理後的信號輸出回仿真的電路設計。按這種方法,可以在其自然的目標系統環境下評估電路設計的性能。在結合目標系統進行仿真之後,用戶具有的結果可以驗證電路設計或揭示其非功能特徵。此時,如步驟135所示,用戶可以再次進行模擬/仿真,全部停止以改進電路設計,或基於驗證的電路設計進行集成電路的製造。III.模擬/硬體加速模式圖3顯示了根據本發明一實施例,在編譯時間和運行時間中軟體編譯和硬體配置的高層圖。圖3顯示了兩組信息一組信息區分了在編譯時間和模擬/仿真運行時間中執行的操作;另一組信息顯示了軟體模型和硬體模型之間的劃分。開始時,根據本發明一實施例的模擬仿真系統需要用戶電路設計作為輸入數據200。用戶電路設計為某種HDL文件的形式(如Verilog,VHDL)。模擬仿真系統分析HDL文件,將行為級碼,寄存器傳送碼和門級編碼歸納為可供模擬仿真系統使用的形式。系統生成源設計資料庫用於前端處理步驟205。現在,處理後的HDL文件可供模擬仿真系統使用。如所屬
技術領域:
的技術人員所知,分析過程將ASCII數據轉換成內部二進位數據結構。請參見ALFREDV.AHO,RAVISETHI,和JEFFREYD.ULLMAN的COMPILERSPRINCIPLES,TECHNIQUES,ANDTOOLS(1988),其內容以引用的方式併入本文。編譯時間由過程225表示而運行時間由過程/單元230表示。如過程225所示,在編譯時間內,模擬仿真系統通過執行部件類型分析編譯處理後的HDL文件。部件類型分析將HDL部件分成組合部件,寄存器部件,時鐘部件,存儲器部件以及測試平臺部件。實質上,系統將用戶電路設計分成控制和估算部件。模擬仿真編譯程序210實質上將模擬的控制部件映射到軟體中,將估算部件映射到軟體和硬體中。編譯程序210生成用於所有HDL部件的軟體模型。軟體模型形成於編碼215中。此外,模擬仿真編譯程序210使用HDL文件的部件類型信息,從程序庫或模塊發生器中選擇或生成硬體邏輯塊/元件,並生成用於特定HDL部件的硬體模型。最終結果為所謂的「位流」配置文件220。在運行時間的準備期,編碼形式的軟體模型儲存在主存儲器中,與根據本發明一實施例的模擬仿真程序有關的應用程式也儲存在主存儲器中。在通用處理器或工作站240中處理此編碼。基本上與此同時,用於硬體模型的配置文件220被用來將用戶電路設計映射到可重新配置的硬體板250中。在此,電路設計已經在硬體中模型化的部分被映射並分配到可重新配置的硬體板250中的FPGA晶片中。如上所述,對通用處理器或工作站240應用用戶測試平臺激勵和測試向量數據以及其他測試平臺資源235以用於模擬目的。此外,用戶可以通過軟體控制執行電路設計的仿真。可重新配置的硬體板250包含用戶的仿真電路設計。該模擬仿真系統使用戶可以選擇性的在軟體模擬和硬體仿真之間變換,以及按一循環接一循環模式在任何時間停止模擬或仿真過程,以檢查模型中每個部件(寄存器或組合部件)的值。因此,模擬仿真系統在測試平臺235和處理器/工作站240之間傳送數據用於模擬,在測試平臺235和可重新配置的硬體板250之間通過數據總線245和處理器/工作站240傳送數據用於仿真。如果包括一個用戶目標系統260,則仿真數據可以通過仿真接口255和數據總線245在可重新配置的硬體板250和目標系統260之間傳送。內核存在於處理器/工作站240的存儲器的軟體模擬模型中,所以數據必須通過數據總線245在處理器/工作站240和可重新配置的硬體板250之間傳送。圖4顯示了根據本發明一實施例的編譯過程流程圖。圖3中的編譯過程由過程205和210表示。圖4中的編譯過程開始於步驟300。步驟301處理前端信息。在此,生成門級HDL編碼。用戶通過直接手寫編碼或使用一些形式的原理圖獲取或合成工具生成門級HDL編碼以將初始電路設計轉化為HDL形式。模擬仿真系統將HDL文件(ASCII格式)解析成二進位格式,從而將行為級編碼,寄存器傳送(RTL)級編碼和門級編碼歸納為可供模擬仿真系統使用的內部數據結構形式。系統生成包含解析後HDL編碼的源設計資料庫。步驟302通過將HDL部件分成如部件類型資源303所示的組合部件,寄存器部件,時鐘部件,存儲器部件以及測試平臺部件執行部件類型分析。模擬仿真系統生成用於寄存器和組合部件的硬體模型,並伴隨一些例外情況,將在下文中討論。測試平臺和存儲器部件被映射在軟體中。一些時鐘部件(如,派生的時鐘)在硬體中模擬,其他則位於軟體/硬體邊界處(如,軟體時鐘)。組合部件為無狀態邏輯部件,其輸出值為當前輸入值的函數並且不依賴於輸入值的歷史。組合部件的範例包括基本門電路(如,與,或,異或,非),選擇器,加法器,乘法器,移位器,和總線驅動器。寄存器部件為簡單的存儲部件。寄存器的狀態轉變由時鐘信號控制。一種寄存器的形式為邊緣觸髮式,當檢測到邊緣時其發生狀態改變。另一種寄存器的形式為鎖存器形式,其為電平觸發。示範例包括觸發器(D-型,JK-型)以及電平敏感鎖存器。時鐘部件為將周期信號傳送給邏輯裝置以控制其行為的部件。通常,時鐘信號控制寄存器的更新。主時鐘由自時序的測試平臺程序生成。例如,用於生成時鐘的典型測試平臺Verilog程序如下alwaysbeginClock=0;#5;Clock=1;#5;end;根據此編碼,時鐘信號初始於邏輯「0」。在5個時間單位後,時鐘信號變為邏輯「1」。再在5個時間單位後,時鐘信號返回邏輯「0」。主時鐘信號一般用軟體生成並且在典型用戶電路設計中僅有少數(即,1-10個)主時鐘。從由主時鐘依次驅動的組合邏輯和寄存器的網絡中生成派生的或門控時鐘。在典型用戶電路設計中有許多(即,1000或更多)派生的時鐘。存儲器部件為塊存儲部件,其具有地址和控制線以訪問特定存儲位置中的單獨數據。範例包括ROM(只讀存儲器),異步RAM(隨機存貯器),和同步RAM。測試平臺部件為用於控制和監視模擬過程的軟體處理。因此,這些部件不是在試驗中的硬體電路設計的一部分。測試平臺部件通過生成時鐘信號,初始化模擬數據,並從磁碟/存儲器中讀取模擬測試向量圖型來控制模擬。測試平臺部件還通過檢查值的變化,執行變值轉儲,檢查信號值關係上的斷言約束,將輸出測試向量寫入磁碟/存儲器,並與不同的波形觀測儀與調試程序連接來監視模擬過程。模擬仿真系統按下列步驟執行部件類型分析。系統檢查二進位源設計資料庫。基於源設計資料庫,系統可將元件歸為上述部件類型的一種。連續賦值語句被歸為組合部件。門基元(gateprimitives)根據語言定義可為組合類型或寄存器類型的鎖存器形式。初始化編碼被看作初始化類型的測試平臺。不使用網絡而驅動網絡的始終處理(alwaysprocess)為驅動器類型的測試平臺。不驅動網絡而讀取網絡的始終處理為監示器類型的測試平臺。具有延遲控制或多重事件控制的始終處理為通用類型的測試平臺。具有單一事件控制並驅動單一網絡的始終處理可為下列中的一種(1)如果事件控制為邊緣觸發事件,那麼此程序為一個邊緣觸髮型寄存器部件。(2)如果在一程序中被驅動的網絡未定義在所有可能的執行通路中,那麼該網絡為寄存器的鎖存器類型。(3)如果在一程序中被驅動的網絡定義在所有可能的執行通路中,那麼該網絡為組合部件。具有單一事件控制但驅動多個網絡的始終處理可分解成單獨驅動每個網絡的程序以分別取得其相應的部件類型。可使用分解過程確定部件類型。步驟304生成用於所有HDL部件的軟體模型,不考慮其部件類型。通過適當的用戶接口,用戶可以使用完整的軟體模型模擬整個電路設計。使用測試平臺程序驅動激勵輸入,測試向量圖型,控制總體模擬,並監視模擬過程。步驟305執行時鐘分析。時鐘分析包括兩個一般步驟(1)提取時鐘提取和順序映射,以及(2)時鐘網絡分析。提取時鐘提取和順序映射步驟包括將用戶的寄存器部件映射到模擬仿真系統的硬體寄存器模型中,並接著從系統硬體寄存器部件中提取時鐘信號。時鐘網絡分析步驟包括基於提取的時鐘信號確定主時鐘和派生的時鐘,並分離門控時鐘網絡和門控數據網絡。將結合圖16進行更詳細的說明。步驟306執行滯留選擇(residenceselection)。與用戶相結合,系統為硬體模型選擇部件;也就是說,在所有可以在用戶電路設計的硬體模型中實現的可能硬體部件中,一些硬體部件由於多種原因將不會在硬體中模擬。這些原因包括部件類型,硬體資源限制(即,停留在軟體中的浮點運算和大型乘法運算),模擬和通信開支(即,停留在軟體中測試平臺程序之間的小型橋接器邏輯,以及停留在軟體中由測試平臺程序監視的信號),以及用戶偏愛。由於包括性能和模擬監測的眾多原因,用戶可以迫使本應在硬體中模擬的特定部件留在軟體中。步驟307將所選硬體模型映射到可重新配置的硬體仿真板上。具體的說,步驟307獲取連線表並將電路設計映射到特定的FPGA晶片中。此步驟包括將邏輯元件分組或群集。系統然後將每一組分配到一唯一FPGA晶片和將幾個組分配到一個FPGA晶片中。總體上說,系統將元件組分配到FPGA晶片中。下文將結合圖6進行更詳細的說明。系統將硬體模型部件放入FPGA晶片網格中以最小化晶片間通信的開支。在一個實施例中,陣列包括一個4×4的FPGA陣列,一個PCI接口單元,以及一個軟體時鐘控制單元。FPGA陣列實現了用戶電路設計的一部分,如上述此軟體編譯過程的步驟302-306中所確定的一樣。PCI接口單元允許了可重新配置的硬體仿真模型通過PCI總線和工作站進行通信。軟體時鐘避免了多個時鐘信號進入FPGA陣列時的競態狀態。此外,步驟307根據硬體模型間的通信進度表給FPGA晶片布線。步驟308插入控制電路。這些控制電路包括輸入/輸出地址指示器和數據總線邏輯,其用於聯繫DMA引擎到模擬器(下文中將結合圖11,12和14進行討論),以及估算控制邏輯,以控制硬體狀態轉變和導線多重傳輸(下文中將結合圖19和20進行討論)。如所屬
技術領域:
中的技術人員所知,一個直接存儲器存取(DMA)單元提供了外圍設備和主存儲器之間的附加數據通道,在其中外圍設備可以直接訪問(即,讀,寫)主存儲器而不需CPU的介入。每個FPGA晶片中的地址指示器允許數據根據總線尺寸限制在軟體模型和硬體模型之間移動。估算控制邏輯實質上為一個有限狀態機,其確保在時鐘和數據輸入進入這些寄存器之前時鐘啟動到待斷言的寄存器的輸入。步驟309生成用於將硬體模型映射到FPGA晶片的配置文件。實質上,步驟309將電路設計部件分配給每個晶片上的特定單元或門級部件。鑑於步驟307確定硬體模型組到特定FPGA晶片的映射,步驟309取得此映射結果並為每個FPGA晶片生成配置文件。步驟310生成軟體內核代碼。內核為控制整個模擬仿真系統的軟體代碼序列。直到此點才可以生成內核,因為代碼的一部分需要更新和估算硬體部件。僅在步驟309之後,才發生到硬體模型和FPGA晶片的正確映射。下文中將結合圖5進行更詳細的討論。編譯終止於步驟311。如上文中結合圖4所述,在確定軟體和硬體模型之後,於步驟310生成軟體內核代碼。內核為模擬仿真系統中控制整個系統操作的一段軟體。內核控制軟體模擬以及硬體仿真的執行。因為內核也存在於硬體模型的中心,所以模擬器是與仿真器相結合的。與其他已知的協同模擬系統相比較,根據本發明一實施例的模擬系統不需要模擬器從外部與仿真器互相作用。內核的一個實施例為圖5所示的控制迴路。參見圖5,內核開始於步驟330。步驟331對初始化編碼進行估算。控制迴路開始於步驟332並結束於決策步驟339,不斷的開始並循環直到系統觀測不到有效的測試平臺程序,在此情況下表示模擬或仿真進程已完成。步驟332估算有效的測試平臺部件用於模擬或仿真。步驟333估算時鐘部件。這些時鐘部件來自測試平臺程序。通常,由用戶規定所生成的供給模擬系統的時鐘信號類型。在一個例子中(在上文結合部件類型分析時討論過並複製在此),用戶在測試平臺程序中設計的時鐘部件如下alwaysbeginClock=0;#5;Clock=1;#5;end;在此時鐘部件示例中,用戶決定首先產生邏輯「0」信號,並且在5個模擬時間後,將產生一個邏輯「1」信號。此時鐘生成過程將不斷循環直到被用戶停止。這些模擬時間由內核推進。決策步驟334詢問是否檢測到任何有效的、將導致形成軟體中一些類型的邏輯估算和可能硬體模型(如果仿真正在運行)的時鐘邊沿。內核用來檢測有效時鐘邊沿的時鐘信號為來自測試平臺程序的時鐘信號。如果決策步驟334的估算結果為「否」,則內核進入步驟337。如果決策步驟334的估算結果為「是」,則導致步驟335更新寄存器和存儲器,步驟336傳送組合部件。步驟336實質上維護組合邏輯,組合邏輯在斷言一個時鐘信號之後,需要一些時間通過組合邏輯網絡傳送值。一旦值已通過組合部件傳送並已穩定,內核進入步驟337。應注意寄存器和組合部件也在硬體中模擬,因此,內核控制模擬仿真系統的仿真器部分。事實上,內核可以在步驟334和335中加速對硬體模型的估算,無論是否檢測到任何有效的時鐘邊沿。因此,不同於現有技術,根據本發明一實施例的模擬仿真系統可以通過軟體內核並基於部件類型(如,寄存器,組合部件)加速硬體仿真器。此外,內核按每一循環周期模式控制軟體和硬體模型的執行。實質上,仿真器硬體模型可以被特徵化為運用模擬內核的通用處理器的模擬協同處理器,其可以運行模擬內核。協同處理器加速了模擬任務。步驟337估算有效的測試平臺部件。步驟338推進模擬時間。步驟339提供開始於步驟332的控制迴路的邊界。步驟339確定是否有任何的測試平臺程序是有效的。如果有,那麼將繼續運行模擬和/或仿真並估算更多的數據。這樣,內核循環到步驟332去估算任何有效的測試平臺部件。如果沒有測試平臺程序是有效的,則完成模擬和仿真過程。步驟340終止模擬/仿真過程。總而言之,內核為控制整個模擬仿真系統操作的主控制迴路。只要有任何測試平臺程序是有效的,內核就估算有效的測試平臺部件,估算時鐘部件,檢測時鐘邊沿以更新寄存器和存儲器以及傳送組合邏輯數據,並推進模擬時間。圖6顯示了自動將硬體模型映射到可重新配置的電路板上的方法的一個實施例。連線表文件提供了硬體實現過程的輸入。連線表描述了邏輯功能和其互連。硬體模型到FPGA實現過程包括三個獨立的任務映射,布局和布線。工具通常被稱為「布局及布線」工具。使用的設計工具可以是ViewlogicViewdraw(一種原理圖獲取系統),和XilinxXact布局及布線軟體,或Altera的MAX+PLUSII系統。映射任務將電路設計分成邏輯塊,輸入/輸出塊,和其他FPGA資源。儘管一些邏輯功能,例如觸發器和緩衝器可直接映射到相應的FPGA資源中,但其他的邏輯功能,例如組合邏輯則必須使用映射算法在邏輯塊中實現。用戶通常可以對映射進行選擇以獲得最佳的密度或最佳的性能。布局任務涉及從映射任務中取得邏輯和輸入/輸出塊並將它們分配到FPGA陣列中的物理位置。目前的FPGA工具一般使用三種技術的組合極小切割(minicut),模擬退火(simulatingannealing),和常規力指向鬆弛(generalforce-directedrelaxation,GFDR)。這些技術本質上確定了基於不同費用函數的最佳布局,費用函數依賴於互連的總網絡長度或沿一組關鍵信號通路的延遲,以及其他的變量。XilinxXC4000系列FPGA工具使用一種極小切割技術的變型進行初始布局,再使用GFDR技術對布局進行細微改進。布線任務涉及確定用於互連多個經過映射和布局的塊的布線路徑。一種此類路由器,被稱為迷宮路由器,可尋找兩點間的最短路徑。由於布線任務提供了晶片間的直接互連,所以與晶片有關的電路布局就很關鍵。在開始時,可在門級連線表350或RTL357中描述硬體模型。RTL級編碼可被進一步的合成為門級連線表。在映射過程中,可以使用合成器伺服器360,例如Altera的MAX+PLUSII可編程邏輯開發工具系統和軟體,產生用於映射目的的輸出文件。合成器伺服器360可以將用戶的電路設計部件與程序庫361中的任何標準的現有邏輯元件(例如,標準加法器或標準乘法器)相匹配,生成任何參數化和頻繁使用的邏輯模塊362(如,非標準的乘法器或非標準的加法器),併合成隨機邏輯元件363(如,執行定製邏輯功能的基於檢查表的邏輯)。合成器伺服器還去除多餘的邏輯和未使用的邏輯。輸出文件實質上合成或優化了用戶電路設計所需的邏輯。當一些或所有的HDL處於RTL級時,電路設計部件處於足夠高的級別,使得模擬仿真系統可以輕易的利用模擬仿真寄存器或部件將這些部件模型化。當一些或所有的HDL處於門級連線表層次時,電路設計部件可能為更加電路設計專業化,使用戶電路設計部件到模擬部件的映射更加困難。因此,合成器伺服器有能力生成任何基於標準邏輯元件變體或與這些變體無任何類似的隨機邏輯元件或程序庫標準邏輯元件的邏輯元件。如果電路設計為門級連線表的形式,模擬仿真系統將首先執行分組或分類操作351。硬體模型結構基於分類過程,因為組合邏輯和寄存器是與時鐘分離的。因此,共享一個公共主時鐘或門控時鐘信號的邏輯元件通過將它們集合在一起並共同安置在一個晶片上,可以被更好的服務。分類算法基於連通性驅動,分級析取,以及規則結構析取。如果描述是在結構化的RTL358中,那麼模擬仿真系統可以將功能分解成更小的單元,如邏輯功能分解操作359所表示的一樣。在任何階段,如果需要邏輯合成或邏輯優化,則可用合成器伺服器360根據用戶的指令將電路設計轉變為更有效的表示。對於分類操作351,由虛線箭頭364表示其與合成器伺服器的連接。對於結構化RTL358,由箭頭365表示其與合成器伺服器360的連接。對於邏輯功能分解操作359,由箭頭366表示其與合成器伺服器360的連接。分群操作351基於功能和尺寸以選擇性的方式將邏輯部件組成在一起。操作可能僅涉及一小型電路設計的一個群集或一大型電路設計的多個群集。無論如何,這些邏輯元件的群集將在後面步驟中使用以將其映射到指定的FPGA晶片中;也就是說,一個群集將指向一個特定的晶片,而另一個群集指向一個不同的晶片或可能與第一個群集指向相同的晶片。一個群集中的邏輯元件通常一起安置於一個晶片中,但是為了最優化目的,也可能不得不將一個群集分解到多個晶片中。在分群操作351中形成群集後,系統執行布局及布線操作。首先,執行將群集安置入FPGA晶片的粗粒布局操作352。粗粒布局操作352首先將邏輯元件的群集安置於所選的FPGA晶片中。如果需要,系統可將合成器伺服器360提供給粗粒布局操作352使用,如箭頭367所示。在粗粒布局操作後執行細粒布局操作以細微調整初始的布局。模擬仿真系統使用基於引腳使用率要求,門電路使用率要求和門到門跳躍的費用函數確定粗粒和細粒布局操作的最佳布局。群集怎樣布局在特定晶片中是基於布局成本確定的,布局成本通過兩個或多個電路(即,CKTQ=CKT1,CKT2,.....,CKTN)的費用函數f(P,G,D)和電路在FPGA晶片陣列中的相應位置計算而成,其中P一般指引腳使用/可用性,G一般指門電路使用/可用性,D為連通度矩陣M定義的門到門跳躍的距離或數量(如圖7和圖8所示)。模型化在硬體模型中的用戶電路設計包含電路CKTQ的總的組合。定義每個費用函數,使得計算出的布局成本的計算值總體上有助於(1)在FPGA陣列中,實現任何兩個電路CKTN-1和CKTN之間「跳躍」的最小數量,以及(2)FPGA陣列中電路CKTN-1和CKTN的布局,以獲得最低的引腳使用率。在一個實施例中,費用函數F(P,G,D)被定義為此方程可簡化為下列形式f(P,G,D)=C0*P+C1*G+C2*D第一項(即,C0*P)基於所使用引腳的數量和可用的引腳數量生成第一布局成本值。第二項(即,C1*G)基於所使用門電路的數量和可用的門電路數量生成第二布局成本值。第三項(即,C2*D)基於在電路CKTQ(即CKT1,CKT2,.....,CKTN)中不同互連門電路間存在的跳躍的數量生成一布局成本值。通過迭代地累加這三個布局成本值產生總的布局成本值。常數C0,C1和C2代表加權常數,通過這三個加權常數,可以選擇性地使從該費用函數得出的總的布局成本值,偏向在任何累加的布局成本計算過程中最為重要的一個因素或多個因素(即,引腳使用、門電路使用或門到門跳躍)。隨著系統為加權常數C0,C1和C2選擇不同的相關值,重複計算布局成本。因此,在一個實施例中,在粗粒布局操作過程中,系統相對於C2為C0和C1選擇較大值。在此重複過程中,系統確定在FPGA晶片陣列中電路CKTQ的初始布局中,最優化引腳使用/可用性和門電路使用/可用性比最優化門到門跳躍更重要。在隨後的重複過程中,系統相對於C2為C0和C1選擇較小值。在此重複過程中,系統確定最優化門到門跳躍比最優化引腳使用/可用性和門電路使用/可用性更重要。在細粒布局操作過程中,系統使用相同的費用函數。在一個實施例中,關於選擇C0,C1和C2的反覆步驟與粗粒布局操作中的步驟是相同的。在另一個實施例中,細粒布局操作涉及讓系統相對於C2為C0和C1選擇較小值。現在將解釋這些變量和方程。為確定是否在FPGA晶片x或FPGA晶片y(在其他FPGA晶片中)中布置特定電路CKTQ,費用函數將檢查引腳使用/可用性(P),門電路使用/可用性(G),和門到門跳躍(D)。基於費用函數變量P,G和D,費用函數f(P,G,D)生成在FPGA陣列的特定位置布置特定電路CKTQ的布局成本值。引腳使用/可用性P還表示輸入/輸出容量。Pused為每個FPGA晶片的電路CKTQ所使用的引腳數量。Pavailable為在FPGA晶片中可用的引腳數量。在一個實施例中,Pavailable為264(44個引腳×6個互連/晶片),而在另一個實施例中,Pavailable為265(44個引腳×6個互連/晶片+1個附加引腳)。但是,可用引腳的特定數量取決於所使用的FPGA晶片的類型,每晶片所使用互連的總數量,以及每個互連所使用的引腳數量。因此,Pavailable可以有很大變化。所以,為估算費用函數F(P,G,D)方程的第一項(即,C0*P),要計算每個FPGA晶片的Pused/Pavailable的比率。這樣,對於一個4×4FPGA晶片陣列,要計算16個Pused/Pavailable比率。對於一給定的可用引腳數量來說,所使用的引腳數量越多,比率就越高。在計算出的16個比率中,選擇最高的比率值。通過將所選最大比率Pused/Pavailable與加權常數C0相乘,從第一項C0*P中計算出第一布局成本值。因為此第一項依賴於計算出的比率Pused/Pavailable和為每個FPGA晶片計算出的比率中的特定最大比率,所以在其他因素相同的情況下,引腳使用率越高,布局成本值也越高。系統選擇布局成本最低的布局。通常認為,所有其他因素都相同的情況下,達到在所有為不同布局計算的最大值中最小的一個最大比率Pused/Pavailable的特定布局為FPGA陣列中的最佳布局。門電路使用/可用性G基於每個FPGA晶片所容許的門電路數量。在一個實施例中,基於陣列中電路CKTQ的位置,如果在每個晶片中所使用的門電路數量Gused高於一個固定閾值,那麼此第二布局成本(C1*G)將被賦予一個值,表明布局不可行。類似的,如果在每個包含電路CKTQ的晶片中所使用的門電路數量等於或低於固定閾值,那麼此第二項(C1*G)將被賦予一個值,表明布局可行。因此,如果系統開始時期望在一特定晶片中布置電路CKT1,並且此晶片不具有足夠多的門電路以容納電路CKT1,那麼系統將通過費用函數得出此特定布局不可行的結論。通常,G具有很高的數字(如,無限)保證了費用函數將產生高的布局成本值,表明所期望的電路CKTQ的布局不可行,並且應該確定替代的布局。在另一個實施例中,基於陣列中電路CKTQ的位置,計算每個晶片的比率Gused/Gavailable,其中Gused為每個FPGA晶片中電路CKTQ所使用的門電路數量,Gavailable為在FPGA晶片中可用的門電路數量。在一個實施例中,系統將FLEX10K100晶片用於FPGA陣列。FLEX10K100晶片包含大約100,000個門電路。因此,在該實施例中,Gavailable等於100,000個門電路。這樣,對於一個4×4FPGA晶片陣列,要計算16個Gused/Gavailable比率。對於一給定的可用門電路數量來說,所使用的門電路數量越多,比率就越高。在計算出的16個比率中,選擇最高的比率值。通過將所選最大比率Gused/Gavailable與加權常數C1相乘,從第二項C1*G中計算出第二布局成本值。因為此第二項依賴於計算出的比率Gused/Gavailable和為每個FPGA晶片計算出的比率中的特定最大比率,所以在其他因素相同的情況下,門電路使用率越高,布局成本值也越高。系統選擇布局成本最低的布局。通常認為,在所有其他因素都相同的情況下,達到在所有為不同布局計算的最大值中最小的一個最大比率Gused/Gavailable的特定布局為FPGA陣列中的最佳布局。在另一個實施例中,系統首先為C1選擇一些值。如果比率Gused/Gavailable大於「1」,則此特定布局不可行(即,至少一個晶片不具有足夠多的門電路用於此特定電路布局)。從而,系統將C1修改成非常大的數字(如,無限)並因此,第二項C1*G也將為非常大的數字,總的布局成本值f(P,G,D)也將很高。另一方面,如果比率Gused/Gavailable小於或等於「1」,那麼此特定布局可行(即,每個晶片具有足夠多的門電路以支持電路的實現)。從而,系統不修改C1並因此,第二項C1*G將具有一個特定值。第三項C2*D代表需要互連的所有門電路之間的跳躍的數量。跳躍的數量也取決於互連矩陣。連通度矩陣提供了確定需要晶片-到-晶片互連的任何兩個門電路之間電路通道的基礎。並非每個門電路都需要門-到-門的互連。基於用戶的原始電路設計和將群集劃分到特定晶片,一些門電路不需要任何互連,因為與其各自輸入(多個輸入)和輸出(多個輸出)相連的邏輯元件(多個邏輯元件)位於相同晶片中。但是其他的門電路則需要互連,因為與其各自輸入(多個輸入)和輸出(多個輸出)相連的邏輯元件(多個邏輯元件)位於不同的晶片中。為了理解「跳躍」,請參看圖7中表格形式和圖8中圖像形式的連通度矩陣。在圖8中,晶片間的每個互連,例如晶片F11和晶片F14間的互連602,代表44個引腳或44條導線線路。在其他實施例中,每個互連代表超過44個的引腳。再在其他實施例中,每個互連代表少於44個的引腳。利用此互連方案,數據可以在兩次「跳躍」或「跳轉」中從一個晶片傳到另一個晶片。因此,數據可以利用一次跳躍通過互連601從晶片F11傳到晶片F12,數據可以利用兩次跳躍通過互連600和606或互連603和610從晶片F11傳到晶片F33。這些跳躍的示例為這些晶片組之間最短的跳躍路徑。在一些情況下,信號的路徑將穿過多個晶片,使得在一個晶片中的門電路和另一個晶片中的門電路之間跳躍的數量超過了最短跳躍路徑。只有需要互連的電路通道必須被檢測以確定門-到-門跳躍的數量。連通度由所有需要晶片間互連的門電路間跳躍的總和表示。使用圖7和圖8的連通度矩陣,任何兩晶片間的最短路徑可以由一次或兩次「跳躍」代表。但是,對於特定硬體模型實現來說,輸入/輸出容量可能限制了陣列中任何兩門電路之間最短路徑直接連接的數量,並且因此,這些信號將經過更長的路徑(因此多於兩次跳躍)以到達目的地。從而,對於一些門-到-門連接,跳躍的數量可能超過兩次。通常,在其他條件相等的情況下,越少的跳躍次數將產生越低的布局成本。第三項(即,C2*D)的詳細形式如下此第三項為加權常數C2和總和部分(S...)的乘積。總和部分實質上為需要晶片到晶片互連的用戶電路設計中每個門電路i和門電路j之間所有跳躍的總和。如上所述,並非所有的門電路都需要晶片間互連。對於那些需要晶片間互連的門電路i和門電路j來說,跳躍的次數已經確定。對於所有的門電路i和門電路j來說,將總的跳躍次數相加。距離計算也可定義如下在此,M為連通度矩陣。連通度矩陣的一個實施例如圖7所示。計算每個需要互連的門到門連接的距離。因此,對於每個門電路i和門電路j的關係,檢驗連通度矩陣M。更明確表示為,建立包含陣列中所有晶片的矩陣,使得每個晶片具有可識別的編號。這些識別編號設置在矩陣的頂部作為列標題。同樣的,將這些識別編號設置在矩陣的一側作為行標題。在此矩陣中行和列相交的地方的特定表列值提供了行編號和列編號相交的兩晶片之間的直接連通數據。對於晶片i和晶片j之間任何的距離計算,矩陣Mi,j中的表列值包括「1」(直接連接)或「0」(非直接連接)。指數k指的是連接需要互連的晶片i中任何門電路和晶片j中任何門電路所需的跳躍次數。首先,應測試k=1的連通度矩陣Mi,j。如果表列值為「1」,則此晶片i中的門電路和晶片j中所選門電路之間存在直接連接。因此,指定指數或跳躍k=1作為Mi,j的結果並且此結果為兩個門電路之間的距離。在此時,可以測試其他的門-到-門連接。但是,如果表列值為「0」,則不存在直接連接。如果不存在直接連接,則應測試下一個k。這個新的k(即,k=2)可以通過將矩陣Mi,j與其自身相乘而計算出;換句話說,M2=M*M,其中k=2。此將M與其自身相乘直到晶片i和晶片j的特定行和列的表列值的過程將繼續,直到計算出的結果為「1」,此時選擇指數k作為跳躍的次數。操作包括對矩陣M進行「與」操作,並接著對「與」操作的結果進行「或」運算。如果矩陣mi,l和ml,j之間「與」操作的結果為邏輯值「1」,那麼在晶片i中所選門電路和晶片j中所選門電路之間存在連接,此連接通過任何晶片l並在k次跳躍之內;如果不是,則在此特定的k次跳躍之內不存在連接並且需要進一步的計算。矩陣mi,l和ml,j為被定義用於硬體模型化的連通度矩陣M。對於任何需要互連的給定門電路i和門電路j來說,包含用於矩陣mi,l中門電路i的FPGA晶片的行和包含用於門電路j和ml,j的FPGA晶片的列進行邏輯「與」操作。對單獨的「與」後地分量進行「或」操作以確定對於指數或跳躍k的結果Mi,j值是「1」還是「0」。如果結果是「1」,則存在連接並且指定指數k為跳躍的次數。如果結果是「0」,則不存在連接。下面的例子表明了這些原則。參見圖35(A)到35(D)。圖35(A)顯示了由雲狀物1090表示的用戶的電路設計。此電路設計1090可以簡單或複雜。電路設計109的一部分包括「或」門1091和兩個「與」門1092和1093。「與」門1092和1093的輸出與「或」門1091的輸入連接。這些門電路1091,1092和1093也可以與電路設計1090的其他部分連接。參見圖35(B),電路1090的部件,包括包含三個門電路1091,1092和1093的部分,被設置並布局在FPGA晶片1094,1095和1096上。此FPGA晶片陣列的具體示範例具有所示的互連方案;即,一組互連1097連接晶片1094和晶片1095,另一組互連1098連接晶片1095和晶片1096。在晶片1094和晶片1096之間沒有直接的互連。當將此電路設計1090的部件安置在晶片中時,系統使用預設計的互連方案在不同的晶片之間連接電路通道。參見圖35(C),一個可能的結構和布局是將「或」門1091安置在晶片1094上,將「與」門1092安置在晶片1095上,並將「與」門1093安置在晶片1096上。未顯示電路1090的其他部分作為示範。「或」門1091和「與」門1092之間的連接需要一個互連,因為它們位於不同的晶片中,於是使用了一組互連1097。此互連的跳躍次數為「1」。「或」門1091和「與」門1093之間的連接也需要一個互連,於是使用了互連組1097和1098。跳躍次數為「2」。對於此布局示例,不考慮未圖示的電路1090剩下部分的其他門電路和互連的作用,跳躍總次數為「3」。圖35(D)顯示了另一個布局示例。在此,「或」門1091安置於晶片1094上,「與」門1092和1093安置於晶片1095上。也未顯示電路1090的其他部分作為示範。「或」門1091和「與」門1092之間的連接需要一個互連,因為它們位於不同的晶片中,於是使用了一組互連1097。此互連的跳躍次數為「1」。「或」門1091和「與」門1093之間的連接也需要一個互連,於是使用了互連組1097。跳躍次數也為「1」。對於此布局示例,不考慮未圖示的電路1090剩下部分的其他門電路和互連的作用,跳躍總次數為「2」。於是,僅基於距離參數D並假設任何其他因素都相等,所計算出的圖35(D)布局示例的費用函數要低於圖35(C)布局示例的費用函數。但是,其他的因素並不都相等。很可能,圖35(D)的費用函數還基於門電路使用/可用性G。在圖35(D)中,晶片1095中比圖35(C)中的相同晶片多使用了一個門電路。此外,在圖35(C)的布局示例中的晶片1095的引腳使用/可用性P要大於圖35(D)的另一布局示例中的相同晶片的引腳使用/可用性。在粗粒布局之後,對於展平的群集布局的細微調整將進一步優化布局結果。此細粒布局操作353改進了由粗粒布局操作352開始時選擇的布局。在此,如果能達到更優化的效果,可能將初始的群集分離。例如,假設邏輯元件X和Y原來是群集A的一部分並分配到FPGA晶片1。由於細粒布局操作353,現在邏輯元件X和Y可能被指定為獨立的群集B或成為另一個群集C的一部分並布局在FPGA晶片2中。接著將生成聯繫用戶電路設計和指定FPGA的FPGA連線表354。怎樣分離群集並將其布局在特定晶片中也是基於布局成本而確定,布局成本則通過電路CKTQ的費用函數f(P,G,D)計算。在一個實施例中,細粒布局過程所使用的費用函數與粗粒布局過程所使用的費用函數是相同的。兩個布局過程之間僅有的差異在於它們布局的群集的大小,而不是過程本身。粗粒布局過程與細粒布局過程相比使用更大的群集。在另一個實施例中,粗粒和細粒布局過程所使用的費用函數是不同的,如上文介紹加權常數C0,C1和C2的選擇時所述的一樣。一旦布局完成,就執行晶片間的布線任務355。如果連接位於不同晶片中電路的布線線路數量超過了這些FPGA晶片中分配給電路到電路布線的可用引腳數量,則可以使用時分多路轉換(TDM)電路。例如,如果每個FPGA晶片僅允許44個引腳用於連接兩個不同FPGA晶片中的電路,並且一個特殊的模型實現需要在晶片間具有45根導線,那麼將在每個晶片中安置專門的時分多路轉換電路。此專門的TDM電路至少連接兩根導線。TDM電路的一個實施例顯示在圖9(A),9(B)和9(C)中,將在下文中討論。因此,由於可將引腳設置成晶片間的時分多路轉換形式,所以布線任務總可以完成。一旦確定了每個FPGA的布局和布線,則可將每個FPGA配置成最佳的工作電路並且系統因而生成「位流」配置文件356。根據Altera的術語,系統生成一個或多個ProgrammerObjectFiles(可編程目的文件)(.pof)。其他生成的文件包括SRAMObjectFiles(SRAM目的文件)(.sof),JEDECFiles(JEDEC文件)(.jed),Hexadecimal(Intel格式)Files(十六進位文件)(.hex),以及TabularTextFiles(表格文本文件)(.ttf)。Altera的MAX+PLUSII程序器使用POFs,SOFs,和JEDEC文件,結合Altera的硬體可編程設備為FPGA陣列編程。或者,系統生成一個或多個原二進位文件(.rbf)。CPU修正.rbf文件並通過PCI總線為FPGA陣列編程。此時,所配置的硬體為硬體啟動370做好了準備。這樣在可重新配置的板上完成了硬體模型的自動結構。回到TDM電路,TDM電路允許多組引腳輸出被一起進行時分多路轉換,這樣實際上僅使用一個引腳輸出,TDM電路實質上是一個多路復用器,其具有至少兩個輸入(用於兩根導線),一個輸出,以及配置成迴路作為選擇器信號的一對寄存器。如果模擬系統需要更多的導線成組連接,那麼將可以提供更多的輸入和迴路寄存器。作為此TDM電路的選擇器信號,幾個配置成迴路的寄存器向多路復用器提供了適當的信號,使得在一段時期,一個輸入被選擇作為輸出,而在另一段時期,另一個輸入被選擇作為輸出。因此,舉例而言,TDM電路設法在晶片間僅使用一根輸出線路,使得在特定晶片中電路硬體模型的實現可以使用44個引腳,而不是45個完成。這樣,由於可將引腳設置成晶片間的時分多路轉換形式,所以布線任務總可以完成。圖9(A)顯示了輸出接腳問題的概觀。由於需要TDM電路,圖9(B)提供了傳輸端的TDM電路,圖9(C)提供了接收端的TDM電路。這些圖僅顯示了一個具體示例,其中模擬仿真系統需要在晶片間具有一個導線,而不是兩根。如果必須在時分多路轉換裝置中連接超過兩根導線,則所屬
技術領域:
的技術人員可根據下面的內容進行適當的改進。圖9(A)顯示了TDM電路的一個實施例,其中模擬仿真系統在TDM結構中連接兩根導線。其中具有兩個晶片,990和991。作為完整的用戶電路設計的一部分的電路960被模擬並布局在晶片991中。作為完整的用戶電路設計的一部分的電路973被模擬並布局在晶片990中。在電路960和電路973之間具有多個互連,包括互連組994,互連992和互連993。在此例中,互連的總數為45個。如果,在一個實施例中,每個晶片至多僅提供44個引腳用於這些互連,則本發明的一個實施例提供至少兩個待被時分多路轉換的互連,以在晶片990和991之間只需要一個互連。在此例中,互連組994將繼續使用43個引腳。對於第44個,也是最後一個引腳,可以使用根據本發明一實施例的TDM電路按時分多路轉換的形式連接互連992和互連993。圖9(B)顯示了TDM電路的一個實施例。FPGA晶片991中的模型電路(或其一部分)960在導線966和967上提供了兩個信號。對於電路960,導線966和967為輸出。這些輸出一般與晶片990中的模型電路973連接(見圖9(A)和9(C))。但是,僅為這兩個輸出導線966和967提供一個引腳阻礙了引腳對引腳的直接聯繫。因為輸出966和967對其他晶片採用單向傳輸,所以必須提供適當的傳輸和接收器TDM電路以連接這些線路。圖9(B)顯示了傳輸端TDM電路的一個實施例。傳輸端TDM電路包括「與」門961和962,它們各自的輸出與「或」門963的輸入相連。「或」門963的輸出972是分配給一個引腳並與另一晶片990相連的晶片的輸出。由電路模型960提供分別對「與」門961和962的一組輸入966和967。另一組輸入968和969由作為時分多路轉換選擇器信號的迴路寄存器電路提供。迴路寄存器電路包括寄存器964和965。寄存器964的輸出995被提供給寄存器965的輸入和「與」門961的輸入968。寄存器965的輸出996與寄存器964的輸入和「與」門962的輸入969連接。寄存器964和965由一個公共時鐘脈衝源控制。在任何給定的時間瞬間,輸出995或996中僅有一個為邏輯「1」。另一個為邏輯「0」。因此,在每個時鐘邊沿之後,邏輯「1」在輸出995和輸出996之間變換。反過來說,這不是向「與」門961就是向「與」門962提供了一個邏輯「1」,以「選擇」導線966或導線967上的信號。因此,導線972上的數據通過導線966或導線967來自電路960。圖9(C)顯示了TDM電路接收器端部分的一個實施例。來自導線966和導線967上的晶片991中電路960(圖9(A)和9(B))的信號必須與適當的導線985或986相連以到達圖9(C)中的電路973。來自晶片991的時分多路轉換信號從導線/引腳978進入。接收器端TDM電路可以將導線/引腳978上的這些信號與適當的導線985或986相連以到達電路973。TDM電路包括輸入寄存器974和975。導線/引腳978上的信號分別通過導線979或980提供給這些輸入寄存器974和975。輸入寄存器974的輸出985被提供給電路973中適當的埠。同樣的,輸入寄存器975的輸出986被提供給電路973中適當的埠。這些輸入寄存器974和975由迴路寄存器976和977控制。寄存器976的輸出984與寄存器977的輸入和寄存器974的時鐘輸入981相連。寄存器977的輸出983與寄存器976的輸入和寄存器975的時鐘輸入982相連。寄存器976和977由一個公共時鐘脈衝源控制。在任何給定的時間瞬間,啟動輸入981或982中僅有一個為邏輯「1」。另一個為邏輯「0」。因此,在每個時鐘邊沿之後,邏輯「1」在啟動輸入981和輸出982之間變換。反過來說,這「選擇」了導線979或導線980上的信號。因此,導線978上來自電路960的數據通過導線985或導線986與電路973正確連接。現在將詳細討論結合圖4簡單介紹的根據本發明一實施例的地址指示器。再次重申,在硬體模型中的每個FPGA晶片中安置有多個地址指示器。通常,安置地址指示器的主要目的是使系統可以通過32位PCI總線328在軟體模型315和硬體模型325中的特定FPGA晶片之間傳送數據(參見圖10)。更明確的說,地址指示器的主要目的是根據該32位PCI總線的帶寬限制選擇性的控制在軟體/硬體邊界中的每個地址空間(即,REG,S2H,H2S,和CLK)和FPGA晶片組326a-326d中的每個FPGA晶片之間的數據傳送。即使安裝了64位PCI總線,仍需要這些地址指示器來控制數據傳送。因此,如果軟體模型具有5個地址空間(即,REG讀,REG寫,S2H讀,H2S寫,和CLK寫),則每個FPGA晶片對應於這5個地址空間具有5個地址指示器。每個FPGA都需要這5個地址指示器,因為在正被處理的所選地址空間中特定所選字可能位於任何一個或多個FPGA晶片中。FPGA輸入/輸出控制器381通過使用SPACE指數選擇對應於軟體/硬體邊界特定地址空間(即,REG,S2H,H2S,和CLK)。一旦選擇了地址空間,每個FPGA晶片中對應於所選地址空間的特定地址指示器則選擇對應於所選地址空間中相同的字的特定字。軟體/硬體邊界中的地址空間和每個FPGA晶片中的地址指示器的最大尺寸取決於所選FPGA晶片的存儲容量/字長。例如,本發明的一個實施例使用AlteraFLEX10K系列FPGA晶片。因此,每個地址空間的預計最大尺寸為REG,3,000個字;CLK,1個字;S2H,10個字;H2S,10個字。每個FPGA晶片大約可以容納100個字。模擬仿真器系統還具有允許用戶在模擬仿真過程中的任何時間開始,停止,斷言輸入值,以及檢查值的特點。為了使模擬器具有靈活性,模擬仿真器還必須使所有部件對用戶可見,無論部件是在軟體還是硬體中完成內部實現。在軟體中,在模擬過程中模型化組合部件並計算值。因此,這些值對於用戶來說清晰「可見」,可在模擬過程中的任何時間進行存取。但是,硬體模型中的組合部件值並不像這樣直接「可見」。儘管寄存器可以很容易被軟體內核直接訪問(即,讀/寫),但組合部件卻更難確定。在FPGA中,大多數組合部件被模型成查找表以獲得高的門電路利用率。從而,查找表映射提供了有效的硬體模型,但損失了大多數組合邏輯信號的可見性。儘管具有組合部件缺乏可見性的問題,但模擬仿真系統可以在硬體加速模式之後重新建立或生成組合部件以供用戶檢查。如果用戶的電路設計僅具有組合和寄存器部件,則可以從寄存器部件中獲得所有組合部件的值。也就是說,根據電路設計所需的特定邏輯功能,組合部件以不同形式由寄存器構造或包含寄存器。模擬仿真器僅具有寄存器和組合部件的硬體模型,並且因此,模擬仿真器將從硬體模型中讀出所有的寄存器值,然後重新建立或生成所有的組合部件。因為執行此重新生成過程需要額外開支,所以並不總是執行組合部件的重新生成;而是基於用戶的需要執行。事實上,使用硬體模型的一個好處是可以加速模擬過程。在每個循環(或大部分循環)確定組合部件值進一步降低了模擬的速度。在任何情況下,僅寄存器值的檢查就可以滿足大多數模擬分析的要求。從寄存器值重新生成組合部件值的過程假設模擬仿真系統處於硬體加速模式或ICE模式。否則,軟體模擬已經將組合部件值提供給了用戶。模擬仿真系統在硬體加速開始之前保持駐留在軟體模型中的組合部件值以及寄存器值。這些值保留在軟體模型中直到被系統再次重寫。因為軟體模型從正好在硬體加速運行開始之前的時期已經擁有了寄存器值和組合部件值,所以重新生成組合部件的過程涉及根據更新的輸入寄存器值更新這些值中的一些或全部。組合部件的重新生成過程如下首先,如果用戶需要,軟體內核可將硬體寄存器部件的所有輸出值從FPGA晶片讀到REG緩衝器中。此過程涉及FPGA晶片中寄存器值通過地址指示器到REG地址空間的連結的DMA(直接存儲器存取)轉換。將硬體模型中的寄存器值安置於位於軟體/硬體邊界的REG緩衝器中,允許軟體模型訪問數據用於進一步處理。第二,軟體內核比較硬體加速運行之前和硬體加速運行之後的寄存器值。如果硬體加速運行之前的寄存器值與硬體加速運行之後的值相同,則組合部件中的值沒有變化。可從軟體模型中讀出這些值,而不是耗費時間和資源重新生成組合部件,軟體模型已經具有正好在硬體加速運行之前儲存於其中的組合部件值。另一方面,如果這些寄存器值的一個或多個已改變,依賴於改變的寄存器值的一個或多個組合部件值也將改變。必須通過下面的第三步驟重新生成這些組合部件。第三,對於加速之前和加速之後寄存器具有不同值,軟體內核將其扇出的組合部件安排到事件隊列中。在此,那些在加速運行過程中改變了值的寄存器檢測到一個事件。很可能,依賴於這些改變的寄存器值的組合部件將產生不同的值。無論這些組合部件值如何變化,系統確保這些組合部件在下一個步驟中估算這些改變的寄存器值。第四,軟體內核接著執行標準事件模擬算法,以將值變化從寄存器傳送到軟體模型中的所有組合部件。換句話說,在加速之前到加速之後的時間間隔中變化的寄存器值被傳送到所有依賴於這些寄存器值的下遊組合部件中。接著,這些組合部件估算新的寄存器值。根據扇出和傳送原則,安置於依次直接依賴變化的寄存器值的一級組合部件下遊的其他二級組合部件也必須估算變化的數據,如果有的話。此將寄存器值傳送到其他可能受影響的下遊部件的過程延續到扇出網絡的末端。因此,僅更新了軟體模型中位於下遊並受變化的寄存器值影響的組合部件。並非所有的組合部件值都受影響。因此,如果在加速之前到加速之後的時間間隔中僅有一個寄存器值發生改變,並且僅有一個組合部件受此寄存器值改變的影響,那麼僅僅這個組合部件將根據此改變的寄存器值重新估算它的值。模型電路的其他部分不受影響。對於這個小的變化,組合部件的重新生成過程將進行的相對較快。最後,當事件傳送完成後,系統準備好了進行任何模式的操作。通常,用戶期望在長期運行之後檢查值。在組合部件的重新生成過程之後,用戶將繼續進行純軟體模擬,以供調試/測試。但是,在其他時間,用戶可能希望繼續進行硬體加速以到達下一個目標點。在其他情況下,用戶可能希望在ICE模式下繼續執行過程。總而言之,組合部件的重新生成涉及使用寄存器值去更新軟體模型中的組合部件值。當任何寄存器值發生改變時,當值被更新時改變的寄存器值將通過該寄存器的扇出網絡被傳送。當沒有寄存器值發生改變時,軟體模型中的值也不會改變,於是系統不需重新生成組合部件。通常,硬體加速運行將持續一段時間。從而,許多寄存器值將改變,並影響位於這些值發生改變的寄存器的扇出網絡下遊的很多組合部件值。在此情況下,組合部件的重新生成過程將相對較慢。在其他情況下,在硬體加速運行之後,只有少數寄存器值發生改變。值發生改變的寄存器的扇出網絡可能較小,因此,組合部件的重新生成過程將相對較快。IV.利用目標系統模式仿真圖10顯示了根據本發明一個實施例的模擬仿真系統結構。圖10也顯示了當系統在內電路仿真模式中操作時,軟體模型,硬體模型和仿真接口以及目標系統之間的一個關係。如前所述,該模擬仿真系統包括一個通用微處理器和一個由諸如PCI總線的高速總線互連的可重新配置的硬體板。該模擬仿真系統編譯用戶的電路設計並且為硬體模型到可重新配置電路板的映射過程生成仿真硬體配置數據。然後用戶可以通過通用處理器模擬電路,硬體加速模擬程序,通過仿真接口利用目標系統仿真電路設計,之後進行後模擬分析。在編譯過程中確定軟體模型315和硬體模型325。在內電路仿真模式的系統中也提供仿真接口382和目標系統387。在用戶的判斷下,仿真接口和目標系統在開始時不需要耦聯到系統上。軟體模型315包括內核316,該內核316控制整個系統,以及用於軟體/硬體邊界的四個地址空間-REG,S2H,H2S和CLK。模擬仿真系統根據不同的部件類型和控制功能將硬體模型映射到主存儲器中的4個地址空間指定REG空間317用於寄存器部件;指定CLK空間320用於軟體時鐘;指定S2H空間318用於軟體測試平臺部件到硬體模型的輸出中;指定H2S空間319用於硬體模型到軟體測試平臺部件的輸出。在系統的初始化時間中,將這些專用輸入/輸出緩衝空間映射到內核的主存儲空間裡。硬體模型包括FPGA晶片的幾個FPGA組326a-326d和FPGA輸入/輸出控制器327。每個組(例如,326b)至少包括一個FPGA晶片。在一個實施例中,每個組包括4個FGPA晶片。在一個4×4FPGA晶片陣列中,組326b和組326d可能是低端組,組326a和組326c可能是高端組。圖6中討論了映射,布局和從特定硬體模型化的用戶電路設計部件到特定的晶片和它們的互連的布線。軟體模型315和硬體模型325之間的互連328是一個PCI總線系統。硬體模型也包括FPGA輸入/輸出控制器327,該控制器327包括一個PCI接口380和一個用於在維持PCI總線通過量的同時控制PCI總線和FPGA晶片組326a-326d之間的數據通信的控制單元381。每個FPGA晶片還包括幾個地址指示器,其中每個地址指示器對應於軟體/硬體邊界中的每個地址空間(即REG,S2H,H2S和CLK),以此耦聯每個地址空間和FPGA晶片組326a-326d中的每個FPGA晶片之間的數據。軟體模型315和硬體模型325之間的通信通過硬體模型中的一個DMA引擎或地址指示器發生。或者,通信也通過硬體模型中的DMA引擎和地址指示器發生。內核通過直接映射輸入/輸出控制寄存器啟動DMA傳送和估算請求。REG空間317、CLK空間320、S2H空間318和H2S空間319分別使用輸入/輸出數據路徑線路321、322、323和324用於軟體模型315和硬體模型325之間的數據傳輸。S2H和CLK空間的所有的主輸入都需要雙緩衝,因為這些空間需要幾個時鐘周期來完成更新過程。雙緩衝避免了可能會造成競態狀態的對內部硬體模型狀態的幹擾。S2H和CLK空間是從內核到硬體模型的主輸入。如上所述,硬體模型實質上容納用戶電路設計的所有寄存器部件和組合部件。此外,軟體時鐘在軟體中模型化並在CLK輸入/輸出地址空間裡被提供給至硬體模型的接口。內核推進模擬時間,尋找有效的測試平臺部件並且估算時鐘部件。當內核檢測到任何時鐘邊沿時,更新寄存器和存儲器並且通過組合部件傳送數值。這樣,如果選擇硬體加速模式,這些空間中數值的任何變化將觸發硬體模型改變邏輯狀態。對於內電路仿真模式,仿真接口382耦聯到PCI總線328以此與硬體模型325和軟體模型315通信。在硬體加速模擬模式和內電路仿真模式的過程中,內核316不僅控制軟體模式而且控制硬體模式。仿真接口382也通過電纜390被耦聯到目標系統387中。仿真接口382還包括接口埠385,仿真輸入/輸出控制386,目標到硬體的輸入/輸出緩衝器(T2H)384和硬體到目標的輸入/輸出緩衝器(H2T)383。目標系統387包括一個連接器389,一個信號輸入/信號輸出接口插座388以及屬於目標系統387的其他模塊或晶片。例如,目標系統387可以是一個EGA視頻控制器,用戶電路設計可以是一個特別的輸入/輸出控制器電路。用於EGA視頻控制器的輸入/輸出控制器的用戶電路設計在軟體模型315中完全模型化並且在硬體模型325中部分地模型化。軟體模型315中的內核316也控制內電路仿真模式。對模擬時鐘的控制仍是在軟體中通過軟體時鐘、門控時鐘邏輯和門控數據邏輯進行,所以在內電路仿真模式中不會出現裝配和佔用時間的問題。這樣,用戶可以在內電路模擬過程中的任何時間裡開啟,停止,單步執行,斷言數值和檢查數值。要這樣運行,要識別目標系統和硬體模型之間的所有時鐘節點。禁用目標系統中的時鐘發生器,斷開來自目標系統的時鐘埠,或是阻止來自目標系統的時鐘信號進入硬體模型。相反地,時鐘信號來自一個測試平臺程序或軟體生成時鐘的其它形式,這樣軟體內核可以檢測到有效的時鐘邊沿以觸發數據估算。因此,在ICE模式中,模擬仿真系統使用軟體時鐘而不是目標系統時鐘來控制硬體模型。為了在目標系統的環境中模擬用戶電路設計的操作,將目標系統40和模型化的電路設計之間的主輸入(信號輸入)和輸出信號(信號輸出)提供給硬體模型325以供估算。這是通過目標到硬體緩衝器(T2H)384和硬體到目標緩衝器(H2T)383這兩個緩衝器來實現的。目標系統387使用T2H緩衝器384將輸入信號應用到硬體模型325。硬體模型325使用H2T緩衝器383將輸出信號輸送到目標系統387。在該內電路仿真模式中,硬體模型通過T2H和H2T緩衝器而不是S2H和H2S緩衝器接收和發送輸入/輸出信號,因為現在系統使用目標系統387而不是軟體模型315中的測試平臺程序來估算數據。因為目標系統以一個實質上高於軟體模擬速度的速度運行,所以內電路仿真模式也將以一個較高速度運行。這些輸入和輸出信號的傳輸發生在PCI總線328中。此外,在仿真接口382和硬體模型325之間也有一條總線61。這條總線與圖1中的總線61類似。該總線61允許仿真接口382和硬體模型325通過T2H緩衝器384和H2T緩衝器383通信。通常,不將目標系統387耦聯到PCI總線。但是,如果將仿真接口382合併到目標系統387的設計中,這樣的一個耦聯是可行的。在該裝配中,電纜390將不存在。目標系統387和硬體模型325之間的信號仍將穿過仿真接口。V.後模擬分析模式本發明的模擬仿真系統可以支持改值轉儲(VCD),一種廣泛用於後模擬分析的模擬器功能。本質上,VCD提供硬體模型的所有輸入和所選寄存器輸出的歷史記錄,使得後來在後模擬分析中用戶可以檢查模擬過程的不同輸入和引起的輸出。為了支持VCD,系統將所有的輸入記錄到硬體模型中。對於輸出,系統以一個用戶定義的記錄頻率(例如,1/10,000記錄/周期)記錄硬體寄存器部件的所有值。記錄頻率決定輸出值多長時間記錄一次。對於一個1/10,000記錄/周期的記錄頻率來說,每10,000個周期記錄一次輸出值。記錄頻率越高,用於之後的後模擬分析的信息就記錄越多。記錄頻率越低,用於之後的後模擬分析的存儲的信息就越少。因為選擇的記錄頻率與模擬仿真速度有因果關係,所以用戶應該仔細選擇記錄頻率。一個較高的記錄頻率將降低模擬仿真速度,因為在進一步模擬之前,系統必須耗費時間和資源通過執行對存儲器的輸入/輸出操作來記錄輸出數據。關於後模擬分析,用戶選擇一個模擬所需的特定點。如果記錄頻率是1/500記錄/周期,寄存器值在每隔500周期的點0,500,1000,1500等等被記錄。如果用戶需要例如在點610的結果,用戶選擇已被記錄的點500,並且在時間上向前模擬直到點610。在分析階段,分析速度和模擬速度是一樣的,因為用戶一開始訪問500點的數據,然後向前模擬到點610。注意在較高的記錄頻率上,為後模擬分析存儲了更多的數據。這樣,對於一個1/300記錄/周期的記錄頻率,每隔300周期在點0,300,600,900等等存儲數據。為了獲得在點610上的結果,用戶一開始選擇已被記錄的點600然後向前模擬到點610。注意當記錄頻率是1/300而不是1/500時,在後模擬分析中系統可以更快地達到期望的點610。但是,情況並不總是如此。特別分析點連同記錄頻率決定可以以多快的速度到達後模擬分析點。例如,如果VCD記錄頻率是1/500而不是1/300,那麼系統可以較快地達到點523。然後用戶可以通過用到硬體模型的輸入記錄執行軟體模擬,以此計算所有硬體部件的改值轉儲,從而執行模擬仿真之後的分析。用戶也可以及時選擇任何寄存器記錄點並及時地從那個記錄點向前開始改值轉儲。這種改值轉儲方法可以連結到任何模擬波形觀測儀用於後模擬分析。VCD隨選系統本發明的一個實施例是一個不需要重新運行模擬的VCD隨選系統。根據本發明的一個實施例,在此所述的VCD隨選技術包括以下高標準特性(1)基於RCC的平行模擬歷史壓縮和記錄,(2)基於RCC的平行模擬歷史解壓和VCD文件生成,以及(3)在沒有模擬再運行的情況下對一個選擇的模擬目標範圍和設計檢查的隨選軟體再生成。每一種特性將在下文詳細討論。在一個調試進程中,EDA工具(以下指RCC系統,它包括了本發明的不同方面)記錄來自一個測試平臺程序的主輸入這樣可以再現模擬的任何部分。然後用戶可以選擇地命令EDA工具或RCC系統將硬體狀態信息從任何模擬時間範圍轉儲到一個VCD文件用於以後的分析。此後,用戶可以在選擇的模擬時間範圍內立即開始調試他的設計。如果選擇的模擬時間範圍不包括用戶尋求解決的故障,他可以選擇另一個模擬時間範圍轉儲到VCD文件。然後用戶可以分析這個新的VCD文件。由於VCD的這種隨選特性,用戶可以在任何點停止模擬並要求從任何所需的模擬時間起始點到任何模擬時間終點生成另一個選擇的VCD文件隨選。在一個典型的調試進程內,用戶使用如圖83所示的RCC系統調試他的設計。在第一次模擬運行中,用戶快速地從一個期望的開始模擬時間到任何期望的終止模擬時間模擬他的設計,這段時間在這稱作一個模擬進程範圍(simulationsessionrange)。在該快速的模擬運行中,主輸入的一個高度壓縮形式被記錄在一個「輸入歷史」文件中以此可以再現該模擬進程的任何部分。在模擬進程範圍的末端,RCC系統可以從該終點將硬體狀態信息存儲在一個「模擬歷史」文件中,使得用戶如果需要的話可以越過這個終點恢復調試設計。在快速模擬運行的末端,用戶將分析結果,並不可避免的檢測到他設計中存在的一些問題。然後用戶做出猜測,問題的根源(即故障)存在於一個特定的狹窄模擬時間範圍內,在這裡稱作模擬目標範圍,該模擬目標範圍在更寬的模擬進程範圍內。例如,如果模擬進程範圍包括1,000個模擬時間步驟,較窄的模擬目標範圍可能在較寬的模擬進程範圍內的一個特別位置僅包括100個模擬時間步驟。一旦用戶對模擬目標範圍的精確位置作出猜測以隔離故障,RCC系統一開始就通過解壓輸入歷史文件中的壓縮的主輸入以及將解壓的主輸入傳送到硬體模型中用於估算,進行快速地模擬。當RCC系統達到模擬目標範圍時,它轉儲估算的結果(例如,硬體節點值和寄存器狀態)到一個VCD文件。此後,用戶可以通過使用從模擬目標範圍的起始的VCD文件重放他的設計來更仔細地分析這個區域,而不是必須從模擬進程範圍的開始或者甚至從模擬的一開始再運行模擬。將硬體狀態從模擬目標範圍以一個VCD文件存儲起來的這個特徵節省了用戶大量的調試時間,不然時間就會浪費在模擬再運行上。現在參照圖83,圖83描述了包含本發明的一個實施例的RCC系統的一個高層圖。RCC系統包括一個RCC計算系統2600和一個RCC硬體加速器2620。如本專利說明書其他地方描述的一樣,RCC計算系統2600包含計算資源,該計算資源對於在軟體中允許用戶模擬用戶整個軟體模型化的設計以及控制設計中硬體模型化部分的硬體加速是必需的。為此,RCC計算系統2600包括CPU2601,RCC系統的各種部件所需的各種時鐘2602(包括在本專利說明書其他地方描述的軟體時鐘),測試平臺程序2603和系統磁碟2604。與一些常規的以硬體為基礎的事件歷史緩衝器相比,系統磁碟用於記錄壓縮的數據而不是一個小的硬體RAM緩衝器。儘管在圖中沒有顯示,RCC計算系統2600包括其他邏輯部件和為電路設計者提供計算能力的總線子系統,以此在一個計算系統執行的其他任務中運行診斷程序,不同的軟體和處理文件。RCC硬體加速器2620,在本專利說明書中的其他部分也被稱作RCC陣列,其包括邏輯部件中的可重新配置的陣列(例如FPGA),該陣列可以至少在硬體中模型化用戶設計的一部分使得用戶可以加速調試過程。為此,RCC硬體加速器2620包括可重新配置的邏輯部件的陣列2621,該陣列提供用戶設計的一部分的硬體模型。RCC計算系統2600通過如本專利說明書中其他地方描述的軟體時鐘和一個總線系統,其一部分如圖83中的線路2610和2611所示,與RCC硬體加速器2620緊密耦合。本發明的VCD隨選方面將參照圖84予以討論。圖84顯示了幾個模擬時間-t0,t1,t2和t3的一個時間序列。模擬進程範圍在模擬時間t0和模擬時間t3之間,其中當然包括模擬時間t1和t2。模擬時間t0代表快速模擬開始的模擬進程範圍內的第一模擬時間。該模擬時間t0代表任何可分離的模擬進程或模擬進程範圍的第一模擬時間。換句話說,假定今天的調試進程包括從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代表用戶設計的第一個調試進程的最初模擬時間,即,t0對應於t=0。類似地,模擬時間t3代表選擇的模擬進程範圍的最後模擬時間。換句話說,假定今天的調試進程包括從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代表用戶設計的最後一個調試進程的最後模擬時間。如果此時不急著需要,用戶在該模擬時間t3之外可以繼續模擬,他集中在模擬時間t0到t3,即當前的模擬進程範圍調試他的設計。通常,當在當前模擬進程範圍內解決故障時,用戶將在模擬時間t3之外進入到下一個模擬進程範圍繼續模擬他的設計。在模擬進程範圍的這個抽象表示中,這些模擬時間段t0-t3不必彼此相鄰,即模擬時間t0和t1不立即相鄰。確實,模擬時間t0和t1可以相隔成千個模擬時間段。因為將在RCC系統中實施本發明的一個實施例,所以要參考圖83所示的RCC系統的各種部件。首先將討論RCC系統的輸入和模擬歷史生成操作。該生成操作包括主輸入的數據壓縮的一些形式和壓縮的主輸入的記錄。其次將討論RCC系統的VCD生成操作。該VCD生成操作包括解壓主輸入以複製模擬歷史並且將硬體狀態轉儲到一個模擬目標範圍的VCD文件中。第三,討論VCD文件檢測程序。儘管有時使用術語「模擬歷史」,但這不意味著整個調試進程涉及軟體模擬。確實,RCC系統從硬體狀態中生成VCD文件並且僅為了後來的VCD文件分析使用軟體模型。輸入和模擬歷史生成---壓縮和記錄最初,用戶在圖83的RCC計算系統2600中的軟體中模型化設計。對於設計的一些部分,RCC計算系統2600基於硬體描述語言(例如,VHDL)自動地生成設計的一個硬體模型。配置硬體模型在可重新配置的邏輯部件2621的陣列中進行,該陣列是RCC硬體加速器2620的一部分。有了這個裝置,用戶可以在RCC計算系統2600中的軟體中模擬設計並使用RCC硬體加速器2620加速設計的一個部分(即模擬時間步驟或電路的獨特物理部分),或一個模擬和硬體加速的組合。用戶剛剛完成他的最新電路設計。現在應該調試設計來尋找缺陷。如果用戶先前已經調試了設計的一個較早版本,他知道一個故障或許出現的地方。另一方面,如果這是該新設計的最初調試進程,用戶必須對於一個潛在故障的出現位置做出猜測。不論哪種狀況,需要一些猜測來大概確定故障位置。為了進行討論,假定這是最初的調試設計的情況。在調試設計中,用戶選擇一個模擬進程範圍。理論上,該模擬進程範圍可以是任何長度的模擬時間。然而實際上,模擬進程範圍應該選擇得足夠短以隔離設計中的幾個故障,並且應該選擇得足夠長以快速進行調試程序並使充分調試一個設計所需的調試進程數量最小化。顯然,兩個或三個模擬時間步驟的一個模擬進程範圍不會揭示任何故障的存在。而且,這個小模擬進程範圍將迫使用戶進行許多減慢調試程序的重複任務。如果選擇的模擬進程範圍是一百萬個模擬時間步驟,太多的故障可以顯現出來,這樣用戶將發現很難集中的解決一個問題。如圖84所示,一旦用戶選擇了一個模擬進程範圍,他就命令RCC系統快速的從模擬時間t0到模擬時間t3模擬。如前所述,模擬時間t0到t3的間隔可以是任何選擇的範圍,但是模擬時間t0代表模擬的開始而模擬時間t3代表該模擬進程範圍的最後模擬時間。在模擬時間t0,在RCC計算系統2600中開始快速模擬。從模擬時間t0到模擬時間t3執行快速的模擬而不是正常的模擬模式,因為在該時間段內不需要再生成軟體模型。如本專利說明書的其他地方所述,再生成操作需要RCC計算系統2620來接收硬體狀態信息(如節點值,寄存器狀態)使得在軟體中可以再生成更複雜邏輯部件(如組合邏輯)以為用戶作進一步分析。當然,一些用戶在模擬過程中可能想檢查軟體模型,在這種情況下,RCC計算系統2600不進行快速模擬。在此情況下,由於RCC計算系統2600需要額外的時間從硬體模型的主輸出中再生成軟體模型,模擬過程更慢了。一開始,設計的完全狀態,諸如軟體模型狀態和硬體模型寄存器和節點值在模擬時間t0被存儲到一個在系統磁碟中稱作「模擬歷史」的文件。這允許了用戶在將來的任何時間將設計的狀態載入RCC系統以供調試之用。在從模擬時間t0到模擬時間t3的模擬進程範圍的該快速模擬期間,RCC計算系統2600將兩個不同程序並行地應用到主輸入Ip中。在線路2610上將來自試驗平臺程序2603的原始主輸入提供到RCC硬體加速器2620以作估算。同時,將來自試驗平臺程序的相同主輸入作為一個單獨的稱作「輸入歷史」的文件壓縮並記錄在系統磁碟中,使得主輸入的整個歷史被集中到一起,以允許用戶再現模擬的任何部分。特別地,與模擬時間t0到模擬時間t3相對應的主輸入被壓縮並存儲在系統磁碟中。當RCC硬體加速器2620接收來自測試平臺程序2603的主輸入Ip時,它處理主輸入。因此,當不同邏輯和其他電路設備估算數據時,硬體模型中的硬體狀態很有可能改變。在從模擬時間t0到模擬時間t3這個期間,由於用戶在該快速模擬期間內對細緻地調試設計並不感興趣,所以RCC系統不需要等候RCC計算系統2600來執行它的邏輯再生成。RCC系統也沒有存儲主輸出(例如,硬體節點值和寄存器狀態)。注意當RCC計算系統2600壓縮主輸入用於記錄到「輸入歷史」文件時,RCC硬體加速器2620估算原始未壓縮的主輸入。在其他實施例中,RCC系統並不壓縮主輸入,用於將其記錄到輸入歷史文件中。為什麼RCC計算系統2600將主輸入傳送到RCC硬體加速器中用於估算而同時在快速模擬進程間根本不存儲這些輸出?RCC系統需要存儲基於來自模擬開始到模擬時間t3的主輸入的估算的設計的硬體狀態。除非硬體模型已經估算了從開始到點t3的主輸入的整個歷史,而不只是來自模擬時間t3的輸入,否則在模擬時間t3上不能獲得硬體模型狀態的精確抽點列印。邏輯電路具有基於輸入順序影響估算結果的存儲屬性。這樣,如果僅將從模擬時間t3(或是緊鄰模擬時間t3之前的模擬時間)的主輸入供給硬體模型用於估算,硬體模型或許將在該模擬時間t3上呈現錯誤的狀態。為什麼在模擬時間t3存儲硬體模型狀態?在一個相對較短的時間內不可能調試一個有著超過一百萬的門電路和超過一百萬的模擬時間步驟的大型設計。用戶需要多個模擬進程來調試該設計。為了從一個模擬進程快速地移動到下一個模擬進程,RCC系統從模擬時間t3存儲硬體狀態(連同壓縮的主輸入)使得用戶可以調試在模擬時間t3開始的下一個模擬進程範圍。有了存儲的硬體模型狀態,用戶不需要從模擬的一開始模擬,相反地,用戶在從模擬時間t0到模擬時間t3期間調試了設計之後,可以快速並且便捷地回到模擬時間t3。在模擬時間t3上的硬體模型狀態存儲在模擬歷史文件中並代表他的設計的正確抽點列印,該抽點列印是直到那個點的主輸入的整個歷史的一個反映。如果有必要而且用戶需要的話,RCC硬體加速器2620中的硬體模型在線路2611上提供內部硬體狀態給RCC計算系統2600,使得RCC計算系統2600可以在軟體模型上建立或再生不同的邏輯部件(如組合邏輯)。但是,如上所述,用戶並不關心在模擬進程範圍的快速模擬期間觀察軟體模擬。因此,由於用戶目前不會為了查明故障來檢查內部硬體狀態,所以來自RCC硬體加速器的這些內部硬體狀態並不存儲在系統磁碟中。在模擬時間t3或在模擬進程範圍的末端,停止這一特定的快速模擬操作。在模擬歷史文件中存儲與模擬時間t3相對應的RCC硬體加速器2620中的來自設計的硬體模型的估算結果或主輸入(例如寄存器值)。這樣,當用戶已經從模擬時間t0到模擬時間t3調試設計時,如果需要的話他可以繼續向前到模擬時間t3以作進一步調試。用戶不需從模擬時間t0再運行模擬以此在超過模擬時間t3的某點調試他的設計。總之,從模擬時間t0到模擬時間t3(即模擬進程範圍),用戶通過將來自測試平臺程序2603的主輸入在線路2610上供給RCC硬體加速器2620,同時壓縮同樣的主輸入並且將它們存儲到系統磁碟以供未來參考從而在實質上加速設計。RCC計算系統2600需要在輸入歷史文件中存儲主輸入(壓縮或別的方式)以再現調試進程。壓縮操作也與在RCC硬體加速器2620中的數據估算並行發生。最後,在模擬進程範圍末端的模擬時間t3上,RCC系統將硬體模型的狀態信息存儲到一個模擬歷史文件中。在本發明的一個實施例中,來自模擬進程範圍的所有記錄的壓縮的主輸入是之後將被修改用於來自模擬時間t3的硬體狀態信息的同樣文件的一部分。在另一個實施例中,在系統磁碟中將來自模擬進程範圍的存儲信息和來自模擬時間t3的硬體狀態信息分別存儲為獨立的文件。相似地,用VCD隨選信息可以修改上述任何文件,該VCD隨選信息是之後為模擬目標範圍生成的。或者,VCD隨選信息可以存儲在系統磁碟的一個不同的VCD文件中,該VCD文件與壓縮的主輸入文件和模擬時間t3硬體狀態信息文件分離。換句話說,根據本發明的一個實施例,輸入歷史文件,模擬歷史文件和VCD文件可以合併在一個文件中。同時,輸入歷史文件和模擬歷史文件也可以合併在一個與VCD文件分離的文件中。現在討論壓縮方案。根據本發明的一個實施例,RCC系統的壓縮邏輯允許每個模擬時間步驟10%輸入事件的主輸入事件的壓縮率為20X。這樣,一個具有超過一百萬個門電路的大型ASIC設計可能需要200個主輸入事件。對於每個模擬時間步驟發生的10%輸入事件,大約有20個輸入需要被壓縮和記錄。如果每個輸入信號是2位元組長,20個輸入信號導致在每個模擬時間步驟的主輸入上需要處理40個字節的數據。對於一個壓縮率20X來說,每個模擬時間步驟可以將40個字節壓的數據縮成2個字節的數據。這樣,對於一個需要大約一百萬個模擬時間步驟的設計,RCC系統將主輸入壓縮成2兆字節的數據。該大小的文件通過任何計算文件系統和波形觀測儀可以容易地處理。在一個實施例中,使用ZIP壓縮。根據一個實施例,主輸入壓縮與RCC硬體加速器2620進行的主輸入估算同時執行;輸入歷史文件生成與主輸入估算同時發生。因此,壓縮方案不對RCC系統的性能產生直接的負面影響。唯一可能發生的瓶頸是將壓縮的主輸入記錄到系統磁碟中的過程。然而,由於數據被高度壓縮,對於以每秒50,000模擬時間步驟運行的大多數設計,RCC系統的減速將小於5%。至於在RCC系統中控制記錄的具體方式,根據本發明的一個實施例,用戶必須首先使用$rcc(record)命令以初始化RCC記錄功能$rcc(record,name,,);現在將討論對於變元name,和的解釋。「name」變元是當前模擬進程範圍的記錄名稱。需要不同的名稱來辨別同樣設計的不同模擬運行。對於脫機的VCD隨選調試尤其需要一個獨立的記錄名稱。變元是一個規定分配給RCC系統記錄程序的最大磁碟空間(以Mb(兆字節)為單位)的可選參數。系統設定值是100MB。RCC系統僅僅記錄在規定的磁碟空間裡當前模擬進程範圍的最新部分。換句話說,如果將值規定為100MB但是當前的模擬進程範圍佔據140MB,則RCC系統僅記錄壓縮的主輸入的最後的100MB同時刪除前40MB。本發明的該特徵為故障分析提供了一個好處。在本發明的一個實施例中,測試臺程序具有一些自測功能來檢測模擬故障並且停止模擬。RCC模擬的最新歷史可以為這樣的故障分析提供大部分信息。變元是一個規定執行一個完全狀態檢查點所需的模擬時間步驟的數量的可選參數。系統設定是1,000,000時間步驟。如大多數常規壓縮算法一樣,壓縮主輸入也基於連續的模擬時間步驟之間的狀態差別。對於長期的模擬運行,在一個既定的低頻率上完整的RCC狀態的檢查點可以大大地促進模擬歷史析取。對於一個在RCC系統中每秒20K到200K模擬時間步驟的解壓率和每一百萬個步驟一個檢查點,RCC系統可以在5到50秒內析取(即複製主輸入和選擇的VCD文件生成的模擬)任何模擬歷史。當調用該$rcc(record)命令時,RCC系統將記錄模擬歷史;即,壓縮並在一個文件中記錄主輸入用於儲存在系統磁碟中。由於在該時間不需要重建軟體邏輯,所以來自RCC硬體加速器的主輸出被忽視。記錄程序可以用命令$rcc(stop)或$rcc(off)來被終止,在該點,RCC系統將模擬控制切換回軟體模型。此時,處理主輸出用於軟體邏輯重建。VCD生成---解壓和轉儲如上所述,RCC系統在模擬時間t0已經存儲了模擬進程範圍的開始處的軟體模型和硬體模型,在輸入歷史文件中記錄了壓縮的用於整個模擬進程範圍的主輸入,並且在模擬時間t3處,在模擬歷史文件中,存儲了模擬進程範圍末尾的設計的硬體模型狀態。現在用戶有足夠的信息從來自模擬時間t0的設計信息載入模擬進程範圍開始處的設計。有了壓縮的主輸入,用戶可以軟體模擬他的設計的任何部分。但是,由於VCD隨選特徵,用戶或許不想在該點軟體模擬他的設計。相反地,用戶想生成一個用於所選的模擬目標範圍的VCD文件用於精細的分析來隔離和解決故障。確實,有了記錄的壓縮主輸入,RCC系統可以再現在模擬進程範圍內的任何點。而且,若需要的話,RCC系統可以通過載入先前的從模擬時間t3存儲的硬體狀態信息,在當前的模擬進程範圍之外進行模擬。在快速模擬設計之後,用戶檢查結果以確定是否存在一個故障。如果沒有明顯的故障,那麼對於當前的模擬進程範圍設計可能沒有故障。然後用戶可以繼續在當前的模擬進程範圍之外到下一個模擬進程範圍繼續模擬,無論所選擇的範圍是什麼。但是,如果用戶已經確定設計有某種問題,他必須更仔細地模擬來隔離並解決故障。因為整個模擬進程範圍對於仔細詳盡的分析來說太大,所以用戶必須瞄準一個特定的較窄範圍以做進一步研究。基於用戶對設計的熟悉和或許過去的調試努力,用戶在模擬進程範圍內對於故障的位置做出合理的猜測。用戶將集中在一個選擇的模擬目標範圍,該模擬目標範圍應該與用戶對故障位置的猜測(或故障將出現的位置)相對應。用戶確定模擬目標範圍位於如圖84所示的模擬時間t1與模擬時間t2之間。RCC系統用先前的從模擬狀態t0存儲的配置信息在RCC計算系統2600中載入設計的軟體模型並在RCC硬體加速器2620中載入硬體模型。然後RCC系統從模擬時間t0到模擬時間t1快速模擬。在快速模擬操作中,RCC計算系統載入先前存儲的含有壓縮的主輸入的文件。RCC計算系統解壓壓縮的主輸入並且傳送解壓的主輸入到RCC硬體加速器2620用於估算。像開始的快速模擬操作壓縮並存儲模擬進程範圍的主輸入一樣,在從模擬時間t0到模擬時間t1的快速模擬操作中不存儲作為估算結果的主輸出(例如,硬體模型節點值和寄存器狀態)。一旦快速模擬操作達到模擬目標範圍的開始或模擬時間t1,RCC系統將來自RCC硬體加速器2620中的硬體模型的估算結果(即主輸出Op)轉儲到系統磁碟的一個VCD文件中。與模擬進程範圍的最初快速模擬操作不同,RCC計算系統2600不執行任何壓縮。而且,由於用戶不需要在該時間檢查估算結果,所以RCC計算系統2600不執行任何軟體模型的重建操作。通過不執行任何軟體模型的重建操作,RCC系統可以快速地生成VCD文件。但是,在其他實施例中,用戶可能在存儲主輸出的同時檢查從t1到t2的該模擬時間段的他的設計的軟體模型。假如那樣的話,RCC計算系統2600執行軟體模型重建操作以允許用戶檢查來自他設計的任何方面的所有狀態。在模擬時間t2,RCC計算系統2600停止在VCD文件中存儲來自RCC硬體加速器2620的估算輸出。在該點,用戶可以停止快速模擬。現在RCC系統具有完整的模擬目標範圍的VCD文件並且用戶可以繼續更詳盡地分析VCD文件。當用戶想分析VCD文件時,他不需要重新運行從一開始(例如,模擬時間t0)的模擬。相反地,用戶可以命令RCC系統來載入從模擬目標範圍的開始存儲的硬體狀態信息,並且用軟體模型檢查模擬的結果。這部分將在模擬歷史檢查部分更詳細地說明。基於VCD文件的分析,用戶可能發現或可能未發現故障。如果發現故障,用戶當然會開始調整設計。如果沒有發現故障,用戶可能對懷疑存在故障的模擬目標範圍做出了錯誤的猜測。用戶必須利用他上述使用的關於解壓和VCD文件轉儲的同樣的程序。用戶做了另一個猜測,希望在模擬進程範圍內有一個更好的模擬目標範圍。然後,RCC系統從模擬進程範圍的開始到新的模擬目標範圍的開始快速地模擬,解壓主輸入並且將它們傳送到RCC硬體加速器2620用於估算。當RCC系統達到新的模擬目標範圍的起始處時,來自RCC硬體加速器2620的主輸出被轉儲到一個VCD文件中。在新的模擬目標範圍的末尾,RCC系統停止將硬體狀態信息轉儲到VCD文件中。在該點,用戶可以檢查VCD文件用於隔離故障。總之,從模擬時間t0到模擬時間t1,RCC系統通過解壓先前壓縮的主輸入並且將它們傳送到硬體模型用於估算,快速地模擬設計。在從模擬時間t1到模擬時間t2的模擬目標範圍過程中,RCC系統將來自硬體模型的主輸出轉儲到一個VCD文件中。在模擬目標範圍的末尾,用戶可以停止快速地模擬設計。在該點,用戶可以通過直接進入模擬時間t1而不在模擬時間t0重新運行從一開始的模擬來檢查VCD文件。當完成對該模擬目標範圍的檢查並且隔離和消除故障時,用戶可以繼續到下一個模擬進程範圍。該新的模擬進程範圍在模擬時間t3開始。用戶選擇新的模擬目標範圍的特定長度,該新的模擬目標範圍的特定長度可與先前的模擬進程範圍同樣長。RCC系統載入與模擬時間t3相對應的先前存儲的硬體狀態信息。現在RCC系統準備好了該新的模擬進程範圍的快速模擬。注意該新的模擬進程範圍與從模擬時間t0到t3的範圍相對應,其中載入的硬體狀態現在與模擬時間t0相對應。快速模擬,VCD隨選轉儲和VCD檢查過程與上述的內容相似。根據本發明的一個實施例,解壓步驟並不對性能造成負面影響。RCC系統可以以每秒20,000到200,000模擬時間步驟的速率解壓模擬歷史(即壓縮的和記錄的主輸入)。有了適當的檢查點控制,RCC系統可以在50秒內析取(即再現由主輸入和選擇的VCD文件生成的模擬)模擬歷史。至於在RCC系統中控制VCD隨選特徵的具體方式,用戶必須使用$axis_rpd命令。$axis_rpd是一個交互命令,用來析取RCC估算記錄並且根據需要生成一個VCD文件。與常規的模擬重繞技術不同,$axis_rpd命令的執行既不能重繞內部模擬狀態也不破壞外部和文件I/O狀態。用戶可以在調用$axis_rpd命令後繼續模擬,所用方式與用戶在$stop命令之後能夠模擬的方式一樣。當不規定變元時,$axis_rpd命令顯示在模擬進程範圍內的所有可用模擬時間段,即,用戶可以選擇模擬目標範圍。時間單位是在命令行接口中同樣的時間單位。一個模擬記錄的例子如下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」,);start-time和end-time規定了VCD文件的模擬時間窗口,或者模擬目標範圍。時間控制變元的單位是用於命令行接口的時間單位。「dump-file-name」是VCD文件名。轉儲參數與IEEEVerilog中的標準$dumpvars命令等同。以下是一個$axis_rpd命令的例子C7>$axis_rpd(50505,50600,「f1.dump」);---StartRCCVCDat50505.010000!!---EndRCCVCDat50600.000000!!Interruptatsimulationtime60000.0000ns該$axis_rpd命令生成了一個名為「f1.dump」的、從模擬時間50505到50600的模擬目標範圍的VCD文件。正如$dumpvars,如果不提供levelandscopecontrol參數,$axis_rpd命令將轉儲整個硬體狀態或主輸出。另一個使用$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跳過那個窗口,因為不存在可用的模擬記錄。在用戶結束模擬過程之後,也可以得到VCD隨選。為了得到離線VCD隨選,用戶用+rccplay選項啟動名為「vlg」的模擬程序。有了該選項,可以指示RCC系統析取模擬記錄而不是執行模擬的正常初始化序列。一旦用戶進入模擬程序,用戶可以使用同樣的$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!!Interruptatsimulationtime4500000C3>在上述例子中,用模擬記錄「rl」析取模擬歷史並且產生在從時間40000到45000的整個設計中的VCD。模擬歷史複查一旦模擬目標範圍(例如模擬時間t1到t2)的VCD文件已由RCC系統生成,用戶不需要從模擬時間t2到t3快速地模擬。相反,RCC系統允許用戶停止模擬並且直接運行到模擬目標範圍的開始,或是模擬時間t1。這樣,與現有技術相比,用戶不必重新運行從一開始(例如,模擬時間t0)的模擬。已經轉儲到VCD文件中的硬體狀態反映了來自模擬時間t0的主輸入的整個歷史的估算,包括從模擬時間t1到t2的主輸入。RCC系統載入VCD文件。此後,將存儲的主輸出傳送給RCC計算系統2600使得可以用正確的狀態信息重建軟體模型和其所有組合邏輯電路。然後用戶用一個波形觀測儀檢查軟體模型來進行調試。使用現有的VCD,用戶可以非常仔細地一步一步調試他的軟體模型直到隔離故障。有了該VCD隨選特徵,用戶可以在模擬進程範圍內選擇任何模擬目標範圍並且執行軟體模擬以隔離故障。如果在選擇的模擬目標範圍中不能發現故障,用戶可以根據需要選擇另一個不同的模擬目標範圍。因為記錄了來自測試臺程序的所有主輸入用於整個模擬進程範圍,所以可以根據需要再現並檢查該模擬的任何部分。該特徵允許用戶反覆地集中多種不同的模擬目標範圍直到用戶在該模擬進程範圍內修復故障。此外,該VCD隨選特徵在模擬過程中在線狀況下是得到支持的,在模擬過程已經結束之後,離線狀況下也支持該VCD隨選特徵。在線支持是可行的,因為在模擬時間t0上的硬體狀態可以存儲在系統磁碟中並且可以壓縮和記錄用於任何長度的模擬進程範圍的主輸入。因此,用戶接著可以規定一個模擬目標範圍以此對主輸出做更集中的分析。離線支持是可行的,因為在模擬時間t0上的硬體狀態,模擬進程範圍的全部主輸入以及在模擬時間t1上的硬體狀態都存儲在系統磁碟中。這樣,用戶可以通過載入與模擬時間t0相對應的設計並且接著規定模擬目標範圍回到調試他的設計上。同時,用戶可以通過載入與模擬時間t3相對應的硬體狀態而直接地繼續進行到下一個模擬目標範圍。VI.硬體實現方案A.概述模擬仿真系統在可重新配置的電路板上實現FPGA晶片陣列。基於硬體模型,模擬仿真系統將用戶電路設計的每個所選部分分區,映射,布局和布線在FPGA晶片上。因此,例如擁有16個晶片的4×4陣列可以模擬展開在這16個晶片上的大型電路。互連方案可以使每個晶片在2次「跳轉」或連接之內訪問另一個晶片。每個FPGA晶片為每個輸入/輸出地址空間(即,REG,CLK,S2H,H2S)設置一個地址指示器。與特定地址空間有關的所有地址指示器互相連結在一起。所以,在數據傳輸過程中,順序的從/向主FPGA總線和PCI總線選擇每個晶片中的字數據,針對每個晶片中的所選地址空間一次一個字,並且一次一個晶片,直到為所選地址空間訪問到所期望的字數據為止。這種字數據的順序選擇通過傳送字選擇信號完成。該字選擇信號穿過晶片中的地址指示器並接著傳送到下一個晶片的地址指示器中,這樣繼續直到最後一個晶片或系統對地址指示器進行初始化。在可重新配置的電路板中的FPGA總線系統工作時的帶寬是PCI總線的兩倍,但速度僅為PCI總線的一半。因此,FPGA晶片被分成若干組以利用更大帶寬的總線。此FPGA總線系統的處理能力可以比得上PCI總線系統的處理能力,所以並沒有因為總線速度的降低而損失性能。可以採用包含更多FPGA晶片的更大的電路板或機載電路板延伸組長度來實現擴展。B.地址指示器圖11顯示了本發明地址指示器的一個實施例。所有的輸入/輸出操作都要經過DMA流。因為系統僅有一根總線,所以系統按一次一個字的方式順序的訪問數據。因此,地址指示器的一個實施例使用移位寄存器鏈順序的訪問這些地址空間中的所選的字。地址指示器400包括觸發器401-405,「與」門406,以及一對控制信號,INITIALIZE407和MOVE408。每個地址指示器具有n個輸出(W0,W1,W2,...,Wn-1),用於從每個FPGA晶片中的n個可能的字中選擇一個對應於所選地址空間中的相同字的字。根據模型化的特定用戶電路設計,不同電路設計的字的數量n也不同,對於給定的電路設計,不同FPGA晶片的n也不同。在圖11中,地址指示器400僅為一個5個字(即,n=5)的地址指示器。因此,此包含用於特定地址空間5字地址指示器的的特定FPGA晶片僅具有5個字可供選擇。不用說,地址指示器400可以具有任何數量n的字。該輸出信號Wn也可被稱為字選擇信號。當該字選擇信號到達此地址指示器中最後一個觸發器的輸出時,其被稱為OUT信號,並被傳送給下一個FPGA晶片的地址指示器的輸入。當斷言INITIALIZE信號時,初始化地址指示器。第一觸發器401被設置為「1」,所有其他觸發器402-405被設置為「0」。此時,地址指示器的初始化不會啟動任何字選擇;也就是說,初始化之後,所有的Wn輸出仍為「0」。地址指示器的初始化過程將結合圖12討論。MOVE信號控制指示器字選擇的進程。此MOVE信號來源於來自FPGA輸入/輸出控制器的指數控制信號READ,WRITE和SPACE。因為每次操作本質上都是一次讀或寫,所以SPACE指數信號實質上確定了MOVE信號將應用於哪個地址指示器。因此,系統一次僅激活一個與一所選輸入/輸出地址空間相關的地址指示器,並且在此過程中,系統將MOVE信號僅用於此地址指示器。將結合圖13進一步討論MOVE信號的生成。根據圖11,當斷言MOVE信號時,將MOVE信號提供給「與」門406的一個輸入和觸發器401-405的啟動輸入。這樣,在每系統時鐘周期,一個邏輯「1」將從字輸出Wi移動到Wi+1;也就是說,在每時鐘周期,指示器將從Wi移動到Wi+1以選擇特定的字。當移位字選擇信號前進到最後一個觸發器405的輸出413(在此標記為「OUT」)時,除非再次初始化地址指示器,此OUT信號應在此後通過多路傳輸的跨晶片地址指示器鏈路進入下一個FPGA晶片(將結合圖14和15討論此過程)。現在闡述地址指示器的初始化過程。圖12顯示了圖11所示地址指示器初始化的狀態轉變圖。開始時,狀態460為空閒。當將DATA_XSFR設置為「1」時,系統進入狀態461,地址指示器在這裡被初始化。在此,斷言INITIALIZE信號。每個地址指示器中的第一觸發器被設置為「1」,地址指示器中的所有其他觸發器被設置為「0」。此時,地址指示器的初始化不會啟動任何字選擇;也就是說,所有的Wn輸出仍為「0」。下一個狀態是等待狀態462,同時DATA_XSFR仍為「1」。當DATA_XSFR為「0」時,完成地址指示器的初始化過程並且系統返回空閒狀態460。現在闡述為地址指示器產生不同MOVE信號的MOVE信號發生器。由FPGA輸入/輸出控制器(圖10中的327;圖22)產生的SPACE指數選擇特定的地址空間(即,REG讀,REG寫,S2H讀,H2S寫,和CLK寫)。在該地址空間中,本發明的系統順序的選擇特定的字以供訪問。順序字選擇在每個地址指示器中通過MOVE信號完成。圖13顯示了MOVE信號發生器的一個實施例。每個FPGA晶片450具有對應於不同的軟體/硬體邊界地址空間(即,REG,S2H,H2S,和CLK)的地址指示器。除了地址指示器和模擬並實現在FPGA晶片450中的用戶電路設計,FPGA晶片450中還具有MOVE信號發生器470。MOVE信號發生器470包括一個地址空間解碼器451和若干「與」門452-456。輸入信號為導線線路457上的FPGA讀信號(F_RD),導線線路458上的FPGA寫信號(F_WR),以及地址空間信號459。用於每個地址指示器的輸出MOVE信號根據應用哪個地址空間的地址指示器,對應於導線線路464上的REGR-move,導線線路465上的REGW-move,導線線路466上的S2H-move,導線線路467上的H2S-move,以及導線線路468上的CLK-move。這些輸出信號對應於導線線路408上的MOVE信號(圖11)。地址空間解碼器451接收一個3位輸入信號459。其也可以接收2位輸入信號。該2位信號提供4個可能的地址空間,而3位信號提供8個可能的地址空間。在一個實施例中,將CLK分配為「00」,S2H分配為「01」,H2S分配為「10」,REG分配為「11」。根據輸入信號459,地址空間解碼器的輸出端在導線線路460-463中的一條上輸出一個「1」,分別對應於REG,S2H,H2S,和CLK,同時將剩下的導線線路設置為「0」。因此,如果這些輸出導線線路460-463中任何一個為「0」,那麼其對應的「與」門452-456的輸出也為「0」。同樣的,如果這些輸入導線線路460-463中任何一個為「1」,那麼其對應的「與」門452-456的輸出也為「1」。例如,如果地址空間信號459為「10」,則選擇了地址空間H2S。導線線路461為「1」而剩下的導線線路460,462和463為「0」。相應的,導線線路466為「1」而剩下的輸出導線線路464,465,467和468為「0」。同樣,如果導線線路460為「1」,則選擇了地址空間REG並且根據所選擇的是讀(F_RD)還是寫(F_WR)操作,導線線路464上的REGR-move信號或導線線路465上的REGW-move信號將為「1」。如前文中所解釋的,SPACE指數由FPGA輸入/輸出控制器產生。用編碼表示,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信號發生器的邏輯圖等價的編碼。如上所述,每個FPGA晶片具有相同數量的地址指示器作為軟體/硬體邊界中的地址空間。如果軟體/硬體邊界中具有4個地址空間(即,REG,S2H,H2S,和CLK),則每個FPGA晶片具有對應於這4個地址空間的4個地址指示器。每個FPGA需要這4個地址指示器,因為在所選地址空間中被處理的特定選擇字可位於任何一個或多個FPGA晶片中,或所選地址空間中的數據影響在每個FPGA晶片中模擬並實現的不同電路元件。為確保在合適的FPGA晶片中用合適的電路元件處理所選擇的字,與一給定軟體/硬體邊界地址空間(即,REG,S2H,H2S,和CLK)相關的每組地址指示器跨越多個FPGA晶片被「連結」在一起。如上文結合圖11所述,仍然使用通過MOVE信號進行特定移位或傳送的字選擇機制,除了在此「連結」實施例中,一個FPGA晶片中與一特定地址空間相關的一地址指示器與下一個FPGA晶片中與相同地址空間相關的一地址指示器「連結」。利用4個輸入引腳和4個輸出引腳連結地址指示器可以實現同樣的目的。但是,此實施方式就有效的利用資源而言太浪費了;也就是說,在兩個晶片之間需要4根導線,在每個晶片中需要4個輸入引腳和4個輸出引腳。根據本發明的系統的一個實施例使用多路復用跨晶片地址指示器鏈路,其使得硬體模型在晶片之間僅使用一根導線並且在每個晶片中僅使用1個輸入引腳和1個輸出引腳(一個晶片中的2個輸入/輸出引腳)。多路復用跨晶片地址指示器鏈路的一個實施例如圖14所示。在圖14所示實施例中,用戶的電路設計被映射和劃分在可重新配置的硬體板470上的三個FPGA晶片415-417中。由塊421-432表示地址指示器。每個地址指示器,例如地址指示器427具有類似於圖11所示的地址指示器的結構和功能,除了字的數量Wn有所不同,並且因此觸發器的數量也可能根據用於用戶定製電路設計的每個晶片中字的數量而有所不同。對於REGR地址空間,FPGA晶片415具有地址指示器421,FPGA晶片416具有地址指示器425,FPGA晶片417具有地址指示器429。對於REGW地址空間,FPGA晶片415具有地址指示器422,FPGA晶片416具有地址指示器426,FPGA晶片417具有地址指示器430。對於S2H地址空間,FPGA晶片415具有地址指示器423,FPGA晶片416具有地址指示器427,FPGA晶片417具有地址指示器431。對於H2S地址空間,FPGA晶片415具有地址指示器424,FPGA晶片416具有地址指示器428,FPGA晶片417具有地址指示器432。每個晶片415-417分別具有一個多路復用器418-420。應注意這些多路復用器418-420可能是模型,而真正的實現則可能是寄存器和邏輯元件的組合,如所屬
技術領域:
的技術人員所知。例如,多路復用器可以是如圖15所示的多個「與」門輸入到一個「或」門的形式。多路復用器487包括四個「與」門481-484和一個「或」門485。多路復用器487的輸入為來自晶片中每個地址指示器的OUT和MOVE信號。多路復用器487的輸出486為傳送到下一個FPGA晶片輸入端的鏈連信號。在圖15中,此特定FPGA晶片具有對應於輸入/輸出地址空間的四個地址指示器475-478。地址指示器的輸出,OUT和MOVE信號,為多路復用器487的輸入。例如,地址指示器475在導線線路479上具有一個OUT信號,在導線線路480上具有一個MOVE信號。這些信號被輸入「與」門481。「與」門481的輸出為「或」門485的一個輸入。「或」門485的輸出即為此多路復用器487的輸出。在操作中,每個地址指示器475-478的輸出端的OUT信號連同其相應的MOVE信號以及SPACE指數充當多路復用器487的選擇器信號;也就是說,OUT和MOVE信號(其來源於SPACE指數信號)必須都被斷言有效(即,邏輯「1」)以將字選擇信號傳送出多路復用器到達鏈連導線線路。將周期性的斷言MOVE信號,以通過地址指示器中的觸發器移動字選擇信號,從而使其具有輸入MUX數據信號的特徵。參見圖14,這些多路復用器418-420具有四組輸入和一個輸出。每組輸入包括(1)與特定地址空間相關的地址指示器的最後一個輸出Wn-1導線線路(例如,圖11中地址指示器的導線線路413)上的OUT信號,以及(2)MOVE信號。每個多路復用器418-420的輸出為鏈連信號。當每個地址指示器中通過觸發器的字選擇信號Wn到達地址指示器中最後一個觸發器的輸出端時,其成為OUT信號。僅當與相同地址指示器相關的一個OUT信號和一個MOVE信號均被斷言為有效(即,斷言為「1」)時,導線線路433-435上的鏈連信號才為「1」。對於多路復用器418,輸入為分別對應於來自地址指示器421-424的OUT和MOVE信號的MOVE信號436-439和OUT信號440-443。對於多路復用器419,輸入為分別對應於來自地址指示器425-428的OUT和MOVE信號的MOVE信號444-447和OUT信號452-455。對於多路復用器420,輸入為分別對應於來自地址指示器429-432的OUT和MOVE信號的MOVE信號448-451和OUT信號456-459。在操作中,對於任何給定的字Wn的移位來說,只有那些與軟體/硬體邊界中一所選輸入/輸出地址空間相關的地址指示器或地址指示器鏈路是有效的。因此,在圖14中,對於一給定的移位,只有晶片415,416和417中與地址空間REGR,REGW,S2H或H2S中的一個相關的地址指示器才是有效的。同樣,對於一個通過觸發器的字選擇信號Wn的給定移位來說,由於總線帶寬的限制所選的字被順序的訪問。在一個實施例中,總線帶寬為32位並且一個字也為32位,所以一次僅可以訪問一個字,並將其送給適當的資源。當地址指示器正通過其觸發器進行字選擇信號的傳送或移位時,輸出鏈連信號未被激活(即,不是「1」),並因此,此晶片中的此多路復用器未準備好將字選擇信號傳送給下一個FPGA晶片。當OUT信號被斷言為有效(即,「1」)時,鏈連信號被斷言為有效(即,「1」),表明系統準備好了將字選擇信號傳送或移位到下一個FPGA晶片。因此,一次對一個晶片進行訪問;也就是說,在為另一個晶片執行字選擇移位操作之前,一個晶片中的字選擇信號通過觸發器移位。事實上,僅當字選擇信號到達每個晶片中地址指示器的終端時斷言鏈連信號。以編碼表示,鏈連信號為Chain-out=(REGR-move&REGR-out)|(REGW-move&REGW-out)|(S2H-move&S2H-out)|(H2S-move&H2S-out);總之,對於系統中的X個輸入/輸出地址空間(即,REG,S2H,H2S,和CLK)來說,每個FPGA具有X個地址指示器,一個地址指示器對應於一個地址空間。每個地址指示器的尺寸取決於在每個FPGA晶片中模擬用戶定製電路設計所需的字的數量。假設一特定FPGA晶片需n個字,並因而,地址指示器也有n個字,此特定地址指示器具有n個輸出(即,W0,W1,W2,...,Wn-1)。這些輸出Wi也被稱為字選擇信號。當選擇了特定字Wi時,Wi信號被斷言為有效(即,「1」)。此字選擇信號向此晶片的下遊地址指示器移位或傳送直到到達此晶片中地址指示器的末端,在此處,其觸發鏈連信號的生成,鏈連信號使字選擇信號Wi開始在下一個晶片的地址指示器中傳送。按此方式,在跨越此可重新配置的硬體板上的所有FPGA晶片上,可實現與給定輸入/輸出地址空間相關的一系列地址指示器。C.門控數據/時鐘網絡分析本發明的不同實施例與門控數據邏輯和門控時鐘邏輯分析相結合執行時鐘分析。門控時鐘邏輯(或時鐘網絡)和門控數據網絡確定對軟體時鐘的成功實現和在仿真過程中硬體模型中的邏輯估算非常關鍵。如結合圖4所述,在步驟305執行時鐘分析。為進一步闡述該時鐘分析過程,圖16顯示了根據本發明一實施例的流程圖。圖16還顯示了門控數據分析。模擬仿真系統在軟體中具有用戶電路設計的完整模型,在硬體中具有用戶電路設計的一些部分。這些硬體部分包括時鐘部件,尤其是派生的時鐘。由於此軟體和硬體之間的邊界,而產生了時鐘傳送時序問題。因為軟體中具有完整模型,所以軟體可以檢測影響寄存器值的時鐘邊沿。除了寄存器的軟體模型,這些寄存器還真實存在於硬體模型中。為了確保硬體寄存器也估算其相應的輸入(即,將D輸入的數據移到Q輸出),軟體/硬體邊界包含一個軟體時鐘。軟體時鐘確保硬體模型中的寄存器正確的進行估算。軟體時鐘實質上控制硬體寄存器的啟動輸入,而不是控制對硬體寄存器部件的時鐘輸入。此軟體時鐘避免了競態狀態並因此,不需要用精確的時序控制來避免佔用時間擾亂。圖16所示的時鐘網絡和門控數據邏輯分析過程向硬體寄存器提供了一種模擬和實現時鐘和數據傳輸系統的方法,其避免了競態狀態並提供了靈活的軟體/硬體邊界實施方式。如前所述,主時鐘為來自測試平臺程序的時鐘信號。所有其他時鐘,例如源自組合部件的那些時鐘信號,為派生的或門控時鐘。主時鐘可以派生門控時鐘和門控數據信號。對於大多數部分,僅有很少的(如,1-10個)派生的或門控時鐘存在於用戶的電路設計中。這些派生的時鐘可以以軟體時鐘的形式實現並存在於軟體中。如果在電路設計中存在相對數量較大的(如,超過10個)派生的時鐘,模擬仿真系統會將其模型化在硬體之中以減少輸入/輸出開支並維持模擬仿真系統的性能。門控數據為數據或寄存器的控制輸入,其不同於通過一些組合邏輯來自主時鐘驅動的時鐘。門控數據/時鐘分析過程開始於步驟500。步驟501獲取產生於HDL編碼的有用的源設計資料庫編碼並將用戶的寄存器元件映射到模擬仿真系統的寄存器部件。該用戶寄存器到模擬仿真寄存器的一對一映射有助於隨後的模型化步驟。在一些情況下,需要此映射以處理用特定的原語言描述寄存器元件的用戶電路設計。因此,對於RTL級的編碼來說,可以相當容易地使用模擬仿真寄存器,因為RTL編碼的等級足夠高,可以改變較低等級的實施方式。對於門級連線表來說,模擬仿真系統將訪問部件的單元庫並對其進行修改,使其適合特定電路設計的專用邏輯元件。步驟502從硬體模型的寄存器部件中析取時鐘信號。此步驟允許系統確定主時鐘和派生的時鐘。此步驟還確定電路設計中不同部件所需的所有時鐘信號。來自此步驟的信息有助於軟體/硬體時鐘模型化步驟。步驟503確定主時鐘和派生的時鐘。主時鐘源自測試平臺部件並僅被模型化在軟體中。派生的時鐘來自組合邏輯,其反過來由主時鐘驅動。根據系統設定,本發明的模擬仿真系統將保持派生的時鐘在軟體中。如果派生的時鐘的數量較少(如,少於10個),那麼可將這些派生的時鐘模型化為軟體時鐘。因為生成這些派生的時鐘的組合部件的數量較小,所以將這些組合部件保存在軟體中並不增加大量的輸入/輸出開支。但是,如果派生的時鐘的數量較大(如,超過10個),那麼可將這些派生的時鐘模型化在硬體中以最小化輸入/輸出開支。有時,用戶的電路設計使用大量的來源於主時鐘的派生的時鐘部件。因此,系統在硬體中建立時鐘,以保持較小的軟體時鐘數量。決策步驟504需要系統去確定是否在用戶的電路設計中發現任何的派生的時鐘。如果沒有,則步驟504的結果為「否」並且時鐘分析終止於步驟508,因為用戶的電路設計中所有的時鐘都為主時鐘並且這些時鐘都簡單模擬在軟體之中。如果在用戶的電路設計中發現派生的時鐘,則步驟504的結果為「是」並且算法進入步驟505。步驟505確定從主時鐘到派生的時鐘的扇出組合部件。換句話說,此步驟通過組合部件跟蹤來自主時鐘的時鐘信號數據通路。步驟506確定來自派生的時鐘的扇入組合部件。換句話說,此步驟跟蹤從組合部件到派生的時鐘的時鐘信號數據通路。在軟體中循環進行系統輸出和扇入組的確定。網絡N的扇入組如下  FanInSetofanetN  findallthecomponentsdrivingnetN;  foreachcomponentXdrivingnetNdo  ifthecomponentXisnotacombinationalcomponentthen return;  else  foreachinputnetYofthecomponentX  addtheFanInsetWofnetYtotheFanInSetofnetN  endfor  addthecomponentXintoN;  endif  endfor通過反覆的確定網絡N的扇入(fan-in)組和扇出(fan-out)組以及它們的交集,來確定門控時鐘或數據邏輯網絡。此處的最終目標是確定網絡N的所謂扇入組。網絡N通常是一個時鐘輸入節點,用於從輸入的角度確定門控時鐘邏輯。對於從輸入的角度確定門控數據邏輯來說,網絡N是一個與臨近的數據輸入相關的時鐘輸入節點。如果節點在寄存器上,網絡N為對此寄存器的時鐘輸入,此寄存器用於與其相關的數據輸入。系統發現所有驅動網絡N的部件。對於每個驅動網絡N的部件X,系統確定部件X是否為組合部件。如果每個部件X均不為組合部件,那麼網絡N的扇入組不含有組合部件並且網絡N為主時鐘。但是,如果至少有一個部件X為組合部件,則系統接著確定部件X的輸入網絡Y。在此,系統通過發現到部件X的輸入節點可以進一步的在電路設計中向後探詢。對於每個部件X的每個輸入網絡Y,可能存在與網絡Y連接的扇入組W。將網絡Y的該扇入組W與網絡N的扇入組Fan-InSet相加,則部件X加入組N。以類似的方式確定網絡N的扇出組。網絡N的扇出組如下  FanOutSetofanetN  findallthecomponentsusingnetN;  foreachcomponentXusingthenetNdo  ifthecomponentXisnotacombinationalcomponentthen  return;  else  foreachoutputnetYofthecomponentX  addtheFanOutSetofnetYtotheFanOutSetofnetN endfor  addthecomponentXintoN;  endif  endfor再一次,通過反覆的確定網絡N的扇入組和扇出組以及它們的交集來確定門控時鐘或數據邏輯網絡。此處的最終目標是確定網絡N的所謂扇出組。網絡N通常是一個時鐘輸出節點,用於從扇出的角度確定門控時鐘邏輯。因此,將確定使用網絡N的所有邏輯元件的組。對於從扇出的角度確定門控時鐘邏輯來說,網絡N是一個與臨近的數據輸出相關的時鐘輸出節點。如果節點在寄存器上,網絡N為此寄存器的時鐘輸出,此寄存器用於與其相關的主時鐘驅動輸入。系統發現所有使用網絡N的部件。對於每個使用網絡N的部件X,系統確定部件X是否為組合部件。如果每個部件X均不為組合部件,那麼網絡N的扇出組不含有組合部件並且網絡N為主時鐘。但是,如果至少有一個部件X為組合部件,則系統接著確定部件X的輸出網絡Y。在此,系統通過發現來自部件X的輸出節點可以進一步的從電路設計中的主時鐘向前探詢。對於每個部件X的每個輸出網絡Y,可能存在與網絡Y連接的扇出組W。將此網絡Y的扇出組W與網絡N的扇出組Fan-OutSet相加,則部件X加入組N。步驟507確定時鐘網絡或門控時鐘邏輯。時鐘網絡為扇入和扇出組合部件的交集。類似的,可以使用相同的扇入和扇出原則來確定門控數據邏輯。與門控時鐘類似,門控數據為由一主時鐘通過一些組合邏輯驅動的一寄存器的數據或控制輸入(除了時鐘)。門控數據邏輯是門控數據的扇入和來自主時鐘的扇出的交集。因此,時鐘分析和門控數據分析通過一些組合邏輯和一門控數據邏輯產生門控時鐘網絡/邏輯。如下文所述,門控時鐘網絡和門控數據網絡確定對軟體時鐘的成功實現和在仿真過程中硬體模型中的邏輯估算非常關鍵。時鐘/數據網絡分析終止於步驟508。圖17顯示了根據本發明一個實施例的硬體模型的基本構件塊。對於寄存器部件,模擬仿真系統使用具有異步負載控制的D型觸發器作為構成邊緣觸發器(即,觸發器)和電平感應(即,鎖存器)寄存器硬體模型的基本塊。此寄存器模型構件塊具有下列埠Q(輸出狀態);A_E(異步啟動);A_D(異步數據);S_E(同步啟動);S_D(同步數據);當然還有System.clk(系統時鐘)。此模擬仿真寄存器模型由系統時鐘的正沿或異步啟動(A_E)輸入的正電平觸發。當正沿或正電平觸發事件發生時,寄存器模型尋找異步啟動(A_E)輸入。如果異步啟動(A_E)輸入被激活,則輸出Q具有異步數據(A_D)的值;否則,如果同步啟動(S_E)輸入被激活,則輸出Q具有同步數據(S_D)的值。另一方面,如果異步啟動(A_E)或同步啟動(S_E)輸入都未被激活,則不估算輸出Q的值,儘管已檢測系統時鐘的正沿。按此方法,對這些啟動埠的輸入控制了基本構件塊寄存器模型的操作。系統使用軟體時鐘(其為專門的啟動寄存器)控制這些寄存器模型的啟動輸入。在複雜的用戶電路設計中,在電路設計中具有數百萬個元件並且因此,模擬仿真器系統將在硬體模型中實現數百萬個元件。單個控制所有這些元件的成本將是很高的,因為向硬體模型傳送數百萬個控制信號的操作比在軟體中估算這些元件將花費更長的時間。但是,即使此複雜的電路設計通常也只調用很少的(1-10個)時鐘,並且僅就時鐘而言足夠控制僅具有寄存器和組合部件的系統的狀態轉變。模擬仿真器系統的硬體模型僅使用寄存器和組合部件。模擬仿真器系統還通過軟體時鐘控制硬體模型的估算。在模擬仿真器系統中,用於寄存器的硬體模型不具有直接連接其他硬體部件的時鐘;而是由軟體內核控制所有時鐘的值。通過控制幾個時鐘信號,內核具有對硬體模型估算的全面控制,同時協同處理器幹涉開銷可以忽略。根據寄存器模型被當作鎖存器還是觸發器使用,將軟體時鐘輸入異步啟動(A_E)或同步啟動(S_E)導線線路。由時鐘部件的邊緣檢測觸發從軟體模型到硬體模型的軟體時鐘應用。當軟體內核檢測到時鐘部件的邊緣時,其通過CLK地址空間設置時鐘邊沿寄存器。此時鐘邊沿寄存器控制對硬體寄存器模型的啟動輸入,而不是時鐘輸入。全局系統時鐘仍提供對硬體寄存器模型的時鐘輸入。但是,時鐘邊沿寄存器通過一個雙緩衝器接口向硬體寄存器模型提供軟體時鐘信號。如下文將解釋的,從軟體時鐘到硬體模型的雙緩衝器接口保證了所有寄存器模型將關於全局系統時鐘被同步更新。因此,軟體時鐘的使用消除了佔用時間擾亂的危險。圖18(A)和18(B)顯示了實現鎖存器和觸發器的構件塊寄存器模型。這些寄存器模型藉由合適的啟動輸入受軟體時鐘的控制。根據寄存器模型被當作鎖存器還是觸發器使用,異步埠(A_E,A_D)和同步埠(S_E,S_D)被用於軟體時鐘或輸入/輸出操作。圖18(A)顯示了被當作鎖存器使用的寄存器模型的實現。鎖存器為電平感應的;也就是說,只要斷言了時鐘信號(如,「1」),則輸出Q跟隨輸入(D)。在此,軟體時鐘信號被提供給異步啟動(A_E)輸入,數據輸入被提供給異步數據(A_D)輸入。對於輸入/輸出操作,軟體內核使用同步啟動(S_E)和同步數據(S_D)輸入,將值下載到Q埠。S_E埠被用作REG空間地址指示器,S_D埠用於向/從局部數據總線存取數據。圖18(B)顯示了被當作設計觸發器使用的寄存器模型的實現。設計觸發器使用下列埠確定下一個狀態邏輯數據(D),設置(S),復位(R),和啟動(E)。設計觸發器的所有下一個狀態邏輯都作為進入同步數據(S_D)輸入的硬體組合部件的因子。軟體時鐘被輸入到同步啟動(S_E)輸入。對於輸入/輸出操作,軟體內核使用異步啟動(A_E)和異步數據(A_D)輸入,將值下載到Q埠。A_E埠被用作REG空間寫地址指示器,A_D埠用於向/從局部數據總線存取數據。現在討論軟體時鐘。本發明軟體時鐘的一個實施例是對硬體寄存器模型的一時鐘啟動信號,這樣使得這些硬體寄存器模型輸入端的數據被一同估算並與系統時鐘同步。這消除了競態狀態和佔用時間擾亂。軟體時鐘邏輯的一個實施例包括軟體中的時鐘邊沿檢測邏輯,其根據時鐘邊沿檢測觸發硬體中的附加邏輯。此啟動信號邏輯在數據到達這些硬體寄存器模型之前,為硬體寄存器模型的啟動輸入生成啟動信號。門控時鐘網絡和門控數據網絡確定對軟體時鐘的成功實現和在硬體加速模式中硬體模型的邏輯估算非常關鍵。如前文所述,時鐘網絡或門控時鐘邏輯為門控時鐘扇入和主時鐘扇出的交集。類似的,門控數據邏輯也為門控數據扇入和數據信號主時鐘扇出的交集。上文中結合圖16討論了扇入和扇出的概念。如上文所述,主時鐘由軟體中的測試平臺程序生成。派生的或門控時鐘由反過來受主時鐘驅動的組合邏輯和寄存器網絡生成。根據系統設定,本發明的模擬仿真系統也將派生的時鐘保留在軟體中。如果派生的時鐘的數量較少(如,少於10個),那麼可將這些派生的時鐘模型化為軟體時鐘。因為生成這些派生的時鐘的組合部件的數量較小,所以將這些組合部件模型化在軟體中並沒有增加大量的輸入/輸出開支。但是,如果派生的時鐘的數量較大(如,超過10個),那麼可將這些派生的時鐘和它們的組合部件模型化在硬體中以最小化輸入/輸出開支。最終,根據本發明的一個實施例,在軟體中發生的時鐘邊沿檢測(通過對主時鐘的輸入)可被翻譯成硬體中的時鐘檢測(通過對時鐘邊沿寄存器的輸入)。軟體中的時鐘邊沿檢測觸發硬體中的一個事件,使得硬體模型中的寄存器在接收數據信號之前接收時鐘啟動信號,確保數據信號的估算與系統時鐘同步發生以避免佔用時間擾亂。如前文所述,模擬仿真系統在軟體中具有用戶電路設計的完整模型,在硬體中具有用戶電路設計的一些部分。如內核中所規定的,軟體可以檢測影響硬體寄存器值的時鐘邊沿。為確保硬體寄存器也估算其相應的輸入,軟體/硬體邊界包括一個軟體時鐘。軟體時鐘確保硬體模型中的寄存器的估算與系統時鐘同步,並且沒有佔用時間擾亂。軟體時鐘實質上控制硬體寄存器部件的啟動輸入,而不是控制對硬體寄存器部件的時鐘輸入。實現軟體時鐘的雙緩衝法確保了寄存器的估算與系統時鐘同步,避免了競態狀態,並消除了對精確時序控制的需要,從而避免了佔用時間擾亂。圖19顯示了根據本發明的時鐘執行系統的一個實施例。開始時,如結合圖16所述,由模擬仿真器系統確定門控時鐘邏輯和門控數據邏輯。接著分離門控時鐘邏輯和門控數據邏輯。當實現雙緩衝器時,還必須分離驅動源和雙緩衝主邏輯。因此,根據扇入和扇出分析,門控數據邏輯513和門控時鐘邏輯514已經分離。模擬的主時鐘寄存器510包括一個第一緩衝器511和一個第二緩衝器512,其均為D寄存器。該主時鐘被模型化在軟體中,但雙緩衝器裝置被模型化在軟體和硬體中。時鐘邊沿檢測發生在軟體中的主時鐘寄存器510中以觸發硬體模型生成對硬體模型的軟體時鐘信號。數據和地址分別在導線線路519和520上進入第一緩衝器511。第一緩衝器511在導線線路521上的Q輸出與第二緩衝器512的D輸入相連。第一緩衝器511的Q輸出還通過導線線路522被提供給門控時鐘邏輯514以最終驅動時鐘邊沿寄存器515的第一緩衝器516的時鐘輸入。第二緩衝器512的Q輸出通過導線線路523被提供給門控數據邏輯513以通過導線線路530最終驅動在用戶定製設計的電路模型中的寄存器518的輸入。主時鐘寄存器510的第二緩衝器512的啟動輸入為導線線路533上來自狀態機的INPUT-EN信號,其確定估算周期並相應地控制不同的信號。時鐘邊沿寄存器515還包括一個第一緩衝器516和一個第二緩衝器517。時鐘邊沿寄存器515實現在硬體中。當在軟體中發生時鐘邊沿檢測時(通過主時鐘寄存器510的輸入),可以觸發在硬體中相同的時鐘邊沿檢測(通過時鐘邊沿寄存器515)。導線線路524上對第一緩衝器516的D輸入被設置為「1」。導線線路525上的時鐘信號來自門控時鐘邏輯514並最終來自主時鐘寄存器510中第一緩衝器511在導線線路522上的輸出。導線線路525上的該時鐘信號為門控時鐘信號。第一緩衝器516的啟動導線線路526上的信號為來自狀態機的控制輸入/輸出和估算周期(將在下文介紹)的~EVAL信號。第一緩衝器516還在導線線路527上具有RESET信號。此相同的RESET信號還將被提供給時鐘邊沿寄存器515的第二緩衝器517。第一緩衝器516在導線線路529上的Q輸出被提供給第二緩衝器517的D輸入。第二緩衝器517在導線線路528上還具有啟動輸入CLK-EN信號,在導線線路527上具有一個RESET輸入。第二緩衝器517的Q輸出通過導線線路532被提供給用戶定製設計的電路模型中的寄存器518的啟動輸入。緩衝器511,512和517連同寄存器518由系統時鐘控制。僅時鐘邊沿寄存器515中的緩衝器516由來自門控時鐘邏輯514的門控時鐘控制。寄存器518為模擬在硬體中的典型的D型寄存器模型,並且為用戶定製電路設計的一部分。由本發明時鐘實施方案的此實施例嚴格控制其估算過程。此時鐘設定的最終目標為確保導線線路532上的時鐘啟動信號在導線線路530上的數據信號之前到達寄存器518,使得此寄存器對數據信號的估算與系統時鐘同步發生並且沒有競態狀態的發生。再次重申,模擬的主時鐘寄存器510被模型化在軟體中,但其雙緩衝器裝置被模型化在軟體和硬體中。時鐘邊沿寄存器515實現在硬體中。根據扇入和扇出分析,門控數據邏輯513和門控時鐘邏輯514也被分離以用於模型化的目的,並且它們可以被模型化在軟體中(如果門控數據和門控時鐘的數量較小)或硬體中(如果門控數據和門控時鐘的數量較大)。門控時鐘網絡和門控數據網絡的確定對軟體時鐘的成功實現和在硬體加速過程中硬體模型的邏輯估算非常關鍵。軟體時鐘的實現主要依賴於圖19所示的時鐘設定以及信號~EVAL,INPUT-EN,CLK-EN和RESET的斷言時序。主時鐘寄存器510檢測時鐘邊沿來為硬體模型觸發軟體時鐘的生成。此時鐘邊沿檢測事件通過導線線路525上的時鐘輸入,門控時鐘邏輯514,和導線線路522觸發時鐘邊沿寄存器515的「激活」,使得時鐘邊沿寄存器515也檢測相同的時鐘邊沿。按此方式,在軟體中發生的時鐘檢測(通過主時鐘寄存器510的輸入519和520)可被翻譯成硬體中的時鐘邊沿檢測(通過時鐘邊沿寄存器515的輸入525)。此時,主時鐘寄存器510的第二緩衝器512的INPUT-EN導線線路533和時鐘邊沿寄存器515的第二緩衝器517的CLK-EN導線線路528還未被斷言,因此沒有數據估算發生。因此,檢測時鐘邊沿將在硬體寄存器模型中估算數據之前發生。應注意在此階段,導線線路519上來自數據總線的數據還沒有被傳送到門控數據邏輯513並進入硬體模型化的用戶寄存器518。事實上,數據甚至還沒有到達主時鐘寄存器510的第二緩衝器512,因為導線線路533上的INPUT-EN信號還沒有被斷言。在輸入/輸出階段,斷言導線線路526上的~EVAL信號以啟動時鐘邊沿寄存器515中的第一緩衝器516。~EVAL信號在通過門控時鐘邏輯到第一緩衝器516的導線線路525的時鐘輸入時,還經過門控時鐘邏輯514對門控時鐘信號進行監視。因此,如下文中結合4狀態估算狀態機所述,可以根據需要儘可能長時間地維持~EVAL信號,以穩定經過系統中圖19所示部分的數據和時鐘信號。當信號穩定後,輸入/輸出終止,或系統準備估算數據,~EVAL被去斷言(deasserted)以禁用第一緩衝器516。斷言CLK-EN信號並通過導線線路528將其應用於第二緩衝器517以啟動第二緩衝器517,並將導線線路529上的邏輯值「1」送給導線線路532上的Q輸出,至寄存器518的啟動輸入。寄存器518現在已經被啟動並且導線線路530上的任何數據將由系統時鐘同步時鐘輸入到寄存器518。如讀者可觀察到的一樣,寄存器518的啟動信號比輸入到此寄存器518的數據信號的估算運行的更快。導線線路533上的INPUT-EN信號未被斷言給第二緩衝器512。並且,導線線路527上的RESET邊緣寄存器信號被斷言給時鐘邊沿寄存器515中的緩衝器516和517以將這些緩衝器復位並確保它們的輸出為邏輯「0」。現在INPUT-EN信號已被斷言給緩衝器512,導線線路521上的數據被傳送到門控數據邏輯513以通過導線線路530到達用戶電路寄存器518。因為寄存器518的啟動輸入現在為邏輯「0」,導線線路530上的數據無法被時鐘輸入寄存器518。但是,先前的數據在RESET信號被斷言給禁用的寄存器518之前已經通過先前斷言的導線線路532上的啟動信號被時鐘輸入。因此寄存器518的輸入數據,以及其他寄存器(其為用戶硬體模型化電路設計的一部分)的輸入對於它們相應的寄存器輸入埠穩定。當隨後在軟體中檢測到時鐘邊沿時,主時鐘寄存器510和硬體中的時鐘邊沿寄存器515激活寄存器518的啟動輸入,使得等待輸入寄存器518的數據和其他等待輸入其對應寄存器的數據一同被時鐘輸入並與系統時鐘同步。如前所述,軟體時鐘實現主要依賴於圖19所示的時鐘設定以及信號~EVAL,INPUT-EN,CLK-EN和RESET的斷言時序。圖20顯示了根據本發明一個實施例的控制圖19所示軟體時鐘邏輯的四狀態有限狀態機。在狀態540,系統空閒或一些輸入/輸出操作正在進行。EVAL信號為邏輯「0」。EVAL信號確定估算周期,其由系統控制器生成,並且可以根據需要持續很多個時鐘周期以穩定系統中的邏輯。通常,EVAL信號持續的時間由編譯過程中的布局方案確定並基於最長直接線的長度和最長分段多路傳輸導線(即,TDM電路)的長度。在估算過程中,EVAL信號為邏輯「1」。在狀態541,時鐘被啟動。CLK-EN信號被斷言為邏輯「1」並且因此,斷言了硬體寄存器模型的啟動信號。在此,硬體寄存器模型中先前的門控數據被同步估算,而沒有佔用時間擾亂的危險。在狀態542,當INPUT-EN信號被斷言為邏輯「1」時,新的數據被啟動。還斷言RESET信號以從硬體寄存器模型中去除啟動信號。但是,通過門控數據邏輯網絡被允許進入硬體寄存器模型的新數據,將繼續被傳送到它期望的硬體寄存器模型目的地或已經到達其目的地,並等待當啟動信號再次被斷言時被時鐘輸入硬體寄存器模型。在狀態543,傳遞的新數據在邏輯中穩定,同時EVAL信號保持在邏輯「1」。如上文中結合圖9(A),9(B)和9(C)描述時分多路轉換(TDM)電路時所介紹的,多路復用導線也為邏輯「1」。當EVAL信號被去斷言或設置為邏輯「0」時,系統返回空閒狀態540並等待根據軟體對時鐘邊沿的檢測進行估算。D.FPGA陣列和控制模擬仿真器系統首先基於包括部件類型的一系列控制將用戶電路設計數據編譯到軟體和硬體模型中。在硬體編譯過程中,如結合圖6所述,系統執行映射,布局和布線過程,以最佳的劃分,布局以及互連組成用戶電路設計的不同部件。使用已知的編程工具,引用位流配置文件或可編程目的文件(.pof)(或者,原二進位文件(.rbf))來重新置包含許多FPGA晶片的硬體板。每個晶片包含對應用戶電路設計的硬體模型的一部分。在一個實施例中,模擬仿真器系統使用4×4的FPGA晶片陣列,總共擁有16個晶片。FPGA晶片的範例包括XilinxXC4000系列FPGA邏輯裝置和AlteraFLEX10K裝置。可以使用的XilinxXC4000系列FPGA,包括XC4000,XC4000A,XC4000D,XC4000H,XC4000E,XC4000EX,XC4000L,和XC4000XL。特定的FPGA包括XilinxXC4005H,XC4025和Xilinx4028EX。XilinxXC4028EXFPGA在一個單一PCI板上可以驅動將近50萬個門電路。這些XilinxFPGA的詳細資料可以在它們的數據手冊中獲取,[Xilinx,TheProgrammableLogicDataBook](9/96),其內容以引用的方式併入本文。對於AlteraFPGA,可以在下列數據手冊中獲取詳細資料,[Altera,The1996DataBook](1996年六月),其內容以引用的方式併入本文。下面對XC402FPGA進行簡要介紹。每個陣列晶片由一個240引腳的Xilinx晶片組成。組裝有XilinxXC4025晶片的陣列板包含大約440,000個可配置的門電路,並且可以執行計算密集的任務。XilinxXC4025FPGA晶片包含1024個可配置的邏輯塊(CLBs)。每個CLB可以實現32位的異步SRAM,或少量的通用布爾(Boolean)邏輯,以及兩個選通寄存器。在晶片的外圍,具有非選通輸入/輸出寄存器。可以用XC4005H替代XC4025。這是一個成本較低的具有120,000個可配置的門電路的陣列板。XC4005H裝置具有大功率的24mA驅動電路,但缺少標準XC4000系列的輸入/輸出觸發器。可以通過公開的數據表獲得這些和其他XilinxFPGA的詳細資料,其內容以引用的方式併入本文。通過將配置數據載入內部存儲單元可以定製XilinxXC4000系列FPGA的功能。存儲在這些存儲單元中的值確定了FPGA中的邏輯功能和互連。這些FPGA的配置數據可以儲存在片上存儲器中並且可以從外部存儲器載入。FPGA可以從外部串聯或並聯PROM讀取配置數據,或從外部設備將配置數據寫入FPGA。可以無數次的將這些FPGA重新編程,特別是在硬體動態變化或用戶期望硬體能適應不同應用時。XC4000系列FPGA一般具有多達1024個CLB。每個CLB具有兩級查找表,其中兩個4輸入查找表(或函數發生器F和G)為第三個3輸入查找表(或函數發生器H)提供部分輸入,以及兩個觸發器或鎖存器。可以獨立於這些觸發器或鎖存器驅動這些查找表的輸出。CLB可以實現下列任意布爾(Boolean)函數的組合(1)具有四個或五個變量的任何函數,(2)具有四個變量的任何函數,具有多達四個無關變量的任何第二函數,以及具有多達三個無關變量的任何第三函數,(3)一個具有四個變量的函數和一個具有六個變量的函數,(4)具有四個變量的任何兩個函數,以及(5)一些具有九個變量的函數。兩個D型觸發器或鎖存器可用於寄存CLB輸入或儲存查找表的輸出。可以獨立於查找表使用這些觸發器。可以使用DIN作為或者是這兩個觸發器或者是鎖存器中的直接輸入並且H1可以通過H函數發生器驅動另一個。在CLB中的每個4輸入函數發生器(即,F和G)包含用於進位和借位信號快速生成的專用算術邏輯,可以將其配置成具有進位輸入和進位輸出的2位加法器。這些函數發生器還可被配置成讀/寫隨機存取存儲器(RAM)。4輸入導線線路可以用作為RAM的地址線。AlteraFLEX10K晶片在概念上有些相似。這些晶片為基於SRAM的可編程邏輯器件(PLD),具有多個32位總線。更明確的說,每個FLEX10K100晶片包含大約100,000個門電路,12個嵌入式陣列區塊(EAB),624個邏輯陣列區塊(LAB),每個LAB具有8個邏輯元件(LE)(或4,992個LE),5,392個觸發器或鎖存器,406個輸入/輸出引腳,和總共503個引腳。AlteraFLEX10K晶片包含嵌入式陣列區塊(EAB)的嵌入式陣列和邏輯陣列區塊(LAB)的邏輯陣列。可以使用一個EAB實現多種存儲器(如,RAM,ROM,FIFO)和複雜邏輯功能(如,數位訊號處理器(DSP),微控制器,乘法器,數據轉換功能,狀態機)。對於實現存儲器功能來說,EAB提供2,048個位。對於實現邏輯功能來說,EAB提供100到600個門電路。通過LE,可以使用LAB實現中等大小的邏輯塊。每個LAB代表大約96個邏輯門並包含8個LE和一個局部互連。一個LE包含一個4輸入查找表,一個可編程觸發器,和用於傳送和級聯函數的專用信號通路。可以建立的典型的邏輯功能包括計數器,地址解碼器,或小型狀態機。可以在[Altera,1996DATABOOK](1996年六月)中找到對AlteraFLEX10K晶片更詳細的描述,其內容以引用的方式併入本文。數據手冊還包含所支持的程序設計軟體的詳細資料。圖8顯示了4×4FPGA陣列和其相互連接的一個實施例。應注意此模擬仿真器的實施例未在FPGA晶片中使用縱橫開關或局部縱橫開關連接。FPGA晶片包括第一行中的晶片F11到F14,第二行中的晶片F21到F24,第三行中的晶片F31到F34和第四行中的晶片F41到F44。在一個實施例中,每個FPGA晶片(如,晶片F23)具有下列用於模擬仿真器系統的FPGA輸入/輸出控制器接口的引腳因此,在一個實施例中,每個FPGA晶片僅將41個引腳用於模擬仿真器系統的接口。將結合圖22進一步討論這些引腳。這些FPGA晶片通過非縱橫開關或非局部縱橫開關互連相互連接在一起。晶片間的每個互連,例如晶片F11和晶片F14之間的互連602,代表44個引腳或44根導線線路。在其他實施例中,每個互連代表超過44個的引腳。再在其他實施例中,每個互連代表少於44個的引腳。每個晶片具有六個互連。例如,晶片F11具有互連600到605。同樣,晶片F33具有互連606到611。這些互連排成水平的行和垂直的列。每個互連提供一行內兩晶片間或一列內兩晶片之間的直接連接。因此,例如,互連600直接連接晶片F11和F13;互連601直接連接晶片F11和F12;互連602直接連接晶片F11和F14;互連603直接連接晶片F11和F31;互連604直接連接晶片F11和F21;以及互連605直接連接晶片F11和F41。同樣的,對於不位於陣列邊緣(如,晶片F11)的晶片F33來說,互連606直接連接晶片F33和F13;互連607直接連接晶片F33和F23;互連608直接連接晶片F33和F34;互連609直接連接晶片F33和F43;互連610直接連接晶片F33和F31;以及互連611直接連接晶片F33和F32。因為晶片F11位於從晶片F13開始的一次跳躍之內,所以互連600被標記為「1」。因為晶片F11位於從晶片F12開始的一次跳躍之內,所以互連601被標記為「1」。同樣的,因為晶片F11位於從晶片F14開始的一次跳躍之內,所以互連602被標記為「1」。同樣的,對於晶片F33,所有的互連都被標記為「1」。此互連方案使得每個晶片都可以在兩次「跳轉」或互連之內與陣列中的其他任何晶片取得聯繫。因此,晶片F11可以通過下列兩條路徑中的任何一條與晶片F33連接(1)互連600到互連606;或(2)互連603到互連610。總之,路徑可以是(1)首先沿著行,再沿著列,或(2)首先沿著列,再沿著行。儘管圖8顯示了配置成4×4陣列的具有水平和垂直互連的FPGA晶片,但在電路板上的實際物理實現是依靠具有擴展機載電路板的低端和高端組實現的。所以,在一個實施例中,晶片F41-F44和F21-F24在低端組中。晶片F31-F34和F11-F14在高端組中。機載電路板包含晶片F11-F14和晶片F21-F24。因此,為了擴展陣列,可以將含有多個晶片(如,8個)的機載電路板加在組上,並位於當前包括晶片F11-F14的行的上方。在另一個實施例中,機載電路板在當前包括晶片F41-F44的行的下方擴展陣列。另外的實施例允許其擴展在晶片F14,F24,F34和F44的右邊。再另外的實施例允許其擴展在晶片F11,F21,F31和F41的左邊。圖7顯示了圖8中所示的4×4FPGA(現場可編程門陣列)陣列以「0」和「1」的方式表示的連通度矩陣。利用此連通度矩陣生成由在模擬仿真系統的硬體映射、布局和布線過程中使用的費用函數產生的布局成本。上文中結合圖6介紹了費用函數。舉例而言,晶片F11位於從晶片F13開始的一次跳躍之內,所以F11-F13的連通度矩陣表列值為「1」。圖21顯示了根據本發明一個實施例的單一FPGA晶片的互連輸出接腳。每個晶片具有六組互連,其中每組互連包含特定數量的引腳。在一個實施例中,每組互連具有44個引腳。每個FPGA晶片的互連按水平(東-西)和垂直(北-南)方向排列。向西的互連組被標記為W[430]。向東的互連組被標記為E[430]。向北的互連組被標記為N[430]。向南的互連組被標記為S[430]。這些互連的完整組用於相鄰晶片間的連接;也就是說,這些互連沒有「跳躍」過任何晶片。例如,在圖8中,晶片F33的N[430]為互連607,E[430]為互連608,S[430]為互連609,W[430]為互連611。回到圖21,還有兩個附加互連組。一個互連組用於垂直的非鄰接互連-YH[210]和YH[4322]。另一個互連組用於水平的非鄰接互連-XH[210]和XH[4322]。每一組,YH[...]和XH[...],被分成兩部分,其中每半個組包含22個引腳。此配置使得每個晶片的製造都相同。因此,每個晶片都可以與其上方,下方,左方和右方的非鄰接晶片在一次跳躍中互連。此FPGA晶片還顯示了用於全局信號,FPGA總線和JTAG信號的引腳。現在討論FPGA輸入/輸出控制器。此前在圖10中已簡要介紹了該控制器327。FPGA輸入/輸出控制器管理PCI總線和FPGA陣列之間的數據和控制通信。圖22顯示了PCI總線和FPGA陣列之間的FPGA控制器實施例,以及FPGA晶片組。FPGA輸入/輸出控制器700包括CTRL_FPGA單元701、時鐘緩衝器702、PCI控制器703、EEPROM704、FPGA串行配置接口705、邊界掃描測試接口706,以及緩衝器707。提供了所屬
技術領域:
的技術人員熟知的適當的功率/電壓調節電路。電源的範例包括Vcc,其與電壓檢測器/調節器和讀出放大器連接,在不同環境下維持電壓。在每個FPGA晶片和其Vcc之間具有快速作用的薄膜保險絲。將Vcc-HI提供給所有FPGA晶片的CONFIG#和LOCAL_BUS708的LINTI#。CTRL_FPGA單元701為FPGA輸入/輸出控制器700的主控制器,負責處理不同的控制,測試,和讀/寫不同單元和總線間的大量數據。CTRL_FPGA單元701與FPGA晶片的低端和高端組連接。FPGA晶片F41-F44和F21-F24(即,低端組)與低端FPGA總線718相連。FPGA晶片F31-F34和F11-F14(即,高端組)與高端FPGA總線719相連。這些FPGA晶片F11-F14,F21-F24,F31-F34和F41-F44對應於圖8中相同編號的FPGA晶片。在這些FPGA晶片F11-F14,F21-F24,F31-F34和F41-F44與低端組總線718和高端組總線719之間為厚膜片狀電阻器,用於正確載入。電阻器組713包括例如電阻器716和電阻器717,與低端組總線718相連。電阻器組712包括例如電阻器714和電阻器715,與高端組總線719相連。如果需要擴展,可以在低端組總線718和高端組總線719上FPGA晶片F11和F21的右方安置更多的FPGA晶片。在一個實施例中,通過類似機載電路板720的機載電路板進行擴展。因此,如果這些FPGA晶片組最初僅具有8個FPGA晶片F41-F44和F31-F34,那麼可以通過增加機載電路板720實現進一步的擴展,機載電路板720包含在低端組中的FPGA晶片F24-F21和在高端組中的晶片F14-F11。機載電路板720還包括附加低端和高端組總線,和厚膜片狀電阻器。PCI控制器703為FPGA輸入/輸出控制器700和32位PCI總線709之間的主接口。如果PCI總線擴展到64位和/或66MHz,可以適當的調整系統而不會偏離本發明的精神和範圍。將在下文中介紹這些調整。在系統中可以使用的PCI控制器703的一個示例為PLXTechnology公司的PCI9080或9060。PCI9080具有適當的局部總線接口,控制寄存器,FIFO(先入先出),以及對PCI總線的PCI接口。PLXTechnology公司的數據手冊,[PCI9080DataSheet](0.93版,1997年2月28日)的內容以引用的方式併入本文。PCI控制器703通過LOCAL_BUS708在CTRL_FPGA單元701和PCI總線709之間傳遞數據。LOCAL_BUS包括分別用於控制信號,地址信號和數據信號的控制總線部分,地址總線部分,以及數據總線部分。如果PCI總線擴展到64位,LOCAL_BUS708的數據總線部分也可以擴展到64位。PCI控制器703與EEPROM704連接,其包含PCI控制器703的配置數據。EEPROM704的一個範例是NationalSemiconductor(國家半導體公司)的93CS46。PCI總線709為FPGA輸入/輸出控制器700提供33MHz的時鐘信號。時鐘信號通過導線線路710被提供給時鐘緩衝器702用於同步目的以及低時滯目的。該時鐘緩衝器702的輸出為33MHz的全局時鐘(GL_CLK)信號,其通過導線線路711被提供給所有的FPGA晶片,並通過導線線路721被提供給CTRL_FPGA單元701。如果PCI總線擴展到66MHz,時鐘緩衝器也將為系統提供66MHz的信號。FPGA串行配置接口705提供配置數據以配置FPGA晶片F11-F14,F21-F24,F31-F34和F41-F44。Altera數據手冊,[Altera,1996DATABOOK](1996年六月)提供了配製裝置和過程的詳細資料。FPGA串行配置接口705還和LOCAL_BUS708與並行埠721連接。此外,FPGA串行配置接口705通過CONF_INTF導線線路723連接CTRL_FPGA單元701和FPGA晶片F11-F14,F21-F24,F31-F34和F41-F44。邊界掃描測試接口706提供指定的測試命令集的JTAG實施方式,以利用軟體在外部檢測處理器或系統的邏輯單元和電路。此接口706遵守IEEE標準1149.1-1990規範。參見Altera數據手冊,[Altera,1996DATABOOK](1996年六月)和[ApplicationNote39](JTAGBoundary-ScanTestinginAlteraDevices)以獲得更多信息,其內容以引用的方式併入本文。邊界掃描測試接口706還與LOCAL_BUS708和並行埠722連接。此外,邊界掃描測試接口706通過BST_INTF導線線路724連接CTRL_FPGA單元701和FPGA晶片F11-F14,F21-F24,F31-F34和F41-F44。CTRL_FPGA單元701分別通過低端組32位總線718和高端組32位總線719,以及緩衝器707和F_BUS725(用於低端組32位FD[310])、F_BUS726(用於高端組32位FD[6332])將數據傳入或傳出低端(晶片F41-F44和F21-F24)和高端(晶片F31-F34和F11-F14)FPGA晶片組。一個實施例在低端組總線718和高端組總線719中具有雙倍的PCI總線709的數據吞吐量。PCI總線709在33MHz時位寬為32位。吞吐量因此為132MBXs(=33MHz*4位元組)。低端組總線718在PCI總線頻率的一半時(33/2MHz=16.5MHz)為32位。高端組總線719在PCI總線頻率的一半時(33/2MHz=16.5MHz)也為32位。64位低端和高端組總線的吞吐量也為132MBXs(=16.5MHz*8位元組)。因此,低端和高端組總線的性能比得上PCI總線的性能。換句話說,性能限制在於PCI總線,而不在低端和高端組總線。根據本發明一實施例,在每個FPGA晶片中都為每個軟體/硬體邊界地址空間實現若干地址指示器。這些地址指示器通過多路復用的跨晶片地址指示器鏈路跨越多個FPGA晶片被連結在一起。請參見上文結合圖9,11,12,14和15對地址指示器的描述。為了跨越與給定地址空間有關的地址指示器鏈路和跨越多個晶片移動字選擇信號,必須具有鏈連導線線路。這些鏈連導線線路用晶片之間的箭頭表示。一個用於低端組的鏈連導線線路為晶片F23和F22之間的導線線路730。另一個用於高端組的鏈連導線線路為晶片F31和F32之間的導線線路731。在低端組末端晶片F21上的鏈連導線線路732與CTRL_FPGA單元701連接,作為LAST_SHIFT_L。在高端組末端晶片F11上的鏈連導線線路733與CTRL_FPGA單元701連接,作為LAST_SHIFT_H。當字選擇信號穿過FPGA晶片傳遞時,這些信號LAST_SHIFT_L和LAST_SHIFT_H為其對應組的字選擇信號。當這些信號LAST_SHIFT_L和LAST_SHIFT_H中的任何一個將邏輯「1」提供給CTRL_FPGA單元701時,表明字選擇信號前進到了相應組的末端晶片。CTRL_FPGA單元701通過下列導線線路向FPGA晶片傳入或從FPGA晶片傳出信號,導線線路734上為寫信號(F_WR),導線線路735上為讀信號(F_RD),導線線路736上為DATA_XSFR信號,導線線路737上為EVAL信號,導線線路738上為SPACE[20]信號。CTRL_FPGA單元701接收導線線路739上的EVAL_REQ#信號。寫信號(F_WR),讀信號(F_RD),DATA_XSFR信號和SPACE[20]信號共同服務於FPGA晶片中的地址指示器。利用寫信號(F_WR),讀信號(F_RD)和SPACE[20]信號為與由SPACE指數(SPACE[20])確定的所選地址空間相關的地址指示器生成MOVE信號。利用DATA_XSFR信號初始化地址指示器並開始逐字的數據傳輸過程。如果任何FPGA晶片斷言EVAL_REQ#信號,則利用此信號重新開始估算循環。例如,為估算數據,通PCI總線將數據從主處理器計算站的主存儲器傳輸到或寫入FPGA。在傳輸的最後,開始估算循環,這包括地址指示器的初始化和軟體時鐘的操作以推動估算過程。但是,由於多種原因,特定的FPGA晶片可能需要再次估算數據。此FPGA晶片斷言EVAL_REQ#信號並且CTRL_FPGA單元701再次開始估算循環。圖23顯示了圖22所示的CTRL_FPGA單元701和緩衝器707的詳細示圖。圖23與圖22使用相同的關於CTRL_FPGA單元701的輸入/輸出信號及其對應的編號。但是,圖22中未顯示的其他信號和導線/總線線路將由新的編號表示,例如SEM_FPGA輸出啟動1016,局部中斷輸出(局部INTO)708a,局部讀/寫控制信號708b,局部地址總線708c,局部中斷輸入(局部INTI#)708d,以及局部數據總線708e。CTRL_FPGA單元701包含傳輸完成檢查邏輯(XSFR_DONE邏輯)1000,估算控制邏輯(EVAL邏輯)1001,DMA描述符塊1002,控制寄存器1003,估算計時器邏輯(EVAL計時器)1004,地址解碼器1005,寫標誌序列發生器邏輯1006,FPGA晶片讀/寫控制邏輯(SEM_FPGAR/W邏輯)1007,多路分離器和鎖存器(DEMUX邏輯)1008,以及鎖存器1009-1012,其對應於圖22中的緩衝器707。導線/總線721上的一個全局時鐘信號(CTRL_FPGA_CLK)被提供給CTRL_FPGA單元701中所有的邏輯元件/塊。傳輸完成檢查邏輯(XSFR_DONE邏輯)1000接收LAST_SHIFT_H733,LAST_SHIFT_L732和局部INTO708a。XSFR_DONE邏輯1000通過導線/總線1013將傳輸完成信號(XSFR_DONE)輸出到EVAL邏輯1001。基於LAST_SHIFT_H733和LAST_SHIFT_L732的接收,XSFR_DONE邏輯1000將檢查數據傳輸的完成,使得可以根據需要開始估算循環。EVAL邏輯1001接收導線/總線739上的EVAL_REQ#信號和導線/總線1015上的WR_XSFR/RD_XSFR信號,外加導線/總線1013上的傳輸完成信號(XSFR_DONE)。EVAL邏輯1001生成兩個輸出信號,導線/總線1014上的開始EVAL和導線/總線736上的DATA_XSFR。EVAL邏輯表明FPGA總線和PCI總線之間的數據傳輸將於何時開始初始化地址指示器。當數據傳輸完成後它接收XSFR_DONE信號。WR_XSFR/RD_XSFR信號表明傳輸是讀還是寫操作。一旦輸入/輸出周期結束(或在一個輸入/輸出周期開始之前),EVAL邏輯可以開始估算循環伴隨啟動EVAL計時器的EVAL信號。EVAL計時器規定了估算循環的持續時間並通過保持估算循環在所需要的時間內有效以穩定對所有寄存器和組合部件的數據傳遞,來確保軟體時鐘機制的成功操作。DMA描述符塊1002接收導線/總線1019上的局部總線地址,導線/總線1020上的來自地址解碼器1005的寫啟動信號,以及導線/總線1029上的經由局部數據總線708e的局部總線數據。其輸出為導線/總線1046上的DMA描述符輸出,其通過導線/總線1045進入DEMUX邏輯1008。DMA描述符塊1002包含對應於主存儲器內信息的描述符塊信息,包括PCI地址,局部地址,傳輸計數,傳輸方向,和下一個描述符塊的地址。主機將在PCI控制器的描述符指示寄存器中建立最初描述符塊的地址。可以通過設置控制位啟動傳輸。PCI載入第一描述符塊並開始數據傳輸。PCI控制器繼續載入描述符塊並傳輸數據直到其檢測到相連結的位的末端位於下一個描述符指示寄存器中。地址解碼器1005接收並傳輸總線708b上的局部R/W控制信號,接收並傳輸總線708c上的局部地址信號。地址解碼器1005在導線/總線1020上生成輸入DMA描述符1002的寫啟動信號,在導線/總線1021上生成輸入控制寄存器1003的寫啟動信號,在導線/總線738上生成FPGA地址SPACE指數,在導線/總線1027上生成控制信號,以及在導線/總線1024上生成輸入DEMUX邏輯1008的另一個控制信號。控制寄存器1003接收導線/總線1021上的來自地址解碼器1005的寫啟動信號,以及導線/總線1030上的經由局部數據總線708e的數據。控制寄存器1003在導線/總線1015上生成輸入EVAL邏輯1001的WR_XSFR/RD_XSFR信號,在導線/總線1041上生成輸入EVAL計時器1004的設置EVAL時間信號,以及在導線/總線1016上生成輸入FPGA晶片的SEM_FPGA輸出啟動信號。系統使用SEM_FPGA輸出啟動信號選擇性的接通或激活每個FPGA晶片。系統通常一次激活一個FPGA晶片。EVAL計時器1004接收導線/總線1014上的開始EVAL信號,以及接收導線/總線1041上的設置EVAL時間信號。EVAL計時器1004在導線/總線737上生成EVAL信號,在導線/總線1017上生成估算完成(EVAL_DONE)信號,以及在導線/總線1018上生成輸入寫標誌序列發生器邏輯1006的開始寫標誌信號。在一個實施例中,EVAL計時器的位長為6位。寫標誌序列發生器邏輯1006接收導線/總線1018上的來自EVAL計時器1004的開始寫標誌信號。寫標誌序列發生器邏輯1006在導線/總線1022上生成輸入局部R/W導線/總線708b的局部R/W控制信號,在導線/總線1023上生成輸入局部地址總線708c的局部地址信號,在導線/總線1028上生成輸入局部數據總線708e的局部數據信號,在導線/總線708d上生成局部INTI#。一旦收到開始寫標誌信號,寫標誌序列發生器邏輯開始控制信號的序列以開始存儲器對PCI總線的寫周期。SEM_FPGAR/W控制邏輯1007接收導線/總線1027上的來自地址解碼器1005的控制信號,以及導線/總線1047上的經由局部R/W控制總線708b的局部R/W控制信號。SEM_FPGAR/W控制邏輯1007在導線/總線1035上生成輸入鎖存器1009的啟動信號,在導線/總線1025上生成輸入DEMUX邏輯1008的控制信號,在導線/總線1037上生成輸入鎖存器1011的啟動信號,在導線/總線1040上生成輸入鎖存器1012的啟動信號,在導線/總線734上生成F_WR信號,以及在導線/總線735上生成F_RD信號。SEM_FPGAR/W控制邏輯1007控制向/從FPGA低端組和高端組總線的不同寫和讀數據傳輸。DEMUX邏輯1008為一個多路復用器和一個鎖存器,其接收四組輸入信號並在導線/總線1026上向局部數據總線708e輸出一組信號。選擇器信號為導線/總線1025上來自SEM_FPGAR/W控制邏輯1007的控制信號和導線/總線1024上來自地址解碼器1005的控制信號。DEMUX邏輯1008接收來自導線/總線1042上的EVAL_DONE信號,導線/總線1043上的XSFR_DONE信號,以及導線/總線1044上的EVAL信號的一組輸入信號。此單一信號組被標記為編號1048。在任何一個時間周期,這三個信號EVAL_DONE,XSFR_DONE,EVAL中只有一個將被提供給DEMUX邏輯1008用於可能的選擇。DEMUX邏輯1008還接收導線/總線1045上來自DMA描述符塊1002的DMA描述符輸出信號,導線/總線1039上來自鎖存器1012的數據輸出,以及導線/總線1034上來自鎖存器1010的另一個數據輸出,作為其他三組輸入信號。CTRL_FPGA單元701與低端和高端FPGA組總線之間的數據緩衝器包括鎖存器1009到1012。鎖存器1009接收導線/總線1032上經由導線/總線1031和局部數據總線708e的局部總線數據,以及導線/總線1035上來自SEM_FPGAR/W控制邏輯1007的啟動信號。鎖存器1009通過導線/總線1033將數據輸出到鎖存器1010。鎖存器1010接收導線/總線1033上來自鎖存器1009的數據,以及導線/總線1036上經由導線/總線1037來自SEM_FPGAR/W控制邏輯1007的啟動信號。鎖存器1010通過導線/總線725將數據輸出到FPGA低端組總線並通過導線/總線1034輸出到DEMUX邏輯1008。鎖存器1011接收導線/總線1031上來自局部數據總線708e的數據,以及導線/總線1037上來自SEM_FPGAR/W控制邏輯1007的啟動信號。鎖存器1011通過導線/總線726將數據輸出到FPGA高端組總線並通過導線/總線1038輸出到鎖存器1012。鎖存器1012接收導線/總線1038上來自鎖存器1011的數據,以及導線/總線1040上來自SEM_FPGAR/W控制邏輯1007的啟動信號。鎖存器1012通過導線/總線1039將數據輸出到DEMUX邏輯1008。圖24顯示了4×4FPGA陣列,其和FPGA組的關係,以及擴展能力。類似圖8,圖24顯示了同樣的4×4陣列。也顯示了CTRL_FPGA單元740。低端組晶片(晶片F41-F44和F21-F24)和高端組晶片(晶片F31-F34和F11-F14)以交替的方式排列。因此,FPGA晶片行從底部行到頂部行依次是低端組--高端組--低端組--高端組。數據傳輸鏈按預定順序沿各組形成。箭頭741表示低端組的數據傳輸鏈。箭頭742表示高端組的數據傳輸鏈。箭頭743表示JTAG配置鏈,其經過整個陣列的所有16個晶片,從F41到F44,F34到F31,F21到F24,F14到F11,再回到CTRL_FPGA單元740。可以利用機載電路板完成擴展。假設圖24中原始FPGA晶片陣列包括F41-F44和F31-F34,可以由機載電路板745增加另外兩行晶片F21-F24和F11-F14。機載電路板745還具有適當的總線以擴展組。可以將更多的機載電路板安置於其他電路板的頂部以完成陣列中進一步的擴展。圖25顯示了硬體啟動方法的一個實施例。步驟800開始執行通電操作或執行熱啟動程序。在步驟801中,PCI控制器讀取EEPROM以進行初始化。步驟802根據初始化次序對PCI控制器寄存器進行讀和寫操作。步驟803對陣列中所有的FPGA晶片進行邊界掃描測試。步驟804配置FPGA輸入/輸出控制器中的CTRL_FPGA單元。步驟805對CTRL_FPGA單元中的寄存器進行讀和寫操作。步驟806為DMA主讀/寫模式建立PCI控制器。此後,傳輸並校驗數據。步驟807利用試驗設計配置所有的FPGA晶片並驗證其正確性。在步驟808,硬體已準備好可供使用。此時,系統假設所有步驟的結果都確認了硬體的可操作性,否則,系統不會到達步驟808。E.使用更密集FPGA晶片的替代實施例在本發明的一實施例中,FPGA邏輯裝置安裝在單個電路板上。如果使用戶電路設計模型化所需要的FPGA邏輯裝置比安裝在電路板上的要多,可提供帶有更多FPGA邏輯裝置的多個電路板。能夠在模擬系統中增加更多的電路板是本發明的一個優良特點。在該實施例中,使用更密集的FPGA晶片,(如Altera10k130v和10k250v)。這些晶片的使用改變了電路板的設計,以致每個電路板上僅用四個更密集的FPGA晶片替代了八個較低密度的FPGA晶片(如Altera10k100)。這樣,我們就需要解決這些電路板和模擬系統主板之間的耦聯問題,在它們的互連和接線方案中必須作出對底板缺失的補償。模擬系統中的FPGA陣列是通過一個獨特的電路板互連結構安裝在主板上的。每個晶片可能最多有8套互連,這些互連的配置是依照在同一電路板內和不同電路板之間,鄰近的直接相鄰互連(即N[730]、S[730]、W[730]、E[730])和單跳躍相鄰的互連(即NH[270]、SH[270]、XH[360]、XH[7237]),不包括局部總線連接。每個晶片能夠直接和鄰近的晶片互連或通過單跳躍和非鄰近的位於上、下、左或右的晶片互連。陣列在X方向(東到西)下呈環形,而在Y方向(北到南)下則呈網格狀。這些互連能在單獨的電路板中獨立地連接邏輯裝置和其它部件。然而,在不同的電路板之間是通過電路板間的連接器將這些電路板和互連器連接在一起,並在(1)通過主板的PCI總線和陣列電路板之間(2)任何兩個陣列電路板之間傳輸數據。每個電路板包含自帶的使FPGA邏輯裝置互相聯繫的FPGA總線FD[630]、SRAM存儲器裝置和CTRL_FPGA單元(FPGA輸入/輸出控制器)。FPGA總線FD[630]不是安裝在多個電路板之間的。雖然FPGA互連和FPGA總線沒有關聯,但是這些互連在多個電路板之間建立起FPGA邏輯裝置之間的連接。而另一方面,所有的電路板間設有局部總線。主板連接器將電路板連到主板上,且因此連接到PCI總線、電源及接地。對於有些電路板來說,主板連接器並不是作為與主板的直接連接之用的。在一個帶六個電路板的構造中,只有編號為1、3、5的電路板是直接連到主板上的,而編號為2、4和6的電路板是通過鄰近的電路板連接到主板上的。因此,每個相隔的電路板是直接連到主板上的並且這些電路板的互連器和局部總線是通過安裝在焊接面到元件面上的板間連接器連接在一起的。PCI信號僅通過其中的一個電路板(通常是第一個電路板)進行傳輸。電源和接地連接到其它的主板連接器用於那些電路板。位於焊接面與元件面上的各種電路板間連接器使PCI總線部件、FPGA邏輯裝置、存儲器裝置以及各種模擬系統控制電路之間進行相互通訊。圖56所示的是根據本發明一實施例的一個FPGA晶片陣列的高層結構圖。上面所描述的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晶片。本發明的一實施例描述了帶有這4個邏輯裝置以及它們的互連的電路板。由於用戶設計被模型化和配置成該陣列中任何數目的這些邏輯裝置中,FPGA邏輯裝置之間的通訊必須能將用戶電路設計的一部分連接到另一部分。而且,最初的配置信息和邊界掃描測試也是由FPGA之間的互連所支持的。最後,還需要保證模擬系統與FPGA邏輯裝置之間必要的模擬系統控制信號可是訪問的。圖36所示的是本發明所使用的一FPGA邏輯裝置的硬體結構。此FPGA邏輯裝置1500包括102個頂部輸入/輸出引腳、102個底部輸入/輸出引腳、111個左側輸入/輸出引腳和110個右側輸入/輸出引腳。這樣,互連引腳總數就是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單元發出的開啟FPGA邏輯裝置的輸出引腳的信號)和DEV_CLRN(CRTL_FPGA單元發出的在開始模擬前清除所有內部觸發器的信號)。這樣,這些互連就負載著傳輸於任何兩個FPGA邏輯裝置之間的任何數據和控制信號。剩下的引腳是為電源和接地專用的。圖37所示的是根據本發明的一實施例的一個獨立FPGA晶片的FPGA互連輸出接腳。每個晶片1510最多可以有8組互連,每組包含特定數目的引腳。根據它們在電路板上的位置,一些晶片可能包含少於8組互連。在優選實施例中,雖然根據它們在電路板上的不同位置,晶片與晶片間所使用的具體互連組有所不同,但是所有的晶片都具有7組互連。每個FPGA晶片的互連是水平(東到西)和垂直(北到南)安裝的。西向的互連組標為W[730],東向的互連組標為E[730],北向的互連組標為N[730],而南向的互連組標為S[730]。這些互連的完整組只能連接到鄰近的晶片上而不能跳過任何一個晶片。例如在圖39中,晶片1570的N[730]為互連1540,W[730]為互聯裝置1542,E[730]為互連1543,S[730]為互連1545。注意該FPGA晶片1570,即FPGA2晶片,有全部的四組鄰近互連--N[730]、S[730]、W[730]和E[730]。FPGA0西向的互連通過線路1539以圓環方式與FPGA3東向互連進行連接。這樣,線路1539將1569(FPGA0)與1572(FPGA3)直接連接起來的方法與把電路板的東西兩端環繞並連接起來的方式類似。回到圖37,這裡還有四組「跳躍」互連。其中兩組互連是為非鄰近的垂直排列的互連而設置的,即NH[270]和SH[270]。例如,圖39中FPGA2晶片1570所示NH互連1541及SH互連1546。再回到圖37,另外兩組互連是為非鄰近的水平排列的互連而設置的,即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)上。這個配置使得每個晶片的生產變得相同。這樣,每個晶片能夠通過單跳躍連接到一個位於上、下、左和右的非鄰近晶片上。圖39顯示的是根據本發明的一個實施例位於一個單個主板上的六個電路板的一個直接鄰近和單跳躍鄰近的FPGA陣列設計。此圖是用來演示兩種可能的配置,即一個六電路板系統和一個雙電路板系統。位置指示器1550顯示了「Y」方向是北到南而「X」方向是東到西。在X方向下陣列呈環形,而在Y方向下陣列呈網格狀。在圖39中只顯示了高層的電路板、FPGA邏輯裝置、互連以及連接器,而沒有顯示主板和其它的支持部件(如SRAM存儲器裝置)和導線線路(如FPGA總線)。注意圖39給出了電路板及其部件、互連和連接器的陣列視圖。實際的物理配置和安裝包括將這些電路板放置到各自的從元件面到焊接面的邊緣上。大約有一半的電路板是直接連接到主板上的而另一半則是連接到各自相鄰的電路板上的。在本發明六電路板的實施例中,六個電路板1551(電路板1)、1552(電路板2)、1553(電路板3)、1554(電路板4)、1555(電路板5)和1556(電路板6)是作為圖1中可重新配置硬體單元20的一部分安裝在主板(未顯示)上的。每個電路板包含幾乎完全相同的一套部件和連接器。這樣,為演示方便起見第六電路板1556包含FPGA邏輯裝置1565到1568和連接器1557到1560和1581;第五電路板1555包含FPGA邏輯裝置1569到1572和連接器1582和1583;第四電路板1554包含FPGA邏輯裝置1573到1576和連接器1584和1585。在此六電路板的配置中,第一電路板1551和第六電路板1556為包含Y-網格終端,如第六電路板1556上的R-包終端1557到1560和第一電路板1551上的終端1591到1594的「書擋」電路板。還有位於中間的電路板(即1552(電路板2)、1553(電路板3)、1554(電路板4)和1555(電路板5))形成完整陣列。正如上面闡述的,這些互連的配置是依照在同一個電路板內和不同電路板之間鄰近的直接相鄰互連(即N[730]、S[730]、W[730]、E[730])和單跳躍相鄰的互連(即NH[270]、SH[270]、XH[360]、XH[7237]),不包括局部總線連接。此互連能夠獨立連接在一個單獨的電路板內的邏輯裝置和其它部件。然而電路板間連接器1581到1590能夠使不同電路板(第一電路板到第六電路板)上的邏輯裝置進行通訊。FPGA總線是電路板間連接器1581到1590的一部分。這些連接器1581到1590是600引腳連接器,它們為兩個相鄰陣列電路板負載520個信號和80個電源/接地連接。在圖39中,不同的電路板對於電路板間連接器1581到1590是以不對稱的方式連接的。例如,存在於電路板1551和1552之間的是電路板間連接器1589和1590。互連1515將FPGA邏輯裝置1511和1577連接在一起而依照連接器1589和1590此連接是對稱的。然而互連1603則是不對稱的。它將第三電路板1553中的一個FPGA邏輯裝置連接到電路板1551中FPGA邏輯裝置1577上。相對於連接器1589和1590而言,這種連接是不對稱的。類似地,相對於連接器1589和1590而言,互連1600也是不對稱的。因為它將FPGA邏輯裝置1577連接到終端1591上,而此終端則是通過互連1601連接到FPGA邏輯裝置1577。其它類似的互連進一步表現了這種不對稱。這種不對稱導致了互連通過電路板間的連接器,按照兩種不同的方式進行布線----一種是象互連器1515的對稱型而另一種則是象互連器1603和1600的不對稱型。圖40(A)和40(B)顯示了互連布線方案。在圖39中,一個單獨電路板內的直接相鄰連接的一個例子是互連1543,它將電路板1555上的邏輯裝置1570和邏輯裝置1571沿著東西方向連接起來。一個單獨電路板內的直接相鄰連接的一個另外的例子是互連1607,它將電路板1554上的邏輯裝置1573和邏輯裝置1576連接起來。兩個不同電路板間的直接相鄰連接的一個例子是互連1545,它通過連接器1583和1584將電路板1555上的邏輯裝置1570和電路板1554上的邏輯裝置1574沿著南北方向連接起來。在此,兩個電路板間連接器1583和1584是用來傳輸信號的。一個單獨電路板內的單跳躍互連的一個例子是互連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不與任何裝置相連。這些南北互連與東西的圓環式互連不同,它們是網格式的。這些網格終端增加了南北方向直接互連的數目。否則位於FPGA網格南北兩端的互連將會被浪費。例如,FPGA邏輯裝置1511和1577除了有一組直接互連1515,還具有通過R包1591和互連1600和1601的附加的互連。也就是說,R包1591將互連1600和1601連接在一起。這增加了FPGA邏輯裝置1511和1577之間直接連接的數目。還配置了電路板間的連接。電路板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連接起來增加了南北方向互連的數目。本發明的一個雙電路板的實施例如圖44所示。在本發明的雙電路板實施例中,使模擬系統的用戶設計模型化只需兩個電路板。正如圖39中的六電路板配置,圖44的雙電路板的配置是使用的與之相同的作為「書擋」的兩個電路板,即電路板1551和電路板1556。它們位於主板上並作為圖1中可重新配置硬體單元的一部分。在圖44中,其中一個書擋電路板是第一電路板,另一個則是第六電路板。圖44所用的第六電路板顯示了與圖39的第六電路板的相似之處。也就是說,象第一和第六電路板這樣的書擋電路板應該有用於南北網格連接所必需的終端。這個雙電路板配置包含第一電路板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總線上的控制數據和控制信號。在四電路板的配置中,第一電路板和第六電路板是書擋電路板,而第二電路板1552和第三電路板1553(見圖39)則是中間電路板。當依照本發明將其與主板連接時(將參照圖38(A)和圖38(B)討論),電路板1與電路板2成對而電路板3與電路板6成對。在六電路板的配置中,如上所述第一電路板和第六電路板是書擋電路板而第二電路板1552、第三電路板1553、第四電路板1554和第五電路板1555(見圖39)是中間電路板。當依照本發明與主板連接時(將參照圖38(A)和圖38(B)討論),電路板1與電路板2成對,電路板3與電路板4成對而電路板5與電路板6成對。必要時可以安裝更多的電路板。然而不管將要增加到系統中的電路板的數目如何,書擋電路板(如圖39中的電路板1和電路板6)應該有必備的終端來完成網格狀陣列的連接。在一實施例中,最小配置是如圖44所示的雙電路板型。可通過增加雙電路板而增加電路板的數量。如果最初的配置是第一電路板和第六電路板,那麼將來對四電路板配置的改動就包括如上所述的將第六電路板移出一些,將第一電路板和第二電路板配對,以及將第三電路板和第六電路板配對。正如以上描述的,每個邏輯裝置都是連接到鄰近的邏輯裝置和非鄰近單跳躍的邏輯裝置。這樣,在圖39和圖44中邏輯裝置1577通過互連1547連接到鄰近的邏輯裝置1578。邏輯裝置1577還通過單跳躍互連1548連接到非鄰近的邏輯裝置1579。然而因為互連1549提供連接的環繞的環形配置,邏輯裝置1580與邏輯裝置1577被認為是鄰近的。圖42顯示的是一個單獨電路板上部件和連接器的頂視圖(元件面)。在本發明的一個實施例中,模型化模擬系統中的用戶設計只需一個電路板。在其它的實施例中,多個電路板(即至少兩個電路板)是必需的。因此,例如圖39顯示了六個電路板1551到1556通過不同的600引腳連接器1581到1590連接在一起。在頂端和底端,電路板1551,電路板1556分別被另一組10歐姆R包中斷。回到圖42,電路板1820包含四個FPGA邏輯裝置1822(FPGA0),1823(FPGA1),1824(FPGA2)和(FPGA3)。另外還有兩個SRAM存儲器裝置1828和1829。這兩個SRAM存儲器裝置是用來從該電路板上邏輯裝置映射存儲區塊的;也就是說,本發明的存儲器模擬將該電路板上邏輯裝置的存儲區塊映射到此電路板的SRAM存儲器裝置中。其它的電路板包含完成類似映射操作的其它邏輯裝置和存儲器裝置。在一實施例中,存儲器映射是依賴於電路板的;也就是說,第一電路板的存儲器映射只限於該電路板上的邏輯裝置和存儲器裝置而與其它電路板無關。在其它的實施例中存儲器映射是獨立於電路板的。這樣只需要使用幾個大的存儲器裝置將存儲區塊從一個電路板上的邏輯裝置映射到另一個電路板的存儲器裝置上。還配置了發光二極體(LED)1821用來指示一些現象。根據本發明的一實施例,LED所顯示的內容如下表A所示表ALED顯示各種其它的控制晶片如PLXPCI控制器1826和CTRL_FPGA單元1827控制著FPGA間和PCI的通訊。一個可能被用在系統內的PLXPCI控制器1826的例子是PLXTechnology的PCI9080或9060。PCI9080有合適的局部總線接口,控制寄存器,FIFO以及到PCI總線的PCI接口。PLXTechnology的數據手冊PCI9080數據表DataSheet(1997年2月28日,0.93版)的內容以引用的方式併入本文。CTRL_FPGA單元1827的一個例子是FPGA晶片形式的可編程邏輯裝置(PLD),如Altera10K50晶片。在多電路板配置中,只有與PCI總線連接的第一電路板包含PCI控制器。連接器1830將電路板1820連接到主板(未顯示出來),並因此連接到PCI總線、電源及接地。在某些電路板中,連接器1830不用於與主板直接連接。這樣在一個雙電路板的配置中,只有第一電路板是與主板直接相連的。在一個六電路板的配置中,只有電路板1,3,5是與主板直接相連的而電路板2,4,6是通過與它們相鄰的電路板與主板相連的。另外還配置了電路板間連接器J1到J28,顧名思義,連接器J1到J28能建立不同電路板間的連接。連接器J1是連接外部電源和接地的。下表B所顯示的是根據本發明的一實施例外部電源連接器J1的引腳和相關描述。表B外部電源-J1連接器J2用於並行埠連接。連接器J1和J2是在生產過程中用於獨立單獨電路板的邊界掃描測試。下表C顯示的是根據本發明的一實施例的並行JTAG埠J2的引腳和相關描述。表C並行JTAG埠-J2連接器J3和J4是用於電路板間的局部總線連接。連接器J5到J16是一套FPGA的互連連接。連接器J17到J28是另一套FPGA的互連連接。當位於元件面到焊接面時,這些連接器為不同電路板之間的部件建立起有效的連接。下表D和E是根據本發明的一實施例對連接器J1到J28所作的完整的列表和描述。表D連接器J1-J28帶陰影的連接器是穿孔型的。注意在表D中,括號[]中的數字代表FPGA邏輯裝置號0到3。這樣,S就表示南向互連(即圖37中的S[730])及其FPGA0的74位元組。表E局部總線連接器-J3,J4其中的輸入/輸出方向指的是對於電路板1。圖43是圖41(A)到41(F)和圖42中連接器J1到J28的圖例。總體來說,白色區塊表示的是表面安裝,其中用灰色填滿的區塊則代表穿孔類型。另外,外框為實線的區塊代表元件面上的連接器,外框為虛線的區塊代表焊接面上的連接器。這樣,用外框為實線的白色區塊1840就代表2×30頂蓋,表面安裝並固定在元件面上。外框為虛線的白色區塊1841代表2×30插座,表面安裝並固定在電路板的焊接面上。外框為實線的灰色區塊1842代表2×30或2×45頂蓋,穿孔並固定在元件面上。外框為虛線的灰色區塊1843代表2×30或2×45插座,穿孔並固定在焊接面上。在一實施例中,模擬系統使用Samtec的SFM和TFM系列適用於表面安裝和穿孔類型的2×30或2×45微帶線路連接器。外框為實線的斜線填充區塊1844代表R包,表面安裝並固定在電路板的元件面上。外框為虛線的的斜線填充區塊1845代表R包,表面安裝並固定在焊接面上。Samtec網站上的Samtec產品目錄中的Samtec說明書中的內容以引用的方式併入本文。回到圖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包。在一實施例中,這些連接器是用來進行電路板間的通訊的。相關的總線和信號被組合在一起並且通過這些電路板間的連接器在任何兩塊電路板間傳輸信號。而且,只有一半的電路板是直接與主板相連的。在圖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包的連接。在本發明的一實施例中,多電路板是以一種獨特的方式連接於主板以及互相連接的。多個電路板是按照從元件面對焊接面的順序連接在一起的。其中一個電路板,比方說第一電路板是通過一個主板連接器與主板相連然後與PCI總線連接。第一電路板上的FPGA互連總線,通過一對FPGA互連連接器連接到另一塊電路板(比如第二電路板)的FPGA互連總線上。第一電路板的FPGA互連連接器是位於元件面上的而第二電路板的FPGA互連是位於焊接面上的。第一電路板的元件面上的連接器和第二電路板的焊接面上的連接器使得FPGA的互連總線能夠互相連接。類似地,該兩個電路板的局部總線是通過局部總線連接器連接在一起的。第一電路板上的局部總線連接器位於元件面上,而第二電路板上的局部總線連接器位於焊接面上。這樣,第一電路板的元件面上的連接器和第二電路板的焊接面上的連接器使得FPGA的互連總線能夠互相連接。還可以增加更多的電路板。可以增加一個第三個電路板,使其焊接對著第二電路板的元件面。這樣就建立了類似的FPGA互連和局部總線電路板間的連接。第三電路板也是通過另一個連接器與主板相連,但此連接器僅為第三電路板提供電源和接地,這將在下文中進行討論。雙電路板配置的元件面到焊接面的連接器將參照圖38(A)進行討論。此圖顯示的是根據本發明一實施例的主板上FPGA電路板連接的側視圖。圖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傳輸的。此雙電路板結構和PCI總線之間的PCI信號傳輸是首先通過第一電路板1526進行的。這樣,從PCI總線發出的信號在到第二電路板1525前首先遇到第一電路板1526。類似地,從雙電路板結構到PCI總線的信號是由第二電路板1526發出的。另外電源裝置(未顯示)還通過主板連接器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)單元之間的配置和邊界掃描測試信息。總之,主板連接器將一對電路板中的一個連接到PCI總線和電源。一套連接器通過一個電路板的元件面將FPGA互連連接到另一個電路板的焊接面。另一套連接器通過一個電路板的元件面將局部總線連接到另一個電路板的焊接面。在本發明的另一個實施例中使用了兩個以上的電路板。圖38(B)顯示了六電路板的配置。這個配置與圖38(A)的配置類似,都是每隔一個電路板與主板相連,而且這些電路板的互連與局部總線都是通過電路板間連接器按照焊接面對元件面的方式進行連接的。圖38(B)顯示了六個電路板1526(第一電路板)、1525(第二電路板)、1532(第三電路板)、1533(第四電路板)、1534(第五電路板)和1535(第六電路板)。這六個電路板通過1526(第一電路板)、1532(第三電路板)和1534(第五電路板)上的連接器與主板1520相連。其它的電路板1525(第二電路板)、1533(第四電路板)和1535(第六電路板)不與主板直接相連,它們是通過與各自鄰近電路板的連接間接與主板相連的。位於焊接面與元件面之間的各種電路板間連接器建立了PCI總線部件、FPGA邏輯裝置、存儲器裝置以及各種模擬系統控制電路之間的連接。第一套電路板間連接器1990對應圖42中的連接器J5到J16。第二套電路板間連接器1991對應圖42中的連接器J17到J28。第三套電路板間連接器1992對應圖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)顯示不同電路板間的陣列連接。為有利於生產過程,對所有的電路板使用同一種設計方案。正如上面所解釋的,電路板通過沒有底板的連接器連接到其它電路板上。圖40(A)顯示了兩塊示例電路板1611(第二電路板)和1610(第一電路板)。電路板1610的元件面對著電路板1611的焊接面。電路板1611包含許多FPGA邏輯裝置、其它部件和導線線路。電路板1611上這些邏輯裝置和其它部件的特定節點用節點A』(編號1612)和B』(編號1614)表示。節點A』通過PCB線跡1620連接到連接器墊1616。類似地,節點B』通過PCB線跡1623連接到連接器墊1617。類似地,電路板1610也包含許多FPGA邏輯裝置、其它部件和導線線路。電路板1610上這些邏輯裝置和其它部件的特定節點用節點A(編號1613)和B(編號1615)表示。節點A通過PCB線跡1625連接到連接器墊1618。類似地,節點B通過PCB線跡1622連接到連接器墊1619。現在我們將要討論位於使用表面安裝連接器的不同電路板上的節點之間的信號的布線路。在圖40(A)中,所需的連接是建立在(1)虛構路徑1620、1621和1622所指示的節點A和B』之間以及(2)虛構路徑1623、1624和1625所指示的節點B和A』之間的。這些連接是用於象圖39中電路板1551和電路板1552之間的不對稱互連1600這樣的路徑的。其它的不對稱互連包括在連接器1589和1590兩面的NH到SH的互連1977、1979和1981。A-A』和B-B』對應於互連1515(N,S)這樣的對稱互連。N和S互連使用穿孔連接器,其中NH和SH不對稱互連使用SMD連接器。詳情參考表D。現在參照圖40(B)來討論使用表面安裝連接器的實際安裝,使用相同的序號表示相同的零件。在圖40(B)中,電路板1611顯示了元件面上的節點A』通過PCB線跡1620連接到元件面上的連接器墊1636。元件面上的連接器墊1636通過導電路徑1651連接到焊接面的連接器墊1639。焊接面上的連接器墊1639通過導電路徑1648連接到電路板1610元件面上的連接器墊1642。最後,元件面上的連接器墊1642通過PCB線跡1622連接到節點B。這樣,電路板1611上的節點A』就可以連接到電路板1610上的節點B。同樣,在圖40(B)中,電路板1611顯示了元件面上的節點B』通過PCB線跡1623連接到元件面上的連接器墊1638。元件面上的連接器墊1638通過導電路徑1650連接到焊接面的連接器墊1637。焊接面上的連接器墊1637通過導電路徑1645連接到元件面上的連接器墊1640。最後,元件面上的連接器墊1640通過PCB線跡1625連接到節點A。這樣,電路板1611上的節點B』就可以連接到電路板1610上的節點A。因為這些電路板都採用同樣的設計方案,所以導電路徑1652和1653可以象導電路徑1650和1651那樣用於與電路板1610鄰近的其它電路板。這樣,就建立了一種使用表面安裝和穿孔連接器而不需使用開關部件的獨特的電路板間的連接方案。F.時序不靈敏和無假信號邏輯裝置本發明的一實施例解決了佔用時間和時鐘假信號兩方面的問題。根據本發明的一實施例,在將用戶的設計配置入可重新配置計算系統的硬體模型的過程中,在用戶設計中發現的標準邏輯裝置(如鎖存器,觸發器)被仿真邏輯裝置或時序不靈敏和無假信號(timing-insensitiveglitch-free,TIGF)邏輯裝置代替。在一實施例中,整合到EVAL信號中的觸發信號用來更新這些TIGF邏輯裝置中所儲存的值。在等待各種輸入和其它信號在用戶設計的硬體模型中傳輸並在估算過程中達到穩定狀態後,會產生用來更新TIGF邏輯裝置所儲存或鎖存的值的觸發信號。此後,開始了新的估算周期。在一實施例中,這個從估算到觸發的階段是循環的。現在簡要地討論一下上面所提到的佔用時間的問題。所屬
技術領域:
的技術人員都知道邏輯電路設計的一個普遍的問題就是佔用時間擾亂。佔用時間是指一個邏輯元件的數據輸入在控制輸入(如時鐘輸入)的變化引起了數據輸入所指示的值的鎖存、獲取或儲存後必須保持穩定的最小時間;否則邏輯元件將不能正常作業。現在我們將要通過討論一個移位寄存器的例子來演示佔用時間的要求。圖75(A)顯示了一個串行連接了三個D型觸發器的示例性移位寄存器,即觸發器2400的輸出連接的是與觸發器2401的輸入,而2401的輸出連接至觸發器2402的輸入。總的輸入信號Sin與觸發器2400的輸入相連而總的輸出信號Sout是由觸發器2402的輸出產生的。這三個觸發器在它們各自的時鐘輸入端接收一個共同的時鐘信號。這個移位寄存器是根據以下假設設計(1)時鐘信號同時到達所有觸發器,(2)在檢測到時鐘信號邊緣後,觸發器的輸入在佔用時間的時段內不會改變。圖75(B)的時序圖演示了佔用時間的假設,其中系統沒有破壞佔用時間的要求。在邏輯元件之間佔用時間會有所不同,但這些不同的佔用時間都在說明書被規定。在時間t0時鐘輸入從邏輯0變化到邏輯1。如圖75(A)所示,時鐘輸入提供給2400到2402中的每個觸發器。從t0處的該時鐘邊沿開始,輸入Sin必須在從時間t0到t1的佔用時間TH時段內保持穩定。類似地,到觸發器2401(即D2)和2402(即D3)的輸入也必須在從時鐘信號的觸發邊緣開始的佔用時間時段內保持穩定。既然圖75(A)和75(B)滿足了這個要求,那麼輸入Sin就被移位到觸發器2400,D2的輸入(邏輯0)被移位到觸發器2401而D3的輸入(邏輯1)則被移位到觸發器2402。所屬
技術領域:
的技術人員都知道在時鐘邊沿被觸發後,假設佔用時間的要求被滿足的話,那麼觸發器2401輸入端的新值(輸入D2的邏輯1)和觸發器2402輸入端的新的值(輸入D3的邏輯0)將要在下一個時鐘循環移位並儲存到下一個觸發器中。下表總結了對這些典型賦值的移位寄存器的操作在實際實施時,時鐘信號不會同時達到所有的邏輯元件。更確切地說,電路的設計使得時鐘信號將會幾乎同時或實質上同時到達所有的邏輯元件。電路的設計必須使得時鐘偏移或時鐘信號到達每個觸發器之間的時序差異遠比佔用時間要求的要小。相應地,所有的邏輯元件將獲得適當的輸入值。在以上圖75(A)和75(B)所示的例子中,由於時鐘信號在不同時間到達觸發器2400到2402引起的佔用時間擾亂可能會導致一些觸發器獲取舊的輸入值而另一個觸發器獲取新的輸入值。結果使得移位寄存器不能正常作業。在同樣的移位寄存器設計的可重新配置邏輯(如FPGA)的裝置中,如果時鐘不是從主輸入直接產生的話,那麼可以將電路設計成使得低偏移網絡能夠將時鐘信號分布到所有的邏輯元件中去,這樣這些邏輯元件就可以在實質上同一時間檢測時鐘邊沿。主時鐘由自計時測試平臺程序產生。通常主時鐘信號是在軟體中產生的,在典型的用戶電路設計中只有很少一些主時鐘(即1-10個)。然而,如果時鐘信號是從內部邏輯而不是由主輸入產生,佔用時間的問題就顯得更為重要。派生的或門控時鐘是由主時鐘驅動的組合邏輯和寄存器的組合網絡產生的。在典型的用戶電路設計中有許多(即1000或更多)派生的時鐘。沒有預防和另外的控制措施,這些時鐘信號就可以在不同的時間到達每個邏輯元件而時鐘偏移可能會比佔用時間要長。這將會導致電路設計的失敗,比如圖75(A)和75(B)所示的移位寄存器電路。現在通過圖75(A)中所示的同樣的移位寄存器電路來討論佔用時間擾亂。這時,移位寄存器電路的單個的觸發器跨越圖76(A)所顯示的多個可重新配置邏輯晶片(如多個FPGA晶片)展開。第一FPGA晶片2411包含將其時鐘信號CLK反饋到FPGA晶片2412到2416的一些部件的內部派生的時鐘邏輯2410。在這個例子中,內部產生的時鐘信號CLK將會提供給移位寄存器電路的觸發器2400到2402。晶片2412包含觸發器2400,晶片2415包含觸發器2401而晶片2416包含觸發器2402。另外的兩個晶片2413和2414是用來演示佔用時間擾亂概念的。晶片2411內的時鐘邏輯2410接收一個主時鐘輸入(或者可能是另外的一個派生的時鐘輸入)並產生一個內部時鐘信號CLK。此內部時鐘信號CLK將傳輸到晶片2412並標為CLK1。從時鐘邏輯2410發出的該內部時鐘信號CLK也會通過晶片2413和2414傳輸到晶片2415並標為CLK2。如圖所示,CLK1輸入到觸發器2400而CLK2則輸入到觸發器2401。CLK1和CLK2都會經歷線路線跡延遲,這樣CLK1和CLK2的邊沿就比內部時鐘信號CLK的邊緣延遲。而且CLK2還會因為穿過其它兩個晶片2413和2414而具有附加延遲。參照圖76(B)的時序圖,內部時鐘信號CLK在時間t2產生及被觸發。由於線路線跡延遲,CLK1會到時間t3才到達晶片2412內的觸發器2400,此延遲時間標為T1。如上表所示,Q1的輸出(或輸入D2)在CLK1時鐘邊沿到達前是邏輯0。在觸發器2400檢測到CLK1的邊緣後,D1的輸入必須在必要的佔用時間H2期間(即直到時間t4)保持穩定。這時觸發器2400移位或儲存邏輯1以使Q1的輸出(或D2)為邏輯1。當這些在觸發器2400上發生時,時鐘信號CLK2正向晶片2415內的觸發器2401移動。晶片2413和2414所引起的延遲T2使得CLK2在時間t5到達觸發器2401。D2的輸入這時為邏輯1。在此觸發器2401所需的佔用時間後,此邏輯賦值1將會出現在輸出Q2(或D3)上。這樣,在CLK2到達前輸出Q2為邏輯1而在CLK2到達後輸出仍然為邏輯1。這個結果是不正確的。此移位寄存器應移位到邏輯0。當寄存器2400正確地移位到舊的輸入值(邏輯1)時,觸發器2401錯誤地移位到新的輸入值(邏輯1)。這是當時鐘偏移(或時序延遲)比佔用時間大時所發生的典型錯誤操作。在這個例子當中,T2>T1+H2。總的來說,除非採取一些預防措施,否則如圖76(A)所示,當一個晶片產生時鐘信號並將其分布到不同晶片上的邏輯元件時很可能會發生佔用時間擾亂。現在將參照圖77(A)和77(B)來討論時鐘假信號問題。一般地,當一電路的輸入改變時,輸出也會在其定為一個正確值前的相當短的時間內變為一個隨機值。如果另一個電路恰好在那個錯誤的時間檢測輸出並讀出隨機值,那麼結果將是不正確的而且難以調試。這種對另外電路產生有害影響的隨機值就稱為假信號(glitch)。在典型的邏輯電路中,一個電路會為另一個電路產生時鐘信號。如果一個或兩個電路存在著未得到補償的時序延遲,那麼將會產生一個時鐘假信號(即預料之外的時鐘邊沿)並導致一個錯誤的結果。與佔用時間擾亂相同,引起時鐘假信號的原因是電路設計中的某些邏輯元件在不同的時間改變了值。圖77(A)顯示了一些邏輯元件為另一組邏輯元件產生時鐘信號的示範邏輯電路;即,D型觸發器2420,D型觸發器2421和「異或」門(XOR)2422為D型觸發器2423產生一時鐘信號(CLK3)。觸發器2420在線路2425上的D1接收到它的輸入數據而在線路2427上的Q1輸出數據。它從一時鐘邏輯2424接收它的時鐘輸入(CLK1)。CLK指由時鐘邏輯2424最初產生的時鐘信號而CLK1指相同的信號到達觸發器2420所延遲的信號。觸發器2421在線路2426上的D2接收到它的輸入數據而在線路2428的Q2上輸出數據。它從一時鐘邏輯2424接收它的時鐘輸入(CLK2)。如上所述,CLK指由時鐘邏輯2424最初產生的時鐘信號,而CLK1指相同的信號到達觸發器2421所延遲的信號。線路2427和2428上觸發器2420和2421的各自的輸出輸入到「異或」門2422。「異或」門2422將標記為CLK3的數據輸出到觸發器2423的時鐘輸入。觸發器2423也在線路2429上的D3輸入數據並在Q3輸出數據。現在將參照圖77(B)中的時序圖來討論此電路可能引起的時鐘假信號問題。CLK信號在時間t0被觸發。在時鐘信號(即CLK1)到達觸發器2420時為時間t1。到達觸發器2421時為CLK2時間t2。假定到D1和D2的輸入都為邏輯1。當CLK1在時間t1到達觸發器2420時Q1的輸出將為邏輯1(如圖77(B)所示)。CLK2在稍後的時間t2到達觸發器2421,這樣,線路2428上的Q2輸出從時間t1到時間t2都保持在邏輯0。即使所需的信號是一個邏輯0(1XOR1=0),但「異或」門2422在時間t1到時間t2期間產生一個邏輯1作為CLK3出現在觸發器2423的時鐘輸入端。這個在時間t1到時間t2期間內CLK3的產生是一個時鐘假信號。因此,無論期望與否,任何出現在觸發器2423輸入線路2429上的D3的邏輯值都被存儲了下來,並且此時觸發器2423準備好了接收在線路2429上的下一次輸入。如果設計正確,那麼CLK1和CLK2的時間延遲會減少到最小,這樣就不會產生時鐘假信號,或者至少時鐘假信號所持續的時間非常短,不會對電路剩下的部分產生影響。後一種情況時,如果在CLK1和CLK2之間的時鐘偏移足夠短,則XOR門延遲將足夠長,可以濾掉假信號幹擾,不會對電路的其餘部分產生影響。兩種已知的解決佔用時間擾亂問題的方法如下(1)時序調整,(2)時序再合成。在美國專利5,475,830中所討論的時序調整要求在某些信號路徑中插入足夠的延遲元件(如緩衝器)來延長邏輯元件的佔用時間。例如,在上述移位寄存器電路中的輸入D2和D3上增加足夠的延遲可以避免佔用時間擾亂。這樣,在圖78中顯示了分別將延遲元件2430和2431加到輸入D2和D3的同樣的移位寄存器電路。結果就可以設計延遲元件2430使得時間t4發生在時間t5後,T2<T1+H2(圖76(B)),這樣就沒有佔用時間擾亂的發生。時序調整方法的一個潛在問題是它過於依賴FPGA晶片的技術參數。所屬
技術領域:
的技術人員都知道象FPGA晶片這樣的可重新配置邏輯晶片,是通過查找表實現邏輯元件的。晶片中查找表的延遲是在說明書中標明,而設計者要依賴於具體的時間延遲來使用時序調整方法避免佔用時間擾亂。然而,這個延遲只是個估計值並會隨著晶片的不同而變化。時序調整方法的另一個潛在問題是設計者必須補償在整個電路設計過程都存在的線路延遲。雖然這並不是不可能完成的任務,但是線路延遲的估算是需要消耗時間的而且容易引發錯誤。另外,時序調整並沒有解決時鐘假信號的問題。另一個解決方法是IKOS的VirtualWires技術所引進的時序再合成。時序再合成的概念包括將一個用戶的電路設計轉變成一個功能等同的設計同時通過有限狀態機和寄存器嚴格控制時鐘和輸出接腳信號的時序。時序再合成通過引入一個單獨高速時鐘來為用戶電路設計的重新設定時序。它還將鎖存器、門控時鐘和多重同步和異步時鐘轉變成一個基於觸發器的單時鐘同步設計。這樣,時序再合成在每個晶片的輸入和輸出輸出接腳使用寄存器來控制晶片間信號移動的精度並避免晶片間佔用時間擾亂的發生。時序再合成還在每個晶片內使用一個有限狀態機並基於參考時鐘來排定來自其它晶片的輸入、到達其它晶片的輸出以及內部觸發器的更新。圖79顯示了使用與圖75(A)、75(B)、76(A)和76(B)關聯的上述討論中所引入的同樣的移位寄存器的時序再合成電路的一個例子。基本的三觸發器移位寄存器設計已被轉變成一個功能等同的設計。晶片2430包括通過線路2448與一寄存器2443相連的原始內部時鐘生成邏輯2435。時鐘邏輯2435產生CLK信號。第一有限狀態機2438也是通過線路2449與寄存器2443相連的。寄存器2443和第一有限狀態機2438都是由不依賴於設計的全局參考時鐘控制的。CLK在到達晶片2434之前還穿過晶片2432和2433進行傳遞。在晶片2432中,第二有限狀態機2440通過線路2462控制一寄存器2445。CLK信號從寄存器2443通過線路2461傳遞到寄存器2445。寄存器2445通過線路2463將CLK信號輸出到下一個晶片2433。晶片2433包含一個通過線路2464控制著寄存器2446的第三個有限狀態機2441。寄存器2446將CLK信號輸出到晶片2434。晶片2431包括最初觸發器2436。寄存器2444接收輸入Sin並通過線路2452將輸入Sin輸出到觸發器2436的D1輸入中。觸發器2436的Q1輸出是通過線路2454與寄存器2466相連的。第四有限狀態機2439通過線路2451控制寄存器2444,通過線路2455控制寄存器2466並通過鎖存器啟動線路2453控制觸發器2436。第四有限狀態機2439還通過線路2450從晶片2430接收最初時鐘信號CLK。晶片2434包括最初觸發器2437,它通過線路2456從晶片2431上的寄存器2466接收信號到D2輸入。觸發器2437的Q2輸出是通過線路2457與寄存器2447相連的。第五有限狀態機2439通過線路2459控制寄存器2447並通過鎖存器啟動線路2458控制觸發器2437。第五有限狀態機2442還通過晶片2432和2433從晶片2430接收最初時鐘信號CLK。利用時序再合成,有限狀態機2438到2442,寄存器2443到2447和2466,以及單獨全局參考時鐘被用來控制跨過多晶片的信號流並更新內部觸發器。這樣,在晶片2430中CLK信號到其它晶片的分布由第一有限狀態機2438通過寄存器2443來排定。類似地,在晶片2431中第四有限狀態機2439安排通過寄存器2444到觸發器2436的輸入Sin的傳遞,以及通過寄存器2466的Q1輸出的傳遞。觸發器2436的鎖存功能也是由來自第四有限狀態機2439的一個鎖存啟動信號控制的。其它晶片2432到2434的邏輯也適用同樣的原則。由於對晶片間輸入傳遞時間、晶片間輸出傳遞時間以及內部觸發器狀態更新進行了嚴格的控制,從而排除了晶片間佔用時間擾亂。然而,時序再合成技術要求將用戶電路設計轉變成一個包括附加的有限狀態機和寄存器的功能相當的電路,這個功能相當的電路要大得多。一般來說,用以執行此技術所必需的附加的邏輯最多可達每個晶片的有用邏輯的20%。而且此技術並不能完全避免時鐘假信號問題。為避免時鐘假信號問題,使用時序再合成技術的設計者還必須採取附加的預防手段。一個保守的方法是設計一個電路使得用門控時鐘的邏輯裝置的輸入在同樣的時間不會發生改變。一個積極的方法是使用閘延遲來過濾假信號以使它們不會影響電路剩下的部分。然而正如上所述,時序再合成需要一些附加的有效措施來避免時鐘假信號。現在將討論本發明的解決佔用時間和時鐘假信號問題的各種實施例。在將用戶設計配置映射到RCC計算系統的軟體模型和RCC陣列的硬體模型的過程中,根據本發明的一實施例,用一時序不靈敏無假信號(TIGF)鎖存器對圖18(A)所顯示的鎖存器進行仿真。類似地,圖18(B)所顯示的設計觸發器用根據本發明的一實施例的一TIGF觸發器進行仿真。這些TIGF邏輯裝置無論是以鎖存器還是觸發器的形式,也可以被稱作仿真邏輯裝置。TIGF鎖存器和觸發器的更新是由全局觸發信號控制的。在本發明的一實施例中,不是在用戶設計電路中的所有邏輯裝置都是由TIGF代替的。一個用戶設計電路包括由主時鐘啟動或計時的部分以及由門控或派生的時鐘控制的其它部分。因為佔用時間擾亂和時鐘假信號是屬於後者的問題,其中邏輯裝置是由門控或派生的時鐘控制的。根據本發明的一實施例,只有這些特定的由門控或派生的時鐘控制的邏輯裝置被TIGF邏輯裝置代替。在其它的實施例中,在用戶設計電路中的所有的邏輯裝置都由TIGF邏輯裝置代替。在討論本發明的TIGF鎖存器和觸發器實施例之前,先討論全局觸發信號。總體來說,全局觸發信號是用來使TIGF鎖存器和觸發器在估算過程中保持其狀態(即保持舊的輸入值)並在很短的觸發期間更新其狀態(即儲存新的輸入值)。在一實施例中,圖82所示的全局觸發信號是從上述EVAL信號分離並衍生出來的。在該實施例中,全局觸發信號具有一個長的估算周期,和隨後的一個短的觸發周期。全局觸發信號在估算過程中追蹤EVAL信號,而當EVAL循環完結時會產生用來更新TIGF鎖存器和觸發器的短觸發信號。在另一個實施例中,EVAL信號就是全局觸發信號,其在估算周期是處於一個邏輯狀態(如邏輯0)而在非估算或TIGF鎖存器/觸發器更新階段是處於另一個邏輯狀態(如邏輯1)。正如上文關於RCC計算系統和RCC硬體陣列的討論,估算周期用於將所有的主輸入和觸發器/鎖存裝置的變化傳輸到整個用戶設計中,一次一個模擬循環。在傳輸的過程中,RCC系統一直處於等待狀態直到系統的所有信號都達到穩定狀態。將用戶設計映射並配置到RCC陣列的適當的可重新配置的邏輯裝置(如FPGA晶片)中去之後,計算估算周期。相應地,估算周期是由具體設計確定的,也就是說,不同用戶設計的估算周期可以是不同的。此估算周期的持續時間應能確保系統所有的信號都可以通過整個系統進行傳輸並在下一個短觸發階段前達到穩定狀態。正如圖82所示,短的觸發階段與估算周期鄰近。在一實施例中,短觸發階段落後於估算周期。在短觸發階段前,輸入信號在估算周期內貫穿用戶設計電路的硬體模型配置部分進行傳輸。根據本發明的一實施例,用EVAL信號邏輯狀態的一個變化來標記的短觸發階段控制著用戶設計中的所有TIGF鎖存器和觸發器,這樣它們就可以被更新為所傳輸的來自達到穩定狀態後的估算周期的新值。該短觸發階段通過一低偏移網絡進行全局分布並且其持續時間之短(即圖82所示的從t0到t1以及從t2到t3)能滿足可重新配置邏輯裝置進行正確操作所允許的要求。在該短觸發階段中,在TIGF鎖存器和觸發器的每個輸入階段會對新的主輸入進行取樣,而舊的儲存在相同的TIGF鎖存器和觸發器中的值會被輸出到用戶設計的RCC硬體的下一個階段。在下面的討論中,在短觸發階段中所發生的全局觸發信號的部分將會被稱為TIGF觸發,TIGF觸發信號,觸發信號或簡單地稱為觸發。圖80(A)顯示了最初在圖18(A)中所顯示的鎖存器2470。此鎖存器按以下程序進行操作if(#S),Q←1elseif(#R),Q←0elseif(en),Q←DelseQKeepstheoldvalue.(保持舊值)因為該鎖存器是電平感應並且是異步的,所以只要時鐘輸入和鎖存器啟動輸入被啟動,那麼輸出Q將追蹤輸入D。圖80(B)顯示的是根據本發明的一實施例的TIGF鎖存器。正如圖80(A)中的鎖存器,TIGF鎖存器有一D輸入、一啟動輸入、一設置(S)、一復位(R)和一輸出Q。另外它有一觸發輸入。TIGF鎖存器包括一D型觸發器2471、一多路復用器2472、一「或」門2473和一「與」門2474以及各種互連。D型觸發器2471通過線路2476從「與」門2474的輸出接收其輸入。D型觸發器還通過線路2477上的一觸發信號在其時鐘輸入端被觸發,此觸發信號是RCC系統根據一依賴於估算循環的嚴格的進程表進行全局分布的。D型觸發器2471的輸出是通過線路2478與多路復用器2472相連的。多路復用器2472的另外的輸入與線路2475上的TIGF鎖存器D輸入相連。多路復用器由線路2484上的一啟動信號控制。多路復用器2472的輸出通過線路2479與「或」門2473的一輸入相連。「或」門2473另外的輸入是與線路2480上的設置(S)輸入相連的。「或」門2473的輸出通過線路2481與「與」門2474的輸入相連。「與」門2474另外的輸入是與線路2482上的復位(R)信號相連的。如上所述,「與」門2474的輸出通過線路2476反饋到D型觸發器2471的輸入。現在討論本發明TIGF鎖存器實施例的操作。在此TIGF鎖存器的實施例中,D型觸發器2471保持TIGF鎖存器的當前狀態(即舊值)。D型觸發器2471輸入端上的線路2476給出了需要鎖存到TIGF鎖存器的新的輸入值。線路2476給出新值是因為線路2475上TIGF鎖存器的主輸入(D輸入)最後會從多路復用器2472(帶有線路2484上將最終給出的正確啟動信號),穿過「或」門2473並最後穿過「與」門2474到達線路2483,線路2483則將TIGF鎖存器新的輸入信號反饋給線路2476上的D型觸發器2471。線路2477上的觸發信號通過將線路2476上新的輸入值記錄到D型觸發器2471上來更新TIGF鎖存器。這樣,線路2478上D型觸發器2471的輸出就顯示了TIGF鎖存器的當前狀態(即舊值),而線路2478上的輸入則顯示了需要鎖存到TIGF鎖存器中的新輸入值。多路復用器2472接收來自D型觸發器2471的當前狀態以及線路2475上的新的輸入值。啟動線路2484的功能是作為多路復用器2472的選擇器信號。因為TIGF鎖存器直到線路2477上有觸發信號才會更新(即儲存新的輸入值),所以線路2475上TIGF鎖存器的D輸入值和線路2484上的啟動值可以以任何順序到達TIGF。如果此TIGF鎖存器(和用戶設計硬體模型的其它鎖存器)碰到在使用一常規鎖存器的電路中通常會引起佔用時間擾亂的情況,如上文所提到的圖76(A)和76(B)中一個時鐘信號遠遲於另一個時鐘信號到達,那麼此TIGF鎖存器可以通過將正確的舊值保持到線路2477上出現觸發信號時為止來正常作業。觸發信號是通過低偏移全局時鐘網絡來分布的。***此TIGF鎖存器還解決了時鐘假信號的問題。注意時鐘信號由TIGF鎖存器中的啟動信號代替。線路2484上的啟動信號可能在估算周期的過程中出現幹擾但TIGF將能持續保持當前狀態而不會失效。在一個實施例中,當信號達到穩定狀態時TIGF可以被更新的唯一機制是通過估算周期後產生的觸發信號。圖81(A)顯示了最初在圖18(B)中所顯示的觸發器2490。此鎖存器按以下程序進行操作if(#S),Q←1elseif(#R),Q←0elseif(positiveedgeofCLK),Q←DelseQkeepstheoldvalue(保持舊值)。因為該鎖存器是邊緣觸發的,所以只要觸發器啟動輸入被啟動,那麼輸出Q將在時鐘信號的正邊沿追蹤輸入D。圖81(B)顯示的是根據本發明的一實施例的TIGFD型觸發器。如圖81(A)中的觸發器,TIGF觸發器有一D輸入、一時鐘輸入、一設置(S)、一復位(R)和一輸出Q。另外它有一觸發輸入。TIGF觸發器包括三個D型觸發器2491、2492和2496,一多路復用器2493,一「或」門2494和兩個「與」門2495和2497以及各種互連。觸發器2491接收線路2498上的TIGFD輸入、線路2499上的觸發輸入,並在線路2500上給出一Q輸出。此輸出線路2500也作為多路復用器2493的一個輸入。多路復用器2493的另一個輸入是通過線路2503來自觸發器2492的Q輸出。多路復用器2493的輸出通過線路2505與「或」門2494的一個輸入相連。「或」門2494另外的輸入是線路2506上的設置(S)信號。「或」門2494的輸出通過線路2507與「與」門2495的一輸入相連。「與」門2495另外的輸入是線路2508上的復位(R)。「與」門2495的輸出(也即TIGF整體輸出Q)通過線路2501與觸發器2492的輸入相連。觸發器2492在線路2502上也有一觸發輸入。回到多路復用器2493,它的選擇器輸入通過線路2509與「與」門2497的輸出相連。「與」門2497的一個輸入是來自線路2510上的CLK信號,另一個輸入來自線路2512上觸發器2496的輸出。觸發器2496也從線路2511上的CLK信號接收輸入並從線路2513上接收其觸發信號。現在討論本發明TIGF觸發器實施例的操作。在此實施例中,TIGF觸發器在以下三個不同的點接收觸發信號經由線路2499的D型觸發器2491,經由線路2502的D型觸發器2492以及經由線路2513的D型觸發器2496。TIGF觸發器只有在時鐘信號的邊緣被檢測到時才會儲存輸入值。根據本發明的一實施例,所要求的邊緣是時鐘信號的正邊沿。為檢測該時鐘信號的正邊沿,提供了邊緣檢測器2515。邊緣檢測器2515包括一D型觸發器2496和一「與」門2497。邊緣檢測器也通過線路2513上D型觸發器2496的觸發信號來更新。D型觸發器2491保持TIGF觸發器的新輸入值並阻止線路2498上D輸入的任何改變,直到線路2499上具有觸發信號。這樣,在TIGF觸發器的每個估算周期前,新值儲存在D型觸發器2491中。相應地,TIGF觸發器就通過預存新值直到TIGF觸發器被觸發信號更新來避免佔用時間擾亂。D型觸發器2492在線路2502上出現觸發信號前保持TIGF觸發器的當前值(或舊值)。此值是仿真TIGF觸發器更新後和下一估算周期前的狀態。到線路2501上D型觸發器2492的輸入保持新值(也是在估算周期的有效期間線路2500上的值)。多路復用器2493接收線路2500上的新的輸入值以及當前儲存在線路2503上TIGF觸發器內的舊值。基於線路2504上的選擇器信號,多路復用器或者輸出新值(線路2500)或輸出舊值(線路2503)作為仿真TIGF觸發器的輸出。在用戶設計硬體模型中所有的傳輸信號接近穩定狀態前此輸出是隨著時鐘假信號變化的。這樣,線路2501上的輸入將在估算末期給出儲存在觸發器2491中的新值。當TIGF觸發器接收到觸發信號時,觸發器2492現在儲存著在線路2501上出現的新值,而觸發器2491則儲存著線路2498上的下一個新值。這樣,根據本發明一實施例的TIGF觸發器就不再受到時鐘假信號的負面影響。更為詳盡地闡述一下此TIGF觸發器還有一些抵制時鐘假信號的作用。所屬
技術領域:
的技術人員們將會意識到如果用圖81(B)實施例中的TIGF觸發器代替圖77(A)中的觸發器2420、2421和2423,那麼時鐘假信號就不會影響任何使用該TIGF觸發器的電路。參考一下圖77(A)和77(B),時鐘假信號會對圖77(A)的電路產生負面影響是因為在從時間t1到t2的期間內觸發器2423在不應該記錄新值的時候記錄了新值。CLK1和CLK2信號偏斜的特性迫使「異或」門2422在t1到t2期間內產生一邏輯1狀態,驅動著下一個觸發器2423的時鐘線路。根據本發明的一實施例,如果使用TIGF觸發器時鐘假信號就不會影響記錄新值。用TIGF觸發器代替觸發器2423,一旦信號在估算周期達到穩定狀態,那麼短觸發階段的觸發信號將使得TIGF觸發器儲存觸發器2491中(圖81(B))的新值。其後像圖77(B)中的時鐘假信號那樣的任何從t1到t2的時段內的時鐘假信號都不會記錄新值。TIGF觸發器只會隨著觸發信號而更新,而此觸發信號只有在估算周期之後當傳輸於電路中的信號達到穩定狀態時才會被提供給TIGF觸發器。雖然此特定的TIGF觸發器實施例是D型觸發器,但是其它的觸發器(如T,JK,SR)也在本發明的範圍內。其它類型的邊緣觸發的觸發器可以通過在在D輸入前增加一些「與」/「或」邏輯而由D型觸發器衍生出來。VII.模擬伺服器根據本發明另一實施例的模擬伺服器可以允許多用戶進入相同的可重新配置的硬體單元,以便有效地以分時操作的方式模擬和加速相同或不同的用戶設計。使用高速的模擬調度程序和狀態轉換機制,為模擬伺服器提供導致高吞吐量地有效模擬處理。伺服器使多用戶或處理進入可重新配置硬體單元,以實現加速和硬體狀態交換的目的。一旦完成加速或到達硬體狀態,每個用戶或處理就可以只在軟體中模擬,這樣就釋放了對可重新配置硬體單元的控制,使得其他用戶或處理能夠對其進行控制。在此說明書的模擬伺服器的部分,我們使用了諸如「作業」和「處理」這樣的術語。在此說明書中,術語「作業」和「處理」通常可以互換使用。過去的批處理系統執行「作業」而分時作業系統儲存並執行「處理」或程序。而在如今的系統中這些作業和處理是類似的。這樣在此說明書中術語「作業」就不限於批處理系統,而「處理」就不限於分時作業系統。而且在某個極端情況下「作業」與「處理」是等同的,那就是當「處理」能夠在一個時間片(timeslice)內執行或沒有其它分時幹預打斷的情況下。另一個極端情況就是如果「作業」要求多時間片來完成,那麼「作業」是「處理」的子集。因此,如果一個「處理」由於其它同等優先權的用戶/處理的出現而需要多時間片來完成執行,那麼它就分為一些「作業」。而且,如果一個「處理」由於它是唯一最高優先權的用戶,或者處理很短以至在一個時間片內就可以完成,那麼一個「處理」就等同於一個「作業」。這樣一個用戶就可以與一個或更多的「處理」或已經在模擬系統中裝載並執行的程序相互作用,並且每個「處理」可能需要一個或更多的「作業」來在分時系統中完成。在一個系統配置中,多用戶通過遠程終端可以在非網絡環境下利用相同的多處理器工作站,並進入同樣的可重新配置硬體單元,從而檢查或調試相同或不同用戶電路設計。在非網絡環境中,遠程終端是通過與一主計算系統相聯來實現它的處理功能。這個非網絡設置使得多用戶能夠進入同一用戶設計來達到並行調試的目的。這種進入是通過分時操作處理來實現的,而在進行此分時操作時,調度程序決定多用戶的優先進入權的、交換作業,以及在預定的用戶中選擇性地鎖存硬體單元入口。在其它情況下,多用戶可以通過用於他(她)自己的分離的並且不同的用戶設計的伺服器進入同一可重新配置的硬體單元來進行調試。在這一配置中,多用戶或者處理與作業系統共享工作站中的多微處理器。在另一配置中,分離的基於微處理器的工作站中的多用戶或者處理可以通過網絡來進入同一重新配置的硬體單元,從而來檢查或調試相同或不同用戶電路設計。類似地,這種進入是通過分時操作處理來實現的,而在進行此分時操作中,調度程序決定多用戶的優先進入權、交換作業,以及在預定的用戶中選擇性地鎖存硬體單元入口。在網絡環境下,調度程序聽從由UNIX套接字(socket)系統調用的網絡請求。此作業系統使用套接字來給調度程序發出指令。如前所述,模擬調度程序使用搶先多優先權輪轉算法。換句話說,具有更高優先權的用戶或者處理首先被服務,直到這個用戶或者處理完成它的作業並結束進程為止。在具有相同優先權的用戶或者處理中,使用搶先輪轉算法,每個用戶或處理都被分配給一相同的時間片去執行操作直到完成。該時間片很短,以至於多用戶或處理在被服務前無需等待太久。這段時間也足夠長,使得在模擬伺服器的調度程序中斷一個用戶或者處理而交換進來並進行新的用戶作業之前,已經執行了充分的操作。在一實施例中,默認時間片是5秒鐘,並且可由用戶設定。在一實施例中,調度程序向作業系統內置的調度程序發出特別調用。圖45是根據本發明的一實施例的一個具有多處理器工作站的非網絡環境。圖45是圖1的變型,因此,對相同的元件、單元使用了相同的編號。工作站1100包括局部總線1105、一個主機/PCI橋接器1106、存儲器總線1107,以及主存儲器1108。還可能具有一超高速緩衝存儲器子系統(未示出)。還具有其他的用戶接口單元(如顯示器,鍵盤),但沒有在圖45中顯示出來。工作站1100還包括多重微處理器1101、1102、1103、1104,它們通過調度程序1117和連接/路徑1118耦聯到局部總線1105上。如所屬
技術領域:
的技術人員所知,作業系統1121為整個的計算環境提供用戶硬體接口基礎,用於為計算環境中的不同用戶、處理和裝置管理文件和分配資源。為了使概念更加清楚,我們顯示了作業系統1121和總線1122。在AbrahamSilberschatz和JamesL.Peterson合著的《OPERATINGSYSTEMCONCEPTS(1988)》與WilliamStalling的《MODERNOPERATINGSYSTEMS(1996)》中可以找到關於作業系統的參考文獻,其內容以引用的方式併入本文。在一實施例中,工作站1100採用的是SunMicrosystem的Enterprise450系統,它使用的是UltraSPARCII處理器。Sun450系統不通過局部總線對存儲器進行訪問,而是通過一些專用總線經由縱橫制接線器與儲存器相連來訪問儲存器。因此,多處理可以由多微處理器執行各自指令,並不通過局部總線對存儲器進行訪問來運行。Sun450系統和UltraSPARC的說明書的內容將以引用的方式併入本文。雖然SunUltra60系統僅能允許2個處理器,但是它仍然是微處理器系統另外的一個例子。調度程序1117提供通過設備驅動器1119和連接/路徑1120對可重新配置的硬體單元20的分時訪問。調度程序1117主要在軟體中實現,以便與主計算系統的作業系統進行交互作用,另外還部分的在硬體中實現,以便通過支持模擬作業中斷和交換入/出模擬進程來與模擬伺服器進行交互作用。調度程序1117和設備驅動器1119將在下面做詳細討論。在工作站1101中,每一個微處理器1101到1104都具有獨立處理而不依賴於其它微處理器的能力。在本發明一實施例中,工作站1100在以UNIX為基礎的作業系統下運行,儘管其它的實施例中,1101工作站可以在以Windows或者Macintosh為基礎的作業系統下運行。以UNIX為基礎的系統為用戶配置了X-Windows作為用戶根據需要進行管理程序、任務和文件的用戶界面。如果想了解UNIX作業系統的詳細情況,請參考MauriceJ.Bach的《THEDESIGNOFTHEUNIXOPERATINGSYSTEM(1986)》。在圖45中,多用戶可以通過遠程終端進入工作站1100。有時,每個用戶可以用一個特定的CPU來運行程序。在另外情況下,每個用戶根據資源限制來使用不同的CPU。通常,作業系統1121決定這些訪問,實際上,作業系統本身可以從一個CPU跳到另一個來完成其任務。為了處理分時操作,調度程序通過套接字系統調用聽從網絡請求,對作業系統1121發出系統調用,作業系統1121反過來通過設備驅動器1119向可重新配置的硬體單元20開始產生中斷信號產生來處理搶先操作。中斷信號的產生是許多調度算法步驟中的一步,這些步驟還包括終止當前作業、為當前終止的作業存儲狀態信息、交換作業,和執行新的作業。伺服器調度算法將在下面討論。現在簡要地討論套接字(socket)和套接字系統調用。在一個實施例中,UNIX作業系統可以以分時操作模式運行。在一定的時間(即時間片)內,UNIX內核將CPU分配給一個處理,到這段時間結束時,搶先這個處理,然後為另外一個處理安排下一個時間片。在前一時間片被搶先的處理被再次進行調度,在稍晚時間片內執行。實現並推動處理間的通訊以及允許使用複雜網絡協議的方法之一是採用套接字。內核有三個在客戶伺服器模式下發揮功能的層,包括套接字層、協議層和設備層。最頂層(套接字層)提供系統調用與其他層(協議層和設備層)之間的接口。一般來說,套接字層具有耦聯客戶程序和伺服器程序的端點(endpoints)。套接字端點可以位於不同的機器上。中間層即協議層提供通信的協議模式,比如TCP和IP。底層即設備層包括控制網絡設備的設備驅動器。一個設備驅動器的示例為基於乙太網的乙太網驅動器。處理應用客戶伺服器模式進行交流。在這個模式裡,伺服器程序聽從於一個端點的套接字,而客戶程序通過在一個雙向通信通路中的另一端點的套接字聽從於伺服器程序。內核維持著每個客戶、伺服器的三個層之間的內在通信並根據需要從客戶到伺服器發送數據。套接字包含幾個系統調用,其中包括一個建立了通信通路端點的套接字系統調用。很多程序使用在許多系統調用中的套接字描述符sd。綁定系統調用(bindsystemcall)把一個名字和一個套接描述符sd聯繫起來。一些其它系統調用的範例包括連接系統調用(connectsystemcall),其要求內核與套接字相聯繫,關閉系統調用(closesystemcall)關閉套接字,切斷系統調用(shutdownsystemcall)關閉套接字連接,發送和接收系統調用(sendandrecvsystemcall)通過一連接的套接字傳輸數據。圖46顯示了的是本發明的另一個實施例,其中許多工作站通過一個網絡共享一個單獨的基於分時操作基礎上的模擬系統。許多工作站通過調度程序1117與模擬系統耦聯。在模擬系統的計算環境下,單獨的CPU11與在工作站1110上的局部總線12耦聯。這種系統也可配備多CPU。如所屬
技術領域:
的技術人員所知,另外裝備了作業系統1118,並且幾乎所有的程序和應用存在於作業系統的頂部。為使概念清晰,作業系統1121連同總線1122一同被示出。在圖46中,工作站1110包括那些在圖1中的部件/單元,他們連同調度程序1117和調度程序總線1118通過作業系統1121被耦聯到局部總線12。調度程序1117通過向作業系統1121發出套接字調用控制分時訪問用戶站1111、1112,和1113。調度程序1117大部分在軟體中實現,部分地在硬體中實現。在這個圖中,只顯示了三個能夠通過網絡訪問模擬系統的用戶。當然,其他系統設置可具有三個以上或者不到三個用戶。每一用戶通過遠程工作站1111、1112,或1113訪問系統。遠程用戶站1111、1112和1113分別通過網絡連接站1114、1115和1116被耦聯到調度程序1117。如所屬
技術領域:
的技術人員所知,設備驅動器1119是連接到PCI總線50和可重新配置的硬體單元20之間的。在設備驅動器1119和可重新配置的硬體單元20之間具有連接或導電路徑1120。在本發明的該網絡多用戶實施例中,調度程序1117通過作業系統1121與設備驅動器1119連接,來聯絡和控制可重新配置的硬體單元20,用於硬體加速和硬體狀態恢復後進行模擬。另外,在一實施例中,模擬工作站1110是一個SunMicrosystem的Enterprise450系統,其使用UltraSPARCII多處理器。與通過局部總線訪問存儲器不同,Sun450系統可以使得多處理器通過一專門總線經由一縱橫制接線器與存儲器相連來訪問存儲器,而非聯合局部總線。圖47顯示了根據本發明的網絡實施例的一模擬伺服器的高層結構。這裡,並沒有明確顯示出作業系統,但所屬
技術領域:
的技術人員都知道,總是存在著用於文件管理和資源分配的作業系統,服務於在模擬計算環境中的不同的用戶、處理和裝置。模擬伺服器1130包括調度程序1137、一個或多個設備驅動器1138,和可重新配置的硬體單元1139。雖然在圖45和46中,模擬伺服器並未作為一個單個整體單元被清楚地顯示出來的,但它包括調度程序1117,設備驅動器1119和可重新配置的硬體單元20。回到圖47,模擬伺服器1130分別通過網絡連接/路徑1134、1135和1136與三個用戶工作站1131、1132和1133耦聯。如上所述,也可有多於三個或不到三個工作站與模擬伺服器1130耦聯。在模擬伺服器中的調度程序建立在一個搶先輪轉算法基礎上。實質上,輪轉方案允許幾個用戶或程序按順序地執行以完成循環操作。這樣,每個模擬作業(與網絡環境下的一個工作站或多處理非網絡環境下的一個用戶/程序相聯繫)就被授予優先等級和執行所需的固定的時間片。通常,具有更高優先權的作業首先被執行完。在一種極端情況下,如果每一個不同的用戶有不同的優先權,那麼就先服務擁有最高優先權的用戶直到其作業結束為止,而最後服務擁有最低優先權的用戶。在此不使用分時,因為每一個用戶有不同的優先權,並且調度程序僅根據優先權來服務於用戶。這種情形與只有一位用戶訪問模擬系統直到完成的情況相似。另一個極端情況就是不同的用戶有相同的優先權。這樣就使用先進先出(FIFO)排列的時間片概念。對於擁有相同優先權的作業,無論從哪一個先開始,每一項作業都執行到其結束或固定時間片終止。如果作業在其時間片內沒有完成,則必須保存與其已完成的任務相關的模擬圖象,用於以後的恢復和執行。然後這項未完的作業就排在序列最後。然後在下一個時間片內恢復和執行已經保存的下一個作業的模擬圖象(如果有的話)。較高優先權的作業可以搶先較低優先權的作業。換句話說,相同優先權的作業以輪轉模式執行直到其通過時間片完成。其後,以輪轉模式執行較低優先權的作業。如果某一較高優先權的作業被插入到序列中而一個較低優先權的作業正在運行,那麼較高優先權的作業將優先於較低優先權的作業,直到較高優先權的作業執行完。因此,較高優先權的作業在較低優先權的作業開始執行之前就運行完成了。如果較低優先權的作業已經開始執行,則會中止執行較低優先權的作業直到較高優先權的作業執行完。在一個實施中,UNIX作業系統提供基本和基礎的搶先輪轉調度算法。根據本發明的一實施例,模擬伺服器的調度程序算法與作業系統的調度程序算法協同工作。在以UNIX為基礎的系統中,調度程序算法的搶先特徵使操作程序可以搶佔用戶定義的調度。為使分時操作計劃能夠實施,模擬調度程序使用了一種在作業系統本身調度算法之上的搶先多重優先權輪轉算法。根據本發明的一實施例,多用戶和模擬伺服器之間的關係遵循一個客戶伺服器模式,其中多用戶是客戶,而模擬伺服器是伺服器。用戶客戶與伺服器之間通過套接字調用進行通訊。簡要參考圖55,客戶包括客戶程序1109、一個套接字系統調用部件1123、UNIX內核1124和TCP/IP協議部件1125。伺服器包括一個TCP/IP協議部件1126、UNIX內核1127、套接字系統調用部件1128和模擬伺服器1129。多客戶可能需要模擬作業通過客戶應用程式發出的UNIX套接字調用在伺服器中被執行模擬。在一個實施例中,一個典型的事件順序包括多個客戶通過UNIX套接字協議向伺服器發送請求。對於每個請求,伺服器都認為它是關於指令是否執行成功的。可是,對於伺服器隊列狀態的請求,伺服器應答以當前隊列的狀況以便恰當地呈現給用戶。下表F列出了來自客戶的相關套接字指令表F客戶套接指令對於每一個套接字調用,用整數編碼的每一條指令後面可能有一些附加參數如代表設計名稱的參數。如果這條指令成功執行,模擬伺服器發出的回應是0,如果失敗則是1。對於要求隊列狀態的指令5,指令反饋的一個實施例是以「\0」字符結尾的ASCII文字,顯示在用戶的顯示屏上。在使用了這些系統套接字調用後,可通過設備驅動器向可重新配置的硬體單元發出或從其接收正確的通訊協議信號。圖48是根據本發明一個實施例的模擬伺服器的結構。如上所述,單個模擬伺服器可對多用戶或處理提供服務以達到在分時操作方式下對用戶設計中的模擬和硬體加速的目的。因此,用戶/處理1147、1148、1149分別通過處理間通訊線路1150、1151、1152與模擬伺服器1140耦聯。這些處理間通訊線路可存在於同一個工作站中用於多處理器設置和操作,或者存在於網絡中用於多工作站的使用。為了與可重新配置的硬體單元進行通訊,每個模擬進程包含軟體模擬狀態及硬體狀態。軟體進程之中的處理間通訊通過UNIX套接字或系統調用來執行,它能夠讓裝備有模擬器插入卡時,這個模擬進程存在於同一工作站上,或者存在於通過TCP/IP網絡相連的分離的工作站上。這樣,與模擬伺服器的通訊可以自動啟動。在圖48中,模擬伺服器1140包括伺服器顯示器1141、一個模擬作業隊列表1142、一個優先級分類器1143、一個作業交換器1144、設備驅動器1145和可重新配置的硬體單元1146,模擬作業隊列表1142、優先級分類器1143和作業轉換器1144組成了圖47所示的調度程序1137。伺服器顯示器1141為系統管理員提供用戶接口功能。用戶可以通過命令系統顯示隊列中的模擬作業,調度優先權、使用記錄和模擬作業交換效率來監控模擬伺服器的狀態。其他使用功能還包括編輯作業優先權,刪除模擬作業以及重新設置模擬伺服器狀態。模擬作業隊列表1142所列出的是由調度程序插入的隊列中所有未完成的模擬請求。這個表格包括作業號、軟體模擬處理號、軟體模擬圖象、硬體模擬圖象文件、設計配置文件、優先權號、硬體大小、軟體大小、模擬運行的積累時間和擁有者的身份。作業隊列按照「先進先出」(FIFO)的排隊方式實現。因此,當要求一個新的作業時,它被置於隊列的末尾。優先級分類器1143決定執行隊列中哪一個模擬作業。在一個實施例中,模擬作業優先方案是可以由用戶定義(即可以被系統管理員控制和設定),以此來控制哪一個模擬處理享有當前執行的優先權。在一個實施例中,根據特定處理的緊迫性或者具體用戶的重要性來確定優先級別。在另外一個實施例中,優先級是動態的,在模擬過程中可以改變。在優選實施例中,根據用戶ID設置優先級。典型的,一個用戶擁有高的優先權,而其他用戶享有較低但相同的優先權。優先性的級別可由系統管理員設定。模擬伺服器從UNIX環境中獲得所有用戶信息,比較典型的是在名為「/etc/passwd」的UNIX用戶文件中發現的。增加新的用戶過程是與在UNIX系統內增加新用戶過程一致。當所有的用戶被定義後,就可以用模擬器伺服器的顯示器來為不同用戶調整優先級別。作業交換器1144根據為調度程序編程的優先級確定來臨時用與一個處理或工作站關聯的模擬作業替換與不同處理或工作站關聯的另一個的模擬作業。如果多用戶正在模擬同一設計,作業交換器只換入存儲的模擬狀態用於模擬進程。但是,如果多用戶正在模擬多個設計,那麼作業交換器將在換入模擬狀態前為硬體配置加載這個設計。在一個實施例中,由於只需要為可重新配置的硬體單元的訪問完成作業交換,所以這個作業交換機制提高了本發明的分時操作實施例的性能。因此,如果一個用戶在某時間段內需要進行軟體模擬,那麼伺服器便會為其他用戶換入其它作業,這樣那個用戶便可以訪問可重新配置的硬體單元用於硬體加速。用戶可以調節並設定作業交換頻率。設備驅動器也可以和可重新配置的硬體單元進行通訊以交換作業。現在將討論模擬伺服器的操作。圖49是一個模擬伺服器在操作過程中的流程圖。起初系統在步驟1160是空閒的,此時,模擬伺服器沒有必要處於待用狀態,或者說模擬進程不在運行當中。其實,空閒狀態可能意味著如下情況之一(1)沒有模擬運行,(2)在單個處理器環境中只有一個用戶/工作站是處於激活狀態以致不需要分時操作,或(3)在多處理環境中只有一個用戶或工作站處於激活狀態,但是僅一個處理在運行。因此,上述2和3兩種情況表明,模擬伺服器僅需處理一項作業,因此排列作業,決定優先級和作業交換都是不需要和不必要的。由於沒有從其他工作站或者處理中接收請求,因此模擬伺服器處於空閒狀態。當從多用戶環境下的一工作站或從多處理器環境下的一微處理器發出一個或多個請求信號而導致一個模擬請求產生的時候,模擬伺服器將在步驟1162對進入的一個或多個模擬作業進行排序。調度程序保持一模擬作業隊列表,將所有未完成的模擬請求插入其中並列出所有未完成的模擬請求。對於批處理模擬作業,伺服器中的調度程序給進入的所有模擬請求排隊,並且自動處理這些作業,不需人工介入。接著在步驟1163中,模擬伺服器將對排列好的各作業進行分類以便決定優先權。這一步對於多個作業特別重要,因為伺服器必須在各作業中確定優先順序以訪問可重新配置的硬體單元。優先級分類器決定執行隊列中的哪個模擬作業。在一個實施例中,若出現資源爭用,模擬作業優先級方案可由用戶定義(即可由系統管理員控制和定義),以控制哪個模擬程序具有當前執行優先級。在步驟1163優先級分類之後,伺服器在需要時將在步驟1164交換模擬作業。這一步驟將根據為伺服器中的調度程序設定的優先順序,暫時用與一程序或工作站關聯的一模擬作業來代替與另一程序或工作站關聯的另一模擬作業。如果多個用戶模擬同一個設計,作業交換器將只換入已存儲的模擬狀態用於模擬進程。而若多個用戶在模擬不同的設計,作業交換器將先加載設計再換入模擬狀態。這裡,設備驅動器也與可重新配置的硬體單元進行通訊以交換作業。在一實施例中,作業交換機制提高了本發明的分時操作實施效果,因為作業交換隻在訪問可重新配置的硬體單元時需要執行。因此,若一個用戶在某個時間段內進行軟體模擬,伺服器會為另一用戶換入另一作業,這樣該另一用戶就可訪問可重新配置的硬體單元以進行硬體加速。例如,假設用戶1和用戶2均通過模擬伺服器訪問可重新配置的硬體單元。首先,在一段時間內用戶1訪問系統,可以調試他/她的用戶設計。若用戶1隻在軟體模式下進行調試,伺服器就可釋放可重新配置的硬體單元,此時用戶2即可訪問它。伺服器換入用戶2的作業,於是用戶2可以軟體模擬或硬體加速模型。根據用戶1和用戶2之間的優先順序,用戶2在預定的時間內可以繼續訪問可重新配置的硬體單元,或者在用戶1需要可重新配置的硬體單元來加速時,伺服器可搶佔用戶2的作業,這樣用戶1的作業即可被換入並通過可重新配置的硬體單元進行硬體加速。預定的時間是指基於具有相同優先級的多個請求的模擬器作業的佔先。在一實施例中,雖然用戶可以對它進行設置,但系統默認時間是5分鐘。這個5分鐘的設置代表了一種超時計時器的形式。本發明的模擬系統使用超時計時器來停止當前模擬作業的執行是因為該作業太耗時,系統因此決定其他具有同樣優先級的待決作業應該訪問可重新配置的硬體模型。在步驟1164,作業交換步驟完成以後,伺服器中的設備驅動器將鎖住可重新配置的硬體單元,這樣只有當前計劃中的用戶或程序可以模擬並使用硬體模型。鎖存和模擬步驟發生在步驟1165。一旦在事件1166模擬完成或是當前模擬進程發生暫停,伺服器將返回優先級分類步驟1163以決定各待決模擬作業的優先級,並在必要時進行隨後的模擬作業交換。類似地,在步驟1167中伺服器也可能搶佔當前模擬作業的執行而返回至優先級分類狀態1163。搶佔只在特定條件下發生。其中一個這樣條件是具有更高優先權的作業等待處理。另外一個這樣的條件是當系統正運行一個計算密集的模擬任務,此時調度程序可被設計為利用超時計時器阻止當前運行的作業而處理具有同樣優先性的另一個作業。在一實施例中,超時計時器被設定在5分鐘。若當前作業執行了5分鐘,系統將搶佔當前作業而換入即使處於同等優先地位的待決作業。圖50顯示了作業交換處理的流程圖。作業交換功能在圖49的步驟1164中實現,並在圖48中作為作業交換器1144顯示在模擬伺服器的硬體裡。在圖50中,當一個模擬作業需要與另外一個模擬作業交換時,作業交換器會在步驟1180中向可重新配置的硬體單元傳送一個中斷。如果可重新配置的硬體單元當前並不運行任何作業(即系統空閒或者用戶只在軟體模式中進行操作,沒有涉及任何硬體加速),則該中斷使可重新配置的硬體單元立即作好作業交換的準備。然而,若可重新配置的硬體單元正在運行一項作業並正在執行一個指令或處理數據,中斷信號將被識別,但可重新配置的硬體單元仍繼續執行當前待決指令並處理當前作業的數據。若可重新配置的硬體單元並非在對當前作業進行指令執行或數據處理的過程中接受了中斷信號,則該信號實質上立即終止了可重新配置的硬體單元的操作。在步驟1181中,模擬系統保存了當前模擬圖像(即軟體和硬體狀態)。通過保存該圖像,用戶隨後可以不必重新運行至該保存點的整個模擬而恢復模擬的運行。在步驟1182中,模擬系統為可重新配置的硬體單元配置了新的用戶設計。這個配置步驟只有在下面的情況下才是必要的即與新的作業相關的用戶設計與剛被中止執行的可重新配置的硬體單元中已配置並加載的用戶設計不同。在配置完成之後,被保存的硬體模擬圖像在步驟1183中重新加載,而被保存的軟體模擬圖像則在步驟1184中重新加載。若新的模擬作業與同樣的設計相關,則不需要再進行設置。對於同樣的設計,模擬系統將在步驟1183中加載所期望的與相同設計的新的模擬作業有關的硬體模擬圖像,因為新作業的模擬圖像與剛被中止的作業的模擬圖像可能有所不同。配置步驟的詳情請見本專利說明書。此後,相關的軟體模擬圖像在步驟1184中重新加載。在重新加載軟體和硬體模擬圖像後,新作業的模擬將在步驟1185中開始,而前一個被中止的作業只能在軟體模擬模式下進行,因為它暫時不能訪問可重新配置的硬體單元。圖51顯示設備驅動器和可重新配置的硬體單元之間的信號。設備驅動器1171提供了調度程序1170和可重新配置的硬體單元1172之間的接口。如圖45和46所示,設備驅動器1171還提供了整個計算環境(即工作站,PCI總線,PCI設備)和可重新配置的硬體單元1172之間的接口,但圖51隻顯示了模擬伺服器部分。設備驅動器和可重新配置的硬體單元之間的信號包括雙向通信交換信號、從計算環境經由調度程序傳向可重新配置的硬體單元的不定向設計配置信息、換入模擬狀態信息、換出模擬狀態信息,以及從設備驅動器傳向可重新配置的硬體單元以交換模擬作業的中斷信號。線路1173傳遞雙向通信交換信號,這些信號和交換協議將結合圖53和圖54進行討論。線路1174傳遞從計算環境經由調度程序1170傳向可重新配置的硬體單元1172的不定向設計配置信息。為進行模型化初始,配置信息可以通過線路1174傳向可重新配置的硬體單元1172。另外,當用戶在模型化和模擬不同的用戶設計時,配置信息必須在一個分時內傳送至可重新配置的硬體單元1172。當不同的用戶在模型化同一個用戶設計時,新的設計配置是不必要的;而為了不同的模擬運行,可能需要將與同一個設計相關的不同的模擬硬體狀態傳向可重新配置的硬體單元1172。線路1175向可重新配置的硬體單元1172傳送換入模擬狀態信息。線路1176傳送從可重新配置的硬體單元到計算環境(通常為存儲器)的換出模擬狀態信息。換入模擬狀態信息包括先前保存的硬體模型狀態信息和可重新配置的硬體單元1172需要加速的硬體存儲器狀態。換入模擬狀態信息是時間片的開始進行傳送的,這樣預定的當前用戶就可以訪問可重新配置的硬體單元以進行加速。換出模擬狀態信息包括可重新配置的硬體單元1172接收中斷信號而移至與一不同的用戶/程序相關的下一個時間片後,在一時間片的末尾必須被保存到存儲器中的硬體模型和存儲器狀態信息。狀態信息的存儲使得當前用戶/程序可以在稍後的時間內(例如分配給當前用戶/程序的下一個時間片)恢復該狀態。線路1177從設備驅動器1171向可重新配置的硬體單元傳送中斷信號以進行模擬作業的交換。中斷信號在時間片之間傳送,這樣才能在當前時間片換出當前模擬作業而在下一時間片換入新的模擬作業。現在,在參照圖53和圖54的基礎上,討論根據本發明的一實施的通信交換協議。圖53顯示了設備驅動器和可重新配置的硬體單元之間通過一交換邏輯接口傳輸的通信交換信號。圖54是通信協議的狀態圖。圖51顯示了線路1173上的通信交換信號。圖53則是設備驅動器和可重新配置的硬體單元之間的通信交換信號的詳細情形。在圖53中,交換邏輯接口1234位於可重新配置的硬體單元1172中。或者,交換邏輯接口1234可安裝在可重新配置的硬體單元1172的外部。在設備驅動器1171和交換邏輯接口1234之間有四組信號。這些信號是線路1230上的3位元組SPACE(空間)信號、線路1231上的單字節讀/寫信號、線路1232上的4位元組COMMAND(命令)信號,以及線路1233上的單字節DONE(完成)信號。交換邏輯接口包含了處理這些信號的邏輯電路,將可重新配置的硬體單元放置於適當的模式之下以執行需要運行的不同操作。該接口與CTRLFPGA單元(或者FPGA輸入/輸出控制器)相連。對於3位元組SPACE信號來說,建立在PCI總線之上的模擬系統計算環境與可重新配置的硬體單元之間的數據傳輸被指定到軟體/硬體邊界中的特定I/O地址空間--REG(寄存器)、CLK(軟體時鐘)、S2H(軟體到硬體)和H2S(硬體到軟體)中。正如前文所述,模擬系統根據不同的部件類型和控制功能將硬體模型映射到主存儲器的四個地址空間中REG空間被指定用於寄存器部件;CLK空間被指定用於軟體時鐘;S2H空間被指定用於軟體測試平臺部件到硬體模型的輸出;H2S空間則被指定用於硬體模型到軟體測試平臺部件的輸出。在系統初始化的時間中,這些專用的輸入/輸出緩衝空間將被映射到內核的主存儲空間。下表G表明了描述了每個SPACE信號的描述表GSPACE信號線路1231上的讀/寫信號表明該數據是讀還是寫。線路1233上的DONE信號表示一個DMA數據傳輸期間的結束。4位元組COMMAND表明該數據傳輸操作是讀、寫、配置新的用戶設計進入可重新配置的硬體單元中,還是中斷模擬。COMMAND協議如下表H所示表HCOMMAND信號現在參考圖54的狀態圖討論通信交換協議。在狀態1400,設備驅動器模擬系統空閒。只要沒有新的命令發出,該系統將如路徑1401所示保持空閒狀態。當新的命令發出時,命令處理器將在狀態1402中處理新的命令。在本實施例中,命令處理器是FPGA輸入/輸出控制器。若COMMAND=0000或者COMMAND=0001,系統將如狀態1403的SPACE指數表明的那樣在指定空間進行讀或寫。若COMMAND=0010,系統在狀態1104將開始用一用戶設計對在可重新配置的硬體中的FPGA進行配置,或者用一新的用戶設計對FPGA進行配置。系統將為所有的FPGA進行配置信息的排序,以模型化用戶設計中可以在硬體中模擬的一部分。然而,如果COMMAND=0011,系統將在狀態1405中斷可重新配置的硬體單元以中斷模擬系統,因為時間片已經超時,準備為新的用戶/程序換入新的模擬狀態。在這些狀態1403、1404、1405結束之後,模擬系統會進入DONE狀態1406以產生DONE信號,然後即返回狀態1400並保持空閒狀態直到新的命令出現。現在討論模擬伺服器在處理多個處於不同優先級上的作業時的分時操作特徵。圖52給出了一個例子模擬作業隊列中有四個即將進行的作業(作業A、作業B、作業C、作業D)。但這四個作業的優先級有所不同作業A和作業B被指定為高優先級I,作業C和作業D則為低優先級II。正如圖52的時線圖中所顯示的,可重新配置的硬體分時操作的使用取決於待決作業隊列的優先等級。在時間1190,模擬從作業A開始,準許其訪問可重新配置的硬體單元。在時間1191,作業A被作業B搶佔,因為作業B和作業A有同等的優先級,調度程序對兩作業提供了平等的分時操作訪問權限。作業B現在訪問可重新配置的硬體單元。在時間1192,作業A搶佔作業B並在時間1193執行至完成。在時間1193,作業B接著進行並在時間1194執行至完成。在時間1194,處於作業隊列中下一位但比作業A和作業B的優先級低的作業C訪問可重新配置的硬體單元並開始執行。在時間1195,作業D搶佔作業C,進行分時操作訪問,因為它們具有同等優先級。作業D的訪問權限到時間1196中止,此時它被作業C搶佔。作業C在時間1197執行完畢,然後作業D在時間1197重新獲得訪問權限並在時間1198執行完畢。VIII.存儲器模擬本發明的存儲器模擬或存儲器映射特徵為模擬系統提供了一個有效的方法來管理多個與用戶設計的配置好的硬體模型相關的存儲器區塊,而此用戶設計的程序是編在可重新配置的硬體單元的FPGA晶片陣列中的。通過實施本發明的實施例,存儲器模擬方案不需要FPGA晶片上任何專用的引腳來處理存儲器訪問。這裡所用的「存儲器訪問」是指FPGA邏輯裝置和SARAM存儲器裝置之間的一讀或一寫的訪問,用戶設計被配置在FPGA邏輯裝置中,而SRAM存儲器裝置存儲了所有與用戶設計有關的存儲器區塊。因此,寫操作涉及FPGA邏輯裝置到SRAM存儲器裝置的數據傳送,而讀操作涉及從SRAM存儲器裝置到FPGA邏輯裝置的數據傳送。參照圖56,FPGA邏輯裝置包括1201(FPGA1)、1202(FPGA3)、1203(FPGA0)和1204(FPGA2),而SRAM存儲器裝置則包括存儲器裝置1205和1206。同時,「DMA數據傳送」除了所屬
技術領域:
的技術人員所了解的普通用法,它還指在計算系統和模擬系統之間的數據傳送。圖1、圖45和圖46顯示的計算系統是整個基於PCI並帶有存儲器的系統,它支持位於軟體和可重新配置中的模擬系統。所選的設備驅動器和作業系統所發出或接收的套接字/系統調用也是模擬系統的一部分,該部分提供了與作業系統和可重新配置的硬體單元的適當的接口。在本發明的一實施例中,一個DMA讀取傳送包括從FPGA邏輯裝置(和用於初始化和存儲內容轉儲的FPGASRAM存儲器裝置)到主機計算系統的數據傳送。一個DMA寫傳送包括從主機計算系統到FPGA邏輯裝置(和用於初始化和存儲內容轉儲的FPGASRAM存儲器裝置)的數據傳送。這裡提到的術語「FPGA數據總線」、「FPGA總線」、「FD總線」以及其他種種變化的說法是指高端組總線FD[6332]和低端組總線FD[310],這些總線連接了包含有待調試的已配置和已編程的用戶設計的FPGA邏輯裝置和SRAM存儲器裝置。存儲器模擬系統包括一存儲狀態機、一估算狀態機以及與它們相關的邏輯,控制和連接(1)主計算系統和其相關存儲系統,(2)模擬系統中與FPGA總線相連的SRAM存儲器裝置,(3)包含正被調試的配置好並編程好的用戶設計的FPGA邏輯裝置。存儲器模擬系統的FPGA邏輯裝置端包括一估算狀態機、一FPGA總線驅動器,以及用於每個存儲器區塊N與用戶設計中用戶自身的存儲器接口相連的一邏輯接口,處理(1)FPGA邏輯裝置之間的數據估算,以及(2)SRAM存儲器裝置和FPGA邏輯裝置之間的讀/寫存儲器訪問。FPGA輸入/輸出控制器端是與FPGA邏輯裝置端相連的,它包括存儲狀態機和邏輯接口並處理(1)主計算系統和SRAM存儲器裝置,以及(2)FPGA邏輯裝置和SRAM存儲器裝置之間的DMA、讀、寫操作。根據本發明的一實施例,存儲器模擬系統的操作的描述大體如下。模擬讀/寫循環分為三個階段DMA數據傳輸,估算和存儲器訪問。DATAXSFR信號表明DMA數據傳輸階段的出現,在此階段,計算系統和SRAM存儲單元之間通過FPGA數據總線——高端組總線1212(FD[6332])和低端組總線1213(FD[310])——互相傳送數據。在估算階段,每個FPGA邏輯裝置中的邏輯電路生成正確的軟體時鐘、輸入啟動和多路復用啟動信號到用戶的設計邏輯中進行數據估算。FPGA邏輯裝置間的通信在這個階段發生。在存儲器訪問階段,存儲器模擬系統等待高端和低端組FPGA邏輯裝置將它們各自的地址和控制信號放置於各自的FPGA數據總線上。CTRL_FPGA單元將鎖存這些地址和控制信號。若進行寫操作,則地址、控制和數據信號將被從FPGA邏輯裝置傳送至各自的SRAM存儲器裝置。若進行讀操作,則地址和控制信號將被提供給指定的SRAM存儲器裝置,而數據信號則由SRAM存儲器裝置傳向各自的FPGA邏輯裝置。在所有FPGA邏輯裝置中的所有需要的存儲器區塊被訪問之後,存儲器模擬讀/寫循環完成,而存儲器模擬系統在下一個存儲器模擬讀/寫循環到來之前保持閒置狀態。圖56顯示的是根據本發明一實施例的存儲器模擬配置的高層結構圖。與本發明的存儲器模擬不相關的信號、連接以及總線沒有被顯示出來。上面敘述過的CTRL_FPGA單元1200,通過線路1209和總線1210相連接。在一實施例中,CTRL_FPGA單元1200是FPGA晶片形式的可編程邏輯裝置(PLD),例如Altera10K50晶片。局部總線1210使得CTRL_FPGA單元1200可以和其他模擬陣列板(如果有的話)和其它晶片(如PCI控制器、EEPROM、時鐘緩衝器)相連接。線路1209傳送DONE信號,該信號表示一個模擬DMA數據傳輸階段的完成。圖56以邏輯裝置和存儲器裝置的形式顯示了其他主要的功能性區塊。在本發明的一實施例中,邏輯裝置是以FPGA晶片形式的可編程邏輯裝置(PLD),例如Altera10K130或10K250晶片。因此,與前面所示的實施例中陣列內有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與低端組數據總線1213相連接。高端組存儲器裝置1206通過總線1220與高端組總線1212相連接,而低端組存儲器裝置1205通過總線1219與低端組總線1213相連接。這種雙重的組總線結構可以使模擬系統以更高的通過率並行進入高端組裝置和低端組裝置。這種雙重的組數據總線結構同時支持其他信號,如控制信號和地址信號,這樣就可以控制模擬讀/寫循環。翻到圖61,每個模擬讀/寫循環包括DMA數據傳輸階段、估算階段和存儲器訪問階段。多種控制信號的結合控制並表明模擬系統是否處於與另外一階段相對的某階段。主計算系統與可重新配置的硬體單元的邏輯裝置1201到1204之間的DMA數據傳輸通過PCI總線(如圖46中的總線50)、局部總線1210和1236,以及FPGA總線1212(FD[6332])和1213(FD[310])進行的。DMA數據傳輸所涉及的存儲器裝置1205和1206是執行初始化和存儲內容轉儲的。可重新配置的硬體單元中邏輯裝置1201到1204之間的估算數據傳輸是通過互連(如上文所述)和FPGA總線1212(FD[6332])和1213(FD[310])進行。邏輯裝置1201到1204以及存儲器裝置1205和1206之間的存儲器訪問是通過FPGA總線1212(FD[6332])和1213(FD[310])進行的。再回到圖56,CTRL_FPGA單元1200提供並接收了許多控制和地址信號,以控制模擬讀/寫循環。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提供晶片選擇讀(和寫)信號。存儲器模擬系統可以在總線1209上向CTRL_FPGA單元1200和計算系統發出或接收DONE信號來表明DMA數據傳輸的完成。正如在前面結合圖9、11、12、14和15時提到的,邏輯裝置1201到1204是通過多路復用跨晶片地址指示器鏈路連接在一起的,這種指示器鏈在圖56中體現為兩組SHIFTIN/SHIFTOUT線路線路1207、1227和1218以及線路1208、1228和1217。這些線路組在鏈的開始處初始於線路1207和1208上的Vcc。SHIFTIN信號從前面的組中的FPGA邏輯裝置中傳出並開始對當前FPGA邏輯裝置的存儲訪問。在通過一組特定的鏈所進行的移位完成之後,最後的邏輯裝置向CTRL_FPGA單元1200發出LAST信號(即LASTL或LASTH)。對於高端組,邏輯裝置1202在線路1218上向CTRL_FPGA單元1200發出LASTH移出信號,而對於低端組,邏輯裝置1204在線路1217上向CTRL_FPGA單元1200發出LASTL信號。至於電路板實施和圖56,本發明的一實施例將部件(如邏輯裝置1201-1204,存儲器裝置1205-1206,和CTRL_FPGA單元1200)和總線(如FPGA總線1212-1213和局部總線1210)合併在一個電路板上。這個電路板通過主板連接器與主板相連接。因此,在一個電路板上有四個邏輯裝置(每個組上兩個),兩個存儲器裝置(每個組上一個),以及總線。第二個電路板上則包括它自身的邏輯裝置(通常為四個),存儲器裝置(通常為兩個),FPGA輸入/輸出控制器(CTRL_FPGA單元)和總線。但PCI控制器只安裝在第一個電路板上。電路板之間有上文提到的電路板間連接器,這樣所有電路板上的邏輯裝置可以連在一起,並在估算時可以互相通訊,另外在所有電路板之間設有局部總線。每個電路板上都設有FPGA總線FD[630],但它們不跨越多個電路板。在此電路板配置中,模擬系統在每個電路板上的邏輯裝置和存儲器裝置之間進行存儲器映射,但不支持不同電路板之間的存儲器映射。因此,電路板5上的邏輯裝置只能將存儲器區塊映射到電路板5上的存儲器裝置而不能映射到其他電路板上的存儲器裝置。但在其它實施例中,模擬系統則可以將存儲器區塊從一個電路板上的邏輯裝置映射到另外一個電路板上的存儲器裝置。根據本發明的一實施例的存儲器模擬系統的操作大致如下。模擬讀寫循環分為三個階段DMA數據傳輸、估算和存儲器訪問。為顯示一個模擬讀寫循環的完成,存儲器模擬系統可以在線路1209上向/從CTRL_FPGA單元1200和計算系統傳送/接收DONE信號。總線1211上的DATAXSFR信號表明DMA數據傳輸階段的發生,在該階段中,計算系統和FPGA邏輯裝置1201到1204通過FPGA數據總線、高端組總線1212(FD[6332])和低端組總線1213(FD[610])互相傳送數據。總的說來,DMA傳送發生在主計算系統和FPGA邏輯裝置之間。對於初始化和存儲內容轉儲,DMA傳送發生在主計算系統與SRAM存儲器裝置1205和1206之間。在估算階段,每個FPGA邏輯裝置1201-1204中的邏輯電路為用戶設計邏輯生成適當的軟體時鐘、輸入啟動和多路復用啟動信號以進行數據估算。FPGA邏輯裝置間的通信發生於此階段。CTRL_FPGA單元1200也啟動估算計數器以控制估算周期的持續時間。計數的數量,以及相應的估算周期的持續時間由系統通過確定信號的最長路徑來設定。路徑長度與具體數量的步驟相關。系統使用此步驟信息並計算出使得估算循環能夠完成運行所需要的計數數量。在存儲器訪問階段,存儲器模擬系統等待高低端組FPGA邏輯裝置1201-1204分別將其地址和控制信號存放於各自的FPGA數據總線上。CTRL_FPGA單元1200將鎖存這些地址和控制信號。對於寫操作,地址、控制和數據信號將從FPGA邏輯裝置1201-1204傳送至各自的SRAM存儲器裝置1205和1206。對於讀操作,地址和控制信號將從FPGA邏輯裝置1201-1204傳送至各自的SRAM存儲器裝置1205和1206,而數據信號則由SRAM存儲器裝置1205和1206傳向各自的FPGA邏輯裝置1201-1204。在FPGA邏輯裝置端,FD總線驅動器將一存儲器區塊的地址和控制信號置於FPGA數據總線(FD總線)之上。若是寫操作,寫數據被放置於FD總線上用於該存儲器區塊。若是讀操作,雙緩衝器將從SRAM存儲器裝置為FD總線上的存儲器區塊鎖存數據存儲器區塊。這個操作在每個FPGA邏輯裝置的每個存儲器區塊中按順序進行,每次只在一個存儲器區塊中進行。當一個FPGA邏輯裝置上所有需要的存儲器區塊均已被訪問時,存儲器模擬系統將進入每個組的下一個FPGA邏輯裝置並開始對該FPGA邏輯裝置的存儲器區塊的訪問。在所有FPGA邏輯裝置1201-1204上所有需要的存儲器區塊均被訪問後,存儲器模擬讀/寫循環完成,存儲器模擬系統將保持閒置狀態,直到下一個存儲器模擬讀/寫循環的到來。圖57是本發明存儲器模擬方面的更詳細的結構圖,包括CTRL_FPGA單元1200更加詳細的結構圖以及與存儲器模擬相關的所有邏輯裝置。圖57顯示了CTRL_FPGA單元1200和邏輯裝置1203的一部分(其結構類似於其它邏輯裝置1201、1202和1204的部分)。CTRL_FPGA單元1200包括存儲器有限狀態機(MEMFSM)1240,「與」門1241,估算(EVAL)計數器1242,低端組存儲器地址/控制鎖存器1243,低端組地址/控制多路復用器1244,地址計數器1245,高端組存儲器地址/控制鎖存器1247以及高端組地址/控制多路復用器1246。每個邏輯裝置,例如圖57中所顯示的邏輯裝置1203,包括估算有限狀態機(EVALFSMx)1248和數據總線多路復用器(用於邏輯裝置FPGA01203的FDO-MUXx)1249。EVALFSM結尾所附的「x」表示與之相關的特定邏輯裝置(FPGA0,FPGA1,FPGA2,FPGA3),這個例子中的「x」表示從0到3之間的一個數。因此,EVALFSM0與邏輯裝置1203的FPGA0相關。總的說來,每個邏輯裝置都與一些數字x相關。而對於使用的N個邏輯裝置,x則代表從0到N-1的某個數。在1201-1204的每個邏輯裝置中,大量存儲器區塊與配置好並被映射的用戶設計相關。因此,用戶邏輯中的存儲器區塊接口1253為計算系統進入需要的FPGA邏輯裝置陣列的存儲器區塊提供了途徑。存儲器區塊接口1253還將總線1295上的存儲器寫數據提供給FPGA數據總線多路復用器(FDO-MUXx)1249,並從存儲器讀數據雙緩衝器1251接收總線1297上的存儲器讀數據。每個FPGA邏輯裝置都有一存儲器區塊數據/邏輯接口1298。每個這樣的存儲器區塊數據/邏輯接口1298都連接著FPGA數據總線多路復用器(FDO-MUXx)1249、估算有限狀態機(EVALFSMx)1248,和FPGA總線FD[630]。存儲器區塊數據/邏輯接口1298包括存儲器讀數據雙緩衝器1251、地址補償單元1250、存儲器模型1252以及每個存儲器區塊N的存儲器區塊接口1253。它們同樣也存在於每個存儲器區塊N的任何給定的FPGA邏輯裝置1201-1204中。因此,如果有5個存儲器區塊,那麼就有5組存儲器區塊數據/邏輯接口1298;也就是說對每個存儲器區塊N(mem_block_N),有5組存儲器讀數據雙緩衝器1251、地址補償單元1250、存儲器模型1252,以及存儲器區塊接口1253。和EVALFSMx一樣,FDO-MUXx中的「x」也表示與之相關的特定邏輯裝置(FPGA0、FPGA1、FPGA2、FPGA3),這裡「x」表示從0到3之間的一個數。FDO-MUXx1249的輸出位於總線1282上,而總線1282則與高端組總線FD[6332]或低端組總線FD[310]相連,至於與哪個總線相連取決於FDOMUXx1249和哪個晶片(FPGA0、FPGA1、FPGA2、FPGA3)相關。在圖57中,FDO-MUXx是和低端組邏輯裝置FPGA01203相連的FDO-MUX0。因此,總線1282上的輸出在低端組總線FD[310]上。總線1283部分被用來從高端組總線FD[6332]或低端組總線FD[310]向讀總線1283傳送讀數據,以將其輸入到存儲器讀數據雙緩衝器1251中。因此,寫數據通過FDO-MUXx1249從每個邏輯裝置1201-1204上的存儲器區塊傳輸到高端組總線FD[6332]或低端組總線FD[310]中,而讀數據則通過讀總線1283從高端組總線FD[6332]或低端組總線FD[310]傳輸到存儲器讀數據雙緩衝器1251中。存儲器讀數據雙緩衝器利用雙重緩衝機制鎖存第一個緩衝器中的數據,然後再進行緩衝,同時釋放被鎖存數據以使偏差最小化。存儲器讀數據雙緩衝器1251將在下文詳細討論。再回到存儲器模型1252,它將用戶的存儲器類型轉化為存儲器模擬系統的SRAM類型。因為用戶設計中的存儲器類型可能各不相同,因此對於每個用戶設計,存儲器區塊接口1253也可能是唯一的。例如,用戶存儲類型可能是DRAM、快閃記憶體或EEPROM。但各種存儲器區塊接口1253中,均具有存儲器地址和控制信號(如讀、寫、晶片選擇、mem_clk)。在本發明的一實施例中,存儲器模擬將用戶存儲器類型轉化為在存儲器模擬系統中使用的SRAM類型。若用戶存儲器類型為SRAM,那麼它向SRAM型存儲器模型的轉化十分簡單。因此,存儲器地址和控制信號存在於總線1296上並傳輸到存儲模型1252,而由1252執行轉化。存儲器模型1252在總線1293上提供存儲器區塊地址信息並在總線1292上提供控制信息。地址補償單元1250接收用於各存儲器區塊的地址信息,並根據總線1293上的原始地址在總線1291上提供修改補償地址。因為特定的存儲器區塊地址可能互相覆蓋,因此補償很有必要。例如,一存儲器區塊可能佔用並存在於空間0-2K,而另一存儲器區塊則可能佔用並存在於空間0-3K。因為兩個存儲器區塊在空間0-2K上重疊,所以如果沒有一種地址補償機制就很難進行單個地址讀寫。因此,第一個存儲器區塊可以佔用並存在於空間0-2K,而第二個存儲器區塊則可佔用並存在於2K以上至5K的空間。來自地址補償單元1250的補償地址和總線1292上的控制信號被結合起來提供給總線1299並被傳輸到FPGA總線多路復用器(FDO-MUXx)1249中。FPGA數據總線多路復用器FDO-MUXx接收總線1289上的SPACE2數據、總線1290上的SPACE3數據、總線1299上的地址/控制數據,以及總線1295上的存儲器寫數據。如前所述,SPACE2和SPACE3是具體SPACE指數。由FPGA輸入/輸出控制器(圖10中的327;圖22)產生的SPACE指數選擇出特定地址空間(即REG讀,REG寫,S2H讀,H2S寫,以及CLK寫)。在該地址空間中,本發明的系統將按順序選擇將被訪問的特定的字。SPACE2指專用於硬體至軟體H2S數據的DMA讀取傳送的存儲空間。SPACE3則指專用於REGISTER_READ數據的DMA讀取傳送的存儲空間。參見上表G。作為其輸出,FDO_MUXx1249在總線1282上為低端組或高端組總線提供數據。選擇器信號是來自EVALFSMx單元1248的線路1284上的輸出啟動(output_en)信號以及線路1285上的選擇信號。線路1284上的輸出啟動信號啟動(或禁用)FDO_MUXx1249的運行。對在FPGA總線上的數據訪問而言,輸出啟動信號被啟動來允許FDO_MUXx發揮功能。1285線路上的選擇信號由EVALFSMx單元1248所產生,以便在來自總線1289上的SPACE2數據、總線1290上的SPACE3數據、總線1299上的地址/控制信號,以及總線1295上的存儲器寫數據的多個輸入之中進行選擇。EVALFSMx單元1248產生選擇信號將會在下面得到進一步的討論。EVALFSMx單元1248是有關存儲器模擬系統的每個邏輯裝置1201-1204的操作核心。EVALFSMx單元1248接收下列信號作為其輸入線路1279上的SHIFTIN信號,線路1274上的來自CTRL_FPGA單元1200的EVAL信號,以及線路1287上的寫信號wrx。EVALFSMx單元1248輸出線路1280上的SHIFTOUT的信號、線路1286上發往存儲器讀數據雙緩衝器1251的讀鎖存器信號rd_latx、線路1284上發往FDO_MUXx1249的輸出啟動信號、線路1285上發往FDO_MUXx1249的選擇信號,以及線路1281上發往用戶邏輯的三個信號(input_en,mux_en和clk_en)。根據本發明一個實施例的、用於存儲器模擬系統的FPGA邏輯裝置1201-1204的運行通常如下所述。當EVAL信號處於邏輯1的時候,FPGA邏輯裝置1201-1204內的數據估算開始;否則,模擬系統就正在運行DMA數據傳輸或存儲器訪問。在EVAL=1時,EVALFSMx單元1248產生clk_en信號,input_en信號,和信號,以便允許用戶邏輯分別估算數據、鎖存相關數據,以及多路傳輸邏輯裝置間的信號。EVALFSMx單元1248產生clk_en信號來啟動用戶的設計邏輯中所有時鐘邊緣寄存器觸發器中的第二觸發器(見圖19)。clk_en信號另外也被當作軟體時鐘。如果用戶的存儲器類型是同步的,clk_en也啟動每個存儲器區塊中的存儲器讀數據雙緩衝器1251的第二時鐘。EVALFSMx單元1248為用戶的設計邏輯產生input_en信號,以鎖存由DMA傳輸從CPU傳到用戶邏輯的輸入信號。input_en信號為主時鐘寄存器中的第二觸發器(見圖19)提供啟動輸入。最後,EVALFSMx單元1248產生mux_en信號,打開每個FPGA邏輯裝置中的多路傳輸電路,以開始與陣列中其他的FPGA邏輯裝置進行通信。其後,如果FPGA邏輯裝置1201-1204包含至少一個存儲器區塊,那麼存儲器模擬系統就等待被選擇的數據被移入所選的FPGA邏輯裝置,然後為FPGA數據總線驅動器產生output_en和選擇信號,以便把存儲器區塊接口1253(mem_block_N)的地址和控制信號放在FD總線上。如果線路1287上的寫信號wrx被啟動(即,邏輯1),那麼選擇信號和output_en信號也被啟動,將寫數據放在低端或高端組總線之上,這取決於FPGA晶片被連接到哪一個組上。在圖57中,邏輯裝置1203是FPGA0,並且被連接到低端組總線FD[310]上。如果線路1287上的寫信號wrx被禁用(即,邏輯0),那麼選擇信號和output_en信號被禁用,線路1286上的讀鎖存器信號rd-latx將通過低端或高端組總線(取決於FPGA晶片被連接到哪一個組)讓存儲器讀數據雙緩衝器1251鎖存並雙重緩衝來自SRAM的所選數據。wrx信號是起源於用戶設計邏輯的存儲器接口的存儲器寫信號。的確,線路1287上的wrx信號經由控制總線1292來自存儲器模型1252。這個讀或寫數據的過程在每個FPGA邏輯裝置中都會發生。在所有的存儲器區塊都經由SRAM訪問得到處理之後,EVALFSMx單元1248產生SHIFTOUT信號,以便允許鏈路中的下一個FPGA邏輯裝置進行SRAM訪問。請注意,針對高端和低端組的裝置的存儲器訪問是並行發生的。有時,針對一個組的存儲器訪問可能在針對另一個組的存儲器訪問之前完成。對於所有這些訪問而言,適當的等待周期被插入,以便只有當邏輯準備好、而且數據可用的時候,邏輯才會處理數據。在CTRL_FPGA單元1200一方,MEMFSM1240處於本發明存儲器模擬方面的核心。它發送並接收許多控制信號,以便控制存儲器模擬寫/讀周期的激活,並對周期所支持的各種運行進行控制。MEMFSM1240經由線路1258接收線路1260上的DATAXSFR信號。這個信號也被提供到線路1273上的每個邏輯裝置。當DATAXSFR變低時(即,邏輯低),DMA數據傳輸周期結束,而估算和存儲器訪問周期則開始。MEMFSM1240也接收線路1254上的一個LASTH信號,以及線路1255上的一個LASTL信號,以表明與所選的地址空間相關的所選字已經經由PCI總線和FPGA總線在計算系統和模擬系統之間得到訪問。與這個移出過程相關的MOVE信號通過每個邏輯裝置(舉例來說,邏輯裝置1201-1204)傳播,直到所需的字得到訪問,且MOVE信號最後在鏈路末端變成LAST信號(即,對於高端組的LASTH和對於低端組的LASTL)。在EVALFSM1248(即,圖57為邏輯裝置FPGA01203顯示為EVALFSMO)中,對應的LAST信號是線路1280上的SHIFTOUT信號。因為特定的邏輯裝置1203並非如圖56所示的低端組鏈路中的最後一個邏輯裝置(圖56中邏輯設備1204是低端存儲體鏈路中的最後一個邏輯設備),所以針對EVALFSMO的SHIFTOUT信號不是LAST信號。如果EVALFSM1248對應於圖56中的EVALFSM2,那麼線路1280上的SHIFTOUT信號就是在線路1255上提供到MEMFSM的LASTL信號。否則,線路1280上的SHIFTOUT信號就被提供到邏輯裝置1204(見圖56)。類似的,線路1279上的SHIFTIN信號代表FPGA0邏輯裝置(見圖56)1203的Vcc。LASTL和LASTH信號是分別經由線路1256和線路1257進入「與」門1241的輸入。「與」門1241具有一個漏極開路。「與」門1241的輸出產生線路1259上的DONE信號,這個信號被提供到計算系統和MEMFSM1240。因此,只有當LASTL和LASTH信號都是邏輯高、表明移出鏈過程結束時,「與」門才輸出一個邏輯高。MEMFSM1240在線路1261上產生一個到EVAL計數器1242的起始信號。正如該名稱所暗示的那樣,起始信號觸發EVAL計數器1242的開始,並且在DMA數據傳輸周期完成之後被發送。起始信號在偵測到DATAXSFR信號從高到低(1到0)的過渡時產生。EVAL計數器1242是一個可編程的計數器,其計數一個預定數目的時鐘周期。EVAL計數器1242內經過編程的計數長度決定估算周期的長度。線路1274上的EVAL計數器1242的輸出是一個邏輯水平1或0,這取決於計數器是否在計數。當EVAL計數器1242正在計數時,線路1274上的輸出處於邏輯1,該輸出經由EVALFSMx1248被提供到每個FPGA邏輯裝置1201-1204。當EVAL=1時,FPGA邏輯裝置1201-1204運行FPGA間通信以便在用戶設計中估算數據。EVAL計數器1242的輸出也被在線路1262上反饋到MEMFSM單元1240,以便實現它自己的軌跡。在編程計數結束的時候,EVAL計數器1242產生線路1274和1262上的一個邏輯0信號表明估算周期的結束。如果不需要存儲器訪問,那麼線路1272上的MEM_EN信號被斷言為邏輯0,而且被提供到MEMFSM單元1240,在這種情況下,存儲器模擬系統等待另外一個DMA數據傳輸周期。如果需要存儲器訪問,那麼線路1272上的MEM_EN信號被斷言為邏輯1。實質上,MEM_EN信號是一個用來啟動訪問FPGA邏輯裝置的電路板上的SRAM存儲器裝置的、來自CPU的控制信號。在這裡,MEMFSM單元1240等待FPGA邏輯裝置1201-1204來將地址和控制信號放置在FPGA總線上,即FD[6332]和FD[310]。剩餘的功能性單元和它們的相關控制信號和線路是為了將地址/控制信息提供給SRAM存儲器裝置用來寫和讀數據。這些單元包括用於低端組的存儲器地址/控制鎖存器1243,用於低端組的地址控制多路復用器1244,用於高端組的存儲器地址/控制鎖存器1247,用於高端組的地址控制多路復用器1246,和地址計數器1245。用於低端組的存儲器地址/控制鎖存器1243接收來自FPGA總線FD[310]1275的地址和控制信號,與總線1213以及線路1263上的一個鎖存器信號保持一致。鎖存器1243在線路1264上產生mem_wr_L信號,並經由總線1266將來自FPGA總線FD[310]的接入地址/控制信號提供給地址/控制多路復用器1244。這個mem_wr信號與晶片選擇寫信號相同。地址/控制多路復用器1244接收總線1266上的地址和控制信息以及經由總線1268來自地址計數器1245的地址信息作為其輸入。作為輸出,它在總線1276上將地址/控制信息發送給低端組SRAM存儲器裝置1205。線路1265上的選擇信號提供來自MEMFSM單元1240的正確的選擇信號。總線1276上的地址/控制信息對應於圖56中總線1229和1216上的MA[182]和晶片選擇讀/寫信號。地址計數器1245經由總線1267接收來自SPACE4和SPACE5的信息。SPACE4包括DMA寫傳輸信息。SPACE5包括DMA讀傳輸信息。因此,這些DMA傳輸在PCI總線上在計算系統(經由工作站CPU的高速緩存/主存儲器)和模擬系統(SRAM存儲器裝置1205,1206)之間發生。地址計數器1245將其輸出提供給總線1288和1268,並提供給地址/控制多路復用器1244和1246。有了線路1265上用於低端組的適當選擇信號,地址/控制多路復用器1244要麼將總線1266上的地址/控制信息放置在總線1276上以便在SRAM裝置1205和FPGA邏輯裝置1203、1204之間進行寫/讀存儲器訪問,要麼將總線1267上來自SPACE4或SPACE5的DMA寫/讀傳輸數據放置到總線1276上。在存儲器訪問周期內,MEMFSM單元1240將線路1263上的鎖存器信號提供到存儲器地址/控制鎖存器1243,以便得到來自FPGA總線FD[310]的輸入。MEMFSM單元1240提取來自FD[310]上的地址/控制信號的mem_wr_L控制信息以便作出進一步控制。如果線路1264上的mem_wr_L信號是一個邏輯1,就需要一個寫操作,而且MEMFSM單元1240將在線路1265上產生適當的選擇信號發送給地址/控制多路復用器1244,以便總線1266上的地址和控制信號在總線1276上被發送到的低端組SRAM。其後,一個寫數據從FPGA邏輯裝置傳輸到SRAM存儲器裝置。如果線路1264上的mem_wr_L信號是一個邏輯0,那麼就需要一個讀操作,因此模擬系統等待被SRAM存儲器裝置放置在FPGA總線FD[310]上的數據。一旦數據準備好了,讀數據就從SRAM存儲器裝置傳輸到FPGA邏輯裝置。高端組具有相似的配置及操作。用於高端組的存儲器地址/控制鎖存器1247接收來自FPGA總線FD[6332]1278的地址和控制信號,該信號與總線1212和線路1270上的一個鎖存器信號保持一致。鎖存器1270在線路1271上產生mem_wr_H信號,而且經由總線1239將來自FPGA總線FD[6332]的接入地址/控制信號提供給地址/控制多路復用器1246。地址/控制多路復用器1246接收總線1239上的地址和控制信息以及經由總線1268來自地址計數器1245的地址信息作為輸入。作為輸出,它將總線1277上的地址/控制信息發送給高端組SRAM存儲器裝置1206。線路1269上的選擇信號提供來自MEMFSM單元1240的正確的選擇信號。總線1277上的地址/控制信息對應於圖56中的總線1214和1215上的MA[182]和晶片選擇讀/寫信號。地址計數器1245如上文所述經由總線1267接收來自SPACE4和SPACE5的信息以便進行DMA寫和讀傳輸。地址計數器1245將它的輸出提供給總線1288和1268以及地址/控制多路復用器1244和1246。有了線路1269上用於高端組的適當選擇信號,地址/控制多路復用器1246要麼將總線1239上的地址/控制信息放置在總線1277上以便在SRAM裝置1206和FPGA邏輯裝置1201,1202之間進行寫/讀存儲器訪問,或者可以替代的方法是,將總線1267上來自SPACE4或SPACE5的DMA寫/讀傳輸數據放置在總線1277上。在存儲器訪問周期內,MEMFSM單元1240將線路1270上的鎖存器信號提供到存儲器地址/控制鎖存器1247以便獲得來自FPGA總線FD[6332]的輸入。MEMFSM單元1240提取來自FD[6332]上的地址/控制信號的mem_wr_H控制信息以便作出進一步的控制。如果線路1271上的mem_wr_H信號是一個邏輯1,那麼就需要一個寫操作,而且MEMFSM單元1240將在線路1269上產生適當的選擇信號發送到地址/控制多路復用器1246,以便總線1239上的地址和控制作信號在總線1277上被發送到高端組SRAM。其後,一個寫數據從FPGA邏輯裝置傳輸到SRAM存儲器裝置。如果線路1271上的mem_wr_H信號是一個邏輯0,那麼就需要一個讀操作,這樣模擬系統可以等待被SRAM存儲器裝置放置在FPGA總線FD[6332]上的數據。一旦數據準備好了,讀數據就從SRAM存儲器裝置傳輸到FPGA邏輯裝置。如圖57所示,地址和控制信號分別經由總線1276和1277被提供到低端組SRAM存儲器裝置和高端組存儲器設備。用於低端組的總線1276對應於圖56中的總線1229和1216組合。同樣地,用於高端組的總線1277對應於圖56中的總線1214和1215組合。根據本發明一個實施例的、存儲器模擬系統的CTRL_FPGA單元1200的運行通常如下所述。線路1259上的DONE信號被提供到計算系統和在CTRL_FPGA單元1200中的MEMFSM單元1240,表明模擬寫/讀周期的完成。線路1260上的DATAXSFR信號表明模擬寫/讀周期的DMA數據傳輸周期的發生。FPGA總線FD[310]和FD[6332]上的存儲器地址/控制信號被分別提供到用於高端和低端組的存儲器地址/控制鎖存器1243和1247。對於任一組而言,MEMFSM單元1240都產生鎖存器信號(1263或1269)來鎖存地址和控制信息。這個信息然後被提供到SRAM存儲器裝置。mem_wr信號被用來決定需要一個寫操作還是讀操作。如果需要一個寫操作,數據就經由FPGA總線從FPGA邏輯裝置1201-1204被傳輸到SRAM存儲器裝置。如果需要讀操作,模擬系統就等待SRAM存儲器裝置將被請求的數據放置在PFGA總線之上以便在SRAM存儲器裝置和FPGA邏輯裝置之間進行傳輸。為了進行SPACE4和SPACE5的DMA數據傳輸,線路1265、1269上的選擇信號能選擇地址計數器1245的輸出作為主計算系統和模擬系統中的SRAM存儲器裝置之間進行傳輸的數據。對所有這些訪問,插入適當的等待周期,這樣只有當邏輯準備好、且數據可用時,邏輯才處理數據。圖60顯示存儲器讀數據雙緩衝器1251(圖57)更為詳細的視圖。在每個FPGA邏輯裝置中的每個存儲器區塊N都有一個雙緩衝器,用來鎖存可能在不同時間進入的有關數據,然後最終同時緩衝出該有關鎖存數據。在圖60中,用於存儲器區塊0的雙緩衝器1391包括兩個D型觸發器1340和1341。第一個D型觸發器1340的輸出1343被連接到第二個D型觸發器1341的輸入。第二個D型觸發器1341的輸出1344是雙緩衝器的輸出,其被提供到用戶設計邏輯中的存儲器區塊N接口。全局時鐘輸入在線路1393上被提供到第一個觸發器1340,在線路1394上被提供給第二個觸發器1341。第一個D型觸發器1340在線路1342上經由總線1283和用於高端組的FPGA總線FD[6332]以及用於低端組的FD[310]接收來自SRAM存儲器裝置的數據輸入。啟動輸入被連接到線路1345,該線路為每個FPGA邏輯裝置接收來自EVALFSMx單元的rd_latx(舉例來說,rd_lat0)信號。因此,對讀操作(即,wrx=0)而言,EVALFSMx單元產生rd_latx信號,以便將線路1342上的數據鎖存到線路1343。用於所有存儲器區塊的所有雙緩衝器的輸入數據可能在不同時間進入,雙緩衝器確保所有的數據首先得到鎖存。一旦所有的數據被鎖存到D型觸發器1340,clk_en信號(即,軟體時鐘)就被提供到線路1346上,作為第二個D型觸發器1341的時鐘輸入。當clk_en信號被斷言時,線路1343上的鎖存數據被緩衝進入D型觸發器1341,再到線路1344。下一個存儲器區塊1具有實質上等於雙緩衝器1391的另一個雙緩衝器1392。來自SRAM存儲器裝置的數據是在線路1396上的輸入。全局時鐘信號是線路1397上的輸入。clk_en(軟體時鐘)信號在線路1398上被輸入雙緩衝器1392中的第二個觸發器(未顯示)。這些線路被連接到存儲器區塊0的第一雙緩衝器1391和其他存儲器區塊N的其他所有雙緩衝器的模擬信號線路。輸出的雙緩衝數據被輸出到線路1399上。針對第二個雙緩衝器1392的rd_latx信號(舉例來說,rd_latl)獨立於其他雙緩衝器的其他rd_latx信號,提供到線路1395上。更多的雙緩衝器被提供到其他的存儲器區塊N。現在將針對本發明的一個實施例討論MEMFSM單元1240的狀態圖。圖58顯示了CTRL_FPGA單元中的MEMFSM單元的有限狀態機的一個狀態圖。圖58中的狀態圖中擬寫/讀周期內的三個周期也與它們的對應狀態一起顯示。因此,狀態1300-1301對應DMA數據傳輸周期;狀態1302-1304對應估算周期;狀態1305-1314對應存儲器訪問周期。在下文討論中結合圖58並參照圖57。一般情況下,設定了DMA傳輸、估算以及存儲器訪問的信號順序。在一個實施例中,順序如下DATA_XSFR觸發DMA數據傳輸(如果有DATA_XSFR的話)。用於高端和低端組的LAST信號在DMA數據傳輸完成時產生,並且觸發DONE信號,表明DMA數據傳輸周期的完成。然後產生XSFR_DONE信號,而且接著估算(EVAL)周期開始。在EVAL結束時,可以開始存儲器讀/寫。轉向圖58的頂端,每當DATAXSFR信號處於邏輯0時,狀態1300都是空閒的。這表明當時沒有發生DMA數據傳輸。當DATAXSFR信號處於邏輯1時,MEMFSM單元1240就進行到狀態1301。這裡,計算系統需要在計算系統(圖1、45,和46中的主存儲器)和模擬系統(圖56中的FPGA邏輯裝置1201-1204或SRAM存儲器裝置1205、1206)之間進行DMA數據傳輸。適當的等待周期被插入,直到DMA數據傳輸完成。當DMA傳輸完成時,DATAXSFR信號返回到邏輯0。當DATAXSFR信號回到邏輯0時,在狀態1302起始信號的產生在MEMFSM單元1240中被觸發。起始信號啟動EVAL計數器1242,這是一個可編程的計數器。EVAL計數器內的編程計數時長等於估算周期的時長。只要EVAL計數器在狀態1303進行計數,那麼EVAL信號就被斷言為邏輯1,並被提供到每個FPGA邏輯裝置的EVALFSMx和MEMFSM單元1240。在計數結束時,EVAL計數器將處於邏輯0的EVAL信號提供到每個FPGA邏輯裝置內的EVALFSMx和MEMFSM單元1240。當MEMFSM單元1240接收EVAL信號邏輯0時,它在狀態1304打開EVAL_DONE標記。EVAL_DONE標記被MEMFSM用來指示估算周期已經結束,而且如果需要,存儲器訪問周期現在可以進行。CPU將通過讀XSFR_EVAL寄存器(見下表K)檢查EVAL_DONE和XSFR_DONE以便確定DMA傳輸和EVAL已經在開始下一個DMA傳輸之前成功完成。然而,在某些情況下,模擬系統可能不想在此刻運行存儲器訪問。這時,模擬系統保持存儲器啟動信號MEM_EN為邏輯0。這個禁用的(邏輯0)MEM_EN信號把MEMFSM單元保持在空閒狀態1300,等待DMA數據傳輸或FPGA邏輯裝置的數據估算。另一方面,如果存儲器啟動信號MEM_EN處於邏輯1,那麼表明模擬系統有進行存儲器訪問的需要。在圖58中的狀態1304下,狀態圖被分為兩個並行進行的區段。一個區段包含針對低端組存儲器訪問的狀態1305、1306、1307、1308,和1309。另一個區段包含針對高端組存儲器訪問的狀態1311、1312、1313、1314,和1309。在狀態1305,模擬系統等待一個周期以便當前選擇的FPGA邏輯裝置將地址和控制信號放置在FPGA總線FD[310]上。在狀態1306,MEMFSM在線路1263上產生鎖存器信號至存儲器地址/控制鎖存器1243以便獲得來自FD[310]的輸入。對應於這個特定獲得的地址和控制信號的數據將從SRAM存儲器裝置或者被讀或者被寫到SRAM存儲器裝置。為了決定模擬系統是需要一個讀操作還是一個寫操作,從地址和控制信號中將用於低端組的存儲器寫信號mem_wr_L提取出來。如果mem_wr_L=0,一個讀操作被請求。如果mem_wr_L=1,一個寫操作被請求。如上文所述,這個mem_wr信號等於晶片選擇寫信號。在狀態1307,產生針對地址/控制多路復用器1244的適當的選擇信號,以便將地址和控制信號發送給低端組SRAM。MEMFSM單元檢查mem_wr信號和LASTL信號。如果mem_wr_L=1且LASTL=0,一個寫操作被請求,但是FPGA邏輯裝置鏈路中最後一個數據還沒有被移出。因此,模擬系統回到狀態1305,等待一個周期以便FPGA邏輯裝置將更多的地址和控制信號放置到FD[310]之上。這個過程繼續進行,直到最後一個數據被移出FPGA邏輯裝置。然而,如果mem_wr_L=1且LASTL=1,最後一個數據就被移出了FPGA邏輯裝置。同樣地,如果mem_wr_L=0指示一個讀操作,MEMFSM就進行到狀態1308。在狀態1308,模擬系統等待一個周期以便SRAM存儲器裝置將數據放置在FPGA總線FD[310]之上。如果LASTL=0,FPGA邏輯裝置鏈路中的最後一個數據還沒有被移出。因此,模擬系統回到狀態1305,等待一個周期,以便FPGA邏輯裝置將更多的地址和控制信號放置在FD[310]之上。這個過程繼續進行,直到最後一個數據被移出FPGA邏輯裝置。注意寫操作(mem_wr_L=1)和讀操作(mem_wr_L=0)能交叉存取或相互交互進行,直到LASTL=1。當LASTL=1時,MEMFSM進行到狀態1309,當DONE=0時,保持等待。當DONE=1時,LASTL和LASTH都處於邏輯1,因此,模擬寫/讀周期完成。模擬系統然後進行到狀態1300,在狀態1300,只要DATAXSFR=0,它就保持空閒。相同的過程也適用於高端組。在狀態1311,模擬系統等待一個周期,以便當前所選的FPGA邏輯裝置將地址和控制信號放置到FPGA總線FD[6332]上。在狀態1312,MEMFSM在1270線路上對存儲器地址/控制鎖存器1247產生鎖存器信號,以便獲得來自FD[6332]的輸入。對應於這個特定獲得的地址和控制信號的數據將或者從SRAM存儲器裝置中讀取或者寫到SRAM存儲器裝置。為了決定模擬系統是需要一個讀操作還是一個寫操作,從地址和控制信號中提取針對高端組的存儲器寫信號mem_wr_H。如果mem_wr_H=0,一個讀操作被請求。如果men_w_H=1,一個寫操作被請求。在狀態1313,產生用於針對地址/控制多路復用器1246的適當選擇信號,以便將地址和控制信號發送給高端組SRAM。MEMFSM單元檢查mem_wr信號和LASTH信號。如果mem_wr_H=1且LASTH=0,一個寫操作被請求,但是FPGA邏輯裝置鏈路中最後一個數據還沒有被移出。因此,模擬系統回到狀態1311,等待一個周期,以便FPGA邏輯裝置將更多的地址和控制信號放置在FD[6332]之上。這個過程繼續進行,直到最後一個數據被移出FPGA邏輯裝置。然而,如果mem_wr_H=1且LASTH=1,那麼最後一個數據已經被移出FPGA邏輯裝置。同樣地,如果mem_wr_H=0指示一個讀操作,MEMFSM就進行到狀態1314。在狀態1314,模擬系統等待一個周期,以便SRAM存儲器裝置將數據放置在FPGA總線FD[6332]之上。如果LASTH=0,那麼FPGA邏輯裝置鏈路中最後一個數據還沒有被移出。因此,模擬系統回到狀態1311,等待一個周期,以便FPGA邏輯裝置將更多的地址和控制信號放置在FD[6332]之上。這個過程繼續進行,直到到最後一個數據被移出FPGA邏輯裝置。注意寫操作(mem_wr_H=1)和讀操作(mem_wr_H=0)能交叉存取或相互交互進行,直到LASTH=1。當LASTH=1時,MEMFSM進行到狀態1309,當DONE=0時保持等待。當DONE=1時,LASTL和LASTH處於邏輯1,因此模擬寫/讀周期已經完成。模擬系統然後進行到狀態1300,在狀態1300,只要DATAXSFR=0就保持空閒。或者,根據本發明另一個實施例,對高端組和低端組兩者,狀態1309和1310都沒有執行。因此,在低端組中,MEMFSM將在通過狀態1308(LASTL=1)或1307(MEM_WR_L=1且LASTL=1)之後直接進行到狀態1300。在高端組中,MEMFSM將在通過狀態1314(LASTH=1)或1313(MEM_WR_H=1且LASTH=1)之後直接進行到狀態1300。EVALFSM單元1248的狀態圖將結合本發明的一個實施例來討論。圖59顯示每個FPGA晶片中的這種EVALFSMx有限狀態機的一個狀態圖。象圖58一樣,圖59中的狀態圖中模擬寫/讀周期裡面的兩個周期與它們對應的狀態一起顯示。因此,狀態1320-1326A對應估算周期,狀態1326B-1336對應存儲器訪問周期。在下面的討論中參照圖57並結合圖59。EVALFSMx單元1248接收來自CTRL_FPGA單元1200的線路1274上的EVAL信號(見圖57)。當EVAL=0時,沒有發生FPGA邏輯裝置進行的數據估算。因此,在狀態1320,當EVAL=0時,EVALFSMx處於空閒。當EVAL=1時,EVALFSMx進行到狀態1321。狀態1321、1322,和1323與FPGA間通信有關,其中數據經由FPGA邏輯裝置被用戶設計所估算。這裡,EVALFSMx對用戶邏輯產生信號input_en、mux_en和clk_en(圖57中的1281)。在狀態1321,EVALFSMx產生clk_en信號,該信號在這個周期中啟動用戶設計邏輯中的所有時鐘邊緣寄存器觸發器的第二個觸發器(見圖19)。clk_en信號也被認為是軟體時鐘。如果用戶存儲器類型是同步的,clk_en也啟動在每個存儲器區塊中的存儲器讀數據雙緩衝器1251的第二個時鐘。在這個周期中,針對每個存儲器區塊的SRAM數據輸出被發送到用戶設計邏輯。在狀態1322,EVALFSMx為用戶設計邏輯產生input_en信號,以鎖存DMA傳輸從CPU到用戶邏輯發送的輸入信號。input_en信號為主時鐘寄存器中的第二個觸發器提供啟動輸入(見圖19)。在狀態1323,EVALFSMx產生mux_en信號,以便打開在每個FPGA邏輯裝置中的多路復用電路,開始與陣列中其他FPGA邏輯裝置進行通信。如前文所解釋的那樣,FPGA間導線線路時常被多路復用,以便有效地使用每個FPGA邏輯裝置晶片中有限的引腳資源。在狀態1324,只要EVAL=1,EVALFSM就等待。當EVAL=0時,估算周期完成,而且因此狀態1325需要EVALFSMx停用mux_en信號。如果存儲器區塊M的數目(其中M是一個整數,包括0)是零,EVALFSMx回到狀態1320,如果EVAL=0,它就保持空閒。在大部分的情形下,M>0,因此,EVALFSMx進行到狀態1326A/1326B。″M″是FPGA邏輯裝置中存儲器區塊的數目。是來自映射且配置到FPGA邏輯裝置中的用戶設計的一個常數;它不會遞減計數。如果M>0,圖59的右側部分(存儲器訪問周期)將會被配置到FPGA邏輯裝置中。如果M=0,只有圖59的左邊部分(EVAL周期)被配置。在狀態1327,只要SHIFTIN=0,EVALFSMx就將保持在等待狀態。當SHIFTIN=1時,早先的FPGA邏輯裝置已經完成了它的存儲器訪問,而且當前的FPGA邏輯裝置準備好運行它的存儲器訪問任務。可以替代的方法是,當SHIFTIN=1時,當前的FPGA邏輯裝置在組中是第一邏輯裝置,而且SHIFTIN輸入線路被連接到Vcc。然而,SHIFTIN=1信號的接收指示當前的FPGA邏輯裝置已經準備好運行存儲器訪問。在狀態1328,存儲器區塊數N被設定在N=1。數目N將會在每個循環發生時增加,以便針對特定存儲器區塊N的存儲器訪問可被完成。最初,N=1,因此EVALFSMx將會進行到為存儲器區塊1訪問存儲器。在狀態1329,EVALFSMx為FPGA總線驅動器FDO_MUXx1249產生線路1285上的選擇信號以及線路1284上的output_en信號,以便將Mem_Block_N接口1253的地址和控制信號放置在FPGA總線FD[6332]或FD[310]之上。如果需要一個寫操作,wr=1;否則,需要一個讀操作,則wr=0。EVALFSMx接收線路1287上的wr信號作為其輸入之一。基於這個wr信號,線路1285上的正確的選擇信號將被斷言。當wr=1時,EVALFSMx進行到狀態1330。EVALFSMx為FD總線驅動器產生選擇和output_en信號,以便把Mem_Block_N1253的寫數據放在FPGA總線FD[6332]或FD[310]上。其後,EVALFSMx等待一個周期,以便讓SRAM存儲器裝置完成寫周期。然後EVALFSMx進入狀態1335,存儲器區塊數目N獲得一個增量;也就是說,N=N+1。然而,如果在狀態1329的wr=0,一個讀操作被請求,而且EVALFSMx進入狀態1332,等待一個周期,然後進入狀態1333,等待另外一個周期。在狀態1334,EVALFSMx產生線路1286上的rd_latch信號,以便讓存儲器區塊N的存儲器讀數據雙緩衝器1251將SRAM數據帶出到FD總線之上。EVALFSMx然後進行到狀態1335,其中存儲器區塊數目N獲得一個增量;也就是說,N=N+1。因此,如果在增量狀態1335之前N=1,N現在就是2,於是順序的存儲器訪問將會適用到存儲器區塊2。如果目前的存儲器區塊數目N少於或者等於用戶設計中的存儲器區塊總數M(也就是,N≤M),EVALFSMx進行到狀態1329,基於運行寫操作還是讀操作而÷為FD總線驅動器產生特定的選擇和output_en信號。然後,為下個存儲器區塊N進行的寫或讀操作將會發生。然而,如果當前的存儲器區塊的數目N比用戶設計中的存儲器區塊總數M更大(也就是,N>M),EVALFSMx進行到狀態1336,打開SHIFTOUT輸出信號,以便允許組中下一個FPGA邏輯裝置訪問SRAM存儲器裝置。其後,EVALFSMx進行到狀態1320,直到模擬系統需要在FPGA邏輯裝置之間進行數據估算,它一直是空閒的(也就是,EVAL=1)。圖61顯示了根據本發明一個實施例的模擬寫/讀周期。圖61在編號1366處顯示了模擬寫/讀周期中的三個周期-DMA數據傳輸周期、估算周期和存儲器訪問周期。雖然未顯示,但是可以得出暗示,即前一個DMA傳輸、估算和存儲器訪問可能已經事先發生。此外,到達/來自低端組SRAM的數據傳輸時序可能不同於高端組SRAM的傳輸時序。為了敘述簡潔,圖61顯示了一個例子,其中針對低端和高端組的訪問時序是相同的。全局時鐘GCLK1350為系統中所有的部件提供了時鐘信號。DATAXSFR信號1351表明DMA數據傳輸周期的發生。當軌跡1367上DATAXSFR=1時,DMA數據傳輸正在主計算系統和FPGA邏輯裝置或SRAM存儲器裝置之間發生。因此,數據被提供到FPGA高端組總線FD[6332]1359和軌跡1369之上,以及FPGA低端組總線FD[310]1358和軌跡1368上。DONE信號1364用一個邏輯0到1的信號(舉例來說,軌跡1390)表明存儲器訪問周期的完成,或者用邏輯0(舉例來說,軌跡1390的邊沿和軌跡1370的邊沿的組合)表明模擬寫/讀周期的持續時間。在DMA傳輸周期期間,DONE信號處於邏輯0。在DMA傳輸周期結束的時候,DATAXSFR信號從邏輯1變為邏輯0,觸發估算周期的開始。因此,如軌跡1371所指示,EVAL1352處於邏輯1。處於邏輯1的EVAL信號時長是預定的,並且可編程。在這個估算周期期間,用clk_en信號1353對用戶設計邏輯中的數據進行估算,如軌跡1372所示,1353處於邏輯1,如軌跡1373所示,input_en信號1354也處於邏輯1,如軌跡1374所示,mux_en信號1355也處於邏輯1,但是時長比clk_en和input_en更長。在這個特定的FPGA邏輯裝置裡數據得到估算。當mux_en信號1355在軌跡1374處從邏輯1進入0時,而且至少一個存儲器區塊存在於FPGA邏輯裝置中,那麼估算周期就會結束,而存儲器訪問周期則開始。SHIFTIN信號1356在軌跡1375被斷言為邏輯1。這表明之前的FPGA已經完成了它的估算,而且所有需要的數據已經被存取進入/來自這個之前的FPGA邏輯裝置。現在,組中下一個FPGA邏輯裝置已經準備好開始存儲器訪問。在軌跡1377到1386中,將使用下列術語。ACj_k表示地址和控制信號與FPGAj和存儲器區塊k有關,其中j和k是包括0的整數。WDj_k表示用於FPGAj和存儲器區塊k的寫數據。RDj_k表示用於FPGAj和存儲器區塊k的讀數據。因此,AC3_1表示與FPGA3和存儲器區塊1有關的地址和控制信號。低端組SRAM訪問和高端組SRAM訪問1361被顯示為軌跡1387。接下來的幾個軌跡1377到1387將顯示存儲器訪問是如何完成的。基於發往EVALFSMx的wrx信號邏輯水平,以及相應的發往MEMFSM的mem_wr信號水平,一個寫操作或讀操作將得到執行。如果需要一個寫操作,存儲器模型與用戶存儲器區塊N的接口(圖57中的Mem_Block_N接口1253)連接,提供wrx作為其控制信號之一。這個控制信號wrx被提供到FD總線驅動器和EVALFSMx單元。如果wrx處於邏輯1,適當的選擇信號和output_en信號被提供到FD總線驅動器以便將存儲器寫數據放置到FD總線上。這個當前位於FD總線上的相同控制信號能被CTRL_FPGA單元中的存儲器地址/控制鎖存器鎖存。存儲器地址/控制鎖存器經由一個MA[182]/控制總線將地址和控制信號發送給SRAM。處於邏輯1的wrx控制信號被從FD總線上提取出來,而且因為一個寫操作被請求,所以FD總線上的與地址和控制信號相關的數據被發送到SRAM存儲器裝置。因此,如圖61所示,這個下一個FPGA邏輯裝置,即低端組中的邏輯裝置FPGA0,如軌跡1377所示,將AC0_0放置到FD[310]上。模擬系統為WD0_0運行一個寫操作。然後,AC0_1被放置在FD[310]總線上。然而,如果一個讀操作被請求,在將AC0_1放置到FD總線FD[310]之後,在RD0_0(而不是對應於AC0_0的WD0_0)被放置在SRAM存儲器裝置的FD總線上之前,會出現一些時延。注意,如軌跡1383所指示,在MA[182]/控制總線上放置AC0_0與在FD總線上放置地址、控制和數據相比有稍微的延遲。這是因為MEMFSM單元需要時間來鎖存從FD總線來的地址/控制信號、提取mem_wr信號,以及為地址/控制多路復用器產生適當的選擇信號以便地址/控制信號能被放置在MA[182]/控制總線上。此外,在MA[182]/控制總線上放置地址/控制信號至SRAM存儲器裝置之後,模擬系統必須等待來自SRAM存儲器裝置的對應數據被放置在FD總線上。一個例子是軌跡1384和軌跡1381之間的時間偏移,其中在AC1_1被放置在MA[182]/控制總線上之後,RD1_1才被放置在FD總線上。在高端組上,FPGA1正在將AC1_0放置在總線FD[6332]上,隨後是WD1_0的放置。其後,AC1_1被放置在總線FD[6332]上。這由軌跡1380表明。當AC1_1被放置在FD總線上時,控制信號在這個例子中表明一個讀操作。因此,依照上文描述,當AC1_1如軌跡1384所示被放置在MA[18;2]/控制總線上時,處於邏輯0的正確的wrx和mem_wr信號被提供到地址/控制信號中,並發送至EVALFSMx和MEMFSM單元。因為模擬系統知道這是一個讀操作,寫數據就不會被傳輸到SRAM存儲器裝置;相反,與AC1_1有關的讀數據被SRAM存儲器裝置放置FD總線上以便用戶設計邏輯後來通過模擬存儲器區塊接口讀取。這由高端組上的軌跡1381表示。在低端組上,如軌跡1378所示,在MA[182]/控制總線上放置AC0_1(未顯示)之後,RD0_1被放置在FD總線上。當EVALFSMx如軌跡1388所示為模擬存儲器區塊接口中的存儲器讀數據雙緩衝器產生rd_lat0信號1362時,用戶設計邏輯經由模擬存儲器區塊接口的讀操作就完成了。這個rd_lat0信號被提供到低端組FPGA0和高端組FPGA1。其後,每個FPGA邏輯裝置的下一個存儲器區塊被放置在FD總線上。AC2_0被放置在低端組FD總線上,而AC3_0被放置在高端組FD總線上。如果需要一個寫操作,WD2_0被放置在低端組FD總線上,WD3_0被放置在高端組FD總線上。如軌跡1385所示,AC3_0被放置在高端組MA[182]/控制總線上。這個過程繼續進行,以便下一個存儲器區塊進行寫和讀操作。注意,針對低端組和高端組的寫和讀操作可能在不一致的時間和速度上發生,而且圖61顯示一個特定的例子,其中低端和高端組的時序是相同的。另外,低端和高端組的寫操作一起發生,然後兩個組上的讀操作跟隨其後。但情況並不總是這樣。低端和高端組的存在允許連接到這些組的設備並行操作;也就是說,低端組上的活動獨立於高端組上的活動。也能設想其他的情況,即當低端組正在運行一系列的寫操作,而高端組正在並行運行一系列的讀操作時。當遇到每個組的最後一個FPGA邏輯裝置中的最後一個數據時,如軌跡1376所示,SHIFTOUT信號1357被斷言。對於讀操作,如軌跡1389所示,對應於低端組上的FPGA2和高端組上的FPGA3的一個rd_latl信號1363被斷言到軌跡1382上的讀RD2_1和軌跡1379上的讀RD3_1。因為最後一個FPGA單元的最後一個數據已經被訪問,所以如軌跡1390所示,DONE信號1364表明模擬寫/讀周期的完成。下表H列出並描述了模擬系統電路板上的各種部件和它們對應的寄存器/存儲器、PCI存儲器地址,以及局部地址。表H存儲器映射下面在表J中顯示了根據本發明一個實施例的用於配置文件的數據格式。CPU通過PCI總線每次發送一個字以便為所有的板上FPGAs並行配置一個比特。表J配置數據格式下表K列出了XSFR_EVAL寄存器。它存在於所有的電路板中。XSFR_EVAL寄存器被主計算系統用來對EVAL周期進行編程、控制DMA讀/寫以及讀EVAL_DONE和XSFR_DONE欄位的狀態。主計算系統也使用這個寄存器來啟動存儲器訪問。有關這個寄存器的模擬系統的運行將在下面連同圖62和63進行描述。表K所有6個電路板的XSFR_EVAL寄存器(局部地址0h)下表L列出了CONFIG_JTAG[61]寄存器的內容。CPU配置FPGA邏輯裝置,並通過這個寄存器為FPGA邏輯裝置運行邊界掃描測試。每個電路板都有一個專門的寄存器。表LCONFIG_JTAG[61]寄存器圖62和63顯示了本發明另外一個實施例的時序圖。這兩個圖展現了有關XSFR_EVAL寄存器的模擬系統的運行。XSFR_EVAL寄存器被主計算系統用來對EVAL周期進行編程、控制DMA讀/寫,以及讀EVAL_DONE和XSFR_DONE欄位的狀態。主計算系統也使用這個寄存器來啟動存儲器訪問。這兩個圖之間的主要不同點之一是WAIT_EVAL欄位的狀態。當WAIT_EVAL欄位被設定成″0″的時候,正如圖62的情形一樣,DMA讀傳輸在CLK_EN之後開始。當WAIT_EVAL欄位被設定成″1″的時候,正如圖63的情形一樣,DMA讀傳輸在EVAL_DONE之後開始。在圖62中,WR_XSFR_EN和RD_XSFR_EN都被設定成″1″。這兩個欄位啟動DMA寫/讀傳輸,且能被XSFR_DONE所清除。因為兩個欄位都被設定成″1″,所以CTRL_FPGA單元首先自動運行DMA寫傳輸,然後運行DMA讀傳輸。然而,WAIT_EVAL欄位被設定成″0″,表明DMA讀傳輸在CLK_EN斷言之後開始(且在DMA寫操作完成之後開始)。因此,在圖62中,一旦CLK_EN信號(軟體時鐘)被偵測到,DMA讀操作在DMA寫操作完成之後幾乎立刻發生。DMA讀傳輸操作不等待EVAL周期的完成。在時序圖的開始處,當多個FPGA邏輯裝置爭奪注意時,EVAL_REQ_N信號會經歷爭用。如先前所解釋的那樣,如果任何一個FPGA邏輯裝置斷言這個信號,EVAL_REQ_N(或EVAL_REQ#)信號就被用來啟動估算循環。在數據傳輸結束的時候,估算周期開始,包括地址指示器初始化和軟體時鐘的運行,以便幫助估算過程。在DMA數據傳輸周期完成時產生的DONE信號,當多個LAST信號(來自每個FPGA邏輯裝置輸出斷的shiftin和shiftout信號)被產生、而且被提供到CTRL_FPGA單元,也會經歷爭用。當所有LAST信號都被接收、且經過處理時,就產生DONE信號,且可以開始一個新的DMA數據傳輸運行。EVAL_REQ_N信號和DONE信號在分時的基礎上使用相同的線路,我們將在下文討論其方式。系統首先自動開始DMA寫傳輸,正如時間1409處的WR_XSFR信號所示。WR_XSFR信號的開始部分包括與PCI控制器有關的一些開銷,在一個實施例中,是PCI9080或9060。其後,主計算系統經由局部總線LD[310]和FPGA總線FD[630]對連接到FPGA總線FD[630]的FPGA邏輯裝置運行一個DMA寫操作。在時間1412處,WR_XSFR信號被停用,表明DMA寫操作的完成。125EVAL信號在從時間1412到時間1410的一個預定的時序被激活。EVALTIME時長是可編程的,且最初設定在8+X,其中X來源於最長的信號軌跡路徑。XSFR_DONE信號也在一個短時間內被激活,表明這個DMA傳輸操作的完成,其中當前運行是一個DMA寫操作。同樣也在時間1412,EVAL_REQ_N信號之間的爭用停止了,但是攜帶DONE信號的線路當前傳輸EVAL_REQ_N信號給CTRL_FPGA單元。對於3個時鐘周期,EVAL_REQ_N信號通過攜帶DONE信號的線路而得到處理。在3個時鐘周期之後,EVAL_REQ_N信號不再由FPGA邏輯裝置產生,但是先前被發送到CTRL_FPGA單元的EVAL_REQ_N信號將會得到處理。EVAL_REQ_N信號不再由FPGA邏輯裝置為門控時鐘產生的最大時序大約是23個時鐘周期。比這個周期長的EVAL_REQ_N信號將會被忽略。在時間1413處,大約在時間1412後的2個時鐘周期(在DMA寫操作的結束處),CTRL_FPGA單元將一個寫地址選通信號WPLX_ADS_N發送給PCI控制器(舉例來說,PLXPCI9080),開始DMA讀傳輸。從時間1413開始大約24個時鐘周期後,PCI控制器將會啟動DMA讀傳輸過程,同時DONE信號產生。在時間1414處,在PCI控制器開始DMA讀過程之前,RD_XSFR信號被激活,啟動DMA讀傳輸。一些PLX開銷數據被首先傳輸和處理。在時間1415處,在這個開銷數據被處理期間,DMA讀數據被放置在FPGA總線FD[630]和局部總線LD[310]上。在從時間1413開始的24個時鐘周期結束的時候,和來自FPGA邏輯裝置的DONE信號啟動和EVAL_REQ_N信號產生的時候,PCI控制器通過將來自FPGA總線FD[630]和局部總線LD[310]的數據傳輸到主計算機系統來處理DMA讀數據。在時間1410處,DMA讀數據將會繼續得到處理,而EVAL信號被停用,而且EVAL_DONE信號將會被激活,表明EVAL周期的完成。當FPGA邏輯裝置產生EVAL_REQ_N信號時,它們之間的爭用也開始出現。在時間1417處,恰好在DMA讀周期在時間1416處完成之前,主計算機系統將輪詢PLX中斷寄存器以確定DMA周期是否接近末尾。PCI控制器知道完成DMA數據傳輸過程需多少周期。在預定數目的周期之後,PCI控制器將會在它的中斷寄存器中設定一個特別位。主計算機系統中的CPU輪詢這個PCI控制器中的中斷寄存器。如果該位被設定,CPU就知道DMA周期幾乎完成。主機系統中的CPU並不始終輪詢中斷寄存器,因為然後它將用一個讀周期來阻礙PCI總線。因此,在本發明的一個實施例中,在輪詢中斷寄存器之前,主計算機系統中的CPU被編程來等待一定數量的周期。在一個短的時序之後,DMA讀周期的結束在時間1416處發生,同時RD_XSFR被停用,而且DMA讀數據也不再位於FPGA總線FD[630]或局部總線LD[310]之上。XSFR_DONE信號也在時間1416處被激活,LAST信號之間為產生DONE信號的爭用也開始了。在從時間1409WR_XSFR信號產生到時間1417的整個DMA周期內,主計算機系統中的CPU不訪問模擬硬體系統,在一個實施例中,這個周期的時長是(1)PCI控制器時序2的開銷時序和(2)WR_XSFR和RD_XSFR的字數目,以及(3)主計算機系統的(例如SunULTRASparc)PCI開銷的總和。當CPU輪詢PCI控制器中的中斷寄存器的時候,DMA周期之後的第一個訪問在時間1419處發生。在時間1411,大約在時間1416之後3個時鐘周期處,MEM_EN信號被激活,以啟動板上SRAM存儲器裝置,這樣FPGA邏輯裝置和SRAM存儲器裝置之間的存儲器訪問就能開始。存儲器訪問繼續直到時間1419,而且在一個實施例中,每一個訪問必需5個時鐘周期。如果不需要DMA讀傳輸,那麼存儲器訪問能在時間1410處更早開始,而不是在時間1411處開始。當存儲器訪問在FPGA總線FD[630]上在FPGA邏輯裝置和SRAM存儲器裝置之間發生時,主計算機系統中的CPU可以經由局部總線LD[310]從時間1418到時間1429與PCI控制器和CTRL_FPGA單元進行通信。這發生在CPU完成輪詢PCI控制器的中斷寄存器之後。CPU在不同的寄存器上寫數據,以便準備下一個數據傳輸。這個周期的時長大於4微秒。如果存儲器訪問比這個周期短,那麼FPGA總線FD[630]將不經歷任何的衝突。在時間1429處,XSFR_DONE信號被停用。在圖63中,時序圖不同於圖62的時序圖,因為在圖63中,WAIT_EVAL欄位被設定成″1″。換句話說,DMA讀傳遞周期在EVAL_DONE信號已被激活且幾乎完成之後開始。它等待EVAL周期的接近完成,而不是在DMA寫操作完成之後立刻開始。EVAL信號在從時間1412到時間1410之間的一個預定時序被激活。在時間1410處,EVAL_DONE信號被激活,表明EVAL周期的完成。在圖63中,在時間1412處DMA寫操作之後,CTRL_FPGA單元直到時間1420處才位PCI控制器產生寫地址選通信號WPLX_ADS_N,這大約是在EVAL周期結束之前的16個時鐘周期。XSFR_DONE信號也被延長到時間1423處。在時間1423處,XSFR_DONE欄位被設定,然後產生WPLX_ADS_N信號,以便啟動DMA讀過程。在時間1420,即大約在EVAL_DONE信號激活之前16個時鐘周期,CTRL_FPGA單元將一個寫地址選通信號WPLX_ADS_N發送給PCI控制器(舉例來說,PLXPCI9080)以便開始DMA讀傳輸。在從時間1420開始大約24個時鐘周期處,PCI控制器將啟動DMA讀傳輸過程,而且DONE信號也被產生。在時間1421處,在PCI控制器開始進行DMA讀處理之前,RD_XSFR信號被激活,以啟動DMA讀傳輸。一些PLX開銷數據首先得到傳輸和處理。在時間1422處,在這個開銷數據被處理的期間,DMA讀數據被放置在FPGA總線FD[630]和局部總線LD[310]上。在時間1424處的24個時鐘周期結束的時候,PCI控制器通過將來自FPGA總線FD[630]和局部總線LD[310]的數據傳輸到主計算機系統來處理DMA讀數據。時序圖的剩餘部分與圖62的剩餘部分相同。因此,圖63中的RD_XSFR信號的激活比圖62中的要晚。圖63中的RD_XSFR信號在EVAL周期的接近完成處之後,以便延遲DMA讀操作。圖62中的RD_XSFR信號在DMA寫傳遞完成之後跟隨CLK_EN信號的偵測。IX.協同校驗系統本發明的協同校驗系統能通過向設計者提供靈活的軟體模擬以及因使用一個硬體模型的更快速度來加速設計/開發周期。設計的硬體和軟體部分在ASIC製造之前都能得到檢驗,並且沒有以仿真器為基礎的協同校驗工具的種種限制。調試功能得到增強,而且整體調試時間也可能得到顯著的縮短。以ASIC為待測設備的傳統協同校驗工具圖64顯示了一個典型的PCI附加卡(add-oncard)的最終設計,例如視頻、多媒體、乙太網或SCSI卡。這個卡2000包括一個允許與其他外圍設備通信的直接接口連接器2002。連接器2002被連接到總線2001,以便發送來自錄像機、照相機或電視調諧器的視頻信號;輸出視頻和音頻到顯示器或揚聲器;以及將信號傳輸到通信或磁碟驅動器接口。根據用戶設計,該領域的技術人員能預測其他的接口需求。本設計的大量功能存在於經由總線2003連接到接口連接器2002的晶片2004中,以及經由總線2007被用來產生一個局部時鐘信號的局部振蕩器2005,和經由總線2008的存儲器2006。附加卡2000還包括一個PCI連接器2009,用來與PCI總線2010連接。在實施如圖64所顯示的一個附加卡的設計之前,本設計被簡化為ASIC形式,這是為了測試的目的。在圖65顯示了一個傳統的硬體/軟體協同校驗工具。用戶設計具體化為ASIC的形式——在圖65中被標為待測設備(或″DUT″)2024。為了獲得來自設計為與其連接的多種資源的激勵,待測設備2024被放在目標系統2020之內,該系統是主板上的中央計算系統2021和一些外設的組合。目標系統2020包括一個中央計算系統2021,2021包括一個CPU和存儲器,而且在一些作業系統(如MicrosoftWindows或SunMicrosystem公司的Solaris)下進行操作以運行一些應用程式。如本領域的技術人員所知,SunMicroSystem公司的Solaris是一個操作環境和軟體產品組合,支持Internet(網際網路)、Intranet(內部網)和企業計算。Solaris操作環境基於工業標準UNIX系統V版本4,而且被設計用來在一個分布網絡環境中執行客戶機一伺服器應用程式,為較小的工作組提供適當的資源,而且提供電子商務所需要的WebTone。待測設備2024的設備驅動器2022在中央計算系統2021中,以實現作業系統(以及任何應用程式)和待測設備2024之間的通信。如本領域的技術人員所知,一個設備驅動器是控制計算機系統硬體部件或外設的特殊軟體。一個設備驅動器負責訪問設備的硬體寄存器,而且通常包括一個中斷處理程序以處理設備產生的中斷。設備驅動器時常構成作業系統內核的最低級別的一部分,通過這些部分,在內核建造的時候,它們被聯接。一些比較新近的系統有可載入的驅動器,可以在作業系統運行之後從文件安裝。待測設備2024和中央計算系統2021被連接到一個PCI總線2023上。目標系統2020中的其他外設包括一個乙太網PCI附加卡2025,用於通過總線2034將目標系統連接到一個網絡2030,一個經由總線2036和2035連接到SCSI驅動器2027和2031的SCSIPCI附加卡2026,一臺經由總線2032連接到待測設備2024的錄像機2028(如果在待測設備2024的設計中是必需的),以及一個經由總線2033連接到待測設備2024的顯示器及/或揚聲器2029(如果在待測設備2024的設計中是必需的)。如本領域的技術人員所知,SCSI代表″小型計算機系統接口″,這是一種在計算機和智能設備(例如,硬碟、軟盤、光碟、印表機、掃描儀和更多設備)之間進行系統級接口的獨立於處理器的標準。在這種目標系統環境中,待測設備2024能利用來自中央計算系統(即作業系統、應用程式)和外設的多種激勵得到檢測。如果時間不是要考慮的問題,而且設計者只尋求一種簡單的通過/失敗測試,這個協同校驗工具應該能充分滿足他們的需要。然而,在大多數情形中,一個設計項目有嚴格的預算,並且在產品推出之前有嚴格的預定日程。正如上文所解釋的那樣,這個特定的基於ASIC的協同校驗工具並不令人滿意,因為其調試功能並不存在(沒有熟練的技術,設計者無法隔離″失敗″測試的原因,而且項目開始時無法預知發現的每個錯誤的″修復″數目,因此也無法預知日程安排和預算)。以仿真器作為待測試設備的傳統協同校驗工具圖66舉例說明了帶有一個仿真器的傳統協同校驗工具。與上文在圖64中說明的裝置不同,待測設備在仿真器2048中編程,仿真器2048連接到目標系統2040和一些外設以及一個測試工作站2052。仿真器2048包括一個仿真時鐘2066和被編程納入仿真器中的待測設備。仿真器2048經由PCI總線橋接器2044和PCI總線2057以及控制線路2056連接到目標系統2040。目標系統2040包括主板上的中央計算系統2041和一些外設的組合。目標系統2040包括一個中央計算系統2041,2041包括處理器和存儲器,而且在一些作業系統(如MicrosoftWindows或SunMicrosystem公司的Solaris)下進行操作以運行一定數量的應用程式。待測設備2024的設備驅動器2042在中央計算系統2041中,以實現作業系統(以及任何應用程式)和仿真器2048中的待測設備之間的通信。為了和仿真器2048以及作為計算環境一部分的其他設備進行通信,中央計算系統2041被連接到PCI總線2043上。目標系統2040中的其他外設包括一個乙太網PCI附加卡2045,用於通過總線2058將目標系統連接到一個網絡2049,一個經由總線2060和2059連接到SCSI驅動器2047和2050的SCSIPCI附加卡2046。仿真器2048也經由總線2062被連接到測試工作站2052。測試工作站2052包括一個CPU和存儲器,執行其功能。測試工作站2052也可能包括測試例2067和用於其它模型化的、但沒有與仿真器2048物理連接的設備的設備模型2068。最後,仿真器2048經由總線2061被連接到一些其他外設,如幀緩衝器或數據流記錄/播放系統2051。這個幀緩衝器或數據流記錄/播放系統2051也可能經由總線2063被連接到通信設備或信道2053、經由總線2064連接到錄象機2054,以及經由總線2065連接到顯示器及/或揚聲器2055。如本領域的技術人員所知,仿真時鐘的運行速度遠遠慢於實際的目標系統速度。因此,圖66的陰影部分以仿真速度運行,而其它沒有陰影的部分以實際的目標系統速度運行。如上文所述,這種帶有仿真器的協同校驗工有一些局限性。當使用一個邏輯分析儀或一個取樣及保存設備來獲取待測設備的內部狀態信息時,設計者必須編譯他的設計,以便他想要檢查的、用於調試目的的有關信號能被提供到輸出引腳進行取樣。如果設計者想對設計的一個不同部分進行調試,他就必須確定該部分有能被邏輯分析儀或取樣及保存設備取樣的輸出信號,否則他必須在仿真器2048中重新編譯他的設計,以便這些信號能在輸出引腳上實現取樣目的。這些重新編譯的時間可能需要數天或數星期,對於一個時間要求嚴格的設計/開發時間表而言,這可能是過於冗長的延遲。此外,因為這種協同校驗工具使用信號,所以必須提供複雜的電路來或者將這些信號轉換成數據,或提供一些信號到信號的時序控制。而且,要取樣的每個信號必須使用很多的線路2061和2062,這就增加了調試設置的負擔和時間。帶有可重新配置的計算陣列的模擬作為一個簡短的總結,圖67舉例說明了本發明的一種具有單一引擎可重新配置計算(RCC)陣列系統的高級別的配置,此專利權說明書曾在上文對其進行了描述。這個單一引擎RCC系統將被合併到根據本發明的一個實施例的協同校驗系統中。在圖67中,RCC陣列系統2080包括一個RCC計算系統2081,一個可重新配置的計算(RCC)硬體陣列2084,和一個將它們連接在一起的PCI總線2089。重要的是,RCC計算系統2081包括包括軟體中用戶設計的完整模型,而RCC硬體陣列2084包括用戶設計的一個硬體模型。RCC計算系統2081包括CPU、存儲器、一個作業系統,和運行單一引擎RCC系統2080的必需軟體。提供一個軟體時鐘2082以便實現RCC計算系統2081中的軟體模型以及RCC硬體陣列2084中的硬體模型的嚴格控制。測試平臺數據2083也被儲存在RCC計算系統2081中。RCC硬體陣列系統2084包括一個PCI接口2085,一組RCC硬體陣列板2086,以及實現接口目的的各種總線。RCC硬體陣列板組2086至少包括模型化在硬體中的用戶設計的一部分(也就是,硬體模型2087)以及用於測試平臺數據的存儲器2088。在一個實施例中,在配置期間,這個硬體模型的各部分被分布在多個可重新配置的邏輯元件(舉例來說,FPGA晶片)之間。因為要使用更多的可重新配置的邏輯元件或晶片,因此需要使用更多的電路板。在一個實施例中,一個單一電路板上具有四個可重新配置的邏輯元件。在其他的實施例中,一個單一電路板上具有八個可重新配置的邏輯元件。在四晶片電路板中的可重新配置的邏輯元件的容量和能力與八晶片電路板可重新配置的部件的容量和能力可能有顯著的不同。總線2090從PCI接口2085到硬體模型2087為硬體模型提供不同的時鐘。總線2091經由連接器2093和內部總線2094在PCI接口2085和硬體模型2087之間提供其他輸入/輸出數據。總線2092起到PCI接口2085和硬體模型2087之間的PCI總線的功能。測試平臺數據也能被儲存在硬體模型2087中的存儲器中。如上文所述,硬體模型2087包括除了實現硬體模型與RCC計算系統2081面接所需要的用戶設計的硬體模型之外的其他結構和功能。這個RCC系統2080可能設置在一個單一工作站中,或者連接到一個工作站網絡,其中每個工作站以分時的方式訪問RCC系統2080。事實上,RCC陣列系統2080作為模擬伺服器,其具有一個模擬調度程序和狀態交換機制。伺服器允許一個工作站中的每個用戶為實現高速加速和硬體狀態交換目的而訪問RCC硬體陣列2084。在加速和狀態交換之後,每個用戶都能在本地用軟體模擬用戶設計,同時可以對其他工作站的其他用戶釋放RCC硬體陣列2084的控制。這個網絡模型也將被用於下面描述的協同校驗系統。RCC陣列系統2080為設計者提供模擬整個設計的能力和靈活性,設計者還可以經由可重新配置的計算陣列中的硬體模型來加速部分在選擇的周期內測試點的部分,並隨時獲得其設計中任何部分的內部狀態信息。的確,單一引擎的、可重新配置的計算陣列(RCC)系統可以被不精確的描述為一個硬體加速模擬器,它能在單一調試期間被用來運行下列任務(1)獨自模擬;(2)與硬體加速一起模擬,其中用戶能隨時啟動、停止、斷言值,以及檢查設計的內部狀態,(3)後模擬分析,以及(4)內電路仿真。因為軟體模型和硬體模型都處於單一引擎經由一個軟體時鐘的嚴格控制之下,可重新配置的計算陣列中的硬體模型被緊密耦合到軟體模擬模型。這允許設計者一個周期接一個周期進行調試,以及經過一定數量的周期來加速和減速硬體模型,以便獲得有價值的內部狀態信息。而且,因為這個模擬系統處理數據,而不是信號,所以不需要複雜的信號-數據轉換/時序電路。此外,如果設計者希望檢查不同的節點組,可重新配置的計算陣列中的硬體模型不需要重新編譯,這一點不像典型的仿真系統。有關進一步的詳細情況,請回顧上文的描述。沒有外部輸入/輸出的協同校驗系統本發明一個實施例是一個不使用真實和物理外部輸入/輸出設備和目標應用程式的協同校驗系統。因此,根據本發明的一個實施例的一個協同校驗系統能被整合到RCC系統中連同其他的功能性一起工作,以便調試用戶設計的軟體部分和硬體部分,而不需使用任何實際的目標系統或輸入/輸出設備。相反,目標系統和外部輸入/輸出設備被模型化在RCC計算系統的軟體中。參照圖68,協同校驗系統2100包括一個RCC計算系統2101,RCC硬體陣列2108,和將它們連接起來的一個PCI總線2114。重要的是,RCC計算系統2101包括在軟體中的用戶設計的整個模型,且可重新配置的計算陣列2108包括用戶設計的一個硬體模型。RCC計算系統2101包括CPU、存儲器、一個作業系統,和運行單一引擎協同校驗系統2100的必需軟體。一個軟體時鐘2104被提供以實現RCC計算系統2101中的軟體模型以及可重新配置的計算陣列2108中的硬體模型的嚴格控制。測試例2103也被儲存在RCC計算系統2101中。根據本發明一個實施例,RCC計算系統2101還包括標記為2106的目標應用程式2102、用戶設計硬體模型的一個驅動器2105、一個設備(舉例來說,一個視頻卡)模型和它的在軟體中的驅動器,以及標記為2107的其他設備(舉例來說,一個顯示器)的模型和它的在軟體中的驅動器。本質上,RCC計算系統2101按照需要包含儘可能多的設備模型和驅動器,傳輸到用戶設計的軟體模型和硬體模型,真實目標系統和其他輸入/輸出設備是該計算環境的組成部分。RCC硬體陣列2108包括一個PCI接口2109,一組RCC硬體陣列板2110,和各種為實現接口目的的總線。RCC硬體陣列板組2110至少包括模型化在硬體內的部分用戶設計2112以及用於測試平臺數據的存儲器2113。依照上文的描述,每個電路板包含多個可重新配置的邏輯元件或晶片。總線2115從PCI接口2109到硬體模型2112為硬體模型提供各種時鐘。總線2116經由連接器2111和內部總線2118提供PCI接口2109和硬體模型2112之間的其他輸入/輸出數據。總線2117的功能相當於PCI接口2109和硬體模型2112之間的PCI總線。測試平臺數據可以被儲存在硬體模型2113中的存儲器中。依照上文的描述,硬體模型包括除了使得硬體模型與RCC計算系統2101面接所需要的用戶設計的硬體模型之外的其他結構和功能。為了將圖68中的協同校驗系統和傳統的基於仿真器的協同校驗系統進行比較,圖66顯示了連接到目標系統2040的仿真器2048、一些輸入/輸出設備(舉例來說,幀緩衝器或數據流記錄/播放系統2051)和一個工作站2052。這個仿真器配置為設計者提出了很多問題和設定上的麻煩。仿真器需要一個邏輯分析儀或一個取樣及保存設備,以便測量模型化在仿真器中的用戶設計內部狀態。因為邏輯分析儀和取樣及保存設備需要信號,因此要求有複雜的信號-數據轉換電路。此外,也需要複雜的信號-信號時序控制電路。每個信號都需要許多導線來測量仿真器的內部狀態,這將進一步增加用戶在安排時遇到的負擔。在調試期間,每次用戶想要檢驗一組不同的內部邏輯電路時,他都必須重新編譯仿真器,這樣來自那個邏輯電路的適當信號作為輸出用於測量,並由邏輯分析儀或取樣及保存設備進行記錄。漫長的重新編譯時間成本太貴。本發明的協同校驗系統中沒有連接外部輸入/輸出設備,目標系統和其他的輸入/輸出設備被模型化在軟體中,因此不需要實際存在真實的物理目標系統和輸入/輸出設備。因為RCC計算系統2101處理數據,所以不需要信號-數據轉換電路或信號-信號時序控制電路。導線數目也不受信號數目的限制,因此,裝配相對簡單。此外,因為協同校驗系統處理數據而不是信號,所以調試用戶設計的硬體模型中邏輯電路的不同部分也不需要重新編譯。因為RCC計算系統用軟體控制的時鐘(也就是,軟體時鐘和時鐘邊緣偵測電路)控制RCC硬體陣列,所以硬體模型的開始和停止變得容易了。因為整個用戶設計的模型處於軟體中,而且軟體時鐘實現同步,所以從硬體模型讀數據也是容易的。因此,用戶能僅通過軟體模擬來調試,加速硬體中的部分或全部用戶設計,一個周期接一個周期經過各個需要的測試點,檢查軟體和硬體模型的內部狀態(也就是,寄存器和組合邏輯狀態)。舉例來說,用戶能用一些測試平臺數據模擬設計,然後將內部狀態信息下載到硬體模型,用帶硬體模型的各種測試平臺數據加速設計,通過寄存器/組合邏輯重建和從硬體模型到軟體模型載入值來檢查最終的硬體模型的內部狀態值,而且用戶能最後通過使用硬體模型加速過程的結果,採用軟體來模擬用戶設計的其他部分。然而,依照上文的描述,為了調試進程控制,仍需要一個工作站。在一個網絡配置中,一個工作站可能被遠程連接到協同校驗系統中,遠程訪問調試數據。在一個非網絡配置中,一個工作站可能在本地連接到協同校驗系統,或者在一些其他實施例中,工作站可能將協同校驗系統合併在內部,以便可以在本地訪問調試數據。帶有外部輸入/輸出的協同校驗系統在圖68中,各種輸入/輸出設備和目標應用程式被模型化在RCC計算系統2101中。然而,當太多的輸入/輸出設備和目標應用程式在RCC計算系統2101中運行的時候,整體速度會減慢。如果RCC計算系統2101中只有一個單一處理器,就必需更多的時間來處理來自所有設備模型和目標應用程式的各種數據。為了增加數據傳輸量,真實輸入/輸出設備和目標應用程式(而不是輸入/輸出設備和目標應用程式的軟體模型)可能被物理連接到協同校驗系統。本發明一個實施例是一個使用真實和物理外部輸入/輸出設備和目標應用程式的協同校驗系統。因此,使用真實的目標系統及輸入/輸出設備的同時,一個協同校驗系統能合併RCC系統連同其他功能,以調試用戶設計的軟體部分和硬體部分。為了測試目的,協同校驗系統能使用來自軟體的測試平臺數據和來自外部接口(舉例來說,目標系統和外部輸入/輸出設備)的激勵。測試平臺數據不僅能被用來給用戶設計的接腳分布提供測試數據,而且為用戶設計中的內部節點提供測試數據。來自外部輸入/輸出設備(或目標系統)的真實輸入/輸出信號只可能被引入用戶設計接腳分布。因此,來自一個外部接口(舉例來說,目標系統或外部輸入/輸出設備)的測試數據和軟體中的測試平臺處理之間的主要區別之一,就在於測試平臺數據能被用來通過應用於接腳分布和內部節點的激勵來測試用戶設計,而來自目標系統或外部輸入/輸出設備的真實數據只能經由其接腳分布(或在用戶設計中代表接腳分布的節點)被應用到用戶設計。在下列討論中,我們將呈現有關一個目標系統和外部輸入/輸出設備的協同校驗系統結構和它的配置。作為與圖66中的系統配置進行的比較,根據本發明的一個實施例的協同校驗系統替換了虛線框2070內的結構和功能。換句話說,圖66顯示虛線2070的範圍內的仿真器和工作站,而本發明的一個實施例在虛線2070處包括協同校驗系統2140(和它的相聯工作站),正如圖69所顯示的協同校驗系統2140。參照圖69,根據本發明的一個實施例的協同校驗系統配置包括一個目標系統2120、一個協同校驗系統2140、一些可選輸入/輸出設備,和將它們連接起來的控制/數據總線2131和2132。目標系統2120包括一個中央計算系統2121,該計算系統包括一個CPU和存儲器,而且在一些作業系統中運行,例如MicrosoftWindows或SunMicrosystem公司的Solaris以便運行一定數量的應用程式2122和測試例2123。用於用戶設計的硬體模型的設備驅動器2124被包含在中央計算系統2121中,以實現作業系統(以及任何應用程式)和用戶設計之間的通信。為了與協同校驗系統以及構成該計算環境部分的其他設備進行通信,中央計算系統2121被連接到PCI總線2129。目標系統2120中的其他外設包括一個乙太網PCI附加卡2125,用來將目標系統連接到一個網絡,經由總線2130連接到SCSI驅動器2128的一個SCSIPCI附加卡2126,和一個PCI總線橋接器2127。協同校驗系統2140包括一個RCC計算系統2141,一個RCC硬體陣列2190,外部輸入/輸出擴展器形式的一外部接口2139,和一個將RCC計算系統2141和RCC硬體陣列2190連接到一起的PCI總線2171。RCC計算系統2141包括CPU、存儲器、一個作業系統,和運行單一引擎協同校驗系統2140所必需的軟體。重要的是,RCC計算系統2141包括軟體中用戶設計的整個模型,而RCC硬體陣列2190包括用戶設計的一個硬體模型。依照上文的討論,協同校驗系統的單一引擎從一個主軟體內核處獲得它的能力和靈活性,該內核駐留在RCC計算系統2141的主存儲器中,並且控制協同校驗系統2140的全部運行和執行。只要任何測試平臺處理處於活動狀態,或來自外部世界的任何信號被送到協同校驗系統,內核就估算激活的測試平臺部件、估算時鐘部件、偵測時鐘邊緣以更新寄存器和存儲器,同時也傳播組合邏輯數據,並推進模擬時間。這個主軟體內核實現了RCC計算系統2141和RCC硬體陣列2190的緊密耦合性質。軟體內核產生一個來自一個軟體時鐘源2142的軟體時鐘信號,該信號被提供到RCC硬體陣列2190和外部世界。時鐘源2142能根據軟體時鐘的不同目的地在不同的頻率上產生多重時鐘。通常,軟體時鐘確保在用戶設計硬體模型中的寄存器與系統時鐘同步估算,且沒有任何佔用時間擾亂的現象。軟體模型能在軟體中偵測影響硬體模型寄存器值的時鐘邊緣。因此,一種時鐘偵測機制確保在主軟體模型中,一個時鐘邊緣偵測可以被轉換成硬體模型時鐘偵測。關於軟體時鐘和時鐘邊緣偵測邏輯的更為詳細的討論,請參照圖17-19以及專利說明書中的相應文本。根據本發明的一個實施例的情形是,RCC計算系統2141也可能包括一定數量的輸入/輸出設備的一個或多個模型,儘管其他真實的物理輸入/輸出設備可能被連接到協同校驗系統中。舉例來說,RCC計算系統2141可能包括標記為2143的設備(舉例來說,一個揚聲器)模型和其驅動器以及軟體中的測試平臺數據,以及標記為2144的另外一個設備(舉例來說,一個圖形加速器)模型連同其驅動器和軟體中的測試平臺數據。用戶決定哪些設備(以及它們各自的驅動器和測試平臺數據)將會被模型化並合併到RCC計算系統2141中,以及哪些設備將實際上被連接到協同校驗系統中。協同校驗系統包含一個控制邏輯,該控制邏輯提供(1)RCC計算系統2141和RCC硬體陣列2190,以及(2)外部接口(被連接到目標系統和外部輸入/輸出設備的接口)和RCC硬體陣列2190之間的通信量控制。因為一些輸入/輸出設備可能被模型化在RCC計算系統中,所以在RCC硬體陣列2190和RCC計算系統2141之間有一些數據通過。此外,RCC計算系統2141具有軟體中的整個設計模型,包括模型化在RCC硬體陣列2190中的部分用戶設計。結果,RCC計算系統2141也必須能訪問經過外部接口和RCC硬體陣列2190之間的所有數據。控制邏輯確保RCC計算系統2141能訪問這些數據。下文將對控制邏輯作更為詳細的描述。RCC硬體陣列2190包括一定數量的陣列板。在圖69中顯示的這個特定實施例中,硬體陣列2190包括電路板2145-2149。電路板2146-2149包含大部分配置的硬體模型。電路板2145(或電路板m1)包含可重新配置的計算元件(舉例來說,FPGA晶片)2153,協同校驗系統能使用這個元件來至少配置部分硬體模型,還包含一個在外部接口(目標系統和輸入/輸出設備)和協同校驗系統2140之間引導通信量和數據的外部輸入/輸出控制器2152。電路板2145經由外部輸入/輸出控制器允許RCC計算系統2141訪問在外部世界(也就是,目標系統和輸入/輸出設備)和RCC硬體陣列2190之間傳輸的所有數據。這個訪問很重要,因為協同校驗系統中的RCC計算系統2141包含在軟體中整個用戶設計的一個模型,而且RCC計算系統2141也能控制RCC硬體陣列2190的功能。如果來自一個外部輸入/輸出設備的激勵被提供到硬體模型,軟體模型必須也能訪問這個激勵,以便這個協同校驗系統的用戶能有選擇地控制下一個調試步驟,該步驟可能包括檢查作為該應用激勵結果的設計內部狀態值。正如上文有關電路板布局和互連方案所討論的那樣,第一個和最後一個電路板被包含在硬體陣列2190中。因此,電路板1(標記為電路板2146)和電路板8(標記為電路板2149)被包含在一個由八個電路板組成的硬體陣列中(不包括電路板m1)。除了電路板2145-2149之外,可能還具有帶有晶片m2的電路板m2(不在圖69中顯示,但是見圖74)。這個電路板m2類似於電路板m1,除了電路板m2沒有任何的外部接口,且如果需要附加板,它能被用來實現擴展目的。現在將討論這些電路板的內容。電路板2145(電路板m1)包括一個PCI控制器2151,一個外部輸入/輸出控制器2152,數據晶片(m1)2153,存儲器2154和多路復用器2155。在一個實施例中,這個PCI控制器是PLX9080。PCI控制器2151經由總線2171被連接到RCC計算系統2141,並經由總線2172被連接到三狀態緩衝器2179。在外部世界(目標系統2120和輸入/輸出設備)和RCC計算系統2141之間的協同校驗系統中的主通信量控制器是一個外部輸入/輸出控制器2152(在圖69、71,和73中也被稱為″CTRLXM″),該控制器被連接到RCC計算系統2141、RCC硬體陣列中的其他電路板2146-2149、目標系統2120和真實外部輸入/輸出設備中。當然,如同上文所描述的那樣,RCC計算系統2141和RCC硬體陣列2190之間的主通信量控制器一直都是每個陣列板2146-2149中的單個內部輸入/輸出控制器(舉例來說,輸入/輸出控制器2156和2158)和PCI控制器2151的組合。在一個實施例中,這些單個內部輸入/輸出控制器,例如控制器2156和2158,是在上文圖22(單元700)和圖56(單元1200)等示範圖中被描述和舉例說明的FPGA輸入/輸出控制器。外部輸入/輸出控制器2152被連接到三狀態緩衝器2179,以便允許外部輸入/輸出控制器和RCC計算系統2141面接。在一個實施例中,在有些情況下,三狀態緩衝器2179允許來自RCC計算系統2141的數據傳給局部總線2180,同時防止來自局部總線的數據傳給RCC計算系統2141,而另外一些情況下,允許數據從局部總線2180傳遞至RCC計算系統2141。外部輸入/輸出控制器2152還經由數據總線2176被連接到晶片(m1)2153和存儲器/外部緩衝器2154。在一個實施例中,晶片(m1)2153是可重新配置的計算部件,例如一個FPGA晶片,它能被用來至少配置用戶設計的部分硬體模型(或所有硬體模型,如果用戶設計足夠小)。在一個實施例中,外部緩衝器2154是DRAMDIMM,而且能被用被晶片2153用來實現多種目的。外部緩衝器2154提供許多存儲器容量,超過在本地連接到每個可重新配置的邏輯元件(舉例來說,可重新配置的邏輯元件2157)的單個SRAM存儲器裝置。這個大的存儲器容量允許RCC計算系統儲存大量的數據,例如測試平臺數據、微控制器嵌入碼(如果用戶設計是一個微控制器),以及一個存儲器裝置中的大型LUT表。依照上面的描述,外部緩衝器2154也能被用來儲存硬體模型化必需的數據。實質上,這個外部緩衝器2154可以部分起到上面描述和說明的另一個高端或低端組SRAM存儲器裝置一樣的功能,例如圖56中的SRAM1205和1206,但是它有更多的存儲器。外部緩衝器2154也能被協同校驗系統用來儲存從目標系統2120和外部的輸入/輸出設備處收到的數據,以便讓這些數據稍後能被RCC計算系統2141回收。晶片(m1)2153和外部緩衝器2154還包含在本專利說明書″存儲器模擬″部分中描述的存儲器映射邏輯。為了訪問在外部緩衝器2154中的需要的數據,晶片2153和RCC計算系統2141(經由外部輸入/輸出控制器2152)都能為需要的數據傳輸地址。晶片2153在地址總線2182上提供地址,外部輸入/輸出控制器2152在地址總線2177上提供地址。這些地址總線2182和2177是多路復用器2155的輸入,它在被連接到外部緩衝器2154的輸出2178線路上提供所選的地址。針對多路復用器2155的選擇信號是由外部輸入/輸出控制器2152經由線路2181提供的。外部輸入/輸出控制器2152也經由總線2180被連接到其他電路板2146-2149上。在一個實施例中,總線2180是在上文圖22(局部總線708)和圖56(局部總線1210)等示範圖中得到描述和舉例說明的局部總線。在這個實施例中,只有五個電路板(包括電路板2145(電路板m1))被用到,電路板的真實數目將由模型化在硬體中的用戶設計的複雜性和大小來決定。具有中等複雜程度的用戶設計硬體模型比具有較高複雜程度的用戶設計硬體模型需要更少的電路板。為了實現可量測性,除了一些板間互連線路以外,電路板2146-2149實質上是相同的。這些互連線路使得在一個晶片(舉例來說,電路板2146中的晶片2157)裡的部分用戶設計硬體模型,與被物理放置在另外的一個晶片中(舉例來說,電路板2148中的晶片2161)、相同用戶設計中的硬體模型的另外部分進行通信。簡短參照圖74,了解這個協同校驗系統的互連結構,同時參照圖8和36-44,以及本專利說明書中它們相應的描述。電路板2148是一個代表性的電路板。電路板2148是這個由四個電路板組成的布局(排除電路板2145(電路板m1))中的第三個電路板。因此,它不是一個需要適當的互連線路終端的末端板。電路板2148包括一個內部輸入/輸出控制器2158,一些可重新配置的邏輯元件(舉例來說,FPGA晶片)2159-2166,高端組FD總線2167,低端組FD總線2168,高端組存儲器2169,和低端組存儲器2170。如上文所述,在一個實施例中,內部輸入/輸出控制器2158是如上文圖22(單元700)和圖56(單元1200)等示範圖中得到描述和舉例說明的FPGA輸入/輸出控制器。同樣地,高端和低端組存儲器設備2169和2170是在上文,舉例來說,圖56(SRAM1205和1206))中被描述和舉例說明的SRAM存儲器裝置。在一個實施例中,高端和低端組FD總線2167和2168是如上文圖22(FPGA總線718和719)、圖56(FD總線1212和1213)和圖57(FD總線1282)等示範圖中得到描述和舉例說明的FD總線或FPGA總線。為了將協同校驗系統2140連接到目標系統2120和其他輸入/輸出設備,提供以一個外部輸入/輸出擴展器的形式出現的一個外部接口2139。在目標系統一側,外部輸入/輸出擴展器2139經由次級PCI總線2132和一個控制線路2131被連接到PCI橋接器2127上,用來傳輸軟體時鐘。在輸入/輸出設備一側,外部輸入/輸出擴展器2139經由總線2136-2138被連接到各種輸入/輸出設備,用於軟體時鐘的控制線路2133-2135和接腳分布數據。能被連接到輸入/輸出擴展器2139的輸入/輸出設備的數目由用戶決定。無論如何,根據需要,儘可能多的數據總線和軟體時鐘控制線路被提供到外部輸入/輸出擴展器2139中,以便將儘可能多的輸入/輸出設備連接到協同校驗系統2140,成功運行調試進程。在協同校驗系統2140一側,外部輸入/輸出擴展器2139經由數據總線2175、軟體時鐘控制線路2174和掃描控制線路2173被連接到外部輸入/輸出控制器2152。數據總線2175被用來在外部世界(目標系統2120和外部輸入/輸出設備)和協同校驗系統2140之間傳遞接腳分布數據。軟體時鐘控制線路2174被用來從RCC計算系統2141到外部世界傳輸軟體時鐘數據。出現在控制線路2174和2131上的軟體時鐘由RCC計算系統2141中的主軟體內核來產生。RCC計算系統2141經由PCI總線2171、PCI控制器2151、總線2171、三狀態緩衝器2179、局部總線2180、外部輸入/輸出控制器2152,和控制線路2174傳輸一個軟體時鐘給外部輸入/輸出擴展器2139。從外部輸入/輸出擴展器2139出發,軟體時鐘被作為時鐘輸入提供給目標系統2120(經由PCI橋接器2127),並經由控制線路2133-2135提供給其他的外部輸入/輸出設備。因為軟體時鐘起到主時鐘源的功能,所以目標系統2120和輸入/輸出設備以比較慢的速度運行。然而,提供到目標系統2120和外部輸入/輸出設備的數據被同步到軟體時鐘速度,正如RCC計算系統2141中的軟體模型和RCC硬體陣列2190中的硬體模型。同樣地,來自目標系統2120和外部輸入/輸出設備的數據與軟體時鐘同步被傳輸到協同校驗系統2140。因此,在外部接口和協同校驗系統之間傳輸的輸入/輸出數據與軟體時鐘同步。本質上,每當數據在它們之間傳遞時,軟體時鐘使外部輸入/輸出設備和目標系統的運行與協同校驗系統(在RCC計算系統和RCC硬體陣列中)的運行保持同步。軟體時鐘作被用來進行數據輸入運行和數據輸出運行。對數據輸入運行而言,當一個指示器(在下文討論)鎖存來自RCC計算系統2141的軟體時鐘到外部接口時,其他指示器將從外部接口到RCC硬體陣列2190的硬體模型中的所選內部節點鎖存這些輸入/輸出數據。在軟體時鐘被傳輸到外部接口這個周期內,指示器將以一個接一個的方式鎖存這些輸入/輸出數據。當所有的數據都被鎖存時,RCC計算系統能再一次產生另一個軟體時鐘,以便在需要時在另一個軟體時鐘周期內鎖存更多數據。對數據輸出運行而言,RCC計算系統能將軟體時鐘傳輸給外部接口,而且隨後在指示器的幫助下,控制從RCC硬體陣列2190到外部接口的硬體模型內部節點的數據的選通。再一次,指示器以一個接一個的方式從內部節點到外部接口對數據進行門控。如果更多的數據需要被傳輸到外部接口,RCC計算系統能產生另一個軟體時鐘周期,然後啟動所選指示器來對數據進行門控,送到外部接口。軟體時鐘的產生受到嚴格的控制,因此允許協同校驗系統使協同校驗系統和連接到外部接口的任何外部輸入/輸出設備之間的數據傳輸和數據估算保持同步。掃描控制線路2173被用來允許協同校驗系統2140針對可能出現的任何數據掃描數據總線2132、2136、2137,和2138。支持掃描信號的外部輸入/輸出控制器2151中的邏輯電路是一個指示器邏輯電路,其中各種輸入被提供作為經由一個MOVE信號行進到下一個輸入之前的一特定時間周期的輸出。這個邏輯電路類似於圖11中的方案。實際上,掃描信號起到一個針對一個多路復用器的選擇信號的功能,除了它在輪轉順序中選擇對多路復用器的各種輸入。因此,在一個時序周期中,掃描控制線路2173上的掃描信號為可能來自目標系統2120的數據對數據總線2132進行取樣操作。在下一個時序周期中,掃描控制線路2173上的掃描信號為可能來自一個可能被連接在那裡的外部輸入/輸出設備的數據對數據總線2136進行取樣操作。在下一個時序周期中,數據總線2137被取樣,等等,所以協同校驗系統2140在這個調試期間能接收並處理來自目標系統2120或外部輸入/輸出設備的所有接腳分布數據。由協同校驗系統2140從取樣數據總線2132、2136、2137和2138的過程中收到的任何數據都被經由外部輸入/輸出控制器2152傳輸到外部緩衝器2154。注意,圖69中的配置假設目標系統2120包含主CPU,而且用戶設計是一些外設,例如一個視頻控制器、網絡適配器、圖形適配器、滑鼠或一些其他的支持設備、卡或邏輯電路。因此,目標系統2120包含連接到主PCI總線2129的目標應用程式(包括作業系統),而且協同校驗系統2140包含用戶設計,且被連接到次級PCI總線2132。根據用戶設計的主題,該配置可能是完全不同的。舉例來說,如果用戶設計是一個CPU,目標應用程式會在協同校驗系統2140的RCC計算系統2141中運行,而目標系統2120不再包含中央計算系統2121。實際上,總線2132現在會是一個主PCI總線,而總線2129會是一個次級PCI總線。實際上,用戶設計並非是支持中央計算系統2121的外設,相反,用戶設計當前是主計算中心,而所有的其他外設都支持用戶設計。為外部接口(外部輸入/輸出擴展器2139)和協同校驗系統2140之間的傳輸數據的控制邏輯位於每個電路板2145-2149中。控制邏輯的主要部分位於外部輸入/輸出控制器2152中,但是其他部分位於各種內部輸入/輸出控制器(舉例來說,2156和2158)以及可重新配置的邏輯元件中(舉例來說,FPGA晶片2159和2165)。為實現說明的目的,有必要僅顯示這個控制邏輯的一些部分,而不是所有的電路板中所有晶片相同的重複邏輯結構。圖69中的虛線2150內的協同校驗系統2140部分包含控制邏輯的一個子集。現在將參照圖70-73更詳細地討論這個控制邏輯。控制邏輯這個特定子集中的部件包括外部輸入/輸出控制器2152、三狀態緩衝器2179、內部輸入/輸出控制器2156(CTRL1)、可重新配置的邏輯元件2157(晶片01,表示電路板1的晶片0),和部分連接到這些部件的各種總線以及部分控制線路。具體而言,圖70舉例說明了用於數據輸入周期的控制邏輯部分,其中來自外部接口(外部輸入/輸出擴展器2139)和RCC計算系統2141的數據被傳輸到RCC硬體陣列2190。圖72舉例說明了數據輸入周期的時序圖。圖71舉例說明了用於數據輸出周期的控制邏輯部分,其中來自RCC硬體陣列2190的數據被傳輸到RCC計算系統2141和外部接口(外部輸入/輸出擴展器2139)。圖73舉例說明了數據輸出周期的時序圖。數據輸入根據本發明一個實施例的數據輸入控制邏輯負責處理從RCC計算系統或外部接口到RCC硬體陣列傳輸的數據。數據輸入控制邏輯的一個特定子集2150(見圖69)被顯示在圖70中,而且包括外部輸入/輸出控制器2200、三狀態緩衝器2202、內部輸入/輸出控制器2203、可重新配置的邏輯元件2204和允許在其中進行數據傳輸各種總線和控制線路。在這個數據輸入實施例中也顯示了外部緩衝器2201。這個子集舉例說明了數據輸入運行所必需的邏輯,其中來自外部接口和RCC計算系統的數據被傳輸到RCC硬體陣列。圖70數據輸入控制邏輯和圖72的數據輸入時序圖將會在一起得到討論。數據周期的兩種類型在本發明的這個數據輸入實施例中得到使用——一個全局周期和一個軟體到硬體(S2H)周期。全局周期被用於任何指向RCC硬體陣列中的所有晶片的數據,例如時鐘、重新設置和一些其他被指向RCC硬體陣列中的許多不同節點的S2H數據。對於這些後者的″全局″S2H數據,更可行的方法時經由全局周期將這些數據送出去,而不是經由後續S2H數據。軟體到硬體周期被用來在所有的電路板中從一個晶片到另一個晶片以順序的方式將數據從RCC計算系統中的測試平臺處理,發送給RCC硬體陣列。因為用戶設計的硬體模型被分布在幾個電路板上,測試平臺數據必須被提供到每個晶片以便進行數據估算。因此,數據被以順序的方式傳輸到每個晶片中的每個內部節點,一次傳輸到一個內部節點。後續的傳輸允許一個被指定給一特定內部節點的特定數據被RCC硬體陣列中的所有晶片處理,因為硬體模型被分布在多個晶片之中。對於該數據估算而言,協同校驗提供兩個地址空間-S2H和CLK。如上文所述,S2H和CLK空間是從內核到硬體模型的主輸入。硬體模型實質上保持用戶電路設計的所有寄存器部件和組合部件。此外,軟體時鐘被模型化在軟體中,且被提供在CLK輸入/輸出地址空間中,以便與硬體模型連接。內核推動模擬時間,尋找有效的測試平臺部件,且估算時鐘部件。當任何時鐘邊緣被內核偵測到的時候,寄存器和存儲器被更新,而且值通過組合部件被傳播。因此,如果硬體加速模式被選中,在這些空間中的任何值改變都將觸發硬體模型改變邏輯狀態。在數據傳輸時,DATA_XSFR信號處於邏輯″1″。在這個期間,局部總線2222-2230將被協同校驗系統用來根據下列數據周期傳輸數據(1)從RCC計算系統到RCC硬體陣列和CLK空間的全局數據;(2)從外部接口到RCC硬體陣列和外部緩衝器的全局數據;和(3)從RCC計算系統到RCC硬體陣列的S2H數據,在每個電路板中,一次一個晶片。因此,最初兩個數據周期是全局周期的部分,而最後一個數據周期是S2H周期的部分。對於數據輸入全局周期的第一個部分(其中來自RCC計算系統的全局數據被發送去RCC硬體陣列)而言,外部輸入/輸出控制器2200使2255線路上的一個CPU_IN信號變為邏輯″1″。線路2255被連接到三狀態緩衝器2202的一個啟動輸入端。通過線路2255上的邏輯″1″,三狀態緩衝器2202允許局部總線2222上的數據傳給三狀態緩衝器2202另一側的局部總線2223-2230。在這個特定例子中,局部總線2223、2224、2225、2226、2227、2228、2229,和2230分別對應於LD3、LD4(來自外部輸入/輸出控制器2200)、LD6(來自外部輸入/輸出控制器2200)、LD1、LD6、LD4、LD5和LD7。全局數據從這些局部總線傳輸到內部輸入/輸出控制器2203中的總線線路2231-2235,然後再到FD總線線路2236-2240。在這個例子中,FD總線線路2236、2237、2238、2239,和2240分別對應於FD總線線路FD1、FD6、FD4、FD5和FD7。這些FD總線線路2236-2240被連接到可重新配置的邏輯元件2204中的鎖存器2208-2213的輸入端。在這個例子中,可重新配置的邏輯元件對應於晶片0_1(也就是,電路板1中的晶片0)。同時,FD總線線路2236被連接到鎖存器2208,FD總線線路2237被連接到鎖存器2209和2211,FD總線線路2238被連接到鎖存器2210,FD總線線路2239被連接到鎖存器2212,FD總線線路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。因為這些鎖存器的啟動輸入被連接到這些指示器,所以鎖存器在沒有各自的正確指示器信號時,不能將數據鎖存到用戶設計的硬體模型中它們打算鎖存的目的地節點。這些全局和S2H指示器信號由一個數據輸入指示器狀態機2214在輸出2254上產生。數據輸入指示器狀態機2214由線路2253上的DATA_XSFR和F_WR信號所控制。內部輸入/輸出控制器2203在線路2253上產生DATA_XSFR和F_WR信號。每當RCC硬體陣列和RCC計算系統或者和外部接口之間需要數據傳輸時,DATA_XSFR總是處於邏輯″1″。F_WR信號與F_RD信號相反,當需要對RCC硬體陣列進行一個寫操作時,它處於邏輯″1″。一個經由F_RD信號的讀操作需要從RCC硬體陣列到RCC計算系統或外部接口的數據傳輸。如果DATA_XSFR和F_WR信號都處於邏輯″1″,數據輸入指示器狀態機能按照適當的編程順序產生合適的全局或S2H指示器信號。這些鎖存器的輸出2247-2252被連接到用戶設計硬體模型中的各種內部節點。一些這種內部節點對應於用戶設計的輸入接腳分布。用戶設計有其他內部節點,它們正常情況下不可以經由接腳分布來訪問,但是這些非接腳分布內部節點可以實現其他的調試目的,為需要在用戶設計中將激勵應用到各種內部節點的設計者提供靈活性,無論它們是否是輸入接腳分布。對於被外部接口應用到用戶設計的精細硬體模型的激勵而言,數據輸入邏輯和那些對應於輸入接腳分布的內部節點是有關聯的。舉例來說,如果用戶設計是一個CRTC6845視頻控制器,那麼一些輸入接腳分布可能如下所述LPSTB-alightpenstrobepin(一個光筆選通接腳)~RESET-lowlevelsignaltoresetthe6845controller(低電平信號以復位6845控制器)RS-registerselect(寄存器選擇)E-enable(啟動)CLK-clock(時鐘)~CS-Chipselect(晶片選擇)在這個視頻控制器中,其他輸入接腳分布也是可用的。基於與外部世界連接的輸入接腳分布的數目,節點的數目得到確定,而且因此鎖存器的數目和指示器的數目也可以得到確定。被配置在RCC硬體陣列中的一些硬體模型,可能有,舉例來說,三十個分開的鎖存器,它們與每一個GLB_PTR0、GLB_PTR1、GLB_PTR2、GLB_PTR3、S2H-PTR0和S2H_PTR1是相關的,形成總數為180的鎖存器(=30X6)。在其他的設計中,如果需要的話可以使用更多的全局指示器例如GLB_PTR4到GLB_PTR30。同樣地,更多S2H指示器例如S2H_PTR2到S2H_PTR30也可以根據需要使用。這些指示器和它們對應的鎖存器基於每個用戶設計的硬體模型的需求。回到圖70和72,只有當鎖存器被用適當的全局指示器或S2H指示器信號啟動時,FD總線線路上的數據才設法進入這些內部節點。否則,這些內部節點得不到FD總線上任何數據的驅動。在CPU_IN=1時序周期的前半周期內,當F_WR處於邏輯″1″時,GLB_PTR0處於邏輯″1″,以便經由線路2247驅動FD1上的數據到對應的內部節點。如果存在依賴GLB_PTR0啟動的其他鎖存器,這些鎖存器也會鎖存數據到它們對應的內部節點。在CPU_IN=1時序周期的後個半周期中,F_WR再一次進入邏輯″1″,觸發GLB_PTR1上升到邏輯″1″。這驅動FD6上的數據到連接到線路2248的內部節點。這也將軟體時鐘信號發送到線路2223上,以便被鎖存器2205和啟動線路2215上的GLB_PTR1信號鎖存到線路2216上。這個軟體時鐘被傳輸到目標系統和其他外部輸入/輸出設備的外部時鐘輸入端。因為GLB_PTR0和GLB_PTR1僅僅被用於數據輸入全局周期的第一部分,CPU_IN回到邏輯″0″,而且這就完成了全局數據從RCC計算系統到RCC硬體陣列的傳輸。現在將討論數據輸入全局周期的第二部分,其中來自外部接口的全局數據被傳輸到RCC硬體陣列和外部緩衝器。同樣,來自目標系統或外部輸入/輸出設備的、被引向用戶設計的各種輸入接腳分布信號必須被提供到硬體模型和軟體模型。通過使用適當的指示器,這些數據能被傳輸到硬體模型,並且被鎖存以便驅動內部節點。通過首先將它們儲存在外部緩衝器2201中以便稍後由RCC計算系統取回,並更新軟體模型的內部狀態,這些數據也被傳輸到軟體模型。CPU_IN當前處於邏輯″0″,而且EXT_IN處於邏輯″1″。因此,外部輸入/輸出控制器2200中的三狀態緩衝器2206被啟動,以便將數據放在PCI總線線路上(例如總線線路2217和2218)。這些PCI總線線路也被連接至FD總線線路2219,以便儲存到外部緩衝器2201中。在EXT_IN信號處於邏輯″1″的時序周期的前半周期中,GLB_PTR2處於邏輯″1″。這將鎖存在FD4上的數據(經由總線線路2217、2224,和局部總線線路2228(LD4)),這些數據將被鎖存到連接到線路2249上的硬體模型中的內部節點。在EXT_IN信號處於邏輯″1″的時序周期的後半周期中,GLB_PTR3處於邏輯″1″。這將鎖存FD6上的數據(經由總線線路2218,2225,和局部總線線路2227(LD6)),這些數據將被鎖存到連接到線路2250上的硬體模型中的內部節點。如上文所述,通過首先將它們儲存在緩衝器2201中以便稍後由RCC計算系統取回並更新軟體模型的內部狀態,這些來自目標系統或一些其他外部輸入/輸出設備的數據也被傳輸到軟體模型。總線線路2217和2218上的這些數據在FD總線FD[630]2219上被提供給外部緩衝器2201。在外部緩衝器2201中儲存每個數據的特定存儲器地址由存儲器地址計數器2207經由總線2220提供到外部緩衝器2201。為了實現這些儲存,WR_EXT_BUF信號被經由線路2221提供到外部緩衝器2201。在外部緩衝器2201充滿之前,RCC計算系統將會讀外部緩衝器2201的內容,以便對軟體模型進行適當的更新。在RCC硬體陣列中被傳輸到硬體模型的各種內部節點的任何數據將可能導致硬體模型的一些內部狀態改變。因為RCC計算系統在軟體中具有整個用戶設計的模型,這些在硬體模型中的內部狀態變化也應該在軟體模型中得到反映。這就完成了數據輸入的全局周期。現在將討論S2H周期。S2H周期被用來從RCC計算系統到RCC硬體陣列傳輸測試平臺數據,然後按序列為每個電路板從一個晶片向另一個晶片傳輸那個數據。CPU_IN信號進入邏輯″1″,而EXT_IN信號進入邏輯″0″,表明數據傳輸是在RCC計算系統和RCC硬體陣列之間進行。不涉及外部接口。CPU_IN信號也啟動三狀態緩衝器2202,以便允許數據從局部總線2222進入內部輸入/輸出控制器2203。在CPU_IN=1時序周期的開始處,S2H_PTR0進入邏輯″1″,它可以鎖存FD5上的數據(經由局部總線2222、局部總線2229、總線線路2234,以及FD總線2239),這些數據將被鎖存到連接到線路2251上的硬體模型中的內部節點。在CPU_IN=1時序周期的第二部分中,S2H_PTR1進入邏輯″1″,它可以鎖存在FD7上的數據(經由局部總線2222、局部總線2230、總線線路2235,以及FD總線2240),這些數據將被鎖存到連接到線路2252上的硬體模型中的內部節點。在後續數據估算期間,來自RCC計算系統的數據被首先傳輸到晶片m1,然後到晶片0_1(也就是,電路板1上的晶片0),晶片1_1(也就是,電路板1上的晶片1),直到最後一個電路板上的最後一個晶片,晶片7_8.(也就是,電路板8上的晶片7)。如果晶片m2是可用的,數據也被移進這個晶片。在這個數據傳輸結束的時候,DATA_XSFR返回邏輯″0″。注意,來自外部接口輸入/輸出的數據被當作全局數據,並在全局周期期間得到處理。這就完成了數據輸入控制邏輯和數據輸入周期的討論。數據輸出現在討論本發明的數據輸出控制邏輯實施例。根據本發明實施例的數據輸出控制邏輯負責處理從RCC硬體陣列被傳輸到RCC計算系統和外部接口的數據。在響應激勵(外部或其它的)處理數據的期間,硬體模型產生某種輸出目標應用程式或一些輸入/輸出設備可能需要的數據。這些輸出數據可能是實質的數據、地址、控制信息或其他應用程式或設備可能在自身處理中需要的其他有關信息。進入RCC計算系統(它在軟體中可能有其他外部輸入/輸出設備的模型)、目標系統或外部輸入/輸出設備的這些輸出數據被提供在各種內部節點上。如上文關於數據輸入邏輯的討論的那樣,一些這種內部節點對應於用戶設計的輸出接腳分布。用戶設計有其他的內部節點,它們正常是不能經由接腳分布來訪問的,但是這些非接腳分布的內部節點針對其他的調試目的,以便為設計者提供靈活性,他們希望在用戶設計中的各種內部節點讀並且分析激勵,不管它們是否是輸出接腳分布。對於來自用戶設計的精細硬體模型、被應用到外部接口或RCC計算系統(它可能在軟體中有其他輸入/輸出設備的模型)得激勵而言,數據輸出邏輯和對應於輸出引出腳的那些內部節點是有關聯的。舉例來說,如果用戶設計是一個CRTC6845視頻控制器,一些輸出接腳分布可能如下MA0-MA13-memoryaddress(存儲器地址)D0-D7-databus(數據總線)DE-displayenable(顯示啟動)CURSOR-cursorposition(光標位置)VS-verticalsynchronization(垂直同步)HS-horizontalsynchronization(水平同步)在這個視頻控制器中的其他輸出引出腳也是可用的。基於與外部世界連接的輸出接腳分布的數目,節點的數目以及門控邏輯的數目和指示器數目也能得到容易的確定。因此,視頻控制器上的輸出接腳分布MA0-MA13為視頻RAM提供存儲器地址。VS輸出接腳分布為垂直同步提供信號,並因此引起顯示器上的一個垂直回掃。輸出接腳分布D0-D7是八個終端,它們形成雙向數據總線用於目標系統中CPU訪問內部6845寄存器。這些輸出接腳分布對應於硬體模型中的某些內部節點。當然,這些內部節點的數目和性質根據用戶設計而不同。來自這些輸出接腳分布內部節點的數據必須被提供到RCC計算系統,因為RCC計算系統在軟體中包含整個用戶設計的一個模型,而且在硬體模型中發生的任何事件都必須被傳遞到軟體模型,以便作出相應的變化。這樣,軟體模型將具有與硬體模型一致的信息。此外,RCC計算系統可能有輸入/輸出設備的設備模型,用戶或設計者決定將這些設備模型化在軟體中,而不是將一個真實設備連結到外部輸入/輸出擴展器上的埠之一。舉例來說,用戶可能作出決定,認為將顯示器或揚聲器模型化在軟體中要比在外部輸入/輸出擴展器上的埠之一插入一個真實的顯示器或揚聲器更容易、且更有效。此外,來自硬體模型中的這些內部節點的數據必須被提供到目標系統和任何其他外部輸入/輸出設備。為了讓這些輸出接腳分布內部節點中的數據被傳輸到RCC計算系統和目標系統以及其他的外部輸入/輸出設備,根據本發明一個實施例的數據輸出控制邏輯被提供在協同校驗系統中。數據輸出控制邏輯使用數據輸出周期,該周期涉及從RCC硬體陣列2190到RCC計算系統2141以及外部接口(外部輸入/輸出擴展器2139)的數據傳輸。在圖69中,用於在外部接口(外部輸入/輸出擴展器2139)和協同校驗系統2140之間傳輸數據的控制邏輯存在於每個電路板2145-2149中。控制邏輯的主要部分存在於外部輸入/輸出控制器2152中,但是其他部分存在於各種內部輸入/輸出控制器(舉例來說,2156和2158)和可重新配置的邏輯元件中(舉例來說,FPGA晶片2159和2165)。同樣,為了說明的目的,在所有的電路板中為所有的晶片只展現這個控制邏輯的一些部分,而不是相同的重複邏輯結構。圖69中虛線2150裡面的協同校驗系統2140部分包含控制邏輯的一個子集。現在將參照圖71和73詳細討論這個控制邏輯。圖71舉例說明了用於數據輸出周期的控制邏輯部分。圖73舉例說明了數據輸出周期的時序圖。數據輸出控制邏輯的一個特定子集被顯示在圖71中,並且包括外部輸入/輸出控制器2300、三狀態緩衝器2301、內部輸入/輸出控制器2302、一個可重新配置的邏輯元件2303,以及允許數據在其間傳輸的各種總線和控制線路。這個子集顯示了用於數據輸出運行必需的邏輯,其中來自外部接口和RCC計算系統的數據被傳輸到RCC硬體陣列。圖71的數據輸出控制邏輯和圖73的數據輸出時序圖將在一起得到討論。與數據輸入周期的二周期類型相反,數據輸出周期只包括一個類型的周期。數據輸出控制邏輯需要來自RCC硬體模型的數據被順序傳輸到(1)RCC計算系統,然後到(2)RCC計算系統和外部接口(到目標系統和外部輸入/輸出設備)。具體而言,數據輸出周期需要在RCC硬體陣列中來自硬體模型內部節點的數據首先被傳輸到RCC計算系統,然後到RCC計算系統,其次到每個晶片內的外部接口,在每個電路板中,一次一個晶片,而且一次一個電路板。如同數據輸入控制邏輯一樣,指示器將被用來從內部節點到RCC計算系統和外部接口來選擇(或門控)數據。在圖71和73中舉例說明的一個實施例中,一個數據輸出指示器狀態機2319在總線2359上產生五個指示器H2S_PTR[40],既用於硬體到軟體數據,也用於硬體到外部接口數據。數據輸出指示器狀態機2319由線路2358上的DATA_XSFR和F_RD信號控制。內部輸入/輸出控制器2302產生線路2358上的DATA_XSFR和F_RD信號。只要RCC硬體陣列和RCC計算系統或外部接口之間需要數據傳輸時,DATA_XSFR總是處於邏輯″1″。F_RD信號與F_WR信號相反,只要需要從RCC硬體陣列進行讀操作,它就處於邏輯「1″。如果DATA_XSFR和F_RD信號都處於邏輯″1″,數據輸出指示器狀態機2319就能在適當的編程序列中產生適當的H2S指示器信號。其他的實施例可能因為用戶設計的需要而使用較多的指示器(或較少的指示器)。這些H2S指示器信號被提供到一個門控邏輯。門控邏輯的一組輸入2353-2357被指向一些「與」門2314-2318。另一組輸入2348-2352被連接到硬體模型的內部節點。因此,「與」門2314具有來自一個內部節點的輸入2348,和來自H2S_PTR0的輸入2353;「與」門2315具有來自一個內部節點的輸入2349和來自H2S_PTR1的輸入2354;「與」門2316具有來自一個內部節點的輸入2350和來自H2S_PTR2的輸入2355;「與」門2317具有來自一個內部節點的輸入235和來自H2S_TR3的輸入2356;「與」門2318具有來自一個內部節點的輸入2352和來自H2S_PTR4的輸入2357。沒有正確的H2S_PTR指示器信號,內部節點就不能被驅動到RCC計算系統或外部接口。這些「與」門2314-2318的各自輸出2343-2347被連接到「或」門2310-2313。因此,「與」門輸出2343被連接到「或」門2310的輸入;「與」門輸出2344被連接到「或」門2311的輸入;「與」門輸出2345被連接到「或」門2311的輸入;「與」門輸出2346被連接到「或」門2312的輸入;「與」門輸出2347被連接到「或」門2313的輸入。注意,「與」門2315的輸出2344不被連接到一個獨享的「或」門;相反,輸出2344被連接到「或」門2311,2311同時也被連接到「與」門2316的輸出2345。「或」門2310-2313的其它輸入2360-2366能被連接到其他的「與」門的輸出(未顯示),這些「與」門自己被連接到其他內部節點和H2S_PTR指示器。這些「或」門和它們的特定輸入的使用以用戶設計和被配置的硬體模型為基礎。因此,在其他的設計中,可能使用較多的指示器,而且來自「與」門2315的輸出2344被連接到一個不同的「或」門,而不是「或」門2311。「或」門2310-2313的輸出2339-2342被連接到FD總線線路FD0、FD3、FD1和FD4。在用戶設計的這個特定例子中,只有四個輸出接腳分布信號將被傳輸到RCC計算系統和外部接口。因此,FD0被連接到「或」門2310的輸出;FD3被連接到「或」門2311的輸出;FD1被連接到「或」門2312的輸出;FD4被連接到「或」門2313的輸出。這些FD總線線路經由內部輸入/輸出控制器2302中的內部線路2334-2338被連接到局部總線線路2330-2333。在這個實施例中,局部總線線路2330是LD0,局部總線線路2331是LD3,局部總線線路2332是LD1,局部總線線路2333是LD4。為了實現將這些局部總線線路2330-2333上的數據傳輸到RCC計算系統,這些局部總線線路被連接到三狀態緩衝器2301。在它的正常狀態中,三狀態緩衝器2301允許數據從局部總線線路2330-2333進入到局部總線2320。對比而言,在數據輸入期間,只有當CPU_IN信號被提供到三狀態緩衝器2301的時候,數據才被允許從RCC計算系統通過到RCC硬體陣列。為了使這些局部總線線路2330-2333上的數據被傳輸到外部接口,這裡提供了線路2321-2324。線路2321被連接到線路2330和外部輸入/輸出控制器2300中的一些鎖存器(未顯示);線路2322被連接到線路2331和外部輸入/輸出控制器2300中的一些鎖存器(未顯示);線路2323被連接到線路2332和外部輸入/輸出控制器2300中的鎖存器2305;線路2324被連接到線路2333和外部輸入/輸出個控制器2300中的鎖存器2306。這些鎖存器2305和2306的每個輸出都被連接到一個緩衝器,接著到外部接口,然後被連接到目標系統或外部輸入/輸出設備的適當輸出接腳分布。因此,鎖存器2305的輸出被連接到緩衝器2307和線路2327。同樣,鎖存器2306的輸出被連接到緩衝器2308和線路2328。另外一個鎖存器(未顯示)的另外一個輸出可以被連接到線路2329。在這個例子中,線路2327-2329分別相應目標系統或某外部輸入/輸出設備的導線1、導線4和導線3。最終,在一個數據從硬體模型到外部接口進行傳輸期間,用戶設計的硬體模型得到配置,以便連接到線路2350的內部節點對應線路2329上的導線3,連接到線路2351的內部節點對應於線路2327上的導線1,而且連接到線路2352的內部節點對應於線路2328上的導線4。同樣,導線3對應於線路2331上的LD3,導線1對應於線路2332上的LD1,而且導線4對應於線路2333上的LD4。一個LUT表2309被連接到這些鎖存器2305和2306的啟動輸入。LUT表2309由線路2367上觸發LUT表地址計數器2304運行的F_RD信號所控制。在每個計數器增量處,指示器在LUT表2309中啟動一個特定的行。如果該特定行中的一項(或比特)處於邏輯″1″,連接到LUT表2309中那個特定項的LUT輸出線路將啟動它的對應鎖存器,並驅動數據進入外部接口,且最終進入目標系統或某外部輸入/輸出設備中的所需目的地。舉例來說,LUT輸出線路2325被連接到鎖存器2305的啟動輸入,而且LUT輸出線路2326被連接到鎖存器2306的啟動輸入。在這個例子中,LUT表2309的行0-3被編程來啟動對應於晶片m1中的內部節點輸出接腳分布導線的鎖存器。同樣,行4-6被編程來啟動對應於晶片0_1(也就是,電路板1中的晶片0)中的內部節點輸出接腳分布導線的鎖存器。在行4中,比特3處於邏輯″1″。在行5中,比特1處於邏輯″1″。在行6中,比特4處於邏輯″1″。所有其他項目或比特位都處於邏輯″0″。因為一個單一輸出接腳分布線路不能驅動多重輸入/輸出設備,所以對LUT表中任何給定比特位(或列)而言,只有一項處於邏輯″1″。換句話說,硬體模型中的一個輸出接腳分布內部節點只能為連接到外部接口的一個單一線路提供數據。如上文所述,數據輸出控制邏輯需要RCC硬體模型中的每個晶片中的每個可重新配置的邏輯元件中的數據被順序傳輸到(1)RCC計算系統,然後到(2)RCC計算系統和外部接口(到目標系統和外部輸入/輸出設備)。RCC計算系統需要這些數據,因為它在軟體中具有一些輸入/輸出設備的模型,而且對那些沒被用於這些模型化的輸入/輸出設備之一的數據而言,RCC計算系統需要監測它們,以便其內部狀態與RCC硬體陣列中的硬體模型的狀態是一致的。在圖71和73中舉例說明的這個例子中,只有七個內部節點將被驅動,用於輸出到RCC計算系統和外部接口。那些內部節點中的二個節點位於晶片m1中,其他五個內部節點位於晶片0_1中(也就是,電路板1中的晶片0)。當然,對這個特定的用戶設計而言,可能需要在這些晶片和其他晶片中的其他內部節點,但圖71和73將只舉例說明這七個節點。在數據傳輸期間,DATA_XSFR信號處於邏輯″1″。在這個期間,局部總線2330-2333將被協同校驗系統用來將來自RCC硬體陣列中每個電路板中的每個晶片的數據順序傳輸到RCC計算系統和外部接口。DATA_XSFR和F_RD信號控制數據輸出指示器狀態機的運行,以便產生適當的指示器信號H2S_PTR[40]輸出接腳分布內部節點的適當門電路。F_RD信號也控制LUT表地址計數器2304,以便將內部節點數據傳輸到外部接口。晶片m1中的內部節點將首先得到處理。當F_RD在數據傳輸周期開始時升到邏輯″1″的時候,晶片m1中的H2S_PTR0進入邏輯″1″。這經由三狀態緩衝器2301和局部總線2320驅動晶片m1中的那些內部節點中的、取決於H2S_PTR0的數據進入RCC計算系統中。LUT表地址計數器2304對LUT表2309列0進行計數和指向,以便將晶片m1的適當數據鎖存到外部接口。當F_RD信號再一次進入邏輯″1″的時候,內部節點中能被H2S_PTR1驅動的數據被傳輸到RCC計算系統和外部接口。H2S_PTR1進入邏輯″1″,並且對應於第二F_RD信號,LUT表地址計數器2304對LUT表2309列1進行計數和指向,以便將晶片m1的適當數據鎖存到外部接口。可重新配置的邏輯元件2303(也就是,晶片0_1,或電路板1中的晶片0)的五個內部節點現在將得到處理。在這個例子中,來自與H2S_PTR0和H2SPTR1有關的兩個內部節點的數據將只被傳輸到RCC計算系統。來自與H2S_PTR2,H2S_PTR3和H2S_PTR4有關的三個內部節點的數據將被傳輸到RCC計算系統和外部接口。當F_RD升到邏輯″1″的時候,晶片2303中的H2S_PTR0進入邏輯″1″。這驅動晶片2303中的內部節點裡取決於H2S_PTR0的數據,使其經由三狀態緩衝器2301和局部總線2320進入RCC計算系統。在這個例子中,連接到線路2348的內部節點取決於線路2353上的H2S_PTR0。當F_RD信號再一次進入邏輯″1″的時候,內部節點中能被H2S_PTR1驅動的數據被傳輸到RCC計算系統。這裡,連接到線路2349上的內部節點受到影響。這個數據被驅動去線路2331和2322上的LD3。當F_RD信號再一次進入邏輯″1″的時候,H2S_PTR2進入邏輯″1″,而且在被連接到線路2350的內部節點裡的數據被提供到LD3上。這個數據被提供到RCC計算系統和外部接口。三狀態緩衝器2301允許數據傳輸到局部總線2320,然後進入RCC計算系統之內。至於外部接口,通過啟動H2S_PTR2信號,這個數據被驅動到在線路2331和2322上的LD3。響應於F_RD信號,LUT表地址計數器2304計數並指向LUT表2309的列4,以便將適當的數據從這個連接到線路2350上的內部節點鎖存到位於外部接口的線路2329(導線3)。當F_RD信號再一次進入邏輯″1″的時候,H2S_PTR3進入邏輯″1″,而且在被連接到線路2351的內部節點裡的數據被提供到LD1上。這個數據被提供到RCC計算系統和外部接口。三狀態緩衝器2301允許數據傳輸到局部總線2320,然後進入RCC計算系統之內。至於外部接口,通過啟動H2S_PTR3信號,這個數據被驅動到線路2332和2323上的LD1。響應於F_RD信號,LUT表地址計數器2304計數並指向LUT表2309的列5,以便將適當的數據從這個連接到線路2351上的內部節點鎖存到位於外部接口的線路2327(導線1)。當F_RD信號再一次進入邏輯″1″的時候,H2S_PTR4進入邏輯″1″,而且在被連接到線路2352的內部節點裡的數據被提供到LD4上。這個數據被提供到RCC計算系統和外部接口。三狀態緩衝器2301允許數據傳輸到局部總線2320,然後進入RCC計算系統之內。至於外部接口,通過啟動H2S_PTR4信號,這個數據在線路2333和2324上被驅動到LD4。對響應於FRD信號,LUT表地址計數器2304計數並指向LUT表2309的列6,以便將適當的數據從這個連接到線路2352上的內部節點鎖存到位於外部接口的線路2328(導線4)。將晶片m1的內部節點中的數據首先驅動到RCC計算系統然後到RCC計算系統和外部接口的這個過程在其他晶片上以順序方式繼續進行。首先,晶片m1的內部節點受到驅動。其次,晶片0_1(晶片2303)的內部節點受到驅動。然後,晶片1_1如果有任何的內部節點,將受到驅動。這個過程繼續進行,直到最後一個電路板中的最後一個晶片中的最後一個節點被驅動。因此,如果晶片7_8有任何的內部節點,它都將受到驅動。最後,如果晶片m2有任何內部節點,它將受到驅動。雖然圖71顯示了用來僅在晶片2303中驅動內部節點的數據輸出控制邏輯,但是其他晶片也可能有內部節點需要被驅動進入RCC計算系統和外部接口。不管內部節點數目多少,數據輸出邏輯將驅動數據從一個晶片內部節點進入RCC計算系統,然後在另一個周期,驅動相同晶片中不同組的內部節點進入RCC計算系統和外部接口。數據輸出控制邏輯然後繼續行進到下一個晶片,並且運行相同兩步操作,即首先驅動指定到RCC計算系統的數據,然後驅動指定到外部接口的數據到RCC計算系統和外部接口。即使數據將被用於外部接口,RCC計算系統也必須了解那個數據,因為RCC計算系統在軟體中有整個用戶設計的一個模型,該模型必須具有與RCC硬體陣列中的硬體模型信息一致的內部狀態信息。電路板布局現在將參照圖74討論根據本發明的一個實施例的協同校驗系統的電路布局。電路板被安裝在RCC硬體陣列中。電路板布局類似於圖8、36-44舉例說明以及相關文本描述的布局。RCC硬體陣列包括六個電路板,在一個實施例中。電路板m1被連接到電路板1,而電路板m2被連接到電路板8。電路板1、電路板2、電路板3和電路板8的連接和安排在上文已經參照圖8和36-44得到描述。電路板m1包含晶片m1。電路板m1相關於其他電路板的互連結構便於晶片m1被連接到電路板1的晶片0、晶片2、晶片4和晶片6的南方向上的互連。類似的情況是,電路板m2包含晶片m2。電路板m2相關於其他電路板的互連結構便於晶片m2被連接到電路板8的晶片0、晶片2、晶片4和晶片6的南方向上的互連。X.範例為了說明本發明一個實施例的操作,將使用一個假設的用戶電路設計。在結構性寄存器轉移電平(RTL)HDL碼中,示範性用戶電路設計如下所示moduleregister(clock,reset,d,q)(;inputclock,d,reset;outputq;regq;always@(posedgeclockornegedgereset)<!--SIPO-->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-->#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中被再現。要理解本發明,不必了解這個電路設計的特定功能性細節。然而,讀者應該了解,用戶產生這個HDL碼以便設計一個電路用於模擬。通過這段碼所代表的電路執行用戶所設計的一些功能以便響應輸入信號,並產生一個輸出。圖27顯示了參照圖26討論的HDL碼的電路圖。在大部分情形下,在以HDL形式代表之前用戶可能實際上產生這種性質的一個電路圖。一些原理圖攫取工具允許輸入圖示性電路圖,而且在處理之後,這些工具產生可使用的碼。如圖28所示,模擬系統執行部件類型分析。作為代表用戶特定電路設計的本來在圖26中呈現的HDL編碼,現在已經得到了分析。由″moduleregister(clock,reset,d,q))))″開始,且以″endmodule″為結束,並進一步標記為編號900的最初幾行碼是一個寄存器定義區段。下幾行碼,編號907,代表了一些導線互連信息。本領域的技術人員應該了解,HDL中的導線變量被用來代表例如門電路之類的結構性實體之間的實際連結。因為HDL主要被用來模型化數字電路,因此導線變量是必需的變量。通常,″q″(舉例來說,q1、q2、q3)代表輸出導線線路,而且″d″(舉例來說,d1、d2、d3)代表輸入導線線路。編號908顯示了作為一個測試平臺輸入的″sigin″。編號909顯示了作為一個測試平臺輸出的″sigout″。編號901顯示了寄存器部件S1、S2和S3。編號902顯示了組合部件S4、S5、S6和S7。注意,組合部件S4-S7有輸出變量d1、d2和d3,它們是寄存器部件S1-S3的輸入。編號903顯示了時鐘部件S8。下幾個系列的碼的行號顯示了測試平臺部件。編號904顯示了測試平臺部件(驅動器)S9。編號905顯示了測試平臺部件(初始化)S10和S11。編號906顯示了測試平臺部件(顯示器)S12。下表概述了部件類型分析基於部件類型分析,系統為整個電路產生一個軟體模型,並為寄存器和組合部件產生一個硬體模型。S1-S3是寄存器部件,而S4-S7是組合部件。這些部件將被模型化在硬體中,以便允許模擬仿真系統的用戶或者在軟體中模擬整個電路,或者在軟體中模擬、並且在硬體中進行選擇性加速。無論在哪一種情況下,用戶都可對模擬和硬體加速模式進行控制。另外,用戶能用一個目標系統來仿真電路,同時仍然保留軟體控制,一個循環接一個循環啟動、停止、檢查值,和斷言值。圖29顯示了同樣的結構性RTL級HDL碼的一個信號網絡分析。如圖所示,S8、S9、S10和S11被模型化或提供在軟體中。S9本質上是測試平臺程序,它產生sigin信號,而S12本質上是測試平臺顯示器過程,它接收sigout信號。在這個例子中,S9產生一個隨機sigin來模擬電路的信號。然而,寄存器S1-S3和組合部件S4-S7被模型化到硬體和軟體中。對於軟體/硬體邊界而言,系統為將被用來連接軟體模型和硬體模型的各種駐留信號(也就是,q1、q2、q3、CLK、sigin、sigout)分配存儲器空間。下表列出了存儲器空間的分配圖30為這個例證性電路設計顯示了軟體/硬體劃分結果。圖30是有關軟體/硬體劃分的一個更可實現的例示圖。軟體端910通過軟體/硬體邊界911和PCI總線913被連接到硬體端912。軟體端910包含軟體內核,而且被它控制。一般而言,內核是控制全部模擬仿真系統運行的主要控制迴路。只要任何測試平臺程序被激活,內核就估算有效的測試平臺部件、估算時鐘部件、偵測時鐘邊緣以便更新寄存器和存儲器,並傳播組合邏輯數據,推動模擬時間。即使內核駐留在軟體端,它的一些運行或語句也能在硬體中運行,因為存在一個硬體模型來用於那些語句和運行。因此,軟體控制軟體模型和硬體模型。軟體端910包括用戶電路的整個模型,包括S1-S12。軟體端中的軟體/硬體邊界部分包括輸入/輸出緩衝器或地址空間S2H、CLK、H2S,以及REG。注意,驅動器測試平臺程序S9被連接到S2H存儲器空間,顯示器測試平臺程序S12被連接到H2S存儲器空間,而時鐘產生器S8被連接到CLK存儲器空間。輸出信號q1-q3的寄存器S1-S3將被指定到REG空間。硬體模型912具有組合部件S4-S7的模型,它駐留在純硬體端。在硬體模型912的軟體/硬體邊界上,sigout、sigin、寄存器輸出q1-q3和軟體時鐘916被實現。除了用戶定製電路設計的模型以外,系統還產生軟體時鐘和地址指示器。軟體時鐘提供信號來啟動寄存器S1-S3的輸入。如上文所述,根據本發明的軟體時鐘避免了競爭狀態和佔用時間擾亂問題。當主時鐘在軟體中偵測到時鐘邊緣的時候,偵測邏輯在硬體中觸發一個對應的偵測邏輯。時鐘邊緣寄存器916對寄存器啟動輸入及時地產生一個啟動信號,以便對任何駐留在寄存器輸入端的數據進行門控。為了描述和認識的目的,這裡也顯示了地址指示器914。地址指示器實際上在每個FPGA晶片中得到實現,並且允許數據以選擇性和順序性的方式被傳輸到它的目的地。組合部件S4-S7也被連接到寄存器部件S1-S3、sigin,和sigout。這些信號在輸入/輸出總線915上來自或被送達PCI總線913。在映射、布局,和步線步驟之前,一個完全的硬體模型被顯示在圖31中,不包括地址指示器。系統還沒有把模型映射到具體的晶片。寄存器S1-S3被連接到輸入/輸出總線和組合部件S4-S6。組合部件S7僅僅是寄存器S3的輸出q3。sigin、sigout和軟體時鐘920也被模型化。一旦硬體模型被確定了,系統就可以接著將模型進行映射、布局,以及在一個或多個晶片之內布線。這個特定例子實際上能在單一AlteraFLEX10K晶片上實現,但是為了指導的目的,這個例子將假設需要兩個晶片來實現這個硬體模型。圖32為這個例子顯示了這個例子的一個具體的硬體模型-晶片劃分結果。在圖32中,完整的模型(除了輸入/輸出和時鐘邊緣寄存器以外)與被虛線代表的晶片邊界一起顯示。這個結果由模擬仿真系統的編譯器在最後的配置文件產生之前產生。因此,硬體模型針對導線921、922和923在這兩個晶片之間至少需要三個導線。為了將在這兩個晶片(晶片1和晶片2)之間需要的引腳/導線數目減到最少,可以產生另一個模型-晶片劃分,或使用一個多路復用方案。分析圖32中顯示的這個特定劃分結果,在這兩個晶片之間的導線數目能被減少到兩個,方法是將sigin導線923從晶片2中移動到晶片1。事實上,圖33顯示了這樣一個劃分結果。雖然僅從導線數目上考慮,圖33中的特定劃分似乎比圖32中顯示的劃分更好,但是這個例子將假設模擬仿真系統在執行了映射、布局,和布線之後選擇了圖32的劃分。圖32的劃分結果將被用來作為產生配置文件的基礎。圖34為同樣的假設例子顯示了邏輯修補操作,其中顯示了在兩個晶片中的最終實現。該系統使用圖32的劃分結果來產生配置文件。然而,為了簡便未顯示地址指示器。圖中顯示了兩個FPGA晶片930和940。晶片930包括,用戶電路設計被劃分的部分,一個TDM單元931(接收器端),軟體時鐘932和輸入/輸出總線933,以及其他部件。晶片940包括用戶電路設計被劃分的部分,發送端的TDM單元941,軟體時鐘942和輸入/輸出總線943,及其他部件。TDM單元931和941已經參照圖9(A)、9(B),和9(C)得到了討論。這些晶片930和940有兩個互連導線944和945,它們將硬體模型連接在一起。這兩個互連導線是圖8中顯示的互連結構的一部分。參照圖8,這樣的一個互連是位於晶片F32和F33之間的互連611。在一個實施例中,每個互連的導線/引腳最大數目是44。在圖34中,模型化的電路在晶片930和940之間只需要兩個導線/引腳。這些晶片930和940被連接到組總線950。因只要實現兩個晶片,所以兩個晶片都位於相同的組中,或每個晶片屬於一個不同的組。最佳的方法是,一個晶片被連接到一個組總線,而另一個晶片被連接到另一個組總線,以便確保在FPGA接口處的傳輸量等於PCI接口處的傳輸量。前面為了例證和說明的目的描述了本發明的一個優選實施例。這個說明並非是沒有遺漏的,也並非為了將本發明限制為呈現出的特定形式。顯而易見,本領域的技術人員可以清楚地發現許多修改和變更。本領域的技術人員將容易地發現,其他的應用可以替換此處提供的應用,而不會背離本發明的精神和範圍。因此,本發明只應受到權利要求書的限制。權利要求1.一種根據需要為模型化設計創建改值轉儲(VCD)文件的方法,其包含下列步驟選擇一個模擬進程範圍,該範圍在模擬時間t0處開始,在模擬時間t3處結束;選擇一個模擬進程範圍,該範圍在模擬時間t1處開始,在模擬時間t2處結束,其中模擬時間t1大於或等於模擬時間t0,而且模擬時間t2小於或等於模擬時間t3;產生用於所選模擬目標範圍的一個模型化設計的VCD文件;並直接從模擬時間t1訪問VCD文件以便調試模型化設計。2.根據權利要求1所述的方法,其進一步包含下列步驟將主輸入提供給模型化設計用於進行估算;且為模擬進程範圍記錄一模擬歷史記錄。3.根據權利要求2所述的方法,其進一步包含下列步驟處理模擬歷史記錄;且在模型化設計中估算從模擬時間t0到模擬時間t2的經過處理的模擬歷史記錄。4.根據權利要求3所述的方法,其中產生VCD文件的步驟進一步包含基於經過處理的模擬歷史記錄從模型化設計產生模型化設計估算結果;且將模擬目標範圍期間的估算結果儲存進VCD文件。5.根據權利要求4所述的方法,其中記錄步驟進一步包含下列步驟壓縮主輸入;且將被壓縮的主輸入記錄為模擬歷史記錄。6.根據權利要求4所述的方法,其中處理步驟進一步包含對被壓縮的主輸入解壓縮;且將被解壓縮的主輸入作為經過處理的模擬歷史記錄提供給模型化設計用於估算。7.根據權利要求4所述的方法,其中記錄步驟包括下列步驟將主輸入記錄為模擬歷史記錄。8.根據權利要求1所述的方法,其進一步包含下列步驟在一個第一文件中儲存模型化設計在模擬時間t0處的狀態信息;且在一個第二文件中儲存模型化設計在模擬時間t3處的狀態信息。9.一種用於驗證一個用戶設計的電子設計自動化系統,其包含包括一個中央處理單元和存儲器的一個計算系統,用於在軟體中模擬用戶設計;一個連接到計算系統的內部總線系統;連接到內部總線系統的可重新配置的硬體邏輯,用於在硬體中模擬至少部分用戶設計;連接到內部總線系統的控制邏輯,用來控制可重新配置的硬體邏輯和計算系統之間的數據傳輸;以及為所選模擬進程範圍記錄一個模擬歷史記錄的VCD隨選邏輯,它還為一個所選模擬目標範圍將狀態信息從硬體模型轉儲到一個VCD文件,其中模擬目標範圍在模擬進程範圍之內。10.根據權利要求9所述的電子設計自動化系統,其中VCD隨選邏輯進一步包含第一範圍選擇邏輯,用來選擇一個模擬進程範圍,該範圍在模擬時間t0處開始,並在模擬時間t3處結束;第二範圍選擇邏輯,用來選擇一個模擬目標範圍,該範圍在模擬時間t1處開始,並在模擬時間t2處結束,其中模擬時間t1大於或等於模擬時間t0,而模擬時間t2小於或等於模擬時間t3;轉儲邏輯,用來針對所選模擬目標範圍產生硬體模型化設計的一個VCD文件;以及存取邏輯,用來直接從模擬時間t1訪問VCD文件以便調試用戶設計。11.根據權利要求10所述的電子設計自動化系統,其中VCD隨選邏輯進一步包含測試平臺處理,用於將主輸入提供給硬體模型化設計用於進行估算;以及計算系統中的記錄邏輯,用於為模擬進程範圍記錄一模擬歷史記錄。12.根據權利要求11所述的電子設計自動化系統,其中VCD隨選邏輯進一步包含計算系統中的處理邏輯,用於處理模擬歷史記錄;以及可重新配置的硬體邏輯中的估算邏輯,用來在硬體模型化設計中估算從模擬時間t0到模擬時間t2的經過處理的模擬歷史記錄。13.根據權利要求12所述的電子設計自動化系統,其中轉儲邏輯將模擬目標範圍期間,根據經過處理的模擬歷史記錄,將來自硬體模型設計的估算結果轉儲進入VCD文件。14.根據權利要求13所述的電子設計自動化系統,其中記錄邏輯進一步包含壓縮邏輯,用於壓縮主輸入;和寫邏輯,用於將被壓縮的主輸入作為模擬歷史記錄寫入。15.根據權利要求14所述的電子設計自動化系統,其中處理邏輯進一步包含解壓縮邏輯,用於對被壓縮的主輸入解壓縮;和數據傳輸邏輯,用於將被解壓縮的主輸入作為經過處理的模擬歷史記錄傳輸給硬體模型化設計用於估算。16.根據權利要求13所述的電子設計自動化系統,其中記錄邏輯進一步包含寫邏輯,用於將主輸入作為模擬歷史記錄寫入。17.根據權利要求9所述的電子設計自動化系統,其進一步包含狀態儲存邏輯,用於在一個第一文件中儲存硬體模型化設計在模擬時間t0處的狀態信息和在一個第二文件中儲存硬體模型化設計在模擬時間t3處的狀態信息。18.一種VCD隨選系統,用來為模擬時間的所選模擬目標範圍提供估算信息,估算發生在模型化設計中,其包含第一邏輯,用來選擇一個模擬進程範圍,該範圍在模擬時間t0處開始,並在模擬時間t3處結束;第二邏輯,用來選擇一個模擬目標範圍,該範圍在模擬時間t1處開始,並在模擬計時t2處結束,其中模擬時間t1大於或等於模擬時間t0,而模擬時間t2小於或等於模擬時間t3;產生邏輯,用於為所選模擬目標範圍產生一個估算信息的VCD文件;以及存取邏輯,用來從模擬時間t1直接訪問VCD文件,以調試模型化設計。19.根據權利要求18所述的VCD隨選系統,其進一步包含壓縮邏輯,用於針對模擬進程範圍的持續時間接收且壓縮主輸入數據;和解壓縮邏輯,用於對被壓縮的主輸入數據解壓縮,而且將被解壓縮的主輸入數據傳輸進入模型化設計用於估算。20.根據權利要求19所述VCD隨選系統,其中產生邏輯進一步包含轉儲邏輯,用於將估算信息轉儲到VCD文件,即由模型化設計通過對被解壓縮的主輸入進行估算所產生的估算信息。全文摘要此處介紹的技術被稱為隨選VCD。在一個典型的系統中,整合隨選VCD技術的EDA(電子設計自動化)工具有下列高水準的屬性(1)以RCC為基礎並行模擬歷史記錄壓縮和記錄,(2)以RCC為基礎的並行模擬歷史記錄解壓縮和產生VCD文件,以及(3)針對所選模擬目標範圍的隨選軟體重建,以及不需要重新運行模擬的設計審查。這些屬性中的每一個屬性都將在下文得到更具體的討論。當用戶選擇一個模擬進程範圍時,RCC系統以高度壓縮的方式記錄來自測試平臺程序的主輸入。用戶然後選擇一個更窄的區域,其位於模擬進程範圍內被稱為模擬目標範圍,用於更集中的分析。RCC系統將硬體模型的硬體狀態信息(也就是,主輸出)轉儲到一個VCD文件之內。RCC系統然後允許用戶從模擬目標範圍開始處直接查看VCD文件,而不必從模擬進程範圍的開始處重新運行整個模擬。文檔編號G06F17/50GK1491385SQ0182279公開日2004年4月21日申請日期2001年8月14日優先權日2001年8月14日發明者曾平聖,約格西·庫馬·戈爾,沈崐旭,庫馬戈爾申請人:阿克西斯系統公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀