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. 附录
略。