乒乓操作学习记录如下:

乒乓操作” 是一个常常应用于数据流控制的设计思想, 典型的乒乓操作方法如下图 所示: 乒乓操作的处理流程为:输入数据流通过“ 输入数据选择单元”将数据流等时分配到两个“数据缓冲模块”, 数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口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. macOS下安装 n 管理包(node版本管理工具)

    1. 安装 n 管理包 终端命令全局安装 npm install -g n 安装成功后在终端输入 n --version 或 n 查看,可看到 n 的默认安装目录 下面就是使用 n 的方式了, 首先查 ...

  2. vue上传文件(原生方法)

    前言: 组件库的文件上传不适合项目,这里我们利用input标签实现文件上传 首先input type=file  标签是这个亚子的,而且样式不能改,我们利用css的方法,将一个定位到这个下面来,然后i ...

  3. AI 在 API 设计中的应用:如何利用 Al 快速实现 API 开发和测试

    一.引言 在当今互联网技术的快速发展中,API 成为了越来越多的软件和系统之间交互的核心方式,而 API 的质量和效率对于软件的开发和运维都至关重要.为了提高 API 的设计.开发.测试和运维的效率和 ...

  4. cefsharp学习笔记

    环境:VS2015+cefsharp 57.0 全部代码如下: 1.要初始化,否则不能刷新 using System; using CefSharp; using System.Collections ...

  5. EasyExcel自适应列宽

    import com.alibaba.excel.enums.CellDataTypeEnum; import com.alibaba.excel.metadata.Head; import com. ...

  6. 2021-12-14:根据身高重建队列。 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个

    2021-12-14:根据身高重建队列. 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序).每个 people[i] = [hi, ki] 表示第 i 个 ...

  7. Selenium - 元素等待(2) - 显式等待/EC等待

    Selenium - 元素等待 显式等待 显式等待是一种灵活的等待方式,需要声明等待的结束条件,当满足条件时会自动结束等待: 需要引入WebDriverWait包以及exception_conditi ...

  8. 【Linux】(小白向)详解VirtualBox网络配置-配置Linux网络

    本文时间 2023-05-18 作者:sugerqube漆瓷 本文面向新手,重在理解会舍弃不少精密的理论,还请大佬们见谅. 本文目标:成功使用ssh工具登录linux,同时linux能连接外网. 网络 ...

  9. [Docker] Docker之安装Nginx

    0 序言 略 1 安装步骤 Step1 下载镜像 搜素.下载镜像 https://hub.docker.com/_/nginx?tab=tags 这里选择官方镜像1.22.0版本 docker sea ...

  10. jquery页面搜索关键词突出显示

    页面搜索关键词突出 // 页面搜索关键词突出 $(function () { $(".list_r").find('span').css({ // 每次搜索开始,先把所有字体颜色恢 ...