在操作系統中,有一種重要的進程間的同步機制稱作信號量機制。信號量即當前可用資源的計數。信號量是一個用來實現同步的整型或記錄型(Record)變量,除了初始化外,對它只能執行等待和釋放這兩種原子操作。一次對信號量的等待操作是獲得信號量的過程,讀取當前信號量的值,如果發現有可利用資源,則將信號量減1,否則進入等待狀態。一次對信號量的釋放過程即將信號量加1。一個進程對信號的讀取、計算新的信號量值、更新信號量的值,這三個步驟是不允許被其他進程打破的,如果被打破,則信號量的值將會發生錯誤,RMW操作的最大用途在于信號量操作。當然,用戶也可以將總線精簡為不支持RWM操作。
一次RMW操作對于總線來說,本質上是兩次子操作,一次讀,一次寫,只不過這兩次子操作必須由同一個主設備的完成,且讀數據和寫數據的地址相同。"改"是不發生在總線上的,它發生在主設備內部。一個RMW操作的例子如圖19所示,其過程如下:
時鐘上升沿0:
·主機將有效地址置于ADR_O()和TGA_O();
·主機將WE_O復位,以表明進入讀周期;
·主機輸出SEL_O()(bank select)表明其操作的數據地址;
·主機將CYC_O和TGC_O()置位,以表明周期的開始;
·主機將STB_O置位。
注意:主機可以在時鐘上升沿1到來之前的任意時間將CYC_O和TGC_O()置位,而TAGN_O信號是可選的。
時鐘上升沿1(SETUP):
·從機解碼輸入,并對ACK_I的置位做出響應;
·從機將有效數據置于DAT_I()和TGD_I()上;
·主機監控ACK_I信號,并準備鎖存DAT_I()和TGD_I()上的信號;
時鐘上升沿1:
·主機鎖存DAT_I()和TGD_I()上的數據;
·主機將STB_O復位,以插入一個等待周期(-WSW-)。
時鐘上升沿2(SETUP):
·從機將ACK_I復位以響應STB_O信號;
·主機將WE_O置位,以表明進入寫周期。
注意:實際上主機可以在本過程之前插入任意多個周期。
時鐘上升沿2:
·主機將寫數據置于DAT_O()和TGD_O()上;
·主機輸出SEL_O()(bank select)表明其操作的數據地址;
·主機置位STB_O信號。
時鐘上升沿3(SETUP):
·從機解碼輸入,并響應ACK_I的置位;
·從機準備鎖存DAT_O()和TGD_O()上的數據;
·主機監控ACK_I信號,并準備結束數據段(phase)傳輸。
注意:實際上從機可以在本過程之前插入任意多個周期。
時鐘上升沿3:
·從機將DAT_O()和TGD_O()上的數據鎖存;
·主機復位STB_O和CYC_O信號,以表明本周期的結束;
·從機將ACK_I信號復位,以響應STB_O信號的復位。
圖19 RWM周期
-
進程
+關注
關注
0文章
203瀏覽量
13964 -
信號量
+關注
關注
0文章
53瀏覽量
8354
原文標題:【博文連載】Wishbone總線周期之RMW操作
文章出處:【微信號:ChinaAET,微信公眾號:電子技術應用ChinaAET】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論