FPGA设计——verilog实现乒乓操作并modelsim仿真

这篇具有很好参考价值的文章主要介绍了FPGA设计——verilog实现乒乓操作并modelsim仿真。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

乒乓操作是FPGA设计中常用的一种技巧,它通过数据流控制实现按节拍相互配合的切换,来提高数据处理效率,达到无缝缓冲和处理的效果。本文针对乒乓操作进行学习总结。
完整工程

乒乓操作的原理

一、原理图如下

1、二选一控制器来对缓冲模块1和2进行选择。
2、数据缓冲模块一般就是SDRAM,FIFO等。
3、每一时刻如何工作:
clk1 时刻,输入数据data存入到mux1选择的缓冲1中。
clk2时刻,将data数据存在mux1 选择的缓冲2中,同时mux2选择缓冲1,将缓冲1中的数据送到后续处理中。
clk3时刻,mux1选通了缓冲1,将输入data存在缓冲1,同时mux2选择缓冲2,将其中的数据送到后续处理中
4、依次切换循环,从而实现乒乓操作。

FPGA设计——verilog实现乒乓操作并modelsim仿真


二、波形表示
通过乒乓操作,我们即可通过节拍相互配合,最终实现数据的无缝缓冲与发送。
简单来看就是缓冲1写,则缓冲2读;缓冲2写,缓冲1读。
FPGA设计——verilog实现乒乓操作并modelsim仿真

优点:

1、 实现数据的无缝缓冲和处理;——按节拍相互配合进行切换

2、 可节约缓冲区空间;

3、 可实现低速模块处理高速模块。

乒乓操作的verilog实现

1、采用case语句来进行选择。
2、确定该模块的输入输出端口:
FPGA设计——verilog实现乒乓操作并modelsim仿真
3、由于乒乓操作就是缓冲1写,缓冲2读;缓冲2写,缓冲1读,共这两种情况,采用state的高低电平进行选择。
其中高电平1表示写1读2,低电平0表示写2读1
4、verilog代码

module pingpong(
    input clk,
    input rst,
    input [7:0] data_in,
    output reg [7:0] data_out
);
	 
reg [7:0] buffer_1;
reg [7:0] buffer_2;
reg wr_flag1;                            //写标志,wr_flag1=0,buffer_2写;wr_flag1=1,buffer_1写
reg rd_flag2;                            //读标志,rd_flag2=0,buffer_1读;rd_flag2=1,buffer_2读
reg state;             // 1:写1读2,   0:写2读1
 
 
// 状态每一个clk,翻转一次(二分频)
always@(posedge clk or negedge rst) begin
    if (!rst)
        state<= 0;
    else
        state<= ~state;

end

//二选一多路器,原理图中的选择控制模块
always@(*)
begin
    case(state) 
        1'b0:   //buffer2写,buffer1读
        begin
            wr_flag1<=0;
            rd_flag2<=0;
        end
        1'b1://buffer1写,buffer2读
        begin
            wr_flag1<=1;
            rd_flag2<=1;
        end
        default:
        begin
            wr_flag1<=0;
            rd_flag2<=0;
        end
    endcase
end
 
//写缓存buffer数据
always@(posedge clk or negedge rst)
begin
    if(!rst)begin
        buffer_1<=8'b0;
        buffer_2<=8'b0;
    end
	 
    else begin
        case(wr_flag1) //根据写标志,判断往哪个缓冲中写数据
            0: buffer_2<=data_in;//此时,写buffer1保持上一时刻的数据
				
            1: buffer_1<=data_in;//此时,写buffer2保持上一时刻的数据
				
            default:begin
                buffer_1<=0;
                buffer_2<=0;
            end
        endcase
    end
end
//读缓存buffer数据
always@(posedge clk or negedge rst)
begin
    if(!rst)
        data_out<=8'b0;
    else
        case(rd_flag2)//根据读标志,判断读哪个缓冲中的数据
            0:data_out<=buffer_1; //读buffer_1的数据
				
            1:data_out<=buffer_2;
				
            default:data_out<=0;
        endcase
end
endmodule

tb测试:

`timescale 1ns / 1ps
module pingpong_operation_tb;
	reg clk;
	reg rst_n;
	reg [7:0] data_in;
	wire [7:0] data_out;
	
	pingpong_operation u_pingpong(
    .clk(clk),
    .rst_n(rst_n),
    .data_in(data_in),
    .data_out(data_out)
    );
	
	
initial begin
    clk = 0;
    rst_n = 0;
    #40 rst_n =1;
	 #100000;
	 $stop;
end
 
always #10 clk = ~clk; //一个ck为20ns

//产生输入激励
 
always@(posedge clk or negedge rst_n)begin
    if(!rst_n)
        data_in<=0;
     else
        data_in<=data_in+1;
end
 	 
endmodule

波形如下:
state = 1 :buffer1写,读buffer2;
state = 0 :buffer2写,读buffer1;

读写标志:
state = 1 :wr_flag1 = 1;rd_flag2= 1;
state = 0 :wr_flag1 = 0;rd_flag2= 0;

写进哪个缓冲?
wr_flag1 = 1 : buffer_1<=data_in;此时,buffer_2保持上一时刻数据不变。
wr_flag1 = 0 : buffer_2<=data_in;此时,buffer_1保持上一时刻数据不变。

读哪个缓冲中的数据?
rd_flag2 = 0 : data_out<=buffer_1;
rd_flag2 = 1 : data_out<=buffer_2;
FPGA设计——verilog实现乒乓操作并modelsim仿真

可看到与我们前面根据原理分析出的波形相同。文章来源地址https://www.toymoban.com/news/detail-400122.html

到了这里,关于FPGA设计——verilog实现乒乓操作并modelsim仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Verilog的mips指令集单周期/五级流水cpu,modelsim/vivado仿真设计 设计

      1、了解提高CPU性能的方法。 2、掌握流水线微处理器的工作原理。 3、理解数据冒险、控制冒险的概念以及流水线冲突的解决方法。 4、掌握流水线微处理器的测试方法。 设计一种五级流水线的基于MIPS指令集的处理器,其可支持部分指令,能够处理指令相关和数据相关,使

    2024年02月12日
    浏览(30)
  • FPGA实现“乒乓操作”

            “乒乓操作”是一种常用于数据流控制的处理技巧,可以实现无缝高速数据流缓存。首先“乒乓操作”这个名字本身就很吸引人,其结构一般是由数据选择器和数据缓冲器构成的,数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口 RAM(DPRAM) 、单口 R

    2024年02月04日
    浏览(29)
  • 基于FPGA和Verilog实现的9层电梯控制器仿真设计

    资源下载地址:https://download.csdn.net/download/sheziqiong/85628810 资源下载地址:https://download.csdn.net/download/sheziqiong/85628810 电梯最少可以往返于0—9层楼。 乘客要去的楼层数A可手动输入并显示,按取消键可清除本次输入。 可自动显示电梯运行的楼层数B 当AB时,电梯上升; 当AB时,

    2024年02月02日
    浏览(59)
  • 北邮22级信通院数电:Verilog-FPGA(3)实验“跑通第一个例程”modelsim仿真及遇到的问题汇总(持续更新中)

    北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 注意:本篇文章所有绝对路径的展示都来自上一篇博客 北邮22级信通院数

    2024年02月07日
    浏览(37)
  • 【FPGA】双线性差值实现图像缩放,使用modelsim和matlab仿真验真

    双线性插值,又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。 双线性插值作为数值分析中的一种插值算法,广泛应用在信号处理,数字图像和视频处理等方面。 网上理论知识一大把,反

    2024年02月12日
    浏览(31)
  • 【Verilog】乒乓操作

    乒乓操作 乒乓操作简单介绍 乒乓操作常用于数据流的控制处理,在流水处理中,完成数据的无缝缓冲和处理 典型乒乓操作示例图 乒乓操作的处理流程 输入数据流通过“输入数据选择单元”将数据流等时分配到两个数据缓冲区,数据缓冲区可以为任何存储模块(双口RAM、单

    2024年02月16日
    浏览(25)
  • 单周期CPU设计,MIPS结构,modelsim仿真实现,多条指令

    计算机系统的主要硬件组成包括: 计算机硬件系统由计算器、控制器、存储器、输入设备和输出设备组成,是计算机系统的物理组成部分。 1、控制器:它是分析输入指令并统一控制计算机各部件完成一定任务的部件。 它通常由指令寄存器、状态寄存器、指令译码器、时间电

    2024年02月15日
    浏览(25)
  • 学习如何独立的使用Modelsim进行仿真验证?——编写verilog文件并查看仿真波形

    本篇记录如何独立的使用Modelsim进行仿真,便于之后查看。 Modelsim独立仿真的步骤: 创建工作文件夹——编译设计文件——导入及运行仿真——调试结果 具体的: 1、新建一个工程 指定工程名称、路径和默认库名称。一般情况下,设定Default Library Name默认库名称为work。 指定的

    2023年04月08日
    浏览(31)
  • 【安路FPGA】联合modelsim仿真

    第一在modelsim安装目录下新建一个文件夹Anlogic用来存放TD库文件: 打开modelsim仿真软件,feil→change Directory,选择刚才新建文件目录,在新建一个Library库如图所示: TD库文件al与common是必须要添加的两个库,我的芯片是ph1系列所以添加ph1 在去到这个路径会发现多了三个文件夹,在

    2024年02月08日
    浏览(38)
  • FPGA的通用FIFO设计verilog,1024*8bit仿真,源码和视频

    名称:FIFO存储器设计1024*8bit 软件:Quartus 语言:Verilog 本代码为FIFO通用代码,其他深度和位宽可简单修改以下参数得到 代码功能: 设计一个基于FPGA的FIFO存储器,使之能提供以下功能  1.存储空间至少1024 储器  2.存储位宽8bit  3.拓展功能:存储器空、满报警 演示视频:http://

    2024年02月06日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包