握手与背压:吞吐率不等于低延迟
约 14 分钟
ready/valid握手让发送方用valid声明数据有效,接收方用ready声明可接收;同一拍两者都为1才完成传输。协议把数据有效期与模块处理速度解耦,但每方必须遵守稳定性规则。
发送方规则
valid拉高后,在握手发生前必须保持valid与数据稳定,不能因ready低就撤回。否则接收方可能永远等不到,或采到变化数据。
接收方规则
ready可以提前拉高,也可按容量变化。若ready组合依赖下游、valid又组合依赖ready,模块级联可能形成长组合路径甚至环路。
缓冲
寄存切片、skid buffer和FIFO可打断时序路径并吸收短暂背压。缓冲深度由突发长度、最坏停顿和允许丢失决定,不是越大越安全;大缓冲增加延迟和隐藏拥塞。
吞吐与延迟
流水线可每拍接收一项却要多拍输出。平均吞吐高不代表单项低延迟;规格应分别定义首项延迟、稳态吞吐和背压恢复。
死锁
发送方等待ready才拉valid,同时接收方等待valid才拉ready,会永久互等。协议必须规定至少一方可独立前进。
练习:设计一个可背压的三级流水线,画连续传输与中途停顿波形并证明不丢不重。
小纸条
ready/valid 协议中发送方为什么不能等 ready 后才拉 valid?