Rocket - util - Repeater

https://mp.weixin.qq.com/s/xyEq3DgYuf2QuNjssv8pkA

 
简单介绍Repeater的实现。
 
​​
 
1. 基本功能
 
A Repeater passes it's input to it's output, unless repeat is asserted.
When repeat is asserted, the Repeater copies the input and repeats it next cycle.
 
2. 实现
 
1) io
 
​​
a. repeat:标识是否在输出重复输入;
b. full:标识是否存有待repeat的数据;
c. enq:输入数据的接口;
d. deq:输出数据的接口;
 
2) saved
 
存放要repeat的数据:
​​
 
只有在io.repeat为真时,才存入数据:
​​
 
io.enq.fire()需要对方valid,自己ready:
​​
这个稍后再做讨论。
 
3) full
 
full标志着是否存有要重复的数据,初始值为false:
​​
 
只有当io.repeat为真时,才能存入要重复的数据,并标记full为真:
​​
 
只有当io.repeat为假时,不再重复数据,已存的数据被清空:
​​
 
如果有数据则输出已存储的数据,如果没有则直接输出输入的数据:
​​
 
4) io.deq.valid
 
​​
a. 如果有数据(full),则可以输出已存的数据;
b. 如果无数据,则根据是否有数据输入来决定是否可以输出数据;
 
5) io.enq.ready
 
io.enq.ready代表可以输入数据。
​​
包含两个条件:
a. 当前没有缓存数据;
b. 当前可以输出数据;
 
没有缓存数据,说明io.repeat为假,此时透传数据,所以需要依赖于io.deq.ready;
已有缓存数据,说明io.repeat为真,此时重复数据,所以不可以再输入;
 
6) io.full
 
io.full把full的状态输出:
​​
 
3. 附录
 
略。
 
posted @ 2019-06-08 23:52  wjcdx  阅读(211)  评论(0)    收藏  举报