Felix

技术源于积累,成功始于执着! 个人邮箱:justlxy@mail.dhu.edu.cn QQ:1576109464

Wishbone总线周期之块读操作

0
阅读(1856)

连载目录篇:http://blog.chinaaet.com/justlxy/p/5100051808


块读/写操作每次读/写数据多次。块读/写操作实际上是由顺序进行的多个单次读/写操作(called phase)组合而成的。这一功能在多主机互联的情况下非常有用。例如,如果从机是一个共享的双端存储器,则仲裁器可以判断主机操作是否结束,因此另一个主机可以获得访问该存储器的机会。

如图14所示,在块操作周期持续期间,CYC_O信号需要一直保持置位状态。该信号可用于通过本地仲裁器请求访问共享存储器的权限。如图所示,直至周期结束,LOCK_O信号都需要保持置位状态。在块传输的每一个传输段(phase)中,STB_O和ACK_I依旧符合标准的握手协议。

image.png

图14 块操作中CYC_O信号的使用方法

规则3.80:所有支持块读写的主机、从机接口都必须满足下文所述的时序要求。

允许3.55:主机和从机可以被设计为不支持块读写操作。

标准块读操作

标准快读操作如图15所示,块传输可以在每一个时钟周期进行数据传输。但是,图15只是一个简单的例子,并没有完整地显示主机或从机插入的等待状态。图中一共显示了5个节拍(phases)。在第二个节拍后,主机插入了一个等待状态,在第四个节拍后,从机插入了一个等待状态。周期在第五个节拍后结束。

image.png

图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,我也不知道该怎么翻译了。。。)。

image.png

图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时。


Baidu
map