前言:在芯片设计或者FPGA设计过程中,流水设计是经常用到的,但是考虑数据安全性,需要与前后级模块进行握手通信,这时候就需要对流水数据进行反压处理,本文将具体介绍握手与反压。
目录
握手协议
本文讲述valid-ready握手,下面列出三种握手情况,目的是解释清楚握手的时序。
- valid先发起请求
- ready先发起请求
- 同时发起请求
- 分析
仔细观察上述3幅时序图,我们了解valid-ready握手机制需要注意三件事:
- valid与ready不可过度依赖,比如valid不可以等待ready到达再拉高,ready也不可以等待valid到达再拉高,他俩彼此可以互相独立发出请求拉高;
- valid拉高时与有效数据同步,时钟要对齐;
- 当数据计算好后,valid可以拉高等待ready拉高,但是每当握手成功之后,数据需要更新,如果此时没有新的有效数据,valid要拉低。
握手与反压
当入口流量大于出口流量,这时候就需要反压,或者,当后级未准备好时,如果本级进行数据传递,那么它就需要反压前级,所以此时前级需要将数据保持不动,直到握手成功才能更新数据。而反压在多级流水线中就变得稍显复杂,原因在于,比如我们采用三级流水设计,如果我们收到后级反压信号,我们理所当然想反压本级输出信号的寄存器,但是如果只反压最后一级寄存器,那么会面临一个问题