CN109388370B - 一种实现先入先出队列的方法及装置 - Google Patents

一种实现先入先出队列的方法及装置 Download PDF

Info

Publication number
CN109388370B
CN109388370B CN201710657079.9A CN201710657079A CN109388370B CN 109388370 B CN109388370 B CN 109388370B CN 201710657079 A CN201710657079 A CN 201710657079A CN 109388370 B CN109388370 B CN 109388370B
Authority
CN
China
Prior art keywords
data
fifo
synchronous
read
capacity
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201710657079.9A
Other languages
English (en)
Other versions
CN109388370A (zh
Inventor
代开勇
黄勃
徐科
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sanechips Technology Co Ltd
Original Assignee
Sanechips Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sanechips Technology Co Ltd filed Critical Sanechips Technology Co Ltd
Priority to CN201710657079.9A priority Critical patent/CN109388370B/zh
Publication of CN109388370A publication Critical patent/CN109388370A/zh
Application granted granted Critical
Publication of CN109388370B publication Critical patent/CN109388370B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Communication Control (AREA)

Abstract

一种实现异步先入先出队列(FIFO)的方法及装置,包括:确定数据的读时钟频率和写时钟频率的大小;根据读时钟频率和写时钟频率的大小,对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理。本发明实施例降低了大容量异步FIFO设计的面积。

Description

一种实现先入先出队列的方法及装置
技术领域
本文涉及但不限于集成电路技术,尤指一种实现异步先入先出队列(FIFO)的方法及装置。
背景技术
异步FIFO在专用集成电路(ASIC)设计中有着广泛的应用,主要解决短期读写带宽不匹配和跨时钟域的问题,用于缓存数据,将数据从一个时钟域传递到另外一个时钟域。在设计中使用寄存器(小容量)和双端口随机存取存储器(RAM)来实现,在FIFO存储的比特(bit)少时采用寄存器在面积上有优势,但当FIFO存储bit大到一定程度后,用双端口RAM来实现有面积优势。对于大容量的异步FIFO,相关技术中采用双端口RAM实现,图1为相关技术中实现大容量的异步FIFO的电路组成示意图,如图1所示,采用双端口RAM实现大容量的异步FIFO的电路,其组成包括:写控制A、读控制C、双口RAM B、二进制码转格雷码D和G、格雷码转二进制码F和I,和跨时钟域处理E和H;其中,读控制C和写控制A用于产生读写地址进行读写并产生空满信号提供给外围接口。处理过程包括:有数据输入时,写控制A根据当前FIFO的状态更新写地址并将数据写入双口RAM B;写地址通过二进制码转格雷码D、跨时钟域处理E和格雷码转二进制码F传到读控制C(包括:二进制码转格雷码D将写地址的二进制码转换为格雷码,然后通过跨时钟域处理E进行跨时钟域处理,在读时钟域又将通过格雷码转二进制码F格雷码转换为二进制码),读控制C根据读写地址产生空信号提供给FIFO读接口;同样,将输入的数据通过读控制C从双口RAM中读出时,在读时钟域将读地址由二进制码转换为格雷码,并进行跨时钟域的处理传递到写时钟域;,在写时钟域将读地址由格雷码转换为二进制码,以产生满标志信号。
上述FIFO是一个异步FIFO,由于需要同时进行读写和跨时钟域处理,采用相关技术无法使用面积有优势的单口RAM实现,因此使用了双端口RAM。双端口RAM使大容量异步FIFO面积较大。
发明内容
以下是对本文详细描述的主题的概述。本概述并非是为了限制权利要求的保护范围。
本发明实施例提供一种实现异步FIFO的方法及装置,能够降低大容量异步FIFO的面积。
本发明实施例提供了一种实现异步FIFO的方法,包括:
确定数据的读时钟频率和写时钟频率的大小;
根据读时钟频率和写时钟频率的大小,对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理。
可选的,所述异步FIFO为大容量异步FIFO,所述对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理包括:
当所述读时钟频率大于或等于所述写时钟频率时,对所述大容量异步FIFO进行跨时钟域FIFO处理;对跨时钟域FIFO处理后获得的数据进行大容量同步缓存处理;
当所述读时钟频率小于所述写时钟频率时,对所述大容量异步FIFO进行大容量同步缓存处理,对大容量同步缓存处理后获得的数据进行跨时钟域FIFO处理。
可选的,所述进行大容量的同步缓存包括:
在双倍数据位宽的单口随机存取存储器RAM和预设深度的同步FIFO中,根据数据缓存量进行数据缓存。
可选的,所述进行大容量的同步缓存处理包括:
在所述同步FIFO未满时,将数据写入到所述同步FIFO中;
在所述同步FIFO写满后,对数据进行一拍缓存,在一拍缓存后仍有数据输入时,将输入的数据存储到单口RAM中;
在所述同步FIFO中的数据被读出时,以1个周期写两个数据的吞吐速率将数据从所述单口RAM中读取并写入到所述同步FIFO中;
在无数据输入,而输出端需要读取数据时,以1个周期写两个数据的吞吐量将数据从所述单口RAM中读取并写入到所述同步FIFO中;
在所述单口RAM中的数据被读取完毕,所述同步FIFO中的数据深度出现不满时,若有数据输入,将输入的数据写入到所述同步FIFO中。
另一方面,本发明实施例还提供一种实现异步FIFO的装置,包括:
确定单元和处理单元;其中,
确定单元用于:确定数据的读时钟频率和写时钟频率的大小;
处理单元用于:根据读时钟频率和写时钟频率的大小,对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理。
可选的,所述异步FIFO为大容量异步FIFO,所述处理单元具体用于:
当所述读时钟频率大于或等于所述写时钟频率时,对所述大容量异步FIFO进行跨时钟域FIFO处理;对跨时钟域FIFO处理后获得的数据进行大容量同步缓存处理;
当所述读时钟频率小于所述写时钟频率时,对所述大容量异步FIFO进行大容量同步缓存处理,对大容量同步缓存处理后获得的数据进行跨时钟域FIFO处理。
可选的,所述处理单元用于进行大容量同步缓存处理包括:
在双倍数据位宽的单口随机存取存储器RAM和预设深度的同步FIFO中,根据数据缓存量进行数据缓存。可选的,所述处理单元用于进行大容量的同步缓存处理包括:
在预设深度的同步FIFO未满时,将数据写入到所述同步FIFO中;
在所述同步FIFO写满后,对数据进行一拍缓存,在一拍缓存后仍有数据输入时,将输入的数据存储到单口RAM中;
在所述同步FIFO中的数据被读出时,以1个周期写两个数据的吞吐速率将数据从所述单口RAM中读取并写入到所述同步FIFO中;
在无数据输入,而输出端需要读取数据时,以1个周期写两个数据的吞吐量将数据从所述单口RAM中读取并写入到所述同步FIFO中;
在所述单口RAM中的数据被读取完毕,所述同步FIFO中的数据深度出现不满时,若有数据输入,将输入的数据写入到所述同步FIFO中。
本发明实施例还提供一种计算机存储介质,计算机存储介质中存储有计算机可执行指令,计算机可执行指令用于执行上述实现FIFO的方法。
本发明实施例还提供一种终端,包括:存储器和处理器;其中,
处理器被配置为执行存储器中的程序指令;
程序指令在处理器读取执行以下操作:
确定数据的读时钟频率和写时钟频率的大小;
根据读时钟频率和写时钟频率的大小,对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理。
与相关技术相比,本申请技术方案包括:确定数据的读时钟频率和写时钟频率的大小;根据读时钟频率和写时钟频率的大小,对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理。本发明实施例降低了大容量异步FIFO设计的面积。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。
图1为相关技术中实现大容量的异步FIFO的电路组成示意图;
图2为本发明实施例实现异步FIFO的方法的流程图;
图3为本发明实施例实现异步FIFO的装置的结构框图;
图4为第一应用示例处理单元的结构框图;
图5为第二应用示例处理单元的结构框图;
图6为第三应用示例处理单元的结构框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图2为本发明实施例实现异步FIFO的方法的流程图,如图2所示,包括:
步骤200、确定数据的读时钟频率和写时钟频率的大小;需要说明的是,读时钟频率和写时钟频率可以采用相关技术中已有的方法获得。
步骤201、根据读时钟频率和写时钟频率的大小,对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理。
需要说明的是,本发明实施例可以由技术人员判断读时钟频率和写时钟频率的大小后,通过预先设置的一个接口,选择如何实现对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理。
可选的,本发明实施例异步FIFO为大容量异步FIFO,对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理包括:
当所述读时钟频率大于或等于所述写时钟频率时,对所述大容量异步FIFO进行跨时钟域FIFO处理;对跨时钟域FIFO处理后获得的数据进行大容量同步缓存处理;
当所述读时钟频率小于所述写时钟频率时,对所述大容量异步FIFO进行大容量同步缓存处理,对大容量同步缓存处理后获得的数据进行跨时钟域FIFO处理。
通过上述预先设置的接口可以接收用户选择读时钟频率大于或等于写时钟频率时,进行异步FIFO的处理方法;和用户选择读时钟频率小于写时钟频率时,进行异步FIFO的处理方法。
其中,本发明实施例跨时钟域FIFO处理可以通过寄存器堆来实现,而大容量同步缓存处理可以通过双倍数据带宽的单口RAM采用时分复用来实现。
需要说明的是,跨时钟域FIFO处理的实现可以采用相关技术中已有的实现方法实现。本发明实施例跨时钟域FIFO可以通过寄存器堆实现;跨时钟域FIFO具体可以包括:数据输入时,通过写控制将数据写入寄存器堆,并将写地址进行格雷码转换;将转换获得的格雷码进行跨时钟域处理后进行格雷码转二进制码的处理;读控制根据跨时钟域后格雷码变化得到的写地址和当前的读地址产生空信号,如果寄存器堆非空,将输入的数据从寄存器堆中读出;将输入的数据从所述寄存器堆中读出时,在读时钟域将读地址由二进制码转换为格雷码,并进行跨时钟域处理传递到写时钟域,在写时钟域将读地址由格雷码转换为二进制码,以产生满标志信号。这里,寄存器堆的深度可以由本领域技术人员分析确定,一般的可以设计为深度为16,根据实际应用场景,也可以设计为8。
可选的,本发明实施例进行大容量的同步缓存包括:
在双倍数据位宽的单口随机存取存储器RAM和预设深度的同步FIFO中,根据数据缓存量进行数据缓存。
需要说明的是,本发明实施例可以设置单口RAM和同步FIFO相应的数据传输通道,例如、第一通道和第二通道,通过设置的切换通道切换电路实现第一通道和第二通道的切换;大容量可以由本领域技术人员根据FIFO的应用场景进行分析确定。
本发明实施例,大容量同步缓存根据数据缓存量动态切换存储位置,并分时复用双倍数据位宽的单口RAM来实现大容量的数据同步缓存。
可选的,本发明实施例处理单元用于进行大容量的同步缓存处理包括:
在预设深度的同步FIFO未满时,将数据写入到所述同步FIFO中;
在所述同步FIFO写满后,对数据进行一拍缓存,在一拍缓存后仍有数据输入时,将输入的数据存储到单口RAM中;
在所述同步FIFO中的数据被读出时,以1个周期写两个数据的吞吐速率将数据从所述单口RAM中读取并写入到所述同步FIFO中;
在无数据输入,而输出端需要读取数据时,以1个周期写两个数据的吞吐量将数据从所述单口RAM中读取并写入到所述同步FIFO中;
在所述单口RAM中的数据被读取完毕,所述同步FIFO中的数据深度出现不满时,若有数据输入,将输入的数据写入到所述同步FIFO中。
与相关技术相比,本申请技术方案包括:确定数据的读时钟频率和写时钟频率的大小;根据读时钟频率和写时钟频率的大小,对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理。本发明实施例降低了大容量异步FIFO设计的面积;进一步的,降低大容量异步FIFO设计的面积时,降低了芯片的设计成本。
本发明实施例,将异步FIFO分割为跨时钟域处理部分和大容量同步缓存部分,跨时钟域处理部分采用寄存器堆来实现,而大容量同步缓存部分采用两倍数据位宽的单口RAM分时复用来实现,本发明实施例根据读写时钟快慢决定先做跨时钟域处理再进行大容量同步缓存,还是先进行大容量同步缓存再做跨时钟域处理。本发明实施例降低了大容量异步FIFO设计的面积,降低芯片成本。
图3为本发明实施例实现异步FIFO的装置的结构框图,包括:确定单元和处理单元;其中,
确定单元用于:确定数据的读时钟频率和写时钟频率的大小;
处理单元用于:根据读时钟频率和写时钟频率的大小,对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理。
可选的,本发明实施例
所述异步FIFO为大容量异步FIFO,所述处理单元具体用于:
当所述读时钟频率大于或等于所述写时钟频率时,对所述大容量异步FIFO进行跨时钟域FIFO处理;对跨时钟域FIFO处理后获得的数据进行大容量同步缓存处理;
当所述读时钟频率小于所述写时钟频率时,对所述大容量异步FIFO进行大容量同步缓存处理,对大容量同步缓存处理后获得的数据进行跨时钟域FIFO处理。
其中,本发明实施例跨时钟域处理用寄存器堆来实现,而大容量同步缓存用双倍数据带宽的单口RAM时分复用来实现。
可选的,本发明实施例处理单元用于进行大容量的同步缓存处理包括:
在双倍数据位宽的单口随机存取存储器RAM和预设深度的同步FIFO中,根据数据缓存量进行数据缓存。可选的,处理单元用于进行大容量的同步缓存处理包括:
在预设深度的同步FIFO未满时,将数据写入到所述同步FIFO中;
在所述同步FIFO写满后,对数据进行一拍缓存,在一拍缓存后仍有数据输入时,将输入的数据存储到单口RAM中;
在所述同步FIFO中的数据被读出时,以1个周期写两个数据的吞吐速率将数据从所述单口RAM中读取并写入到所述同步FIFO中;
在无数据输入,而输出端需要读取数据时,以1个周期写两个数据的吞吐量将数据从所述单口RAM中读取并写入到所述同步FIFO中;
在所述单口RAM中的数据被读取完毕,所述同步FIFO中的数据深度出现不满时,若有数据输入,将输入的数据写入到所述同步FIFO中。
与相关技术相比,本申请技术方案包括:确定数据的读时钟频率和写时钟频率的大小;根据读时钟频率和写时钟频率的大小,对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理。本发明实施例降低了大容量异步FIFO设计的面积;进一步的,降低大容量异步FIFO设计的面积时,降低了芯片的设计成本。
本发明实施例,将异步FIFO分割为跨时钟域处理部分和大容量同步缓存部分,跨时钟域处理部分采用寄存器堆来实现,而大容量同步缓存部分采用两倍数据位宽的单口RAM分时复用来实现,本发明实施例根据读写时钟快慢决定先做跨时钟域处理再进行大容量同步缓存,还是先进行大容量同步缓存再做跨时钟域处理。本发明实施例降低了大容量异步FIFO设计的面积,降低芯片成本。
本发明实施例还提供一种计算机存储介质,计算机存储介质中存储有计算机可执行指令,计算机可执行指令用于执行上述实现FIFO的方法。
本发明实施例还提供一种终端,包括:存储器和处理器;其中,
处理器被配置为执行存储器中的程序指令;
程序指令在处理器读取执行以下操作:
确定数据的读时钟频率和写时钟频率的大小;
根据读时钟频率和写时钟频率的大小,对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理。
以下通过应用示例对本发明实施例的方法进行清楚详细的说明,应用示例仅用于陈述本发明,并不用于限定本发明的保护范围。
应用示例1
本发明实施例,异步FIFO根据读时钟频率和写时钟频率的大小而设计的两种架构;应用示例1对读时钟频率大于或等于写时钟频率的异步FIFO的架构进行说明;
当读时钟频率大于或等于写时钟频率时,本发明应用示例装置由确定单元和处理单元组成;其中,
处理单元用于,对大容量异步FIFO首先通过进行跨时钟域FIFO处理;将通过跨时钟域FIFO处理后的数据进行大容量的同步缓存处理;
由于读时钟快,写时钟慢,数据先通过跨时钟FIFO,然后存储到大容量同步缓存中供读时钟进行读取。
本应用示例处理单元可以设计为包括跨时钟域FIFO模块和大容量同步缓存模块;图4为第一应用示例处理单元的结构框图,如图4所示,其中,
跨时钟域处理模块包括:第一子模块、寄存器堆、第二子模块、第三子模块、第四子模块、第五子模块、第六子模块、第七子模块和第八子模块;其中,
第一子模块用于:根据当前写地址和第二子模块(读控制)传输过来的格雷码恢复出来的读地址,产生满标志;在寄存器堆未满的情况下,将FIFO输入的数据写到寄存器堆中;
寄存器堆:用来存放第一子模块写入的数据并供第二子模块读取,本应用示例设计寄存器堆的深度为16,以实现跨时钟域和及时的数据读取;这里,寄存器堆的深度可以由本领域技术人员分析确定,可以是更小,例如,可以设计寄存器堆的深度为8;
第二子模块用于:根据当前读地址和第一子模块在写控制时传输过来的格雷码恢复出来的写地址产生空标志;在寄存器堆未空时,将寄存器堆中的数据读出;
第三子模块用于:在写时钟域将二进制码转换为格雷码,以进行跨时钟域的处理;
第四子模块用于:进行跨时钟域处理,以消除由读写时钟异步引起的写地址格雷码传到读时钟域时引起的亚稳态问题;
第五子模块用于:在读时钟域将写地址的格雷码转换为二进制码提供给第三模块,以产生空标志信号;
第六子模块用于:在读时钟域将二进制码转换为格雷码,以进行跨时钟域的处理;
第七子模块用于:进行跨时钟域处理,以消除由读写时钟异步引起的读地址格雷码传递到写时钟域引起的亚稳态问题;
第八子模块用于:在写时钟域将读地址的格雷码转换为二进制码提供给第一子模块,以产生满标志信号。
大容量同步缓存模块用于:将经跨时钟域FIFO的数据存储在大容量缓存中供后续模块进行读取;大容量同步缓存模块包括:
第九子模块用于:缓存一拍的数据,并根据通道选择确定是否合并双位宽的数据;
第十子模块用于:将双位宽(双倍数据位宽)的数据写到单口RAM中,两个周期产生一个写信号;本发明实施例根据大容量同步缓存模块内部实际存储数据量动态选择将数据写入到单口RAM,还是预设深度的同步FIFO;假设:同步FIFO为深度为4的FIFO,通过第一通道写入;单口RAM通过第二通道写入;上电复位后,默认第一通道;当深度为4的FIFO写满后续还有数据进来,切换到第二通道,后续数据将写到单口RAM中,根据深度为4的FIFO的未满情况,单口RAM中的数据又会被读出并写到深度为4的FIFO中以供后续模块进行读取。当单口深度为4的FIFO中的数据被读空后,数据通路将从第二通道切换到第一通道。
第十一子模块用于:对单口RAM进行读写仲裁控制;由于单口RAM同一时间只能进行读或写,读写仲裁利用双位宽换取时间,避开读写冲突;读写仲裁可以由本领域技术人员根据大容量异步FIFO的应用场景进行分析确定。
第十二子模块用于:读单口RAM的数据,将读取的数据写入到FIFO中,实现一个周期写两个数据;本应用示例第十二子模块用于实现读单口RAM和写内部FIFO控制;考虑到面积,可以设计FIFO的深度为4。
第十三子模块用于:将输入的数据写到FIFO中;第十三子模块为直接读写通道,即上述示例中的第一通道;
第十四子模块用于:根据当前FIFO中的数据存储情况、写入和读取的数据情况;即对上述示例中的第一通道和第二通道进行切换选择;;
FIFO,深度为4的FIFO,本应用示例采用寄存器实现,本应用示例FIFO可设置为:同时进行2写1读,以实现快速切换和保证数据无突发和间断;本应用示例双位宽的单口RAM,用于采用时间片读写数据,以位宽换取时间。
本应用示例以单口RAM实现大容量异步FIFO,相比于相关技术中的双端口RAM能明显减少面积,以800x128的FIFO为例,如果采用双端口RAM,那么RAM面积为77786平方微米(um^2),如果采用本应用示例,那么可以用400x256的单端口RAM来实现,单口面积为22825um^2,能节约70.67%的面积,考虑到新增加的外部逻辑的面积(7025um^2),则仍能够节省61.62%的面积。外部逻辑及面积数据与实现工艺相关。
应用示例1通过先进行跨时钟域FIFO处理,后进行大容量同步缓存的处理顺序,实现了大容量异步FIFO。降低了芯片的面积。
以下以寄存器堆深度为16、FIFO深度为4,对应用示例1进行异步FIFO过程进行说明,包括:
系统复位完成后,整个FIFO处于空状态,当有数据输入时,写控制将输入的数据写入到深度为16的寄存器堆;写控制将输入数据写入寄存器堆时,将写地址转换为格雷码并传送到读时钟域,经跨时钟域的处理消除亚稳态后在读时钟域转换回二进制码;读控制根据写地址和当前的读地址产生空信号,如果寄存器堆非空,将数据从寄存器堆读出,并写到大容量同步缓存模块。;
读控制读出跨时钟域FIFO数据同时将读地址由二进制码转换为格雷码,并传递至写时钟域,在写时钟域将读地址的格雷码转换为二进制码,以产生满标志信号。
当数据刚开始写到大容量缓存模块时,大容量缓存模块工作在第一通道,
输入数据经第一通道存储到深度为4的FIFO中,此时读端口也有可能有数据读取,在深度为4的FIFO未满的情况下大容量同步缓存一直工作在第一通道上;
当深度为4的FIFO满后,数据会存在1拍数据缓存上,此时如果还有数据输入,将数据切换到第二通道,此时数据将被存储到单口RAM中,一旦深度为4的FIFO有存储空间,数据将从单口RAM中读出并以1个周期写两个数据吞吐量写到深度为4的FIFO中,此时大容量同步缓存模块输入输出都有数据,整个FIFO将保持当前状态一直工作下去。
当大容量同步缓存模块输入端无数据,而输出端还在取数据时,单口RAM中的数据以1个周期写2个数据的吞吐量搬运到深度为4的FIFO中。
当单口ram中的数据读完后,此时深度为4的FIFO中的数据深度为3,此时,切换回第一通道,后续如果有数据会经第一通道写到深度为4的FIFO中,以保证深度为4的FIFO在未读空的情况下数据进入到其中供读端口读取。
通过以上配合,保证读端口的行为和相关技术中的异步FIFO一致。
应用示例2
本应用示例处理单元较第一应用示例进行了调整,图5为第二应用示例处理单元的结构框图,如图5所示,数据先存储到大容量同步缓存模块中,然后再过跨时钟域FIFO,此架构应用于写时钟频率大于读时钟频率的情况;
复位完成后,大容量同步缓存模块开始接收到输入时,输入数据经第一通道存储到深度为4的FIFO中,此时也有可能有输入读取,在FIFO未满的情况下一直工作在第一通道;
当深度为4的FIFO满后,数据会存在1拍数据缓存上,此时如果还有数据输入,将数据切换到第二通道,此时数据将被存储到单口RAM中,一旦深度为4的FIFO有存储空间,数据将从单口RAM中读出并以1个周期写两个数据吞吐量写到深度为4的FIFO中,此时同步缓存输入输出都有数据,整个FIFO将保持当前状态一直工作下去。
当大容量同步缓存模块输入端无数据,而输出端还在取数据时,单口RAM中的数据以1个周期写2个数据的吞吐量搬运到深度为4的FIFO中。
当单口RAM中的数据读完后,此时深度为4的FIFO中的数据深度为3,此时,将通道切换回第一通道,后续如果有数据会经第一通道写到深度为4的FIFO中,以保证深度为4的FIFO在未读空的情况下数据进入到其中供读端口读取。
一旦同步缓存中深度为4的FIFO有数据,数据会被读出并传输到跨时钟域FIFO中,跨时钟域FIFO的深度为16,写进去的数据会根据异步FIFO的读信号读出。
若跨时钟域FIFO无读操作时,数据会首先填满跨时钟域FIFO,然后反压同步缓存,数据存到同步缓存中一直到同步缓存写满,此时产生整个异步FIFO的满信号。
通过大容量同步缓存和跨时钟域FIFO的配合,实现了大容量的异步FIFO。
应用示例3
图6为第三应用示例处理单元的结构框图,如图6所示,本应用示例应用于读时钟频率和写时钟频率大小不确定场景,在某类应用中是读时钟快,而另外一些应用是写时钟快,但芯片应用确定后,读写时钟关系也就确定了,应用中可以通过模式信号选择确定先通过跨时钟域FIFO模块还是先通过大容量同步缓存模块。模式选择信号也可以确定大容量缓存工作在读时钟域还是写时钟域。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件(例如处理器)完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的每个模块/单元可以采用硬件的形式实现,例如通过集成电路来实现其相应功能,也可以采用软件功能模块的形式实现,例如通过处理器执行存储于存储器中的程序/指令来实现其相应功能。本发明不限制于任何特定形式的硬件和软件的结合。
虽然本发明所揭露的实施方式如上,但所述的内容仅为便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。

Claims (4)

1.一种实现异步先入先出队列FIFO的方法,其特征在于,包括:
确定数据的读时钟频率和写时钟频率的大小;
根据读时钟频率和写时钟频率的大小,对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理;
所述异步FIFO为大容量异步FIFO,所述对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理包括:
当所述读时钟频率大于或等于所述写时钟频率时,对所述大容量异步FIFO进行跨时钟域FIFO处理;对跨时钟域FIFO处理后获得的数据进行大容量同步缓存处理;
当所述读时钟频率小于所述写时钟频率时,对所述大容量异步FIFO进行大容量同步缓存处理,对大容量同步缓存处理后获得的数据进行跨时钟域FIFO处理;
所述进行大容量同步缓存处理包括:
在双倍数据位宽的单口随机存取存储器RAM和预设深度的同步FIFO中,根据数据缓存量进行数据缓存;
所述根据数据缓存量进行数据缓存包括:
在所述同步FIFO未满时,将数据写入到所述同步FIFO中;
在所述同步FIFO写满后,对数据进行一拍缓存,在一拍缓存后仍有数据输入时,将输入的数据存储到单口RAM中;
在所述同步FIFO中的数据被读出时,以1个周期写两个数据的吞吐速率将数据从所述单口RAM中读取并写入到所述同步FIFO中;
在无数据输入,而输出端需要读取数据时,以1个周期写两个数据的吞吐量将数据从所述单口RAM中读取并写入到所述同步FIFO中;
在所述单口RAM中的数据被读取完毕,所述同步FIFO中的数据深度出现不满时,若有数据输入,将输入的数据写入到所述同步FIFO中。
2.一种实现异步FIFO的装置,其特征在于,包括:确定单元和处理单元;其中,
确定单元用于:确定数据的读时钟频率和写时钟频率的大小;
处理单元用于:根据读时钟频率和写时钟频率的大小,对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理;
所述异步FIFO为大容量异步FIFO,所述处理单元具体用于:
当所述读时钟频率大于或等于所述写时钟频率时,对所述大容量异步FIFO进行跨时钟域FIFO处理;对跨时钟域FIFO处理后获得的数据进行大容量同步缓存处理;
当所述读时钟频率小于所述写时钟频率时,对所述大容量异步FIFO进行大容量同步缓存处理,对大容量同步缓存处理后获得的数据进行跨时钟域FIFO处理;
所述处理单元用于进行大容量同步缓存处理包括:
在双倍数据位宽的单口随机存取存储器RAM和预设深度的同步FIFO中,根据数据缓存量进行数据缓存;
所述处理单元用于进行大容量同步缓存处理包括:
在预设深度的同步FIFO未满时,将数据写入到所述同步FIFO中;
在所述同步FIFO写满后,对数据进行一拍缓存,在一拍缓存后仍有数据输入时,将输入的数据存储到单口RAM中;
在所述同步FIFO中的数据被读出时,以1个周期写两个数据的吞吐速率将数据从所述单口RAM中读取并写入到所述同步FIFO中;
在无数据输入,而输出端需要读取数据时,以1个周期写两个数据的吞吐量将数据从所述单口RAM中读取并写入到所述同步FIFO中;
在所述单口RAM中的数据被读取完毕,所述同步FIFO中的数据深度出现不满时,若有数据输入,将输入的数据写入到所述同步FIFO中。
3.一种计算机存储介质,计算机存储介质中存储有计算机可执行指令,计算机可执行指令用于执行如权利要求1所述的实现异步先入先出队列FIFO的方法。
4.一种终端,包括:存储器和处理器;其中,
处理器被配置为执行存储器中的程序指令;
程序指令在处理器读取执行以下操作:
确定数据的读时钟频率和写时钟频率的大小;
根据读时钟频率和写时钟频率的大小,对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理;
所述异步FIFO为大容量异步FIFO,所述对异步FIFO进行跨时钟域FIFO处理和大容量同步缓存处理包括:
当所述读时钟频率大于或等于所述写时钟频率时,对所述大容量异步FIFO进行跨时钟域FIFO处理;对跨时钟域FIFO处理后获得的数据进行大容量同步缓存处理;
当所述读时钟频率小于所述写时钟频率时,对所述大容量异步FIFO进行大容量同步缓存处理,对大容量同步缓存处理后获得的数据进行跨时钟域FIFO处理;
所述进行大容量同步缓存处理包括:
在双倍数据位宽的单口随机存取存储器RAM和预设深度的同步FIFO中,根据数据缓存量进行数据缓存;
所述根据数据缓存量进行数据缓存包括:
在所述同步FIFO未满时,将数据写入到所述同步FIFO中;
在所述同步FIFO写满后,对数据进行一拍缓存,在一拍缓存后仍有数据输入时,将输入的数据存储到单口RAM中;
在所述同步FIFO中的数据被读出时,以1个周期写两个数据的吞吐速率将数据从所述单口RAM中读取并写入到所述同步FIFO中;
在无数据输入,而输出端需要读取数据时,以1个周期写两个数据的吞吐量将数据从所述单口RAM中读取并写入到所述同步FIFO中;
在所述单口RAM中的数据被读取完毕,所述同步FIFO中的数据深度出现不满时,若有数据输入,将输入的数据写入到所述同步FIFO中。
CN201710657079.9A 2017-08-03 2017-08-03 一种实现先入先出队列的方法及装置 Active CN109388370B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710657079.9A CN109388370B (zh) 2017-08-03 2017-08-03 一种实现先入先出队列的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710657079.9A CN109388370B (zh) 2017-08-03 2017-08-03 一种实现先入先出队列的方法及装置

Publications (2)

Publication Number Publication Date
CN109388370A CN109388370A (zh) 2019-02-26
CN109388370B true CN109388370B (zh) 2023-06-27

Family

ID=65413083

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710657079.9A Active CN109388370B (zh) 2017-08-03 2017-08-03 一种实现先入先出队列的方法及装置

Country Status (1)

Country Link
CN (1) CN109388370B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110519667B (zh) * 2019-09-11 2021-08-24 天津光电通信技术有限公司 一种实现光信号线路交叉的方法
CN110825344A (zh) * 2019-11-12 2020-02-21 天津飞腾信息技术有限公司 一种异步数据传输方法和结构
CN111124997B (zh) * 2019-12-25 2021-07-23 海光信息技术股份有限公司 数据发送方法、接收方法及装置、处理器芯片、服务器
CN111208972A (zh) * 2019-12-25 2020-05-29 上海亮牛半导体科技有限公司 同源不同频的同步fifo
CN113760795B (zh) * 2021-08-30 2024-04-26 浪潮电子信息产业股份有限公司 一种异步fifo存储器读写控制方法、装置及设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
IL117134A0 (en) * 1996-02-14 1996-06-18 Galileo Technology Ltd A first in first-out (fifo) buffer
US6144604A (en) * 1999-11-12 2000-11-07 Haller; Haggai Haim Simultaneous addressing using single-port RAMs
US6263410B1 (en) * 1998-09-15 2001-07-17 Industrial Technology Research Institute Apparatus and method for asynchronous dual port FIFO

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002190193A (ja) * 2000-12-20 2002-07-05 Sony Corp メモリ装置およびデータ記憶方法
US20060075184A1 (en) * 2004-10-01 2006-04-06 Jen-Ying Chen Synchronous\asynchronous memory device with single port memory unit
CN100405343C (zh) * 2006-06-21 2008-07-23 北京中星微电子有限公司 一种异步数据缓存装置
CN101271387B (zh) * 2008-04-28 2010-06-09 北京中星微电子有限公司 数据缓存器溢出的自动解除方法和装置
CN101373424B (zh) * 2008-09-19 2011-10-12 北京中星微电子有限公司 一种异步先进先出存储器的数据读写方法、装置及系统
CN102750244B (zh) * 2011-04-22 2015-03-11 安凯(广州)微电子技术有限公司 分级缓冲的dma传送装置及传送方法
CN105094743A (zh) * 2014-05-23 2015-11-25 深圳市中兴微电子技术有限公司 一种先进先出数据缓存器及其进行时延控制的方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
IL117134A0 (en) * 1996-02-14 1996-06-18 Galileo Technology Ltd A first in first-out (fifo) buffer
US5841722A (en) * 1996-02-14 1998-11-24 Galileo Technologies Ltd. First-in, first-out (FIFO) buffer
US6263410B1 (en) * 1998-09-15 2001-07-17 Industrial Technology Research Institute Apparatus and method for asynchronous dual port FIFO
US6144604A (en) * 1999-11-12 2000-11-07 Haller; Haggai Haim Simultaneous addressing using single-port RAMs

Also Published As

Publication number Publication date
CN109388370A (zh) 2019-02-26

Similar Documents

Publication Publication Date Title
CN109388370B (zh) 一种实现先入先出队列的方法及装置
CN111367495B (zh) 一种异步先入先出的数据缓存控制器
US10318468B2 (en) FPGA-based interface signal remapping method
US5602780A (en) Serial to parallel and parallel to serial architecture for a RAM based FIFO memory
JP3645584B2 (ja) データ転送同期装置
JPH09222988A (ja) コンピュータシステム及び第1の回路と第2の回路との間でデータを転送するインタフェース回路
CN116521604B (zh) 一种同步数据的方法及相关装置
CN112306924A (zh) 一种数据交互方法、装置、系统及可读存储介质
CN1996276A (zh) 多处理器系统中的数据传输
JPH04301290A (ja) 先入れ先出しメモリ回路
KR100476895B1 (ko) 가변 가능한 데이터 전송 모드를 갖는 인터페이스 장치 및그것의 동작 방법
CN108984441B (zh) 一种保持数据传送一致性的方法及系统
JP4994103B2 (ja) アドレス変換メモリアクセス機構を備える半導体装置
CN110618950B (zh) 一种异步fifo读写控制电路及方法、可读存储介质及终端
KR101404844B1 (ko) 듀얼 포트 메모리 및 그 방법
GB2368152A (en) A DMA data buffer using parallel FIFO memories
CN110705195A (zh) 一种基于fpga的跨时钟域深度自行配置fifo系统
KR20170063237A (ko) 데이터 전달 장치
US5732011A (en) Digital system having high speed buffering
CN114089946B (zh) 一种fifo装置和数据处理系统
JP7419944B2 (ja) 半導体装置及び同期化方法
KR20150093461A (ko) 시스템 인터커넥트 및 시스템 인터커넥트의 동작 방법
KR20180080463A (ko) 반도체 장치 및 반도체 장치의 동작 방법
EP0988603B1 (en) Method and arrangement for connecting processor to asic
KR100557561B1 (ko) Fifo 저장 장치

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant