听说这是个面试环节中的热门话题,很多应届生或对数字电路设计了解不多的工程师却并不容易在百度上找到一个合理的答案。今天把自己对它的理解整理出来,希望对大家找工作起到帮助。如果觉得总结得不错,有兴趣了解更多的数字电路设计和验证相关的经验分享,可以去关注我们的微信公众号:IC 三人行。

    为了更好的理解 PingPong buffer,我们先需要了解下几种数字电路中常用的 SRAM 类型。

    • Synchronous Single port SRAM (S1P)

    Synchronous 是什么意思呢?

    这是指所有 SRAM 接口上的信号(例如 address, wdata, rdata)都是在 clock edge 上变化的。

    Single port 又是什么意思呢?

    这是指只有一个 address 输入口,因此读和写不能同时发生。

    • Synchronous Two port SRAM (S2P)

    S2P 有两个 address 输入口,一个用作 write, 一个用作 read. 因此往 S2P 中写数据的同时,可以把其中的数据读出来。但要小心,读写地址如果相同,不同厂商不同型号的 SRAM 的行为可能会不一样。

    同样容量的 S2P 面积一般比 S1P 大,不同工艺制程和厂商提供的同样容量的 SRAM area 会有差别,所以面积到底会大多少要 case by case。

    • Synchronous Dual-Port SRAM (SDP)

    SDP 和 S2P 类似,也有两个 address 输入口,但是它的长处在于每个口既可以做 read 又可以做 write 操作。当然代价就是同样容量的 SDP 的面积比 S2P 更大。

    • PingPong buffer

    S1P 只有 1 个 address port, r/w 不能同时进行。所以很多时候设计者会用 2 个 S1P 来构成一个 PingPong buffer 来提高效率。如何提高效率的呢?下面以 USB2.0 主控 IP EHCI 读取 U 盘为例:

    EHCI 将 从 U 盘中读回的 512 byte 的 data 写入 S1P_A 的同时,可以将之前已经写入 S1P_B 的 512 byte data 读出来送给系统 DRAM.

    如果只有 1 个 1024 byte 容量大的 S1P,则 EHCI 只能等 1024 byte data 全部写入 S1P 后才能开始将其读出来送给系统 DRAM,在读 S1P 的这段时间里,EHCI 不能启动下一次读 U 盘的传输,导致 EHCI 和 USB 之间的 bus 上处于 IDLE 状态,也就是浪费了频宽。结果同样一个视频文件,别人家设计的芯片只要 10 秒钟就可以读完,我家的却需要 20 秒钟。客户自然就不会买单了。

    从下图可以清楚地看到,采用 pingpong 操作可以节约相当多的时间:

    聊聊数字电路中的PingPong buffer - 图1

    用 pingpong buffer 的机制,N 个 pkt 所需时间是 2N+1 T. 而用 solution 2 中的一个 S1P,N 个 pkt 所需时间是 4N T. 也就是说后者比前者慢了近 1 倍。

    相信大家看到这里,对这个 topic 已经能够充分理解。

    留个问题思考下:有其他的方式可以实现和 PingPong buffer 类似的效率吗?

    感谢大家的关注。
    https://zhuanlan.zhihu.com/p/28585684