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