FIFO是一种先进先出的电路,使用在需要产生数据接口的部分,用来存储、缓冲在两个一部时钟之间的数据传输。在一部电路中,由于时钟之间周期和相位完全独立,因为数据丢失概率不为零。使用FIFO可以在两个不同时钟域系统之间快速而方便地传输实时数据。在网络接口、图像处理灯方面,FIFO得到广泛的应用。
FIFO的设计难点:产生可靠的FIFO读写指针和生成FIFO“空”、“满”状态标识。
异步FIFO地址最好使用Gray计数器,这是因为,采用二进制数时又可能变化计数一次所有位都会有所变化,而Gray码计数器就只是计数一次数据变化一次。
1、FIFO“空”/“满”状态
由于FIFO“空”/“满”状态都表明读写指针相等,所以必须要准确区分是空还是满。
解决办法是将FIFO地址空间按最高量为划分成4个象限,每当读写地址相等时,通过对最高两位译码以申城正空的空”/“满”标志。
如果写指针比读指针之后一个象限,则表明FIFO接近满。此时置标志位direction为1,并且锁存其值。相应的等式为:
wire dirset_n = ~(( wptr[N]^rptr[N-1]) & ~(wptr[N-1]^rptr[N]));
如果写指针比读指针超前一个象限,则表明FIFO为接近空状态,如图所示。此时置标志direction为0,并且锁存其值。相应的等式为:
wire dirclr_n = ~((~(wptr[n]^rptr[n-1]) & (wptr[n-1] ^ rptr[n])) | ~wrst_n;
2、FIFO模块结构
(1)顶层模块,对所有FIFO模块进行封装
(2)双口RAM模块,用于实现读写操作
(3)异步比较器,用于实现FIFO读写指针比较,并输出状态信号以生成正确的FIFO空满标志
(4)FIFO写指针与满逻辑控制模块,用于生成FIFO写地址指针并且生成FIFO满标志。
(5)FIFO读指针与空逻辑控制模块,用于生成FIFO读地址指针并且生成FIFO空标志。
代码如下:

FPGA学习之FIFO相关推荐

  1. FPGA学习笔记(十二)IP核之FIFO的学习总结

    系列文章目录 一.FPGA学习笔记(一)入门背景.软件及时钟约束 二.FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三.FPGA学习笔记(三) 流水灯入门FPGA设计流程 四.FPGA ...

  2. 【FPGA学习记录1】异步FIFO的介绍

    文章目录 写在前面 1.FIFO的定义以及为什么要用FIFO.FIFO的分类 1.1什么是FIFO 1.2为什么要用FIFO 1.3FIFO的分类 2.异步FIFO的工作原理 2.1FIFO的结构 2 ...

  3. FPGA学习笔记(八)同步/异步信号的打拍分析处理及亚稳态分析

    系列文章目录 一.FPGA学习笔记(一)入门背景.软件及时钟约束 二.FPGA学习笔记(二)Verilog语法初步学习(语法篇1) 三.FPGA学习笔记(三) 流水灯入门FPGA设计流程 四.FPGA ...

  4. 入行10年后,我总结了这份FPGA学习路线

    最近我收到很多同学的提问,让我介绍一下FPGA怎么学习.怎么进阶,有什么推荐的材料或者学习资源. 在给我留言和私信的朋友里,有在校的大学生,需要学FPGA做数电实验.参加竞赛.进实验室,或者只求水过这 ...

  5. Cyclone V SoC FPGA学习之路第一章:综述

    Cyclone V SoC FPGA学习之路第一章:总体了解 关键词: adaptive logic modules – ALM 自适应逻辑模块 logic array block --LAB 逻辑阵 ...

  6. ZYNQ之FPGA学习----RAM IP核使用实验

    1 RAM IP核介绍 RAM 的英文全称是 Random Access Memory, 即随机存取存储器, 它可以随时把数据写入任一指定地址的存储单元,也可以随时从任一指定地址中读出数据,其读写速度 ...

  7. ZYNQ之FPGA学习----Vivado功能仿真

    1 Vivado功能仿真 阅读本文需先学习: FPGA学习----Vivado软件使用 典型的FPGA设计流程,如图所示: 图片来自<领航者ZYNQ之FPGA开发指南> Vivado 设计 ...

  8. FPGA学习及设计中的注意事项

    为什么80%的码农都做不了架构师?>>>    FPGA学习及设计中的注意事项 1.基础问题 FPGA的基础就是数字电路和HDL语言,想学好FPGA的人,建议床头都有一本数字电路的书 ...

  9. FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程

    FPGA学习笔记之Altera FPGA使用JIC文件配置固化教程 很多做过单片机的朋友都知 道,我们在对MCU烧写完程序固件后,那么该程序固件就存储在了该MCU内部.即使MCU断电了再重新上电,程序 ...

最新文章

  1. 错误解决记录------------mysql连接本地数据库显示can't get hostname for your address
  2. 数据中台建设五步法(文末赠书)
  3. (26)IMPCAT软件bit文件下载流程(FPGA不积跬步101)
  4. windows phone 中ListBox采用多模板
  5. 二分法猜数计算机代码,求代码!!! 你输入一个1到1000内的数 随后电脑猜10次 好象要用什么二分法...
  6. [转载] python字符串数组字典_Python:字符串、列表、元组、字典
  7. C# Tostring() 格式大全
  8. java中model的意思_开发中model,entity和pojo的区别
  9. dataset存入mysql_dataset保存到数据库
  10. pytorch基础教程2
  11. 安卓linux开机画面,Android开机logo简单修改方法
  12. Java实现中英文词典功能
  13. selenium下载图片
  14. java xml特殊字符_mybatis xml中特殊字符处理及特殊符号
  15. H264码流处理详解
  16. java retained size_使用MAT时的Shallow Size和 Retained Size的区别
  17. CTF-web-秋名山老司机
  18. 深圳靠谱的python培训机构排名
  19. 中国的美女为什么这样少的原因
  20. 系统分析与设计之用例图

热门文章

  1. boost::mp11::mp_rotate_right相关用法的测试程序
  2. boost::log模块实现宽字符日志记录示例
  3. boost::function模块boost::lambda::bind用法的测试程序
  4. ITK:迭代图像中的区域,而无需写访问权即可访问索引
  5. VTK:IO之ReadLegacyUnstructuredGrid
  6. VTK:几何对象之PolygonIntersection
  7. C语言实现TCP网络通信(附服务端和客服端完整源码)
  8. QT的QThread类的使用
  9. C语言三种常见排序算法
  10. c语言 题目 猜算式,蓝桥杯竞赛题目(猜算式)