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

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

3天内不再提示

FPGA学习系列:24. FIFO控制器的设计

FPGA学习交流 2018-08-07 11:11 次阅读

设计背景:

First Input First Output的缩写,先入先出队列,这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令。FIFO是队列机制中最简单的,每个接口上都存在FIFO队列,表面上看FIFO队列并没有提供什么QoS(Quality of Service,服务质量)保证,甚至很多人认为FIFO严格意义上不算做一种队列技术,实则不然,FIFO是其它队列的基础,FIFO也会影响到衡量QoS的关键指标:报文的丢弃、延时、抖动。既然只有一个队列,自然不需要考虑如何对报文进行复杂的流量分类,也不用考虑下一个报文怎么拿、拿多少的问题,而且因为按顺序取报文,FIFO无需对报文重新排序。简化了这些实现其实也就提高了对报文时延的保证。

设计原理:

本次的设计主要通过调用FIFO的IP核来设置一个简单的单口FIFO,也就是说读写时钟为相同的时钟。其设置流程如下所示也如rom,ram,设置一样的打开步骤

如下如选择FIFO,然后写入生成的FIFO文件名,my_fifo,下一步

image.png

设置合适的数据位宽和深度,之后下一步

出现了空满标志位,full,emty,我们去掉数据个数标志usedw.下一步

之后不停的下一步,出现下面的界面选择生成的文件,然后就完成简单的FIFO设计

image.png

设计架构图:

设计代码:

顶层模块:

0moduletop (clk,rst_n,q);//输入输出端口

1 inputclk;

2 inputrst_n;

3 output[7:0]q;

4 wirewrreq; //写使能信号

5 wirerdreq; //读使能信号

6 wireempty; //空标志位

7 wirefull; //满标志位

8 wire[7:0]data;

9

10fifo_control fifo_control (//FIFO控制器的例化

11 .clk(clk),

12 .rst_n(rst_n),

13 .full(full),

14 .empty(empty),

15 .wrreg(wrreq),

16 .rdreg(rdreq),

17 .data(data)

18 );

19my_fifo my_fifo ( //生成IP核的例化

20 .clock (clk ),

21 .data (data ),

22 .rdreq (rdreq ),

23 .wrreq (wrreq ),

24 .empty (empty ),

25 .full (full),

26 .q (q )

27 );

28

29endmodule

设计模块

0modulefifo_control ( //端口列表

1 inputclk,

2 inputrst_n,

3 inputfull, //满标志

4 inputempty, //空标志

5 outputregwrreg, //写使能

6 outputregrdreg, //读使能

7 outputreg[7:0]data

8 );

9 regstate;

10always@(posedgeclk ornegedgerst_n)

11 if(!rst_n)

12 begin

13 data<=0;

14 wrreg<=0; //写使能关闭

15 rdreg<=0; //读使能关闭

16 state <=0;

17 end

18 else

19 begin

20 case(state)

21 0:if(empty) //判断是否为空,为空写

22 begin

23 wrreg<=1;

24 data <=data +1;

25 end

26 elseif(full) //判断否写满,为满不写

27 begin

28 state <=1;

29 wrreg<=0;

30 rdreg<=1;

31 data<=0;

32 end

33 else

34 begin

35 wrreg<=1;

36 data <=data +1;

37 end

38

39 1:begin

40 if(empty) //判断是否读空,读空关闭读使能

41 begin

42 rdreg<=0;

43 state <=0;

44 end

45 end

46 endcase

47 end

48

49endmodule

测试模块

0`timescale1ns/1ps

1modulefifo_tb;

2

3 regclk;

4 regrst_n;

5 wire[7:0]q;

6initialbegin

7 clk =0;

8 rst_n =0;

9

10 #200rst_n=1;

11

12 end

13always#10clk=~clk;

14top top(

15 .clk(clk),

16 .rst_n(rst_n),

17 .q(q)

18 );

19

20endmodule

仿真:

从仿真空可以看到。我们写入的数据是1--255--0,读出的数据也是从1开始读再到0。

这样就完成了一个简单的FIFO,如果要生成双口的结局跨时钟问题可以在设置时,下面页面选择

image.png来进行设置

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

    关注

    1592

    文章

    21207

    浏览量

    592135
收藏 人收藏

    评论

    相关推荐

    xilinx7系列FPGA新设计的IO专用FIFO解析

    ,它是7系列FPGA新设计的IO专用FIFO,主要用于IOLOGIC(例如ISERDES、IDDR、OSERDES或ODDR)逻辑功能的扩展。 FPGA的每个BANK有4个IN_
    的头像 发表于 11-29 10:08 2353次阅读
    xilinx7<b class='flag-5'>系列</b><b class='flag-5'>FPGA</b>新设计的IO专用<b class='flag-5'>FIFO</b>解析

    FPGA干货分享三】基于FPGA的LBS控制器设计

    。2.5 LBS状态机工作流程FPGA作为LBS的逻辑控制器,负责协调好与DDR_FIFO数据和PEX8311之间的时序关系。系统接收数据时,首先由驱动程序向PEX8311发 送复位信号,通过
    发表于 01-29 14:09

    【开源骚客】《轻松设计SDRAM控制器》第九讲—解密读写FIFO

    使用FIFO缓存已从SDRAM中读出的数据。二、读写FIFO的时序设计对于串口发送过来的是待写入的数据时,我们是在当串口接收到了第四个待写入的数据时(待写入数据的最后一个),才向SDRAM控制器产生写出发命令
    发表于 05-08 22:38

    FPGA零基础学习:IP CORE 之 FIFO设计

    系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有
    发表于 03-15 16:19

    FPGA零基础学习:图像显示系统设计

    缓冲(sdr_wrfifo)、输出缓冲(sdr_rdfifo)、SDR SDRAM驱动(sdr_drive)和读写控制器(sdr_mem_ctrl)。输入缓冲为一个
    发表于 03-24 19:29

    FPGA零基础学习之Vivado-FIFO使用教程

    Generate。 此外,我们还需要两个不同时钟,在这里我们使用锁相环生成。 在管理界面搜索clock。配置过程我们在此前已经讲过,就不在过多叙述。 接下来我们写一下fifo的写控制器,代码如下
    发表于 06-16 17:50

    基于FPGAFIFO设计和应用

    为实现目标识别与跟踪的应用目的 ,在基于 TMS320DM642 的 FIFO 基础上扩展存储空间 ,提出一种基于 FPGA实现 SDRAM 控制器的方法。分析所用 SDRAM 的特点和工作原理
    发表于 10-29 14:05 2次下载

    FIFO_学习心得

    FIFO_学习心得。 FIFO_学习心得
    发表于 11-09 14:07 6次下载

    异步FIFO结构及FPGA设计

    异步FIFO结构及FPGA设计,解决亚稳态的问题
    发表于 11-10 15:21 4次下载

    自定义fifo接口控制器

    自定义fifo接口控制器,利用sopc builder实现。
    发表于 03-22 14:09 1次下载

    基于XILINX的XC3系列FPGA的VGA控制器的VHDL源程

    Xilinx FPGA工程例子源码:基于XILINX的XC3系列FPGA的VGA控制器的VHDL源程序
    发表于 06-07 15:07 12次下载

    学习SDRAM控制器设计 能让你掌握很多FPGA知识

    学习FPGA的过程中,注意是在学习过程中,联系FPGA的使用技巧,强烈建议尝试设计一个SDRAM控制器,不要使用IP核。
    发表于 02-15 15:04 769次阅读

    FPGA设计中FIFO的使用技巧

    FIFO是在FPGA设计中使用的非常频繁,也是影响FPGA设计代码稳定性以及效率等得关键因素。在数据连续读取时,为了能不间断的读出数据而又不导致FIFO为空后还错误的读出数据。可以将
    的头像 发表于 09-09 11:15 6302次阅读

    Verilog数字系统设计——复杂数字电路设计2(FIFO控制器设计)

    的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容:FIFO
    发表于 12-05 15:51 9次下载
    Verilog数字系统设计——复杂数字电路设计2(<b class='flag-5'>FIFO</b><b class='flag-5'>控制器</b>设计)

    FPGA学习-基于FIFO的行缓存结构

    FPGA中对图像的一行数据进行缓存时,可以采用FIFO这一结构,如上图所示,新一行图像数据流入到FIFO1中,FIFO1中会对图像数据进行缓存,当
    的头像 发表于 05-10 09:59 3075次阅读