fifo半满的判断

合集下载

一种读写深度可配置的异步FIFO设计

一种读写深度可配置的异步FIFO设计

引 言
随着设计复杂度 的不断 提高 , 现 代 电子信 息设计 中,
单 一 时 钟 驱 动 已无 法 满 足 设 计 与 应 用 的 需 求 。 基 于 多 时 钟 驱 动 的设 计 已经 越 来 越 普 遍 , 在异 步 时钟域 的设计 中,
Байду номын сангаас
模 块 和读 地址 逻 辑 模 块 是 两 个 相 互 独 立 的 时 钟 域模 块 。 F I F O的空/ 满状态 的 判断 是 F I FO 设 计 中 的 一 个 关 键部分 , 主要 通 过对 读 / 写地 址 的 比较 来 实 现 。鉴 于 读 / 写
状态标 志 的产 生 , 同 时 通
F I F O 的存 储 资 源 没 有 使 用 , 造 成 硬件 资 源 的 浪 费 。
针对这一现状, 本 文 提 出 一 种 读 写 深 度 可 配 置 的 FI F O 设 计 。通 过 对 寄 存 器 的配 置 , 来设定产生有效 F I F O
地 址 的控 制 逻 辑 分 别 工 作 在 各 自 的 时 钟 域 下 , 进 行 比 较
时, 通常将二进制码 的地址 转换 为格雷 码 的编码 方式 , 传 输 到 异 步 时 钟 域 再 进 行 比较 , 以使 亚 稳 态 的 产 生 处 于 可 以
跨 时钟 域 数 据 信 号 传 输 是 必 须 考 虑 的 一 个 问题 。控 制 信 号一般使用握手协议来 实现异步传输 , 对 于 异 步 时 钟 域 大
态时就开始读操作 , 防 止 写 满 后 禁 止 写 操 作 再
图 1 通用异步 F l F O原 理 结构 图
进 行 读 取 造 成 数 据 的 丢失 。
敬请登录网站在线投稿

基于ram的FIFO

基于ram的FIFO

利用veril og实现FIFO摘要:本文先介绍了一下关于FIFO的基本概念,工作原理,功能,同步与异步的分类等。

然后基于RAM实现了一个同步FIFO。

该FIFO通过巧妙地应用地址位和状态位的结合实现对空、满标志位的控制。

从而减小了设计的复杂度。

关键词:FIFO,同步,仿真,quartus。

1.FIFO简介FIFO (First Input First Output) 一种先进先出的数据缓存器,先进入的数据先从FIFO缓存器中读出,与RAM相比没有外部读写地址线,使用比较简单,但只能顺序写入数据,顺序的读出数据,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。

1.1 FIFO的工作原理对于FIFO,读写指针都指向一个存储器的初始位置,每进行一次读写操作,相应的指针就递增一次,指向下一个存储器位置。

当指针移动到了存储器的最后一个位置时,它又重新跳回初始位置。

在FIFO非满或非空的情况下,这个过程将随着读写控制信号的变化一直进行下去。

如果FIFO处于空的状态,下一个读动作将会导致向下溢(underflow),一个无效的数据被读人;同样,对于一个满了的FIFO,进行写动作将会导致向上溢出(overflow),一个有用的数据被新写入的数据覆盖。

这两种情况都属于误动作,因此需要设置满和空两个信号,对满信号置位表示FIFO处于满状态,对满信号复位表示FIFO非满,还有空间可以写入数据;对空信号置位表示FIFO处于空状态,对空信号复位表示FIFO非空,还有有效的数据可以读出。

FIFO设计的难点在于怎样判断FIFO的空/满状态。

为了保证数据正确的写入或读出,而不发生溢出或读空的状态出现,必须保证FIFO在满的情况下,不能进行写操作。

在空的状态下不能进行读操作。

1.2 FIFO的一些重要参数FIFO的宽度:也就是英文资料里常看到的THE WIDTH,它指的是FIFO一次读写操作的数据位,就像MCU有8位和16位,ARM 32位等等。

FIFO的实现范文

FIFO的实现范文

FIFO的实现范文FIFO(First-In-First-Out)是一种常用的数据结构,它的特点是先进先出,就像人们排队等候一样。

FIFO的实现可以通过数组或链表来完成。

1.数组实现FIFO:数组实现FIFO非常简单,可以利用一个数组和两个指针来实现。

一个指针指向队列的头部,即队列中的第一个元素,另一个指针指向队列的尾部,即队列中最后一个元素的下一个位置。

具体实现步骤如下:1)定义一个固定大小的数组,用于存储队列中的元素;2)定义两个变量head和tail,分别表示队列的头部和尾部;3)在入队操作中,首先判断队列是否已满,如果已满则不能入队;否则,将元素添加到tail所指向的位置,并将tail向后移动一位;4)在出队操作中,首先判断队列是否为空,如果为空则不能出队;否则,将head所指向的元素移除,并将head向后移动一位;5)当head和tail指针重合时,表示队列为空。

示例代码如下:```pythonclass Queue:def __init__(self, capacity):self.capacity = capacityself.queue = [None] * capacityself.head = 0self.tail = 0def is_empty(self):return self.head == self.taildef is_full(self):return (self.tail + 1) % self.capacity == self.head def enqueue(self, item):if self.is_full(:return Falseself.queue[self.tail] = itemself.tail = (self.tail + 1) % self.capacityreturn Truedef dequeue(self):if self.is_empty(:return Noneitem = self.queue[self.head]self.head = (self.head + 1) % self.capacityreturn itemdef size(self):if self.tail >= self.head:return self.tail - self.headelse:return self.capacity - self.head + self.tail```2.链表实现FIFO:链表实现FIFO也比较简单,只需要保持链表的头部和尾部指针,并在入队和出队操作时更新这两个指针即可。

FIFO深度计算方法

FIFO深度计算方法

写时钟频率w_clk,读时钟频率r_clk,写时钟周期里,每B个时钟周期会有A个数据写入FIFO读时钟周期里,每Y个时钟周期会有X个数据读出FIFO则,FIFO的最小深度是?计算公式如下:fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk例举说明:如果100个写时钟周期可以写入80个数据,10个读时钟可以读出8个数据。

令wclk=rclk ,考虑背靠背(20个clk不发数据+80clk发数据+80clk发数据+20个clk不发数据的200个clk)代入公式可计算FIFO的深度fifo_depth = 160-160X(80%)=160-128=32如果令wclk=200mhz,改为100个wclk里写入40个,rclk=100mhz,10个rclk里读出8个。

那么fifo深度为48计算如下fifo_depth =80-80X(80%)X(100/200)=80-32=48注:将fifo_depth = burst_length - burst_length * (X/Y) * (r_clk/w_clk) 作个变形,得到fifo_depth = burst_length - (burst_length /w_clk)*[r_clk*(x/y)] 其中(burst_length /w_clk) 表示这个burst的持续时间,r_clk*(x/y)表示读的实际速度。

两者的乘积自然就是这段时间读出的数据量。

显然burst_length表示这段时间写入的数据量,两者的差为fifo中残留的数据,这个也就是理论上的fifo的最小深度。

实际应用中往往是以半空半满信号来指示fifo的空满状态的,所以实际设计fifo的时候会至少留下一个数据空间的深度裕量。

FIFO深度计算讨论(2010-04-15 15:49:00)转载▼标签:杂谈写时钟周期w_clk,读时钟周期r_clk,写时钟周期里,每B个时钟周期会有A个数据写入FIFO读时钟周期里,每Y个时钟周期会有X个数据读出FIFO则,FIFO的最小深度是?首先,这道题不一定有解有解的必要条件是在一定时间内(足够长),写入的数据数量一定要等于读出的数据数量因此有:A/B * w_clk = X/Y * r_clk其次,算出写数据的最大burst_length。

verilogfifo读写详细讲解

verilogfifo读写详细讲解

verilogfifo读写详细讲解FIFO是一种先进先出的数据结构,其全称为First-In-First-Out。

在Verilog中,可以使用以下代码实现FIFO的读写操作。

首先,我们需要定义FIFO的模块。

如下所示:```verilogmodule fifo #(parameter DATA_WIDTH = 8) (input clk, // 时钟信号input reset, // 复位信号input read, // 读使能信号input write, // 写使能信号input [DATA_WIDTH-1:0] data_in, // 输入数据output reg [DATA_WIDTH-1:0] data_out, // 输出数据output reg empty, // FIFO为空信号output reg full // FIFO为满信号);```在FIFO的模块中,我们定义了以下信号:clk表示时钟信号,reset表示复位信号,read表示读使能信号,write表示写使能信号,data_in表示输入数据,data_out表示输出数据,empty表示FIFO为空信号,full表示FIFO为满信号。

在模块的内部,我们可以使用一个或多个寄存器来实现FIFO的功能。

在这里,我们使用两个寄存器data_reg和next_data_reg来存储数据,使用两个计数器empty_count和full_count来记录FIFO的空和满状态。

```verilogreg [DATA_WIDTH-1:0] data_reg; // 数据寄存器reg [DATA_WIDTH-1:0] next_data_reg; // 下一个数据寄存器reg [DATA_WIDTH-1:0] data_out_reg; // 输出数据寄存器reg empty_count; // 空计数器reg full_count; // 满计数器```接下来,我们定义FIFO的行为。

FIFO使用讲解

FIFO使用讲解

上面一页是一个异步FIFO的引脚图。 可以看出分为读、写两个域,由于是异步的,则两个域相 对独立。 下面逐个讲解这个异步FIFO比较重要的引脚 Rst:重置端口。这是一个异步重置信号。它至少要在3个 读写时钟置为高电平,才能完成芯片的重置。当然重置是 指重置所有的内部指针(读写指针等),输出寄存器和内 存(initializes all internal pointers,output registers and memory),要注意输出被重置了(因为指针被重置了), 而不是芯片内存存储的数据被重置了,也就是这个信号并 不会对芯片内部的数据清零。
其实图中的每个信号的小间隔也可以说明这个问题。
由于读操作与写操作是相同的。这里就不熬述。 有上述两个读写操作,可以给我们这样的启示: 在写程序的时候,一定要合理的利用时钟。比如说每个上升 沿进行操作需要一定的时间,可能会有延时,可以利用多个 相同的时钟分别完成操作。另外要合理的利用时钟的上升沿 和下降沿,不能总是利用上升或下降沿,要综合利用。 另外,不同类型的FIFO读写波形会有区别,而且不同的语言 仿真似乎也会有差别
FIFO一些参数
WIDTH:FIFO芯片一次读写的数据位数 DEEPTH:FIFO芯片可以存储多少个WIDTH位的数。注意Xilinx的IP 核FIFO中下标是从0开始的,也就是0代表存储的第一个数,deepth- 1表示最后一个数 读写时钟:这两个时钟可以是相同的,也可以是独立的,依赖于选择 什么样的FIFO类型。每有一次读写时钟,在上升沿都会有一次相应的 读写操作。
这是一个比较经典的读写时钟波形,可以参考。注意,din、wr_en是 在下降沿被改变的,这是一种比较好的设置方法
ቤተ መጻሕፍቲ ባይዱ
Wr_en:写使能信号,写之前应该设置为1. Rd_en:读使能信号,读之前应该设置为1. 注意,以上两个信号的设置有一定的技巧,后面详解 Rst: 清零信号

OTN 中异步 FIFO 的设计与实现

OTN 中异步 FIFO 的设计与实现李赛;蒋林【摘要】针对 OTN(光传送网)电路中传统异步 FIFO(先入先出)的可能故障,提出一种适用于 OTN 电路的异步 FIFO,该异步FIFO 在出现空/满状态后会复位读/写地址,这样就不会影响电路的同时读写功能。

用比较读写地址最高两位的方法来确定接近空或接近满指示信号,更容易判断异步 FIFO 的空/满状态。

测试结果表明,所设计的 FIFO 的空/满复位功能正常,读写速率可达到133 MHz。

%In view of the possible failures of the traditional asynchronous FIFO in OTN circuits,this paper proposes a kind of a-synchronous FIFO suitable for OTN circuits,in which reading/writing addresses will be reset when empty/full emerges in the asynchronous FIFO,without affecting the simultaneous read/write functions of the circuits.It is easier to judge whether the a-synchronous FIFO is in empty or full state by comparing the highest two read/write addresses to determine if the indicator sig-nal close to empty or to full.The test results show that the designed FIFO empty/full resetting function is normal and the read/write rate can reach up to 133 MHz.【期刊名称】《光通信研究》【年(卷),期】2015(000)005【总页数】4页(P55-58)【关键词】光传送网;异步先入先出;空/满复位【作者】李赛;蒋林【作者单位】西安邮电大学电子工程学院,西安710061;西安邮电大学研究生院,西安 710061【正文语种】中文【中图分类】TN402随着带宽流量的飞速增长,基于分组的OTN (光传送网)得到了迅速发展,适合大颗粒传送的OTN应运而生。

什么是ASI指标

什么是ASI指标ASI(Accumulation Swing Index)中文名称:振动升降指标由Welles Wilder所创。

ASI企图以开盘、最高、最低、收盘价构筑成一条幻想线,以便取代目前的走势,形成最能表现当前市况的真实市场线(RealMarket)。

韦尔达认为当天的交易价格,并不能代表当时真实的市况,真实的市况必须取决于当天的价格,和前一天及次一天价格间的关系,他经过无数次的测试之后,决定了ASI计算公式中的因子,最能代表市场的方向性。

由于ASI相对比当时的市场价格更具真实性,因此,对于股价是否真实的创新高或新低点,提供了相当精确的验证,又因ASI 精密的运算数值,更为股民提供了判断股价是否真实突破压力,或支撑的依据。

ASI和OBV同样维持“N”字型的波动,并且也以突破或跌破“N”型高、低点,为观察ASI的主要方法。

ASI不仅提供辨认股价真实与否的功能?另外也具备了“停损”的作用,及时地给投资人多一层的保护。

一.用途:ASI和OBV同样维持“N”字型的波动,并且也以突破或跌破“N”型高、低点,为观察ASI的主要方法。

ASI不仅提供辨认股价真实与否的功能?另外也具备了“停损”的仍用,及时地给投资人多一层的保护。

二.使用方法:1.当ASI向下跌破前一次低点时为卖出讯号,2.当ASI向上突破前一次高点时为买入讯号,3.价由下往上,欲穿过前一波的高点套牢区时,于接近高点处,尚未确定能否顺利穿越之际。

如果ASI领先股价,提早一步,通过相对股价的前一波ASI高点,则次一日之后,可以确定股价必然能顺利突破高点套牢区。

4.股价由上往下,欲穿越前一波低点的密集支撑区时,于接近低点处,尚未确定是否将因失去信心,而跌破支撑之际。

如果ASI领先股价,提早一步,跌破相对股价的前一波ASI低点,则次一日之后,可以确定股价将随后跌破价点支撑区。

5.股价走势一波比一波高,而ASI却未相对创新高点形成“牛背离”时,应卖出。

PCIe8422使用说明书

北京慧孚达科技有限公司多路RS422/485/232通讯接口卡PCIe8422使用说明书现今社会是飞速发展的信息社会,信息技术对社会发展有着深远影响,而数据采集是信息技术的关键环节。

我公司推出的基于PCI总线、PCIe总线、USB总线及嵌入式等数据采集卡综合了国内外众多同类产品的优点,以其使用的便捷、性能的稳定、性价比高,获得了客户的一致好评,是您理想的选择。

第一节、简介PCIe8422是具有PCIe接口的8路422/485/232接口通讯板卡。

接口类型可以配置成RS232、RS422、RS485任意一种,或者RS232/RS422、RS232/RS485复合类型;可以配置为8路RS422异步接口模式,或配置为4路RS422同步接口模式。

灵活的定制方案,极大限度地满足客户的个性化应用要求。

可广泛用于航天测控、工业测控等系统中。

第二节、板卡性能指标总线接口PCIe,总线宽度x1,支持2.5Gbit/S的双向数据传输速度。

RS422数据传输速率可调节,最高可达4Mbps。

RS485/RS232模式支持异步通讯,RS422模式支持异步、同步通讯。

支持用户自定义波特率。

RS422模式收、发独立,全双工工作方式。

通讯接口起始位、数据位、停止位及校验位均可设置。

每一路422/485/232发送及接收通道都对应有2Kbytes FIFO,用于数据缓存。

板卡有16路数字IO,可扩充为外触发信号。

支持外触发,软触发。

数据接收方式支持查询、中断、DMA方式。

数据发送方式可以单次发送,也可连续发送。

可根据用户需求定制传输协议,如发送时添加帧头、帧尾;接收时检测帧头、帧尾等。

第三节、软件支持PCIe8422多路422通讯卡为客户提供丰富的软件支持, 提供集成软件和驱动程序以及编程接口、动态连接库、使用例程等。

第一节、板卡外形第二节、板卡构造说明1:RS422/485/232外部接口(D型头信号定义,J2)RS422_Tn_N 和 RS422_Tn_P构成第n路RS422输出差分对信号。

fifo特点及种类

fifo特点及种类FIFO(First In, First Out)是一种常见的数据结构,也被称为先进先出队列。

它的特点是按照元素进入的顺序进行处理,最先进入的元素会最先被处理。

在计算机科学中,FIFO被广泛用于各种应用场景,如操作系统调度算法、缓存、队列等。

下面将详细介绍FIFO 的特点及种类。

一、FIFO的特点1. 先进先出:FIFO的最大特点就是按照元素进入的顺序进行处理,最先进入的元素会最先被处理。

类似于排队等候服务,先到先得。

2. 插入和删除高效:由于FIFO的特点是按照进入的顺序进行处理,插入和删除操作都是在队列的末尾进行的,因此插入和删除操作非常高效。

3. 可以用于有限空间的存储结构:FIFO可以用于解决有限空间的存储问题,当队列已满时,再插入新的元素会导致队列溢出。

4. 应用广泛:FIFO在计算机科学中有着广泛的应用,如操作系统调度算法中的进程调度、缓存中的置换算法等。

二、FIFO的种类1. 线性队列:线性队列是FIFO的最基本形式,它是一种线性的数据结构,可以使用数组或链表实现。

线性队列的特点是只能在队列的一端进行插入操作,而在另一端进行删除操作。

2. 循环队列:循环队列是线性队列的一种改进形式。

线性队列在进行删除操作时,需要将队列中的元素向前移动,导致效率较低。

而循环队列通过使用循环数组来实现,可以避免元素的移动,提高了删除操作的效率。

3. 阻塞队列:阻塞队列是一种特殊的队列,它在插入和删除操作时具有阻塞的特性。

当队列已满时,插入操作会被阻塞,直到队列中有空位。

当队列为空时,删除操作会被阻塞,直到队列中有元素。

4. 并发队列:并发队列是一种支持并发操作的队列,可以同时进行插入和删除操作。

在并发队列中,插入操作和删除操作可以在不同的线程中同时进行,从而提高了队列的处理效率。

5. 优先级队列:优先级队列是一种按照元素优先级进行处理的队列。

每个元素都有一个优先级,优先级高的元素先被处理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FIFO的半满判断主要依据读和写地址的关系。在异步FIFO中,半满标志w_point地址减去r_point地址的范围在总容量的一半到全满之间。具体判断需要对高
位地址和低位地址分别进行比较。在同步FIFO中,只需判断非空满判断位的那一位,例如对于12bit的信号,可以用第11位作为半满判断。

以上信息仅供参考,如有需要,建议查阅专业书籍或者咨询专业技术人员。
请注意,FIFO的半满判断在不同的设计和应用中可能有不同的实现方式。在实际使用时,需要根据具体的FIFO设计和应用需求来确定如何进行半满判断。

相关文档
最新文档