新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 片上總線Wishbone 學習(十二)總線周期之RMW操作

        片上總線Wishbone 學習(十二)總線周期之RMW操作

        作者: 時間:2016-12-15 來源:網絡 收藏
        在操作系統中,有一種重要的進程間的同步機制稱作信號量機制。信號量即當前可用資源的計數。信號量是一個用來實現同步的整型或記錄型(Record)變量,除了初始化外,對它只能執行等待和釋放這兩種原子操作。一次對信號量的等待操作是獲得信號量的過程,讀取當前信號量的值,如果發現有可利用資源,則將信號量減1,否則進入等待狀態。一次對信號量的釋放過程即將信號量加1。一個進程對信號的讀取、計算新的信號量值、更新信號量的值這三個步驟是不允許被其他進程打破的,如果被打破,則信號量的值將會發生錯誤,RMW操作的最大用途在于信號量操作。

        一次RMW操作對于總線來說,本質上是兩次子操作,一次讀,一次寫,只不過這兩次子操作必須由同一個主設備的完成,且讀數據和寫數據的地址相同。"改"是不發生在總線上的,它發生在主設備內部。一個RMW操作的例子如圖13所示,其過程如下:

        本文引用地址:http://www.104case.com/article/201612/330210.htm

        在時鐘上升沿0,主設備將地址信號ADR_O()、TGA_O()放到總線上,將WE_O置為低表示讀操作,將適當的SEL_O()信號置高通知從設備將數據放在數據總線的適當位置,將CYC_O和TGC_O()置高表示操作正在進行,將STB_O置高表示第一次子操作開始。CYC_O和TGC_O()可以發生在上升沿0以前的任何時刻。

        在時鐘上升沿1到達之前,從設備檢測到主設備發起的操作,將適當的數據放到主設備的DAT_I()和TGD_I(),將主設備的ACK_I置高作為對主設備STB_O的響應。

        在時鐘上升沿1,主設備發現ACK_I信號為高,將DAT_I()和TGD_I()采樣,完成第一次子操作。主設備將STB_O置低表示插入等待。

        在時鐘上升沿1之后新的上升沿到達之前,從設備檢測到主設備將STB_O置低,于是將ACK_I置低。

        經過若干等待周期,在上升沿2,主設備將地址信號ADR_O()、TGA_O()放到總線上,將數據信號DAT_O()、TGD_O()放到總線上,將WE_O置為高表示寫操作,將適當的SEL_O()信號置高通知從設備將數據總線上哪些信號是有效的,將STB_O置高表示第二次子操作開始。

        在時鐘上升沿3到達之前,從設備檢測到主設備發起的操作,將主設備的ACK_I置高作為對主設備STB_O的響應。

        在時鐘上升沿3,從設備將DAT_I()和TGD_I()采樣;主設備發現ACK_I信號為高,得知第二次子操作完成,于是將STB_O和CYC_O置低表示整個RMW操作完成。

        在時鐘上升沿之后,從設備發現STB_O為低,于是將ACK_I置低。

        Wishbone總線的RMW操作



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 城固县| 增城市| 晋江市| 永宁县| 景德镇市| 湾仔区| 二连浩特市| 临城县| 义马市| 泾源县| 南宫市| 常州市| 苗栗县| 青川县| 平潭县| 巨鹿县| 萨迦县| 许昌市| 舟曲县| 贵州省| 合山市| 家居| 昔阳县| 铜川市| 长宁区| 星座| 宁波市| 都兰县| 河津市| 牡丹江市| 韩城市| 伊吾县| 疏勒县| 临夏市| 墨江| 精河县| 敦煌市| 定西市| 嵩明县| 泸西县| 洱源县|