Verilog中的FIFO设计-同步FIFO篇-异步FIFO篇

【Verilog】同步FIFO原理及verilog实现(参数化) 附verilog源代码及test bench仿真文件。 阅读详情
AI摘要

本文深入探讨异步FIFO的结构,包括写控制、读控制、FIFOMemory和时钟同步组件。重点阐述了空满状态的格雷码判断方法以及跨时钟域的同步策略。通过具体的Verilog代码示例,解释了如何在读写不同时钟下实现FIFO的空满判断,并通过波形图辅助理解时钟同步过程中可能出现的亚稳态问题。

0 写在前面

在上篇文章中,我们介绍了同步FIFO,介绍了FIFO的重要参数,并给出了同步FIFO设计代码,本文将介绍异步FIFO

1 异步FIFO结构

在上篇文章中我们给出了FIFO的基本接口图

并且指出,该图适用于所有的FIFO,这次我们先看看异步FIFO内部的大体框图

异步FIFO主要由五部分组成:写控制端、读控制端、FIFO Memory和两个时钟同步端

写控制端用于判断是否可以写入数据

读控制端用于判断是否可以读取数据

FIFO Memory用于存储数据

两个时钟同步端用于将读写时钟进行同步处理

介绍完内部结构,我们在和基本接口图做个联动

刚才说过,读/写控制端用于判断能否写入/读取数据,判断能否写入/读取数据关键在于:

  • 写操作时,写使能有效且FIFO未满
  • 读操作时,读使能有效且FIFO未空

因此两个使能信号和空满判断信号都连接到控制端上

最后我们再加上时钟信号和复位信号

这便是完整的异步FIFO简化框图

2 空满判断

在同步FIFO篇中,我们给出了两个判断空满状态的图

并且也有指出,读空状态可以理解为读地址指针追上写地址指针,写满状态可以理解为写地址指针再次追上读地址指针

在同步FIFO中,因为读写都是在同一个时钟信号下进行的,因此两个地址指针可以直接进行比较

但在异步FIFO中,读写是在不同的时钟信号下进行的,因此在进行比较之前,应当先进行跨时钟与同步

在时钟同步之前,我们应当先将二进制地址转换为格雷码,因为格雷码相邻的两个状态之间,只有1 bit数据发生翻转

下面给出二进制数与格雷码的对照图

上面也有说到,读指针追上写指针是读空,写指针再次追上读指针是写满,为了便于理解,我们做一个环形图

假设内圈为读,外圈为写,读空时是读写指针应当指向同一个地址,就像这样

此时,读地址应当和写地址完全相同,就以0010为例,0010的格雷码为0011,可以看出对于读空状态,无论是二进制还是格雷码均是所有位都相同

写满和读空略有不同,应当是下面这样

细心的小伙伴应该可以发现,上面在

异步FIFO的设计 verilog 参考:https://mp.weixin.qq.com/s/TR_5imTfUI2-LGbPOE7OkA可能本设计会存在的有一些bug,目前我还没有发现!希望大家对我的设计多多提出批评! 阅读详情

相关推荐

Verilog | FIFO简单实现

FIFO( First Input First Output)简单说就是指先进先出,也是缓存机制的一种,下面是我总结的 FIFO 的三大用途:1)提高传输效率,增加 DDR 带宽的利用率。比如我们有 4 路视频数据缓存到 DDR 中去,比较笨的方法是,每个通道视频数据对应一颗 DDR。现在对于 DDR 来说非常浪费,因为现在的 DDR3 可以跑 1600Mbps DDR4 可以跑到2400Mbps,如果你还是把一路视频数据对应一颗 DDR 显然严重浪费了带宽。

qq_45776815的博客 3405

IC笔试牛客网verilog刷题总结四

在例化双口 RAM 的时候,读写使能 renc/wenc 信号如果只是传入 rinc 和 winc 也能通过题目的波 形测试,但是仔细思考其实不对,此时如果是满的情况下有外部的写使能 winc,虽然写地址不变,但是对于 RAM 来讲写使能还是有效的,会覆盖数据,所以这里的 RAM 写使能信号 wenc = winc && (~wfull),RAM 读使能 renc = rinc && (~rempty),这样才能保证不会在空满情况下对RAM的误操作。在同步FIFO基础上,进行异步FIFO设计。

矜持小梦的博客 679

数字IC笔试题,大疆校招16题(仅供参考)

\\\插播一条:自己在今年整理一套单片机单片机相关论文800余篇论文制作思维导图原理图+源代码+开题报告+正文+外文资料想要的同学私信找我。数字IC笔试题,大疆校招16题(仅供参考)1.异步fifo的深度计算FIFO主要用于异步数据传输之间的数据缓冲。我们选择的FIFO深度应该能够保证在最极端的情况下,依然不会溢出。因此考虑的最坏情况一般都是写时钟频次大于读时钟频次,但是若写操作是不间断的数据流,FIFO都没法保证数据不溢出。能够认为写数据的传输是“突发Burst”的,即写操作并不不间断。从整个时长域上看,

chendanpianji的博客 2392

FIFO设计笔记(双口RAM、同步FIFO、异步FIFO)Verilog及仿真

FIFO (First-In-First-Out) 是一种先进先出的数据缓存器,在数字ASIC设计中常常被使用。在实际开发中,多数都是直接使用公司经过top-out验证的FIFO IP或者是ISE/Vivado工具自带的FIFO IP,并不需要自己造轮子。但是,作为设计者,必须要掌握FIFO的设计方法,这样可以适配于各种类型的FPGA开发板,可以实现国产化。作为求职者,FIFO设计的相关知识在面试环节出现频率极高,需要格外关注。​ FIFO按工作时钟域的不同可以分为:同步FIFO和异步FIFO。

搞IC的小冯 8401

Verilog实现FIFO专题5-异步FIFO设计(异步FIFO工作方式、异步FIFO介绍、异步FIFO介绍)

FIFO根据输入输出时钟是否一致,分为同步FIFO与异步FIFO。本文以异步FIFO与同步FIFO的异同入手,在比较过程中逐步对异步FIFO进行分析,介绍异步FIFO相比于同步FIFO的额外处理,最终实现异步FIFO,并进行了仿真、调试、以及验证

CLL_caicai的博客 6073

同步FIFO与异步FIFO

FIFO一般用于不同时钟域之间的数据传递,FIFO根据FIFO工作的时钟域,可以分为同步FIFO与异步FIFO:同步FIFO是读时钟与写时钟为同一时钟,在时钟上升沿同时发生读写操作。异步FIFO是读写时钟为不同时钟,读写时钟彼此相互独立。 设计关键点:区分读空和写满这两种不同的状态,即FIFO在被写满后不能再写入,从而覆盖原有数据;再被读空后不能再进行读操作,防止读取无效数据。 将FIFO抽象为环...

buzhiquxiang的博客 9636

异步FIFO的设计思路及verilog代码

一:设计要点 1.结构框图 如上图所示的同步模块synchronize to write clk,其作用是把读时钟域的读指针rd_ptr采集到写时钟(wr_clk)域,然后和写指针wptr进行比较从而产生或撤消写满标志位wfull;类似地,同步模块synchronize to read clk的作用是把写时钟域的写指针wptr采集到读时钟域,然后和读指针rptr进行比较从而产生或撤消读空标志位r...

weixin_43067657的博客 6211

Verilog中的FIFO设计-同步FIFO篇

Verilog中的FIFO设计-同步FIFO篇

I_learn_code的博客 3571

嵌入式状态机编程-QP状态机框架与常见状态机方法

状态机基本术语 现态:是指当前所处的状态。 条件:又称为“事件”,当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。 动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。 次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。 传统有限状态机Fsm实现方法 如图,是一个定时计数器,计数器存在两种状态,一种为设置状态,一种为计时状态 设

qq_36969440的博客 9665

麒麟信安3.3-6C电网版虚拟机安装避坑指南:从ISO下载到SSH配置全流程

本文提供麒麟信安3.3-6C电网版虚拟机的详细安装与配置指南。针对电力行业仿真测试需求,重点解析从ISO镜像获取、虚拟机环境准备、安装过程中的三大“雷区”(如多管理员密码逻辑、分区方案、网络配置)到首次启动后的网络、SSH及root策略配置的全流程避坑要点,帮助技术人员高效、安全地完成部署。

rainy的博客 855

避开地图定位偏差!手把手教你用Python实现火星坐标与WGS84精准转换

本文深入解析了国内地图服务中火星坐标(GCJ-02)与国际标准WGS84坐标系之间的偏差问题,并提供了基于Python的精准转换解决方案。文章详细阐述了坐标转换的核心原理,手把手教你构建可复用的转换工具包,并演示如何将其集成到实际应用(如Flask API)中,帮助开发者和数据分析师有效解决地图定位不准、多源数据无法对齐的痛点,提升地理信息处理能力。

weixin_29250403的博客 125

别再为模糊的3D重建头疼了!手把手教你用3DSlicer处理DICOM数据,搞定医学影像三维可视化

本文详细解析了医学影像三维重建中常见的模糊问题,并手把手教你使用3DSlicer处理DICOM数据,实现精准的三维可视化。从层厚设置到数据格式转换,再到重建算法选择和渲染参数微调,提供了一套完整的优化方案,特别适合临床医生和医学影像处理人员提升工作效率。

weixin_28693447的博客 251

3款 433MHz 收发模块对比:SYN480R vs RXB6 vs DL-TX19,实测卷帘门遥控距离

本文深度评测了3款433MHz收发模块SYN480R、RXB6与DL-TX19在卷帘门遥控距离、穿透性能和抗干扰能力等方面的表现。通过实测数据对比,分析了超外差、超再生和PLL锁相环技术的优劣,为智能家居和工业控制领域的无线遥控方案选型提供专业参考。

weixin_30700977的博客 395

EDA公司(一):Synopsys-- 主要 EDA 工具及其简介

Synopsys 是一家领先的电子设计自动化(EDA)软件公司,提供了一系列全面的产品和服务,旨在支持从概念设计到大规模生产的各个阶段。Synopsys 的 EDA 工具覆盖了芯片设计的各个方面,包括但不限于逻辑综合、静态时序分析、功能验证、物理实现、形式验证、测试插入、电源分析、信号完整性分析等。

MHD0815的博客 3311

运维颠覆!一文解锁AI赋能运维实战秘籍,效率飙升!

将AI应用于运维工作是一场极具价值的变革,从故障预测与诊断到自动化任务执行,再到资源管理优化,AI都展现出巨大潜力。尽管在实践过程中会面临数据质量、模型复杂性等挑战,但通过合理的技术选型和解决方案,我们能够充分挖掘AI的优势,实现运维工作的高效、智能转型。持续探索和创新AI在运维领域的应用,将为企业的数字化发展提供坚实保障。在科技飞速发展的当下,运维领域正经历着深刻变革,AI的融入成为提升运维效率与质量的关键。本文将深入实战,带你领略AI如何在运维各环节大显身手,让你的运维工作开启智能高效新模式。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 401

ENVI预处理GF-1号WFV1遥感数据提取NDVI指数

使用ENVI处理GF-1号遥感数据提取NDVI指数

所有专家都曾始于新手 8179

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: Verilog中的FIFO设计-同步FIFO篇
下一篇: VIM的宏操作
行走的BUG永动机
博客等级 码龄7年 61粉丝 54原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值