循环buffer的实现_芯片设计小技巧——乒乓buffer

今天想介绍一下乒乓buffer。乒乓buffer是一种常用的提高数据通路带宽的技术,是一种面积换性能的经典设计。在流水线设计中,灵活应用还可以在保证带宽的基础上解决时序问题。

乒乓buffer的基本流程

乒乓buffer又叫double buffer,由两块同样大小的memory组成,一乒一乓。放在数据通路的中间,在大部分时候都能保证一块memory收上游的数据,一块memory往下游发数据,一读一写并行操作。

如果用抽象的状态机来描述其工作机制,大致如下:

f056b5d7297d1e9601d8863349b8ca16.png

如上图所示,从IDLE状态开始,先随机挑一块buffer写入数据,进入PREPARE态,写完之后进入SYNC态,然后Ping和Pang读写swap调换,进入WORK态。

之后在WORK0->SYNC1->WORK1->SYNC0几个状态之间循环,不断调换Ping-Pang读写,直到某个时刻上游不写,只有下游读,则跳出Ping-Pang循环,进入END态,最后下游读完回到IDLE状态。

乒乓buffer的应用场景:

乒乓buffer主要应用在以下场景进行带宽的提升:

  • 下游必须等到上游数据全部写完或者积累到某个程度才能开始读
  • 上游必须等到下游数据全部读完或者读到某个程度才能开始写

如果数据的读写没有以上的约束,那么没必要使用乒乓buffer,直接用普通的buffer就可以实现缓存以及切割通路握手,提高带宽的目的。乒乓buffer要解决的关键性能点就在于上下游的互相等待这段latency

让下游等待上游写数据的同时可以读数据,上游等待下游读数据的同时可以写数据,实现时间并行,将两个时间overlap起来。

bf375567f5f60ec3f3f1295452964d6c.png

如上图所示,在时间横轴上,假设一笔读写的latency一样,同样时间内,使用乒乓buffer可以完成4笔数据读写,而使用单一个buffer只能完成2笔半。而这里的关键便是由于资源的加倍带来的并行度加倍

如果读写的时延不同,为了保证ping-pang的同步,先完成的一方要等待另一方完成,然后才能交换两个buffer的读写操作。这段时间从状态的角度来看属于SYNC状态,而整个ping-pang的latency取决于慢的那一方

9632aae5a17aa81a627a084a530e1897.png

乒乓buffer的使用代价:

作为一种用加倍储存资源来解决性能问题的方法,当然最大的代价就是面积和功耗的开销。因此在设计中还是要因地制宜地进行选择。

本文作者 | L.L.

点击查看往期内容回顾

【IC/FPGA基础】芯片设计小技巧-共享buffer

【IC/FPGA基础】芯片设计小技巧-抢一拍

【IC/FPGA基础】Makefile脚本(VCS与Verdi实例)

【IC/FPGA基础】多比特信号跨时钟域之握手

【IC/FPGA基础】多比特信号跨时钟域之FIFO

end

32040939a258109564e8f70ef9d1f114.png

8931f1f6a51c7bac6f48ed62d1f64a00.png

觉得不错,请点个在看

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值