两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

確定共享資源狀態(tài)的方法與裝置的制作方法

文檔序號(hào):6411233閱讀:190來源:國知局
專利名稱:確定共享資源狀態(tài)的方法與裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)字系統(tǒng)領(lǐng)域,特別是一種用于確定共享資源狀態(tài)的方法。
在許多數(shù)字系統(tǒng)中,一種系統(tǒng)資源必須由系統(tǒng)的許多部件共享。例如,在數(shù)字計(jì)算機(jī)系統(tǒng)中,中央處理單元(CPU)通常與視頻顯示子系統(tǒng)、甚至與其它CPU共享內(nèi)存。這種情況下,要求用某種判優(yōu)方案來決定向該資源潛在的多個(gè)請求中的哪一個(gè)賦予享用權(quán)。此外,當(dāng)一種資源被用于從一個(gè)系統(tǒng)部件(執(zhí)行寫功能的“生產(chǎn)者”(producer))向另一個(gè)系統(tǒng)部件(執(zhí)行讀功能的“消費(fèi)者”(comsumer))傳遞數(shù)據(jù)時(shí),由該生產(chǎn)者存入該資源中的數(shù)據(jù),在該消費(fèi)者尚未提取該數(shù)據(jù)之前必須得到保護(hù)。在有其它生產(chǎn)者爭相著要向該資源寫數(shù)據(jù)時(shí)尤應(yīng)如此。因此,一旦某生產(chǎn)者向一個(gè)共享資源寫數(shù)據(jù),其它生產(chǎn)者就被禁止向該資源寫數(shù)據(jù),直到數(shù)據(jù)被消費(fèi)者提取后為止。
有一種用來協(xié)調(diào)對共享系統(tǒng)資源進(jìn)行存取的傳統(tǒng)電路設(shè)計(jì),用一個(gè)狀態(tài)寄存器(也稱“信志”(semaphore))與該資源對應(yīng),寄存器處于一種(高)邏輯狀態(tài)時(shí)代表滿,處于另一種(低)邏輯狀態(tài)時(shí)代表空。這種信志一般是用一個(gè)標(biāo)準(zhǔn)觸發(fā)器來實(shí)現(xiàn)的。例如,可以用信志對通過具有數(shù)據(jù)存儲(chǔ)功能的共享資源進(jìn)行的數(shù)據(jù)交換加以調(diào)節(jié)。信志在其被剛剛將數(shù)據(jù)寫入資源的生產(chǎn)者“置位”時(shí),代表該資源處于滿狀態(tài)(表明消費(fèi)者此時(shí)可以讀取數(shù)據(jù));信志在其被剛剛從該資源讀取數(shù)據(jù)的消費(fèi)者“復(fù)位”時(shí),代表該資源處于空狀態(tài)(表明此時(shí)可以由生產(chǎn)者寫入新數(shù)據(jù))。
只要所有生產(chǎn)者和消費(fèi)者都在與信志的時(shí)鐘域相同的時(shí)鐘域內(nèi)進(jìn)行操作時(shí),信志方案是令人滿意的。在統(tǒng)一的時(shí)鐘域中,生產(chǎn)者和消費(fèi)者在檢測信志的值時(shí)無須擔(dān)心更新信號(hào)還沒有被信志收到,也無須擔(dān)心被刷新的信志值還沒有被傳播到所有生產(chǎn)者和消費(fèi)者。換言之,在統(tǒng)一的時(shí)鐘域中,要保證信志的值能反映共享資源的真實(shí)狀態(tài),是不存在困難的。
沒有必要對統(tǒng)一的時(shí)鐘域中操作的各子系統(tǒng)進(jìn)行信號(hào)同步。但是,當(dāng)兩個(gè)子系統(tǒng)在不同的時(shí)鐘域中操作時(shí),從一個(gè)子系統(tǒng)發(fā)往另一個(gè)子系統(tǒng)的信號(hào)就必須被同步。
因此,當(dāng)兩個(gè)子系統(tǒng)共享一個(gè)資源,但又是在不同的時(shí)鐘域中操作時(shí),就會(huì)產(chǎn)生問題。傳統(tǒng)的信志方案必須克服采用多個(gè)時(shí)鐘域時(shí)所具有的困難,諸如1)信志將使用哪個(gè)時(shí)鐘域;2)如何跨越不同的時(shí)鐘域中如何生成置位、復(fù)位信號(hào);3)什么時(shí)候信志的值反映了共享資源的真實(shí)狀態(tài),從而子系統(tǒng)能對這種狀態(tài)進(jìn)行檢測;4)在設(shè)計(jì)階段如何測試有關(guān)設(shè)計(jì)邏輯的正確性。
在含有共享一個(gè)資源、但在不同時(shí)鐘域中操作的一個(gè)生產(chǎn)者和一個(gè)消費(fèi)者的簡單系統(tǒng)中,傳統(tǒng)的信志方案允許信志對時(shí)鐘域有三種可能選擇。第一,信志可以位于生產(chǎn)者的時(shí)鐘域中。在這種設(shè)置下,生產(chǎn)者能即時(shí)同步訪問反映共享資源狀態(tài)的該信志,因此,生產(chǎn)者的置位信號(hào)與信志同步。然而,消費(fèi)者的復(fù)位信號(hào)卻不與信志同步。因此,必須將消費(fèi)者的復(fù)位信號(hào)同步到生產(chǎn)者的時(shí)鐘才能更新信志內(nèi)容;消費(fèi)者要檢測資源的狀態(tài),必須反過來將信志中的新數(shù)值同步到消費(fèi)者的時(shí)鐘域。
將消費(fèi)者的復(fù)位信號(hào)同步到信志的(以及生產(chǎn)者的)時(shí)鐘域,要產(chǎn)生一個(gè)時(shí)間延遲,將信志中的新數(shù)值反過來同步到消費(fèi)者的時(shí)鐘域,要產(chǎn)生另一個(gè)時(shí)間延遲。這些延遲會(huì)產(chǎn)生一種使由消費(fèi)者測得的信志的值為無效(即不反映資源的真實(shí)狀態(tài))的時(shí)間窗口。當(dāng)消費(fèi)者在該時(shí)間窗口中檢測信志時(shí),消費(fèi)者會(huì)測到一個(gè)無效的置位條件。為了防止消費(fèi)者過早檢測信志,消費(fèi)者必須被延遲到足以使其自己的更新信號(hào)能使信志復(fù)位,并且足以使信志的新復(fù)位值能到達(dá)消費(fèi)者。
信志對時(shí)鐘域的第二種選擇是,使用消費(fèi)者的時(shí)鐘域。選擇使用消費(fèi)者的時(shí)鐘域時(shí),延遲問題呈現(xiàn)一種方向相反的情況生產(chǎn)者必須被延遲到足以防止生產(chǎn)者過早檢測信志,以避免測到無效的復(fù)位狀態(tài)這種可能。
信志對時(shí)鐘域的第三種選擇是,使用既與消費(fèi)者的時(shí)鐘域不同、又與生產(chǎn)者的時(shí)鐘域不同的第三個(gè)時(shí)鐘域。在這種情況下,生產(chǎn)者和消費(fèi)者都必須被充分延遲,以防過早檢測信志。因此,不管怎樣為信志選擇時(shí)鐘域,生產(chǎn)者和消費(fèi)者中二者之一或全部,必定要因?yàn)橥剿璧难舆t而降低速度。
當(dāng)有多個(gè)生產(chǎn)者需要向共享資源寫數(shù)據(jù)或有多個(gè)消費(fèi)者需要從共享資源讀數(shù)據(jù)時(shí),就要產(chǎn)生更多的困難。此時(shí)必須引入一種仲裁電路(arbiter)來管理生產(chǎn)者的寫操作和消費(fèi)者的讀操作。這種仲裁電路的作用是協(xié)調(diào)各生產(chǎn)者和各消費(fèi)者對資源的訪問權(quán),以避免由于兩個(gè)或更多的生產(chǎn)者同時(shí)要向一個(gè)資源寫數(shù)據(jù)、或者兩個(gè)或更多的消費(fèi)者同時(shí)要從一個(gè)資源讀數(shù)據(jù)時(shí)產(chǎn)生的競爭條件。傳統(tǒng)的仲裁電路接收多個(gè)對資源的請求,但只向一個(gè)請求者授予對資源的訪問權(quán),該請求者于是成為當(dāng)前用戶。在當(dāng)前用戶釋放資源之前,仲裁電路不會(huì)同意其它資源請求。
在含有多個(gè)生產(chǎn)者的系統(tǒng)中,需要一個(gè)仲裁電路來管理生產(chǎn)者對共享資源的寫訪問。在含有多個(gè)消費(fèi)者的系統(tǒng)中,需要一個(gè)仲裁電路來管理消費(fèi)者對共享資源的讀訪問。在含有多個(gè)生產(chǎn)者和多個(gè)消費(fèi)者的系統(tǒng)中,就需要二個(gè)仲裁電路,一個(gè)管理生產(chǎn)者,一個(gè)管理消費(fèi)者。
在需要仲裁(arbitration)的多時(shí)鐘域中,同步問題更加復(fù)雜。當(dāng)仲裁電路終于對生產(chǎn)者或消費(fèi)者訪問共享資源的請求授權(quán)時(shí),該生產(chǎn)者或消費(fèi)者必須保證信志的數(shù)值反映資源的真實(shí)狀態(tài)。
為了更詳細(xì)地展開這個(gè)問題,我們假定,一個(gè)生產(chǎn)者完成了向共享資源寫數(shù)據(jù)的操作,發(fā)出一個(gè)對信志置位的更新信號(hào),釋放對共享資源的訪問權(quán)。還假定,然后仲裁電路檢測到資源已經(jīng)被釋放,向第二個(gè)生產(chǎn)者的訪問請求授權(quán)。與此同時(shí),第一個(gè)生產(chǎn)者的更新信號(hào)(該信號(hào)可能必須被同步到信志的時(shí)鐘域)將對信志置位。信志的值最后必須被同步到第二個(gè)生產(chǎn)者的時(shí)鐘,第二個(gè)生產(chǎn)者才能有效地檢測資源的狀態(tài)。如果沒有足夠的時(shí)間用于將信志的值同步到第二個(gè)生產(chǎn)者的時(shí)鐘,那么在仲裁電路向第二個(gè)生產(chǎn)者的訪問請求授權(quán)的時(shí)刻,由第二個(gè)生產(chǎn)者所測得的信志的值,可能并不反映共享資源的真實(shí)狀態(tài)。對于這個(gè)問題,傳統(tǒng)解決方法還是導(dǎo)入一個(gè)延遲。
這種解決定時(shí)問題的方法是,通過在仲裁邏輯(arbitration logic)中導(dǎo)入一個(gè)延遲,籍以保證,一個(gè)生產(chǎn)者釋放資源的時(shí)間與另一個(gè)生產(chǎn)者測得獲得仲裁電路授權(quán)的時(shí)間之間的間隔時(shí)間,不少于一個(gè)生產(chǎn)者向信志發(fā)出更新信號(hào)的時(shí)間到信志的新的更新數(shù)值最終被同步到另一個(gè)生產(chǎn)者的時(shí)鐘域的時(shí)間之間的間隔時(shí)間。在含有兩個(gè)以上生產(chǎn)者或兩個(gè)以上消費(fèi)者的系統(tǒng)中,所需的仲裁延遲(arbitration delay)必須永遠(yuǎn)基于最慢的時(shí)鐘域,以保證最慢的生產(chǎn)者或消費(fèi)者不會(huì)過早地檢測共享資源的狀態(tài)。
傳統(tǒng)的仲裁信志方案(arbitrated semaphore scheme)的一個(gè)缺點(diǎn)是,系統(tǒng)性能由于所需的延遲而惡化。在對高速計(jì)算機(jī)系統(tǒng)的需要和重視程度提高的情況下,系統(tǒng)速度的任何惡化都是一個(gè)嚴(yán)重缺點(diǎn)。
人們努力對導(dǎo)入的延遲進(jìn)行優(yōu)化處理。但是這種努力即便是成功的,也過于復(fù)雜,難以實(shí)施。所以說,傳統(tǒng)的仲裁信志方案的另一個(gè)缺點(diǎn)是,對所需延遲進(jìn)行的優(yōu)化處理難以實(shí)施。
仲裁信志方案的另一個(gè)缺點(diǎn)是,在設(shè)計(jì)階段,需要進(jìn)行大量的分析,來確定最壞情況下所需的最短可能延遲時(shí)間。所需分析的復(fù)雜程度,隨著在不同時(shí)鐘域中操作的生產(chǎn)者或消費(fèi)者的數(shù)量呈指數(shù)增長,要是還有不同的時(shí)鐘域包含信志、仲裁電路,或者二者都包含,則分析的復(fù)雜程度更高。
不過最為重要的缺點(diǎn)是,在設(shè)計(jì)階段難于對仲裁信志方案進(jìn)行正確性論證。在有關(guān)的邏輯只不過是大規(guī)模集成電路的一小塊部件時(shí),這個(gè)問題最為突出。為生產(chǎn)大規(guī)模集成電路進(jìn)行的成形設(shè)計(jì)耗資巨大,為了避免因設(shè)計(jì)錯(cuò)誤產(chǎn)生的高昂代價(jià),人們非常強(qiáng)調(diào)在設(shè)計(jì)階段對所有邏輯實(shí)行正確性檢驗(yàn)。
本發(fā)明被設(shè)計(jì)用于減少確定共享資源狀態(tài)所需邏輯的復(fù)雜性,改善這種邏輯的性能。更具體來說,本發(fā)明使得向每個(gè)資源共享的子系統(tǒng)通知共享資源的可用性或不可用性所需的時(shí)間間隔最小化。本發(fā)明的優(yōu)點(diǎn)是,避免使用傳統(tǒng)的信志來代表共享資源的狀態(tài)。
本發(fā)明的一個(gè)特點(diǎn)是,每個(gè)資源共享子系統(tǒng)采用一個(gè)長度1位的二進(jìn)制計(jì)數(shù)器(位寄存器)。子系統(tǒng)每次啟動(dòng)對共享資源的訪問時(shí),就翻轉(zhuǎn)其位寄存器的值。各個(gè)資源共享子系統(tǒng)就是這樣來表示其對共享資源的訪問已經(jīng)啟動(dòng)。
本發(fā)明的另一個(gè)特點(diǎn)是,各個(gè)資源共享子系統(tǒng)的各位寄存器的值與其它資源共享子系統(tǒng)在其中操作所有異步時(shí)鐘域的同步。由于各個(gè)資源共享子系統(tǒng)的各個(gè)位寄存器的值因此能被各子系統(tǒng)訪問,各子系統(tǒng)就能檢測到對共享資源的每一次訪問。
本發(fā)明的另一個(gè)特點(diǎn)是,各個(gè)資源共享子系統(tǒng)獨(dú)立地確定共享資源的狀態(tài)。各個(gè)資源共享子系統(tǒng)中都有用于對各個(gè)資源共享子系統(tǒng)的各個(gè)位寄存器的值進(jìn)行比較的邏輯。這種比較產(chǎn)生的結(jié)果中有一個(gè)狀態(tài)信號(hào)。這樣,各子系統(tǒng)就能得到其自己的、表示共享資源可用性的狀態(tài)信號(hào)。
本發(fā)明的另一個(gè)特點(diǎn)是,即時(shí)、同步地向子系統(tǒng)通知由該子系統(tǒng)所引起的共享資源狀態(tài)的變化。其優(yōu)點(diǎn)是,子系統(tǒng)每次開始訪問共享資源時(shí),進(jìn)行訪問的子系統(tǒng)會(huì)立即被通知該共享資源的可用性已經(jīng)改變。
由于本發(fā)明不采用傳統(tǒng)的信志,在信志與資源共享子系統(tǒng)之間不存在異步關(guān)系,要求由這種異步子系統(tǒng)生成的每個(gè)更新信號(hào)同步到信志,或是信志同步到由這種異步子系統(tǒng)生成的每個(gè)更新信號(hào)。因此,就沒有子系統(tǒng)在其開始訪問共享資源后的一段時(shí)間內(nèi)不能測得由其自己的訪問引起的可用性的變化的那種時(shí)間窗口。所以就無須插入額外的延遲來防止子系統(tǒng)過早訪問共享資源,而且,與訪問異步時(shí)鐘域中共享資源有關(guān)的延遲時(shí)間,得到了盡量縮短。
本發(fā)明的一種方法確定數(shù)字系統(tǒng)中資源的狀態(tài),其中,與一個(gè)第一時(shí)鐘同步操作的第一個(gè)子系統(tǒng)向該資源寫數(shù)據(jù),與一個(gè)第二時(shí)鐘同步操作的第二個(gè)子系統(tǒng)從該資源讀數(shù)據(jù),第一時(shí)鐘與第二時(shí)鐘異步;在由第二個(gè)子系統(tǒng)從資源中讀取上一次寫入的數(shù)據(jù)之前,資源不能用于被第一個(gè)子系統(tǒng)寫入其它數(shù)據(jù)。該方法包括的步驟是生成代表第一個(gè)子系統(tǒng)對資源進(jìn)行寫訪問的次數(shù)的第一個(gè)數(shù)目,第一個(gè)數(shù)目的生成與所述第一時(shí)鐘同步;生成代表第二個(gè)子系統(tǒng)對資源進(jìn)行讀訪問的次數(shù)的第二個(gè)數(shù)目,第二個(gè)數(shù)目的生成與所述第二時(shí)鐘同步;將第一個(gè)數(shù)目與第二時(shí)鐘同步,生成第三個(gè)數(shù)目;將第二個(gè)數(shù)目與第一時(shí)鐘同步,生成第四個(gè)數(shù)目;比較第一個(gè)數(shù)目與第四個(gè)數(shù)目,為第一個(gè)子系統(tǒng)生成第一個(gè)資源可用信號(hào),當(dāng)?shù)谝粋€(gè)數(shù)目等于第四個(gè)數(shù)目時(shí),第一個(gè)資源可用信號(hào)便活動(dòng)(active),第一個(gè)資源可用信號(hào)的生成與第一時(shí)鐘同步;比較第二個(gè)數(shù)目與第三個(gè)數(shù)目,為第二個(gè)子系統(tǒng)生成第二個(gè)資源可用信號(hào),當(dāng)?shù)诙€(gè)數(shù)目不等于第三個(gè)數(shù)目時(shí),第二個(gè)資源可用信號(hào)便活動(dòng),第二個(gè)資源可用信號(hào)的生成與第二個(gè)時(shí)鐘同步。
本發(fā)明的另一種方法確定數(shù)字系統(tǒng)中資源的狀態(tài),其中,至少有一個(gè)寫數(shù)據(jù)的子系統(tǒng)向該資源寫數(shù)據(jù),至少有一個(gè)讀數(shù)據(jù)的子系統(tǒng)從該資源讀數(shù)據(jù),在某一個(gè)讀數(shù)據(jù)的子系統(tǒng)從資源中讀取上一次寫入的數(shù)據(jù)之前,資源不能用于被寫數(shù)據(jù)的子系統(tǒng)寫入其它數(shù)據(jù)。其中,各個(gè)讀數(shù)據(jù)的子系統(tǒng)和各個(gè)寫數(shù)據(jù)的子系統(tǒng)與各自的時(shí)鐘同步操作,其中至少有一個(gè)寫數(shù)據(jù)的子系統(tǒng)與一個(gè)第一時(shí)鐘同步操作,至少有一個(gè)讀數(shù)據(jù)的子系統(tǒng)與一個(gè)第二時(shí)鐘同步操作,第二時(shí)鐘與第一時(shí)鐘異步。該方法包括的步驟是為每個(gè)寫數(shù)據(jù)子系統(tǒng)生成一個(gè)寫操作數(shù)目,各個(gè)寫操作數(shù)目分別代表對應(yīng)的寫數(shù)據(jù)子系統(tǒng)對資源進(jìn)行寫訪問的次數(shù),各個(gè)寫數(shù)據(jù)子系統(tǒng)的各個(gè)寫操作數(shù)目的生成與該寫數(shù)據(jù)子系統(tǒng)對應(yīng)的時(shí)鐘同步;為各個(gè)讀數(shù)據(jù)子系統(tǒng)生成一個(gè)讀操作數(shù)目,各個(gè)讀操作數(shù)目分別代表對應(yīng)的讀數(shù)據(jù)子系統(tǒng)對資源進(jìn)行讀訪問的次數(shù),各個(gè)讀數(shù)據(jù)子系統(tǒng)的各個(gè)讀操作數(shù)目的生成與該讀數(shù)據(jù)子系統(tǒng)對應(yīng)的時(shí)鐘同步;將各個(gè)寫操作數(shù)目與寫數(shù)據(jù)子系統(tǒng)的時(shí)鐘及讀子系統(tǒng)的時(shí)鐘同步;將各個(gè)讀操作數(shù)目與寫數(shù)據(jù)子系統(tǒng)時(shí)鐘及讀數(shù)據(jù)子系統(tǒng)的時(shí)鐘同步;將各寫操作數(shù)目相加,生成一個(gè)寫操作總數(shù)目,加法操作由各個(gè)寫數(shù)據(jù)子系統(tǒng)和各個(gè)讀數(shù)據(jù)子系統(tǒng)獨(dú)立地完成;將各讀操作數(shù)目相加,生成一個(gè)讀操作總數(shù)目,加法操作由各個(gè)寫數(shù)據(jù)子系統(tǒng)和各個(gè)讀數(shù)據(jù)子系統(tǒng)獨(dú)立地完成;比較寫操作總數(shù)目與讀操作總數(shù)目,生成資源可用于寫操作信號(hào),當(dāng)寫操作總數(shù)目等于讀操作總數(shù)目時(shí),資源可用于寫操作信號(hào)便活動(dòng),這種比較由各個(gè)寫數(shù)據(jù)子系統(tǒng)獨(dú)立地完成,用以生成各自的資源可用于寫操作信號(hào);比較寫操作總數(shù)目與讀操作總數(shù)目,生成資源可用于讀操作信號(hào),當(dāng)寫操作總數(shù)目不等于讀操作總數(shù)目時(shí),資源可用于讀操作信號(hào)便活動(dòng),這種比較由各個(gè)讀數(shù)據(jù)子系統(tǒng)獨(dú)立地完成,用以生成各自的資源可用于讀操作信號(hào);本發(fā)明的另一種方法確定數(shù)字系統(tǒng)中資源的狀態(tài),其中,與一個(gè)第一時(shí)鐘同步操作的第一個(gè)子系統(tǒng)對該資源進(jìn)行一級(jí)訪問,與一個(gè)第二時(shí)鐘同步操作的第二個(gè)子系統(tǒng)對該資源進(jìn)行二級(jí)訪問,第一時(shí)鐘與第二時(shí)鐘異步,其中,在發(fā)生一次二級(jí)訪問之前,資源不能用于進(jìn)行其它的一級(jí)訪問,并且,在發(fā)生一次一級(jí)訪問之前,資源不能用于二級(jí)訪問,一級(jí)訪問在時(shí)間上與二級(jí)訪問交替進(jìn)行。該方法包括的步驟是生成代表第一個(gè)子系統(tǒng)對資源進(jìn)行一級(jí)訪問的次數(shù)的第一個(gè)數(shù)目,第一個(gè)數(shù)目的生成與第一時(shí)鐘同步;生成代表第二個(gè)子系統(tǒng)對資源進(jìn)行二級(jí)訪問的次數(shù)的第二個(gè)數(shù)目,第二個(gè)數(shù)目的生成與所述第二時(shí)鐘同步;將第一個(gè)數(shù)目與第二時(shí)鐘同步,生成第三個(gè)數(shù)目;將第二個(gè)數(shù)目與第一時(shí)鐘同步,生成第四個(gè)數(shù)目;比較第一個(gè)數(shù)目與第四個(gè)數(shù)目,為第一個(gè)子系統(tǒng)生成第一個(gè)資源可用信號(hào),當(dāng)?shù)谝粋€(gè)數(shù)目等于第四個(gè)數(shù)目時(shí),第一個(gè)資源可用信號(hào)便活動(dòng),第一個(gè)資源可用信號(hào)的生成與第一時(shí)鐘同步;比較第二個(gè)數(shù)目與第三個(gè)數(shù)目,為第二個(gè)子系統(tǒng)生成第二個(gè)資源可用信號(hào),當(dāng)?shù)诙€(gè)數(shù)目不等于第三個(gè)數(shù)目時(shí),第二個(gè)資源可用信號(hào)便活動(dòng),第二個(gè)資源可用信號(hào)的生成與第二個(gè)時(shí)鐘同步。
本發(fā)明的一種裝置確定資源的狀態(tài),其中,一個(gè)寫操作子系統(tǒng)向該資源發(fā)送寫信號(hào),一個(gè)讀操作子系統(tǒng)向該資源發(fā)送讀信號(hào),其中,寫操作子系統(tǒng)與一個(gè)第一時(shí)鐘同步操作,讀操作子系統(tǒng)與一個(gè)第二時(shí)鐘同步操作,第一時(shí)鐘與第二時(shí)鐘異步。該裝置包括第一信志單元,它生成有著第一邏輯狀態(tài)和第二邏輯狀態(tài)的第一更新信號(hào),每次寫操作子系統(tǒng)向資源寫數(shù)據(jù)時(shí),第一信志單元對寫信號(hào)作出響應(yīng),按第一時(shí)鐘同步地改變第一更新信號(hào)的邏輯狀態(tài);第二信志單元,它生成有著第一邏輯狀態(tài)和第二邏輯狀態(tài)的第二更新信號(hào),每次讀操作子系統(tǒng)從資源讀數(shù)據(jù)時(shí),第二信志單元對讀信號(hào)作出響應(yīng),按第二時(shí)鐘同步地改變第二更新信號(hào)的邏輯狀態(tài);第一同步單元,它將第一更新信號(hào)與第二時(shí)鐘同步,生成第一同步更新信號(hào);第二同步單元,它將第二更新信號(hào)與第一時(shí)鐘同步,生成第二同步更新信號(hào);第一檢測單元,它生成有著第一邏輯狀態(tài)和第二邏輯狀態(tài)的第一檢測輸出信號(hào),當(dāng)?shù)谝桓滦盘?hào)等于第二同步更新信號(hào)時(shí),第一檢測單元生成第一邏輯狀態(tài)的第一檢測輸出信號(hào),當(dāng)?shù)谝桓滦盘?hào)不同于第二同步更新信號(hào)時(shí),第一檢測單元生成第二邏輯狀態(tài)的第一檢測輸出信號(hào);第二檢測單元,它生成有著第一邏輯狀態(tài)和第二邏輯狀態(tài)的第二檢測輸出信號(hào),當(dāng)?shù)谝煌礁滦盘?hào)等于第二更新信號(hào)時(shí),第二檢測單元生成第一邏輯狀態(tài)的第二檢測輸出信號(hào),當(dāng)?shù)谝煌礁滦盘?hào)不同于第二更新信號(hào)時(shí),第二檢測單元生成第二邏輯狀態(tài)的第二檢測輸出信號(hào)。
本發(fā)明的另一種裝置確定數(shù)字系統(tǒng)中資源的狀態(tài),其中,與第一時(shí)鐘同步操作的第一個(gè)子系統(tǒng)向該資源寫數(shù)據(jù),與第二時(shí)鐘同步操作的第二個(gè)子系統(tǒng)從該資源讀數(shù)據(jù),第一時(shí)鐘與第二時(shí)鐘異步,在由第二個(gè)子系統(tǒng)從資源中讀取上一次寫入的數(shù)據(jù)之前,資源不能用于被第一個(gè)子系統(tǒng)寫入其它數(shù)據(jù)。該裝置包括生成代表第一個(gè)子系統(tǒng)對資源進(jìn)行寫訪問的次數(shù)的第一個(gè)數(shù)目的生成裝置,第一個(gè)數(shù)目的生成與第一時(shí)鐘同步;生成代表第二個(gè)子系統(tǒng)對資源進(jìn)行讀訪問的次數(shù)的第二個(gè)數(shù)目的生成裝置,第二個(gè)數(shù)目的生成與所述第二時(shí)鐘同步;將第一個(gè)數(shù)目與第二時(shí)鐘同步、以生成第三個(gè)數(shù)目的裝置;將第二個(gè)數(shù)目與第一時(shí)鐘同步、以生成第四個(gè)數(shù)目的裝置;比較第一個(gè)數(shù)目與第四個(gè)數(shù)目、為第一個(gè)子系統(tǒng)生成第一個(gè)資源可用信號(hào)的裝置,當(dāng)?shù)谝粋€(gè)數(shù)目等于第四個(gè)數(shù)目時(shí),第一個(gè)資源可用信號(hào)便活動(dòng),第一個(gè)資源可用信號(hào)的生成與第一時(shí)鐘同步;比較第二個(gè)數(shù)目與第三個(gè)數(shù)目、為第二個(gè)子系統(tǒng)生成第二個(gè)資源可用信號(hào)的裝置,當(dāng)?shù)诙€(gè)數(shù)目不等于第三個(gè)數(shù)目時(shí),第二個(gè)資源可用信號(hào)便活動(dòng),第二個(gè)資源可用信號(hào)的生成與第二個(gè)時(shí)鐘同步。


圖1的方框圖所表示的一個(gè)數(shù)字系統(tǒng)的一部分中,有多個(gè)生產(chǎn)者子系統(tǒng),多個(gè)消費(fèi)者子系統(tǒng),它們在不同的時(shí)鐘域操作,共享一個(gè)資源。
附圖2的方框圖所表示的計(jì)算機(jī)環(huán)境中,有兩個(gè)生產(chǎn)者子系統(tǒng)、兩個(gè)消費(fèi)者子系統(tǒng),各子系統(tǒng)均有一個(gè)計(jì)數(shù)器,各子系統(tǒng)共享同一個(gè)資源,各生產(chǎn)者和消費(fèi)者均在相同的時(shí)鐘域中操作。
附圖3的方框圖中,有兩個(gè)生產(chǎn)者子系統(tǒng)、兩個(gè)消費(fèi)者子系統(tǒng),各子系統(tǒng)均有一個(gè)計(jì)數(shù)器,各子系統(tǒng)共享同一個(gè)資源,各生產(chǎn)者和消費(fèi)者在不同的時(shí)鐘域中操作。
附圖4的方框圖所表示的數(shù)字系統(tǒng)的一部分中,有一個(gè)生產(chǎn)者子系統(tǒng),一個(gè)消費(fèi)者子系統(tǒng),它們共享一個(gè)資源,各帶一個(gè)位寄存器,各在不同的時(shí)鐘域操作。
附圖5a的邏輯圖,表示一個(gè)生產(chǎn)者子系統(tǒng)和一個(gè)消費(fèi)者子系統(tǒng)各自的位寄存器部件和資源檢測部件,兩個(gè)子系統(tǒng)各在不同的時(shí)鐘域操作。
附圖5b的邏輯圖,表示一個(gè)含有兩個(gè)D觸發(fā)器的同步單元,兩個(gè)D觸發(fā)器由同一時(shí)鐘定時(shí)。
附圖6的方框圖表示的是一個(gè)有兩個(gè)時(shí)鐘域的數(shù)字系統(tǒng)的一部分,第一個(gè)時(shí)鐘域中有一個(gè)生產(chǎn)者子系統(tǒng),第二個(gè)時(shí)鐘域中有一個(gè)生產(chǎn)者子系統(tǒng)和一個(gè)消費(fèi)者子系統(tǒng),各子系統(tǒng)均有一個(gè)位寄存器,并且共享一個(gè)資源。
附圖7a的邏輯圖,表示在一個(gè)時(shí)鐘域中操作的一個(gè)生產(chǎn)者子系統(tǒng)和另一個(gè)時(shí)鐘域中操作的一個(gè)生產(chǎn)者子系級(jí)及一個(gè)消費(fèi)者子系統(tǒng)各自的位寄存器部件和資源檢測部件。
附圖7b的邏輯圖,表示在一個(gè)時(shí)鐘域操作的一個(gè)生產(chǎn)者子系統(tǒng)的位寄存器部件和資源檢測部件,以及在另一個(gè)時(shí)鐘域操作的一個(gè)生產(chǎn)者子系統(tǒng)和一個(gè)消費(fèi)者子系統(tǒng)所共用的位寄存器部件和資源檢測部件。
附圖8的方框圖表示的是一個(gè)數(shù)字系統(tǒng)的一部分,系統(tǒng)中有兩個(gè)生產(chǎn)者子系統(tǒng)和兩個(gè)消費(fèi)者子系統(tǒng),它們各帶一個(gè)位寄存器,都共享一個(gè)公共資源,各在不同的時(shí)鐘域操作。
附圖9的方框圖表示的是一個(gè)數(shù)字系統(tǒng)的一部分中的兩個(gè)生產(chǎn)者子系統(tǒng)和兩個(gè)消費(fèi)者子系統(tǒng)各自的位寄存器部件和資源檢測部件,所有子系統(tǒng)各在不同的時(shí)鐘域操作。
附圖10a的方框圖表示在不同時(shí)鐘域操作的兩個(gè)生產(chǎn)者,它們由一個(gè)仲裁電路管理,仲裁電路在第二個(gè)生產(chǎn)者的時(shí)鐘域操作。
附圖10b的方框圖表示在不同時(shí)鐘域操作的兩個(gè)生產(chǎn)者,它們由一個(gè)仲裁電路管理,仲裁電路在第一個(gè)生產(chǎn)者的時(shí)鐘域操作。
附圖10c的方框圖表示在不同時(shí)鐘域操作的兩個(gè)生產(chǎn)者子系統(tǒng),它們由一個(gè)仲裁電路管理,仲裁電路在另一個(gè)時(shí)鐘域操作。
附圖11的方框圖表示在不同時(shí)鐘域操作的兩個(gè)生產(chǎn)者子系統(tǒng),它們由一個(gè)仲裁電路管理,仲裁電路在第三個(gè)時(shí)鐘域操作。從每個(gè)生產(chǎn)者向仲裁電路發(fā)送的信號(hào)以及從仲裁電路向每個(gè)生產(chǎn)者發(fā)送的信號(hào)都分別被同步到對方的時(shí)鐘域中。
附圖12的波形定時(shí)圖,表示第一個(gè)生產(chǎn)者、第二個(gè)生產(chǎn)者和消費(fèi)者的各個(gè)資源請求、請求獲準(zhǔn)信號(hào)。
附圖1的簡略方框圖表示了一個(gè)計(jì)算機(jī)系統(tǒng)中的多個(gè)子系統(tǒng),其中的所有子系統(tǒng)都能訪問唯一的一個(gè)共享資源102。子系統(tǒng)包括“生產(chǎn)者”、“消費(fèi)者”,每個(gè)生產(chǎn)者能向資源102寫數(shù)據(jù),每個(gè)消費(fèi)者能從資源102讀數(shù)據(jù)。附圖1中的生產(chǎn)者子系統(tǒng)向消費(fèi)者子系統(tǒng)提供數(shù)據(jù)的方法是,向共享資源102寫數(shù)據(jù),然后由消費(fèi)者讀取。共享資源102能保存一個(gè)數(shù)據(jù)元。
附圖1中的生產(chǎn)者子系統(tǒng)和消費(fèi)者子系統(tǒng)各在不同的時(shí)鐘域中操作。我們應(yīng)知道,一個(gè)時(shí)鐘域中包含一個(gè)或多個(gè)以相同頻率和相位操作的時(shí)鐘。我們還應(yīng)知道,本文描述的各個(gè)系統(tǒng)初始時(shí)被復(fù)位到已知狀態(tài)組。雖然本文附圖沒有個(gè)個(gè)都顯示復(fù)位狀態(tài),本領(lǐng)域的熟練人員會(huì)理解,本文中的各個(gè)系統(tǒng)都有復(fù)位機(jī)制。
本發(fā)明旨在確定共享資源的可用性。如果應(yīng)用本發(fā)明,隨便多少生產(chǎn)者子系統(tǒng)或消費(fèi)者子系統(tǒng)一它們都在相同的時(shí)鐘域操作也好,在不同的時(shí)鐘域操作也好,所在時(shí)鐘域的任何組合中也好一都能確定共享資源的可用性。
附圖2的簡化方框圖所示的數(shù)字系統(tǒng)的一部分中,有兩個(gè)生產(chǎn)者子系統(tǒng)(P1和P2)和兩個(gè)消費(fèi)者子系統(tǒng)(C1和C2),它們共享一個(gè)能保存一個(gè)數(shù)據(jù)元的資源202,各子系統(tǒng)均有對應(yīng)的一個(gè)計(jì)數(shù)器單元(P1_Count、P2_Count、C1_Count、C2_Count),各計(jì)數(shù)器單元均能保存一個(gè)從0開始的整數(shù)值,整數(shù)值可以按1遞增。
第一個(gè)生產(chǎn)者204中有計(jì)數(shù)器206和檢測邏輯部件208。每當(dāng)?shù)谝粋€(gè)生產(chǎn)者204向共享資源202寫數(shù)據(jù),第一個(gè)生產(chǎn)者204就將計(jì)數(shù)器206的值遞增1。與此類似,第二個(gè)生產(chǎn)者210中有計(jì)數(shù)器212和檢測邏輯部件214。每當(dāng)?shù)诙€(gè)生產(chǎn)者210向共享資源202寫數(shù)據(jù),第二個(gè)生產(chǎn)者210就將計(jì)數(shù)器212的值遞增1。
第一個(gè)消費(fèi)者216中有計(jì)數(shù)器218和檢測邏輯部件220。每當(dāng)?shù)谝粋€(gè)消費(fèi)者216從共享資源202讀數(shù)據(jù),第一個(gè)消費(fèi)者216就將計(jì)數(shù)器218的值遞增1。與此類似,第二個(gè)消費(fèi)者222中有計(jì)數(shù)器224和檢測邏輯部件226。每當(dāng)?shù)诙€(gè)消費(fèi)者222從共享資源202讀數(shù)據(jù),第二個(gè)消費(fèi)者222就將計(jì)數(shù)器224的值遞增1。
兩個(gè)生產(chǎn)者和兩個(gè)消費(fèi)者都能讀取所有四個(gè)計(jì)數(shù)器的值。例如,第一個(gè)生產(chǎn)者204的計(jì)數(shù)器206的值不僅能被第一個(gè)生產(chǎn)者204讀取,也能被第二個(gè)生產(chǎn)者210讀取,還能被第一個(gè)消費(fèi)者216和第二個(gè)消費(fèi)者222讀取。
為了避免在上次寫入的數(shù)據(jù)被讀取之前向共享資源202寫數(shù)據(jù),生產(chǎn)者必須能夠確認(rèn)允許向共享資源寫數(shù)據(jù)的時(shí)機(jī)。為了確認(rèn)允許向共享資源寫數(shù)據(jù)的時(shí)機(jī),生產(chǎn)者必須查看資源的狀態(tài)。如果資源內(nèi)的數(shù)據(jù)尚未被消費(fèi)者提取(就是說還是“新”數(shù)據(jù)),生產(chǎn)者就不能在資源中放入新數(shù)據(jù),否則就會(huì)破壞預(yù)想的通信。
消費(fèi)者也必須查看資源的狀態(tài),以便確定資源中的數(shù)據(jù)是已被消費(fèi)者讀取過的舊數(shù)據(jù)(即“過時(shí)”數(shù)據(jù)),還是尚待讀取的新數(shù)據(jù)。消費(fèi)者必須避免讀取過時(shí)數(shù)據(jù),必須保證所讀數(shù)據(jù)是新數(shù)據(jù)。
在附圖2中所示的統(tǒng)一時(shí)鐘環(huán)境下,第一個(gè)生產(chǎn)者204確認(rèn)向共享資源202寫數(shù)據(jù)的安全時(shí)機(jī)(即資源中存放的是過時(shí)數(shù)據(jù))的方法是,讀取系統(tǒng)中全部生產(chǎn)者和消費(fèi)者的所有計(jì)數(shù)器。第一個(gè)生產(chǎn)者204的檢測邏輯部件208將其自己的計(jì)數(shù)器206的值,加上第二個(gè)生產(chǎn)者的計(jì)數(shù)器212的值,生成向共享資源202寫數(shù)據(jù)的總次數(shù);第一個(gè)生產(chǎn)者204的檢測邏輯部件208還將第一個(gè)消費(fèi)者的計(jì)數(shù)器218的值,與第二個(gè)消費(fèi)者的計(jì)數(shù)器224的值相加,生成從共享資源202讀數(shù)據(jù)的總次數(shù)。然后,檢測邏輯部件208將寫數(shù)據(jù)的總次數(shù)減去讀數(shù)據(jù)的總次數(shù)。如果相減結(jié)果為零,則對第一個(gè)生產(chǎn)者204表明,此時(shí)向共享資源202寫數(shù)據(jù)是安全的。相減結(jié)果為零,表明生產(chǎn)者每一次向共享資源寫數(shù)據(jù)后,消費(fèi)者就對應(yīng)地從資源中讀取過一次數(shù)據(jù)。與此類似,如果相減結(jié)果不為零,第一個(gè)生產(chǎn)者204就能知道,此時(shí)向共享資源202寫數(shù)據(jù)是不安全的(就是說,資源中保存的是新數(shù)據(jù),還未被讀取過)。
第一個(gè)生產(chǎn)者204為檢測共享資源202的狀態(tài)所需的檢測邏輯可用下式表示為P1_Test=(P1_Count+P2_Count)-(C1_Count+C2_Count)如果P1_Test式的值為零,則共享資源202中的數(shù)據(jù)是過時(shí)數(shù)據(jù),第一個(gè)生產(chǎn)者204可以安全地向共享資源202寫新數(shù)據(jù);如果P1_Test式的值不為零,則共享資源202中的數(shù)據(jù)是新數(shù)據(jù),第一個(gè)生產(chǎn)者204不得向資源202放入新數(shù)據(jù)。
消費(fèi)者可以用類似的檢測邏輯來確定共享資源何時(shí)可用于讀取數(shù)據(jù)。第一個(gè)消費(fèi)者216的檢測邏輯部件220獨(dú)立地執(zhí)行與上述由第一個(gè)生產(chǎn)者204的檢測邏輯部件208所執(zhí)行的相同的運(yùn)算。如果結(jié)果不為零,資源202中存有新數(shù)據(jù),第一個(gè)消費(fèi)者216可以從共享資源202中讀取數(shù)據(jù);如果結(jié)果為零,資源202中存的是過時(shí)數(shù)據(jù),第一個(gè)消費(fèi)者216不得讀取數(shù)據(jù)。
第一個(gè)消費(fèi)者216為檢測共享資源202的狀態(tài)所需的檢測邏輯,與第一個(gè)生產(chǎn)者204所需的相同C1_Test=(P1_Count+P2_Count)-(C1_Count+C2_Count)如果C1_Test式的值不為零,則共享資源202中的數(shù)據(jù)是新數(shù)據(jù),第一消費(fèi)者216可以安全地從共享資源202中讀取數(shù)據(jù);如果C1_Test式的值為零,則共享資源202中的數(shù)據(jù)是過時(shí)數(shù)據(jù),第一個(gè)消費(fèi)者216不得讀取數(shù)據(jù)。
附圖2應(yīng)理解為僅僅具有理論上的意義。實(shí)際上,任何計(jì)數(shù)器都不能無限地計(jì)數(shù)。一般來說,當(dāng)這種計(jì)數(shù)器中的值增加到超過其容量界限時(shí),就會(huì)“卷繞”到零值。對附圖2討論中的檢測邏輯式中,要是某個(gè)計(jì)數(shù)器從一個(gè)很大的數(shù)值突然變?yōu)榱?,邏輯式也就不能用了。不過,附圖2可用于說明本發(fā)明中的一個(gè)基礎(chǔ)理論確定共享資源的狀態(tài)的一種方法是,先由各個(gè)子系統(tǒng)記錄其自己對資源的訪問歷史,然后檢查全部子系統(tǒng)的所有這種歷史記錄。
附圖3的簡化方框圖代表兩個(gè)生產(chǎn)者子系統(tǒng)(P1和P2)和兩個(gè)消費(fèi)者子系統(tǒng)(C1和C2),這四個(gè)子系統(tǒng)都能訪問一個(gè)能保存一個(gè)數(shù)據(jù)元的共享資源302。此外,附圖3中的各個(gè)生產(chǎn)者和各個(gè)消費(fèi)者在不同的時(shí)鐘域中操作。換言之,附圖3中有四個(gè)不同的時(shí)鐘域,分別對應(yīng)每個(gè)子系統(tǒng)。
附圖3表示的第一個(gè)生產(chǎn)者304含有計(jì)數(shù)器306和檢測邏輯部件308,其操作與第一時(shí)鐘(P1_Clk)同步。每當(dāng)?shù)谝粋€(gè)生產(chǎn)者304向共享資源302寫數(shù)據(jù),第一個(gè)生產(chǎn)者304就將計(jì)數(shù)器306的值遞增1。與此類似,第二個(gè)生產(chǎn)者310含有計(jì)數(shù)器312和檢測邏輯部件314,其操作與第二時(shí)鐘(P2_Clk)同步。每當(dāng)?shù)诙€(gè)生產(chǎn)者310向共享資源302寫數(shù)據(jù),第二個(gè)生產(chǎn)者310就將計(jì)數(shù)器312的值遞增1。
第一個(gè)消費(fèi)者316含有計(jì)數(shù)器318和檢測邏輯部件320,其操作與第三時(shí)鐘(C1_Clk)同步。每當(dāng)?shù)谝粋€(gè)消費(fèi)者316從共享資源302讀數(shù)據(jù),第一個(gè)消費(fèi)者316就將計(jì)數(shù)器318的值遞增1。與此類似,第二個(gè)消費(fèi)者322含有計(jì)數(shù)器324和檢測邏輯部件326,其操作與第四時(shí)鐘(C2_Clk)同步。每當(dāng)?shù)诙€(gè)消費(fèi)者322從共享資源302讀數(shù)據(jù),第二個(gè)消費(fèi)者322就將計(jì)數(shù)器324的值遞增1。
與附圖2中系統(tǒng)的道理一樣,利用檢測邏輯部件能使每個(gè)生產(chǎn)者確定向共享資源寫數(shù)據(jù)是否安全(檢查數(shù)據(jù)是否過時(shí)),能使每個(gè)消費(fèi)者確定從共享資源讀數(shù)據(jù)是否安全(檢查數(shù)據(jù)是否是新的)。但是,附圖3中的各個(gè)子系統(tǒng)在不同的時(shí)鐘域中操作,所以某個(gè)生產(chǎn)者或某個(gè)消費(fèi)者的檢測邏輯部件在能使用其它子系統(tǒng)的計(jì)數(shù)器的數(shù)值之前,必須使這些計(jì)數(shù)器值與該檢測邏輯部件的時(shí)鐘同步,這是本領(lǐng)域的熟練人員能理解的。
于是,因?yàn)橛?jì)數(shù)器306與第一個(gè)生產(chǎn)者304在同一時(shí)鐘域操作,第一個(gè)生產(chǎn)者304就能即時(shí)同步地訪問計(jì)數(shù)器306的值。但是,第一個(gè)生產(chǎn)者304不能同步訪問第二個(gè)生產(chǎn)者310的計(jì)數(shù)器312的值、第一個(gè)消費(fèi)者316的計(jì)數(shù)器318的值、第二個(gè)消費(fèi)者322的計(jì)數(shù)器324的值。應(yīng)該理解,第一個(gè)生產(chǎn)者304要讀取計(jì)數(shù)器312、318、324中的值,必須使這各個(gè)計(jì)數(shù)器值與第一生產(chǎn)者的時(shí)鐘P1_Clk同步。
圖3說明計(jì)數(shù)器312、318及324的值與時(shí)鐘P1_Clk的同步。第二個(gè)生產(chǎn)者310的計(jì)數(shù)器312的值被輸入到一個(gè)由P1_Clk定時(shí)的同步單元,經(jīng)過同步后的計(jì)數(shù)器312的值然后被傳送到第一個(gè)生產(chǎn)者304的檢測邏輯部件308。與此類似,第一個(gè)消費(fèi)者316的計(jì)數(shù)器318的值首先被輸入到一個(gè)由P1_Clk定時(shí)的同步單元,經(jīng)過同步后的計(jì)數(shù)器318的值然后被傳送到第一個(gè)生產(chǎn)者304的檢測邏輯部件308;第二個(gè)消費(fèi)者322的計(jì)數(shù)器324的值首先被輸入到一個(gè)由P1_Clk定時(shí)的同步單元,經(jīng)過同步后的計(jì)數(shù)器324的值然后被傳送到第一個(gè)生產(chǎn)者304的檢測邏輯部件308。
一旦所有的計(jì)數(shù)器的值都與某個(gè)生產(chǎn)者或消費(fèi)者的時(shí)鐘域同步,該生產(chǎn)者或消費(fèi)者就能檢查共享資源302的狀態(tài)。正如對附圖2所作的說明,第一個(gè)生產(chǎn)者304可以通過用生產(chǎn)者計(jì)數(shù)器(304、308)的值之和減去消費(fèi)者計(jì)數(shù)器(318、324)的值之和,檢查共享資源302的狀態(tài)。第一個(gè)生產(chǎn)者304為檢測共享資源202的狀態(tài)所需的檢測邏輯可用下式表示為P1_Test=(P1_Count+P2_Count↑P1)-(C1_Coumt↑P1+C2_Count↑P1)注意,在該式中,P2_count、C1_count、C2_count與第一個(gè)生產(chǎn)者304的時(shí)鐘P1_Clk的同步,是由后綴運(yùn)算符↑P1來表示的。正如對附圖2所作的說明,如果P1_Test等式的值為零,則資源302中的是過時(shí)數(shù)據(jù),第一個(gè)生產(chǎn)者304可以向資源302寫新數(shù)據(jù);而如果該值不為零,則資源302中有新數(shù)據(jù),第一個(gè)生產(chǎn)者304不得向資源302寫新數(shù)據(jù)。
第一個(gè)消費(fèi)者316所用的檢測邏輯極其相似,可用相似的式表示。例如,第一個(gè)消費(fèi)者316所用的檢測邏輯式為C1_Test=(P1_Count↑C1+P2_Count↑C1)-(C1_Count+C2_Count↑C1)注意,P1_count、P2_count、C2_count都與第一個(gè)消費(fèi)者316的時(shí)鐘C1_Clk同步了。如果C1_Test式的值不為零,則第一個(gè)消費(fèi)者316可以安全地從資源302讀數(shù)據(jù);如果C1_Test式的值為零,則第一個(gè)消費(fèi)者316不得從資源302讀數(shù)據(jù)。
如附圖2一樣,附圖3也僅僅具有理論意義。這是因?yàn)橛?jì)數(shù)器實(shí)際上不能無限計(jì)數(shù),所以附圖3中的檢測邏輯用起來會(huì)失敗。
附圖4的簡化方框圖所表示的數(shù)字系統(tǒng)的一部分中,有一個(gè)生產(chǎn)者子系統(tǒng)(P1)和一個(gè)消費(fèi)者子系統(tǒng)(C1),它們在不同的時(shí)鐘域操作,共享一個(gè)能存放一個(gè)數(shù)據(jù)元的資源402如附圖4所示,生產(chǎn)者子系統(tǒng)404中含有位寄存器406和檢測邏輯部件408,并與第一時(shí)鐘(P1_Clk)同步操作。消費(fèi)者子系統(tǒng)410中含有位寄存器412和檢測邏輯部件414,并與第二時(shí)鐘(C1_Clk)同步操作。每個(gè)位寄存器能表示數(shù)值0或1。
生產(chǎn)者404能讀取消費(fèi)者410的位寄存器412的值,消費(fèi)者410能讀取生產(chǎn)者404的位寄存器406的值。但是,生產(chǎn)者404與消費(fèi)者410在不同步的時(shí)鐘域中操作。因此,必須將位寄存器412的值與生產(chǎn)者404的時(shí)鐘P1_Clk同步,必須將位寄存器406的值與消費(fèi)者410的時(shí)鐘C1_Clk同步。附圖4中表示了位寄存器412的值作為輸入傳送到由P1_Clk定時(shí)的同步單元,經(jīng)過同步后的位寄存器412的值然后被傳送到生產(chǎn)者404的檢測邏輯408。位寄存器406的值作為輸入傳送到由C1_Clk定時(shí)的同步單元,經(jīng)過同步后的位寄存器406的值然后被傳送到消費(fèi)者410的檢測邏輯部件414。
本發(fā)明所關(guān)心的是對生產(chǎn)者已經(jīng)向共享資源寫入數(shù)據(jù)的次數(shù)(寫操作次數(shù))與消費(fèi)者已經(jīng)從共享資源讀出數(shù)據(jù)的次數(shù)(讀操作次數(shù))進(jìn)行比較。本發(fā)明的目的是通過確定寫操作次數(shù)與讀操作次數(shù)相等還是不同,來檢查共享資源的狀態(tài)。就是說,檢查共享資源的狀態(tài),并不要求計(jì)算實(shí)際的寫操作次數(shù)與讀操作次數(shù)。
因此,就可以對上述的附圖2和附圖3中的檢測邏輯加以簡化。因?yàn)楣蚕碣Y源只能保存一個(gè)數(shù)據(jù)元,并且只要零與非零這兩個(gè)結(jié)果就能代表共享資源的狀態(tài),本領(lǐng)域的熟練人員知道,附圖2和附圖3中所述的計(jì)數(shù)器是可以用二進(jìn)制的位寄存器來代替的。此外,由于同樣的道理,本領(lǐng)域的熟練人員也能理解,可以用布爾代數(shù)運(yùn)算“異或”來代替附圖2和附圖3中所述的加減運(yùn)算。
異或運(yùn)算是本領(lǐng)域中盡人皆知的。用異或運(yùn)算符對兩個(gè)二進(jìn)制運(yùn)算數(shù)進(jìn)行計(jì)算,當(dāng)其中一個(gè)運(yùn)算數(shù)為高態(tài)、另一個(gè)運(yùn)算數(shù)為低態(tài)時(shí),輸出的運(yùn)算結(jié)果為高態(tài)。如果兩個(gè)運(yùn)算數(shù)均為高態(tài),或者兩個(gè)運(yùn)算數(shù)均為低態(tài),則異或運(yùn)算的結(jié)果為低態(tài)。
很顯然,用異或運(yùn)算比較寫操作次數(shù)與讀操作次數(shù)(每個(gè)這種寫或讀操作均由生產(chǎn)者或消費(fèi)者通過改變自己的二進(jìn)制位寄存器的值來指示)來確定寫操作次數(shù)是否與讀操作次數(shù)匹配,再也合適不過了。本發(fā)明的遵從的原則是,嚴(yán)格實(shí)行按讀-寫-讀-寫順序進(jìn)行存取的策略,絕對禁止中間沒有讀操作的連續(xù)兩次或更多次數(shù)的寫操作,以及中間沒有寫操作的連續(xù)兩次或更多次數(shù)的讀操作。在采用這種存取策略的系統(tǒng)中,作為二進(jìn)制操作數(shù)作用各個(gè)與每個(gè)位寄存器的異或運(yùn)算,當(dāng)寫操作次數(shù)與讀操作次數(shù)相等時(shí),運(yùn)算的結(jié)果為0,次數(shù)不相等時(shí),運(yùn)算的結(jié)果為0。
因此在生產(chǎn)者404和消費(fèi)者410中,用位寄存器(406、412)取代了附圖2和3中所述的整數(shù)計(jì)數(shù)器。生產(chǎn)者404通過把其位寄存器406的值與消費(fèi)者410的位寄存器412的值進(jìn)行異或運(yùn)算,就能得知共享資源402中是否保存著過時(shí)數(shù)據(jù)。這種異或運(yùn)算是在生產(chǎn)者404的檢測邏輯部件408中執(zhí)行的。如果兩個(gè)位寄存器(406、412)值相異或的結(jié)果為0,則表明共享資源中的是過時(shí)數(shù)據(jù),生產(chǎn)者404可以向共享資源402寫入新數(shù)據(jù);如果結(jié)果為1,則表明共享資源402中的是新數(shù)據(jù),生產(chǎn)者404不得向共享資源402寫數(shù)據(jù)。
生產(chǎn)者404用于確定共享資源402狀態(tài)所需的檢測邏輯可用下列算式表示P1_Test=P1_BitregP2_Bitreg↑P1C1_Bitreg↑P1C2_Bitreg↑P1上面算式中的符號(hào)“”,是表示異或運(yùn)算的運(yùn)算符。如果P1_Test算式的結(jié)果為0,則表明共享資源402中的數(shù)據(jù)已經(jīng)被消費(fèi)者410讀取過(過時(shí)數(shù)據(jù)),生產(chǎn)者404可以向共享資源402寫入新數(shù)據(jù);如果P1_Test算式的結(jié)果為1,則表明共享資源402中的是新數(shù)據(jù),生產(chǎn)者404不得向共享資源402寫數(shù)據(jù)。
消費(fèi)者410也使用相同的檢測邏輯。例如,消費(fèi)者410可用下列算式來確定共享資源402狀態(tài)C1_Test=C1_BitregP1_Bitreg↑P1P2_Bitreg↑P1C2_Bitreg↑P1如果C1_Test算式的結(jié)果為1,則表明共享資源402中存在新數(shù)據(jù),該數(shù)據(jù)可以立即被消費(fèi)者410讀??;如果C1_Test算式的結(jié)果為0,則表明共享資源402中的數(shù)據(jù)是過時(shí)數(shù)據(jù),消費(fèi)者410不得讀取該數(shù)據(jù)。
附圖5的邏輯圖表示的是能讓一個(gè)生產(chǎn)者子系統(tǒng)和一個(gè)消費(fèi)者子系統(tǒng)獨(dú)立地檢測共享資源狀態(tài)的的邏輯。圖5中未示出共享資源。生產(chǎn)者子系統(tǒng)和消費(fèi)者子系統(tǒng)都沒有完整地在圖中表示出來,附圖5僅含有本文在說明附圖4時(shí)概括描述的位寄存器和檢測邏輯部件所用到的那些部件。位寄存器的功能,是讓生產(chǎn)者能指示其已向共享資源寫數(shù)據(jù),讓消費(fèi)者能指示其已從共享資源讀數(shù)據(jù)。檢測邏輯部件的功能,是讓生產(chǎn)者或消費(fèi)者能檢測共享資源的狀態(tài)。
如附圖5A所示,第一個(gè)D觸發(fā)器502有D輸入端504、Q輸出端506和復(fù)位(R)輸入端508。Q輸出端506通過導(dǎo)線510連接到異或門512的第一個(gè)輸入端。異或門512的輸出端通過導(dǎo)線514連接到D輸入端504。異或門512的第二個(gè)輸入端通過導(dǎo)線516連接到生產(chǎn)者子系統(tǒng)404(見附圖4)生成的P1_Add信號(hào)。Q輸出端506通過導(dǎo)線510連接到第二個(gè)異或門520的第一個(gè)輸入端。第二個(gè)異或門520的第二個(gè)輸入端通過導(dǎo)線522連接到同步單元524的輸出端。異或門520的輸出端通過導(dǎo)線526連接到生產(chǎn)者404作為其P1_Test輸入。同步單元524通過導(dǎo)線528連接到第一時(shí)鐘(P1_Clk)。時(shí)鐘P1_Clk還通過導(dǎo)線528連接到D觸發(fā)器502的時(shí)鐘輸入端530。
同步單元524的輸入端通過導(dǎo)線532連接到第二個(gè)D觸發(fā)器536的Q輸出端534。D觸發(fā)器536有一個(gè)復(fù)位(R)輸入端537和D輸入端538。D觸發(fā)器536的D輸入端538通過導(dǎo)線540連接到第三個(gè)異或門542的一個(gè)輸出端。D觸發(fā)器536的Q輸出端534通過導(dǎo)線532連接到異或門542的第一個(gè)輸入端。異或門542的第二個(gè)輸入端通過導(dǎo)線546接收消費(fèi)者子系統(tǒng)404(見附圖4)的C1_Sub信號(hào)。D觸發(fā)器536的Q輸出端534通過導(dǎo)線532連接到第四個(gè)異或門550的第一個(gè)輸入端。異或門550的輸出端通過導(dǎo)線552連接到消費(fèi)者子系統(tǒng)406作為其C1_Test信號(hào)。異或門550的第二個(gè)輸入端通過導(dǎo)線554連接到同步單元556的輸出端。同步單元556通過導(dǎo)線558連接到第二時(shí)鐘C1_Clk。時(shí)鐘C1_Clk還通過導(dǎo)線558連接到D觸發(fā)器536的時(shí)鐘輸入端559。同步單元556的一個(gè)輸入端通過導(dǎo)線510連接到D觸發(fā)器502的Q輸出端506。復(fù)位(R)輸入端508、537連接到一條系統(tǒng)復(fù)位線(未在圖中表示)。
D觸發(fā)器的操作在本領(lǐng)域中盡人皆知的,本文不再贅述。D觸發(fā)器只有一個(gè)二進(jìn)制輸入信號(hào)和一個(gè)二進(jìn)制輸出信號(hào)。D觸發(fā)器的操作與一個(gè)時(shí)鐘輸入信號(hào)同步。D觸發(fā)器在時(shí)鐘脈沖每發(fā)生一個(gè)特定的轉(zhuǎn)換時(shí),其二進(jìn)制輸出信號(hào)給出二進(jìn)制輸入信號(hào)的狀態(tài)(高或低)。
如上述對附圖4的討論,生產(chǎn)者可以通過改變關(guān)聯(lián)的位寄存器的值來指示對共享資源的寫數(shù)據(jù)操作,消費(fèi)者也可以類似地通過改變關(guān)聯(lián)的位寄存器的值來指示對共享資源的讀數(shù)據(jù)操作。這種位寄存器,連續(xù)不斷地表示著某個(gè)高狀態(tài)或低狀態(tài),并且每當(dāng)在檢測到一個(gè)特定信號(hào)時(shí)就交變其表示的狀態(tài)(即由高到低或由低到高)。附圖5中表示了一個(gè)含有異或門512和D觸發(fā)器502的這種位寄存器。
D觸發(fā)器502的Q輸出端506的初始邏輯狀態(tài),與生產(chǎn)者生成到導(dǎo)線516上的信號(hào)一樣,是低狀態(tài),因此,異或門512輸出端的初始邏輯狀態(tài)是低狀態(tài)。當(dāng)生產(chǎn)者向共享資源寫新數(shù)據(jù)時(shí),生產(chǎn)者通過生成一個(gè)通過導(dǎo)線516傳送的高脈沖(P1_Add)信號(hào)來啟動(dòng)寫操作。在P1_Add信號(hào)作用期間,異或門512的輸出端呈現(xiàn)高邏輯狀態(tài),該高邏輯狀態(tài)通過導(dǎo)線514被傳送到D觸發(fā)器502的D輸入端504。在生產(chǎn)者子系統(tǒng)的時(shí)鐘P1_Clk的下一個(gè)正前沿轉(zhuǎn)換到達(dá)之際,D觸發(fā)器502的Q輸出端506出現(xiàn)高邏輯狀態(tài)。本領(lǐng)域的熟練人員明白,P1_Add信號(hào)作用時(shí)間接近于生產(chǎn)者的時(shí)鐘P1_Clk的一個(gè)周期,這就為在D觸發(fā)器502的D輸入端504上生成一個(gè)有效信號(hào)提供了足夠的建立和保留時(shí)間。
D觸發(fā)器502的Q輸出端506的邏輯狀態(tài)然后由導(dǎo)線510作為輸入傳送到異或門512。如果Q輸出信號(hào)605到達(dá)異或門512時(shí),P1_Add信號(hào)仍然是高態(tài),異或門512的輸出端就暫時(shí)出現(xiàn)一個(gè)低邏輯狀態(tài)。但是應(yīng)該明白,在P1_Clk的下一個(gè)正前沿轉(zhuǎn)換到達(dá)時(shí),P1_Add信號(hào)會(huì)已經(jīng)落到低邏輯狀態(tài),因此此刻異或門512的輸出端會(huì)出現(xiàn)一個(gè)高邏輯狀態(tài)。所以,通過導(dǎo)線514向D輸入端504輸入的高邏輯狀態(tài),使D觸發(fā)器502的Q輸出端506保持著高邏輯狀態(tài)。
當(dāng)生產(chǎn)者子系統(tǒng)下一次向共享資源寫數(shù)據(jù)時(shí),生產(chǎn)者在導(dǎo)線516上生成另一個(gè)P1_Add信號(hào),輸入到異或門512。而作為異或門512第二個(gè)輸入的導(dǎo)線510此時(shí)仍然處于高邏輯狀態(tài)。因此,由于異或門512的兩個(gè)輸入都是高邏輯,所以其輸出端就出現(xiàn)低邏輯狀態(tài)。于是,導(dǎo)線514就向D觸發(fā)器502的D輸入端504輸入一個(gè)低邏輯狀態(tài)。應(yīng)該明白,當(dāng)生產(chǎn)者子系統(tǒng)時(shí)鐘P1_Clk生成的的下一個(gè)正前沿轉(zhuǎn)換到達(dá)時(shí),Q輸出端506出現(xiàn)D輸入端504的低邏輯狀態(tài)。如上所述,導(dǎo)線510將Q輸出端506的低邏輯狀態(tài)作為一個(gè)輸入傳送給異或門512,在下一個(gè)時(shí)鐘周期到來時(shí)或之前當(dāng)P1_Add信號(hào)落到低邏輯狀態(tài)時(shí),異或門512的兩個(gè)輸入都代表低邏輯狀態(tài),這就使異或門512的輸出端具有低邏輯狀態(tài)。在生產(chǎn)者時(shí)鐘P1_Clk生成的下一個(gè)正前沿轉(zhuǎn)換到達(dá)時(shí),D觸發(fā)器502的Q輸出端506輸出的是D輸入端504的邏輯狀態(tài),所以,還是低邏輯狀態(tài)。
綜上所述,異或門512與D觸發(fā)器502一起,起著位寄存器(或日一位二進(jìn)制計(jì)數(shù)器)的作用,它隨著導(dǎo)線516上生產(chǎn)者每次生成的活動(dòng)的高P1_Add信號(hào),由到低或由低到高地交替改變邏輯狀態(tài)(翻轉(zhuǎn))。位寄存器在這種脈沖之間在導(dǎo)線510上一個(gè)連續(xù)的邏輯狀態(tài)(P1_Bitreg)。
消費(fèi)者子系統(tǒng)所用的位寄存器有著與上述相似的邏輯。消費(fèi)者子系統(tǒng)每次從共享資源讀數(shù)據(jù)時(shí),消費(fèi)者要在C1_Sub信號(hào)線546上生成一個(gè)活動(dòng)的高脈沖。該C1_Sub信號(hào)通過導(dǎo)線546被作為一個(gè)輸入傳送到異或門542。應(yīng)當(dāng)明白,由于D觸發(fā)器536的Q輸出端534通過導(dǎo)線532被作為第二個(gè)輸入傳送到異或門542,活動(dòng)的高C1_Sub信號(hào)使異或門542輸出一個(gè)與Q輸出端534的邏輯狀態(tài)相反的邏輯狀態(tài)。該相反的邏輯狀態(tài)通過導(dǎo)線540被傳遞到D輸入端38。然后,在消費(fèi)者的時(shí)鐘C1_Clk生成的下一個(gè)轉(zhuǎn)換到達(dá)時(shí),Q輸出端508輸出D輸入端534的邏輯狀態(tài)。就這樣,異或門542與D觸發(fā)器536構(gòu)成一個(gè)位寄存器(或日一位二進(jìn)制計(jì)數(shù)器),隨著導(dǎo)線546上消費(fèi)者每次生成的活動(dòng)高C1_Sub信號(hào),由到低或由低到高地交替改變邏輯狀態(tài)(翻轉(zhuǎn))。C1_Test信號(hào)線532上保持著消費(fèi)者的位寄存器(C1_Bitreg)的邏輯狀態(tài)。
如在對附圖4的討論中所述,生產(chǎn)者可以通過比較消費(fèi)者的位寄存器值與其自己的位寄存器值來檢測共享資源的可用性。前文說過,這種比較最好是通過異或運(yùn)算來執(zhí)行。消費(fèi)者也能用相同的檢測邏輯來確定共享資源的可用性。
據(jù)此,生產(chǎn)者404可以將其位寄存器值與消費(fèi)者的位寄存器值進(jìn)行異或運(yùn)算與來檢測共享資源的可用性。生產(chǎn)者的位寄存器的值由導(dǎo)線510上的P1_Bitreg信號(hào)的邏輯狀態(tài)代表。導(dǎo)線510上的P1_Bitreg信號(hào)被輸入到異或門520。應(yīng)該明白,由于P1_Bitreg信號(hào)與生產(chǎn)者的時(shí)鐘C1_Clk同步,由生成P1_add信號(hào)的生產(chǎn)者引起的P1_Bitreg信號(hào)的任何變化,在消費(fèi)者時(shí)鐘的一個(gè)時(shí)鐘周期內(nèi)傳送到異或門520,并在生產(chǎn)者生成的下一個(gè)時(shí)鐘周期開始之前穩(wěn)定不變。
然而,由C1_Bitreg信號(hào)的邏輯狀態(tài)代表的消費(fèi)者位寄存器與生產(chǎn)者的時(shí)鐘異步,因此必須被同步。因此C1_Bitreg信號(hào)通過導(dǎo)線532被輸入到由C1_Clk定時(shí)的同步單元542。
附圖5b是一個(gè)同步單元的邏輯圖。圖中的D觸發(fā)器580有D輸入端582、Q輸出端584和時(shí)鐘輸入端585。輸入信號(hào)(Input)通過導(dǎo)線586通向D輸入端582。Q輸出端584通過導(dǎo)線588連接第二個(gè)D觸發(fā)器590,后者有D輸入端592、Q輸出端594和時(shí)鐘輸入端595。Q輸出端594的輸出信號(hào)(Output)通過導(dǎo)線596傳送。目標(biāo)時(shí)鐘(Target_Clk)通過導(dǎo)線598與第一個(gè)D觸發(fā)器580的時(shí)鐘輸入端585連接。導(dǎo)線598還將該目標(biāo)時(shí)鐘與第二個(gè)D觸發(fā)器590的時(shí)鐘輸入端595相連接。
Input信號(hào)通過導(dǎo)線586被傳遞到D輸入端582。在Target_Clk生成的下一個(gè)正轉(zhuǎn)換時(shí),D觸發(fā)器580使Q輸出端584產(chǎn)生Input具有的邏輯狀態(tài)。Q輸出端的信號(hào)通過導(dǎo)線588被傳遞到D觸發(fā)器590的D輸入端592。Target_Clk生成的下一個(gè)正前沿轉(zhuǎn)換使Q輸出端594產(chǎn)生導(dǎo)線588上具有的邏輯狀態(tài)。導(dǎo)線596傳遞Q輸出端594的Output信號(hào),它是與Target_Clk同步的Input信號(hào)的邏輯狀態(tài)。附圖5b中的同步單元,只是接收一個(gè)與第一時(shí)鐘同步的信號(hào)、并使該信號(hào)與一個(gè)與第一時(shí)鐘異步的第二時(shí)鐘同步的邏輯的一個(gè)例子。
在附圖5a中,由生產(chǎn)者時(shí)鐘P1_Clk定時(shí)的同步單元524,將C1_Bitreg信號(hào)與生產(chǎn)者時(shí)鐘進(jìn)行同步。同步后的C1_bitreg信號(hào)通過導(dǎo)線522被傳遞到異或門520的輸入端。異或門520在導(dǎo)線526上的輸出中有檢測信號(hào)P1_Test。當(dāng)P1_Bitreg的邏輯狀態(tài)與C1_Bitreg的邏輯狀態(tài)相同時(shí)(即對共享資源寫操作的次數(shù)等于對共享資源讀操作的次數(shù)時(shí)),P1_Test的邏輯狀態(tài)是低。于是,當(dāng)P1_Test的邏輯狀態(tài)低時(shí),共享資源402(見附圖4)可被生產(chǎn)者404用于寫入新數(shù)據(jù)。相反,當(dāng)P1_Test高時(shí)(即對共享資源寫操作的次數(shù)不等于對共享資源讀操作的次數(shù)時(shí)),生產(chǎn)者不得用共享資源寫數(shù)據(jù)。
本發(fā)明的一個(gè)主要優(yōu)點(diǎn)是,P1_Bitreg的值的生成和可利用與生產(chǎn)者的時(shí)鐘P1_Clk同步。因此,在生產(chǎn)者通過在導(dǎo)線516上生成P1_Add信號(hào)來對其向共享資源的數(shù)據(jù)寫入作出指示后,生產(chǎn)者立即被檢測信號(hào)P1_Test通知共享資源不能再用了。應(yīng)該明白,本發(fā)明保證了生產(chǎn)者不再過早地啟動(dòng)對共享資源的寫操作,并有利地避免了導(dǎo)入延遲的需要。該保證的根據(jù)是,在生產(chǎn)者發(fā)出一個(gè)表示其已啟動(dòng)一次對共享資源的寫操作的第一同步脈沖(P1_Add)后,P1_Bitreg信號(hào)立即在下一個(gè)時(shí)鐘周期內(nèi)更新P1_Test信號(hào),以表示共享資源的不可用狀態(tài)。
附圖5a中與此類似的邏輯允許消費(fèi)者檢測共享資源的狀態(tài)。導(dǎo)線532上的消費(fèi)者的位寄存器C1_Bitreg,對于消費(fèi)者是同步可用的。導(dǎo)線532將C1_Bitreg的邏輯狀態(tài)輸入到異或門550。生產(chǎn)者的位寄存器P1_Bitreg的值與消費(fèi)者的時(shí)鐘異步,因此被輸入到同步單元556。同步單元556使P1_Bitreg與消費(fèi)者的時(shí)鐘C1_Clk同步,經(jīng)同步后的P1_Bitreg的值通過導(dǎo)線554被傳遞到異或門550的第二個(gè)輸入端。異或門550輸出到導(dǎo)線552上的就是檢測信號(hào)C1_Test。C1_Test高時(shí)(即對共享資源402寫操作的次數(shù)不等于對共享資源402讀操作的次數(shù)時(shí)),消費(fèi)者可以從共享資源402讀取數(shù)據(jù);反之,C1_Test低時(shí)(即對共享資源402寫操作的次數(shù)等于對共享資源402讀操作的次數(shù)時(shí)),消費(fèi)者不能從共享資源402讀取數(shù)據(jù)。
上述優(yōu)點(diǎn)也適用于消費(fèi)者子系統(tǒng)。在消費(fèi)者生成一個(gè)指示它已啟動(dòng)讀操作的C1_Sub后,消費(fèi)者立即被通知(在一個(gè)時(shí)鐘周期內(nèi))不能再從共享資源402讀數(shù)據(jù)。這樣就防止了消費(fèi)者過早地從共享資源402讀取數(shù)據(jù),而且同樣無須延遲。
連接到復(fù)位(R)輸入端508、537的復(fù)位信號(hào)(未在圖中表示)能將生產(chǎn)者的位寄存器P1_Bitreg的值和消費(fèi)者的位寄存器C1_Bitreg的值設(shè)置在低邏輯狀態(tài)。例如在中止或重新啟動(dòng)一個(gè)有生產(chǎn)者子系統(tǒng)和消費(fèi)者子系統(tǒng)的系統(tǒng)時(shí),就能用上這種復(fù)位功能。應(yīng)該明白,在生產(chǎn)者和消費(fèi)者子系統(tǒng)中,在這種復(fù)位所恢復(fù)的初始狀態(tài)下,可以對共享資源進(jìn)行寫操作。
附圖6是表示一個(gè)數(shù)字系統(tǒng)的一部分的簡化方框圖。該系統(tǒng)包括與第一時(shí)鐘(P1_Clk)同步操作的第一個(gè)生產(chǎn)者子系統(tǒng)602,與第二時(shí)鐘(P2C1_Clk)同步操作的第二個(gè)生產(chǎn)者子系統(tǒng)604,與第二時(shí)鐘(P2C1_Clk)同步操作的消費(fèi)者子系統(tǒng)606。P1_Clk與P2C1_Clk不同步。
第一個(gè)生產(chǎn)者子系統(tǒng)602含有檢測邏輯部件610和位寄存器612,第二個(gè)生產(chǎn)者子系統(tǒng)604含有檢測邏輯部件614和位寄存器616,消費(fèi)者子系統(tǒng)606含有檢測邏輯部件618和位寄存器620。
這三個(gè)子系統(tǒng)602、604和606共享資源608。檢測邏輯部件610、614和618使各子系統(tǒng)602、604和606能夠獨(dú)立地確定共享資源608的狀態(tài)。位寄存器612、616和620每個(gè)均能代表數(shù)值0或1。子系統(tǒng)602、604和606每個(gè)均能讀取所有各位寄存器612、616和620的值。
第一個(gè)生產(chǎn)者602的位寄存器612的值與P2C1_Clk不同步,因此,第二個(gè)生產(chǎn)者604以及消費(fèi)者606在將位寄存器612的值用于比較之前,必須使該值與P2C1_Clk同步。附圖6對此的表示方法是,位寄存器612的值先被傳遞到由P2C1_Clk定時(shí)的同步單元中,最后再被分別傳遞到第二個(gè)生產(chǎn)者604以及消費(fèi)者606的檢測邏輯部件614和618中。
與此類似,第二個(gè)生產(chǎn)者604的位寄存器612的值以及消費(fèi)者606的位寄存器620的值與P1_Clk不同步,因此,第一個(gè)生產(chǎn)者602在將這兩個(gè)值用于比較之前,必須使它們與P1_Clk同步。附圖6對此的相應(yīng)表示方法是,位寄存器616和620的值先被傳遞到由P1_Clk定時(shí)的同步單元中,最后再被傳遞到第一個(gè)生產(chǎn)者602的檢測邏輯部件610中。
第一個(gè)生產(chǎn)者602通過將第二個(gè)生產(chǎn)者604的位寄存器616的值、消費(fèi)者606的位寄存器620的值以及其自己的位寄存器612的值進(jìn)行異或運(yùn)算,就能確定共享資源608中是否存在過時(shí)的數(shù)據(jù)。這種邏輯運(yùn)算是在第一個(gè)生產(chǎn)者602的檢測邏輯部件610中執(zhí)行的。如果異或運(yùn)算的結(jié)果為0,則共享資源608中存在過時(shí)的數(shù)據(jù),第一個(gè)生產(chǎn)者602就可以向共享資源608寫入數(shù)據(jù)。相反,如果異或運(yùn)算的結(jié)果為1,則共享資源608中保留的是新數(shù)據(jù),第一個(gè)生產(chǎn)者602就不得向共享資源608寫入數(shù)據(jù)。
同樣,第二個(gè)生產(chǎn)者604通過將三個(gè)位寄存器616、620以及612的值進(jìn)行異或運(yùn)算,就能確定共享資源608是否可用于寫數(shù)據(jù)。結(jié)果為0時(shí)表明生產(chǎn)者604可以向共享資源608寫入數(shù)據(jù),結(jié)果為1時(shí)表明生產(chǎn)者604就不得向共享資源608寫入數(shù)據(jù)。
消費(fèi)者606確定共享資源608是否可用的方法大致相同。消費(fèi)者606的檢測邏輯部件618對位寄存器616、620、612的值進(jìn)行異或運(yùn)算。如果異或運(yùn)算的結(jié)果為1,則共享資源608中保留的是新數(shù)據(jù),消費(fèi)者606可以從共享資源608讀出數(shù)據(jù);相反,如果異或運(yùn)算的結(jié)果為0,則共享資源608中保留的是過時(shí)數(shù)據(jù),消費(fèi)者606不得從共享資源608讀出數(shù)據(jù)。
第一個(gè)生產(chǎn)者602確定共享資源608的狀態(tài),所用的檢測邏輯可按下式表述
P1_Test=P1_BitregP2_Bitreg↑P1C1_Bitreg↑P1如果P1_Test式的值為0,則表明共享資源608中的數(shù)據(jù)已經(jīng)被消費(fèi)者606讀取過,第一個(gè)生產(chǎn)者602可以向共享資源608寫入新數(shù)據(jù)。而如果P1_Test等式的值為1,則表明共享資源608中保存的是新數(shù)據(jù),第一個(gè)生產(chǎn)者602不得向共享資源608寫入新數(shù)據(jù)。
消費(fèi)者606使用相似的檢測邏輯。消費(fèi)者606可以根據(jù)下式來確定共享資源608的狀態(tài)C1_Test=C1_BitregP1_Bitreg↑P2C1P2_Bitreg如果C1_Test等式的值為1,則表明共享資源608中保存的是新數(shù)據(jù),該數(shù)據(jù)可以立即被消費(fèi)者606讀取。而如果C1_Test等式的值為0,則表明共享資源608中保存的是過時(shí)數(shù)據(jù),消費(fèi)者606不得讀取該數(shù)據(jù)。
附圖7a是允許兩個(gè)生產(chǎn)者子系統(tǒng)和一個(gè)消費(fèi)者子系統(tǒng)獨(dú)立地檢測共享資源的狀態(tài)的邏輯的方框圖。附圖7a中沒有表示共享資源,圖中也也沒有完整地表示這兩個(gè)生產(chǎn)者子系統(tǒng)及該消費(fèi)者子系統(tǒng)的全部。附圖7a僅含有本文在說明附圖6時(shí)概括描述的位寄存器和檢測邏輯部件所用到的那些部件。
如附圖7a所示,第一個(gè)D觸發(fā)器702有D輸入端704、Q輸出端706和復(fù)位(R)輸入端708。Q輸出端706通過導(dǎo)線710連接到異或門712的第一個(gè)輸入端。異或門712的輸出端通過導(dǎo)線714連接到D輸入端704。異或門712的第二個(gè)輸入端通過導(dǎo)線716連接到生產(chǎn)者子系統(tǒng)602(見附圖6)生成的P1_Add信號(hào)。Q輸出端706通過導(dǎo)線710連接到第二個(gè)異或門720的第一個(gè)輸入端。第二個(gè)異或門720的第二個(gè)輸入端通過導(dǎo)線722連接到異或門724的輸出端。異或門720的輸出端通過導(dǎo)線726連接到生產(chǎn)者子系統(tǒng)602作為其P1_Test輸入。D觸發(fā)器702的時(shí)鐘輸入端719通過導(dǎo)線728連接第一時(shí)鐘(P1_Clk)。時(shí)鐘P1_Clk還通過導(dǎo)線728連接同步單元730和另一個(gè)同步單元732。同步單元730的輸出通過導(dǎo)線734連接異或門724的一個(gè)輸入端。同步單元732的輸出通過導(dǎo)線736連接異或門724的第二個(gè)輸入端。
同步單元730的輸入端通過導(dǎo)線738連接到D觸發(fā)器742的Q輸出端740。D觸發(fā)器742有一個(gè)D輸入端744和一個(gè)復(fù)位(R)輸入端746。D觸發(fā)器742的時(shí)鐘輸入端745通過導(dǎo)線749連接第二時(shí)鐘(P2C1_Clk)。D輸入端744通過導(dǎo)線748連接異或門750的輸出端。D觸發(fā)器742的Q輸出端740通過導(dǎo)線738連接異或門750的一個(gè)輸入端。該異或門的第二個(gè)輸入端通過導(dǎo)線752與消費(fèi)者606(見附圖6)生成的C1_Sub信號(hào)相連。D觸發(fā)器742的Q輸出端740通過導(dǎo)線738連接異或門754的一個(gè)輸入端。異或門754的輸出端通過導(dǎo)線756連接消費(fèi)者606。異或門754的第二個(gè)輸入端通過導(dǎo)線758連接異或門760的輸出端。異或門760的一個(gè)輸入端通過導(dǎo)線762連接D觸發(fā)器766的Q輸出端764。D觸發(fā)器766有一個(gè)D輸入端768和一個(gè)復(fù)位(R)輸入端771。同步單元732的輸入端通過導(dǎo)線762連接Q輸出端764。D輸入端768通過導(dǎo)線770連接異或門772的輸出端。Q輸出端764通過導(dǎo)線762連接異或門772的一個(gè)輸入端。異或門772的另一個(gè)輸入端通過導(dǎo)線774與第二個(gè)消費(fèi)者604(見附圖6)生成的P2_Add信號(hào)相連。
D觸發(fā)器766的時(shí)鐘輸入端775通過導(dǎo)線776連接第二時(shí)鐘P2C1_Clk。同步單元778也通過導(dǎo)線776連接第二時(shí)鐘P2C1_Clk。同步單元778的輸入端通過導(dǎo)線710連接D觸發(fā)器702的Q輸出端706。同步單元778的輸出端通過導(dǎo)線780連接異或門760的一個(gè)輸入端。同步單元778的輸出端還通過導(dǎo)線780連接另一個(gè)異或門782。D觸發(fā)器742的Q輸出740通過導(dǎo)線738連接異或門782的第二個(gè)輸入端。異或門782的輸出端通過導(dǎo)線784連接異或門786的一個(gè)輸入端。D觸發(fā)器766的Q輸出端通過導(dǎo)線762連接異或門786的第二個(gè)輸入端。異或門786的輸出端通過導(dǎo)線788作為P1_Test向生產(chǎn)者604輸入。
正如對附圖5a的討論中所述,異或門712與D觸發(fā)器702互相連接,共同起著一個(gè)位寄存器的作用。因此,當(dāng)生產(chǎn)者602在導(dǎo)線716上生成一個(gè)高脈沖(P1_Add)信號(hào)時(shí),D觸發(fā)器702的Q輸出端706就從高到低或從低到高地轉(zhuǎn)換邏輯狀態(tài)(翻轉(zhuǎn))。Q輸出端706繼續(xù)保持著其邏輯狀態(tài),一直到由生產(chǎn)者602生成的P1_Add信號(hào)將其改變。
消費(fèi)者606有一個(gè)類似的位寄存器,包括異或門750和D觸發(fā)器742。相應(yīng)地,D觸發(fā)器742的Q輸出端740代表著一個(gè)穩(wěn)定的邏輯狀態(tài),并在消費(fèi)者606每次在導(dǎo)線752上生成一個(gè)高脈沖(C1_Sub)信號(hào)時(shí),翻轉(zhuǎn)其邏輯狀態(tài)。
附圖7a中還有由生產(chǎn)者604使用的第三個(gè)這種位寄存器。第三個(gè)位寄存器包括異或門772和D觸發(fā)器766。D觸發(fā)器766的Q輸出端764的邏輯狀態(tài),每當(dāng)生產(chǎn)者604在導(dǎo)線774上生成一個(gè)高脈沖(P2_Add)信號(hào)時(shí),就翻轉(zhuǎn)一次,在兩次翻轉(zhuǎn)之間,D觸發(fā)器766的Q輸出端764代表著一個(gè)穩(wěn)定的邏輯狀態(tài)。
導(dǎo)線710、738和762傳遞分別與輸出端706、740和764的各邏輯狀態(tài)對應(yīng)的信號(hào)。因此,導(dǎo)線710、738和762上傳遞的信號(hào)分別代表著生產(chǎn)者602、消費(fèi)者606和生產(chǎn)者604的各個(gè)位寄存器的值。正如在對附圖5a的討論中所述,只要每個(gè)生產(chǎn)者和消費(fèi)者都能獨(dú)立地對各個(gè)位寄存器的值進(jìn)行比較,每個(gè)生產(chǎn)者和消費(fèi)者就能確定共享資源的可用性。在對附圖5a的討論中還說過,對各位寄存器值的比較,可以通過對各位寄存器值進(jìn)行異或運(yùn)算來完成。
由此可知,生產(chǎn)者602通過對導(dǎo)線710(其自己的位寄存器的值)、738(消費(fèi)者606的位寄存器的值)和762(生產(chǎn)者604的位寄存器的值)上傳遞的信號(hào)進(jìn)行異或運(yùn)算,就能測定共享資源608的狀態(tài)。應(yīng)當(dāng)明白,由導(dǎo)線710傳遞的生產(chǎn)者602的位寄存器的值是與生產(chǎn)者602的時(shí)鐘P1_Clk同步的。因此生產(chǎn)者602可以同步地讀取生產(chǎn)者602的位寄存器的值。但是,導(dǎo)線738和762上傳遞的信號(hào)(亦即消費(fèi)者606和生產(chǎn)者604各自的位寄存器的值)是不與P1_Clk同步的。因此,導(dǎo)線738和762上傳遞的信號(hào)必須先被與P1_Clk進(jìn)行同步后,才能被生產(chǎn)者602用于異或運(yùn)算。
如附圖7a所示,由導(dǎo)線738和762傳遞的信號(hào)被分別輸入到同步單元730和732。導(dǎo)線734和736分別傳遞經(jīng)過與P1_Clk同步的導(dǎo)線738和762上的邏輯狀態(tài)。由導(dǎo)線734和736傳遞的同步邏輯狀態(tài)被異或門724執(zhí)行異或運(yùn)算(就是說,生產(chǎn)者604和消費(fèi)者606的位寄存器的值被帶入生產(chǎn)者602的時(shí)鐘域中并被進(jìn)行比較)。
異或門724的輸出被導(dǎo)線722送到異或門720的一個(gè)輸入端。由導(dǎo)線710傳遞的信號(hào)也被輸入到異或門720。這樣,異或門720將生產(chǎn)者604和消費(fèi)者606的位寄存器值的比較結(jié)果,與生產(chǎn)者602的位寄存器的值進(jìn)行比較。
異或門720的輸出作為P1_Test信號(hào)被導(dǎo)線726傳遞。P1_Test信號(hào)表示的邏輯狀態(tài)決定了共享資源608是否對生產(chǎn)者602開放使用。如果P1_Test信號(hào)是低態(tài)(即對共享資源608的寫操作次數(shù)等于對共享資源608的讀操作次數(shù)),生產(chǎn)者602就可以對共享資源608寫數(shù)據(jù);但如果P1_Test信號(hào)是高態(tài)(即對共享資源608的寫操作次數(shù)不等于對共享資源608的讀操作次數(shù)),生產(chǎn)者602就不得對共享資源608寫數(shù)據(jù)。
正如在對附圖5a的討論中所述,P1_Add信號(hào)P1_Test信號(hào)之間的定時(shí)關(guān)系是本發(fā)明的一個(gè)重要優(yōu)點(diǎn)。由生產(chǎn)者602生成的P1_Add信號(hào)能使P1_Test信號(hào)的邏輯狀態(tài)在一個(gè)P1_CLk時(shí)鐘周期內(nèi)被更新。對P1_Test信號(hào)的立即更新,消除了任何這樣的時(shí)間窗口在這種時(shí)間窗口中,生產(chǎn)者602由于其自己最近進(jìn)行的寫操作的影響,不能檢測到共享資源不可用性。如上所述,因此就沒有必要用插入延遲的方法來防止生產(chǎn)者602過早訪問共享資源608。
生產(chǎn)者604和消費(fèi)者606也對導(dǎo)線710、738和762傳遞的信號(hào)獨(dú)立地進(jìn)行比較。生產(chǎn)者604和消費(fèi)者606與同一時(shí)鐘P2C1_Clk同步操作。導(dǎo)線738和762傳遞的信號(hào)與時(shí)鐘P2C1_CLk是同步的,因此在被生產(chǎn)者604和消費(fèi)者606比較之前不必進(jìn)行同步。不過,導(dǎo)線710傳遞的信號(hào)(即生產(chǎn)者602的位寄存器的值)與時(shí)鐘P2C1_CLk是不同步的,因此有必要被進(jìn)行同步。所以,導(dǎo)線710傳遞的信號(hào)被輸入到同步單元778。
同步單元778的輸出端表示經(jīng)過與時(shí)鐘P2C1_CLk同步后的導(dǎo)線710傳遞的邏輯狀態(tài),它被導(dǎo)線780傳遞到異或門760的一個(gè)輸入端。生產(chǎn)者604的位寄存器的值被導(dǎo)線762傳遞到異或門760的另一個(gè)輸入端。因此,異或門760比較生產(chǎn)者602和生產(chǎn)者604的位寄存器的值。異或門760的輸出傳遞到異或門754的一個(gè)輸入端,消費(fèi)者606的位寄存器的值被導(dǎo)線738傳遞到異或門754的另一個(gè)輸入端。異或門754輸出的就是導(dǎo)線756傳遞的C1_Test信號(hào)。
C1_Test信號(hào)表示的邏輯狀態(tài)決定了共享資源608是否對消費(fèi)者606開放使用。如果C1_Test信號(hào)是高態(tài)(即對共享資源608的寫操作次數(shù)不等于對共享資源608的讀操作次數(shù)),消費(fèi)者606就可以從共享資源608讀數(shù)據(jù);但是如果C1_Test信號(hào)是低態(tài),消費(fèi)者606就不得從共享資源608讀數(shù)據(jù)。
以上描述的P1_Add信號(hào)與P1_Test信號(hào)之間的關(guān)系,也存在與C1_Sub信號(hào)與C1_Test信號(hào)之間。因?yàn)槊總€(gè)C1_Sub信號(hào)使C1_Test信號(hào)在消費(fèi)者時(shí)鐘P2C1_Clk的一個(gè)時(shí)鐘周期內(nèi)被更新,消費(fèi)者606就不會(huì)過早從共享資源608讀數(shù)據(jù)。
同步單元778的輸出表示經(jīng)過與時(shí)鐘P2C1_CLk同步后的生產(chǎn)者604的位寄存器的值,它也被導(dǎo)線780傳遞到異或門782的一個(gè)輸入端。消費(fèi)者606的位寄存器的值被導(dǎo)線738傳遞到異或門782的另一個(gè)輸入端。因此,異或門782比較生產(chǎn)者602和消費(fèi)者606的位寄存器的值。異或門782的輸出被導(dǎo)線738傳遞到異或門786的一個(gè)輸入端,生產(chǎn)者的位寄存器的值被導(dǎo)線762傳遞到異或門786的另一個(gè)輸入端。異或門786輸出的就是導(dǎo)線788傳遞的P2_Test信號(hào)。
P2_Test信號(hào)表示的邏輯狀態(tài)決定了共享資源608是否對生產(chǎn)者604開放使用。如果P2_Test信號(hào)是低態(tài),生產(chǎn)者604就可向共享資源608寫數(shù)據(jù);但是如果P2_Test信號(hào)是高態(tài),生產(chǎn)者604不得對共享資源608寫數(shù)據(jù)。以上描述的P1_Add信號(hào)與P1_Test信號(hào)之間的有利關(guān)系,也存在與P2_Add信號(hào)與P2_Test信號(hào)之間。就是說,因?yàn)镃1_Test信號(hào)在每個(gè)C1_Sub信號(hào)的一個(gè)時(shí)鐘周期內(nèi)被更新,生產(chǎn)者604就不會(huì)過早對共享資源608寫數(shù)據(jù)。
正如在對附圖5a的討論中所述,由連接復(fù)位(R)輸入端708、746和771的一個(gè)復(fù)位導(dǎo)線(未在圖中表示)傳遞的活動(dòng)高態(tài)脈沖,使生產(chǎn)者602、生產(chǎn)者604和消費(fèi)者606被設(shè)置到初始狀態(tài)條件,在初始條件下,共享資源608可以由于寫操作。
附圖7b與附圖7a相似,是一個(gè)代表允許兩個(gè)生產(chǎn)者子系統(tǒng)和兩個(gè)消費(fèi)者子系統(tǒng)獨(dú)立地檢測共享資源狀態(tài)的邏輯的邏輯圖。附圖7b中的邏輯圖采取由第二個(gè)生產(chǎn)者與消費(fèi)者共用一個(gè)時(shí)鐘的方法,減少了系統(tǒng)所需的邏輯。附圖7b中沒有將共享資源表示出來,也沒有將這兩個(gè)生產(chǎn)者子系統(tǒng)和消費(fèi)者子系統(tǒng)完整地表示出來。附圖7b只表示了含有這兩個(gè)生產(chǎn)者子系統(tǒng)和消費(fèi)者子系統(tǒng)的位寄存器和檢測邏輯部件的那些部件。
附圖7b中標(biāo)號(hào)為702至720的部件與附圖7a中相同標(biāo)號(hào)的部件完全一樣,因此,對這部分部件不再重復(fù)說明。
導(dǎo)線722連接同步單元724的輸出端與異或門720的一個(gè)輸入端。異或門720輸出的P1_Test信號(hào)被導(dǎo)線726傳送,輸入到生產(chǎn)者602(附圖6中未予表示)。導(dǎo)線728將第一時(shí)鐘(P1_Clk)與D觸發(fā)器702的時(shí)鐘輸入端719連接。導(dǎo)線728也將P1_Clk與同步單元724連接。導(dǎo)線730將D觸發(fā)器734的D輸出端732與同步單元724的輸入端連接。D觸發(fā)器734有一個(gè)D輸入端736、復(fù)位(R)輸入端738和時(shí)鐘輸入端739。導(dǎo)線730將Q輸出端連接到異或門740的一個(gè)輸入端。導(dǎo)線742將異或門740的第二個(gè)輸入端與異或門744的輸出端連接。異或門744的第一個(gè)輸入是消費(fèi)者606(見附圖6)生成并由導(dǎo)線746傳送的C1_Sub信號(hào)。異或門744的第一個(gè)輸入是生產(chǎn)者604(見附圖6)生成并由導(dǎo)線748傳送的P2_Add信號(hào)。異或門740的輸出經(jīng)導(dǎo)線750傳送到D觸發(fā)器734的D輸入端736。
導(dǎo)線752將第二時(shí)鐘(P2C1_Clk)連接到D觸發(fā)器734的時(shí)鐘輸入端739上。導(dǎo)線752還將P2C1_Clk連接到同步元件754上。同步元件754的輸入端由導(dǎo)線710連接在D觸發(fā)器702的Q輸出端706上。導(dǎo)線756將同步元件754的輸出端連接在異或門758的輸入端上。該異或門的第二輸入端由導(dǎo)線730連接在D觸發(fā)器734的Q輸出端732上。異或門758的輸出為由導(dǎo)線760傳播的P2C1_Test信號(hào)。
生產(chǎn)者602使用的附圖7b中的第一個(gè)位寄存器包括異或門712和D觸發(fā)器702。不過,因?yàn)楫惢蜷T712和D觸發(fā)器702的功能與附圖7a中相同標(biāo)號(hào)的部件的功能相同,所以就不再重復(fù)說明。附圖7b中P1_Add信號(hào)和P_Test信號(hào)之間的關(guān)系,與附圖7b中同樣兩個(gè)信號(hào)之間的關(guān)系也一樣,因此也就不再重復(fù)說明它們的操作。
由于生產(chǎn)者604與消費(fèi)者606與相同的時(shí)鐘P2C1_Clk同步操作,所以可以對包含各位寄存器功能的邏輯、以及檢測共享資源608的狀態(tài)所需的邏輯進(jìn)行簡化。。附圖7b中,第二個(gè)位寄存器由生產(chǎn)者604和消費(fèi)者606共用。該第二個(gè)位寄存器包括異或門740和D觸發(fā)器734。如上所述,D觸發(fā)器734的Q輸出732通過導(dǎo)線730傳送到異或門740的一個(gè)輸入端,異或門740的輸出通過導(dǎo)線750傳送到D觸發(fā)器734的D輸入端736,所以異或門740與D觸發(fā)器734具有位寄存器的功能。就是說,通過導(dǎo)線742傳送到異或門740的第二個(gè)輸入端的高脈沖信號(hào),使D觸發(fā)器734翻轉(zhuǎn)Q輸出端732的邏輯狀態(tài),并通過導(dǎo)線730傳送這種邏輯狀態(tài),直到導(dǎo)線742傳送另一個(gè)這種高脈沖信號(hào)。
P2_Add信號(hào)和C1_SUb信號(hào)分別由導(dǎo)線748和746傳送到異或門744的兩個(gè)輸入端。應(yīng)當(dāng)明白,由導(dǎo)線742傳送的異或門744的輸出,代表生產(chǎn)者604生成的P2_Add信號(hào)或消費(fèi)者606生成的C1_SUb信號(hào)。P2_Add信號(hào)或C1_SUb信號(hào)被生成時(shí),異或門744輸出這個(gè)信號(hào)。不過應(yīng)當(dāng)明白,當(dāng)P2_Add信號(hào)與C1_SUb信號(hào)被同時(shí)生成時(shí)(即在同一個(gè)時(shí)鐘周期到達(dá)異或門744),異或門744輸出的邏輯狀態(tài)不會(huì)改變。因?yàn)樯a(chǎn)者604和消費(fèi)者606在相同的時(shí)鐘域中操作,并且第二個(gè)位寄存器任何時(shí)刻只能被生產(chǎn)者604和消費(fèi)者606中二者之一更新而永遠(yuǎn)不能被兩者更新,所以生產(chǎn)者604和消費(fèi)者606可以如上所述共用一個(gè)位寄存器。
生產(chǎn)者604和消費(fèi)者606還共用一個(gè)P2C1_Test信號(hào),該信號(hào)確定共享資源608可用于寫操作還是可用于讀操作。通過導(dǎo)線760傳送的P2C1_Test信號(hào)代表第一個(gè)位寄存器的邏輯狀態(tài)與第二個(gè)位寄存器的邏輯狀態(tài)進(jìn)行比較后得出的一個(gè)邏輯狀態(tài)。第一個(gè)位寄存器的邏輯狀態(tài)表示由第一個(gè)生產(chǎn)者602對共享資源608進(jìn)行寫操作的次數(shù)。第二個(gè)位寄存器的邏輯狀態(tài)表示由第二個(gè)生產(chǎn)者604對共享資源608進(jìn)行寫操作的次數(shù),減去消費(fèi)者606對共享資源608進(jìn)行讀操作的次數(shù)。因?yàn)樯a(chǎn)者604每次啟動(dòng)一個(gè)對共享資源608寫操作時(shí)就要更新第二個(gè)位寄存器的內(nèi)容,消費(fèi)者606每次啟動(dòng)一個(gè)對共享資源608讀操作時(shí)也要更新第二個(gè)位寄存器的內(nèi)容,所以就無須隨后對生產(chǎn)者604的寫操作次數(shù)與消費(fèi)者606的讀操作次數(shù)進(jìn)行比較。
通過導(dǎo)線730傳送到異或門758一個(gè)輸入端的信號(hào),代表生產(chǎn)者604與消費(fèi)者606共用的第二個(gè)位寄存器的邏輯狀態(tài)。通過導(dǎo)線756傳送到異或門758一個(gè)輸入端的信號(hào),代表一被與時(shí)鐘P2C1_Clk同步的第一個(gè)位寄存器的邏輯狀態(tài)。異或門758輸出P2C2_Test信號(hào),它通過導(dǎo)線760被傳送給生產(chǎn)者604和消費(fèi)者606。
因此P2C2_Test信號(hào)代表的邏輯狀態(tài),就能確定共享資源608是否可以被第二個(gè)生產(chǎn)者604用于寫操作,就能確定共享資源608是否可以被消費(fèi)者606用于讀操作。當(dāng)P2C2_Test信號(hào)是低態(tài)時(shí),共享資源608可以被第二個(gè)生產(chǎn)者604用于寫操作,但不能被消費(fèi)者606用于讀操作;當(dāng)P2C2_Test信號(hào)是高態(tài)時(shí),共享資源608不能被第二個(gè)生產(chǎn)者604用于寫操作,但可以被消費(fèi)者606用于讀操作。
附圖8是一個(gè)數(shù)字系統(tǒng)的一部分的簡化方框圖,該系統(tǒng)中有一個(gè)與第一時(shí)鐘(P1_Clk)同步操作的第一個(gè)生產(chǎn)者子系統(tǒng)802,一個(gè)與第二時(shí)鐘(P2_Clk)同步操作的第二個(gè)生產(chǎn)者子系統(tǒng)804,一個(gè)與第三時(shí)鐘(C1_Clk)同步操作的第一個(gè)消費(fèi)者子系統(tǒng)806,一個(gè)與第四時(shí)鐘(C2_Clk)同步操作的第二個(gè)消費(fèi)者子系統(tǒng)808。所有時(shí)鐘P1_Clk、P2_Clk、C1_Clk、C2_Clk之間互相不同步。
第一個(gè)生產(chǎn)者802中有檢測邏輯部件812和位寄存器814。第二個(gè)生產(chǎn)者804中有檢測邏輯部件816和位寄存器818。第一個(gè)消費(fèi)者806中有檢測邏輯部件820和位寄存器822。第二個(gè)消費(fèi)者808中有檢測邏輯部件824和位寄存器826。
這四個(gè)子系統(tǒng)802、804、806和808共享資源810。子系統(tǒng)802、804、806和808能用檢測邏輯部件812、816、820和824獨(dú)立地檢測共享資源810的狀態(tài)。位寄存器814、818、822和826能表示數(shù)值0或1。各子系統(tǒng)802、804、806和808都能讀取每一個(gè)位寄存器814、818、822和826的值。因?yàn)檫@四個(gè)子系統(tǒng)802、804、806和808在各自的異步時(shí)鐘域中操作,所以應(yīng)當(dāng)明白,每一個(gè)位寄存器814、818、822和826的值必須被同步到每個(gè)異步時(shí)鐘。
附圖8中相應(yīng)地表示了一例如一第一個(gè)消費(fèi)者806的位寄存器822的值、第二個(gè)消費(fèi)者808的位寄存器826的值、第二個(gè)生產(chǎn)者804的位寄存器818的值,向含有3個(gè)由時(shí)鐘P1_Clk定時(shí)的同步單元組成的同步單元組830中進(jìn)行的傳送。同步后的位寄存器822、826和818的值,被傳送到第一個(gè)生產(chǎn)者802的檢測邏輯部件812中。至此,第一個(gè)生產(chǎn)者802就可以使用各個(gè)位寄存器814、818、822和826的值。
與此類似,含有3個(gè)由時(shí)鐘P2_Clk定時(shí)的同步單元組成的同步單元組832對位寄存器814、822和826的值進(jìn)行同步,使得這些數(shù)值能被第二個(gè)生產(chǎn)者804使用;含有3個(gè)由時(shí)鐘C1_Clk定時(shí)的同步單元組成的同步單元組834對位寄存器814、818和826的值進(jìn)行同步,使得這些數(shù)值能被第一個(gè)消費(fèi)者806使用;含有3個(gè)由時(shí)鐘C2_Clk定時(shí)的同步單元組成的同步單元組836對位寄存器814、818和822的值進(jìn)行同步,使得這些數(shù)值能被第二個(gè)消費(fèi)者808使用。
如上所述,生產(chǎn)者或消費(fèi)者通過對各個(gè)子系統(tǒng)的各自的位寄存器的值進(jìn)行異或運(yùn)算,就可以確定共享資源的狀態(tài)。因此,第一個(gè)生產(chǎn)者802對位寄存器814、818、822和826的值進(jìn)行異或運(yùn)算。如果這種異或運(yùn)算的結(jié)果是0,則共享資源810中保存的是過時(shí)數(shù)據(jù),第一個(gè)生產(chǎn)者802可以向共享資源810寫數(shù)據(jù)。相反,如果這種異或運(yùn)算的結(jié)果不是0,則共享資源810中保存的是新數(shù)據(jù),第一個(gè)生產(chǎn)者802不得向共享資源810寫數(shù)據(jù)。檢測共享資源810可用性所需邏輯可用下式表示P1_Test=P1_BitregP2_Bitreg↑P1C1_Bitreg↑P1C2_Bitreg↑P1如果P1_Test等式的值為0,則表明共享資源810中的數(shù)據(jù)已經(jīng)被某個(gè)消費(fèi)者讀取過(數(shù)據(jù)過時(shí)),第一個(gè)生產(chǎn)者802可以向共享資源810寫入新數(shù)據(jù)。而如果P1_Test等式的值為1,則表明共享資源810中保存的是新數(shù)據(jù),第一個(gè)生產(chǎn)者802不得向共享資源810寫入新數(shù)據(jù)。
附圖8中的消費(fèi)者采用的是同樣的檢測邏輯。例如,第一個(gè)消費(fèi)者806可以根據(jù)下式來確定共享資源810的狀態(tài)C1_Test=C1_BitregP1_Bitreg↑P1P2_Bitreg↑P1C2_Bitreg↑P1如果C1_Test式的值為1,則表明共享資源810中保存的是新數(shù)據(jù),第一個(gè)消費(fèi)者806可以立即從共享資源810讀數(shù)據(jù)。相反,如果C1_Test等式的值為0,則表明共享資源810中的數(shù)據(jù)是過時(shí)數(shù)據(jù),第一個(gè)消費(fèi)者806不得從共享資源810讀數(shù)據(jù)。第二個(gè)生產(chǎn)者804第二個(gè)消費(fèi)者808采用類似的檢測邏輯。
附圖9的邏輯圖代表的邏輯,允許在不同步時(shí)鐘域中操作的兩個(gè)生產(chǎn)者子系統(tǒng)和兩個(gè)消費(fèi)者子系統(tǒng)能獨(dú)立地檢測共享資源的狀態(tài)。共享資源在圖9中未予表示。這兩個(gè)生產(chǎn)者子系統(tǒng)和兩個(gè)消費(fèi)者子系統(tǒng)也沒有完整地在圖中表示出來。附圖9中只表示了對附圖8的討論中所述的位寄存器部件和檢測邏輯部件所用的邏輯。
第一個(gè)位寄存器包括,異或門902、由時(shí)鐘P1_Clk定時(shí)的D觸發(fā)器904、向該第一個(gè)生產(chǎn)者802第一個(gè)寄存器輸入的P1_Add信號(hào)。前文已經(jīng)對這種位寄存器中的部件以及這種位寄存器的操作作過詳細(xì)說明,在此不再重復(fù)。P1_Bitreg信號(hào)代表第一個(gè)位寄存器的邏輯狀態(tài)。因此,第一個(gè)生產(chǎn)者802的位寄存器的值(見附圖8)由P1_Bitreg信號(hào)表示。
第二個(gè)、第三個(gè)、第四個(gè)位寄存器分別包括,異或門906和由時(shí)鐘P2_Clk定時(shí)的D觸發(fā)器908、異或門910和由時(shí)鐘C1_Clk定時(shí)的D觸發(fā)器910、異或門914和由時(shí)鐘C2_Clk定時(shí)的D觸發(fā)器916。第二個(gè)位寄存器還包括一個(gè)第二個(gè)生產(chǎn)者804向該第二個(gè)位寄存器輸入的P2_Add信號(hào)。第三個(gè)位寄存器還包括一個(gè)第一個(gè)消費(fèi)者806向該第三個(gè)位寄存器輸入的C1_Sub信號(hào)。第四個(gè)位寄存器還包括一個(gè)第二個(gè)消費(fèi)者808向該第四個(gè)位寄存器輸入的C2_Sub信號(hào)。第二個(gè)、第三個(gè)、第四個(gè)位寄存器的邏輯狀態(tài)分別由P2_Bitreg、C1_Bitreg、C2_Bitreg信號(hào)表示。因此,第二個(gè)生產(chǎn)者802、第一個(gè)消費(fèi)者806、第二個(gè)消費(fèi)者808的位寄存器的值分別由P2_Bitreg、C1_Bitreg、C2_Bitreg信號(hào)表示。
第一個(gè)、第二個(gè)、第三個(gè)、第四個(gè)位寄存器分別在各自不同的時(shí)鐘域操作。所以,如果每個(gè)生產(chǎn)者和消費(fèi)者子系統(tǒng)要使用這些位寄存器P1_Bitreg、P2_Bitreg、C1_Bitreg、C2_Bitreg的值,就必須使它們與各個(gè)異步的時(shí)鐘同步。
附圖9中相應(yīng)地表示了導(dǎo)線918將P1_Bitreg信號(hào)輸入到P2_C1k定時(shí)的同步單元920、輸入到C1_Clk定時(shí)的同步單元922、輸入到C2_Clk定時(shí)的同步單元924。與此類似,導(dǎo)線926將P2_Bitreg信號(hào)輸入到P1_Clk定時(shí)的同步單元928、輸入到C1_Clk定時(shí)的同步單元930、輸入到C2_Clk定時(shí)的同步單元932。導(dǎo)線934將C1_Bitreg信號(hào)輸入到P1_Clk定時(shí)的同步單元936、輸入到P2_Clk定時(shí)的同步單元938、輸入到C2_Clk定時(shí)的同步單元940。導(dǎo)線942將C2_Bitreg信號(hào)輸入到P1_Clk定時(shí)的同步單元944、輸入到P2_Clk定時(shí)的同步單元946、輸入到C1_Clk定時(shí)的同步單元948。
正如在對附圖8的討論中所述,將各生產(chǎn)者與消費(fèi)者子系統(tǒng)的位寄存器的值進(jìn)行異或運(yùn)算,就可以確定共享資源的狀態(tài)。因此,在附圖9中表示了-例如-導(dǎo)線918將P1_Bitreg信號(hào)傳送到異或門950的一個(gè)輸入端,導(dǎo)線952將與P1_Clk同步的C1_Bitreg信號(hào)傳送到異或門950的第二個(gè)輸入端,導(dǎo)線954將與P1_Clk同步的C2_Bitreg信號(hào)傳送到異或門956的第一個(gè)輸入端,導(dǎo)線958將與P1_Clk同步的P2_Bitreg信號(hào)傳送到異或門956的第二個(gè)輸入端;異或門950的輸出通過導(dǎo)線960被傳送到異或門964的一個(gè)輸入端,異或門956的輸出通過導(dǎo)線962被傳送到異或門964的第二個(gè)輸入端;異或門964輸出的P1_Test信號(hào)通過導(dǎo)線966被輸入到第一個(gè)生產(chǎn)者802。
對位寄存器P1_Bitreg、P2_Bitreg、C1_Bitreg、C2_Bitreg的值的異或運(yùn)算,就是異或門950、956和964按這種方式完成的。這種異或運(yùn)算的結(jié)果,就是導(dǎo)線966傳播的P1_Test信號(hào)。P1_Test信號(hào)的值確定共享資源810是否可被第一個(gè)生產(chǎn)者802用于寫數(shù)據(jù)。如果P1_Test信號(hào)是低邏輯,則第一個(gè)生產(chǎn)者802可以向共享資源810寫入新數(shù)據(jù);相反,如果P1_Test信號(hào)是高邏輯,則第一個(gè)生產(chǎn)者802不得向共享資源810寫入新數(shù)據(jù)。
應(yīng)當(dāng)明白,上文所述的P1_Add與P1_Test之間的關(guān)系也存在與附圖9中的P1_Add與P1_Test之間。就是說,第一個(gè)生產(chǎn)者802生成的每個(gè)P1_Add信號(hào),在第一個(gè)生產(chǎn)者時(shí)鐘的一個(gè)時(shí)鐘周期內(nèi),對P1_Test進(jìn)行更新。P1_Test信號(hào)立即通知第一個(gè)生產(chǎn)者,共享資源810已轉(zhuǎn)換到不可用狀態(tài),以防止其過早存取共享資源810。在P2_Add與P2_Test之間、C1_Sub與C1_Test之間、C2_Sub與C2_Test之間,也存在著類似的關(guān)系。
附圖9中的P2_Test電路、C1_Test電路、C2_Test電路的結(jié)構(gòu)和操作與P1_Test電路的類似,本文不再詳細(xì)討論。
本發(fā)明適用于有任何數(shù)量的生產(chǎn)者子系統(tǒng)和消費(fèi)者子系統(tǒng)的數(shù)字系統(tǒng)。應(yīng)當(dāng)明白,兩個(gè)或更多的生產(chǎn)者子系統(tǒng)或兩個(gè)或更多的消費(fèi)者子系統(tǒng)共享一個(gè)資源時(shí),就需要用一種仲裁器單元來防止兩個(gè)或更多的生產(chǎn)者子系統(tǒng)同時(shí)向資源寫數(shù)據(jù)、或兩個(gè)或更多的消費(fèi)者子系統(tǒng)同時(shí)從資源讀數(shù)據(jù)。對共享資源沒有控制的同時(shí)訪問被稱為競爭條件。
仲裁器的基本功能是1)接收資源請求;2)接受資源的釋放;3)在資源的所有請求者之間進(jìn)行仲裁;從及4)將資源交給資源請求者中的一個(gè)。仲裁器用這些功能來管理對資源的訪問,可以避免競爭條件。已知有許多這樣的仲裁器單元,本發(fā)明并不針對具體的仲裁器單元。
但是,如果人們在有兩個(gè)或更多的生產(chǎn)者子系統(tǒng)或兩個(gè)或更多的消費(fèi)者子系統(tǒng)中實(shí)施本發(fā)明、并因此需要仲裁時(shí),就會(huì)發(fā)現(xiàn)本發(fā)明的另一個(gè)優(yōu)點(diǎn)。為了確定共享資源狀態(tài),傳統(tǒng)上采用的方法是用一個(gè)信志來表示資源的可用狀態(tài)或不可用狀態(tài)。按照傳統(tǒng)方法,每個(gè)希望訪問資源的子系統(tǒng)首先要檢查信志的值。在有多種時(shí)鐘域的系統(tǒng)中,人們會(huì)發(fā)現(xiàn),對于所有與信志異步操作的子系統(tǒng)來說,讀取信志的值、更新信志的值都需要同步延遲。這種延遲增加了仲裁器設(shè)計(jì)上的復(fù)雜性。
在仲裁器發(fā)現(xiàn)某個(gè)資源被釋放后,仲裁器就將訪問該資源的權(quán)力交給另一個(gè)請求者。但是,由于同步延遲,新獲授權(quán)的該請求者尚不能發(fā)現(xiàn)為表示該資源不可用狀態(tài)對信志所作的更新,新獲授權(quán)的該請求者會(huì)訪問該資源(根據(jù)仲裁器的授權(quán)),但是會(huì)過早地訪問該資源(例如,生產(chǎn)者向已經(jīng)存放新數(shù)據(jù)的資源寫新數(shù)據(jù),或者消費(fèi)者讀取已經(jīng)被讀過了的數(shù)據(jù))。為了改正這種過早訪問的錯(cuò)誤,傳統(tǒng)的仲裁器中設(shè)置了內(nèi)置延遲,其長度等于或大于時(shí)鐘最慢的子系統(tǒng)檢測信志更新數(shù)據(jù)所需的最大可能的同步延遲時(shí)間。
用本發(fā)明方法來確定共享資源的狀態(tài)時(shí),就不需要傳統(tǒng)需要的代表共享資源狀態(tài)的公用信志。根據(jù)本發(fā)明方法,各生產(chǎn)者或消費(fèi)者直接向其它每一個(gè)生產(chǎn)者與消費(fèi)者發(fā)送更新信號(hào)。因此任何生產(chǎn)者或消費(fèi)者只需要一次同步操作就能檢測到共享資源的狀態(tài)。如附圖10a、10b、10c中所示,任何生產(chǎn)者或消費(fèi)者的最大更新延遲時(shí)間相當(dāng)于一次同步操作,這事實(shí)上就消除了在仲裁器中設(shè)計(jì)內(nèi)置延遲的必要性。這就使由于共享資源和對訪問資源進(jìn)行仲裁而招致的處理速度惡化的程度降至最低限。
附圖10a是一個(gè)表示數(shù)字系統(tǒng)的一部分的簡化方框圖,該系統(tǒng)包括與第一時(shí)鐘P1_Clk同步操作的第一個(gè)生產(chǎn)者1002、與第二時(shí)鐘P2_Clk同步操作的第二個(gè)生產(chǎn)者1004、以及與第二時(shí)鐘P2_Clk同步操作的仲裁器1006。
導(dǎo)線1008將第一個(gè)生產(chǎn)者1002生成的BUS_Release(總線釋放)信號(hào)傳送到由P2_Clk定時(shí)的同步單元1010的輸入端。同步單元1010的輸出被傳送到仲裁器1006的輸入端。導(dǎo)線1012將仲裁器1006生成的BUS_Grant(總線_授權(quán))信號(hào)輸入到第二個(gè)生產(chǎn)者1004。導(dǎo)線1014將第一個(gè)生產(chǎn)者1002生成的P1_Bitreg信號(hào)傳送到由P2_Clk定時(shí)的同步單元1016的輸入端。同步單元1016的輸出通過導(dǎo)線1018被輸入到第二個(gè)生產(chǎn)者1004。導(dǎo)線1020將時(shí)鐘P2_Clk連接到同步單元1010、同步單元1016、仲裁器1006、第二個(gè)生產(chǎn)者1004。
第一個(gè)生產(chǎn)者1002在啟動(dòng)對共享資源(未予表示)的寫操作時(shí),更新P1_Bitreg信號(hào)。該P(yáng)1_Bitreg信號(hào)與第一個(gè)生產(chǎn)者的第一時(shí)鐘P1_Clk同步。如上所述,第二個(gè)生產(chǎn)者1004欲按照本發(fā)明方法確定共享資源的狀態(tài),必須能讀取P1_Bitreg信號(hào)的邏輯狀態(tài),以將其與自己的位寄存器的邏輯狀態(tài)進(jìn)行比較。因此,要用同步單元1016使P1_Bitreg信號(hào)的邏輯狀態(tài)與P2_CLk同步,同步后的P1_Bitreg信號(hào)通過導(dǎo)線1018被傳送到第二個(gè)生產(chǎn)者1004。
第一個(gè)生產(chǎn)者1002啟動(dòng)對共享資源的寫操作時(shí),第一個(gè)生產(chǎn)者還生成一個(gè)BUS_Release信號(hào),通過導(dǎo)線1008輸入到同步單元1010。因?yàn)橹俨闷髋c第二時(shí)鐘P2_Clk同步,所以BUS_Release信號(hào)必須與P2_Clk同步后再由仲裁器1006接收。同步單元1010的輸出代表與P2_Clk同步后的BUS_Release信號(hào)。該同步后的BUS_Release信號(hào)被輸入到仲裁器1006。仲裁器1006收到BUS_Release信號(hào)后的響應(yīng)是,生成一個(gè)BUS_Grant信號(hào),實(shí)際是將對共享資源的訪問權(quán)交給第二個(gè)生產(chǎn)者1004。BUS_Grant信號(hào)與P2_Clk同步,所以它被直接輸入到第二個(gè)生產(chǎn)者1004。
附圖10a表明,當(dāng)使用一個(gè)與一個(gè)生產(chǎn)者子系統(tǒng)同步操作的仲裁器路1006、并采用本發(fā)明方法確定共享資源狀態(tài)時(shí),為保證仲裁器的正確仲裁定時(shí)而在仲裁器1006中導(dǎo)入內(nèi)置延遲是無必要的。一旦P1_Bitreg信號(hào)被同步單元1016與P2_Clk同步,第二個(gè)生產(chǎn)者1004就能獲知由第一個(gè)生產(chǎn)者1002引起的共享資源狀態(tài)的任何變化。BUS_Release信號(hào)與P2_Clk同步后被傳送到仲裁器1006,以及仲裁器1006作出響應(yīng)、生成向第二個(gè)生產(chǎn)者1004傳送的BUS_Grant信號(hào),至少需要同樣的時(shí)間。因此可知,仲裁器1006在第二個(gè)生產(chǎn)者1004能夠檢測到第一個(gè)生產(chǎn)者1002的更新后的P1_Bitreg信號(hào)之前,不能既檢測到第一個(gè)生產(chǎn)者1002的BUS_Release信號(hào),又用BUS_Grant信號(hào)將總線授權(quán)給第二個(gè)生產(chǎn)者1004使用。因此盡管沒有導(dǎo)入降低仲裁器1006的速度的內(nèi)置延遲,也不可能存在競爭條件。
附圖10b是一個(gè)表示與附圖10a中相同的部件的簡化方框圖。不過在附圖10b中,仲裁器1006與第一個(gè)生產(chǎn)者1002同步操作。所以仲裁器1006可用直接接收第一個(gè)生產(chǎn)者1002的未作同步處理的BUS_Release信號(hào)。然而第二個(gè)生產(chǎn)者1004與判優(yōu)電路1006不同步,仲裁器1006生成的BUS_Grant在第二個(gè)生產(chǎn)者1004檢測到之前必須先被與P2_Clk同步。與附圖10a中的情形一樣,仲裁器1006在第二個(gè)生產(chǎn)者1004能夠檢測到第一個(gè)生產(chǎn)者1002的更新后的P1_Bitreg信號(hào)之前,不能既檢測到第一個(gè)生產(chǎn)者1002的BUS_Release信號(hào),又用BUS_Grant信號(hào)將總線授權(quán)給第二個(gè)生產(chǎn)者1004使用。
附圖10c的部件與附圖10a、10b中的相同,唯一區(qū)別是,仲裁器1006與時(shí)鐘A_Clk同步,而A_Clk與P1_CLk和P2_Clk都不同步。因此,第一個(gè)生產(chǎn)者1002生成的BUS_Release信號(hào)在被仲裁器1006檢測到之前必須先與A_Clk同步。而且也因?yàn)橹俨闷?006與第二個(gè)生產(chǎn)者1004不同步,仲裁器1006生成的BUS_Grant信號(hào)必須與P2_Clk同步之后,第二生產(chǎn)者1004才能檢測到BUS_Grant信號(hào)。所以仲裁器1006生成的BUS_Release信號(hào)與仲裁器1006生成的BUS_Grant信號(hào)都必須被同步,所以仲裁器1006在第二個(gè)生產(chǎn)者1004能夠檢測到第一個(gè)生產(chǎn)者1002的更新后的P1_Bitreg信號(hào)之前,不可能既檢測到第一個(gè)生產(chǎn)者1002的BUS_Release信號(hào),又用BUS_Grant信號(hào)將總線授權(quán)給第二個(gè)生產(chǎn)者1004使用。
附圖10a、10b、10c表明,不管仲裁器選用什么時(shí)鐘域,本發(fā)明都能避免用向仲裁器或從仲裁器增加額外的延遲的方法來防止產(chǎn)生競爭條件。
附圖11的簡化方框圖中,有與第一時(shí)鐘P1_Clk同步操作的第一個(gè)生產(chǎn)者1102、與第二時(shí)鐘P2_Clk同步操作的第二個(gè)生產(chǎn)者1104、與P1_Clk同步操作的第一個(gè)仲裁器1106、與第四時(shí)鐘C1_Clk同步操作的第一個(gè)消費(fèi)者1108、以及與C1_Clk同步操作的第二個(gè)仲裁器1109。
P1_Clk、P2_Clk、C1_Clk三個(gè)時(shí)鐘互不同步。
導(dǎo)線1110將第一個(gè)生產(chǎn)者1102生成的P1_Request(P1_請求)信號(hào)傳送到第一個(gè)仲裁器1106的一個(gè)輸入端。導(dǎo)線1112將第一個(gè)仲裁器1106生成的P1_Grant(P1_授權(quán))信號(hào)傳送到第一個(gè)生產(chǎn)者1102的輸入端。導(dǎo)線1114將第一個(gè)生產(chǎn)者1102生成的P1_Add(P1_加)信號(hào)傳送到第一個(gè)位寄存器1116的輸入端。導(dǎo)線1118將第一個(gè)位寄存器1116生成的P1_Bitreg(P1_位寄存器)信號(hào)傳送到第一個(gè)檢測邏輯部件1120的一個(gè)輸入端。第一個(gè)檢測邏輯部件1120輸出的P1_Test(P1_檢測)信號(hào)通過導(dǎo)線1122輸入到第一個(gè)生產(chǎn)者1102。
導(dǎo)線1118還將P1_Bitreg信號(hào)輸入到P2_Clk定時(shí)的同步單元1124。同步單元1124的輸出信號(hào)被傳送到第二個(gè)檢測邏輯部件1126的一個(gè)輸入端。導(dǎo)線1118還將P1_Bitreg信號(hào)輸入到C1_Clk定時(shí)的同步單元1128。同步單元1128的輸出信號(hào)被傳送到第三個(gè)檢測邏輯部件1130的一個(gè)輸入端。
導(dǎo)線1134將第二個(gè)生產(chǎn)者1104生成的P2_Request信號(hào)傳送到P1_Clk定時(shí)的同步單元1136。同步單元1136的輸出信號(hào)被傳送到第一個(gè)仲裁器1106的一個(gè)輸入端。導(dǎo)線1138將第一個(gè)仲裁器1106生成的P2_Grant信號(hào)傳送到P2_Clk定時(shí)的同步單元1140。導(dǎo)線1142將第二個(gè)生產(chǎn)者1104生成的P2_Add(P2_加)信號(hào)傳送到第二個(gè)位寄存器1144的輸入端。導(dǎo)線1146將第二個(gè)位寄存器1144生成的P2_Bitreg(P2位寄存器)信號(hào)傳送到第二個(gè)檢測邏輯部件1126的一個(gè)輸入端。第二個(gè)檢測邏輯部件1126輸出的P2_Test(P2_檢測)信號(hào)通過導(dǎo)線1148輸入到第二個(gè)生產(chǎn)者1104。導(dǎo)線1146將P2_Bitreg信號(hào)輸入到P1_Clk定時(shí)的同步單元1150。同步單元1150的輸出信號(hào)被傳送到第一個(gè)檢測邏輯部件1120的一個(gè)輸入端。導(dǎo)線1146還將P2_Bitreg信號(hào)輸入到C1_Clk定時(shí)的同步單元1152。同步單元1152的輸出信號(hào)被傳送到第三個(gè)檢測邏輯部件1130的一個(gè)輸入端。
導(dǎo)線1145將消費(fèi)者1108生成的C1_Request信號(hào)傳送到第二個(gè)仲裁器1109的一個(gè)輸入端。導(dǎo)線1156將第二個(gè)仲裁器1109生成的C1_Grant信號(hào)傳送到消費(fèi)者1108的輸入端。導(dǎo)線1158將消費(fèi)者生成的C1_Add(C1_減)信號(hào)傳送到第三個(gè)位寄存器1160的輸入端。導(dǎo)線1162將第三個(gè)位寄存器1160生成的C1_Bitreg(C1_位寄存器)信號(hào)傳送到第三個(gè)檢測邏輯部件1130的一個(gè)輸入端。第三個(gè)檢測邏輯部件1130輸出的C1_Test(C1_檢測)信號(hào)通過導(dǎo)線1164輸入到消費(fèi)者1108。導(dǎo)線1162還將C1_Bitreg信號(hào)輸入到P1_Clk定時(shí)的同步單元1166。同步單元1166的輸出信號(hào)被傳送到第一個(gè)檢測邏輯部件1120的一個(gè)輸入端。導(dǎo)線1162還將C1_Bitreg信號(hào)輸入到P2_Clk定時(shí)的同步單元1168。同步單元1168的輸出信號(hào)被傳送到第二個(gè)檢測邏輯部件1126的一個(gè)輸入端。
導(dǎo)線1170將P1_Clk連接到第一個(gè)生產(chǎn)者1102、第一個(gè)仲裁器1106、以及同步單元1136、1150和1166。導(dǎo)線1172將P2_Clk連接到第二個(gè)生產(chǎn)者1104、以及同步單元1140、1124和1168、導(dǎo)線1174將C1_Clk連接到消費(fèi)者1108、第二個(gè)仲裁器1109、以及同步單元1128和1152。
附圖12是表示附圖11中各部件生成的某些信號(hào)之間定時(shí)關(guān)系的定時(shí)圖。附圖12中包括了在一個(gè)時(shí)間間隔(t)內(nèi)與三個(gè)時(shí)鐘P1_Clk、P2_Clk、C1_Clk同步生成的那些信號(hào)。P1_Clk信號(hào)1202表示在時(shí)間間隔t內(nèi),由P1_Clk生成的邏輯狀態(tài)的變換。P2_Clk信號(hào)1204表示在時(shí)間間隔t內(nèi),由P2_Clk生成的邏輯狀態(tài)的變換。C1_Clk信號(hào)1206表示在時(shí)間間隔t內(nèi),由C1_Clk生成的邏輯狀態(tài)的變換。應(yīng)當(dāng)明白,在時(shí)間間隔t內(nèi),P2_Clk生成的變換的數(shù)量少于P1_Clk生成的變換的數(shù)量(即P2_Clk比P1_Clk更快)。與此類似,在時(shí)間間隔t內(nèi),C1_Clk生成的變換的數(shù)量多于P1_Clk生成的變換的數(shù)量(即C1_Clk比P1_Clk更快)。
P1_Request信號(hào)1208和P2_Request信號(hào)1210分別與P1_Clk信號(hào)1202和P2_Clk信號(hào)1204同步,從低轉(zhuǎn)到高。P1_Request信號(hào)1208和P2_Request信號(hào)1210分別由第一個(gè)生產(chǎn)者1102(見附圖11)和第二個(gè)生產(chǎn)者1104(見附圖11)幾乎同時(shí)生成。P1_Request信號(hào)1208和P2_Request信號(hào)1210分別由導(dǎo)線1110和1134(見附圖11)傳送到第一個(gè)仲裁器1106。由此可知,第一個(gè)生產(chǎn)者1102和第二個(gè)生產(chǎn)者1104正競相爭取訪問一個(gè)共享資源(圖中未予表示)。
消費(fèi)者1108(見附圖11)生成的C1_Request信號(hào)1224與C2_Clk信號(hào)1206同步,從低轉(zhuǎn)到高。C1_Request信號(hào)1224的轉(zhuǎn)換被傳送到第二個(gè)仲裁器1109的輸入端,表示消費(fèi)者1108要求訪問共享資源。C1_Request信號(hào)1224發(fā)生轉(zhuǎn)換后,由第二個(gè)仲裁器1109生成的C1_Grant信號(hào)從低轉(zhuǎn)到高,表示第二個(gè)仲裁器1109已經(jīng)授權(quán)消費(fèi)者1108訪問共享資源。其它正競相爭取訪問共享資源的消費(fèi)者,圖中未予表示。
P1_Request信號(hào)1208和P2_Request信號(hào)1210發(fā)生從低到高轉(zhuǎn)換后,P1_Grant信號(hào)1212從低轉(zhuǎn)到高。由第一個(gè)仲裁器1106生成的這個(gè)P1_Grant信號(hào),表示第一個(gè)生產(chǎn)者已被授權(quán)訪問該共享資源。P2_Request信號(hào)1210繼續(xù)保持在高態(tài),表示第二個(gè)生產(chǎn)者繼續(xù)要求訪問共享資源。
第一個(gè)生產(chǎn)者1102獲得共享資源訪問權(quán)后,啟動(dòng)對共享資源的寫操作,還生成一個(gè)表示啟動(dòng)過寫操作的P1_Add信號(hào)。于是,在P1_Grant信號(hào)發(fā)生轉(zhuǎn)換后P1_Clk生成的下一個(gè)完整波形轉(zhuǎn)換發(fā)生時(shí),P1_Add信號(hào)1214從低轉(zhuǎn)到高。該P(yáng)1_Add信號(hào)1214被輸入到第一個(gè)位寄存器1116。在P1_Clk的下一個(gè)完整波形轉(zhuǎn)換發(fā)生時(shí),第一個(gè)位寄存器(見附圖11)將位寄存器信號(hào)1216的邏輯狀態(tài)從低變?yōu)楦?。而且,由于第一個(gè)生產(chǎn)者1102已經(jīng)啟動(dòng)了對共享資源的寫操作,該第一個(gè)生產(chǎn)者就通過將P1_Request信號(hào)的邏輯狀態(tài)從高變?yōu)榈?,收回其對共享資源的訪問請求。
因?yàn)镻1_Add信號(hào)1214是脈沖信號(hào),其向低轉(zhuǎn)換與P1_Bitreg信號(hào)1216的邏輯狀態(tài)轉(zhuǎn)換同時(shí)發(fā)生。P1_Bitreg信號(hào)1216立即被傳送到第一個(gè)檢測邏輯部件1120(見附圖11),后者也立即使P1_Test信號(hào)1218的邏輯狀態(tài)從低轉(zhuǎn)到高。重要的是,因?yàn)镻1_Test信號(hào)1218的更新,是在第一個(gè)生產(chǎn)者1102啟動(dòng)寫操作后P1_Clk發(fā)生一個(gè)完整波形轉(zhuǎn)換的時(shí)間內(nèi)完成的,所以第一個(gè)生產(chǎn)者1102能獲知由其自己的寫操作引起的共享資源狀態(tài)的改變,在被通知之前就不可能進(jìn)行另一次寫操作。
P1_Bitreg信號(hào)被導(dǎo)線1118傳送到P2_Clk定時(shí)的同步單元1124。同步單元1124輸出的與P2_Clk同步了的P1_Bitreg信號(hào),然后被傳送到第二個(gè)檢測邏輯部件1126。因?yàn)橥絾卧?124是由P2_Clk定時(shí)的,第二個(gè)檢測邏輯部件要在等到P2_Clk信號(hào)1204發(fā)生一個(gè)完整波形轉(zhuǎn)換時(shí),才更新P2_Test信號(hào)1220。就這樣,在P1_Bitreg信號(hào)1216轉(zhuǎn)換后P2_Clk信號(hào)1204發(fā)生一個(gè)完整波形轉(zhuǎn)換時(shí),與P1_Bitreg信號(hào)1216異步的P2_Test信號(hào)1220從低轉(zhuǎn)到高。
對第三個(gè)檢測邏輯部件1130,P1_Bitreg信號(hào)也要被類似地進(jìn)行同步。相應(yīng)地,第三個(gè)檢測邏輯部件1130要在P1_Bitreg信號(hào)1216轉(zhuǎn)換后C1_Clk信號(hào)發(fā)生一個(gè)完整波形轉(zhuǎn)換時(shí),才更新C1_Test信號(hào)1222。C1_Test信號(hào)1222與P1_Bitreg信號(hào)1216不同步,因此在P1_Bitreg信號(hào)1216轉(zhuǎn)換后C1_Clk信號(hào)發(fā)生一個(gè)完整波形轉(zhuǎn)換時(shí),C1_Test信號(hào)1120從低轉(zhuǎn)到高。
當(dāng)P2_Test信號(hào)1220和C1_Test信號(hào)1222發(fā)生轉(zhuǎn)換時(shí),第二個(gè)生產(chǎn)者1104和消費(fèi)者1108能夠分別檢測到由第一個(gè)生產(chǎn)者1102啟動(dòng)的寫操作所引起的共享資源狀態(tài)的變化。由于C1_Clk信號(hào)1206生成轉(zhuǎn)換時(shí)比P2_Clk信號(hào)1204快,所以消費(fèi)者1108能比第二個(gè)生產(chǎn)者1104較早地檢測到共享資源狀態(tài)的這種變化。
消費(fèi)者1108在從第二個(gè)仲裁器1109得到訪問共享資源的授權(quán)后,在C1_Test信號(hào)1222轉(zhuǎn)換后C1_Clk信號(hào)的一個(gè)完整波形轉(zhuǎn)換時(shí)間內(nèi),啟動(dòng)對共享資源的讀訪問。消費(fèi)者1108還通過生成一個(gè)C1_Sub信號(hào)1228來表示啟動(dòng)過讀操作。如同P1_Add信號(hào)1214一樣,C1_Sub信號(hào)1228是一個(gè)脈沖,因此在C1_Clk信號(hào)1206的一個(gè)周期內(nèi)由低轉(zhuǎn)高,再由高轉(zhuǎn)低。C1_Sub信號(hào)1228被發(fā)送到第三個(gè)位寄存器1160。第三個(gè)位寄存器1160在C1_Clk信號(hào)1206的下一個(gè)完整波形轉(zhuǎn)換時(shí),使C1_Bitreg信號(hào)1230從低變到高。
C1_Bitreg信號(hào)1230立即被傳送到第三個(gè)檢測邏輯部件1160(見附圖11),后者立即將C1_Test信號(hào)從高變?yōu)榈汀魉虲1_Bitreg信號(hào)1230到同步單元1126和1168,使C1_Bitreg信號(hào)1230分別與P1_Clk信號(hào)1202和P2_Clk信號(hào)1204同步。完成這種同步后,在C1_Test信號(hào)1222轉(zhuǎn)換后P1_Clk信號(hào)1202發(fā)生一個(gè)完整波形轉(zhuǎn)換時(shí),P1_Test信號(hào)1218從高轉(zhuǎn)到低。同樣,在C1_Test信號(hào)1222轉(zhuǎn)換后P2_Clk信號(hào)1204發(fā)生一個(gè)完整波形轉(zhuǎn)換時(shí),P2_Test信號(hào)1220從高轉(zhuǎn)到低。P1_Test信號(hào)1218和P2_Test信號(hào)1220的這種轉(zhuǎn)換表明,第一個(gè)生產(chǎn)者1102和第二個(gè)生產(chǎn)者1104能夠檢測到由于消費(fèi)者1108啟動(dòng)對共享資源的讀訪問所引起的共享資源狀態(tài)的變化。
由于第一個(gè)生產(chǎn)者1102將P1_Request信號(hào)1208的邏輯狀態(tài)從高轉(zhuǎn)到低,并且第二個(gè)生產(chǎn)者1104保持著P2_Request1210信號(hào)的高邏輯狀態(tài),所以第一個(gè)仲裁器1106使P2_Grant信號(hào)1232從低變?yōu)楦?,將對共享資源的訪問權(quán)授予第二個(gè)生產(chǎn)者1104。第二個(gè)生產(chǎn)者得到共享資源訪問權(quán)并由P2_Test信號(hào)1220的低邏輯狀態(tài)獲知共享資源可用時(shí),就啟動(dòng)對共享資源的寫操作。為了指出已經(jīng)啟動(dòng)了這種寫操作,第二個(gè)生產(chǎn)者1104使P2_Add信號(hào)1234從低變?yōu)楦?。因?yàn)镻2_Add信號(hào)1234是個(gè)脈沖,所以它在P2_Clk信號(hào)1204發(fā)生一個(gè)完整波形轉(zhuǎn)換的期間內(nèi)從低變?yōu)楦卟母咦優(yōu)榈汀?br> P2_Add信號(hào)1234被傳送到第二個(gè)位寄存器1144,后者在P2_Add信號(hào)1234轉(zhuǎn)換后P2_Clk信號(hào)1204發(fā)生一個(gè)完整波形轉(zhuǎn)換時(shí),使P2_Bitreg信號(hào)1236從低變?yōu)楦?。該P(yáng)2_Bitreg信號(hào)1236立即被傳送到第二個(gè)檢測邏輯部件1126,后者立即使P2_Test信號(hào)1220從低變?yōu)楦摺?br> P2_Bitreg信號(hào)1236被傳送到同步單元1150和1152,它們分別將該P(yáng)2_Bitreg信號(hào)1236與P1_Clk信號(hào)1202和C1_Clk信號(hào)1206同步。在這種同步操作完成后,同步后的P2_Bitreg信號(hào)1236分別被傳送到第一個(gè)檢測邏輯部件1120和第三個(gè)檢測邏輯部件1130。第一個(gè)檢測邏輯部件使P1_Test信號(hào)1218從低變?yōu)楦?。不過,因?yàn)镻2_Bitreg信號(hào)1236與P1_Test信號(hào)1218異步,所以P1_Test信號(hào)1218直到P2_Bitreg信號(hào)1236轉(zhuǎn)換后P1_Clk信號(hào)發(fā)生一個(gè)完整波形轉(zhuǎn)換時(shí),才發(fā)生轉(zhuǎn)換。
與此類似,第三個(gè)檢測邏輯部件在P2_Bitreg信號(hào)1236轉(zhuǎn)換后C1_Clk信號(hào)1206發(fā)生一個(gè)完整波形轉(zhuǎn)換時(shí),使C1_Test信號(hào)1222從低變?yōu)楦摺?br> C1_Grant信號(hào)1226保持在高邏輯狀態(tài),因此消費(fèi)者1108仍然對共享資源有訪問權(quán)。因?yàn)镃1_Test信號(hào)1222處于高邏輯狀態(tài),所以共享資源可以被消費(fèi)者1108訪問。消費(fèi)者1108于是啟動(dòng)對共享資源的讀操作并生成表示這種讀操作已經(jīng)啟動(dòng)的一個(gè)C1_Sub信號(hào)1228脈沖。如上所述,C1_Sub信號(hào)1228是個(gè)脈沖,它在C1_Clk信號(hào)發(fā)生一個(gè)完整波形轉(zhuǎn)換時(shí)降為低。該C1_Sub信號(hào)1228被傳送到第三個(gè)位寄存器1160,后者使C1_Bitreg信號(hào)1230從高變?yōu)榈?。該C1_Bitreg信號(hào)1230被傳送到第三個(gè)檢測邏輯部件1130,后者立即使C1_Test信號(hào)1222從高變?yōu)榈?。如上所述C1_Bitreg信號(hào)1230被分別與P1_Clk信號(hào)1202和C1_Clk信號(hào)1206同步后使P1_Test信號(hào)1218和P2_Test信號(hào)1220從高變?yōu)榈汀?br> 應(yīng)當(dāng)明白,本發(fā)明不是針對仲裁器的功能而提出的,本發(fā)明也不依賴于任何對子系統(tǒng)之間的仲裁方法。
在不偏離本文所述的基本特點(diǎn)的條件下,本發(fā)明可以有其它的特定實(shí)施方式。以上描述的各實(shí)施例都是說明性的而不是限制性的。本發(fā)明的范圍由下面的各權(quán)利要求而不是由前面的說明界定。在權(quán)利要求的等效范圍和思想內(nèi)所作的任何與全部改動(dòng),應(yīng)視為不超出權(quán)利要求的范圍。
權(quán)利要求
1.一種用于確定數(shù)字系統(tǒng)的資源的狀態(tài)的方法,其中,與第一時(shí)鐘同步操作的第一個(gè)子系統(tǒng)向所述資源寫數(shù)據(jù),與第二時(shí)鐘同步操作的第二個(gè)子系統(tǒng)從所述資源讀數(shù)據(jù),所述第二時(shí)鐘與所述第一時(shí)鐘異步,在上次寫入所述資源中的數(shù)據(jù)被所述第二個(gè)子系統(tǒng)讀取之前,所述資源不得被所述第一個(gè)子系統(tǒng)用于寫入其它數(shù)據(jù),所述方法包括以下步驟生成代表所述第一個(gè)子系統(tǒng)對所述資源進(jìn)行寫訪問的次數(shù)的第一個(gè)數(shù)目,所述第一個(gè)數(shù)目的生成與所述第一時(shí)鐘同步;生成代表所述第二個(gè)子系統(tǒng)對所述資源進(jìn)行讀訪問的次數(shù)的第二個(gè)數(shù)目,所述第二個(gè)數(shù)目的生成與所述第二時(shí)鐘同步;將所述第一個(gè)數(shù)目與所述第二時(shí)鐘同步,生成第三個(gè)數(shù)目;將所述第二個(gè)數(shù)目與所述第一時(shí)鐘同步,生成第四個(gè)數(shù)目;比較所述第一個(gè)數(shù)目與所述第四個(gè)數(shù)目,為所述第一個(gè)子系統(tǒng)生成第一個(gè)資源可用信號(hào),當(dāng)所述第一個(gè)數(shù)目等于所述第四個(gè)數(shù)目時(shí),所述第一個(gè)資源可用信號(hào)便活動(dòng),所述第一個(gè)資源可用信號(hào)的生成與所述第一時(shí)鐘同步;比較所述第二個(gè)數(shù)目與所述第三個(gè)數(shù)目,為所述第二個(gè)子系統(tǒng)生成第二個(gè)資源可用信號(hào),當(dāng)所述第二個(gè)數(shù)目不等于所述第三個(gè)數(shù)目時(shí),所述第二個(gè)資源可用信號(hào)便活動(dòng),所述第二個(gè)資源可用信號(hào)的生成與所述第二個(gè)時(shí)鐘同步。
2.權(quán)利要求1中定義的方法,其中,所述第一個(gè)數(shù)目、所述第二個(gè)數(shù)目、所述第三個(gè)數(shù)目、所述第四個(gè)數(shù)目代表一個(gè)0或1的數(shù)值,所述數(shù)值被遞增時(shí)從1變?yōu)?、從0變?yōu)?,其中的所述第一個(gè)資源可用信號(hào)通過所述第一個(gè)數(shù)目與所述第四個(gè)數(shù)目的異或運(yùn)算生成,其中的所述第二個(gè)資源可用信號(hào)通過所述第二個(gè)數(shù)目與所述第三個(gè)數(shù)目的異或運(yùn)算生成。
3.權(quán)利要求1中定義的方法,其中,有一個(gè)與第三時(shí)鐘同步操作的第三個(gè)子系統(tǒng),所述第三時(shí)鐘與所述第一時(shí)鐘和所述第二時(shí)鐘異步,所述第三個(gè)子系統(tǒng)向所述資源寫數(shù)據(jù);在上次寫入所述資源中的數(shù)據(jù)被所述第二個(gè)子系統(tǒng)讀取之前,所述資源不得被所述第三個(gè)子系統(tǒng)用于寫入其它數(shù)據(jù),所述方法還包括以下步驟生成代表所述第三個(gè)子系統(tǒng)對所述資源進(jìn)行寫訪問的次數(shù)的第五個(gè)數(shù)目,所述第五個(gè)數(shù)目的生成與所述第三時(shí)鐘同步;將所述第一個(gè)數(shù)目與所述第三時(shí)鐘同步,生成第六個(gè)數(shù)目;將所述第二個(gè)數(shù)目與所述第三時(shí)鐘同步,生成第七個(gè)數(shù)目;將所述第五個(gè)數(shù)目與所述第一時(shí)鐘同步,生成第八個(gè)數(shù)目;將所述第五個(gè)數(shù)目與所述第二時(shí)鐘同步,生成第九個(gè)數(shù)目;通過將所述第一個(gè)數(shù)目與所述第八個(gè)數(shù)目的和與所述第四個(gè)數(shù)目進(jìn)行比較,生成所述第一個(gè)資源可用信號(hào),當(dāng)所述第一個(gè)數(shù)目與所述第八個(gè)數(shù)目的所述和等于所述第四個(gè)數(shù)目時(shí),所述第一個(gè)資源可用信號(hào)便活動(dòng);通過將所述第三個(gè)數(shù)目與所述第九個(gè)數(shù)目的和與所述第二個(gè)數(shù)目進(jìn)行比較,生成所述第二個(gè)資源可用信號(hào),當(dāng)所述第三個(gè)數(shù)目與所述第九個(gè)數(shù)目的所述和不等于所述第二個(gè)數(shù)目時(shí),所述第二個(gè)資源可用信號(hào)便活動(dòng);以及通過將所述第五個(gè)數(shù)目與所述第六個(gè)數(shù)目的和與所述第七個(gè)數(shù)目進(jìn)行比較,生成所述第三個(gè)資源可用信號(hào),當(dāng)所述第五個(gè)數(shù)目與所述第六個(gè)數(shù)目的所述和等于所述第七個(gè)數(shù)目時(shí),所述第三個(gè)資源可用信號(hào)便活動(dòng),所述第三個(gè)資源可用信號(hào)的生成與所述第三時(shí)鐘同步。
4.權(quán)利要求3中定義的方法,其中,有一個(gè)與第四時(shí)鐘同步操作的第四個(gè)子系統(tǒng),所述第四時(shí)鐘與所述第一時(shí)鐘、所述第二時(shí)鐘、所述第三時(shí)鐘異步,所述第四個(gè)子系統(tǒng)從所述資源讀數(shù)據(jù);在上次寫入所述資源中的數(shù)據(jù)被所述第二個(gè)子系統(tǒng)或所述第四個(gè)子系統(tǒng)讀取之前,所述資源不得被所述第一個(gè)子系統(tǒng)或所述第三個(gè)子系統(tǒng)用于寫入其它數(shù)據(jù),所述方法還包括以下步驟生成代表所述第四個(gè)子系統(tǒng)對所述資源進(jìn)行讀訪問的次數(shù)的第十個(gè)數(shù)目,所述第十個(gè)數(shù)目的生成與所述第四時(shí)鐘同步;將所述第一個(gè)數(shù)目與所述第四時(shí)鐘同步,生成第十一個(gè)數(shù)目;將所述第二個(gè)數(shù)目與所述第四時(shí)鐘同步,生成第十二個(gè)數(shù)目;將所述第五個(gè)數(shù)目與所述第四時(shí)鐘同步,生成第十三個(gè)數(shù)目;將所述第十個(gè)數(shù)目與所述第一時(shí)鐘同步,生成第十四個(gè)數(shù)目;將所述第十個(gè)數(shù)目與所述第二時(shí)鐘同步,生成第十五個(gè)數(shù)目;將所述第十個(gè)數(shù)目與所述第三時(shí)鐘同步,生成第十六個(gè)數(shù)目;通過將所述第一個(gè)數(shù)目與所述第八個(gè)數(shù)目的和與所述第四個(gè)數(shù)目與所述第十四個(gè)數(shù)目的和進(jìn)行比較,生成所述第一個(gè)資源可用信號(hào),當(dāng)所述第一個(gè)數(shù)目與所述第八個(gè)數(shù)目的所述和等于所述第四個(gè)數(shù)目與所述第十四個(gè)數(shù)目的和時(shí),所述資源可用信號(hào)便活動(dòng);通過將所述第三個(gè)數(shù)目與所述第九個(gè)數(shù)目的和與所述第二個(gè)數(shù)目與所述第十五個(gè)數(shù)目的和進(jìn)行比較,生成所述第二個(gè)資源可用信號(hào),當(dāng)所述第三個(gè)數(shù)目與所述第九個(gè)數(shù)目的所述和不等于所述第二個(gè)數(shù)目與所述第十五個(gè)數(shù)目的和時(shí),所述第二個(gè)資源可用信號(hào)便活動(dòng);通過將所述第五個(gè)數(shù)目與所述第六個(gè)數(shù)目的和與所述第七個(gè)數(shù)目與所述第十六個(gè)數(shù)目的和進(jìn)行比較,生成所述第三個(gè)資源可用信號(hào),當(dāng)所述第五個(gè)數(shù)目與所述第六個(gè)數(shù)目的所述和等于所述第七個(gè)數(shù)目與所述第十六個(gè)數(shù)目的和時(shí),所述第三個(gè)資源可用信號(hào)便活動(dòng);以及通過將所述第十一個(gè)數(shù)目與所述第十三個(gè)數(shù)目的和與所述第十個(gè)數(shù)目與所述第十二個(gè)數(shù)目的和進(jìn)行比較,生成第四個(gè)資源可用信號(hào),當(dāng)所述第十一個(gè)數(shù)目與所述第十三個(gè)數(shù)目的和等于所述第十個(gè)數(shù)目與所述第十二個(gè)數(shù)目的和時(shí),所述第四個(gè)資源可用信號(hào)便活動(dòng),所述第四個(gè)資源可用信號(hào)的生成與所述第四時(shí)鐘同步。
5.權(quán)利要求1中定義的方法,其中,有一個(gè)與第三時(shí)鐘同步操作的第三個(gè)子系統(tǒng),所述第三時(shí)鐘與所述第一時(shí)鐘和所述第二時(shí)鐘異步,所述第三個(gè)子系統(tǒng)從所述資源讀數(shù)據(jù);在上次寫入所述資源中的數(shù)據(jù)被所述第二個(gè)子系統(tǒng)或所述第三個(gè)子系統(tǒng)讀取之前,所述資源不得被所述第一個(gè)子系統(tǒng)用于寫入其它數(shù)據(jù),所述方法還包括以下步驟生成代表所述第三個(gè)子系統(tǒng)對所述資源進(jìn)行讀訪問的次數(shù)的第五個(gè)數(shù)目,所述第五個(gè)數(shù)目的生成與所述第三時(shí)鐘同步;將所述第一個(gè)數(shù)目與所述第三時(shí)鐘同步,生成第六個(gè)數(shù)目;將所述第二個(gè)數(shù)目與所述第三時(shí)鐘同步,生成第七個(gè)數(shù)目;將所述第五個(gè)數(shù)目與所述第一時(shí)鐘同步,生成第八個(gè)數(shù)目;將所述第五個(gè)數(shù)目與所述第二時(shí)鐘同步,生成第九個(gè)數(shù)目;通過將所述第一個(gè)數(shù)目與所述第八個(gè)數(shù)目與所述第四個(gè)數(shù)目的和進(jìn)行比較,生成所述第一個(gè)資源可用信號(hào),當(dāng)所述第一個(gè)數(shù)目等于所述第八個(gè)數(shù)目與所述第四個(gè)數(shù)目的所述和時(shí),所述第一個(gè)資源可用信號(hào)便活動(dòng);通過將所述第三個(gè)數(shù)目與所述第九個(gè)數(shù)目與所述第二個(gè)數(shù)目的和進(jìn)行比較,生成所述第二個(gè)資源可用信號(hào),當(dāng)所述第三個(gè)數(shù)目不等于所述第九個(gè)數(shù)目與所述第二個(gè)數(shù)目的所述和時(shí),所述第二個(gè)資源可用信號(hào)便活動(dòng);以及通過將所述第五個(gè)數(shù)目與所述第六個(gè)數(shù)目與所述第七個(gè)數(shù)目的和進(jìn)行比較,生成所述第三個(gè)資源可用信號(hào),當(dāng)所述第五個(gè)數(shù)目等于所述第六個(gè)數(shù)目與所述第七個(gè)數(shù)目的所述和時(shí),所述第三個(gè)資源可用信號(hào)便活動(dòng),所述第三個(gè)資源可用信號(hào)的生成與所述第三時(shí)鐘同步。
6.一種確定數(shù)字系統(tǒng)中資源的狀態(tài)的方法,其中,至少有一個(gè)寫數(shù)據(jù)的子系統(tǒng)向所述資源寫數(shù)據(jù),至少有一個(gè)讀數(shù)據(jù)的子系統(tǒng)從所述資源讀數(shù)據(jù),在某一個(gè)所述讀數(shù)據(jù)的子系統(tǒng)從所述資源中讀取上一次寫入的數(shù)據(jù)之前,所述資源不能用于被所述寫數(shù)據(jù)的子系統(tǒng)寫入其它數(shù)據(jù)。其中,各個(gè)讀數(shù)據(jù)子系統(tǒng)和各個(gè)寫數(shù)據(jù)子系統(tǒng)與各自的時(shí)鐘同步,其中至少有一個(gè)寫數(shù)據(jù)的子系統(tǒng)與一個(gè)第一時(shí)鐘同步操作,至少有一個(gè)讀數(shù)據(jù)的子系統(tǒng)與一個(gè)第二時(shí)鐘同步操作,所述第二時(shí)鐘與所述第一時(shí)鐘異步,該方法包括的步驟是為每個(gè)寫數(shù)據(jù)子系統(tǒng)生成一個(gè)寫操作數(shù)目,各所述寫操作數(shù)目分別代表對應(yīng)的所述寫數(shù)據(jù)子系統(tǒng)對所述資源進(jìn)行寫訪問的次數(shù),各所述寫數(shù)據(jù)子系統(tǒng)的各所述寫操作數(shù)目的生成與所述寫數(shù)據(jù)子系統(tǒng)的所述對應(yīng)時(shí)鐘同步;為每個(gè)讀數(shù)據(jù)子系統(tǒng)生成一個(gè)讀操作數(shù)目,各所述讀操作數(shù)目分別代表對應(yīng)的所述讀數(shù)據(jù)子系統(tǒng)對所述資源進(jìn)行讀訪問的次數(shù),各所述讀數(shù)據(jù)子系統(tǒng)的各所述讀操作數(shù)目的生成與所述讀數(shù)據(jù)子系統(tǒng)的所述對應(yīng)時(shí)鐘同步;將各個(gè)寫操作數(shù)目與所述寫數(shù)據(jù)子系統(tǒng)的時(shí)鐘和所述讀數(shù)據(jù)子系統(tǒng)的時(shí)鐘同步;將各個(gè)讀操作數(shù)目與所述寫數(shù)據(jù)子系統(tǒng)的時(shí)鐘和所述讀數(shù)據(jù)子系統(tǒng)的時(shí)鐘同步;將所述寫操作數(shù)目相加,生成一個(gè)寫操作總數(shù)目,所述加法操作由各所述寫數(shù)據(jù)子系統(tǒng)和各所述讀數(shù)據(jù)子系統(tǒng)獨(dú)立地完成;將所述讀操作數(shù)目相加,生成一個(gè)讀操作總數(shù)目,所述加法操作由各所述寫數(shù)據(jù)子系統(tǒng)和各所述讀數(shù)據(jù)子系統(tǒng)獨(dú)立地完成;比較所述寫操作總數(shù)目與所述讀操作總數(shù)目,生成資源可用于寫操作信號(hào),當(dāng)所述寫操作總數(shù)目等于所述讀操作總數(shù)目時(shí),所述資源可用于寫操作信號(hào)便活動(dòng),所述比較由各所述寫數(shù)據(jù)子系統(tǒng)獨(dú)立地完成,以生成各自的資源可用于寫操作信號(hào);以及比較所述寫操作總數(shù)目與所述讀操作總數(shù)目,生成資源可用于讀操作信號(hào),當(dāng)所述寫操作總數(shù)目不等于所述讀操作總數(shù)目時(shí),所述資源可用于讀操作信號(hào)便活動(dòng),所述比較由各所述讀數(shù)據(jù)子系統(tǒng)獨(dú)立地完成,以生成各自的資源可用于讀操作信號(hào)。
7.權(quán)利要求6中定義的方法,其中,所述寫操作數(shù)目和所述讀操作代表一個(gè)0或1的數(shù)值,所述數(shù)值被遞增時(shí)從1變?yōu)?或從0變?yōu)?,其中所述寫操作總數(shù)目通過對所述各寫操作數(shù)目進(jìn)行異或運(yùn)算而生成,其中所述讀操作總數(shù)目通過對所述各讀操作數(shù)目進(jìn)行異或運(yùn)算而生成,其中所述的資源可用于寫操作信號(hào)通過所述寫操作總數(shù)目與所述讀操作總數(shù)目的異或運(yùn)算生成,其中所述的資源可用于寫操作信號(hào)由各所述寫操作子系統(tǒng)獨(dú)立生成,其中所述的資源可用于讀操作信號(hào)通過所述寫操作總數(shù)目與所述讀操作總數(shù)目的異或運(yùn)算生成,其中所述的資源可用于讀操作信號(hào)由各所述讀操作子系統(tǒng)獨(dú)立生成。
8.一種確定數(shù)字系統(tǒng)中資源的狀態(tài)的方法,其中,與一個(gè)第一時(shí)鐘同步操作的第一個(gè)子系統(tǒng)對所述資源進(jìn)行一級(jí)訪問,與一個(gè)第二時(shí)鐘同步操作的第二個(gè)子系統(tǒng)對所述資源進(jìn)行二級(jí)訪問,所述第一時(shí)鐘與所述第二時(shí)鐘異步,其中,在發(fā)生一次所述二級(jí)訪問之前,所述資源不能用于進(jìn)行其它所述一級(jí)訪問,并且,在發(fā)生一次所述一級(jí)訪問之前,所述資源不能用于所述二級(jí)訪問,所述一級(jí)訪問與所述二級(jí)訪問在時(shí)間上交替進(jìn)行,所述方法包括的步驟是生成代表所述第一個(gè)子系統(tǒng)對所述資源進(jìn)行所述一級(jí)訪問的次數(shù)的第一個(gè)數(shù)目,所述第一個(gè)數(shù)目的生成與所述第一時(shí)鐘同步;生成代表所述第二個(gè)子系統(tǒng)對所述資源進(jìn)行所述二級(jí)訪問的次數(shù)的第二個(gè)數(shù)目,所述第二個(gè)數(shù)目的生成與所述第二時(shí)鐘同步;將所述第一個(gè)數(shù)目與所述第二時(shí)鐘同步,生成第三個(gè)數(shù)目;將所述第二個(gè)數(shù)目與所述第一時(shí)鐘同步,生成第四個(gè)數(shù)目;比較所述第一個(gè)數(shù)目與所述第四個(gè)數(shù)目,為所述第一個(gè)子系統(tǒng)生成第一個(gè)資源可用信號(hào),當(dāng)所述第一個(gè)數(shù)目等于所述第四個(gè)數(shù)目時(shí),所述第一個(gè)資源可用信號(hào)便活動(dòng),所述第一個(gè)資源可用信號(hào)的生成與所述第一時(shí)鐘同步;以及比較所述第二個(gè)數(shù)目與所述第三個(gè)數(shù)目,為所述第二個(gè)子系統(tǒng)生成第二個(gè)資源可用信號(hào),當(dāng)所述第二個(gè)數(shù)目不等于所述第四個(gè)數(shù)目時(shí),所述第二個(gè)資源可用信號(hào)便活動(dòng),所述第二個(gè)資源可用信號(hào)的生成與第二個(gè)時(shí)鐘同步。
9.一種確定數(shù)字系統(tǒng)中資源的狀態(tài)的裝置,其中,一個(gè)寫操作子系統(tǒng)向該所述資源發(fā)送寫信號(hào),一個(gè)讀操作子系統(tǒng)向所述資源發(fā)送讀信號(hào),其中,所述寫操作子系統(tǒng)與第一時(shí)鐘同步,所述讀操作子系統(tǒng)與第二時(shí)鐘同步,所述第一時(shí)鐘與所述第二時(shí)鐘異步,所述裝置包括第一信志單元,它生成有著第一邏輯狀態(tài)和第二邏輯狀態(tài)的第一更新信號(hào),每次當(dāng)所述寫操作子系統(tǒng)向所述資源寫數(shù)據(jù)時(shí),所述第一信志單元對所述寫信號(hào)作出響應(yīng),與所述第一時(shí)鐘同步地改變所述第一更新信號(hào)的邏輯狀態(tài);第二信志單元,它生成有著第一邏輯狀態(tài)和第二邏輯狀態(tài)的第二更新信號(hào),每次當(dāng)所述讀操作子系統(tǒng)從所述資源讀數(shù)據(jù)時(shí),所述第二信志單元對所述讀信號(hào)作出響應(yīng),與所述第二時(shí)鐘同步地改變第二更新信號(hào)的邏輯狀態(tài);第一同步單元,它將所述第一更新信號(hào)與所述第二時(shí)鐘同步,生成第一同步更新信號(hào);第二同步單元,它將所述第二更新信號(hào)與所述第一時(shí)鐘同步,生成第二同步更新信號(hào);第一檢測單元,它生成有著第一邏輯狀態(tài)和第二邏輯狀態(tài)的第一檢測輸出信號(hào),當(dāng)所述第一更新信號(hào)等于所述第二同步更新信號(hào)時(shí),所述第一檢測單元生成所述第一邏輯狀態(tài)的所述第一檢測輸出信號(hào),當(dāng)所述第一更新信號(hào)不同于所述第二同步更新信號(hào)時(shí),所述第一檢測單元生成所述第二邏輯狀態(tài)的所述第一檢測輸出信號(hào);以及第二檢測單元,它生成有著第一邏輯狀態(tài)和第二邏輯狀態(tài)的第二檢測輸出信號(hào),當(dāng)所述第一同步更新信號(hào)等于所述第二更新信號(hào)時(shí),所述第二檢測單元生成所述第一邏輯狀態(tài)的所述第二檢測輸出信號(hào),當(dāng)所述第一同步更新信號(hào)不同于所述第二更新信號(hào)時(shí),所述第二檢測單元生成所述第二邏輯狀態(tài)的所述第二檢測輸出信號(hào)。
10.權(quán)利要求9中定義的裝置,其中,所述第一信志含有第一異或門和第一D觸發(fā)器,所述第一異或門有第一輸出,所述第一輸出連接所述第一D觸發(fā)器的輸入端,所述第一D觸發(fā)器有第二輸出,所述第二輸出連接所述第一異或門的一個(gè)輸入端;以及所述第二信志含有第二異或門和第二D觸發(fā)器,所述第二異或門有第三輸出,所述第三輸出連接所述第二D觸發(fā)器的輸入端,所述第二D觸發(fā)器有第四輸出,所述第四輸出連接所述第二異或門的一個(gè)輸入端;
11.權(quán)利要求9中定義的裝置,其中,所述第一同步單元含有兩個(gè)鎖存D觸發(fā)器,所述第二同步單元含有兩個(gè)鎖存D觸發(fā)器。
12.權(quán)利要求9中定義的裝置,其中,所述第一檢測單元含有一個(gè)異或門,以及所述第二檢測單元含有一個(gè)異或門。
13.一種確定數(shù)字系統(tǒng)中資源的狀態(tài)的裝置,其中,與第一時(shí)鐘同步操作的第一個(gè)子系統(tǒng)向所述資源寫數(shù)據(jù),與第二時(shí)鐘同步操作的第二個(gè)子系統(tǒng)從所述資源讀數(shù)據(jù),所述第一時(shí)鐘與所述第二時(shí)鐘異步,在由所述第二個(gè)子系統(tǒng)從資源中讀取上一次寫入的數(shù)據(jù)之前,所述資源不能用于被所述第一個(gè)子系統(tǒng)寫入其它數(shù)據(jù),所述裝置包括生成代表所述第一個(gè)子系統(tǒng)對所述資源進(jìn)行寫訪問的次數(shù)的第一個(gè)數(shù)目的裝置,所述第一個(gè)數(shù)目的生成與所述第一時(shí)鐘同步;生成代表所述第二個(gè)子系統(tǒng)對所述資源進(jìn)行讀訪問的次數(shù)的第二個(gè)數(shù)目的裝置,所述第二個(gè)數(shù)目的生成與所述第二時(shí)鐘同步;將所述第一個(gè)數(shù)目與所述第二時(shí)鐘同步、以生成第三個(gè)數(shù)目的裝置;將所述第二個(gè)數(shù)目與所述第一時(shí)鐘同步、以生成第四個(gè)數(shù)目的裝置;比較所述第一個(gè)數(shù)目與所述第四個(gè)數(shù)目、為所述第一個(gè)子系統(tǒng)生成第一個(gè)資源可用信號(hào)的裝置,當(dāng)所述第一個(gè)數(shù)目等于所述第四個(gè)數(shù)目時(shí),所述第一個(gè)資源可用信號(hào)便活動(dòng),所述第一個(gè)資源可用信號(hào)的生成與所述第一時(shí)鐘同步;以及比較所述第二個(gè)數(shù)目與所述第三個(gè)數(shù)目、為所述第二個(gè)子系統(tǒng)生成第二個(gè)資源可用信號(hào)的裝置,當(dāng)所述第二個(gè)數(shù)目不等于所述第三個(gè)數(shù)目時(shí),所述第二個(gè)資源可用信號(hào)便活動(dòng),所述第二個(gè)資源可用信號(hào)的生成與所述第二個(gè)時(shí)鐘同步。
全文摘要
一種確定數(shù)字系統(tǒng)中資源(810)的狀態(tài)的裝置,該資源由多個(gè)在相互異步的時(shí)鐘域中操作的子系統(tǒng)(802、804、806、808)共享。在每個(gè)子系統(tǒng)上使用一個(gè)位寄存器(814、818、822、826),并將各位寄存器的值與所有異步時(shí)鐘進(jìn)行同步。每個(gè)子系統(tǒng)對各子系統(tǒng)(802、804、806、808)的值進(jìn)行異或運(yùn)算,生成關(guān)于共享資源(810)可用性的狀態(tài)信號(hào)。本發(fā)明使同步引起的延遲被最小化,并簡化了電路設(shè)計(jì)和設(shè)計(jì)階段的正確性檢驗(yàn)工作。
文檔編號(hào)G06F13/20GK1208478SQ96199825
公開日1999年2月17日 申請日期1996年11月13日 優(yōu)先權(quán)日1995年12月7日
發(fā)明者M·Y·C·承 申請人:三星電子株式會(huì)社
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
岳阳市| 梁平县| 呈贡县| 江达县| 望奎县| 台湾省| 凉山| 昭平县| 吴川市| 顺义区| 山阴县| 南昌县| 葫芦岛市| 天门市| 肃北| 吉安县| 武宣县| 视频| 聂拉木县| 黄山市| 剑川县| 佛山市| 哈尔滨市| 尉氏县| 泰宁县| 哈尔滨市| 峨山| 高淳县| 阜新市| 昌黎县| 达日县| 通榆县| 镇雄县| 横山县| 蕲春县| 云浮市| 长垣县| 渝北区| 建德市| 杭锦后旗| 泾川县|