新聞中心

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

        片上總線Wishbone 學習(十一)總線周期之塊寫操作

        作者: 時間:2016-12-15 來源:網絡 收藏
        異步周期結束方式

        塊寫操作的例子如圖1所示。圖1的一次塊寫操作由五個相互關聯的單次寫操作完成。

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

        在時鐘上升沿0,主設備將地址信號ADR_O()、TGA_O()放到總線上,將數據信號DAT_O()、TGD_O()放到總線上,將WE_O置為高表示寫操作,將適當的SEL_O()信號置高通知從設備將數據總線上哪些信號是有效的,將CYC_O和TGC_O置高表示操作正在進行,將STB_O置高表示第一次寫操作開始。

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

        在時鐘上升沿1,從設備將DAT_I()和TGD_I()采樣;主設備發現ACK_I信號為高,得知第一次寫操作完成,于是將新地址信號ADR_O()、新TGA_O()放到總線上,將新數據信號DAT_O()、新TGD_O()放到總線上,將WE_O置為高表示寫操作,將適當的SEL_O()信號置高通知從設備將數據總線上哪些信號是有效的,將CYC_O和TGC_O置高表示操作繼續在進行,將STB_O置高表示第二次寫操作開始。

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

        在時鐘上升沿2,從設備將DAT_I()和TGD_I()采樣;主設備發現ACK_I信號為高,得知第二次寫操作完成,發現自己的數據還沒有準備好,于是將STB_O置低表示插入等待周期。

        在時鐘上升沿3到達之前,從設備檢測到STB_O為低,也將ACK_I置低。

        在時鐘上升沿3,主設備發起第三次操作,將新地址信號ADR_O()、新TGA_O()放到總線上,將新數據信號DAT_O()、新TGD_O()放到總線上,將WE_O置為高表示寫操作,將適當的SEL_O()信號置高通知從設備將數據總線上哪些信號是有效的,將CYC_O和TGC_O置高表示操作繼續進行,將STB_O置高表示第三次寫操作開始。

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

        在時鐘上升沿4,從設備將DAT_I()和TGD_I()采樣;主設備發現ACK_I信號為高,得知第三次寫操作完成,于是將新地址信號ADR_O()、新TGA_O()放到總線上,將新數據信號DAT_O()、新TGD_O()放到總線上,將適當的SEL_O()信號置高通知從設備將數據總線上哪些信號是有效的,將STB_O繼續置高表示第四次寫操作開始。

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

        在時鐘上升沿5,從設備將DAT_I()和TGD_I()采樣;主設備發現ACK_I信號為高,得知第四次寫操作完成,于是發起第五次操作,將新地址信號ADR_O()、新TGA_O()放到總線上。

        在時鐘上升沿5之后新的時鐘上升沿到達之前,從設備發現因為某些原因暫時無法繼續接收數據,因此將ACK_I信號置低,插入等待。

        在時鐘上升沿6,當從設備發現可以繼續接收數據,于是在在最后一個等待周期結束且上升沿5到達之前,將DAT_I()和TGD_I()采樣;主設備發現ACK_I信號為高,得知第五次寫操作完成。并將STB_O和CYC_O置低表示整個塊寫操作完成。


        圖1 Wishbone總線的塊寫操作(異步周期結束方式)

        同步周期結束方式

        圖2 Wishbone總線的塊寫操作(同步周期結束方式)

        在時鐘上升沿0:
        • Master在[ADR_O()]和[TGA_O()]發出有效的地址
        • Master在[DAT_O()]和[TGD_O()]發出數據
        • Master發出[WE_O],表明是一個寫周期
        • Master發出有效數據選擇信號[SEL_O()]表明哪些數據是有效的
        • Master發出[CYC_O]和[TGC_O()]表明總線周期的開始
        • Master發出[STB_O]表明操作的開始
        注意:Mater必須在時鐘上升沿1或之前發出[CYC_O]和/或[TGC_O()]

        在時鐘上升沿1:
        • Slave檢測到主設備發起的操作,準備發出[ACK_I]
        • Slave準備鎖存[DAT_O]和[TGD_O()]
        • Slave發出[ACK_I]應答[STB_O]


        在時鐘上升沿2:
        • Slave鎖存[DAT_I]和[TGD_I()]
        • Master拉低[STB_O]插入等待周期(-WSS-)

        在時鐘上升沿3:
        • Master在[ADR_O()]和[TGA_O()]發出有效的地址
        • Master在[DAT_O()]和[TGD_O()]發出數據
        • Master發出[WE_O],表明是一個寫周期
        • Master發出有效數據選擇信號[SEL_O()]表明哪些數據是有效的
        • Master發出[CYC_O]和[TGC_O()]表明總線周期的開始
        • Master發出[STB_O]表明第二次操作的開始

        在時鐘上升沿4:
        • Slave檢測到主設備發起的操作,準備發出[ACK_I]
        • Slave準備鎖存[DAT_O]和[TGD_O()]

        在時鐘上升沿5:
        • Master監視[ACK_I]
        • Master拉低[STB_O]和[CYC_O],結束總線周期



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 察雅县| 昭觉县| 黑龙江省| 大理市| 开封市| 吕梁市| 临沭县| 青浦区| 曲靖市| 苏尼特左旗| 关岭| 巴林右旗| 株洲县| 安西县| 红原县| 丹棱县| 康定县| 惠来县| 绥中县| 宜兰市| 都江堰市| 龙南县| 阳曲县| 綦江县| 页游| 古田县| 天全县| 天津市| 贵溪市| 武定县| 通辽市| 怀远县| 永顺县| 定结县| 玛曲县| 托里县| 陇南市| 乌鲁木齐市| 遵化市| 文化| 仲巴县|