同步fifo的Verilog实现】的更多相关文章

FIFO是一种先进先出的数据缓存器,他与普通存储器相比: 优点:没有外部读写地址线,这样使用起来非常简单: 缺点:只能顺序写入数据,顺序的读出数据, 其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址. 根据FIFO工作的时钟域,可以将FIFO分为同步FIFO和异步FIFO.同步FIFO是指读时钟和写时钟为同一个时钟.在时钟沿来临时同时发生读写操作.异步FIFO是指读写时钟不一致,读写时钟是互相独立的. FIFO设计的难点在于怎样判断FIFO的空/…
参考以下帖子: https://blog.csdn.net/hengzo/article/details/49683707 https://blog.csdn.net/Times_poem/article/details/51917648 https://www.cnblogs.com/aslmer/p/6114216.html https://www.cnblogs.com/ylsm-kb/p/9068449.html https://blog.csdn.net/Pieces_thinking…
Part 1,功能定义: 用16*8 RAM实现一个同步先进先出(FIFO)队列设计.由写使能端控制该数据流的写入FIFO,并由读使能控制FIFO中数据的读出.写入和读出的操作(高电平有效)由时钟的上升沿触发.当FIFO的数据满和空的时候分别设置相应的高电平加以指示.FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成…
感谢 知乎龚大佬 打杂大佬 网上几个nice的博客(忘了是哪个了....) 前言 虽然FIFO都有IP可以使用,但理解原理还是自己写一个来得透彻. 什么是FIFO? Fist in first out.先入先出的数据缓存器,没有外部读写地址线,可同时读写. 规则:永远不要写一个已经写满了的fifo. 永远不要读一个读空了的fifo. FIFO种类? 同步FIFO和异步FIFO. 同步FIFO只有一个时钟,也就是说写端和读端的时钟是一毛一样的. 异步FIFO读端和写端两个时钟则是不一样的.包括同频…
在网上找的一个经典同步FIFO例子. 一.前言 FIFO (First-In-First-Out) 是一种先进先出的数据交互方式,在数字ASIC设计中常常被使用.FIFO按工作时钟域的不同又可以分为:同步FIFO和异步FIFO. 同步FIFO的写时钟和读时钟为同一个时钟,FIFO内部所有逻辑都是同步逻辑,常常用于交互数据缓冲.异步FIFO的写时钟和读时钟为异步时钟,FIFO内部的写逻辑和读逻辑的交互需要异步处理,异步FIFO常用于跨时钟域交互. 本文介绍同步FIFO的典型设计方法. 二.原理 典…
一.前言 应聘IC前端相关岗位时,FIFO是最常考也是最基本的题目.FIFO经常用于数据缓存.位宽转换.异步时钟域处理.随着芯片规模的快速增长,灵活的system verilog成为设计/验证人员的基本功.本文从简易版的同步FIFO开始,熟悉IP设计与验证的基础技能. 二.IP设计 FIFO这一IP核已经相当成熟,因此网上资料也是一抓一大把.其中笔者认为较好的一个在文末附录中,需要详细了解FIFO工作原理的朋友可以仔细看看.这里简单介绍下本文设计FIFO的原理与结构.FIFO的内部存储单元是常见…
原创 设计一个fifo,输入16bit,输出16bit的data,寻址宽度5bit,有空满标志. top 层如下所示: /* date : 2014/10/14 version : modelsim 10.1e-altera design : pengxiaoen function : 同步fifo设计 */ module test2 ( clock , reset, in_data , ou_data , wr_full , rd_empty , wr_en , rd_en ); input…
这几天看了Clifford E. Cummings的两篇大作<Simulation and Synthesis Techniques for Asynchronous FIFO Design>and <Simulation and Synthesis Techniques for Asynchronous FIFO Design with Asynchronous Pointer Comparisons>颇有感想,真可谓经典之作,不可错过. 1.什么是FIFO? FIFO是英文Fi…
1. 输入端, 输入信号, i_vld,表示输入请求写同步fifo,如果fifo不满,则fifo发送i_rdy 到输入端,开始写fifo.i_vld和i_rdy是写握手信号. 2.输出端 o_rdy表示接受端已经准备好了,可以读取fifo,o_vld表示fifo准备好了,不为空,可以输出到接收端.o_rdy和o_vld是握手信号. 3.如果fifo是深度为0,则是bypass模式,只要请求写,就直接准备输出,所以 assign o_vld = i_vld; assign i_rdy = o_rd…
上一篇文章解读了CYPRESS FX3的GPIO的操作过程,下面解读同步FIFO的一个例子(slaveFifoSync). *生产者,消费者. 1.首先看DMA的回调函数(cyu3dma.h): typedef void (*CyU3PDmaCallback_t) ( CyU3PDmaChannel *handle,     /* Handle to the DMA channel. */ CyU3PDmaCbType_t type, /* The type ofcallback notific…
 一.分析 由于是异步FIFO的设计,读写时钟不一样,在产生读空信号和写满信号时,会涉及到跨时钟域的问题,如何解决? 跨时钟域的问题:由于读指针是属于读时钟域的,写指针是属于写时钟域的,而异步FIFO的读写时钟域不同,是异步的,要是将读时钟域的读指针与写时钟域的写指针不做任何处理直接比较肯定是错误的,因此我们需要进行同步处理以后仔进行比较 解决方法:加两级寄存器同步 + 格雷码(目的都是消除亚稳态)   1.使用异步信号进行使用的时候,好的设计都会对异步信号进行同步处理,同步一般采用多级D触发器…
异步FIFO简介 异步FIFO(First In First Out)可以很好解决多比特数据跨时钟域的数据传输与同步问题.异步FIFO的作用就像一个蓄水池,用于调节上下游水量. FIFO FIFO是一种先进先出的存储结构,其与普通存储器的区别是,FIFO没有读写地址总线,读写简单,但相应缺点是无法控制读写的位置,只能由内部的读写指针自动加,顺序读写数据.FIFO示意图如下: 图1 如图1所示,输入信号有读写时钟.读写复位信号.读写使能信号.写数据:输出信号有空满信号.读数据. 异步时序电路 异步…
这里记录一个实际的需要使用乒乓操作的例子:读sd卡数据的时,在spi的模式下.发送单数据块的读取命令,在回应之后会有 512字节的数据.使用乒乓操作,可以用两个八位的寄存器,就可以完成连续的512字节读入fifo.但是如果操作不好的话就会出现位置不对的情况. 上图是读入fifo的数据. 上图是实际的数据.(起始地址为1000h)00h 01h,就是位置不对的地方. 上述结果的代码: assign fifo_data_in = (i == 10'd7) ? data_read_1 : data_r…
最近在写一个异步FIFO的时候,从网上找了许多资料,文章都写的相当不错,只是附在后面的代码都多多少少有些小错误. 于是自己写了一个调试成功的代码,放上来供大家参考. 非原创 原理参考下面: 原文 https://www.cnblogs.com/SYoong/p/6110328.html 上代码: module Asyn_FIFO_tb; ; reg clk_wr; reg clk_rd; reg rst_n_rd; reg rst_n_wr; :] data_wr; reg wr_en; wir…
module scfifo #( , ) ( input clk, input rst_n, input wren, input rden, :] din, :] dout, output full, output empty ); localparam AW = $clog2(ND); // Memory Registers :] mem[ND-:]; :] wadr, radr; reg wr_full; reg rd_empty; // Write Memory Data always@(…
FIFO 很重要,之前参加的各类电子公司的逻辑设计的笔试几乎都会考到. FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据, 其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址. FIFO一般用于不同时钟域之间的数据传输,比如FIFO的一端是AD数据采集, 另一端是计算机的PCI总线,假设其AD采集的速率为…
转自http://ninghechuan.com 异步FIFO有两个异步时钟,一个端口写入数据,一个端口读出数据.通常被用于数据的跨时钟域的传输. 同步FIFO的设计.一个时钟控制一个计数器,计数器增加(只写不读),计数器减少(只读不写),计数器保持(不写不读).计数器为0时,FIFO空,计数器为你定义的最大值,FIFO为满.貌似较容易设计. 很遗憾的是,异步FIFO并不能用这样的思想,因为异步FIFO有两个时钟,并没有办法控制一个计数器读写操作.只能分开读写计数器,通过比较读写指针的值来判断空…
实验十五:FIFO储存模块(同步) 笔者虽然在实验十四曾解释储存模块,而且也演示奇怪的家伙,但是实验十四只是一场游戏而已.至于实验十五,笔者会稍微严肃一点,手动建立有规格的储存模块,即同步FIFO.那些看过<时序篇>的同学一定对同步FIFO不会觉得陌生吧?因为笔者曾在<时序篇>建立基于移位寄存器的同步FIFO.不过那种同步FIFO只是用来学习的玩具而已.因此,这回笔者可要认真了! 事实告诉笔者,同步FIFO的利用率远胜其它储存模块,几乎所有接口模块都会出现它的身影.早期的时候,笔者…
FIFO,First In First Out ,是一种先进先出的数据缓存器. 没有外部读写地址线,只能顺序写入数据,顺序的读出数据, 其数据地址由内部读写指针自动加1完成. 不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址. FIFO一般用于不同时钟域之间的数据传输,根据工作的时钟域,分为同步FIFO和异步FIFO. 同步FIFO是指读时钟和写时钟为同一个时钟.在时钟沿来临时同时发生读写操作. 异步FIFO是指读写时钟不一致,读写时钟是互相独立的. 同步FIFO `timescal…
FIFO存储器 FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址.  在系统设计中,以增加数据传输率.处理大量数据流.匹配具有不同传输率的系统为目的而广泛使用FIFO存储器,从而提高了系统性能. FIFO参数: FIFO的宽度,the width,指FI…
本文首先对异步 FIFO 设计的重点难点进行分析 最后给出详细代码 一.FIFO简单讲解 FIFO的本质是RAM, 先进先出 重要参数:fifo深度(简单来说就是需要存多少个数据)               fifo位宽(每个数据的位宽) FIFO有同步和异步两种,同步即读写时钟相同,异步即读写时钟不相同 同步FIFO用的少,可以作为数据缓存 异步FIFO可以解决跨时钟域的问题,在应用时需根据实际情况考虑好fifo深度即可 本次要设计一个异步FIFO,深度为8,位宽也是8. 代码是学习Simu…
转自http://ninghechuan.com 我不生产知识,我只是知识的搬运工. Handshake Protocol握手协议!为了保证数据传输过程中准确无误,我们需要加上握手信号来控制信号的传输.本篇文章使用Verilog设计一个简单的Valid-Ready握手协议电路. 为了保持数据的传输,通常使用握手信号.握手协议的原则是: 当Valid和Ready信号同时高有效时,数据在时钟上升沿传输. 本设计可以实现数据的流入和数据的流出,这样一个双端口握手协议通道传输. 对于Valid和Read…
本文首先对异步 FIFO 设计的重点难点进行分析 最后给出详细代码 一.FIFO简单讲解 FIFO的本质是RAM, 先进先出 重要参数:fifo深度(简单来说就是需要存多少个数据)               fifo位宽(每个数据的位宽) FIFO有同步和异步两种,同步即读写时钟相同,异步即读写时钟不相同 同步FIFO用的少,可以作为数据缓存 异步FIFO可以解决跨时钟域的问题,在应用时需根据实际情况考虑好fifo深度即可 本次要设计一个异步FIFO,深度为8,位宽也是8. 代码是学习Simu…
坑,,以后填 对于Lattice 的  FIFO 存储器分为两种,见下图: 这两个的主要区别是一个后面加DC一个不加,那这个DC是什么意思呢??DC这里是Dual  Clock的意思,也就是双时钟的意思,那意思就很明显了,另一个是单时钟:更本质的可以说单时钟是同步FIFO的意思,双时钟是异步FIFO的意思. 同步FIFO: 一.先看datasheet 显示端口说明: 没有输出寄存器时的写操作,可以看出,写操作是在clk的上升沿的时候将 写请求使能有效且写数据准备好即可.写入数据之后empty就会…
FIFO( First In First Out)简单说就是指先进先出的存储方式,在高速外设读取时经常使用. FIFO从读写的时钟可分为同步和异步两种,从信号来说都有读.写使能信号,读.写数据总线,满.空指示信号,当前地址计数器: 1)同步FIFO读写使用同一个时钟,写地址只比读地址高一个地址 2)异步FIFO使用独立的读写时钟,只要保证写地址比读地址高即可 实现方式类似,主要由地址生成模块,当前地址计数器,空满指示信号模块,数据读写模块组成.…
1,名字.FIFO=First in first out. 2,特点.顺序读入,顺序读出,先入先出. 3,用途.数据缓冲.使两个数据传输速率不一样的设备相匹配. 4,参数. ①,THE WIDTH和THE DEEPTH. ②,满标志:FIFO已满或将要满时由FIFO的状态电路送出的一个信号,以阻止FIFO的写操作继续向FIFO中写数据而造成溢出(overflow). 空标志:FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止FIFO的读操作继续从FIFO中读出数据而造成无效数据的读…
一.先入先出队列(First Input First Output,FIFO)这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令. 1.什么是FIFO? FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址. 2.什么情况下用FIFO…
ALTERA在LPM(library of parameterized mudules)库中提供了参数可配置的单时钟FIFO(SCFIFO)和双时钟FIFO(DCFIFO).FIFO主要应用在需要数据缓冲且数据符合先进先出规律的同步或异步场合.LPM中的FIFO包含以下几种: 1.SCFIFO:单时钟FIFO: 2.DCFIFO:双时钟FIFO,数据输入和输出的宽度相同: 3.DCFIFO_MIXED_WIDTHS:双时钟FIFO,输入输出数据位宽可以不同. 配置不细说,直接看时序来理解. 1.…
FPGA Asynchronous FIFO设计思路 将一个多位宽,且在不停变化的数据从一个时钟域传递到另一个时钟域是比较困难的. 同步FIFO的指针比较好确定,当FIFO counter达到上限值时候,FIFO为满,当FIFO counter为0时,FIFO为空. 异步FIFO有writer pointer 和 read pointer两个指针,writer pointer 总是指向下一个要被写入的位置,read pointer 总是指向下一个将被读出的数据.没有必要使用这样一种机制:接受端的…