网站流量分析软件wordpress 邮箱登录插件
2026/5/21 15:21:49 网站建设 项目流程
网站流量分析软件,wordpress 邮箱登录插件,买一个域名大概多少钱,长春建站优化FPGA教程系列-乒乓操作 概述 摘抄了两段#xff0c;品一品。乒乓操作是一个经常用于数据流控制的处理技术#xff0c;具有节约缓冲空间、对数据流无缝处理等特点。乒乓操作#xff08;Ping-Pong Buffering#xff09;是一种常见的设计模式。它通过双缓冲技术#xff0c;使…FPGA教程系列-乒乓操作概述摘抄了两段品一品。乒乓操作是一个经常用于数据流控制的处理技术具有节约缓冲空间、对数据流无缝处理等特点。乒乓操作Ping-Pong Buffering是一种常见的设计模式。它通过双缓冲技术使得一个缓冲区在进行数据传输或处理时另一个缓冲区可以同时接受或准备新的数据。这样就可以在多个时钟周期内实现数据的无缝交替最大化利用FPGA资源和提高数据处理效率。操作过程通俗的总结一下就是乒乓操作Ping-Pong Buffer的核心思想就是“为了不让干活的人停下来等准备两个盘子轮流装菜”。其实与流水线思想类似也是拿空间去换取时间。空间换时间流水线用更多的寄存器空间换取了更高的吞吐率时间。乒乓用双倍的存储器空间换取了连续不断的读写能力时间。并行处理 (Parallelism)流水线是“工序”的并行。第1个数据在做第3步时第3个数据正在做第1步。乒乓是“读写”的并行。你在“写”这块地的时候我在“读”那块地。分别有两个缓冲区(两个RAMbuffer A和buffer B)都处于空闲状态等待数据传输的开始。控制逻辑会指定一个缓冲区例如buffer A作为当前的写入缓冲区另一个缓冲区buffer B则作为读取缓冲区。数据写入数据从外部设备或数据源传输到当前的写入缓冲区例如Buffer A。当buffer A在接收新数据时系统会按照时序或控制逻辑将数据逐步写入该缓冲区。数据读取与此同时处理器或其他模块从另一个缓冲区例如Buffer B读取并处理数据。此时Buffer B存储的是之前已经接收完毕的数据供系统进行处理或输出。‍外部输入数据流通过输入数据流选择单元将数据流输入到数据缓存模块比较常用的存储单元有双口RAMFIFOSDRAM等。在第一个缓冲周期数据流通过“输入数据流选择单元”将数据写入“数据缓冲模块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 1b0) ram1_rd_en 1b0; else if(ram1_wr_addr 7d99) ram1_rd_en 1b1; else if(state WRAM2_RRAM1) ram1_rd_en 1b1; else ram1_rd_en 1b0; //RAM2读使能使用读时钟赋值 always(negedge clk_25m or negedge rst_n) if(rst_n 1b0) ram2_rd_en 1b0; else if(ram2_wr_addr 7d99) ram2_rd_en 1b1; else if(state WRAM1_RRAM2) ram2_rd_en 1b1; else ram2_rd_en 1b0;重新仿真发现按照预期的结果。这个是简单的乒乓操作主要是学习下思想。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询