Altera的单时钟同步FIFO,带empty和full端口
相关文章:
1.Altera的单时钟同步FIFO,带almost_empty和almost_full端口https://blog.csdn.net/qq_39485231/article/details/105345164
2.Altera的单时钟同步FIFO,带empty和full端口https://blog.csdn.net/qq_39485231/article/details/105351146
3.Altera的异步FIFO,读写用同频不同相时钟https://blog.csdn.net/qq_39485231/article/details/105352597
4.Altera的异步FIFO学习心得https://blog.csdn.net/qq_39485231/article/details/105364241
Altera的单时钟同步FIFO,带empty和full端口
- 程序
- 单时钟同步FIFO,带empty和full端口
- 1. full置位时
- 2. empty置位时
- 3. 总结
程序
程序可以参考我的另外一篇文章: Altera的单时钟同步FIFO,带almost_empty和almost_full端口
只需要修改一下顶层文件的端口连接,和删除FIFO的部分接口。
单时钟同步FIFO,带empty和full端口
首先让Quartus根据我们的需要生成FIFO
1. full置位时
这里我们来看用ModelSim仿真的结果:
可以从图中发现当usedw等于0后,立马把full置位。置位一个时钟周期后,wrreq被拉低,rdreq被拉高,这也与程序的定义吻合。
大家可以发现一个问题,当usedw记到255之后,再写入一个就变成0了,这也是FIFO的特点。想知道详细的原因可以查阅相关资料。在仿真图可以看到当usedw为0,即FIFO写满后,wrreq还持续了一个T,所以这个时候仍然在写入,但是数据是没有写进去的。这也是为什么有almost_empty和almost_full端口的意义
2. empty置位时
这里我们来看用ModelSim仿真的结果:
可以从图中发现当usedw等于0后,立马把empty置位。置位一个时钟周期后,wrreq被拉高,rdreq被拉低,这也与程序的定义吻合。
大家可以发现一个问题,在仿真图可以看到当usedw为0,即FIFO读空后,rdreq还持续了一个T,所以这个时候仍然在读出,数据是保持上次的输出值,但其实这个时候读出的是无效数据,因为FIFO已经空了。
3. 总结
- 单时钟同步FIFO在读写时都有一个时钟周期延时,即wrreq置位后不能立马写入数据,一个T后,数据才会成功写进FIFO;当rdreq置位后不能立马读出数据,一个T后,数据才会成功从FIFO中读出,可以发现和RAM的机制类似。
- usedw和写入、读出数据是同步更新的,当读出最后一个数据,usedw同时也复位为0,写入时同理。当FIFO写满时usedw是为0的,当FIFO读空时,usedw也是0,但两个0代表值不同.
- 这个程序在读数据时,当读空FIFO之后还多读了一个T,这个读出是错误的数据; 这个程序在写数据时,当写满FIFO之后还多写了一个T,此时数据并没有写入。
解决办法1:添加almost_empty和almost_full端口,用这两个端口控制起始,而不用empty和full信号!!!以后写程序尽量都用almost_empty和almost_full端口
解决办法2:直接用usedw来控制,虽然和almost_empty和almost_full的机制一致,但是各有优缺点,根据不同的场合进行选择。
以后写程序不用empty和full信号控制FIFO的读写起始 - 在向FIFO写数据时,他的输出端q会保持最后一次输出的值。
- full置位是在FIFO写满,usedw变为0的时刻,此时记满溢出;empty置位是在FIFO读空,usedw变为0的时刻。
Altera的单时钟同步FIFO,带empty和full端口相关推荐
- 同步(单时钟)、异步(双时钟)FIFO的Verilog HDL实现(含Testbench仿真代码)
目录 一.FIFO的定义和应用场景 二.FIFO的结构 三.FIFO的应用场景 3.1 单时钟(同步)FIFO 3.2 双时钟(异步)FIFO 四.FIFO的结构 五.FIFO常见参数 六.实现 FI ...
- 7 centos 时钟跟物理机同步_同步FIFO和异步FIFO
1.定义 FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出 ...
- 基于 FPGA 的高级数字电路设计(7)单口 RAM、同步 FIFO、异步 FIFO 设计
一.单口 RAM 设计 module BRAM_PORTA( input clka, input ena, input wea, input [3:0] addra, input [15:0] din ...
- 跨时钟域方法(同步器、异步FIFO、边沿检测器、脉冲同步器、同步FIFO)
目录 1.跨时钟域方法的原因 2.跨时钟处理的两种思路 3.跨时钟域分类--单比特信号跨时钟 3.1.1慢时钟---快时钟.(满足三边沿准则,有效事件可以被安全采样) 3.1.2慢时钟---快时钟.( ...
- 数字IC设计系列----单端口RAM、双端口RAM、同步FIFO、异步FIFO
目录 一.单端口RAM原理及实现 1.1.原理 1.2.Verilog实现 1.3.优缺点分析 2.双端口RAM原理及实现 2.1.原理 2.2.Verilog实现 2.3.优缺点分析 ...
- 跨时钟域信号处理(二)——异步fifo的Verilog实现(附同步fifo的实现)
需要回答几个问题: 1.什么是异步FIFO,异步FIFO有什么功能? 跨时钟域的数据交换,防止亚稳态. 2.在产生写满与读空信号时需要进行跨时钟域如何做的,且如何能正确指示空满状态? 寄存器打两拍+格 ...
- 同步FIFO和异步FIFO的Verilog实现
FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据, 其 ...
- FPGA基础知识极简教程(3)从FIFO设计讲起之同步FIFO篇
博文目录 写在前面 正文 FPGA/ASIC中的FIFO 同步FIFO的设计 参考资料 交个朋友 写在前面 个人博客首页 注:学习交流使用! 正文 FPGA/ASIC中的FIFO FIFO缓冲区如何用 ...
- 同步fifo与异步fifo
参考以下帖子: https://blog.csdn.net/hengzo/article/details/49683707 https://blog.csdn.net/Times_poem/artic ...
- 同步FIFO和异步FIFO
1.定义 FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出 ...
最新文章
- 小手段:开启 GNOME 的窗口分组效果
- Debian 下如何安装 Java
- 05 Linux快速安装 Oracle11g
- [安全攻防进阶篇] 七.恶意样本检测之编写代码自动提取IAT表、字符串及时间戳溯源
- function click_click事件的累加问题解决
- C#中的引用传递、值传递
- 面试官:Java为什么只有值传递?
- Linux工作笔记032---Centos7.3/8.2 下安装mysql_不局限于MySql版本
- Eclips下运行helloworld,弹出手机模拟器上什么也没有
- 雷林鹏分享:PHP 表单 - 验证邮件和URL
- Linux - ZModem协议的sz命令传输文件异常
- android微信朋友圈相册背景,微信朋友圈相册背景多大尺寸合适
- android水下气泡,科学网—水下爆炸气泡的基本现象及规律 - 黄超的博文
- 细胞自动机_细胞自动机和音乐
- 对焦(调焦),变焦区别
- 外汇天眼:开仓、平仓、持仓、锁仓是什么意思?
- 拉丁超立方——样本点空间转换
- 5个值得关注的L1公链
- java根据前序和中序建树_(Java实现)二叉树---根据前序、中序、后序数组还原二叉树...
- FastFDS----分布式文件服务系统服务端搭建
热门文章
- 银行理财产品的十个坑
- 【荣耀内推】2023届荣耀校招开启啦
- 笔记本实现共享wifi上网
- 笔记本电脑设置WiFi共享
- 一分钟让你了解蓝桥杯(电子类)单片机比赛规则
- Windows“控制面板”在哪?win10怎么打开控制面板(快捷方法)打开控制面板的多种方法都在这里
- 鸢尾花完整的python代码_带“鸢”的诗句大全
- CDH踩坑记录之:熵不足
- 广东迅视资管 “亦庄智造”填补国内高速棒材技术空白
- 海龟作图python等边三角形_python 海龟作图