1042
这个流水线,是真正的pipeline。
但是含义跟同步电路里的流水线还是有所不同。
这边的流水线pipeline,指的是主从之间的传输。
主从之间进行存储器映射的时候是发送有地址的。
每一个地址,每一次传输的读写命令是连续进行的。
第一拍读一个地址,第二拍读另外一个地址。
实际上这种传输呢,在我们以前写静态存储器的时候,大多都是这样,我们可以随机地访问嘛。
第一拍读一个地址,第二拍读另外一个地址。
在接口上,流水线的传输是非常的典型。
1043
流水线的传输指的是什么呢?
就是指的,在传输的过程之中,数据、地址是连续进行传输的,连续传输仍然用到pipeline这个词。
这个时候就会有一个特殊的状态了,就是称之为Wait-State和流水线潜伏期Pipline latency。
这个PPT理解起来可能有点问题。
我们还是讲一个故事。
刚才我们讲了两个故事,一个是储蓄所业务,是典型的存储器传输的握手waitrequest。
第二个呢,是固定周期的,我们用工商所的业务。
而对于流水线传输,我们讲一个车管所的业务。
1044
当我们到车管所考驾照的时候,当你报名登记了以后,车管所有你的档案,它知道你要来学车拿本。
但是它不同于储蓄所。
它不可能你排队,立刻就给你发的。
这是第一点。
它不同于储蓄所。
第二,它也不同于工商所。
当你登记了以后,它绝对不会象工商所那样,一周以后过来给你发本。
1045
它不同于工商所,它不是一个固定周期。
而是登记了以后,它知道你要办什么业务,但是它要有一个可变潜伏期。
它要有一个非常长的阶段。
这个可变潜伏期,你要考科目一、科目二、科目三、科目四。
每一个科目都要过。
有些科目过得快,有些科目可能有些障碍,反反复复地去考。
有的时候两三个月,半年,甚至更长时间都有。
这就变成了一个可变潜伏期。
说不好,是不是?
1046
你是主机,你是发布命令的主导者。
给你发本的车管所,这个时候它是从机。
它不能给你确定下来,什么时候给你返回信息。
这个阶段称之为可变潜伏期。
流水线潜伏期Pipline latency就是,当你申请了学车以后,什么时候拿本了,那个潜伏期。
而不同之处,仍然有一个等待周期Wait-State。
这个等待周期,跟储蓄所一模一样。
比如说你到车管所去报名,前面有很多人排队。
这个时候是一样的。
所以说你到车管所去学车的时候,有两种业务,第一种业务就是waitrequest,就是储蓄所的业务。
你仍然要排队要取号。
1047
取号登记以后,车管所才知道你要办理什么业务,才知道你是要学C本,还是要学A本。
没有叫到你之前,车管所还是不知道你要干什么。
所以说等待状态仍然有。
过了等待状态,车管所知道你要干什么了,但是绝对不会立即给你发本,也不会告诉你固定的周期,而是要过科目一、科目二、科目三、科目四。
所以说这个是等待状态和流水线潜伏期的区别。
Altera的Avalon的流水线,它只支持流水线的读,并不支持流水线的写,等会我们再来解释。
1048
流水线的读,每一拍读一个数,可以是走它的流水线。
既然是读嘛,主机和从机之间,就只有从机返回给主机的数据,而没有主机给从机的写数据,并不支持流水线的写。
主机会发给从机的控制信号,仍然是读控制信号,主机说了算。
说读就读,说不读就不读。
主机仍然是主控的。
说走就走说停就停。
并且呢,在读的时候要给出地址,是存储器映射嘛。
而从机呢,这个时候会反制主机的控制信号,有两个,一个是waitrequest,是储蓄所业务。
就是说,叫号没叫到你的时候,它忙了,你得等着。
1049
你到车管所去学车的时候,排队,你得先登记啊。
登记的时候前面有很多人。
你拿到号你得等着。
这个时候车管所不知道你要干什么,它不知道你要做什么样的请求。
你得等着。
Readdatavalid,这个信号就是流水线潜伏期了。
这个信号是什么意思呢?
这个信号是车管所已经知道你要干什么了。
就是waitrequest已经过了,已经登记了。
什么时候发本呢?
取决于你过的科目了。
直到科目四全部通过了,给你叫号给你发本。
Readdata。
所以说这个时候,从机反制主机的有两个信号,就是waitrequest和readdatavalid。
而主机仍然是用它的主导信号,读信号来控制从机。
主从之间都有发出叫停的权利,有响应叫停的义务。
我们先把这张时序图分析完。
1050
在时刻1,主机发出了第一个地址。
第一个地址对应的是第一个数据。
Addr1对应的是data1。
是读。
主机发出了Addr1,发出了读命令。
在第一拍上,从机发的是waitrequest,右侧逼近是一个低电平。
说明从机不忙,刚好车管所排队登记,这个时候没有人。
这样到第二拍,主机捕获到waitrequest为低电平。
1051
主机就知道,它第一拍发出的读请求,从机已经应答了,车管所已经接受了你的请求。
于是主机可以做什么事情呢?
主机可以将它的读命令撤销掉,或者接着发新的读命令。
在这个时序图上,第二拍,由于捕获到waitrequest为低电平,接着主机发第二个读请求,第二个地址,同时从机在第二拍上发出了readdatavalid。
Readdatavalid就是我们说的拿本的那个信号。
当然这个太快了,跟故事有些差异。
在第二拍上,readdatavalid从机发出了数据的应答信号,因为它不忙,立即就把数据就给了。
