新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 片上總線Wishbone 學(xué)習(xí)(十二)總線周期之RMW操作

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

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

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

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

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

        在時鐘上升沿1到達(dá)之前,從設(shè)備檢測到主設(shè)備發(fā)起的操作,將適當(dāng)?shù)臄?shù)據(jù)放到主設(shè)備的DAT_I()和TGD_I(),將主設(shè)備的ACK_I置高作為對主設(shè)備STB_O的響應(yīng)。

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

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

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

        在時鐘上升沿3到達(dá)之前,從設(shè)備檢測到主設(shè)備發(fā)起的操作,將主設(shè)備的ACK_I置高作為對主設(shè)備STB_O的響應(yīng)。

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

        在時鐘上升沿之后,從設(shè)備發(fā)現(xiàn)STB_O為低,于是將ACK_I置低。

        Wishbone總線的RMW操作



        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 淄博市| 驻马店市| 中江县| 四会市| 长垣县| 固镇县| 拉孜县| 定西市| 扶余县| 黔江区| 威远县| 贵定县| 咸丰县| 纳雍县| 韶山市| 咸宁市| 高密市| 张家港市| 吉水县| 汪清县| 博野县| 自治县| 临沭县| 保德县| 泸溪县| 司法| 浏阳市| 阳曲县| 大方县| 清流县| 陆良县| 深水埗区| 永胜县| 元朗区| 崇明县| 昭平县| 南华县| 和政县| 武功县| 富宁县| 康定县|