news 2026/7/1 2:10:25

FPGA教程系列-乒乓操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FPGA教程系列-乒乓操作

FPGA教程系列-乒乓操作

概述

摘抄了两段,品一品。

乒乓操作是一个经常用于数据流控制的处理技术,具有节约缓冲空间、对数据流无缝处理等特点。

乒乓操作(Ping-Pong Buffering)是一种常见的设计模式。它通过双缓冲技术,使得一个缓冲区在进行数据传输或处理时,另一个缓冲区可以同时接受或准备新的数据。这样就可以在多个时钟周期内实现数据的无缝交替,最大化利用FPGA资源和提高数据处理效率。

操作过程

通俗的总结一下就是:乒乓操作(Ping-Pong Buffer)的核心思想就是“为了不让干活的人停下来等,准备两个盘子轮流装菜”。其实与流水线思想类似,也是拿空间去换取时间。

空间换时间:

  • 流水线:用更多的寄存器(空间),换取了更高的吞吐率(时间)。
  • 乒乓:用双倍的存储器(空间),换取了连续不断的读写能力(时间)。

并行处理 (Parallelism):

  • 流水线:是“工序”的并行。第1个数据在做第3步时,第3个数据正在做第1步。
  • 乒乓:是“读写”的并行。你在“写”这块地的时候,我在“读”那块地。

分别有两个缓冲区(两个RAM,buffer A和buffer B),都处于空闲状态,等待数据传输的开始。控制逻辑会指定一个缓冲区(例如buffer A)作为当前的写入缓冲区,另一个缓冲区(buffer B)则作为读取缓冲区。

  • 数据写入:数据从外部设备或数据源传输到当前的写入缓冲区(例如Buffer A)。当buffer A在接收新数据时,系统会按照时序或控制逻辑将数据逐步写入该缓冲区。
  • 数据读取:与此同时,处理器或其他模块从另一个缓冲区(例如Buffer B)读取并处理数据。此时,Buffer B存储的是之前已经接收完毕的数据,供系统进行处理或输出。

外部输入数据流通过输入数据流选择单元将数据流输入到数据缓存模块,比较常用的存储单元有双口RAM,FIFO,SDRAM等。在第一个缓冲周期,数据流通过“输入数据流选择单元”将数据写入“数据缓冲模块1”。写完之后进入第二个缓冲周期,在第二个缓冲周期数据流通过“输入数 据流选择单元”将数据写入到“数据缓冲模块2”的同时“输出数据流选择单元”将“数据缓冲模块1”的数据流读出,此时进入第三个缓冲周期。在第三个缓冲周期数据流通过“输入数据流选择单元”将数据写入到“数据缓存模块1”的同时将“数据缓冲模块2”的数据读出。如此反复循环地操作,即为乒乓操作。

应用场景

对于乒乓操作的应用,定义是:乒乓操作主要适用于block级流水线且对数据完整性有较高要求的场景。

具体的参考:https://mp.weixin.qq.com/s/ntgKDi6y9_cNiiqRx–MpA

如果要处理从高速数据到低速据的传输,FIFO可以在很多情况下发挥作用。然而,当高速数据流向低速数据处理的,并且对数据完整性有严格要求时,FIFO可能不适用。这是因为在这种情况下,你需要确保每一份数据的完整性,而FIFO的有限容量可能会导致数据溢出,从而无法保证数据的完整性。使用乒乓操作相当于使用双FIFO。在带宽较大的情况下,这种方式能够将数据流视作一次性突发数据(burst),从而有效缓解FIFO的压力。

例如,每0.5s写入1次,每1s读出1次,如果使用单FIFO缓存的话,每1s就会积累1次数据的余量,这种情况下无论FIFO设计的多大,都会溢出。但是,使用乒乓操作,相当于FIFO A/B写入,FIFO B/A休息,因此可以视为1s内FIFO A/B突发写入2次,在下一秒FIFO B/A突发写入2次。

实战

程序基于野火的教程,https://doc.embedfire.com/fpga/altera/ep4ce10_mini/zh/latest/fpga/pingpong.html

比较早了,目前用的是vivado的平台,还需要进行一个适配,很简单,就是需要vivado的IP核clk_wizard和ram核,可以自行进行一个适配。

时钟是50MHz和25MHz,数据以50MHz的速率进行写入,然后分两个25MHz的ram进行存储以及读取。

仿真可以考到数据的交替写入和读取。

仿真的时候发现数据会写入0000,这里应该是6362,检查一下逻辑

不知道是本身就存在逻辑错误还是移植的时候的错误,应该是判断的时候有一个打拍的延时,更新一下ctrl程序:

//RAM1读使能,使用读时钟赋值 always@(negedge clk_25m or negedge rst_n) if(rst_n == 1'b0) ram1_rd_en <= 1'b0; else if(ram1_wr_addr == 7'd99) ram1_rd_en <= 1'b1; else if(state == WRAM2_RRAM1) ram1_rd_en <= 1'b1; else ram1_rd_en <= 1'b0; //RAM2读使能,使用读时钟赋值 always@(negedge clk_25m or negedge rst_n) if(rst_n == 1'b0) ram2_rd_en <= 1'b0; else if(ram2_wr_addr == 7'd99) ram2_rd_en <= 1'b1; else if(state == WRAM1_RRAM2) ram2_rd_en <= 1'b1; else ram2_rd_en <= 1'b0;

重新仿真,发现按照预期的结果。

这个是简单的乒乓操作,主要是学习下思想。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 13:32:15

MCP与Azure OpenAI集成安全实战(九大风险点全面解析)

第一章&#xff1a;MCP与Azure OpenAI集成安全概述 在现代云原生架构中&#xff0c;将管理控制平面&#xff08;MCP&#xff09;与Azure OpenAI服务集成已成为企业智能化转型的关键路径。此类集成能够实现自动化决策支持、智能日志分析和自然语言驱动的运维操作&#xff0c;但同…

作者头像 李华
网站建设 2026/7/1 13:32:21

MCP配置管理最佳实践(资深架构师十年经验倾囊相授)

第一章&#xff1a;MCP配置管理的核心理念与架构演进MCP&#xff08;Modular Configuration Platform&#xff09;作为一种现代化的配置管理平台&#xff0c;旨在解决分布式系统中配置分散、版本混乱和动态更新困难等问题。其核心理念是将配置视为代码&#xff08;Configuratio…

作者头像 李华
网站建设 2026/7/1 13:32:22

教学实践:基于云端的中文物体识别实验环境搭建

教学实践&#xff1a;基于云端的中文物体识别实验环境搭建 作为一名职业培训讲师&#xff0c;我最近在筹备AI视觉课程时遇到了一个典型问题&#xff1a;学员们的设备配置差异太大&#xff0c;有的用高性能游戏本&#xff0c;有的只有入门级办公电脑。为了让所有学员都能顺畅体验…

作者头像 李华
网站建设 2026/6/30 19:39:48

交通流量分析:识别车辆类型统计通行规律

交通流量分析&#xff1a;识别车辆类型统计通行规律 引言&#xff1a;从城市治理到智能交通的视觉感知需求 随着智慧城市建设的不断推进&#xff0c;交通流量分析已成为提升道路管理效率、优化信号灯控制和预防拥堵的关键技术手段。传统依赖地磁线圈或雷达检测的方式存在部署成…

作者头像 李华
网站建设 2026/7/1 14:56:17

如何在线制作GIF闪图?在线闪图制作全攻略

在社交媒体分享、工作汇报配图、日常聊天斗图的场景里&#xff0c;生动有趣的GIF闪图总能轻松抓住眼球&#xff0c;传递更鲜活的情绪与信息。比起需要安装复杂软件的制作方式&#xff0c;在线制作GIF闪图无需下载安装&#xff0c;操作简单高效&#xff0c;就算是零基础小白也能…

作者头像 李华
网站建设 2026/7/1 3:20:14

万物识别持续学习:应对概念漂移的实战方案

万物识别持续学习&#xff1a;应对概念漂移的实战方案 在万物识别场景中&#xff0c;模型需要不断适应新出现的物体类别或变化的外观特征。传统全量训练每次更新模型都需要重新处理所有数据&#xff0c;计算成本高昂。本文将介绍如何通过Elastic Weight Consolidation&#xff…

作者头像 李华