【博文连载】Wishbone总线周期之单次读操作
单次读/写操作每次操作只完成一次读或者写,是最基本的Wishbone总线操作方式。
规则3.75:所有支持单次读或者单次写周期的,主机和从机接口都应满足下文给出的相关时序要求。
允许3.50:Wishbone主设备或者从设备也可以不支持单次读/写操作,甚至没有地址和数据总线。
标准单次读周期
图10 标准单次读周期
图10显示的是标准单次读周期的时序图。
总线协议的执行流程如下:
时钟上升沿0:
·主机将有效地址输出到ADR_O()和TGA_O();
·主机将WE_O复位,表示进入读周期;
·主机输出SEL_O()(bank select)表明其操作的数据地址;
·主机将CYC_O和TCG_O置位,以表明读周期开始;
·主机将STB_O信号置位,以表明操作开始(start of phase)。
时钟上升沿1:
·从机解码输入(检测STB_O,以验证数据是否有效),并将ACK_I置位,以做出响应;
·从机将有效数据放入DAT_O()和TGD_I();(如之前博文所述,默认信号名为主机信号名!);
·主机监控ACK_I信号,并准备将DAT_O()和TGD_I()信号上的数据进行锁存;
注意:从机可能会在置位ACK_I信号之前插入多个(数量任意)等待状态(-WSS-),因此允许其限制周期速度。
时钟上升沿2:
·主机锁存DAT_O()和TCG_O()上的数据;
·主机将STB_O和CYC_O复位,以表明周期的结束;
·从机将ACK_I信号复位,以响应STB_O信号的复位。
流水线单次读周期
图11显示的是流水线单次读周期的时序图。
总线协议的执行流程如下:
时钟上升沿0:
·主机将有效地址输出到ADR_O()和TGA_O();
·主机将WE_O复位,表示进入读周期;
·主机输出SEL_O()(bank select)表明其操作的数据地址;
·主机将CYC_O和TCG_O置位,以表明读周期开始;
·主机将STB_O信号置位,以表明操作开始(start of phase)。
时钟上升沿1:
·从机解码输入(检测STB_O,以验证数据是否有效),并将ACK_I置位,以做出相应;
·从机将有效数据放入DAT_O()和TGD_I();
·主机将STB_O信号复位,以表明数据传输的结束(end of data phase);
·主机监控ACK_I信号,并准备将DAT_O()和TGD_I()信号上的数据进行锁存;
时钟上升沿2:
·主机锁存DAT_O()和TCG_O()上的数据;
·主机将CYC_O复位,以表明周期的结束;
·从机将ACK_I信号复位。
图11 标准流水线单次读周期