###Date: 2018.3.24

======================================================

1 什么是pingpong?

pingpong是一种数据缓存的手段,通过pingpong操作可以提高数据传输的效率。

2 什么时候需要pingpong?

在两个模块间交换数据时,上一级处理的结果不能马上被下一级所处理完成,这样上一级必须等待下一级处理完成才可以送新的数据,这样就会对性能产生很大的损失。

引入pingpong后我们可以不去等待下一级处理结束,而是将结果保存在pong路的缓存中,pong路的数据准备好的时刻,ping路的数据也处理完毕(下一级),然后无需等待直接处理pong路数据,上一级也无需等待,转而将结果存储在ping路。这样便提高了处理效率。

3 实现

实现时我们需要,两个指针,ping_rd,pong_wr. 还要保存数据的缓存reg [31:0] buf [1:0];

always @(posedge clk or negedge rst)

if(!rst)

ping_rd <= 0;

else if(rd)

ping_rd <= ~ping_rd;

always @(posedge clk or negedge rst)

if(!rst)

ping_wr <= 0;

else if(wr)

ping_wr <= ~ping_wr;

always @(posedge clk )

if(wr)

buf[ping_wr] <= data_in;

assgin data_out =  buf[ping_rd];

为了满足模块间的握手,可以再增加两个标识位,表示相应的buffer是否有效。

reg[1:0] buf_valid;

always @(posedge clk or negedge rst)

if(!rst)

buf_valid[0]<= 1'b0;

else if(rd & ~ping_rd)

buf_valid[0]<= 1'b0;

else if(wr & ~ping_wr)

buf_valid[0]<= 1'b1;

always @(posedge clk or negedge rst)

if(!rst)

buf_valid[1]<= 1'b0;

else if(rd & ping_rd)

buf_valid[1]<= 1'b0;

else if(wr & ping_wr)

buf_valid[1]<= 1'b1;

wire data_rdy = buf_valid[1] | buf_valid[0];

wire m_full    = buf_valid[1] & buf_valid[0];

下图给出了pingpang的基本原理框图,从图上可以看出使用pingpang的主要作用 就是使用多个低速的数据预处理模块处理高速的输入数据流。这样做可以提高系统的数据吞吐量(如果不使用乒乓的话数据预处理模块会成为设计中限制系统数据吞 吐量的瓶颈),同时增加了数据缓冲延迟。

另一个解释:

所谓ping-pong buffer,也就是定义两个buffer,当有数据进来的时候,负责写入buffer的进程就寻找第一个没有被占用而且可写的buffer,进行写入,写好之后,将占用flag释放,同时设置一个flag提示此buffer已经可读,然后再接下去找另外一个可写的buffer,写入新的数据。

而读入的进程也是一直对buffer状态进行检测,一旦发现没有被占用,而且已经可以被读,就把这个buffer的数据取出来,然后标志为可写。

参考:

https://blog.csdn.net/MIThebut/article/details/44995959

https://blog.csdn.net/zhuzhiqi11/article/details/46289629

https://blog.csdn.net/hustbin/article/details/16951689

【Base】ping-pong buffer相关推荐

  1. uniapp的目录结构反思与整理 app.vue【base】pages.json【配置】main.json【框架入口文件】

    App.vue 作用是   全局样式+全局的生命周期  相当于PHP里面的BaseControlller文件   [Base] pages.json作用是   配置路由+导航条+选项卡+tabbar  ...

  2. ping pong buffer

    Ping pong buffer is a buffer used in a transmission that contains two separate buffers, while one bu ...

  3. Ping Pong Buffer 双缓冲 C++代码学习

    1.Ping Pong Buffer 原理分析 基本原理如上图所示,当设备有数据来时,先放入缓冲区1 然后将缓冲区1的数据放入缓冲区2,这时缓冲区1可接收下次数据.工作区可从缓冲区2拿数据 2.C++ ...

  4. 【C++】Google Protocol Buffer(protobuf)详解(二)

    代码走读:caffe中protobuf的详细使用过程 [一]proto文件,以caffe.proto中BlobShape为例 syntax = "proto2"; //指明prot ...

  5. 【Ubuntu】ping: unknown host www.baidu.com

    1.问题描述 每次重新设置网络后,ping百度总是报错: $ ping www.baidu.com ping: unknown host www.baidu.com 2.原因分析 原因是:查看/etc ...

  6. 【C++】Google Protocol Buffer(protobuf)详解(一)

    1.简介 Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准, Protocol Buffers 是一种轻便高效的结构化数据存储格式 ...

  7. 【NIO】缓存区buffer

    io中包含了很多东西,我个人认为最核心的是selector,那里我会使用大量的篇幅去介绍.但在那之前,我们还是从最简单的东西入手.今天只讲一下buffer. 在没有使用nio之前,我们只能自己维护一个 ...

  8. 【 FPGA 】认识关键BUFFER

    目录 BUFG IBUF IBUFDS BUFGMUX BUFH BUFIO BUFR BUFMRCE 内容参考自: Vivado Design Suite 7 Series FPGA and Zyn ...

  9. 【Netty】NIO 缓冲区 ( Buffer ) 分散 Scattering 与 聚合 Gathering 操作

    文章目录 I . 缓冲区 ( Buffer ) 分散 Scattering 与 聚合 Gathering 概念 II . 缓冲区 ( Buffer ) 分散 Scattering 与 聚合 Gathe ...

最新文章

  1. uva-10954-贪心
  2. 与班尼特·胡迪一起找简单规律(HZOJ-2262)
  3. 解决在使用 Qt 编译项目时出现 “C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode格式以防止数据丢失“ 的警告
  4. scala通过mkString方法把一个集合转化为一个字符串
  5. yii直接执行sql
  6. Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之文件上传
  7. 软件开发人员电脑配置
  8. 联想E43升级bios激活windows 7
  9. 获取随机数的n种方法,你知道几种
  10. esp分区引导修复失败_gpt分区怎么修复引导?uefi+gpt分区修复esp引导教程
  11. 海思59V200PQtool环境的搭建
  12. 干货 | 关于等效电路图画法,不得不学的几个小窍门!
  13. 6 统计正数和负数的个数然后计算这些数的平均值
  14. 向量召回在躺平APP的实践
  15. 欧美插画系列-张聪-专题视频课程
  16. 出来混迟早是要还的:算法技术债
  17. 2014小学计算机教师招聘笔试,2014江西教师招聘考试《小学信息技术》真题及答案解析.doc...
  18. 「GitLab CI/CD」- You are not allowed to download code from this project @20210402
  19. Dr.COM宽带认证客户端共享上网破解V3.46
  20. 使用python的上海大学抢课方案

热门文章

  1. 同一张表查询一个字段为空则取另一个字段
  2. 使用frp内网穿透,用windows远程桌面连接
  3. 计算机一级考试操作题未来教育,2019年计算机一级考试MS Office操作试题002
  4. matlab耀输,基于 Matlab的BP神经网络在太阳耀斑级别预测中的应用
  5. 「禾连健康」轻松实现弹性降本20%以上,竟然是因为使用了它
  6. WPF 制作高性能的透明背景异形窗口(使用 WindowChrome 而不要使用 AllowsTransparency=True)
  7. openwrt 开启p2p下载后不定时断流处理办法
  8. 图像采集数据集整理和扩充方案(含代码)
  9. #文本编辑器#卸载Notepad++?除了Notepad++,还有啥能代替的吗?有,必须有!!!
  10. 中小企业管理信息化的一些事(一)