微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 片上总线Wishbone 学习(十二)总线周期之RMW操作

片上总线Wishbone 学习(十二)总线周期之RMW操作

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

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

在时钟上升沿0,主设备将地址信号ADR_O()、TGA_O()放到总线上,将WE_O置为低表示读操作,将适当的SEL_O()信号置高通知从设备将数据放在数据总线的适当位置,将CYC_O和TGC_O()置高表示操作正在进行,将STB_O置高表示第一次子操作开始。CYC_O和TGC_O()可以发生在上升沿0以前的任何时刻。

在时钟上升沿1到达之前,从设备检测到主设备发起的操作,将适当的数据放到主设备的DAT_I()和TGD_I(),将主设备的ACK_I置高作为对主设备STB_O的响应。

在时钟上升沿1,主设备发现ACK_I信号为高,将DAT_I()和TGD_I()采样,完成第一次子操作。主设备将STB_O置低表示插入等待。

在时钟上升沿1之后新的上升沿到达之前,从设备检测到主设备将STB_O置低,于是将ACK_I置低。

经过若干等待周期,在上升沿2,主设备将地址信号ADR_O()、TGA_O()放到总线上,将数据信号DAT_O()、TGD_O()放到总线上,将WE_O置为高表示写操作,将适当的SEL_O()信号置高通知从设备将数据总线上哪些信号是有效的,将STB_O置高表示第二次子操作开始。

在时钟上升沿3到达之前,从设备检测到主设备发起的操作,将主设备的ACK_I置高作为对主设备STB_O的响应。

在时钟上升沿3,从设备将DAT_I()和TGD_I()采样;主设备发现ACK_I信号为高,得知第二次子操作完成,于是将STB_O和CYC_O置低表示整个RMW操作完成。

在时钟上升沿之后,从设备发现STB_O为低,于是将ACK_I置低。

Wishbone总线的RMW操作

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top