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

转载于:https://www.cnblogs.com/mhq-martin/p/11537690.html

ping-pong buffer相关推荐

  1. ping pong buffer

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

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

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

  3. POJ 3928 amp; HDU 2492 Ping pong(树阵评价倒数)

    主题链接: PKU:http://poj.org/problem?id=3928 HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2492 Descript ...

  4. Ping pong【树状数组】

    Ping pong UVALive - 4329 题目传送门 题目大意:一条大街上住着n个乒乓球爱好者,经常组织比赛切磋技术.每个人都有一个不同的技能值ai.每场比赛需要三个人:两名选手,一名裁判.他 ...

  5. ping/pong模式_PING的完整形式是什么?

    ping/pong模式 PING:数据包InterNet Groper (PING: Packet InterNet Groper) In the sector of networking of co ...

  6. Unity3D 4.x怎样实现动画的Ping Pong效果

    近期在看Unity官方的Stealth项目教学视频.视频使用的是Unity旧的版本号,而我如今正在使用的是Unity 4.5,动画系统的操作全然不同了.依照视频的方式根本无法设置动画的Ping Pin ...

  7. [UVALive - 4329] Ping pong 树状数组入门

    题目链接:Ping pong 题意 给你n个数,你从中取3个数,要求中间的数字大小在两边数字之间.问你总共有多少种取法. 题解 这个题首先需要分析转化. 假设第i个人作为中间数 a1-ai−1有ci个 ...

  8. HDOJ 2492 Ping pong 线段树+离散化

    //2492 Ping pong 线段树+离散化 /* 题意: 有一陀人从左到右排成一排,每个人有一个唯一的技能值,每个人都找其他人比赛, 比赛前要再找一个人做裁判,裁判的技能值不能比这两个人都高,也 ...

  9. go-gorilla的ping pong

    业务需求,ping每隔60秒执行一次,ping两次后,没有得到pong的消息,自动切断client. pongTime=180 * time.Second pingTime=60 * time.Sec ...

  10. 心跳PING PONG用法

    写PHP代码十多年了,没有接触过这个概念.只是知道MySQL有PING. 后来用其他语言才偶然接触到心跳的规则,请求参数发送PING,返回内容为PONG表示这个服务可用,算是一个不成文的规范.

最新文章

  1. 盛会再临,2018中国大数据技术大会(BDTC)首曝日程及议题
  2. 如何在CentOS6.2上安装并运行飞鸽传书
  3. VScode 乱装插件环境破坏踩坑自我反思总结
  4. FC8下安装mplayer
  5. 深入理解分布式技术 - 服务注册与发现背后的逻辑
  6. 使用SOCKET实现TCP/IP协议的通讯
  7. .NET 应用程序支持直接调用 WebAssembly 模块
  8. Android之自定义控件深入
  9. 实现Ajax异步交互
  10. 详述一则数据库死锁故障的分析过程
  11. Ubuntu 源码方式安装Subversion
  12. Java中的两种异常类型及其区别?
  13. idea使用过程中的坑
  14. RHCE 学习笔记(5)- 本地用户和组的管理
  15. 研究理解lanproxy实现内网穿透
  16. win7开机突然变得很慢_几个步骤教你解决win7旗舰版开机超级慢
  17. 英语四六级网站服务器繁忙,英语四六级成绩公布这些问题很常见
  18. php模拟IP请求,如何在php中利用curl对ip进行模拟
  19. java创建pdf空白页_使用itext将html转成PDF,PDF空白的问题。
  20. win7计算机窗口示意图,win7电脑硬盘怎么分区 win7电脑硬盘分区操作方法介绍

热门文章

  1. linux ui 布局管理器,第1组UI组件:布局管理器
  2. 你努力的样子很“可耻”
  3. c语言对称矩形的判定,江苏省扬州市仪征市2017年中考数学一模试卷(含解析).doc...
  4. html5在线聊天一对一,纯js网页在线聊天对话插件(原创)
  5. less面试_面试必看:less与sass的区别
  6. 由iconfont引起的svg、ttf、woff、woff2图标的研究及转换(svgs2fonts)
  7. 多电量变送器在消防巡检设备中的应用
  8. psm倾向得分匹配法举例_【计量地图】倾向得分匹配法(PSM)理论、操作与案例...
  9. 数据分析的意义与必备技能
  10. 失控的热潮:为什么说特斯拉的“电池日”名副其实?