專利名稱:確定共享資源狀態的方法與裝置的制作方法
技術領域:
本發明涉及數字系統領域,特別是一種用于確定共享資源狀態的方法。
在許多數字系統中,一種系統資源必須由系統的許多部件共享。例如,在數字計算機系統中,中央處理單元(CPU)通常與視頻顯示子系統、甚至與其它CPU共享內存。這種情況下,要求用某種判優方案來決定向該資源潛在的多個請求中的哪一個賦予享用權。此外,當一種資源被用于從一個系統部件(執行寫功能的“生產者”(producer))向另一個系統部件(執行讀功能的“消費者”(comsumer))傳遞數據時,由該生產者存入該資源中的數據,在該消費者尚未提取該數據之前必須得到保護。在有其它生產者爭相著要向該資源寫數據時尤應如此。因此,一旦某生產者向一個共享資源寫數據,其它生產者就被禁止向該資源寫數據,直到數據被消費者提取后為止。
有一種用來協調對共享系統資源進行存取的傳統電路設計,用一個狀態寄存器(也稱“信志”(semaphore))與該資源對應,寄存器處于一種(高)邏輯狀態時代表滿,處于另一種(低)邏輯狀態時代表空。這種信志一般是用一個標準觸發器來實現的。例如,可以用信志對通過具有數據存儲功能的共享資源進行的數據交換加以調節。信志在其被剛剛將數據寫入資源的生產者“置位”時,代表該資源處于滿狀態(表明消費者此時可以讀取數據);信志在其被剛剛從該資源讀取數據的消費者“復位”時,代表該資源處于空狀態(表明此時可以由生產者寫入新數據)。
只要所有生產者和消費者都在與信志的時鐘域相同的時鐘域內進行操作時,信志方案是令人滿意的。在統一的時鐘域中,生產者和消費者在檢測信志的值時無須擔心更新信號還沒有被信志收到,也無須擔心被刷新的信志值還沒有被傳播到所有生產者和消費者。換言之,在統一的時鐘域中,要保證信志的值能反映共享資源的真實狀態,是不存在困難的。
沒有必要對統一的時鐘域中操作的各子系統進行信號同步。但是,當兩個子系統在不同的時鐘域中操作時,從一個子系統發往另一個子系統的信號就必須被同步。
因此,當兩個子系統共享一個資源,但又是在不同的時鐘域中操作時,就會產生問題。傳統的信志方案必須克服采用多個時鐘域時所具有的困難,諸如1)信志將使用哪個時鐘域;2)如何跨越不同的時鐘域中如何生成置位、復位信號;3)什么時候信志的值反映了共享資源的真實狀態,從而子系統能對這種狀態進行檢測;4)在設計階段如何測試有關設計邏輯的正確性。
在含有共享一個資源、但在不同時鐘域中操作的一個生產者和一個消費者的簡單系統中,傳統的信志方案允許信志對時鐘域有三種可能選擇。第一,信志可以位于生產者的時鐘域中。在這種設置下,生產者能即時同步訪問反映共享資源狀態的該信志,因此,生產者的置位信號與信志同步。然而,消費者的復位信號卻不與信志同步。因此,必須將消費者的復位信號同步到生產者的時鐘才能更新信志內容;消費者要檢測資源的狀態,必須反過來將信志中的新數值同步到消費者的時鐘域。
將消費者的復位信號同步到信志的(以及生產者的)時鐘域,要產生一個時間延遲,將信志中的新數值反過來同步到消費者的時鐘域,要產生另一個時間延遲。這些延遲會產生一種使由消費者測得的信志的值為無效(即不反映資源的真實狀態)的時間窗口。當消費者在該時間窗口中檢測信志時,消費者會測到一個無效的置位條件。為了防止消費者過早檢測信志,消費者必須被延遲到足以使其自己的更新信號能使信志復位,并且足以使信志的新復位值能到達消費者。
信志對時鐘域的第二種選擇是,使用消費者的時鐘域。選擇使用消費者的時鐘域時,延遲問題呈現一種方向相反的情況生產者必須被延遲到足以防止生產者過早檢測信志,以避免測到無效的復位狀態這種可能。
信志對時鐘域的第三種選擇是,使用既與消費者的時鐘域不同、又與生產者的時鐘域不同的第三個時鐘域。在這種情況下,生產者和消費者都必須被充分延遲,以防過早檢測信志。因此,不管怎樣為信志選擇時鐘域,生產者和消費者中二者之一或全部,必定要因為同步所需的延遲而降低速度。
當有多個生產者需要向共享資源寫數據或有多個消費者需要從共享資源讀數據時,就要產生更多的困難。此時必須引入一種仲裁電路(arbiter)來管理生產者的寫操作和消費者的讀操作。這種仲裁電路的作用是協調各生產者和各消費者對資源的訪問權,以避免由于兩個或更多的生產者同時要向一個資源寫數據、或者兩個或更多的消費者同時要從一個資源讀數據時產生的競爭條件。傳統的仲裁電路接收多個對資源的請求,但只向一個請求者授予對資源的訪問權,該請求者于是成為當前用戶。在當前用戶釋放資源之前,仲裁電路不會同意其它資源請求。
在含有多個生產者的系統中,需要一個仲裁電路來管理生產者對共享資源的寫訪問。在含有多個消費者的系統中,需要一個仲裁電路來管理消費者對共享資源的讀訪問。在含有多個生產者和多個消費者的系統中,就需要二個仲裁電路,一個管理生產者,一個管理消費者。
在需要仲裁(arbitration)的多時鐘域中,同步問題更加復雜。當仲裁電路終于對生產者或消費者訪問共享資源的請求授權時,該生產者或消費者必須保證信志的數值反映資源的真實狀態。
為了更詳細地展開這個問題,我們假定,一個生產者完成了向共享資源寫數據的操作,發出一個對信志置位的更新信號,釋放對共享資源的訪問權。還假定,然后仲裁電路檢測到資源已經被釋放,向第二個生產者的訪問請求授權。與此同時,第一個生產者的更新信號(該信號可能必須被同步到信志的時鐘域)將對信志置位。信志的值最后必須被同步到第二個生產者的時鐘,第二個生產者才能有效地檢測資源的狀態。如果沒有足夠的時間用于將信志的值同步到第二個生產者的時鐘,那么在仲裁電路向第二個生產者的訪問請求授權的時刻,由第二個生產者所測得的信志的值,可能并不反映共享資源的真實狀態。對于這個問題,傳統解決方法還是導入一個延遲。
這種解決定時問題的方法是,通過在仲裁邏輯(arbitration logic)中導入一個延遲,籍以保證,一個生產者釋放資源的時間與另一個生產者測得獲得仲裁電路授權的時間之間的間隔時間,不少于一個生產者向信志發出更新信號的時間到信志的新的更新數值最終被同步到另一個生產者的時鐘域的時間之間的間隔時間。在含有兩個以上生產者或兩個以上消費者的系統中,所需的仲裁延遲(arbitration delay)必須永遠基于最慢的時鐘域,以保證最慢的生產者或消費者不會過早地檢測共享資源的狀態。
傳統的仲裁信志方案(arbitrated semaphore scheme)的一個缺點是,系統性能由于所需的延遲而惡化。在對高速計算機系統的需要和重視程度提高的情況下,系統速度的任何惡化都是一個嚴重缺點。
人們努力對導入的延遲進行優化處理。但是這種努力即便是成功的,也過于復雜,難以實施。所以說,傳統的仲裁信志方案的另一個缺點是,對所需延遲進行的優化處理難以實施。
仲裁信志方案的另一個缺點是,在設計階段,需要進行大量的分析,來確定最壞情況下所需的最短可能延遲時間。所需分析的復雜程度,隨著在不同時鐘域中操作的生產者或消費者的數量呈指數增長,要是還有不同的時鐘域包含信志、仲裁電路,或者二者都包含,則分析的復雜程度更高。
不過最為重要的缺點是,在設計階段難于對仲裁信志方案進行正確性論證。在有關的邏輯只不過是大規模集成電路的一小塊部件時,這個問題最為突出。為生產大規模集成電路進行的成形設計耗資巨大,為了避免因設計錯誤產生的高昂代價,人們非常強調在設計階段對所有邏輯實行正確性檢驗。
本發明被設計用于減少確定共享資源狀態所需邏輯的復雜性,改善這種邏輯的性能。更具體來說,本發明使得向每個資源共享的子系統通知共享資源的可用性或不可用性所需的時間間隔最小化。本發明的優點是,避免使用傳統的信志來代表共享資源的狀態。
本發明的一個特點是,每個資源共享子系統采用一個長度1位的二進制計數器(位寄存器)。子系統每次啟動對共享資源的訪問時,就翻轉其位寄存器的值。各個資源共享子系統就是這樣來表示其對共享資源的訪問已經啟動。
本發明的另一個特點是,各個資源共享子系統的各位寄存器的值與其它資源共享子系統在其中操作所有異步時鐘域的同步。由于各個資源共享子系統的各個位寄存器的值因此能被各子系統訪問,各子系統就能檢測到對共享資源的每一次訪問。
本發明的另一個特點是,各個資源共享子系統獨立地確定共享資源的狀態。各個資源共享子系統中都有用于對各個資源共享子系統的各個位寄存器的值進行比較的邏輯。這種比較產生的結果中有一個狀態信號。這樣,各子系統就能得到其自己的、表示共享資源可用性的狀態信號。
本發明的另一個特點是,即時、同步地向子系統通知由該子系統所引起的共享資源狀態的變化。其優點是,子系統每次開始訪問共享資源時,進行訪問的子系統會立即被通知該共享資源的可用性已經改變。
由于本發明不采用傳統的信志,在信志與資源共享子系統之間不存在異步關系,要求由這種異步子系統生成的每個更新信號同步到信志,或是信志同步到由這種異步子系統生成的每個更新信號。因此,就沒有子系統在其開始訪問共享資源后的一段時間內不能測得由其自己的訪問引起的可用性的變化的那種時間窗口。所以就無須插入額外的延遲來防止子系統過早訪問共享資源,而且,與訪問異步時鐘域中共享資源有關的延遲時間,得到了盡量縮短。
本發明的一種方法確定數字系統中資源的狀態,其中,與一個第一時鐘同步操作的第一個子系統向該資源寫數據,與一個第二時鐘同步操作的第二個子系統從該資源讀數據,第一時鐘與第二時鐘異步;在由第二個子系統從資源中讀取上一次寫入的數據之前,資源不能用于被第一個子系統寫入其它數據。該方法包括的步驟是生成代表第一個子系統對資源進行寫訪問的次數的第一個數目,第一個數目的生成與所述第一時鐘同步;生成代表第二個子系統對資源進行讀訪問的次數的第二個數目,第二個數目的生成與所述第二時鐘同步;將第一個數目與第二時鐘同步,生成第三個數目;將第二個數目與第一時鐘同步,生成第四個數目;比較第一個數目與第四個數目,為第一個子系統生成第一個資源可用信號,當第一個數目等于第四個數目時,第一個資源可用信號便活動(active),第一個資源可用信號的生成與第一時鐘同步;比較第二個數目與第三個數目,為第二個子系統生成第二個資源可用信號,當第二個數目不等于第三個數目時,第二個資源可用信號便活動,第二個資源可用信號的生成與第二個時鐘同步。
本發明的另一種方法確定數字系統中資源的狀態,其中,至少有一個寫數據的子系統向該資源寫數據,至少有一個讀數據的子系統從該資源讀數據,在某一個讀數據的子系統從資源中讀取上一次寫入的數據之前,資源不能用于被寫數據的子系統寫入其它數據。其中,各個讀數據的子系統和各個寫數據的子系統與各自的時鐘同步操作,其中至少有一個寫數據的子系統與一個第一時鐘同步操作,至少有一個讀數據的子系統與一個第二時鐘同步操作,第二時鐘與第一時鐘異步。該方法包括的步驟是為每個寫數據子系統生成一個寫操作數目,各個寫操作數目分別代表對應的寫數據子系統對資源進行寫訪問的次數,各個寫數據子系統的各個寫操作數目的生成與該寫數據子系統對應的時鐘同步;為各個讀數據子系統生成一個讀操作數目,各個讀操作數目分別代表對應的讀數據子系統對資源進行讀訪問的次數,各個讀數據子系統的各個讀操作數目的生成與該讀數據子系統對應的時鐘同步;將各個寫操作數目與寫數據子系統的時鐘及讀子系統的時鐘同步;將各個讀操作數目與寫數據子系統時鐘及讀數據子系統的時鐘同步;將各寫操作數目相加,生成一個寫操作總數目,加法操作由各個寫數據子系統和各個讀數據子系統獨立地完成;將各讀操作數目相加,生成一個讀操作總數目,加法操作由各個寫數據子系統和各個讀數據子系統獨立地完成;比較寫操作總數目與讀操作總數目,生成資源可用于寫操作信號,當寫操作總數目等于讀操作總數目時,資源可用于寫操作信號便活動,這種比較由各個寫數據子系統獨立地完成,用以生成各自的資源可用于寫操作信號;比較寫操作總數目與讀操作總數目,生成資源可用于讀操作信號,當寫操作總數目不等于讀操作總數目時,資源可用于讀操作信號便活動,這種比較由各個讀數據子系統獨立地完成,用以生成各自的資源可用于讀操作信號;本發明的另一種方法確定數字系統中資源的狀態,其中,與一個第一時鐘同步操作的第一個子系統對該資源進行一級訪問,與一個第二時鐘同步操作的第二個子系統對該資源進行二級訪問,第一時鐘與第二時鐘異步,其中,在發生一次二級訪問之前,資源不能用于進行其它的一級訪問,并且,在發生一次一級訪問之前,資源不能用于二級訪問,一級訪問在時間上與二級訪問交替進行。該方法包括的步驟是生成代表第一個子系統對資源進行一級訪問的次數的第一個數目,第一個數目的生成與第一時鐘同步;生成代表第二個子系統對資源進行二級訪問的次數的第二個數目,第二個數目的生成與所述第二時鐘同步;將第一個數目與第二時鐘同步,生成第三個數目;將第二個數目與第一時鐘同步,生成第四個數目;比較第一個數目與第四個數目,為第一個子系統生成第一個資源可用信號,當第一個數目等于第四個數目時,第一個資源可用信號便活動,第一個資源可用信號的生成與第一時鐘同步;比較第二個數目與第三個數目,為第二個子系統生成第二個資源可用信號,當第二個數目不等于第三個數目時,第二個資源可用信號便活動,第二個資源可用信號的生成與第二個時鐘同步。
本發明的一種裝置確定資源的狀態,其中,一個寫操作子系統向該資源發送寫信號,一個讀操作子系統向該資源發送讀信號,其中,寫操作子系統與一個第一時鐘同步操作,讀操作子系統與一個第二時鐘同步操作,第一時鐘與第二時鐘異步。該裝置包括第一信志單元,它生成有著第一邏輯狀態和第二邏輯狀態的第一更新信號,每次寫操作子系統向資源寫數據時,第一信志單元對寫信號作出響應,按第一時鐘同步地改變第一更新信號的邏輯狀態;第二信志單元,它生成有著第一邏輯狀態和第二邏輯狀態的第二更新信號,每次讀操作子系統從資源讀數據時,第二信志單元對讀信號作出響應,按第二時鐘同步地改變第二更新信號的邏輯狀態;第一同步單元,它將第一更新信號與第二時鐘同步,生成第一同步更新信號;第二同步單元,它將第二更新信號與第一時鐘同步,生成第二同步更新信號;第一檢測單元,它生成有著第一邏輯狀態和第二邏輯狀態的第一檢測輸出信號,當第一更新信號等于第二同步更新信號時,第一檢測單元生成第一邏輯狀態的第一檢測輸出信號,當第一更新信號不同于第二同步更新信號時,第一檢測單元生成第二邏輯狀態的第一檢測輸出信號;第二檢測單元,它生成有著第一邏輯狀態和第二邏輯狀態的第二檢測輸出信號,當第一同步更新信號等于第二更新信號時,第二檢測單元生成第一邏輯狀態的第二檢測輸出信號,當第一同步更新信號不同于第二更新信號時,第二檢測單元生成第二邏輯狀態的第二檢測輸出信號。
本發明的另一種裝置確定數字系統中資源的狀態,其中,與第一時鐘同步操作的第一個子系統向該資源寫數據,與第二時鐘同步操作的第二個子系統從該資源讀數據,第一時鐘與第二時鐘異步,在由第二個子系統從資源中讀取上一次寫入的數據之前,資源不能用于被第一個子系統寫入其它數據。該裝置包括生成代表第一個子系統對資源進行寫訪問的次數的第一個數目的生成裝置,第一個數目的生成與第一時鐘同步;生成代表第二個子系統對資源進行讀訪問的次數的第二個數目的生成裝置,第二個數目的生成與所述第二時鐘同步;將第一個數目與第二時鐘同步、以生成第三個數目的裝置;將第二個數目與第一時鐘同步、以生成第四個數目的裝置;比較第一個數目與第四個數目、為第一個子系統生成第一個資源可用信號的裝置,當第一個數目等于第四個數目時,第一個資源可用信號便活動,第一個資源可用信號的生成與第一時鐘同步;比較第二個數目與第三個數目、為第二個子系統生成第二個資源可用信號的裝置,當第二個數目不等于第三個數目時,第二個資源可用信號便活動,第二個資源可用信號的生成與第二個時鐘同步。
附
圖1的方框圖所表示的一個數字系統的一部分中,有多個生產者子系統,多個消費者子系統,它們在不同的時鐘域操作,共享一個資源。
附圖2的方框圖所表示的計算機環境中,有兩個生產者子系統、兩個消費者子系統,各子系統均有一個計數器,各子系統共享同一個資源,各生產者和消費者均在相同的時鐘域中操作。
附圖3的方框圖中,有兩個生產者子系統、兩個消費者子系統,各子系統均有一個計數器,各子系統共享同一個資源,各生產者和消費者在不同的時鐘域中操作。
附圖4的方框圖所表示的數字系統的一部分中,有一個生產者子系統,一個消費者子系統,它們共享一個資源,各帶一個位寄存器,各在不同的時鐘域操作。
附圖5a的邏輯圖,表示一個生產者子系統和一個消費者子系統各自的位寄存器部件和資源檢測部件,兩個子系統各在不同的時鐘域操作。
附圖5b的邏輯圖,表示一個含有兩個D觸發器的同步單元,兩個D觸發器由同一時鐘定時。
附圖6的方框圖表示的是一個有兩個時鐘域的數字系統的一部分,第一個時鐘域中有一個生產者子系統,第二個時鐘域中有一個生產者子系統和一個消費者子系統,各子系統均有一個位寄存器,并且共享一個資源。
附圖7a的邏輯圖,表示在一個時鐘域中操作的一個生產者子系統和另一個時鐘域中操作的一個生產者子系級及一個消費者子系統各自的位寄存器部件和資源檢測部件。
附圖7b的邏輯圖,表示在一個時鐘域操作的一個生產者子系統的位寄存器部件和資源檢測部件,以及在另一個時鐘域操作的一個生產者子系統和一個消費者子系統所共用的位寄存器部件和資源檢測部件。
附圖8的方框圖表示的是一個數字系統的一部分,系統中有兩個生產者子系統和兩個消費者子系統,它們各帶一個位寄存器,都共享一個公共資源,各在不同的時鐘域操作。
附圖9的方框圖表示的是一個數字系統的一部分中的兩個生產者子系統和兩個消費者子系統各自的位寄存器部件和資源檢測部件,所有子系統各在不同的時鐘域操作。
附圖10a的方框圖表示在不同時鐘域操作的兩個生產者,它們由一個仲裁電路管理,仲裁電路在第二個生產者的時鐘域操作。
附圖10b的方框圖表示在不同時鐘域操作的兩個生產者,它們由一個仲裁電路管理,仲裁電路在第一個生產者的時鐘域操作。
附圖10c的方框圖表示在不同時鐘域操作的兩個生產者子系統,它們由一個仲裁電路管理,仲裁電路在另一個時鐘域操作。
附圖11的方框圖表示在不同時鐘域操作的兩個生產者子系統,它們由一個仲裁電路管理,仲裁電路在第三個時鐘域操作。從每個生產者向仲裁電路發送的信號以及從仲裁電路向每個生產者發送的信號都分別被同步到對方的時鐘域中。
附圖12的波形定時圖,表示第一個生產者、第二個生產者和消費者的各個資源請求、請求獲準信號。
附圖1的簡略方框圖表示了一個計算機系統中的多個子系統,其中的所有子系統都能訪問唯一的一個共享資源102。子系統包括“生產者”、“消費者”,每個生產者能向資源102寫數據,每個消費者能從資源102讀數據。附圖1中的生產者子系統向消費者子系統提供數據的方法是,向共享資源102寫數據,然后由消費者讀取。共享資源102能保存一個數據元。
附圖1中的生產者子系統和消費者子系統各在不同的時鐘域中操作。我們應知道,一個時鐘域中包含一個或多個以相同頻率和相位操作的時鐘。我們還應知道,本文描述的各個系統初始時被復位到已知狀態組。雖然本文附圖沒有個個都顯示復位狀態,本領域的熟練人員會理解,本文中的各個系統都有復位機制。
本發明旨在確定共享資源的可用性。如果應用本發明,隨便多少生產者子系統或消費者子系統一它們都在相同的時鐘域操作也好,在不同的時鐘域操作也好,所在時鐘域的任何組合中也好一都能確定共享資源的可用性。
附圖2的簡化方框圖所示的數字系統的一部分中,有兩個生產者子系統(P1和P2)和兩個消費者子系統(C1和C2),它們共享一個能保存一個數據元的資源202,各子系統均有對應的一個計數器單元(P1_Count、P2_Count、C1_Count、C2_Count),各計數器單元均能保存一個從0開始的整數值,整數值可以按1遞增。
第一個生產者204中有計數器206和檢測邏輯部件208。每當第一個生產者204向共享資源202寫數據,第一個生產者204就將計數器206的值遞增1。與此類似,第二個生產者210中有計數器212和檢測邏輯部件214。每當第二個生產者210向共享資源202寫數據,第二個生產者210就將計數器212的值遞增1。
第一個消費者216中有計數器218和檢測邏輯部件220。每當第一個消費者216從共享資源202讀數據,第一個消費者216就將計數器218的值遞增1。與此類似,第二個消費者222中有計數器224和檢測邏輯部件226。每當第二個消費者222從共享資源202讀數據,第二個消費者222就將計數器224的值遞增1。
兩個生產者和兩個消費者都能讀取所有四個計數器的值。例如,第一個生產者204的計數器206的值不僅能被第一個生產者204讀取,也能被第二個生產者210讀取,還能被第一個消費者216和第二個消費者222讀取。
為了避免在上次寫入的數據被讀取之前向共享資源202寫數據,生產者必須能夠確認允許向共享資源寫數據的時機。為了確認允許向共享資源寫數據的時機,生產者必須查看資源的狀態。如果資源內的數據尚未被消費者提取(就是說還是“新”數據),生產者就不能在資源中放入新數據,否則就會破壞預想的通信。
消費者也必須查看資源的狀態,以便確定資源中的數據是已被消費者讀取過的舊數據(即“過時”數據),還是尚待讀取的新數據。消費者必須避免讀取過時數據,必須保證所讀數據是新數據。
在附圖2中所示的統一時鐘環境下,第一個生產者204確認向共享資源202寫數據的安全時機(即資源中存放的是過時數據)的方法是,讀取系統中全部生產者和消費者的所有計數器。第一個生產者204的檢測邏輯部件208將其自己的計數器206的值,加上第二個生產者的計數器212的值,生成向共享資源202寫數據的總次數;第一個生產者204的檢測邏輯部件208還將第一個消費者的計數器218的值,與第二個消費者的計數器224的值相加,生成從共享資源202讀數據的總次數。然后,檢測邏輯部件208將寫數據的總次數減去讀數據的總次數。如果相減結果為零,則對第一個生產者204表明,此時向共享資源202寫數據是安全的。相減結果為零,表明生產者每一次向共享資源寫數據后,消費者就對應地從資源中讀取過一次數據。與此類似,如果相減結果不為零,第一個生產者204就能知道,此時向共享資源202寫數據是不安全的(就是說,資源中保存的是新數據,還未被讀取過)。
第一個生產者204為檢測共享資源202的狀態所需的檢測邏輯可用下式表示為P1_Test=(P1_Count+P2_Count)-(C1_Count+C2_Count)如果P1_Test式的值為零,則共享資源202中的數據是過時數據,第一個生產者204可以安全地向共享資源202寫新數據;如果P1_Test式的值不為零,則共享資源202中的數據是新數據,第一個生產者204不得向資源202放入新數據。
消費者可以用類似的檢測邏輯來確定共享資源何時可用于讀取數據。第一個消費者216的檢測邏輯部件220獨立地執行與上述由第一個生產者204的檢測邏輯部件208所執行的相同的運算。如果結果不為零,資源202中存有新數據,第一個消費者216可以從共享資源202中讀取數據;如果結果為零,資源202中存的是過時數據,第一個消費者216不得讀取數據。
第一個消費者216為檢測共享資源202的狀態所需的檢測邏輯,與第一個生產者204所需的相同C1_Test=(P1_Count+P2_Count)-(C1_Count+C2_Count)如果C1_Test式的值不為零,則共享資源202中的數據是新數據,第一消費者216可以安全地從共享資源202中讀取數據;如果C1_Test式的值為零,則共享資源202中的數據是過時數據,第一個消費者216不得讀取數據。
附圖2應理解為僅僅具有理論上的意義。實際上,任何計數器都不能無限地計數。一般來說,當這種計數器中的值增加到超過其容量界限時,就會“卷繞”到零值。對附圖2討論中的檢測邏輯式中,要是某個計數器從一個很大的數值突然變為零,邏輯式也就不能用了。不過,附圖2可用于說明本發明中的一個基礎理論確定共享資源的狀態的一種方法是,先由各個子系統記錄其自己對資源的訪問歷史,然后檢查全部子系統的所有這種歷史記錄。
附圖3的簡化方框圖代表兩個生產者子系統(P1和P2)和兩個消費者子系統(C1和C2),這四個子系統都能訪問一個能保存一個數據元的共享資源302。此外,附圖3中的各個生產者和各個消費者在不同的時鐘域中操作。換言之,附圖3中有四個不同的時鐘域,分別對應每個子系統。
附圖3表示的第一個生產者304含有計數器306和檢測邏輯部件308,其操作與第一時鐘(P1_Clk)同步。每當第一個生產者304向共享資源302寫數據,第一個生產者304就將計數器306的值遞增1。與此類似,第二個生產者310含有計數器312和檢測邏輯部件314,其操作與第二時鐘(P2_Clk)同步。每當第二個生產者310向共享資源302寫數據,第二個生產者310就將計數器312的值遞增1。
第一個消費者316含有計數器318和檢測邏輯部件320,其操作與第三時鐘(C1_Clk)同步。每當第一個消費者316從共享資源302讀數據,第一個消費者316就將計數器318的值遞增1。與此類似,第二個消費者322含有計數器324和檢測邏輯部件326,其操作與第四時鐘(C2_Clk)同步。每當第二個消費者322從共享資源302讀數據,第二個消費者322就將計數器324的值遞增1。
與附圖2中系統的道理一樣,利用檢測邏輯部件能使每個生產者確定向共享資源寫數據是否安全(檢查數據是否過時),能使每個消費者確定從共享資源讀數據是否安全(檢查數據是否是新的)。但是,附圖3中的各個子系統在不同的時鐘域中操作,所以某個生產者或某個消費者的檢測邏輯部件在能使用其它子系統的計數器的數值之前,必須使這些計數器值與該檢測邏輯部件的時鐘同步,這是本領域的熟練人員能理解的。
于是,因為計數器306與第一個生產者304在同一時鐘域操作,第一個生產者304就能即時同步地訪問計數器306的值。但是,第一個生產者304不能同步訪問第二個生產者310的計數器312的值、第一個消費者316的計數器318的值、第二個消費者322的計數器324的值。應該理解,第一個生產者304要讀取計數器312、318、324中的值,必須使這各個計數器值與第一生產者的時鐘P1_Clk同步。
圖3說明計數器312、318及324的值與時鐘P1_Clk的同步。第二個生產者310的計數器312的值被輸入到一個由P1_Clk定時的同步單元,經過同步后的計數器312的值然后被傳送到第一個生產者304的檢測邏輯部件308。與此類似,第一個消費者316的計數器318的值首先被輸入到一個由P1_Clk定時的同步單元,經過同步后的計數器318的值然后被傳送到第一個生產者304的檢測邏輯部件308;第二個消費者322的計數器324的值首先被輸入到一個由P1_Clk定時的同步單元,經過同步后的計數器324的值然后被傳送到第一個生產者304的檢測邏輯部件308。
一旦所有的計數器的值都與某個生產者或消費者的時鐘域同步,該生產者或消費者就能檢查共享資源302的狀態。正如對附圖2所作的說明,第一個生產者304可以通過用生產者計數器(304、308)的值之和減去消費者計數器(318、324)的值之和,檢查共享資源302的狀態。第一個生產者304為檢測共享資源202的狀態所需的檢測邏輯可用下式表示為P1_Test=(P1_Count+P2_Count↑P1)-(C1_Coumt↑P1+C2_Count↑P1)注意,在該式中,P2_count、C1_count、C2_count與第一個生產者304的時鐘P1_Clk的同步,是由后綴運算符↑P1來表示的。正如對附圖2所作的說明,如果P1_Test等式的值為零,則資源302中的是過時數據,第一個生產者304可以向資源302寫新數據;而如果該值不為零,則資源302中有新數據,第一個生產者304不得向資源302寫新數據。
第一個消費者316所用的檢測邏輯極其相似,可用相似的式表示。例如,第一個消費者316所用的檢測邏輯式為C1_Test=(P1_Count↑C1+P2_Count↑C1)-(C1_Count+C2_Count↑C1)注意,P1_count、P2_count、C2_count都與第一個消費者316的時鐘C1_Clk同步了。如果C1_Test式的值不為零,則第一個消費者316可以安全地從資源302讀數據;如果C1_Test式的值為零,則第一個消費者316不得從資源302讀數據。
如附圖2一樣,附圖3也僅僅具有理論意義。這是因為計數器實際上不能無限計數,所以附圖3中的檢測邏輯用起來會失敗。
附圖4的簡化方框圖所表示的數字系統的一部分中,有一個生產者子系統(P1)和一個消費者子系統(C1),它們在不同的時鐘域操作,共享一個能存放一個數據元的資源402如附圖4所示,生產者子系統404中含有位寄存器406和檢測邏輯部件408,并與第一時鐘(P1_Clk)同步操作。消費者子系統410中含有位寄存器412和檢測邏輯部件414,并與第二時鐘(C1_Clk)同步操作。每個位寄存器能表示數值0或1。
生產者404能讀取消費者410的位寄存器412的值,消費者410能讀取生產者404的位寄存器406的值。但是,生產者404與消費者410在不同步的時鐘域中操作。因此,必須將位寄存器412的值與生產者404的時鐘P1_Clk同步,必須將位寄存器406的值與消費者410的時鐘C1_Clk同步。附圖4中表示了位寄存器412的值作為輸入傳送到由P1_Clk定時的同步單元,經過同步后的位寄存器412的值然后被傳送到生產者404的檢測邏輯408。位寄存器406的值作為輸入傳送到由C1_Clk定時的同步單元,經過同步后的位寄存器406的值然后被傳送到消費者410的檢測邏輯部件414。
本發明所關心的是對生產者已經向共享資源寫入數據的次數(寫操作次數)與消費者已經從共享資源讀出數據的次數(讀操作次數)進行比較。本發明的目的是通過確定寫操作次數與讀操作次數相等還是不同,來檢查共享資源的狀態。就是說,檢查共享資源的狀態,并不要求計算實際的寫操作次數與讀操作次數。
因此,就可以對上述的附圖2和附圖3中的檢測邏輯加以簡化。因為共享資源只能保存一個數據元,并且只要零與非零這兩個結果就能代表共享資源的狀態,本領域的熟練人員知道,附圖2和附圖3中所述的計數器是可以用二進制的位寄存器來代替的。此外,由于同樣的道理,本領域的熟練人員也能理解,可以用布爾代數運算“異或”來代替附圖2和附圖3中所述的加減運算。
異或運算是本領域中盡人皆知的。用異或運算符對兩個二進制運算數進行計算,當其中一個運算數為高態、另一個運算數為低態時,輸出的運算結果為高態。如果兩個運算數均為高態,或者兩個運算數均為低態,則異或運算的結果為低態。
很顯然,用異或運算比較寫操作次數與讀操作次數(每個這種寫或讀操作均由生產者或消費者通過改變自己的二進制位寄存器的值來指示)來確定寫操作次數是否與讀操作次數匹配,再也合適不過了。本發明的遵從的原則是,嚴格實行按讀-寫-讀-寫順序進行存取的策略,絕對禁止中間沒有讀操作的連續兩次或更多次數的寫操作,以及中間沒有寫操作的連續兩次或更多次數的讀操作。在采用這種存取策略的系統中,作為二進制操作數作用各個與每個位寄存器的異或運算,當寫操作次數與讀操作次數相等時,運算的結果為0,次數不相等時,運算的結果為0。
因此在生產者404和消費者410中,用位寄存器(406、412)取代了附圖2和3中所述的整數計數器。生產者404通過把其位寄存器406的值與消費者410的位寄存器412的值進行異或運算,就能得知共享資源402中是否保存著過時數據。這種異或運算是在生產者404的檢測邏輯部件408中執行的。如果兩個位寄存器(406、412)值相異或的結果為0,則表明共享資源中的是過時數據,生產者404可以向共享資源402寫入新數據;如果結果為1,則表明共享資源402中的是新數據,生產者404不得向共享資源402寫數據。
生產者404用于確定共享資源402狀態所需的檢測邏輯可用下列算式表示P1_Test=P1_BitregP2_Bitreg↑P1C1_Bitreg↑P1C2_Bitreg↑P1上面算式中的符號“”,是表示異或運算的運算符。如果P1_Test算式的結果為0,則表明共享資源402中的數據已經被消費者410讀取過(過時數據),生產者404可以向共享資源402寫入新數據;如果P1_Test算式的結果為1,則表明共享資源402中的是新數據,生產者404不得向共享資源402寫數據。
消費者410也使用相同的檢測邏輯。例如,消費者410可用下列算式來確定共享資源402狀態C1_Test=C1_BitregP1_Bitreg↑P1P2_Bitreg↑P1C2_Bitreg↑P1如果C1_Test算式的結果為1,則表明共享資源402中存在新數據,該數據可以立即被消費者410讀取;如果C1_Test算式的結果為0,則表明共享資源402中的數據是過時數據,消費者410不得讀取該數據。
附圖5的邏輯圖表示的是能讓一個生產者子系統和一個消費者子系統獨立地檢測共享資源狀態的的邏輯。圖5中未示出共享資源。生產者子系統和消費者子系統都沒有完整地在圖中表示出來,附圖5僅含有本文在說明附圖4時概括描述的位寄存器和檢測邏輯部件所用到的那些部件。位寄存器的功能,是讓生產者能指示其已向共享資源寫數據,讓消費者能指示其已從共享資源讀數據。檢測邏輯部件的功能,是讓生產者或消費者能檢測共享資源的狀態。
如附圖5A所示,第一個D觸發器502有D輸入端504、Q輸出端506和復位(R)輸入端508。Q輸出端506通過導線510連接到異或門512的第一個輸入端。異或門512的輸出端通過導線514連接到D輸入端504。異或門512的第二個輸入端通過導線516連接到生產者子系統404(見附圖4)生成的P1_Add信號。Q輸出端506通過導線510連接到第二個異或門520的第一個輸入端。第二個異或門520的第二個輸入端通過導線522連接到同步單元524的輸出端。異或門520的輸出端通過導線526連接到生產者404作為其P1_Test輸入。同步單元524通過導線528連接到第一時鐘(P1_Clk)。時鐘P1_Clk還通過導線528連接到D觸發器502的時鐘輸入端530。
同步單元524的輸入端通過導線532連接到第二個D觸發器536的Q輸出端534。D觸發器536有一個復位(R)輸入端537和D輸入端538。D觸發器536的D輸入端538通過導線540連接到第三個異或門542的一個輸出端。D觸發器536的Q輸出端534通過導線532連接到異或門542的第一個輸入端。異或門542的第二個輸入端通過導線546接收消費者子系統404(見附圖4)的C1_Sub信號。D觸發器536的Q輸出端534通過導線532連接到第四個異或門550的第一個輸入端。異或門550的輸出端通過導線552連接到消費者子系統406作為其C1_Test信號。異或門550的第二個輸入端通過導線554連接到同步單元556的輸出端。同步單元556通過導線558連接到第二時鐘C1_Clk。時鐘C1_Clk還通過導線558連接到D觸發器536的時鐘輸入端559。同步單元556的一個輸入端通過導線510連接到D觸發器502的Q輸出端506。復位(R)輸入端508、537連接到一條系統復位線(未在圖中表示)。
D觸發器的操作在本領域中盡人皆知的,本文不再贅述。D觸發器只有一個二進制輸入信號和一個二進制輸出信號。D觸發器的操作與一個時鐘輸入信號同步。D觸發器在時鐘脈沖每發生一個特定的轉換時,其二進制輸出信號給出二進制輸入信號的狀態(高或低)。
如上述對附圖4的討論,生產者可以通過改變關聯的位寄存器的值來指示對共享資源的寫數據操作,消費者也可以類似地通過改變關聯的位寄存器的值來指示對共享資源的讀數據操作。這種位寄存器,連續不斷地表示著某個高狀態或低狀態,并且每當在檢測到一個特定信號時就交變其表示的狀態(即由高到低或由低到高)。附圖5中表示了一個含有異或門512和D觸發器502的這種位寄存器。
D觸發器502的Q輸出端506的初始邏輯狀態,與生產者生成到導線516上的信號一樣,是低狀態,因此,異或門512輸出端的初始邏輯狀態是低狀態。當生產者向共享資源寫新數據時,生產者通過生成一個通過導線516傳送的高脈沖(P1_Add)信號來啟動寫操作。在P1_Add信號作用期間,異或門512的輸出端呈現高邏輯狀態,該高邏輯狀態通過導線514被傳送到D觸發器502的D輸入端504。在生產者子系統的時鐘P1_Clk的下一個正前沿轉換到達之際,D觸發器502的Q輸出端506出現高邏輯狀態。本領域的熟練人員明白,P1_Add信號作用時間接近于生產者的時鐘P1_Clk的一個周期,這就為在D觸發器502的D輸入端504上生成一個有效信號提供了足夠的建立和保留時間。
D觸發器502的Q輸出端506的邏輯狀態然后由導線510作為輸入傳送到異或門512。如果Q輸出信號605到達異或門512時,P1_Add信號仍然是高態,異或門512的輸出端就暫時出現一個低邏輯狀態。但是應該明白,在P1_Clk的下一個正前沿轉換到達時,P1_Add信號會已經落到低邏輯狀態,因此此刻異或門512的輸出端會出現一個高邏輯狀態。所以,通過導線514向D輸入端504輸入的高邏輯狀態,使D觸發器502的Q輸出端506保持著高邏輯狀態。
當生產者子系統下一次向共享資源寫數據時,生產者在導線516上生成另一個P1_Add信號,輸入到異或門512。而作為異或門512第二個輸入的導線510此時仍然處于高邏輯狀態。因此,由于異或門512的兩個輸入都是高邏輯,所以其輸出端就出現低邏輯狀態。于是,導線514就向D觸發器502的D輸入端504輸入一個低邏輯狀態。應該明白,當生產者子系統時鐘P1_Clk生成的的下一個正前沿轉換到達時,Q輸出端506出現D輸入端504的低邏輯狀態。如上所述,導線510將Q輸出端506的低邏輯狀態作為一個輸入傳送給異或門512,在下一個時鐘周期到來時或之前當P1_Add信號落到低邏輯狀態時,異或門512的兩個輸入都代表低邏輯狀態,這就使異或門512的輸出端具有低邏輯狀態。在生產者時鐘P1_Clk生成的下一個正前沿轉換到達時,D觸發器502的Q輸出端506輸出的是D輸入端504的邏輯狀態,所以,還是低邏輯狀態。
綜上所述,異或門512與D觸發器502一起,起著位寄存器(或日一位二進制計數器)的作用,它隨著導線516上生產者每次生成的活動的高P1_Add信號,由到低或由低到高地交替改變邏輯狀態(翻轉)。位寄存器在這種脈沖之間在導線510上一個連續的邏輯狀態(P1_Bitreg)。
消費者子系統所用的位寄存器有著與上述相似的邏輯。消費者子系統每次從共享資源讀數據時,消費者要在C1_Sub信號線546上生成一個活動的高脈沖。該C1_Sub信號通過導線546被作為一個輸入傳送到異或門542。應當明白,由于D觸發器536的Q輸出端534通過導線532被作為第二個輸入傳送到異或門542,活動的高C1_Sub信號使異或門542輸出一個與Q輸出端534的邏輯狀態相反的邏輯狀態。該相反的邏輯狀態通過導線540被傳遞到D輸入端38。然后,在消費者的時鐘C1_Clk生成的下一個轉換到達時,Q輸出端508輸出D輸入端534的邏輯狀態。就這樣,異或門542與D觸發器536構成一個位寄存器(或日一位二進制計數器),隨著導線546上消費者每次生成的活動高C1_Sub信號,由到低或由低到高地交替改變邏輯狀態(翻轉)。C1_Test信號線532上保持著消費者的位寄存器(C1_Bitreg)的邏輯狀態。
如在對附圖4的討論中所述,生產者可以通過比較消費者的位寄存器值與其自己的位寄存器值來檢測共享資源的可用性。前文說過,這種比較最好是通過異或運算來執行。消費者也能用相同的檢測邏輯來確定共享資源的可用性。
據此,生產者404可以將其位寄存器值與消費者的位寄存器值進行異或運算與來檢測共享資源的可用性。生產者的位寄存器的值由導線510上的P1_Bitreg信號的邏輯狀態代表。導線510上的P1_Bitreg信號被輸入到異或門520。應該明白,由于P1_Bitreg信號與生產者的時鐘C1_Clk同步,由生成P1_add信號的生產者引起的P1_Bitreg信號的任何變化,在消費者時鐘的一個時鐘周期內傳送到異或門520,并在生產者生成的下一個時鐘周期開始之前穩定不變。
然而,由C1_Bitreg信號的邏輯狀態代表的消費者位寄存器與生產者的時鐘異步,因此必須被同步。因此C1_Bitreg信號通過導線532被輸入到由C1_Clk定時的同步單元542。
附圖5b是一個同步單元的邏輯圖。圖中的D觸發器580有D輸入端582、Q輸出端584和時鐘輸入端585。輸入信號(Input)通過導線586通向D輸入端582。Q輸出端584通過導線588連接第二個D觸發器590,后者有D輸入端592、Q輸出端594和時鐘輸入端595。Q輸出端594的輸出信號(Output)通過導線596傳送。目標時鐘(Target_Clk)通過導線598與第一個D觸發器580的時鐘輸入端585連接。導線598還將該目標時鐘與第二個D觸發器590的時鐘輸入端595相連接。
Input信號通過導線586被傳遞到D輸入端582。在Target_Clk生成的下一個正轉換時,D觸發器580使Q輸出端584產生Input具有的邏輯狀態。Q輸出端的信號通過導線588被傳遞到D觸發器590的D輸入端592。Target_Clk生成的下一個正前沿轉換使Q輸出端594產生導線588上具有的邏輯狀態。導線596傳遞Q輸出端594的Output信號,它是與Target_Clk同步的Input信號的邏輯狀態。附圖5b中的同步單元,只是接收一個與第一時鐘同步的信號、并使該信號與一個與第一時鐘異步的第二時鐘同步的邏輯的一個例子。
在附圖5a中,由生產者時鐘P1_Clk定時的同步單元524,將C1_Bitreg信號與生產者時鐘進行同步。同步后的C1_bitreg信號通過導線522被傳遞到異或門520的輸入端。異或門520在導線526上的輸出中有檢測信號P1_Test。當P1_Bitreg的邏輯狀態與C1_Bitreg的邏輯狀態相同時(即對共享資源寫操作的次數等于對共享資源讀操作的次數時),P1_Test的邏輯狀態是低。于是,當P1_Test的邏輯狀態低時,共享資源402(見附圖4)可被生產者404用于寫入新數據。相反,當P1_Test高時(即對共享資源寫操作的次數不等于對共享資源讀操作的次數時),生產者不得用共享資源寫數據。
本發明的一個主要優點是,P1_Bitreg的值的生成和可利用與生產者的時鐘P1_Clk同步。因此,在生產者通過在導線516上生成P1_Add信號來對其向共享資源的數據寫入作出指示后,生產者立即被檢測信號P1_Test通知共享資源不能再用了。應該明白,本發明保證了生產者不再過早地啟動對共享資源的寫操作,并有利地避免了導入延遲的需要。該保證的根據是,在生產者發出一個表示其已啟動一次對共享資源的寫操作的第一同步脈沖(P1_Add)后,P1_Bitreg信號立即在下一個時鐘周期內更新P1_Test信號,以表示共享資源的不可用狀態。
附圖5a中與此類似的邏輯允許消費者檢測共享資源的狀態。導線532上的消費者的位寄存器C1_Bitreg,對于消費者是同步可用的。導線532將C1_Bitreg的邏輯狀態輸入到異或門550。生產者的位寄存器P1_Bitreg的值與消費者的時鐘異步,因此被輸入到同步單元556。同步單元556使P1_Bitreg與消費者的時鐘C1_Clk同步,經同步后的P1_Bitreg的值通過導線554被傳遞到異或門550的第二個輸入端。異或門550輸出到導線552上的就是檢測信號C1_Test。C1_Test高時(即對共享資源402寫操作的次數不等于對共享資源402讀操作的次數時),消費者可以從共享資源402讀取數據;反之,C1_Test低時(即對共享資源402寫操作的次數等于對共享資源402讀操作的次數時),消費者不能從共享資源402讀取數據。
上述優點也適用于消費者子系統。在消費者生成一個指示它已啟動讀操作的C1_Sub后,消費者立即被通知(在一個時鐘周期內)不能再從共享資源402讀數據。這樣就防止了消費者過早地從共享資源402讀取數據,而且同樣無須延遲。
連接到復位(R)輸入端508、537的復位信號(未在圖中表示)能將生產者的位寄存器P1_Bitreg的值和消費者的位寄存器C1_Bitreg的值設置在低邏輯狀態。例如在中止或重新啟動一個有生產者子系統和消費者子系統的系統時,就能用上這種復位功能。應該明白,在生產者和消費者子系統中,在這種復位所恢復的初始狀態下,可以對共享資源進行寫操作。
附圖6是表示一個數字系統的一部分的簡化方框圖。該系統包括與第一時鐘(P1_Clk)同步操作的第一個生產者子系統602,與第二時鐘(P2C1_Clk)同步操作的第二個生產者子系統604,與第二時鐘(P2C1_Clk)同步操作的消費者子系統606。P1_Clk與P2C1_Clk不同步。
第一個生產者子系統602含有檢測邏輯部件610和位寄存器612,第二個生產者子系統604含有檢測邏輯部件614和位寄存器616,消費者子系統606含有檢測邏輯部件618和位寄存器620。
這三個子系統602、604和606共享資源608。檢測邏輯部件610、614和618使各子系統602、604和606能夠獨立地確定共享資源608的狀態。位寄存器612、616和620每個均能代表數值0或1。子系統602、604和606每個均能讀取所有各位寄存器612、616和620的值。
第一個生產者602的位寄存器612的值與P2C1_Clk不同步,因此,第二個生產者604以及消費者606在將位寄存器612的值用于比較之前,必須使該值與P2C1_Clk同步。附圖6對此的表示方法是,位寄存器612的值先被傳遞到由P2C1_Clk定時的同步單元中,最后再被分別傳遞到第二個生產者604以及消費者606的檢測邏輯部件614和618中。
與此類似,第二個生產者604的位寄存器612的值以及消費者606的位寄存器620的值與P1_Clk不同步,因此,第一個生產者602在將這兩個值用于比較之前,必須使它們與P1_Clk同步。附圖6對此的相應表示方法是,位寄存器616和620的值先被傳遞到由P1_Clk定時的同步單元中,最后再被傳遞到第一個生產者602的檢測邏輯部件610中。
第一個生產者602通過將第二個生產者604的位寄存器616的值、消費者606的位寄存器620的值以及其自己的位寄存器612的值進行異或運算,就能確定共享資源608中是否存在過時的數據。這種邏輯運算是在第一個生產者602的檢測邏輯部件610中執行的。如果異或運算的結果為0,則共享資源608中存在過時的數據,第一個生產者602就可以向共享資源608寫入數據。相反,如果異或運算的結果為1,則共享資源608中保留的是新數據,第一個生產者602就不得向共享資源608寫入數據。
同樣,第二個生產者604通過將三個位寄存器616、620以及612的值進行異或運算,就能確定共享資源608是否可用于寫數據。結果為0時表明生產者604可以向共享資源608寫入數據,結果為1時表明生產者604就不得向共享資源608寫入數據。
消費者606確定共享資源608是否可用的方法大致相同。消費者606的檢測邏輯部件618對位寄存器616、620、612的值進行異或運算。如果異或運算的結果為1,則共享資源608中保留的是新數據,消費者606可以從共享資源608讀出數據;相反,如果異或運算的結果為0,則共享資源608中保留的是過時數據,消費者606不得從共享資源608讀出數據。
第一個生產者602確定共享資源608的狀態,所用的檢測邏輯可按下式表述
P1_Test=P1_BitregP2_Bitreg↑P1C1_Bitreg↑P1如果P1_Test式的值為0,則表明共享資源608中的數據已經被消費者606讀取過,第一個生產者602可以向共享資源608寫入新數據。而如果P1_Test等式的值為1,則表明共享資源608中保存的是新數據,第一個生產者602不得向共享資源608寫入新數據。
消費者606使用相似的檢測邏輯。消費者606可以根據下式來確定共享資源608的狀態C1_Test=C1_BitregP1_Bitreg↑P2C1P2_Bitreg如果C1_Test等式的值為1,則表明共享資源608中保存的是新數據,該數據可以立即被消費者606讀取。而如果C1_Test等式的值為0,則表明共享資源608中保存的是過時數據,消費者606不得讀取該數據。
附圖7a是允許兩個生產者子系統和一個消費者子系統獨立地檢測共享資源的狀態的邏輯的方框圖。附圖7a中沒有表示共享資源,圖中也也沒有完整地表示這兩個生產者子系統及該消費者子系統的全部。附圖7a僅含有本文在說明附圖6時概括描述的位寄存器和檢測邏輯部件所用到的那些部件。
如附圖7a所示,第一個D觸發器702有D輸入端704、Q輸出端706和復位(R)輸入端708。Q輸出端706通過導線710連接到異或門712的第一個輸入端。異或門712的輸出端通過導線714連接到D輸入端704。異或門712的第二個輸入端通過導線716連接到生產者子系統602(見附圖6)生成的P1_Add信號。Q輸出端706通過導線710連接到第二個異或門720的第一個輸入端。第二個異或門720的第二個輸入端通過導線722連接到異或門724的輸出端。異或門720的輸出端通過導線726連接到生產者子系統602作為其P1_Test輸入。D觸發器702的時鐘輸入端719通過導線728連接第一時鐘(P1_Clk)。時鐘P1_Clk還通過導線728連接同步單元730和另一個同步單元732。同步單元730的輸出通過導線734連接異或門724的一個輸入端。同步單元732的輸出通過導線736連接異或門724的第二個輸入端。
同步單元730的輸入端通過導線738連接到D觸發器742的Q輸出端740。D觸發器742有一個D輸入端744和一個復位(R)輸入端746。D觸發器742的時鐘輸入端745通過導線749連接第二時鐘(P2C1_Clk)。D輸入端744通過導線748連接異或門750的輸出端。D觸發器742的Q輸出端740通過導線738連接異或門750的一個輸入端。該異或門的第二個輸入端通過導線752與消費者606(見附圖6)生成的C1_Sub信號相連。D觸發器742的Q輸出端740通過導線738連接異或門754的一個輸入端。異或門754的輸出端通過導線756連接消費者606。異或門754的第二個輸入端通過導線758連接異或門760的輸出端。異或門760的一個輸入端通過導線762連接D觸發器766的Q輸出端764。D觸發器766有一個D輸入端768和一個復位(R)輸入端771。同步單元732的輸入端通過導線762連接Q輸出端764。D輸入端768通過導線770連接異或門772的輸出端。Q輸出端764通過導線762連接異或門772的一個輸入端。異或門772的另一個輸入端通過導線774與第二個消費者604(見附圖6)生成的P2_Add信號相連。
D觸發器766的時鐘輸入端775通過導線776連接第二時鐘P2C1_Clk。同步單元778也通過導線776連接第二時鐘P2C1_Clk。同步單元778的輸入端通過導線710連接D觸發器702的Q輸出端706。同步單元778的輸出端通過導線780連接異或門760的一個輸入端。同步單元778的輸出端還通過導線780連接另一個異或門782。D觸發器742的Q輸出740通過導線738連接異或門782的第二個輸入端。異或門782的輸出端通過導線784連接異或門786的一個輸入端。D觸發器766的Q輸出端通過導線762連接異或門786的第二個輸入端。異或門786的輸出端通過導線788作為P1_Test向生產者604輸入。
正如對附圖5a的討論中所述,異或門712與D觸發器702互相連接,共同起著一個位寄存器的作用。因此,當生產者602在導線716上生成一個高脈沖(P1_Add)信號時,D觸發器702的Q輸出端706就從高到低或從低到高地轉換邏輯狀態(翻轉)。Q輸出端706繼續保持著其邏輯狀態,一直到由生產者602生成的P1_Add信號將其改變。
消費者606有一個類似的位寄存器,包括異或門750和D觸發器742。相應地,D觸發器742的Q輸出端740代表著一個穩定的邏輯狀態,并在消費者606每次在導線752上生成一個高脈沖(C1_Sub)信號時,翻轉其邏輯狀態。
附圖7a中還有由生產者604使用的第三個這種位寄存器。第三個位寄存器包括異或門772和D觸發器766。D觸發器766的Q輸出端764的邏輯狀態,每當生產者604在導線774上生成一個高脈沖(P2_Add)信號時,就翻轉一次,在兩次翻轉之間,D觸發器766的Q輸出端764代表著一個穩定的邏輯狀態。
導線710、738和762傳遞分別與輸出端706、740和764的各邏輯狀態對應的信號。因此,導線710、738和762上傳遞的信號分別代表著生產者602、消費者606和生產者604的各個位寄存器的值。正如在對附圖5a的討論中所述,只要每個生產者和消費者都能獨立地對各個位寄存器的值進行比較,每個生產者和消費者就能確定共享資源的可用性。在對附圖5a的討論中還說過,對各位寄存器值的比較,可以通過對各位寄存器值進行異或運算來完成。
由此可知,生產者602通過對導線710(其自己的位寄存器的值)、738(消費者606的位寄存器的值)和762(生產者604的位寄存器的值)上傳遞的信號進行異或運算,就能測定共享資源608的狀態。應當明白,由導線710傳遞的生產者602的位寄存器的值是與生產者602的時鐘P1_Clk同步的。因此生產者602可以同步地讀取生產者602的位寄存器的值。但是,導線738和762上傳遞的信號(亦即消費者606和生產者604各自的位寄存器的值)是不與P1_Clk同步的。因此,導線738和762上傳遞的信號必須先被與P1_Clk進行同步后,才能被生產者602用于異或運算。
如附圖7a所示,由導線738和762傳遞的信號被分別輸入到同步單元730和732。導線734和736分別傳遞經過與P1_Clk同步的導線738和762上的邏輯狀態。由導線734和736傳遞的同步邏輯狀態被異或門724執行異或運算(就是說,生產者604和消費者606的位寄存器的值被帶入生產者602的時鐘域中并被進行比較)。
異或門724的輸出被導線722送到異或門720的一個輸入端。由導線710傳遞的信號也被輸入到異或門720。這樣,異或門720將生產者604和消費者606的位寄存器值的比較結果,與生產者602的位寄存器的值進行比較。
異或門720的輸出作為P1_Test信號被導線726傳遞。P1_Test信號表示的邏輯狀態決定了共享資源608是否對生產者602開放使用。如果P1_Test信號是低態(即對共享資源608的寫操作次數等于對共享資源608的讀操作次數),生產者602就可以對共享資源608寫數據;但如果P1_Test信號是高態(即對共享資源608的寫操作次數不等于對共享資源608的讀操作次數),生產者602就不得對共享資源608寫數據。
正如在對附圖5a的討論中所述,P1_Add信號P1_Test信號之間的定時關系是本發明的一個重要優點。由生產者602生成的P1_Add信號能使P1_Test信號的邏輯狀態在一個P1_CLk時鐘周期內被更新。對P1_Test信號的立即更新,消除了任何這樣的時間窗口在這種時間窗口中,生產者602由于其自己最近進行的寫操作的影響,不能檢測到共享資源不可用性。如上所述,因此就沒有必要用插入延遲的方法來防止生產者602過早訪問共享資源608。
生產者604和消費者606也對導線710、738和762傳遞的信號獨立地進行比較。生產者604和消費者606與同一時鐘P2C1_Clk同步操作。導線738和762傳遞的信號與時鐘P2C1_CLk是同步的,因此在被生產者604和消費者606比較之前不必進行同步。不過,導線710傳遞的信號(即生產者602的位寄存器的值)與時鐘P2C1_CLk是不同步的,因此有必要被進行同步。所以,導線710傳遞的信號被輸入到同步單元778。
同步單元778的輸出端表示經過與時鐘P2C1_CLk同步后的導線710傳遞的邏輯狀態,它被導線780傳遞到異或門760的一個輸入端。生產者604的位寄存器的值被導線762傳遞到異或門760的另一個輸入端。因此,異或門760比較生產者602和生產者604的位寄存器的值。異或門760的輸出傳遞到異或門754的一個輸入端,消費者606的位寄存器的值被導線738傳遞到異或門754的另一個輸入端。異或門754輸出的就是導線756傳遞的C1_Test信號。
C1_Test信號表示的邏輯狀態決定了共享資源608是否對消費者606開放使用。如果C1_Test信號是高態(即對共享資源608的寫操作次數不等于對共享資源608的讀操作次數),消費者606就可以從共享資源608讀數據;但是如果C1_Test信號是低態,消費者606就不得從共享資源608讀數據。
以上描述的P1_Add信號與P1_Test信號之間的關系,也存在與C1_Sub信號與C1_Test信號之間。因為每個C1_Sub信號使C1_Test信號在消費者時鐘P2C1_Clk的一個時鐘周期內被更新,消費者606就不會過早從共享資源608讀數據。
同步單元778的輸出表示經過與時鐘P2C1_CLk同步后的生產者604的位寄存器的值,它也被導線780傳遞到異或門782的一個輸入端。消費者606的位寄存器的值被導線738傳遞到異或門782的另一個輸入端。因此,異或門782比較生產者602和消費者606的位寄存器的值。異或門782的輸出被導線738傳遞到異或門786的一個輸入端,生產者的位寄存器的值被導線762傳遞到異或門786的另一個輸入端。異或門786輸出的就是導線788傳遞的P2_Test信號。
P2_Test信號表示的邏輯狀態決定了共享資源608是否對生產者604開放使用。如果P2_Test信號是低態,生產者604就可向共享資源608寫數據;但是如果P2_Test信號是高態,生產者604不得對共享資源608寫數據。以上描述的P1_Add信號與P1_Test信號之間的有利關系,也存在與P2_Add信號與P2_Test信號之間。就是說,因為C1_Test信號在每個C1_Sub信號的一個時鐘周期內被更新,生產者604就不會過早對共享資源608寫數據。
正如在對附圖5a的討論中所述,由連接復位(R)輸入端708、746和771的一個復位導線(未在圖中表示)傳遞的活動高態脈沖,使生產者602、生產者604和消費者606被設置到初始狀態條件,在初始條件下,共享資源608可以由于寫操作。
附圖7b與附圖7a相似,是一個代表允許兩個生產者子系統和兩個消費者子系統獨立地檢測共享資源狀態的邏輯的邏輯圖。附圖7b中的邏輯圖采取由第二個生產者與消費者共用一個時鐘的方法,減少了系統所需的邏輯。附圖7b中沒有將共享資源表示出來,也沒有將這兩個生產者子系統和消費者子系統完整地表示出來。附圖7b只表示了含有這兩個生產者子系統和消費者子系統的位寄存器和檢測邏輯部件的那些部件。
附圖7b中標號為702至720的部件與附圖7a中相同標號的部件完全一樣,因此,對這部分部件不再重復說明。
導線722連接同步單元724的輸出端與異或門720的一個輸入端。異或門720輸出的P1_Test信號被導線726傳送,輸入到生產者602(附圖6中未予表示)。導線728將第一時鐘(P1_Clk)與D觸發器702的時鐘輸入端719連接。導線728也將P1_Clk與同步單元724連接。導線730將D觸發器734的D輸出端732與同步單元724的輸入端連接。D觸發器734有一個D輸入端736、復位(R)輸入端738和時鐘輸入端739。導線730將Q輸出端連接到異或門740的一個輸入端。導線742將異或門740的第二個輸入端與異或門744的輸出端連接。異或門744的第一個輸入是消費者606(見附圖6)生成并由導線746傳送的C1_Sub信號。異或門744的第一個輸入是生產者604(見附圖6)生成并由導線748傳送的P2_Add信號。異或門740的輸出經導線750傳送到D觸發器734的D輸入端736。
導線752將第二時鐘(P2C1_Clk)連接到D觸發器734的時鐘輸入端739上。導線752還將P2C1_Clk連接到同步元件754上。同步元件754的輸入端由導線710連接在D觸發器702的Q輸出端706上。導線756將同步元件754的輸出端連接在異或門758的輸入端上。該異或門的第二輸入端由導線730連接在D觸發器734的Q輸出端732上。異或門758的輸出為由導線760傳播的P2C1_Test信號。
生產者602使用的附圖7b中的第一個位寄存器包括異或門712和D觸發器702。不過,因為異或門712和D觸發器702的功能與附圖7a中相同標號的部件的功能相同,所以就不再重復說明。附圖7b中P1_Add信號和P_Test信號之間的關系,與附圖7b中同樣兩個信號之間的關系也一樣,因此也就不再重復說明它們的操作。
由于生產者604與消費者606與相同的時鐘P2C1_Clk同步操作,所以可以對包含各位寄存器功能的邏輯、以及檢測共享資源608的狀態所需的邏輯進行簡化。。附圖7b中,第二個位寄存器由生產者604和消費者606共用。該第二個位寄存器包括異或門740和D觸發器734。如上所述,D觸發器734的Q輸出732通過導線730傳送到異或門740的一個輸入端,異或門740的輸出通過導線750傳送到D觸發器734的D輸入端736,所以異或門740與D觸發器734具有位寄存器的功能。就是說,通過導線742傳送到異或門740的第二個輸入端的高脈沖信號,使D觸發器734翻轉Q輸出端732的邏輯狀態,并通過導線730傳送這種邏輯狀態,直到導線742傳送另一個這種高脈沖信號。
P2_Add信號和C1_SUb信號分別由導線748和746傳送到異或門744的兩個輸入端。應當明白,由導線742傳送的異或門744的輸出,代表生產者604生成的P2_Add信號或消費者606生成的C1_SUb信號。P2_Add信號或C1_SUb信號被生成時,異或門744輸出這個信號。不過應當明白,當P2_Add信號與C1_SUb信號被同時生成時(即在同一個時鐘周期到達異或門744),異或門744輸出的邏輯狀態不會改變。因為生產者604和消費者606在相同的時鐘域中操作,并且第二個位寄存器任何時刻只能被生產者604和消費者606中二者之一更新而永遠不能被兩者更新,所以生產者604和消費者606可以如上所述共用一個位寄存器。
生產者604和消費者606還共用一個P2C1_Test信號,該信號確定共享資源608可用于寫操作還是可用于讀操作。通過導線760傳送的P2C1_Test信號代表第一個位寄存器的邏輯狀態與第二個位寄存器的邏輯狀態進行比較后得出的一個邏輯狀態。第一個位寄存器的邏輯狀態表示由第一個生產者602對共享資源608進行寫操作的次數。第二個位寄存器的邏輯狀態表示由第二個生產者604對共享資源608進行寫操作的次數,減去消費者606對共享資源608進行讀操作的次數。因為生產者604每次啟動一個對共享資源608寫操作時就要更新第二個位寄存器的內容,消費者606每次啟動一個對共享資源608讀操作時也要更新第二個位寄存器的內容,所以就無須隨后對生產者604的寫操作次數與消費者606的讀操作次數進行比較。
通過導線730傳送到異或門758一個輸入端的信號,代表生產者604與消費者606共用的第二個位寄存器的邏輯狀態。通過導線756傳送到異或門758一個輸入端的信號,代表一被與時鐘P2C1_Clk同步的第一個位寄存器的邏輯狀態。異或門758輸出P2C2_Test信號,它通過導線760被傳送給生產者604和消費者606。
因此P2C2_Test信號代表的邏輯狀態,就能確定共享資源608是否可以被第二個生產者604用于寫操作,就能確定共享資源608是否可以被消費者606用于讀操作。當P2C2_Test信號是低態時,共享資源608可以被第二個生產者604用于寫操作,但不能被消費者606用于讀操作;當P2C2_Test信號是高態時,共享資源608不能被第二個生產者604用于寫操作,但可以被消費者606用于讀操作。
附圖8是一個數字系統的一部分的簡化方框圖,該系統中有一個與第一時鐘(P1_Clk)同步操作的第一個生產者子系統802,一個與第二時鐘(P2_Clk)同步操作的第二個生產者子系統804,一個與第三時鐘(C1_Clk)同步操作的第一個消費者子系統806,一個與第四時鐘(C2_Clk)同步操作的第二個消費者子系統808。所有時鐘P1_Clk、P2_Clk、C1_Clk、C2_Clk之間互相不同步。
第一個生產者802中有檢測邏輯部件812和位寄存器814。第二個生產者804中有檢測邏輯部件816和位寄存器818。第一個消費者806中有檢測邏輯部件820和位寄存器822。第二個消費者808中有檢測邏輯部件824和位寄存器826。
這四個子系統802、804、806和808共享資源810。子系統802、804、806和808能用檢測邏輯部件812、816、820和824獨立地檢測共享資源810的狀態。位寄存器814、818、822和826能表示數值0或1。各子系統802、804、806和808都能讀取每一個位寄存器814、818、822和826的值。因為這四個子系統802、804、806和808在各自的異步時鐘域中操作,所以應當明白,每一個位寄存器814、818、822和826的值必須被同步到每個異步時鐘。
附圖8中相應地表示了一例如一第一個消費者806的位寄存器822的值、第二個消費者808的位寄存器826的值、第二個生產者804的位寄存器818的值,向含有3個由時鐘P1_Clk定時的同步單元組成的同步單元組830中進行的傳送。同步后的位寄存器822、826和818的值,被傳送到第一個生產者802的檢測邏輯部件812中。至此,第一個生產者802就可以使用各個位寄存器814、818、822和826的值。
與此類似,含有3個由時鐘P2_Clk定時的同步單元組成的同步單元組832對位寄存器814、822和826的值進行同步,使得這些數值能被第二個生產者804使用;含有3個由時鐘C1_Clk定時的同步單元組成的同步單元組834對位寄存器814、818和826的值進行同步,使得這些數值能被第一個消費者806使用;含有3個由時鐘C2_Clk定時的同步單元組成的同步單元組836對位寄存器814、818和822的值進行同步,使得這些數值能被第二個消費者808使用。
如上所述,生產者或消費者通過對各個子系統的各自的位寄存器的值進行異或運算,就可以確定共享資源的狀態。因此,第一個生產者802對位寄存器814、818、822和826的值進行異或運算。如果這種異或運算的結果是0,則共享資源810中保存的是過時數據,第一個生產者802可以向共享資源810寫數據。相反,如果這種異或運算的結果不是0,則共享資源810中保存的是新數據,第一個生產者802不得向共享資源810寫數據。檢測共享資源810可用性所需邏輯可用下式表示P1_Test=P1_BitregP2_Bitreg↑P1C1_Bitreg↑P1C2_Bitreg↑P1如果P1_Test等式的值為0,則表明共享資源810中的數據已經被某個消費者讀取過(數據過時),第一個生產者802可以向共享資源810寫入新數據。而如果P1_Test等式的值為1,則表明共享資源810中保存的是新數據,第一個生產者802不得向共享資源810寫入新數據。
附圖8中的消費者采用的是同樣的檢測邏輯。例如,第一個消費者806可以根據下式來確定共享資源810的狀態C1_Test=C1_BitregP1_Bitreg↑P1P2_Bitreg↑P1C2_Bitreg↑P1如果C1_Test式的值為1,則表明共享資源810中保存的是新數據,第一個消費者806可以立即從共享資源810讀數據。相反,如果C1_Test等式的值為0,則表明共享資源810中的數據是過時數據,第一個消費者806不得從共享資源810讀數據。第二個生產者804第二個消費者808采用類似的檢測邏輯。
附圖9的邏輯圖代表的邏輯,允許在不同步時鐘域中操作的兩個生產者子系統和兩個消費者子系統能獨立地檢測共享資源的狀態。共享資源在圖9中未予表示。這兩個生產者子系統和兩個消費者子系統也沒有完整地在圖中表示出來。附圖9中只表示了對附圖8的討論中所述的位寄存器部件和檢測邏輯部件所用的邏輯。
第一個位寄存器包括,異或門902、由時鐘P1_Clk定時的D觸發器904、向該第一個生產者802第一個寄存器輸入的P1_Add信號。前文已經對這種位寄存器中的部件以及這種位寄存器的操作作過詳細說明,在此不再重復。P1_Bitreg信號代表第一個位寄存器的邏輯狀態。因此,第一個生產者802的位寄存器的值(見附圖8)由P1_Bitreg信號表示。
第二個、第三個、第四個位寄存器分別包括,異或門906和由時鐘P2_Clk定時的D觸發器908、異或門910和由時鐘C1_Clk定時的D觸發器910、異或門914和由時鐘C2_Clk定時的D觸發器916。第二個位寄存器還包括一個第二個生產者804向該第二個位寄存器輸入的P2_Add信號。第三個位寄存器還包括一個第一個消費者806向該第三個位寄存器輸入的C1_Sub信號。第四個位寄存器還包括一個第二個消費者808向該第四個位寄存器輸入的C2_Sub信號。第二個、第三個、第四個位寄存器的邏輯狀態分別由P2_Bitreg、C1_Bitreg、C2_Bitreg信號表示。因此,第二個生產者802、第一個消費者806、第二個消費者808的位寄存器的值分別由P2_Bitreg、C1_Bitreg、C2_Bitreg信號表示。
第一個、第二個、第三個、第四個位寄存器分別在各自不同的時鐘域操作。所以,如果每個生產者和消費者子系統要使用這些位寄存器P1_Bitreg、P2_Bitreg、C1_Bitreg、C2_Bitreg的值,就必須使它們與各個異步的時鐘同步。
附圖9中相應地表示了導線918將P1_Bitreg信號輸入到P2_C1k定時的同步單元920、輸入到C1_Clk定時的同步單元922、輸入到C2_Clk定時的同步單元924。與此類似,導線926將P2_Bitreg信號輸入到P1_Clk定時的同步單元928、輸入到C1_Clk定時的同步單元930、輸入到C2_Clk定時的同步單元932。導線934將C1_Bitreg信號輸入到P1_Clk定時的同步單元936、輸入到P2_Clk定時的同步單元938、輸入到C2_Clk定時的同步單元940。導線942將C2_Bitreg信號輸入到P1_Clk定時的同步單元944、輸入到P2_Clk定時的同步單元946、輸入到C1_Clk定時的同步單元948。
正如在對附圖8的討論中所述,將各生產者與消費者子系統的位寄存器的值進行異或運算,就可以確定共享資源的狀態。因此,在附圖9中表示了-例如-導線918將P1_Bitreg信號傳送到異或門950的一個輸入端,導線952將與P1_Clk同步的C1_Bitreg信號傳送到異或門950的第二個輸入端,導線954將與P1_Clk同步的C2_Bitreg信號傳送到異或門956的第一個輸入端,導線958將與P1_Clk同步的P2_Bitreg信號傳送到異或門956的第二個輸入端;異或門950的輸出通過導線960被傳送到異或門964的一個輸入端,異或門956的輸出通過導線962被傳送到異或門964的第二個輸入端;異或門964輸出的P1_Test信號通過導線966被輸入到第一個生產者802。
對位寄存器P1_Bitreg、P2_Bitreg、C1_Bitreg、C2_Bitreg的值的異或運算,就是異或門950、956和964按這種方式完成的。這種異或運算的結果,就是導線966傳播的P1_Test信號。P1_Test信號的值確定共享資源810是否可被第一個生產者802用于寫數據。如果P1_Test信號是低邏輯,則第一個生產者802可以向共享資源810寫入新數據;相反,如果P1_Test信號是高邏輯,則第一個生產者802不得向共享資源810寫入新數據。
應當明白,上文所述的P1_Add與P1_Test之間的關系也存在與附圖9中的P1_Add與P1_Test之間。就是說,第一個生產者802生成的每個P1_Add信號,在第一個生產者時鐘的一個時鐘周期內,對P1_Test進行更新。P1_Test信號立即通知第一個生產者,共享資源810已轉換到不可用狀態,以防止其過早存取共享資源810。在P2_Add與P2_Test之間、C1_Sub與C1_Test之間、C2_Sub與C2_Test之間,也存在著類似的關系。
附圖9中的P2_Test電路、C1_Test電路、C2_Test電路的結構和操作與P1_Test電路的類似,本文不再詳細討論。
本發明適用于有任何數量的生產者子系統和消費者子系統的數字系統。應當明白,兩個或更多的生產者子系統或兩個或更多的消費者子系統共享一個資源時,就需要用一種仲裁器單元來防止兩個或更多的生產者子系統同時向資源寫數據、或兩個或更多的消費者子系統同時從資源讀數據。對共享資源沒有控制的同時訪問被稱為競爭條件。
仲裁器的基本功能是1)接收資源請求;2)接受資源的釋放;3)在資源的所有請求者之間進行仲裁;從及4)將資源交給資源請求者中的一個。仲裁器用這些功能來管理對資源的訪問,可以避免競爭條件。已知有許多這樣的仲裁器單元,本發明并不針對具體的仲裁器單元。
但是,如果人們在有兩個或更多的生產者子系統或兩個或更多的消費者子系統中實施本發明、并因此需要仲裁時,就會發現本發明的另一個優點。為了確定共享資源狀態,傳統上采用的方法是用一個信志來表示資源的可用狀態或不可用狀態。按照傳統方法,每個希望訪問資源的子系統首先要檢查信志的值。在有多種時鐘域的系統中,人們會發現,對于所有與信志異步操作的子系統來說,讀取信志的值、更新信志的值都需要同步延遲。這種延遲增加了仲裁器設計上的復雜性。
在仲裁器發現某個資源被釋放后,仲裁器就將訪問該資源的權力交給另一個請求者。但是,由于同步延遲,新獲授權的該請求者尚不能發現為表示該資源不可用狀態對信志所作的更新,新獲授權的該請求者會訪問該資源(根據仲裁器的授權),但是會過早地訪問該資源(例如,生產者向已經存放新數據的資源寫新數據,或者消費者讀取已經被讀過了的數據)。為了改正這種過早訪問的錯誤,傳統的仲裁器中設置了內置延遲,其長度等于或大于時鐘最慢的子系統檢測信志更新數據所需的最大可能的同步延遲時間。
用本發明方法來確定共享資源的狀態時,就不需要傳統需要的代表共享資源狀態的公用信志。根據本發明方法,各生產者或消費者直接向其它每一個生產者與消費者發送更新信號。因此任何生產者或消費者只需要一次同步操作就能檢測到共享資源的狀態。如附圖10a、10b、10c中所示,任何生產者或消費者的最大更新延遲時間相當于一次同步操作,這事實上就消除了在仲裁器中設計內置延遲的必要性。這就使由于共享資源和對訪問資源進行仲裁而招致的處理速度惡化的程度降至最低限。
附圖10a是一個表示數字系統的一部分的簡化方框圖,該系統包括與第一時鐘P1_Clk同步操作的第一個生產者1002、與第二時鐘P2_Clk同步操作的第二個生產者1004、以及與第二時鐘P2_Clk同步操作的仲裁器1006。
導線1008將第一個生產者1002生成的BUS_Release(總線釋放)信號傳送到由P2_Clk定時的同步單元1010的輸入端。同步單元1010的輸出被傳送到仲裁器1006的輸入端。導線1012將仲裁器1006生成的BUS_Grant(總線_授權)信號輸入到第二個生產者1004。導線1014將第一個生產者1002生成的P1_Bitreg信號傳送到由P2_Clk定時的同步單元1016的輸入端。同步單元1016的輸出通過導線1018被輸入到第二個生產者1004。導線1020將時鐘P2_Clk連接到同步單元1010、同步單元1016、仲裁器1006、第二個生產者1004。
第一個生產者1002在啟動對共享資源(未予表示)的寫操作時,更新P1_Bitreg信號。該P1_Bitreg信號與第一個生產者的第一時鐘P1_Clk同步。如上所述,第二個生產者1004欲按照本發明方法確定共享資源的狀態,必須能讀取P1_Bitreg信號的邏輯狀態,以將其與自己的位寄存器的邏輯狀態進行比較。因此,要用同步單元1016使P1_Bitreg信號的邏輯狀態與P2_CLk同步,同步后的P1_Bitreg信號通過導線1018被傳送到第二個生產者1004。
第一個生產者1002啟動對共享資源的寫操作時,第一個生產者還生成一個BUS_Release信號,通過導線1008輸入到同步單元1010。因為仲裁器與第二時鐘P2_Clk同步,所以BUS_Release信號必須與P2_Clk同步后再由仲裁器1006接收。同步單元1010的輸出代表與P2_Clk同步后的BUS_Release信號。該同步后的BUS_Release信號被輸入到仲裁器1006。仲裁器1006收到BUS_Release信號后的響應是,生成一個BUS_Grant信號,實際是將對共享資源的訪問權交給第二個生產者1004。BUS_Grant信號與P2_Clk同步,所以它被直接輸入到第二個生產者1004。
附圖10a表明,當使用一個與一個生產者子系統同步操作的仲裁器路1006、并采用本發明方法確定共享資源狀態時,為保證仲裁器的正確仲裁定時而在仲裁器1006中導入內置延遲是無必要的。一旦P1_Bitreg信號被同步單元1016與P2_Clk同步,第二個生產者1004就能獲知由第一個生產者1002引起的共享資源狀態的任何變化。BUS_Release信號與P2_Clk同步后被傳送到仲裁器1006,以及仲裁器1006作出響應、生成向第二個生產者1004傳送的BUS_Grant信號,至少需要同樣的時間。因此可知,仲裁器1006在第二個生產者1004能夠檢測到第一個生產者1002的更新后的P1_Bitreg信號之前,不能既檢測到第一個生產者1002的BUS_Release信號,又用BUS_Grant信號將總線授權給第二個生產者1004使用。因此盡管沒有導入降低仲裁器1006的速度的內置延遲,也不可能存在競爭條件。
附圖10b是一個表示與附圖10a中相同的部件的簡化方框圖。不過在附圖10b中,仲裁器1006與第一個生產者1002同步操作。所以仲裁器1006可用直接接收第一個生產者1002的未作同步處理的BUS_Release信號。然而第二個生產者1004與判優電路1006不同步,仲裁器1006生成的BUS_Grant在第二個生產者1004檢測到之前必須先被與P2_Clk同步。與附圖10a中的情形一樣,仲裁器1006在第二個生產者1004能夠檢測到第一個生產者1002的更新后的P1_Bitreg信號之前,不能既檢測到第一個生產者1002的BUS_Release信號,又用BUS_Grant信號將總線授權給第二個生產者1004使用。
附圖10c的部件與附圖10a、10b中的相同,唯一區別是,仲裁器1006與時鐘A_Clk同步,而A_Clk與P1_CLk和P2_Clk都不同步。因此,第一個生產者1002生成的BUS_Release信號在被仲裁器1006檢測到之前必須先與A_Clk同步。而且也因為仲裁器1006與第二個生產者1004不同步,仲裁器1006生成的BUS_Grant信號必須與P2_Clk同步之后,第二生產者1004才能檢測到BUS_Grant信號。所以仲裁器1006生成的BUS_Release信號與仲裁器1006生成的BUS_Grant信號都必須被同步,所以仲裁器1006在第二個生產者1004能夠檢測到第一個生產者1002的更新后的P1_Bitreg信號之前,不可能既檢測到第一個生產者1002的BUS_Release信號,又用BUS_Grant信號將總線授權給第二個生產者1004使用。
附圖10a、10b、10c表明,不管仲裁器選用什么時鐘域,本發明都能避免用向仲裁器或從仲裁器增加額外的延遲的方法來防止產生競爭條件。
附圖11的簡化方框圖中,有與第一時鐘P1_Clk同步操作的第一個生產者1102、與第二時鐘P2_Clk同步操作的第二個生產者1104、與P1_Clk同步操作的第一個仲裁器1106、與第四時鐘C1_Clk同步操作的第一個消費者1108、以及與C1_Clk同步操作的第二個仲裁器1109。
P1_Clk、P2_Clk、C1_Clk三個時鐘互不同步。
導線1110將第一個生產者1102生成的P1_Request(P1_請求)信號傳送到第一個仲裁器1106的一個輸入端。導線1112將第一個仲裁器1106生成的P1_Grant(P1_授權)信號傳送到第一個生產者1102的輸入端。導線1114將第一個生產者1102生成的P1_Add(P1_加)信號傳送到第一個位寄存器1116的輸入端。導線1118將第一個位寄存器1116生成的P1_Bitreg(P1_位寄存器)信號傳送到第一個檢測邏輯部件1120的一個輸入端。第一個檢測邏輯部件1120輸出的P1_Test(P1_檢測)信號通過導線1122輸入到第一個生產者1102。
導線1118還將P1_Bitreg信號輸入到P2_Clk定時的同步單元1124。同步單元1124的輸出信號被傳送到第二個檢測邏輯部件1126的一個輸入端。導線1118還將P1_Bitreg信號輸入到C1_Clk定時的同步單元1128。同步單元1128的輸出信號被傳送到第三個檢測邏輯部件1130的一個輸入端。
導線1134將第二個生產者1104生成的P2_Request信號傳送到P1_Clk定時的同步單元1136。同步單元1136的輸出信號被傳送到第一個仲裁器1106的一個輸入端。導線1138將第一個仲裁器1106生成的P2_Grant信號傳送到P2_Clk定時的同步單元1140。導線1142將第二個生產者1104生成的P2_Add(P2_加)信號傳送到第二個位寄存器1144的輸入端。導線1146將第二個位寄存器1144生成的P2_Bitreg(P2位寄存器)信號傳送到第二個檢測邏輯部件1126的一個輸入端。第二個檢測邏輯部件1126輸出的P2_Test(P2_檢測)信號通過導線1148輸入到第二個生產者1104。導線1146將P2_Bitreg信號輸入到P1_Clk定時的同步單元1150。同步單元1150的輸出信號被傳送到第一個檢測邏輯部件1120的一個輸入端。導線1146還將P2_Bitreg信號輸入到C1_Clk定時的同步單元1152。同步單元1152的輸出信號被傳送到第三個檢測邏輯部件1130的一個輸入端。
導線1145將消費者1108生成的C1_Request信號傳送到第二個仲裁器1109的一個輸入端。導線1156將第二個仲裁器1109生成的C1_Grant信號傳送到消費者1108的輸入端。導線1158將消費者生成的C1_Add(C1_減)信號傳送到第三個位寄存器1160的輸入端。導線1162將第三個位寄存器1160生成的C1_Bitreg(C1_位寄存器)信號傳送到第三個檢測邏輯部件1130的一個輸入端。第三個檢測邏輯部件1130輸出的C1_Test(C1_檢測)信號通過導線1164輸入到消費者1108。導線1162還將C1_Bitreg信號輸入到P1_Clk定時的同步單元1166。同步單元1166的輸出信號被傳送到第一個檢測邏輯部件1120的一個輸入端。導線1162還將C1_Bitreg信號輸入到P2_Clk定時的同步單元1168。同步單元1168的輸出信號被傳送到第二個檢測邏輯部件1126的一個輸入端。
導線1170將P1_Clk連接到第一個生產者1102、第一個仲裁器1106、以及同步單元1136、1150和1166。導線1172將P2_Clk連接到第二個生產者1104、以及同步單元1140、1124和1168、導線1174將C1_Clk連接到消費者1108、第二個仲裁器1109、以及同步單元1128和1152。
附圖12是表示附圖11中各部件生成的某些信號之間定時關系的定時圖。附圖12中包括了在一個時間間隔(t)內與三個時鐘P1_Clk、P2_Clk、C1_Clk同步生成的那些信號。P1_Clk信號1202表示在時間間隔t內,由P1_Clk生成的邏輯狀態的變換。P2_Clk信號1204表示在時間間隔t內,由P2_Clk生成的邏輯狀態的變換。C1_Clk信號1206表示在時間間隔t內,由C1_Clk生成的邏輯狀態的變換。應當明白,在時間間隔t內,P2_Clk生成的變換的數量少于P1_Clk生成的變換的數量(即P2_Clk比P1_Clk更快)。與此類似,在時間間隔t內,C1_Clk生成的變換的數量多于P1_Clk生成的變換的數量(即C1_Clk比P1_Clk更快)。
P1_Request信號1208和P2_Request信號1210分別與P1_Clk信號1202和P2_Clk信號1204同步,從低轉到高。P1_Request信號1208和P2_Request信號1210分別由第一個生產者1102(見附圖11)和第二個生產者1104(見附圖11)幾乎同時生成。P1_Request信號1208和P2_Request信號1210分別由導線1110和1134(見附圖11)傳送到第一個仲裁器1106。由此可知,第一個生產者1102和第二個生產者1104正競相爭取訪問一個共享資源(圖中未予表示)。
消費者1108(見附圖11)生成的C1_Request信號1224與C2_Clk信號1206同步,從低轉到高。C1_Request信號1224的轉換被傳送到第二個仲裁器1109的輸入端,表示消費者1108要求訪問共享資源。C1_Request信號1224發生轉換后,由第二個仲裁器1109生成的C1_Grant信號從低轉到高,表示第二個仲裁器1109已經授權消費者1108訪問共享資源。其它正競相爭取訪問共享資源的消費者,圖中未予表示。
P1_Request信號1208和P2_Request信號1210發生從低到高轉換后,P1_Grant信號1212從低轉到高。由第一個仲裁器1106生成的這個P1_Grant信號,表示第一個生產者已被授權訪問該共享資源。P2_Request信號1210繼續保持在高態,表示第二個生產者繼續要求訪問共享資源。
第一個生產者1102獲得共享資源訪問權后,啟動對共享資源的寫操作,還生成一個表示啟動過寫操作的P1_Add信號。于是,在P1_Grant信號發生轉換后P1_Clk生成的下一個完整波形轉換發生時,P1_Add信號1214從低轉到高。該P1_Add信號1214被輸入到第一個位寄存器1116。在P1_Clk的下一個完整波形轉換發生時,第一個位寄存器(見附圖11)將位寄存器信號1216的邏輯狀態從低變為高。而且,由于第一個生產者1102已經啟動了對共享資源的寫操作,該第一個生產者就通過將P1_Request信號的邏輯狀態從高變為低,收回其對共享資源的訪問請求。
因為P1_Add信號1214是脈沖信號,其向低轉換與P1_Bitreg信號1216的邏輯狀態轉換同時發生。P1_Bitreg信號1216立即被傳送到第一個檢測邏輯部件1120(見附圖11),后者也立即使P1_Test信號1218的邏輯狀態從低轉到高。重要的是,因為P1_Test信號1218的更新,是在第一個生產者1102啟動寫操作后P1_Clk發生一個完整波形轉換的時間內完成的,所以第一個生產者1102能獲知由其自己的寫操作引起的共享資源狀態的改變,在被通知之前就不可能進行另一次寫操作。
P1_Bitreg信號被導線1118傳送到P2_Clk定時的同步單元1124。同步單元1124輸出的與P2_Clk同步了的P1_Bitreg信號,然后被傳送到第二個檢測邏輯部件1126。因為同步單元1124是由P2_Clk定時的,第二個檢測邏輯部件要在等到P2_Clk信號1204發生一個完整波形轉換時,才更新P2_Test信號1220。就這樣,在P1_Bitreg信號1216轉換后P2_Clk信號1204發生一個完整波形轉換時,與P1_Bitreg信號1216異步的P2_Test信號1220從低轉到高。
對第三個檢測邏輯部件1130,P1_Bitreg信號也要被類似地進行同步。相應地,第三個檢測邏輯部件1130要在P1_Bitreg信號1216轉換后C1_Clk信號發生一個完整波形轉換時,才更新C1_Test信號1222。C1_Test信號1222與P1_Bitreg信號1216不同步,因此在P1_Bitreg信號1216轉換后C1_Clk信號發生一個完整波形轉換時,C1_Test信號1120從低轉到高。
當P2_Test信號1220和C1_Test信號1222發生轉換時,第二個生產者1104和消費者1108能夠分別檢測到由第一個生產者1102啟動的寫操作所引起的共享資源狀態的變化。由于C1_Clk信號1206生成轉換時比P2_Clk信號1204快,所以消費者1108能比第二個生產者1104較早地檢測到共享資源狀態的這種變化。
消費者1108在從第二個仲裁器1109得到訪問共享資源的授權后,在C1_Test信號1222轉換后C1_Clk信號的一個完整波形轉換時間內,啟動對共享資源的讀訪問。消費者1108還通過生成一個C1_Sub信號1228來表示啟動過讀操作。如同P1_Add信號1214一樣,C1_Sub信號1228是一個脈沖,因此在C1_Clk信號1206的一個周期內由低轉高,再由高轉低。C1_Sub信號1228被發送到第三個位寄存器1160。第三個位寄存器1160在C1_Clk信號1206的下一個完整波形轉換時,使C1_Bitreg信號1230從低變到高。
C1_Bitreg信號1230立即被傳送到第三個檢測邏輯部件1160(見附圖11),后者立即將C1_Test信號從高變為低。傳送C1_Bitreg信號1230到同步單元1126和1168,使C1_Bitreg信號1230分別與P1_Clk信號1202和P2_Clk信號1204同步。完成這種同步后,在C1_Test信號1222轉換后P1_Clk信號1202發生一個完整波形轉換時,P1_Test信號1218從高轉到低。同樣,在C1_Test信號1222轉換后P2_Clk信號1204發生一個完整波形轉換時,P2_Test信號1220從高轉到低。P1_Test信號1218和P2_Test信號1220的這種轉換表明,第一個生產者1102和第二個生產者1104能夠檢測到由于消費者1108啟動對共享資源的讀訪問所引起的共享資源狀態的變化。
由于第一個生產者1102將P1_Request信號1208的邏輯狀態從高轉到低,并且第二個生產者1104保持著P2_Request1210信號的高邏輯狀態,所以第一個仲裁器1106使P2_Grant信號1232從低變為高,將對共享資源的訪問權授予第二個生產者1104。第二個生產者得到共享資源訪問權并由P2_Test信號1220的低邏輯狀態獲知共享資源可用時,就啟動對共享資源的寫操作。為了指出已經啟動了這種寫操作,第二個生產者1104使P2_Add信號1234從低變為高。因為P2_Add信號1234是個脈沖,所以它在P2_Clk信號1204發生一個完整波形轉換的期間內從低變為高并從高變為低。
P2_Add信號1234被傳送到第二個位寄存器1144,后者在P2_Add信號1234轉換后P2_Clk信號1204發生一個完整波形轉換時,使P2_Bitreg信號1236從低變為高。該P2_Bitreg信號1236立即被傳送到第二個檢測邏輯部件1126,后者立即使P2_Test信號1220從低變為高。
P2_Bitreg信號1236被傳送到同步單元1150和1152,它們分別將該P2_Bitreg信號1236與P1_Clk信號1202和C1_Clk信號1206同步。在這種同步操作完成后,同步后的P2_Bitreg信號1236分別被傳送到第一個檢測邏輯部件1120和第三個檢測邏輯部件1130。第一個檢測邏輯部件使P1_Test信號1218從低變為高。不過,因為P2_Bitreg信號1236與P1_Test信號1218異步,所以P1_Test信號1218直到P2_Bitreg信號1236轉換后P1_Clk信號發生一個完整波形轉換時,才發生轉換。
與此類似,第三個檢測邏輯部件在P2_Bitreg信號1236轉換后C1_Clk信號1206發生一個完整波形轉換時,使C1_Test信號1222從低變為高。
C1_Grant信號1226保持在高邏輯狀態,因此消費者1108仍然對共享資源有訪問權。因為C1_Test信號1222處于高邏輯狀態,所以共享資源可以被消費者1108訪問。消費者1108于是啟動對共享資源的讀操作并生成表示這種讀操作已經啟動的一個C1_Sub信號1228脈沖。如上所述,C1_Sub信號1228是個脈沖,它在C1_Clk信號發生一個完整波形轉換時降為低。該C1_Sub信號1228被傳送到第三個位寄存器1160,后者使C1_Bitreg信號1230從高變為低。該C1_Bitreg信號1230被傳送到第三個檢測邏輯部件1130,后者立即使C1_Test信號1222從高變為低。如上所述C1_Bitreg信號1230被分別與P1_Clk信號1202和C1_Clk信號1206同步后使P1_Test信號1218和P2_Test信號1220從高變為低。
應當明白,本發明不是針對仲裁器的功能而提出的,本發明也不依賴于任何對子系統之間的仲裁方法。
在不偏離本文所述的基本特點的條件下,本發明可以有其它的特定實施方式。以上描述的各實施例都是說明性的而不是限制性的。本發明的范圍由下面的各權利要求而不是由前面的說明界定。在權利要求的等效范圍和思想內所作的任何與全部改動,應視為不超出權利要求的范圍。
權利要求
1.一種用于確定數字系統的資源的狀態的方法,其中,與第一時鐘同步操作的第一個子系統向所述資源寫數據,與第二時鐘同步操作的第二個子系統從所述資源讀數據,所述第二時鐘與所述第一時鐘異步,在上次寫入所述資源中的數據被所述第二個子系統讀取之前,所述資源不得被所述第一個子系統用于寫入其它數據,所述方法包括以下步驟生成代表所述第一個子系統對所述資源進行寫訪問的次數的第一個數目,所述第一個數目的生成與所述第一時鐘同步;生成代表所述第二個子系統對所述資源進行讀訪問的次數的第二個數目,所述第二個數目的生成與所述第二時鐘同步;將所述第一個數目與所述第二時鐘同步,生成第三個數目;將所述第二個數目與所述第一時鐘同步,生成第四個數目;比較所述第一個數目與所述第四個數目,為所述第一個子系統生成第一個資源可用信號,當所述第一個數目等于所述第四個數目時,所述第一個資源可用信號便活動,所述第一個資源可用信號的生成與所述第一時鐘同步;比較所述第二個數目與所述第三個數目,為所述第二個子系統生成第二個資源可用信號,當所述第二個數目不等于所述第三個數目時,所述第二個資源可用信號便活動,所述第二個資源可用信號的生成與所述第二個時鐘同步。
2.權利要求1中定義的方法,其中,所述第一個數目、所述第二個數目、所述第三個數目、所述第四個數目代表一個0或1的數值,所述數值被遞增時從1變為0、從0變為1,其中的所述第一個資源可用信號通過所述第一個數目與所述第四個數目的異或運算生成,其中的所述第二個資源可用信號通過所述第二個數目與所述第三個數目的異或運算生成。
3.權利要求1中定義的方法,其中,有一個與第三時鐘同步操作的第三個子系統,所述第三時鐘與所述第一時鐘和所述第二時鐘異步,所述第三個子系統向所述資源寫數據;在上次寫入所述資源中的數據被所述第二個子系統讀取之前,所述資源不得被所述第三個子系統用于寫入其它數據,所述方法還包括以下步驟生成代表所述第三個子系統對所述資源進行寫訪問的次數的第五個數目,所述第五個數目的生成與所述第三時鐘同步;將所述第一個數目與所述第三時鐘同步,生成第六個數目;將所述第二個數目與所述第三時鐘同步,生成第七個數目;將所述第五個數目與所述第一時鐘同步,生成第八個數目;將所述第五個數目與所述第二時鐘同步,生成第九個數目;通過將所述第一個數目與所述第八個數目的和與所述第四個數目進行比較,生成所述第一個資源可用信號,當所述第一個數目與所述第八個數目的所述和等于所述第四個數目時,所述第一個資源可用信號便活動;通過將所述第三個數目與所述第九個數目的和與所述第二個數目進行比較,生成所述第二個資源可用信號,當所述第三個數目與所述第九個數目的所述和不等于所述第二個數目時,所述第二個資源可用信號便活動;以及通過將所述第五個數目與所述第六個數目的和與所述第七個數目進行比較,生成所述第三個資源可用信號,當所述第五個數目與所述第六個數目的所述和等于所述第七個數目時,所述第三個資源可用信號便活動,所述第三個資源可用信號的生成與所述第三時鐘同步。
4.權利要求3中定義的方法,其中,有一個與第四時鐘同步操作的第四個子系統,所述第四時鐘與所述第一時鐘、所述第二時鐘、所述第三時鐘異步,所述第四個子系統從所述資源讀數據;在上次寫入所述資源中的數據被所述第二個子系統或所述第四個子系統讀取之前,所述資源不得被所述第一個子系統或所述第三個子系統用于寫入其它數據,所述方法還包括以下步驟生成代表所述第四個子系統對所述資源進行讀訪問的次數的第十個數目,所述第十個數目的生成與所述第四時鐘同步;將所述第一個數目與所述第四時鐘同步,生成第十一個數目;將所述第二個數目與所述第四時鐘同步,生成第十二個數目;將所述第五個數目與所述第四時鐘同步,生成第十三個數目;將所述第十個數目與所述第一時鐘同步,生成第十四個數目;將所述第十個數目與所述第二時鐘同步,生成第十五個數目;將所述第十個數目與所述第三時鐘同步,生成第十六個數目;通過將所述第一個數目與所述第八個數目的和與所述第四個數目與所述第十四個數目的和進行比較,生成所述第一個資源可用信號,當所述第一個數目與所述第八個數目的所述和等于所述第四個數目與所述第十四個數目的和時,所述資源可用信號便活動;通過將所述第三個數目與所述第九個數目的和與所述第二個數目與所述第十五個數目的和進行比較,生成所述第二個資源可用信號,當所述第三個數目與所述第九個數目的所述和不等于所述第二個數目與所述第十五個數目的和時,所述第二個資源可用信號便活動;通過將所述第五個數目與所述第六個數目的和與所述第七個數目與所述第十六個數目的和進行比較,生成所述第三個資源可用信號,當所述第五個數目與所述第六個數目的所述和等于所述第七個數目與所述第十六個數目的和時,所述第三個資源可用信號便活動;以及通過將所述第十一個數目與所述第十三個數目的和與所述第十個數目與所述第十二個數目的和進行比較,生成第四個資源可用信號,當所述第十一個數目與所述第十三個數目的和等于所述第十個數目與所述第十二個數目的和時,所述第四個資源可用信號便活動,所述第四個資源可用信號的生成與所述第四時鐘同步。
5.權利要求1中定義的方法,其中,有一個與第三時鐘同步操作的第三個子系統,所述第三時鐘與所述第一時鐘和所述第二時鐘異步,所述第三個子系統從所述資源讀數據;在上次寫入所述資源中的數據被所述第二個子系統或所述第三個子系統讀取之前,所述資源不得被所述第一個子系統用于寫入其它數據,所述方法還包括以下步驟生成代表所述第三個子系統對所述資源進行讀訪問的次數的第五個數目,所述第五個數目的生成與所述第三時鐘同步;將所述第一個數目與所述第三時鐘同步,生成第六個數目;將所述第二個數目與所述第三時鐘同步,生成第七個數目;將所述第五個數目與所述第一時鐘同步,生成第八個數目;將所述第五個數目與所述第二時鐘同步,生成第九個數目;通過將所述第一個數目與所述第八個數目與所述第四個數目的和進行比較,生成所述第一個資源可用信號,當所述第一個數目等于所述第八個數目與所述第四個數目的所述和時,所述第一個資源可用信號便活動;通過將所述第三個數目與所述第九個數目與所述第二個數目的和進行比較,生成所述第二個資源可用信號,當所述第三個數目不等于所述第九個數目與所述第二個數目的所述和時,所述第二個資源可用信號便活動;以及通過將所述第五個數目與所述第六個數目與所述第七個數目的和進行比較,生成所述第三個資源可用信號,當所述第五個數目等于所述第六個數目與所述第七個數目的所述和時,所述第三個資源可用信號便活動,所述第三個資源可用信號的生成與所述第三時鐘同步。
6.一種確定數字系統中資源的狀態的方法,其中,至少有一個寫數據的子系統向所述資源寫數據,至少有一個讀數據的子系統從所述資源讀數據,在某一個所述讀數據的子系統從所述資源中讀取上一次寫入的數據之前,所述資源不能用于被所述寫數據的子系統寫入其它數據。其中,各個讀數據子系統和各個寫數據子系統與各自的時鐘同步,其中至少有一個寫數據的子系統與一個第一時鐘同步操作,至少有一個讀數據的子系統與一個第二時鐘同步操作,所述第二時鐘與所述第一時鐘異步,該方法包括的步驟是為每個寫數據子系統生成一個寫操作數目,各所述寫操作數目分別代表對應的所述寫數據子系統對所述資源進行寫訪問的次數,各所述寫數據子系統的各所述寫操作數目的生成與所述寫數據子系統的所述對應時鐘同步;為每個讀數據子系統生成一個讀操作數目,各所述讀操作數目分別代表對應的所述讀數據子系統對所述資源進行讀訪問的次數,各所述讀數據子系統的各所述讀操作數目的生成與所述讀數據子系統的所述對應時鐘同步;將各個寫操作數目與所述寫數據子系統的時鐘和所述讀數據子系統的時鐘同步;將各個讀操作數目與所述寫數據子系統的時鐘和所述讀數據子系統的時鐘同步;將所述寫操作數目相加,生成一個寫操作總數目,所述加法操作由各所述寫數據子系統和各所述讀數據子系統獨立地完成;將所述讀操作數目相加,生成一個讀操作總數目,所述加法操作由各所述寫數據子系統和各所述讀數據子系統獨立地完成;比較所述寫操作總數目與所述讀操作總數目,生成資源可用于寫操作信號,當所述寫操作總數目等于所述讀操作總數目時,所述資源可用于寫操作信號便活動,所述比較由各所述寫數據子系統獨立地完成,以生成各自的資源可用于寫操作信號;以及比較所述寫操作總數目與所述讀操作總數目,生成資源可用于讀操作信號,當所述寫操作總數目不等于所述讀操作總數目時,所述資源可用于讀操作信號便活動,所述比較由各所述讀數據子系統獨立地完成,以生成各自的資源可用于讀操作信號。
7.權利要求6中定義的方法,其中,所述寫操作數目和所述讀操作代表一個0或1的數值,所述數值被遞增時從1變為0或從0變為1,其中所述寫操作總數目通過對所述各寫操作數目進行異或運算而生成,其中所述讀操作總數目通過對所述各讀操作數目進行異或運算而生成,其中所述的資源可用于寫操作信號通過所述寫操作總數目與所述讀操作總數目的異或運算生成,其中所述的資源可用于寫操作信號由各所述寫操作子系統獨立生成,其中所述的資源可用于讀操作信號通過所述寫操作總數目與所述讀操作總數目的異或運算生成,其中所述的資源可用于讀操作信號由各所述讀操作子系統獨立生成。
8.一種確定數字系統中資源的狀態的方法,其中,與一個第一時鐘同步操作的第一個子系統對所述資源進行一級訪問,與一個第二時鐘同步操作的第二個子系統對所述資源進行二級訪問,所述第一時鐘與所述第二時鐘異步,其中,在發生一次所述二級訪問之前,所述資源不能用于進行其它所述一級訪問,并且,在發生一次所述一級訪問之前,所述資源不能用于所述二級訪問,所述一級訪問與所述二級訪問在時間上交替進行,所述方法包括的步驟是生成代表所述第一個子系統對所述資源進行所述一級訪問的次數的第一個數目,所述第一個數目的生成與所述第一時鐘同步;生成代表所述第二個子系統對所述資源進行所述二級訪問的次數的第二個數目,所述第二個數目的生成與所述第二時鐘同步;將所述第一個數目與所述第二時鐘同步,生成第三個數目;將所述第二個數目與所述第一時鐘同步,生成第四個數目;比較所述第一個數目與所述第四個數目,為所述第一個子系統生成第一個資源可用信號,當所述第一個數目等于所述第四個數目時,所述第一個資源可用信號便活動,所述第一個資源可用信號的生成與所述第一時鐘同步;以及比較所述第二個數目與所述第三個數目,為所述第二個子系統生成第二個資源可用信號,當所述第二個數目不等于所述第四個數目時,所述第二個資源可用信號便活動,所述第二個資源可用信號的生成與第二個時鐘同步。
9.一種確定數字系統中資源的狀態的裝置,其中,一個寫操作子系統向該所述資源發送寫信號,一個讀操作子系統向所述資源發送讀信號,其中,所述寫操作子系統與第一時鐘同步,所述讀操作子系統與第二時鐘同步,所述第一時鐘與所述第二時鐘異步,所述裝置包括第一信志單元,它生成有著第一邏輯狀態和第二邏輯狀態的第一更新信號,每次當所述寫操作子系統向所述資源寫數據時,所述第一信志單元對所述寫信號作出響應,與所述第一時鐘同步地改變所述第一更新信號的邏輯狀態;第二信志單元,它生成有著第一邏輯狀態和第二邏輯狀態的第二更新信號,每次當所述讀操作子系統從所述資源讀數據時,所述第二信志單元對所述讀信號作出響應,與所述第二時鐘同步地改變第二更新信號的邏輯狀態;第一同步單元,它將所述第一更新信號與所述第二時鐘同步,生成第一同步更新信號;第二同步單元,它將所述第二更新信號與所述第一時鐘同步,生成第二同步更新信號;第一檢測單元,它生成有著第一邏輯狀態和第二邏輯狀態的第一檢測輸出信號,當所述第一更新信號等于所述第二同步更新信號時,所述第一檢測單元生成所述第一邏輯狀態的所述第一檢測輸出信號,當所述第一更新信號不同于所述第二同步更新信號時,所述第一檢測單元生成所述第二邏輯狀態的所述第一檢測輸出信號;以及第二檢測單元,它生成有著第一邏輯狀態和第二邏輯狀態的第二檢測輸出信號,當所述第一同步更新信號等于所述第二更新信號時,所述第二檢測單元生成所述第一邏輯狀態的所述第二檢測輸出信號,當所述第一同步更新信號不同于所述第二更新信號時,所述第二檢測單元生成所述第二邏輯狀態的所述第二檢測輸出信號。
10.權利要求9中定義的裝置,其中,所述第一信志含有第一異或門和第一D觸發器,所述第一異或門有第一輸出,所述第一輸出連接所述第一D觸發器的輸入端,所述第一D觸發器有第二輸出,所述第二輸出連接所述第一異或門的一個輸入端;以及所述第二信志含有第二異或門和第二D觸發器,所述第二異或門有第三輸出,所述第三輸出連接所述第二D觸發器的輸入端,所述第二D觸發器有第四輸出,所述第四輸出連接所述第二異或門的一個輸入端;
11.權利要求9中定義的裝置,其中,所述第一同步單元含有兩個鎖存D觸發器,所述第二同步單元含有兩個鎖存D觸發器。
12.權利要求9中定義的裝置,其中,所述第一檢測單元含有一個異或門,以及所述第二檢測單元含有一個異或門。
13.一種確定數字系統中資源的狀態的裝置,其中,與第一時鐘同步操作的第一個子系統向所述資源寫數據,與第二時鐘同步操作的第二個子系統從所述資源讀數據,所述第一時鐘與所述第二時鐘異步,在由所述第二個子系統從資源中讀取上一次寫入的數據之前,所述資源不能用于被所述第一個子系統寫入其它數據,所述裝置包括生成代表所述第一個子系統對所述資源進行寫訪問的次數的第一個數目的裝置,所述第一個數目的生成與所述第一時鐘同步;生成代表所述第二個子系統對所述資源進行讀訪問的次數的第二個數目的裝置,所述第二個數目的生成與所述第二時鐘同步;將所述第一個數目與所述第二時鐘同步、以生成第三個數目的裝置;將所述第二個數目與所述第一時鐘同步、以生成第四個數目的裝置;比較所述第一個數目與所述第四個數目、為所述第一個子系統生成第一個資源可用信號的裝置,當所述第一個數目等于所述第四個數目時,所述第一個資源可用信號便活動,所述第一個資源可用信號的生成與所述第一時鐘同步;以及比較所述第二個數目與所述第三個數目、為所述第二個子系統生成第二個資源可用信號的裝置,當所述第二個數目不等于所述第三個數目時,所述第二個資源可用信號便活動,所述第二個資源可用信號的生成與所述第二個時鐘同步。
全文摘要
一種確定數字系統中資源(810)的狀態的裝置,該資源由多個在相互異步的時鐘域中操作的子系統(802、804、806、808)共享。在每個子系統上使用一個位寄存器(814、818、822、826),并將各位寄存器的值與所有異步時鐘進行同步。每個子系統對各子系統(802、804、806、808)的值進行異或運算,生成關于共享資源(810)可用性的狀態信號。本發明使同步引起的延遲被最小化,并簡化了電路設計和設計階段的正確性檢驗工作。
文檔編號G06F13/20GK1208478SQ96199825
公開日1999年2月17日 申請日期1996年11月13日 優先權日1995年12月7日
發明者M·Y·C·承 申請人:三星電子株式會社