IP核之FIFO实验

该博客介绍了FPGA中FIFO(First In First Out)的工作原理及其在跨时钟域数据传递中的应用。通过Vivado软件,作者展示了如何生成FIFO IP核,并进行读写测试。实验目标是实现当FIFO为空时写入数据,写满后从FIFO读出数据直至空。博客提供了顶层模块、写模块和读模块的代码实现,并包含一个仿真模块来验证功能。
摘要由CSDN通过智能技术生成

FIFO简介:

FIFO的英文全称是First In First Out,即先进先出。FPGA使用的FIFO一般指的是对数据的存储具有先进先出特性的一个缓存器,常被用于数据的缓存,或者高速异步数据的交互也即所谓的跨时钟域信号传递。它与FPGA内部的RAM和ROM的区别是没有外部读写地址线,采取顺序写入数据,顺序读出数据的方式,使用起来简单方便,由此带来的缺点就是不能像RAM和ROM那样可以由地址线决定读取或写入某个指定的地址。本章我们将对Vivado软件生成的FIFOIP核进行读写测试,来向大家介绍XilinxFIFO IP核的使用方法。

同步FIFO常用于同步时钟的数据缓存,异步FIFO常用于跨时钟域的数据信号的传递,例如时钟域A下的数据data1传递给异步时钟域B,当data1为连续变化信号时,如果直接传递给时钟域B则可能会导致收非所送的情况,即在采集过程中会出现包括亚稳态问题在内的一系列问题,使用异步FIFO能够将不同时钟域中的数据同步到所需的时钟域中。

实验任务
本节的实验任务是使用Vivado生成FIFOIP核,并实现以下功能:当FIFO为空时,向FIFO中写入数据,写入的数据量和FIFO深度一致,即FIFO被写满;然后从FIFO中读出数据,直到FIFO被读空为止。

模块示意图:

 

顶层模块代码实现:

moduleip_fifo(
        input        sys_clk,//时钟信号
        input        sys_rst_n//复位信号
);
//wire define
wire                        fifo_wr_en;// FIFO写使能信号
wire                        fifo_rd_en;// FIFO读使能信号
wire        [7:0]         fifo_din;//写入到FIFO的数据
wire        [7:0]         fifo_dout;//从FIFO读出的数据
wirea                      lmost_full;// FIFO将满信号
wirea                      lmost_empty;// FIFO将空信号
wire                        fifo_full;// FIFO满信号

wire                        fifo_empty;// FIFO空信号
wire        [7:0]         fifo_wr_data_count;// FIFO写时钟域的数据计数
wire        [7:0]         fifo_rd_data_count;// FIFO读时钟域的数据计数

//例化FIFO IP核
fifo_generator_0  fifo_generator_0(
        .wr_clk(sys_clk),// input wire wr_clk
        .rd_clk(sys_clk),// input wire rd_clk26
        .wr_en(fifo_wr_en),// input wire wr_en
        .rd_en(fifo_rd_en),// input wire rd_en29
        .din(fifo_din),// input wire [7 : 0] din
        .dout(fifo_dout),// output wire [7 : 0] dout32
        .almost_full(almost_full),// output wire almost

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值