圖1Wishbone總線塊操作中CYC_O信號的用法
塊讀操作如圖2所示。塊操作最多能夠在每個時鐘周期進行一次數(shù)據(jù)讀或者寫,但是主設(shè)備和從設(shè)備都可以通過插入等待周期控制塊操作的速度。一次塊操作包括多次子操作。每一次子操作都是塊操作的一個階段,完成一次數(shù)據(jù)讀或者寫。圖10的塊操作由五次讀操作完成,其過程如下:
在時鐘上升沿0,主設(shè)備將地址信號ADR_O()、TGA_O()放到總線上,將WE_O置為低表示讀操作,將適當(dāng)?shù)腟EL_O()信號置高通知從設(shè)備將數(shù)據(jù)放在數(shù)據(jù)總線的適當(dāng)位置,將CYC_O和TGC_O()置高表示操作正在進行,將STB_O置高表示一次子操作開始。CYC_O和TGC_O()從無效變?yōu)橛行Э梢园l(fā)生在上升沿0以前的任何時刻。
在時鐘上升沿1到達之前,從設(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è)備將新地址信號ADR_O()、新TGA_O()放到總線上,將新的SEL_O()信號置高通知從設(shè)備將數(shù)據(jù)放在數(shù)據(jù)總線的適當(dāng)位置。
在時鐘上升沿2到達之前,從設(shè)備檢測到主設(shè)備發(fā)起的第二次操作,將適當(dāng)?shù)臄?shù)據(jù)放到主設(shè)備的DAT_I()和TGD_I(),繼續(xù)將主設(shè)備的ACK_I置高。
在時鐘上升沿2,主設(shè)備發(fā)現(xiàn)ACK_I信號為高,將DAT_I()和TGD_I()采樣,完成第二次子操作。主設(shè)備將STB_O信號置低表示插入等待周期。
在時鐘上升沿3到達之前,從設(shè)備檢測到STB_O信號為低,將ACK_I置低。
在時鐘上升沿3,主設(shè)備發(fā)起第三次操作,將新的地址信號ADR_O()、新的TGA_O()放到總線上,將WE_O置為低表示讀操作,將適當(dāng)?shù)腟EL_O()信號置高通知從設(shè)備將數(shù)據(jù)放在數(shù)據(jù)總線的適當(dāng)位置,將STB_O置高表示第三次子操作開始。
在時鐘上升沿4到達之前,從設(shè)備檢測到主設(shè)備發(fā)起的第三次子操作,將適當(dāng)?shù)臄?shù)據(jù)放到主設(shè)備的DAT_I()和TGD_I(),將主設(shè)備的ACK_I置高作為對主設(shè)備STB_O的響應(yīng)。
![](http://editerupload.eepw.com.cn/fetch/20161101/330212_1_1.jpg)
圖2Wishbone總線的塊讀操作(異步周期結(jié)束方式)
在時鐘上升沿4,主設(shè)備發(fā)現(xiàn)ACK_I信號為高,將DAT_I()和TGD_I()采樣,完成第三次子操作。主設(shè)備同時發(fā)起第四次子操作,將新地址信號ADR_O()、新TGA_O()放到總線上,將新的SEL_O()信號置高通知從設(shè)備將數(shù)據(jù)放在數(shù)據(jù)總線的適當(dāng)位置。
在時鐘上升沿5到達之前,從設(shè)備檢測到主設(shè)備發(fā)起的第四次子操作,將適當(dāng)?shù)臄?shù)據(jù)放到主設(shè)備的DAT_I()和TGD_I(),將主設(shè)備的ACK_I置高作為對主設(shè)備STB_O的響應(yīng)。
在時鐘上升沿5,主設(shè)備發(fā)現(xiàn)ACK_I信號為高,將DAT_I()和TGD_I()采樣,完成第五次子操作。主設(shè)備同時發(fā)起第六次子操作,將新地址信號ADR_O()、新TGA_O()放到總線上,將新的SEL_O()信號置高通知從設(shè)備將數(shù)據(jù)放在數(shù)據(jù)總線的適當(dāng)位置。
在時鐘上升沿5過后,從設(shè)備檢測到主設(shè)備發(fā)起的第五次子操作,但是由于數(shù)據(jù)沒有準(zhǔn)備好,它在新上升沿到達之前將ACK_I信號置低表示插入等待周期。
上升沿5和6之間被插入了多個等待周期。當(dāng)從設(shè)備準(zhǔn)備好數(shù)據(jù),在時鐘上升沿6到達之前,將適當(dāng)?shù)臄?shù)據(jù)放到主設(shè)備的DAT_I()和TGD_I(),將主設(shè)備的ACK_I置高作為對主設(shè)備STB_O的響應(yīng)。
在時鐘上升沿6,主設(shè)備發(fā)現(xiàn)ACK_I信號為高,將DAT_I()和TGD_I()采樣,并將STB_O和CYC_O置為低表示整個塊讀操作完成。從設(shè)備發(fā)現(xiàn)STB_O置低后,也將主設(shè)備的ACK_I置低。
同步周期結(jié)束方式
圖3Wishbone總線的塊讀操作(同步周期結(jié)束方式)
在時鐘上升沿0:
- Master在[ADR_O()]和[TGA_O()]發(fā)出有效的地址
- Master拉低[WE_O],表明是一個讀周期
- Master發(fā)出有效數(shù)據(jù)選擇信號[SEL_O()]表明哪些數(shù)據(jù)是有效的
- Master發(fā)出[CYC_O]和[TGC_O()]表明總線周期的開始
- Master發(fā)出[STB_O]表明操作的開始
注意:Mater必須在時鐘上升沿1或之前發(fā)出[CYC_O]和/或[TGC_O()]
在時鐘上升沿1:
- Slave檢測到主設(shè)備發(fā)起的操作,發(fā)出[ACK_I]
- Slave在[DAT_O]和[TGD_O()]發(fā)出有效的數(shù)據(jù)
- Slave發(fā)出[ACK_I]應(yīng)答[STB_O],表明數(shù)據(jù)有效,可以讀取數(shù)據(jù)了
- Master發(fā)現(xiàn)[ACK_I],準(zhǔn)備鎖存[DAT_I]和[TGD_I()]
在時鐘上升沿2:
- Master鎖存[DAT_I]和[TGD_I()]
- Master拉低[STB_O]插入等待周期(-WSS-)
在時鐘上升沿3:
- Master在[ADR_O()]和[TGA_O()]發(fā)出有效的地址
- Master拉低[WE_O],表明是一個讀周期
- Master發(fā)出有效數(shù)據(jù)選擇信號[SEL_O()]表明哪些數(shù)據(jù)是有效的
- Master發(fā)出[STB_O]表明操作的開始
在時鐘上升沿4:
- Slave檢測到主設(shè)備發(fā)起的操作,發(fā)出[ACK_I]
- Slave在[DAT_O]和[TGD_O()]發(fā)出有效的數(shù)據(jù)
在時鐘上升沿5:
- Master鎖存[DAT_I]和[TGD_I()]
- Master拉低[STB_O]和[CYC_O],結(jié)束總線周期
評論