乒乓操作学习记录如下:

乒乓操作” 是一个常常应用于数据流控制的设计思想, 典型的乒乓操作方法如下图 所示: 乒乓操作的处理流程为:输入数据流通过“ 输入数据选择单元”将数据流等时分配到两个“数据缓冲模块”, 数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口RAM (DPRAM)、单口RAM (SPRAM)、FIFO等。 在第2个缓冲周期, 通过“ 输入数据选择单元” 的切换, 将输入的数据流缓存到“ 数据缓冲模块2”,同时将“数据缓冲模块1”缓存的第1个周期数据通过“输入数据选择单元”的选择,送到“数据流运算处理模块” 进行运算处理。

乒乓操作最大的特点是,通过 数据输入流选择单元和输出数据流选择单元,按照节拍,相互配合的切换,将经过的缓存数据流没有停顿时间地送到 数据流运算处理模块。

乒乓操作优点如下:

1、实现数据的无缝缓冲和处理,按照节拍配合。

2、节约缓冲区空间。

3、可实现低速模块处理高速模块(实质:通过DPRAM这种缓存单元实现数据流的串并转换)。

根据功能画出时序图:

代码实现:

 1 module pingpang(
2 input wire clk ,
3 input wire rst_n ,
4 input wire [7:0] data_in ,
5 output reg [7:0] data_out
6 );
7 reg [7:0] buffer1;
8 reg [7:0] buffer2;
9 reg wr_flag;
10 reg rd_flag;
11 reg state ;
12
13 always@(posedge clk or negedge rst_n)
14 begin
15 if(rst_n==1'b0)
16 state<=1'b0;
17 else
18 state<=~state;
19 end
20
21 always@(*)
22 begin
23 case(state)
24 1'b0 : begin wr_flag<=0; rd_flag<=0; end
25 1'b1 : begin wr_flag<=1; rd_flag<=1; end
26 default : begin wr_flag<=0; rd_flag<=0; end
27 endcase
28 end
29
30 always@(posedge clk or negedge rst_n)
31 begin
32 if(rst_n==1'b0)
33 begin
34 buffer1<=8'b0;
35 buffer2<=8'b0;
36 end
37 else
38 begin
39 case(wr_flag)
40 0 : buffer2<=data_in;
41 1 : buffer1<=data_in;
42 default : begin buffer1<=8'b0; buffer2<=8'b0; end
43 endcase
44 end
45 end
46
47
48 always@(posedge clk or negedge rst_n)
49 begin
50 if(rst_n==1'b0)
51 data_out<=8'b0;
52 else
53 begin
54 case(rd_flag)
55 0 : data_out <= buffer1;
56 1 : data_out <= buffer2;
57 default : data_out<=8'b0;
58 endcase
59 end
60 end
61
62 endmodule
63

注 : state  控制两个缓冲器读写状态切换。wr_flag=1,buffer1 写;wr_flag=0,buffer2 写;rd_flag=0,buffer1 读;wr_flag=1,buffer2 读;

RTL视图:

测试代码:

 1 `timescale 1ns/1ps
2
3 module tb_pingpang();
4 reg clk ;
5 reg rst_n ;
6 reg [7:0] data_in ;
7 wire [7:0] data_out ;
8
9 initial
10 begin
11 clk = 0;
12 rst_n = 0;
13 #50 rst_n = 1;
14 #1000000 $finish;
15 end
16
17 always #10 clk=~clk;
18
19 always@(posedge clk or negedge rst_n)
20 begin
21 if(rst_n==1'b0)
22 data_in<=8'b0;
23 else
24 data_in<=data_in+1;
25 end
26 pingpang pinpang_inst
27 (
28 .clk (clk) ,
29 .rst_n (rst_n) ,
30 .data_in (data_in) ,
31 .data_out(data_out)
32 );
33
34 endmodule

modelsim 仿真波形:

拓展: 也可以每个缓冲区后跟一个预处理模块,通过乒乓操作可以降低预处理模块的处理速率。如下图所示:

参考资料:

1、Intel FPGA/CPLD设计

2、(105条消息) FPGA设计——verilog实现乒乓操作并modelsim仿真_Fighting_XH的博客-CSDN博客_乒乓操作verilog

FPGA学习之乒乓操作的更多相关文章

  1. FPGA之乒乓操作

    1.乒乓操作原理 乒乓操作是一个主要用于数据流控制的处理技巧,典型的乒乓操作如图所示: 外部输入数据流通过“输入数据选择控制”模块送入两个数据缓冲区中,数据缓冲模块可以为任何存储模块,比较常用的存储单 ...

  2. 【FPGA技巧篇一】FPGA设计的四种常用思想与技巧之一 :乒乓操作

    本文篇章将讨论一下的四种常用 FPGA 设计思想与技巧: 乒乓操作. 串并转换. 流水线操作. 数据接口同步化, 都是 FPGA 逻辑设计的内在规律的体现, 合理地采用这些设计思想能在FPGA设计工作 ...

  3. FPGA SD 卡 之 乒乓操作 、同步fifo

    这里记录一个实际的需要使用乒乓操作的例子:读sd卡数据的时,在spi的模式下.发送单数据块的读取命令,在回应之后会有 512字节的数据.使用乒乓操作,可以用两个八位的寄存器,就可以完成连续的512字节 ...

  4. FPGA学习的一些误区

    转载自网络,作者不详. 我常年担任多个有关FPGA学习研讨的QQ群管理员,长期以来很多新入群的菜鸟们总是在重复的问一些非常简单但是又让新手困惑不解的问题.作为管理员经常要给这些菜鸟们普及基础知识,但是 ...

  5. [整理]FPGA学习资料汇总

    01.特权同学倾情奉献海量FPGA学习资料 http://pan.baidu.com/s/1pJIb32F

  6. 如何学习FPGA?FPGA学习必备的基础知识

    如何学习FPGA?FPGA学习必备的基础知识 时间:2013-08-12 来源:eepw 作者: 关键字:FPGA   基础知识       FPGA已成为现今的技术热点之一,无论学生还是工程师都希望 ...

  7. 芯航线FPGA学习套件之4*4矩阵键盘模块测试手册

    芯航线FPGA学习套件之4*4矩阵键盘模块测试手册   本手册以简明扼要的方式介绍芯航线FPGA学习套件提供的矩阵键盘模块的测试方法:   连接开发板,如下所示: 2.将矩阵键盘模块与开发板按如下图所 ...

  8. 芯航线FPGA学习套件之多通道串行ADDA(TLV1544,TLC5620)模块测试手册

    芯航线FPGA学习套件之多通道串行ADDA模块测试手册   本手册以简明扼要的方式介绍芯航线FPGA学习套件提供的ADDA模块的测试方法:   连接开发板,如下所示: 2.将ADDA V1.1模块与开 ...

  9. FPGA学习之基本结构

    如何学习FPGA中提到第一步:学习.了解FPGA结构,FPGA到底是什么东西,芯片里面有什么,不要开始就拿个开发板照着别人的东西去编程.既然要开始学习FPGA,那么就应该从其基本结构开始.以下内容是我 ...

  10. Hbase深入学习(六) Java操作HBase

    Hbase深入学习(六) ―― Java操作HBase 本文讲述如何用hbase shell命令和hbase java api对hbase服务器进行操作. 先看以下读取一行记录hbase是如何进行工作 ...

随机推荐

  1. Python分支结构之if语句

    程序结构 程序三种结构 顺序 循环 分支 分支结构 分支结构基本语法 if 条件表达式: 语句1 语句2 语句3 ...... 条件表达式就是计算结果必须为布尔值的表达式 表达式后面的冒号不能少 注意 ...

  2. Python-HwTestReport的简单使用

    一.工具包下载 https://github.com/hongweifuture/HwTestReport(出自此大神) 二.使用示例(直接上代码) 1.将 HwTestReport.py 导入项目 ...

  3. Protobuf编码规则

    支持类型 该表显示了在 .proto 文件中指定的类型,以及自动生成的类中的相应类型: .proto Type Notes C++ Type Java/Kotlin Type[1] Java/Kotl ...

  4. python中的一些解码和编码

    开头 最近爬取百度贴吧搜索页的时候遇到一个url的编码问题,颇为头疼,记录下来防止下次忘记 工具网站 解码编码的工具网站推荐 http://tool.chinaz.com/tools/urlencod ...

  5. 2022-11-09:给定怪兽的血量为hp 第i回合如果用刀砍,怪兽在这回合会直接掉血,没有后续效果 第i回合如果用毒,怪兽在这回合不会掉血, 但是之后每回合都会掉血,并且所有中毒的后续效果会叠加 给

    2022-11-09:给定怪兽的血量为hp 第i回合如果用刀砍,怪兽在这回合会直接掉血,没有后续效果 第i回合如果用毒,怪兽在这回合不会掉血, 但是之后每回合都会掉血,并且所有中毒的后续效果会叠加 给 ...

  6. 2021-02-16:n皇后问题。给定一个整数n,返回n皇后的摆法有多少种?

    福哥答案2021-02-16: 自然智慧即可.1.普通递归.有代码.需要判断同列和斜线.2.位运算递归.有代码.3.我的递归.有代码.只需要判断斜线. 代码用golang编写,代码如下: packag ...

  7. mac系统下,docker安装kibana报错,manifest for kibana:latest not found: manifest unknown: manifest unknown

    1.问题描述:mac系统下,docker安装kibana报错,manifest for kibana:latest not found: manifest unknown: manifest unkn ...

  8. Windows 11 和 Rocky 9 Linux 平台 MySQL 8.0.33 简易安装教程

    目录 Windows 平台安装 MySQL Linux 平台 Rocky 9 安装 MySQL binary package rpm package yum 源 source package Wind ...

  9. ODOO13之六:Odoo 13开发之模型 – 结构化应用数据

    在本系列文章第三篇Odoo 13 开发之创建第一个 Odoo 应用中,我们概览了创建 Odoo 应用所需的所有组件.本文及接下来的一篇我们将深入到组成应用的每一层:模型层.视图层和业务逻辑层. 本文中 ...

  10. 【HarmonyOS】元服务和APP的相互跳转、相互成就

    ​ [关键字] 卡片.跳转.加桌 [背景介绍] 随着鸿蒙生态的发展,各种类型的应用都已经可以在Harmony OS上无差异的运行,面对鸿蒙新兴元服务的兴起,各大厂家可能都在考虑一个问题:如果已经有AP ...