FPGA之FIFO学习心得

FIFO

FIFO:

中文意思:先进先出【类似于堆栈】

作用:

在FPGA中,一般用于不同时域之间的数据传递,比如FIFO的一端是AD采集,另一端是计算机PCI总线,假设AD的采集速度一般都是几百Kb/s,PCI总线的速度为200Mb/s,在这俩个的时域中传递数据时就可以采用FIFO来作为数据缓冲。同时FIFO还可以作为不同数据宽度之间的传递FIFO也是可以胜任的,比如UART收到的数据传递给USB。UART收到的数据是8位的数据,USB传递的16数据,如果之间传递,他们是不同的时域,传输的速度也是不一样的,为了解决这个我们可以使用FIFO,

将读写时钟配置为rd_clk、wr_clk;

读写数据宽度 配置写8位数据,读16位数据;

同时我们根据需求还可以选择对应标志位,使能位有效时间等。

分类:

FIFO的类型及FIFO说明:

根据数据出现在输出总线上的时间不同分为不同的种类。

普通FIFO:每次在使能位有效的情况下,读时钟和写时钟的上升沿来时,将数据读出  来,一个时钟一个数据。

预取FIFO:写时同普通FIFO一样,读时数据提前输出到总线上,比普通FIFO早一个时钟。

FIFO的生成:

同其他的IP生成是一样的,我们选择对应的IP核后,会有对应的配置向导,根据向导选择对应的参数。

简单的步骤就省略掉了。

我们命名好了FIFO的名字后,就来到以下的界面,接下来我们要进行一些相应的配置。

1关于interface的选择,【百度的,】native是做soc工程

Next后,需选择时钟和存储类型。

1,时钟:一般根据FIFO的作用,读写时钟是不同步。

2,存储类型:有block RAM 和 distibute RAM两种。

【百度】由此区别表明,当FIFO较大时应选择block RAM,当FIFO较小时,选择distribute RAM.另外一个很重要的就是block RAM支持读写不同宽度,而distribute不支持。在这里为了更全面的了解FIFO,选择block RAM以拥有非对称方向速率的特性。

FIFO读写模式:

标准模式和预取模式。通常我们选择标准模式,至于预取FIFO的作用目前还没有遇到。

我们选择位宽和深度后,地址自动就生成了。

data port parameters 中的actual write depth和actual read depth

我们设置完时钟和数据后,就该添加控制信号了

控制信号越多操作越复杂,同时对FIFO的控制更加精准了

1、标志位,半空和半满

2、……

复位信号和可编程信号的配置。虽然在block RAM和distribute RAM中,启用rst端口,且配置成同步复位,即整个FIFO共用一个复位信号,而不是读写不同的复位。至于编程信号,看选项就很容易理解了。配置如图,FIFO中数据达到200时,programmable full有效,数据为10时,programmable empty有效。

之后是写计数和读计数,都使之有效,由于写深度是256,读深度是512.因此写计数器的宽度定义为8,读计数器的狂度定义为9.其实不一定计数器一定要比深度大,当计数器计数最大值小于数据深度时,例如数据深度为512,而计数器大小为256,则每两个数据计数器计数一次。

最后可以看到我们配置的FIFO信息如下(注意几个关键信息),最后生成IP就好了。

【有效电平】

Rst 高电平有效

复位后(2,3)个周期内是无法进行写操作的;

Wr_en 在拉高的上升沿时,数据立即生效

Rd_en 在读上升沿并没有进行读数据,而是在下一个上升沿时进行读操作

关于计数,如果计数值设置的不够大时一开始就会失效,成为高阻状态。

读写计数是大概不准.

上升沿是时钟上升沿 不是wr_en 和rd_en的上升沿, 【信号触发后clk的上升沿生效】

空满标志有效电平是?高有效

仿真结果图

时间: 2024-08-03 16:41:05

FPGA之FIFO学习心得的相关文章

Linux系统理解以及Linux系统学习心得

原创作品转载请注明出处  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 作者:严哲璟 说一下我对Linux系统的理解 1.加载Linux内核准备:在加载基本输入输出模块(BIOS)之后,从磁盘的引导扇区读入操作系统的代码文件块到内存中,之后开始整个系统的初始化. 2.main.c的start_kernel函数是整个操作系统的入口,这也与Linux是基于C语言的特性相符,start_kernel具体做的动作很多

同步FIFO学习笔录--

同步FIFO学习 1.撰写缘由 这几天在初步学习verilog,学习到了同步FIFO,写点东西记录一下,写写心得体会和大家一起交流学习,中间有不对的地方希望大家能多多包涵,欢迎指正,共同进步.学习时主要参考:https://www.cnblogs.com/SYoong/p/6108780.html,感谢大神的分享.本文与参考有些不同,其中我自己认为有些需要改动的地方,若不对,多多指正.其实同步FIFO在实际中应用很少,应用多的还是异步FIFO,不过作为一个新手拿来练习练习感觉是很不错的. 2.什

我的MYSQL学习心得(八)

我的MYSQL学习心得(八) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL学习心得(六) 我的MYSQL学习心得(七) 这一篇<我的MYSQL学习心得(七)>将会讲解MYSQL的插入.更新和删除语句 同样的,只会讲解跟SQLSERVER不同的地方 插入 将多行查询结果插入到表中 语法 INSERT INTO table_name1(column_list1) SELECT (

我的MYSQL学习心得(一)

我的MYSQL学习心得(一) 使用MYSQL有一段时间了,由于公司使用SQLSERVER和MYSQL,而且服务器数量和数据库数量都比较多 管理起来比较吃力,在学习MYSQL期间我一直跟SQLSERVER进行对比 第一期主要是学习MYSQL的基本语法,陆续还有第二.第三.第四期,大家敬请期待o(∩_∩)o 语法的差异 我这里主要说语法的不同 1.默认约束 区别:mysql里面DEFAULT关键字后面是不用加括号的 --sqlserver CREATE TABLE emp ( id INT DEFA

在马哥linux运维学院学习心得

题目:在马哥linux运维学院学习心得 姓名:谭龙 班级:M18 学号:26 时间:2016-02-29--2016-06-02(正常毕业时间预计在7月中上旬)   正文: 个人基本情况: 我是一名在校的即将毕业的大四学生,毕业时间为2016.7.专业为矿物加工工程专业,纯正的四川-广安人(邓小平故居就在那).因找不到工作,加上自己也不知道干什么,在堂弟的推荐下,来参加了马哥linux运维学院的学习:怀揣着一颗对计算机懵懂的心,开始涉足从未接触过了linux. 个人收获与心理变化: 在一开始接触

第一篇大数据学习心得

之前未习惯发布学习心德博文,后续会采用这种方式发布学习心得,希望能够很好的督促自己. 计划会按scala,Hadoop,Spark的顺序去学习. 刚学scala的时候,眼前一亮,这语法跟python,java很像啊,刚好两者很熟悉,偷笑,后面果然学的得心应手.今天就不发表具体的技术内容.反正王学林老师的视屏讲解很好,声音非常富有感染力,想开小差都比较难,呵呵,话语精炼,个人较喜欢的风格,这里说下这段时间学习scala的小心得?,视频学完一章紧接着进行敲代码,调试,最后记笔记,对,记笔记,不一定是

spring核心知识(学习心得)

直接进入主题,主要分为两大部分:框架学习心得和spring框架的核心知识. 学习心得 1.学习框架的时候,一定要弄清楚的几个问题: a. 这是一个什么框架 轻量级还是重量级, 侵入式还是非侵入式,是解决单个问题还是整体的解决方案. b. 框架的设计理念是什么(为了解决什么问题而出现) c. 框架的优缺点 d. 框架的架构是怎样的 e. 框架的核心是什么 f. 框架能实现哪些功能 在学习一个框架的时候如果都不知道它能够提供哪些功能,就更加不用谈功能实现和充分利用框架了 2. 在学习多个框架以后,如

C++用法的学习心得

c++这门课,在我刚进入大学的就已经开始接触了.因为自己的专业就是计算机科学,因此c++嘛,对于我来说还是比较重要的.不同于其他专业,一开始我接触就是c++了,跳过了c语言一类的课.就我自己认为,c++这课学起来还是很有难度的.大一上课的时候,老师就说过这课在生活中的应用很广泛.处于初学者的我,开始给我的感觉就是很是乏味枯燥,提不起兴趣.不过仔细想想自己的专业就是和它有关,就算将来自己不从事这个行业,还是很有学习它的必要.因为多一门技术总归是不会吃亏的. 作为男生嘛,自己没有少玩游戏.很多人玩游

Android学习心得(16) --- Dex文件结构实例解析(2)

我在博客上发表一些我的Android学习心得,希望对大家能有帮助. 这一篇我们讲述一下通过一个实例来分析dex文件结构和组成. 参考Leb128数据类型 Android学习心得(5) --- dex数据类型LEB128 参考实例分析学习理解dex文件结构Android学习心得(15) --- Dex文件结构解析(1) 参考baksmali工具使用Android学习心得(4) --- MAC下smali文件编写与运行 1.编译 我们通过一个例子来分析dex文件的构成 创建一个Hello.java文