Wishbone总线周期之块读操作
0赞连载目录篇:http://blog.chinaaet.com/justlxy/p/5100051808
块读/写操作每次读/写数据多次。块读/写操作实际上是由顺序进行的多个单次读/写操作(called phase)组合而成的。这一功能在多主机互联的情况下非常有用。例如,如果从机是一个共享的双端存储器,则仲裁器可以判断主机操作是否结束,因此另一个主机可以获得访问该存储器的机会。
如图14所示,在块操作周期持续期间,CYC_O信号需要一直保持置位状态。该信号可用于通过本地仲裁器请求访问共享存储器的权限。如图所示,直至周期结束,LOCK_O信号都需要保持置位状态。在块传输的每一个传输段(phase)中,STB_O和ACK_I依旧符合标准的握手协议。
图14 块操作中CYC_O信号的使用方法
规则3.80:所有支持块读写的主机、从机接口都必须满足下文所述的时序要求。
允许3.55:主机和从机可以被设计为不支持块读写操作。
标准块读操作
标准快读操作如图15所示,块传输可以在每一个时钟周期进行数据传输。但是,图15只是一个简单的例子,并没有完整地显示主机或从机插入的等待状态。图中一共显示了5个节拍(phases)。在第二个节拍后,主机插入了一个等待状态,在第四个节拍后,从机插入了一个等待状态。周期在第五个节拍后结束。
图15 标准块读周期
总线协议的执行流程如下:
时钟上升沿0:
·主机将有效地址置于ADR_O()和TGA_O();
·主机将WE_O复位,以表明进入读周期;
·主机输出SEL_O()(bank select)表明其操作的数据地址;
·主机将CYC_O和TGC_O()置位,以表明周期的开始;
·主机将STB_O置位,以表明第一个段(phase)的开始;
注意:主机可以在时钟上升沿1之前的任意时间,将CYC_O和TGC_O()置位。
时钟上升沿1:
·从机解码输入,并作出从机响应(ACK_I);
·从机将有效数据置于DAT_I()和TGD_I();
·主机监控ACK_I信号,并准备将DAT_I()和TGD_I()信号锁存。
时钟上升沿2:
·主机将DAT_I()和TGD_I()上的数据锁存;
·主机将STB_O复位,以插入一个等待状态(-WSW-)。
时钟上升沿3:
·主机将有效地址置于ADR_O()和TGA_O();
·主机将WE_O复位,以表明进入读周期;
·主机输出SEL_O()(bank select)表明其操作的数据地址。
·主机将STB_O置位;
时钟上升沿4:
·从机解码输入,并做出从机响应(ACK_I);
·从机将有效数据置于DAT_I()和TGD_I()。
时钟上升沿5:
·主机将DAT_I()和TGD_I()上的数据锁存;
·主机将STB_O和CYC_O复位,以结束本次块读周期。
流水线块读操作
在流水线模式下,总线可以达到一个较高的数据传输量。流水线模式的一个典型应用就是SDRAM作为Wishbone总线的从机。在下面的例子中,从机将STALL_O置位,以表明队列临时溢出,总线周期应当被挂起(resent,我也不知道该怎么翻译了。。。)。
图16 流水线块读周期
如图16所示,总线协议的执行流程如下:
时钟上升沿0:
·主机将有效地址置于ADR_O()和TGA_O();
·主机将WE_O复位,以表明进入读周期;
·主机输出SEL_O()(bank select)表明其操作的数据地址;
·主机将CYC_O和TGC_O()置位,以表明周期的开始;
·主机将STB_O置位,以表明第一个段(phase)的开始;
·主机监控ACK_I信号,并准备锁存DAT_I()和TGD_I()。
时钟上升沿1:
·从机解码输入,并做出从机响应(ACK_I);
·从机将有效数据置于DAT_I()和TGD_I();
·主机将有效地址置于ADR_O()和TGA_O()上;
·主机将WE_O复位以表明进入读周期;
·主机输出SEL_O()(bank select)表明其操作的数据地址;
·主机将STB_O置位,以表明第二个数据段(phase)的开始。
时钟上升沿2:
时钟上升沿3:
·主机将DAT_I()和TGD_I()上的数据锁存;
·主机将STB_O复位;
时钟上升沿4:
·主机将DAT_I()和TGD_I()上的数据锁存;
·主机将CYC_O复位,当接收到第二个ACK_O时。