0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用IP核创建单时钟FIFO

CHANBAEK 来源:哈勒昆 作者:老沈 2023-07-23 11:47 次阅读

FIFO,先进先出。在FPGA中使用的FIFO一般是指对数据的存储具有先进先出的缓冲器,FIFO与普通的存储器的不同在于它没有读写地址线。举个例子,当FPGA从外部传感器读取到一连串数据时,首先被写入FIFO中,然后FPGA再以UART串口通信依次将数据发送出去。因为传感器采集数据的速度很快,比如当传感器使用SPI通信协议,以2M的SPI数据速率读取时,串口使用9600的波特率肯定跟不上,因此需要先将从传感器处采集的数据使用FIFO缓存起来,然后再使用串口缓慢发送出去。

01 单时钟FIFO

单时钟FIFO具有一个独立的时钟端口,所有输入信号的读取都是在该时钟端口信号的上升沿进行的,所有输出信号的变化也是在该时钟信号的上升沿的控制下进行的,单时钟FIFO的所有输入输出信号基本都是和时钟信号同步。

图片

data为写入的数据,此处为8位。然后wrreq为请求写操作,rdreq为请求读操作,clock为时钟信号。q为输出端,8位数据的输出端。full为满标志,当fifo缓冲器存储数据溢满时,full端将输出高电平。almost_full为接近满标志信号,当存储的数据即将要满时,almost_full端将输出高电平以阻止写操作继续向fifo中写数据造成数据溢出。empty则为空标志位,当fifo中数据全部读取完后,empty端便会输出高电平用来标记,almost_empty便是在fifo即将要空时便会发出高电平,以阻止fifo的读操作继续从fifo中读取数据。usedw为fifo中的字数,sclr为异步清零端口

02 IP核使用

首先创建一个FIFO的工程保持在prj下,并在prj下新建一个ip的文件夹。点击Tools -> MegaWizard Plug-In Manager。

图片

选择创建一个新的,然后如下图,在左边搜索框输入FIFO,然后选择第一项,选择后在右边的路径中输入地址ip并以fifo.v保持。

图片

接下来如下图,首先设置数据的位宽及深度,此处设置数据位宽为8位,数据深度为256words(及多少个数据)。

图片

然后接下来设置需要的端口,根据01中的结构图,这里需要选择full满、empty空、以及接近满almost_full、接近空almost_empty和异步清零端sclr。在接近满与接近空处需要设置阈值,即到达多少时接近满端口开始输出标志信号,这里设置数据写操作达到254words时接近满标志开始标记,数据读操作在usedw为2时接近空端口开始标记。

图片

下图便是读操作请求确认信号的两种模式,一个是普通模式一个是前显模式。

图片

选择器件优化方式是面积优先还是速度优先,更换可以看到资源占用率是不一样的,选择速度优先必然使用资源会上升。

图片

然后便一直next后finish创建完成。

图片

这时转回界面便可看到生成ip的fifo.v文件,然后便开始书写激励仿真文件。

图片

首先还是例化需要仿真的文件,然后仿真时钟并在仿真文件中与例化程序进行连线。

图片

接下来便是定义常量i,写一个for循环,i自加写请求wrreq置1将i的值写入数据data中,usedw中数据深度开始依次增多,等256个words写完之后,写请求关闭,然后开始读操作,同样的i从零自加到255,然后将读请求置1开启,系统便开始从输出端q中依次输出data中的数据,同时usedw中的数据深度也开始一次减少。

接下来看仿真波形图:

图片

此处是综合仿真图,前半部分是写操作的波形图,后半部分便是读操作的波形图。

图片

上图这部分为写操作,图中可以看到i每个周期自加1,i的值便赋给数据data,然后usedw便是统计此时data中的数据多少即深度,在usedw为2时可以看到almost_empty接近空出现一个下降沿,在data中开始写入数据时,写请求wrreq产生高电平。

图片

此处可以看出,在深度usedw自加至254时,接近满端almost_full便会产生上升沿用来标记,计满后full端产生上升沿,写操作结束。

图片

上图为读操作,这里随着i的自加输出端q开始依次输出data中的数据,然后usedw随着data中的数据被读取便开始自减。

图片

后面可以看出,当深度usedw为2时,接近空端almost_empty产生上升沿,清空后empty也产生上升沿,读操作结束。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2526

    文章

    48093

    浏览量

    740061
  • fifo
    +关注

    关注

    3

    文章

    369

    浏览量

    43069
  • 时钟
    +关注

    关注

    10

    文章

    1479

    浏览量

    130306
  • uart
    +关注

    关注

    22

    文章

    1159

    浏览量

    99961
  • IP核
    +关注

    关注

    4

    文章

    317

    浏览量

    49043
收藏 人收藏

    评论

    相关推荐

    #FPGA点拨 生成FIFOIP

    fpgaIP
    电子技术那些事儿
    发布于 :2022年10月12日 21:52:56

    #硬声创作季 #FPGA FPGA-27-04 Quartus中fifo IP介绍与仿真测试-1

    fpgafifoIP
    水管工
    发布于 :2022年10月29日 02:28:30

    #硬声创作季 #FPGA FPGA-27-04 Quartus中fifo IP介绍与仿真测试-2

    fpgafifoIP
    水管工
    发布于 :2022年10月29日 02:28:50

    #硬声创作季 #FPGA FPGA-27-04 Quartus中fifo IP介绍与仿真测试-3

    fpgafifoIP
    水管工
    发布于 :2022年10月29日 02:29:13

    #硬声创作季 #FPGA FPGA-27-04 Quartus中fifo IP介绍与仿真测试-4

    fpgafifoIP
    水管工
    发布于 :2022年10月29日 02:29:34

    IP生成文件:XilinxAltera

    IP生成文件:XilinxAlteraIP 生成文件:(Xilinx/Altera同) IP 生成器生成
    发表于 08-12 12:21

    求助:用fifo ip作延时输出数据

    同上,如何用fifo ip作延时输出数据,想输入一组数据,大概300个,clk上升沿输出一个,想延迟128个数据输出的时间后,将这一组数据通过fifo输出,求大神指点代码该怎么写,大
    发表于 04-26 11:37

    ISE中,调用FIFO IP遇到的问题?

    fifo IP fifo_uart fifo_uut(.clk(clk), // input clk.rst(rst_n), // inp
    发表于 09-14 11:36

    【锆石A4 FPGA试用体验】IPFIFO(一)创建与配置

    FIFO IP。[code]module My_FIFO(CLK_50M,RST_N,wrdata,rddata,wren,rden,time_cnt,usedw,full,emp
    发表于 10-04 14:38

    XILINX FIFO IP调用问题

    工程利用ISE自带的FIFO将32位的并行数据经过缓存以bit输出,读写时钟相同,首先将32位数据经过FIFO1变成8位输出,再将8位数
    发表于 12-23 12:53

    以MIPI项目为例讲解Diamond FIFO生成和例化全过程

    在MIPI多路摄像头拼接项目中,需要使用到FIFOIP来进行数据的缓存与时钟域的交互,下面我来介绍一下Diamond FIFO
    发表于 12-12 15:54

    PCIE项目中AXI4 IP例化详解

    fifo接口),用户只要操作fifo接口,无需关心PCIE的内部驱动。为了便于读者更加明白,可以深入了解PCIE,我们将会制作一个PCIE的连载系列。今天,首先说一下自定义AXI4的IP
    发表于 12-13 17:10

    【正点原子FPGA连载】第十三章IPFIFO实验-领航者ZYNQ之FPGA开发指南

    模块的信号交互。由于FIFO多用于跨时钟域信号的处理,所以本实验我们使用异步FIFO来向大家详细介绍双时钟FIFO
    发表于 09-23 17:27

    FIFO IP的使用

    。向FIFO中读出一个数据,读地址加1。可以将FIFO想象成一个水池,写数据和读数据分别对应着注水和抽水。当注水速度快时,水池会满。当抽水速度快时,水池会空。根据读写时钟,可以分为同步FIFO
    发表于 04-12 22:44

    XILINX FPGA IPFIFO Generator例化仿真

    上文XILINX FPGA IPFIFO对XILINX FIFO Generator IP的特性和内部处理流程进行了简要的说明,本文通过实际例子对该
    的头像 发表于 09-07 18:31 903次阅读
    XILINX FPGA <b class='flag-5'>IP</b>之<b class='flag-5'>FIFO</b> Generator例化仿真