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

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

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

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

在时钟上升沿0,主设备将地址信号ADR_O()TGA_O()放到总线上,将WE_O置为低表示读操作,将适当的SEL_O()信号置高通知从设备将数据放在数据总线的适当位置,将CYC_OTGC_O()置高表示操作正在进行,将STB_O置高表示第一次子操作开始。CYC_OTGC_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_OCYC_O置低表示整个RMW操作完成。

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


图 Wishbone总线的RMW操作



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值