LATTICE 存储之FIFO的使用
坑,,以后填
对于Lattice 的 FIFO 存储器分为两种,见下图:

这两个的主要区别是一个后面加DC一个不加,那这个DC是什么意思呢??DC这里是Dual Clock的意思,也就是双时钟的意思,那意思就很明显了,另一个是单时钟;更本质的可以说单时钟是同步FIFO的意思,双时钟是异步FIFO的意思。
同步FIFO:
一、先看datasheet
显示端口说明:

没有输出寄存器时的写操作,可以看出,写操作是在clk的上升沿的时候将 写请求使能有效且写数据准备好即可。写入数据之后empty就会被拉低。


上图显示写满之后再写数据就无效了。
读时序:

上图可以看出,在写使能有效的一个时钟周期之后数据才送出Q端口。

当最后一次读取数据的时候,empty信号会被拉高,然后一个时钟周期之后数据从Q端口送出。
在输出端口使能了输出寄存器之后,对FIFO的写操作没有影响,只是对读操作有影响,具体影响是:在原来的基础上又延时了一个时钟周期。

最后需要注意的是:

这个操作和生成FIFO的设置有关系。
现在就看FIFO生成的时候的设置吧:
首先是名字和路径以及语言的选择,直接跳过。
打开后界面如下:

界面设置也很简单, 先是FIFO的类型,默认即可;地址深度就是存多少个数据,这里深度只能是2的幂即2的n次方;数据宽度可以任意选择,默认输入和输出的深度宽度是一样的。Enable output reg选项就是使能输出寄存器选项,选择之后就是输出端数据延时两个时钟周期输出。
Controlled by RdEN 选择时候,读取的时候时序图就是上面最后一个时序图的时候。
设置输入满,输出空的阈值;设置显示内部数据个数。
最后选择左下端的Import IPX to Diamond project 选项之后,生成的FIFO文件会直接加入到工程里面去。
同步FIFO就到这里。
异步FIFO
异步FIFO与同步FIFO有所不同,
先是端口:

可以看出它有两个时钟,但是本质其实和同步FIFO相似,可以看做为两个同步FIFO,在不同的时钟驱动下一个只进行读操作,一个只进行写操作,读写单独操作互补影响,这里不做时序图的介绍和记录了,直接看生成时候的设置界面。

可以看到 上图两个红色方块内是两个不同之处,上面是读和写操作都要设置FIFO的存储深度和数据宽度。 而且深度要是2的幂。
最重要的是要确保输入的深度乘以数据宽度要等于输出的 深度乘以数据的宽度。否则生成不了FIFO。
下面方框内是数据的计数,读写数据分别计数。在写数据的计数增加之后,读数据的计数也会在读时钟作用下相应的增加。
LATTICE 存储之FIFO的使用的更多相关文章
- FPGA FIFO深度计算
转自:http://comm.chinaaet.com/adi/blogdetail/37555.html 首先,一定要理解清楚FIFO的应用场景,这个会直接关系到FIFO深度的计算,如果是面试官抛出 ...
- 基于FPGA的图像去噪
目录 结构图 其中FPGA 控制模块为核心,通过它实现视频图像数据的获取.缓存.处理和控制各模块间通讯[1].由CCD 相机对目标成像,高速图像数据由camera link 实时传输[2],经信号转换 ...
- Java知识总结
...
- STM32驱动MPU6050
轴 MEMS轴 MEMS 加速度计,以及一个可扩展的数字运动处理器 DMP(Digital Motion Processor),可用 I2C 接口连接一个第三方的数字传感器,比如磁力计.扩展之后就可以 ...
- OSX 鼠标和键盘事件
本文转自:http://www.macdev.io/ebook/event.html 事件分发过程 OSX 与用户交互的主要外设是鼠标,键盘.鼠标键盘的活动会产生底层系统事件.这个事件首先传递到IOK ...
- 《k8s 源码分析》- Custom Controller 之 Informer
Custom Controller 之 Informer 概述 架构概览 reflector - List & Watch API Server Reflector 对象 ListAndWat ...
- 数组/Array/Tuple/yield
数组 如果需要使用同一类型的多个对象,就可以考虑使用集合和数组.如果需要使用不同类型的多个对象,可以考虑使用Tuple(元组) 数组的声明 在声明数组时,应先定义数组元素中的类型,其后是一对空方括号和 ...
- 基于FPGA的1553B通信模块的设计(转)
reference:http://www.21ic.com/app/eda/201808/798483.htm https://www.milstd1553.com/ [导读] 摘 要: 提出一种将F ...
- ETH—Lwip以太网通信
第39章 ETH—Lwip以太网通信 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...
随机推荐
- JS中的进制转换以及作用
js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现: //10进制转为16进制 ().toString() // =>&q ...
- springMVC文件上传
参考的地址:http://www.tuicool.com/articles/nMVjaiF 1.需要使用的jar. commons-fileupload.jar与commons-io-1.4.jar二 ...
- 高版本api在低版本中的兼容
直接上例子,看如何避免crash. eg:根据给出路径,获取此路径所在分区的总空间大小. 文档说明:获取文件系统用量情况,在API level 9及其以上的系统,可直接调用File对象的相关方法,以下 ...
- 正则表达式之g标志,match和 exec
1.g标志 g标志一般是与match和exec来连用,否则g标志没有太大的意义. 先来看一个带g标志的例子: var str = "tankZHang (231144) tank yi ...
- ES5语法
ES5新语法主要是体现在Object和.Array操作,同时涉及到JSON. Function.Date 和 String类型上. 1.Object ES5最大的特点是对象扩展很多方法. 新建对象:c ...
- JavaScript中getBoundingClientRect()方法详解
获取浏览器滚动的高度: scrollTop=document.documentElement.scrollTop || document.body.scrollTop getBoundingClien ...
- HTML5学习笔记(持续更新中....)
平时的工作中,不知不觉我们应用了很多HTML5,但当正儿八经问起来你对HTML5了解多少,很多时候都有点懵. 做个简单的HTML5总结.包括简介.要学的知识点.凌乱的知识点 HMTL5简介 定义:ht ...
- Redis学习笔记7--Redis管道(pipeline)
redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常会阻塞并等待redis ...
- UIScrollView无法滚动的解决办法
如果UIScrollView无法滚动,可能是以下原因: 没有设置contentSize scrollEnabled = NO 没有接收到触摸事件:userInteractionEnabled = NO ...
- 《征服 C 指针》摘录4:函数 与 指针
一.指向函数的指针 函数名可以在表达式中被解读成“指向函数的指针”,因此,正如代码清单 2-2 的实验那样,写成 func 就可以取得指向函数的指针. “指向函数的指针”本质上也是指针(地址),所以可 ...