「博文连载」Wishbone总线周期之RMW操作

「博文连载」Wishbone总线周期之RMW操作

在操作系统中,有一种重要的进程间的同步机制称作信号量机制。信号量即当前可用资源的计数。信号量是一个用来实现同步的整型或记录型(Record)变量,除了初始化外,对它只能执行等待和释放这两种原子操作。一次对信号量的等待操作是获得信号量的过程,读取当前信号量的值,如果发现有可利用资源,则将信号量减1,否则进入等待状态。一次对信号量的释放过程即将信号量加1。一个进程对信号的读取、计算新的信号量值、更新信号量的值,这三个步骤是不允许被其他进程打破的,如果被打破,则信号量的值将会发生错误,RMW操作的最大用途在于信号量操作。 当然,用户也可以将总线精简为不支持RWM操作。

一次RMW操作对于总线来说,本质上是两次子操作,一次读,一次写,只不过这两次子操作必须由同一个主设备的完成,且读数据和写数据的地址相同。"改"是不发生在总线上的,它发生在主设备内部。一个RMW操作的例子如图19所示,其过程如下:

时钟上升沿0:

·主机将有效地址置于ADR_O和TGA_O;

·主机将WE_O复位,以表明进入读周期;

·主机输出SEL_O(bank select)表明其操作的数据地址;

·主机将CYC_O和TGC_O置位,以表明周期的开始;

·主机将STB_O置位。

注意:主机可以在时钟上升沿1到来之前的任意时间将CYC_O和TGC_O置位,而TAGN_O信号是可选的。

时钟上升沿1(SETUP):

·从机解码输入,并对ACK_I的置位做出响应;

·从机将有效数据置于DAT_I和TGD_I上;

·主机监控ACK_I信号,并准备锁存DAT_I和TGD_I上的信号;

时钟上升沿1:

·主机锁存DAT_I和TGD_I上的数据;

·主机将STB_O复位,以插入一个等待周期(-WSW-)。

时钟上升沿2(SETUP):

·从机将ACK_I复位以响应STB_O信号;

·主机将WE_O置位,以表明进入写周期。

注意:实际上主机可以在本过程之前插入任意多个周期。

时钟上升沿2:

·主机将写数据置于DAT_O和TGD_O上;

·主机输出SEL_O(bank select)表明其操作的数据地址;

·主机置位STB_O信号。

时钟上升沿3(SETUP):

·从机解码输入,并响应ACK_I的置位;

·从机准备锁存DAT_O和TGD_O上的数据;

·主机监控ACK_I信号,并准备结束数据段(phase)传输。

注意:实际上从机可以在本过程之前插入任意多个周期。

时钟上升沿3:

·从机将DAT_O和TGD_O上的数据锁存;

·主机复位STB_O和CYC_O信号,以表明本周期的结束;

·从机将ACK_I信号复位,以响应STB_O信号的复位。

「博文连载」Wishbone总线周期之RMW操作

图19 RWM周期

「博文连载」Wishbone总线周期之RMW操作「博文连载」Wishbone总线周期之RMW操作


分享到:


相關文章: