一种异步fifo实现电路的制作方法

文档序号:15980558发布日期:2018-11-17 00:16阅读:205来源:国知局

本发明涉及硬件电路设计领域,具体为一种异步fifo实现电路。

背景技术

在硬件设计中,大数据量的传输一般会使用到fifo。对于写入和读出数据为同一时钟域的同步fifo,可采用同步双端口ram或寄存器实现;而对于写入和读出数据为不同时钟域下的异步fifo,一般采用异步双端口ram实现。对于常用的工艺库,如asic/soc实现工艺库,以及fpga及cpld基本单元库,大多数无异步双端口ram,或ram容量与设计需求不符,为此直接限制了设计的灵活性,需使用其他设计方案完成所需功能。

现有技术中,公开号为cn102866874a的中国专利“通用异步fifo模块存储方法”,解决了现有异步fifo模块存在对于d锁存器存储结构fifo的ip核不能够使用的问题,但该方法在每次读写fifo时,均要判断不同时钟域下的读写地址关系,直接导致异步fifo的读写速度慢;公开号为cn1478226的中国专利“混合异步同步系统的低等待时间fifo电路”,通过对存储单元的控制,解决了fifo读写速度慢的问题,但电路逻辑复杂,通用性差;申请号为cn200810159783.2的中国专利“基于fifo的异步双fifo的数据缓存方法”,所设计异步双fifo对接收、发送的连续和分段有严格的要求,通用性差;公开号为cn102253916a的中国专利“同异步转换的双端双通道fifo”,采用固定地址机制进行异步读写,与实际应用相关,通用性差。但是均会受限于工艺库,还存在着电路逻辑复杂,通用性差的问题。



技术实现要素:

针对现有技术中存在的问题,本发明提供一种异步fifo实现电路,可使异步fifo的实现对工艺库受限的程度最小化,电路逻辑简单,通用性强。

本发明是通过以下技术方案来实现:

一种异步fifo实现电路,包括fifo控制模块,以及基于异步时钟clk1和clk2设置的基于clk1的同步fifo1和基于clk2的同步fifo2;

所述的同步fifo1和同步fifo2中的数据宽度相同;

所述的fifo控制模块包括与基于clk1的同步fifo1交互的fifo1状态控制模块,与基于clk2的同步fifo2交互的fifo2状态控制模块,以及跨时钟域脉冲转换模块;fifo1状态控制模块和fifo2状态控制模块用于根据电路的输入信号分别对同步fifo1和同步fifo2进行状态控制;状态控制包括idle态、wr态和rd态三种状态控制;跨时钟域脉冲转换模块用于clk1时钟域和clk2时钟域之间脉冲信号的转换。

优选的,所述电路包括如下端口,开始执行信号start、结束执行信号end、fifo类型选择信号sel、时钟clk1、基于fifo1的清空信号flush1、基于fifo1的读使能信号rd1、基于fifo1的读数据rdata1、基于fifo1的写使能信号wr1、基于fifo1的写数据wdata1、基于fifo1的满标志full1、基于fifo1的几乎满标志af1、基于fifo1的空标志empty1、基于fifo1的几乎空标志ae1、时钟clk2、基于fifo2的清空信号flush2、基于fifo2的读使能信号rd2、基于fifo2的读数据rdata2、基于fifo2的写使能信号wr2、基于fifo2的写数据wdata2、基于fifo2的满标志full2、基于fifo2的几乎满标志af2、基于fifo2的空标志empty2和基于fifo2的几乎空标志ae2。

进一步,开始执行信号start、结束执行信号end分别连接fifo1状态控制模块和跨时钟域脉冲转换模块;fifo类型选择信号sel连接fifo1状态控制模块,其取反连接fifo2状态控制模块;fifo1状态控制输出fifo1写请求信号wr_req1、fifo2写授权信号wr_gntq,连接到跨时钟域脉冲转换模块;fifo2状态控制输出fifo2写请求信号wr_req2、fifo1写授权信号wr_gnts,连接到跨时钟域脉冲转换模块;跨时钟域脉冲转换模块输出fifo1写授权信号wr_gnt1和fifo2的写请求信号wr_reqq,连接到fifo1状态控制模块;跨时钟域脉冲转换模块输出fifo2写授权信号wr_gnt2和fifo1的写请求信号wr_regs,连接到fifo2状态控制模块。

进一步,基于fifo1的满标志full1、基于fifo1的几乎满标志af1、基于fifo1的空标志empty1、基于fifo1的几乎空标志ae1信号用于标志同步fifo1的状态;基于fifo2的几乎满标志af2、基于fifo2的空标志empty2、基于fifo2的几乎空标志ae2用于标志同步fifo2的状态。

进一步,fifo1状态控制模块和fifo2状态控制模块设计相同,其状态机分为如下三种状态;

初始状态机为idle态,当开始执行信号start有效后,根据fifo类型选择信号sel信号选择,当sel选择为0时,状态机选择为rd态,否则选择为wr态;

rd态判定在当前fifo非空条件下,对写操作请求wr_req反馈写授权信号wr_gnt,同时控制进行写数据的读出,并确保读出数据在下一次写操作请求有效前,数据保持稳定,在结束执行信号end有效后,转入idle态;

wr态判定在当前fifo非满条件下,发出写操作请求wr_req,并根据写授权信号wr_gnt,完成数据的写入操作,在结束执行信号end有效后,转入idle态。

进一步,跨时钟域脉冲转换模块用于clk1时钟域和clk2时钟域之间脉冲信号的转换;

针对clk1时钟域下的脉冲信号:开始执行信号start、结束执行信号end、fifo1写请求信号wr_req1和fifo2写授权信号wr_gntq,分别生成clk2时钟域下的脉冲信号:开始执行信号starts、结束执行信号ends、fifo1写请求信号wr_reqs和fifo2写授权信号wr_gnt2;

针对clk2时钟域下的脉冲信号:fifo2写请求信号wr_req2和fifo1写授权信号wr_gnts,分别生成clk1时钟域下的脉冲信号:fifo1写请求信号wr_reqq和fifo2写授权信号wr_gnt1。

进一步,当fifo类型选择信号sel=0时,电路呈基于clk1的写端口和基于clk2的读端口;

同步fifo1接收基于clk1的数据,并将数据读出写入同步fifo2;同步fifo2接收同步fifo1的数据,并基于clk2将数据读出;

其基于fifo1的读使能信号rd1、基于fifo1的读数据rdata1、基于fifo2的写使能信号wr2和基于fifo2的写数据wdata2无效;

fifo1状态控制模块使用idle和wr状态,fifo2状态控制模块使用idle和rd状态;wr_req1、wr_gnt1、wr_regs和wr_gnts信号无效。

进一步,当fifo类型选择信号sel=1时,电路呈基于clk1的读端口和基于clk2的写端口;

同步fifo2接收基于clk2的数据,并将数据读出写入同步fifo1;同步fifo1接收同步fifo2的数据,并基于clk1将数据读出;

其基于fifo2的读使能信号rd2、基于fifo2的读数据rdata2、基于fifo1的写使能信号wr1和基于fifo1的写数据wdata1无效;

fifo2状态控制模块使用idle和wr状态,fifo1状态控制模块使用idle和rd状态;wr_req2、wr_gnt2、wr_regq和wr_gntq信号无效。

与现有技术相比,本发明具有以下有益的技术效果:

本发明一种异步fifo的实现电路,基于现有工艺库条件实现的基于异步时钟的2个同步fifo,完成异步fifo的实现,控制逻辑简单,大大减少异步fifo对工艺库受限的影响,实现电路通用性强。其具体效果如下:

1)可完成异步时钟域下数据的正确写入和读出功能;

2)采用基于clk1的同步fifo1和基于clk2的同步fifo2来实现异步fifo,可最小化工艺库对异步fifo的设计限制,同时fifo1和fifo2对fifo仅要求宽度保持一致,深部可不一致,可根据实际需求进行设计,使设计更加灵活。

3)该异步fifo可通过fifo类型选择信号sel选择基于时钟的端口作为写端口还是作为读端口,使用灵活,在发送接收fifo不同时使用的设计中,可仅使用一个异步fifo,通过控制sel信号,改变基于时钟的读写端口,完成异步发送fifo和异步接收fifo的功能。

4)对于不同需求下的异步fifo,该电路的实现方法明确,控制逻辑简单,通用性强。

附图说明

图1为基于clk的fifo端口结构框图。

图2为本发明实例中所述的一种异步fifo实现电路示意图。

图3为本发明实例中所述的sel=0时的异步fifo实现电路示意图。

图4为本发明实例中所述的sel=1时的异步fifo实现电路示意图。

具体实施方式

下面结合具体的实施例对本发明做进一步的详细说明,所述是对本发明的解释而不是限定。

本发明一种异步fifo实现电路,其实现思路如下:

首先,基于异步时钟clk1和clk2,分别完成基于clk1的同步fifo1和基于clk2的同步fifo2的实现,其中,fifo1和fifo2对数据宽度要求相同,数据深度可不同。

其次,基于clk1的同步fifo1、基于clk2的同步fifo2,以及fifo控制模块共同完成异步fifo的实现。

第三,fifo控制模块由fifo1状态控制模块、fifo2状态控制模块以及跨时钟域脉冲转换模块组成。

第四,fifo1状态控制模块和fifo2状态控制模块设计相同,其状态机可分为三种状态,

初始状态机为idle态,当开始执行信号start有效后,根据fifo类型选择信号sel信号选择,当sel选择为0时,状态机选择为rd态,否则选择为wr态;

rd态判定在当前fifo非空条件下,对写操作请求wr_req反馈写授权信号wr_gnt,同时控制进行写数据的读出,并确保读出数据在下一次写操作请求有效前,数据保持稳定,在结束执行信号end有效后,转入idle态;

wr态判定在当前fifo非满条件下,发出写操作请求wr_req,并根据写授权信号wr_gnt,完成数据的写入操作,在结束执行信号end有效后,转入idle态。

第五,跨时钟域脉冲转换模块完成不同时钟域间脉冲的转换。针对clk1时钟域下的脉冲信号:开始执行信号start、结束执行信号end、fifo1写请求信号wr_req1、fifo2写授权信号wr_gntq,分别生成clk2时钟域下的脉冲信号:开始执行信号starts、结束执行信号ends、fifo1写请求信号wr_reqs、fifo2写授权信号wr_gnt2;针对clk2时钟域下的脉冲信号:fifo2写请求信号wr_req2、fifo1写授权信号wr_gnts,分别生成clk1时钟域下的脉冲信号:fifo1写请求信号wr_reqq、fifo2写授权信号wr_gnt1。

最后,开始执行信号start、结束执行信号end分别连接fifo1状态控制和跨时钟域脉冲转换模块;fifo类型选择信号sel连接fifo1状态控制模块,其取反连接fifo2状态控制模块;fifo1状态控制输出fifo1写请求信号wr_req1、fifo2写授权信号wr_gntq,连接到跨时钟域脉冲转换模块;fifo2状态控制输出fifo2写请求信号wr_req2、fifo1写授权信号wr_gnts,连接到跨时钟域脉冲转换模块;跨时钟域脉冲转换模块输出fifo1写授权信号wr_gnt1和fifo2的写请求信号wr_reqq,连接到fifo1状态控制模块;跨时钟域脉冲转换模块输出fifo2写授权信号wr_gnt2和fifo1的写请求信号wr_regs,连接到fifo2状态控制模块。

具体的,如图1所示,基于clk的同步fifo的端口包括:时钟clk、fifo清空信号flush、读使能信号rd、读出数据rdata、写入使能信号wr、写入数据wdata、fifo满标志full、fifo几乎满标志af、fifo空标志empty、fifo几乎空标志ae。

如图2为一种异步fifo实现电路,由基于clk1的同步fifo1、基于clk2的同步fifo2以及fifo控制模块组成。该电路的端口为:开始执行信号start、结束执行信号end、fifo类型选择信号sel、时钟clk1、基于fifo1的清空信号flush1、基于fifo1的读使能信号rd1、基于fifo1的读数据rdata1、基于fifo1的写使能信号wr1、基于fifo1的写数据wdata1、基于fifo1的满标志full1、基于fifo1的几乎满标志af1、基于fifo1的空标志empty1、基于fifo1的几乎空标志ae1、时钟clk2、基于fifo2的清空信号flush2、基于fifo2的读使能信号rd2、基于fifo2的读数据rdata2、基于fifo2的写使能信号wr2、基于fifo2的写数据wdata2、基于fifo2的满标志full2、基于fifo2的几乎满标志af2、基于fifo2的空标志empty2、基于fifo2的几乎空标志ae2。

fifo控制模块由fifo1状态控制、fifo2状态控制以及跨时钟域脉冲转换模块组成。开始执行信号start、结束执行信号end分别连接fifo1状态控制和跨时钟域脉冲转换模块;fifo类型选择信号sel连接fifo1状态控制模块,其取反连接fifo2状态控制模块;fifo1状态控制输出fifo1写请求信号wr_req1、fifo2写授权信号wr_gntq,连接到跨时钟域脉冲转换模块;fifo2状态控制输出fifo2写请求信号wr_req2、fifo1写授权信号wr_gnts,连接到跨时钟域脉冲转换模块;跨时钟域脉冲转换模块输出fifo1写授权信号wr_gnt1和fifo2的写请求信号wr_reqq,连接到fifo1状态控制模块;跨时钟域脉冲转换模块输出fifo2写授权信号wr_gnt2和fifo1的写请求信号wr_regs,连接到fifo2状态控制模块。

基于fifo1的满标志full1、基于fifo1的几乎满标志af1、基于fifo1的空标志empty1、基于fifo1的几乎空标志ae1信号用于标志fifo1的状态。基于fifo2的几乎满标志af2、基于fifo2的空标志empty2、基于fifo2的几乎空标志ae2用于标志fifo2的状态。

fifo1状态控制模块和fifo2状态控制模块设计相同,其状态机可分为三种状态,初始状态机为idle态,当开始执行信号start有效后,根据fifo类型选择信号sel信号选择,当sel选择为0时,状态机选择为rd态,否则选择为wr态;rd态判定在当前fifo非空条件下,对写操作请求wr_req反馈写授权信号wr_gnt,同时控制进行写数据的读出,并确保读出数据在下一次写操作请求有效前,数据保持稳定,在结束执行信号end有效后,转入idle态;wr态判定在当前fifo非满条件下,发出写操作请求wr_req,并根据写授权信号wr_gnt,完成数据的写入操作,在结束执行信号end有效后,转入idle态。

跨时钟域脉冲转换模块完成不同时钟域间脉冲的转换。针对clk1时钟域下的脉冲信号:开始执行信号start、结束执行信号end、fifo1写请求信号wr_req1、fifo2写授权信号wr_gntq,分别生成clk2时钟域下的脉冲信号:开始执行信号starts、结束执行信号ends、fifo1写请求信号wr_reqs、fifo2写授权信号wr_gnt2;针对clk2时钟域下的脉冲信号:fifo2写请求信号wr_req2、fifo1写授权信号wr_gnts,分别生成clk1时钟域下的脉冲信号:fifo1写请求信号wr_reqq、fifo2写授权信号wr_gnt1。

当fifo类型选择信号sel=0时,如图3所示,异步fifo表现出的是基于clk1的写端口和基于clk2的读端口,即:fifo1接收基于clk1的数据,并将数据读出写入fifo2;fifo2接收fifo1的数据,并基于clk2将数据读出。在该电路下,异步fifo的端口基于fifo1的读使能信号rd1、基于fifo1的读数据rdata1、基于fifo2的写使能信号wr2、基于fifo2的写数据wdata2无效。fifo1状态控制模块使用idle和wr状态,fifo2状态控制模块使用idle和rd状态。wr_req1、wr_gnt1、wr_regs、wr_gnts信号无效。

当fifo类型选择信号sel=1时,如图4所示,异步fifo表现出的是基于clk1的读端口和基于clk2的写端口,即:fifo2接收基于clk2的数据,并将数据读出写入fifo1;fifo1接收fifo2的数据,并基于clk1将数据读出。在该电路下,异步fifo的端口基于fifo2的读使能信号rd2、基于fifo2的读数据rdata2、基于fifo1的写使能信号wr1、基于fifo1的写数据wdata1无效。fifo2状态控制模块使用idle和wr状态,fifo1状态控制模块使用idle和rd状态。wr_req2、wr_gnt2、wr_regq、wr_gntq信号无效。

本发明已经应用于一款高密度集成多种外设的soc设计中,该soc使用了本发明中的异步fifo。针对该soc使用的工艺库中无异步双端口ram问题,本发明给出了一种解决方案,加速了异步时钟域间大数据量传输,本电路设计逻辑简单,通用性强。

首先,基于异步时钟clk1和clk2,分别完成基于clk1的同步fifo1和基于clk2的同步fifo2的实现,其中,fifo1和fifo2对数据宽度要求相同,数据深度可不同。

其次,基于clk1的同步fifo1、基于clk2的同步fifo2,以及fifo控制模块共同完成异步fifo的实现。

第三,fifo控制模块由fifo1状态控制模块、fifo2状态控制模块以及跨时钟域脉冲转换模块组成。

第四,fifo1状态控制模块和fifo2状态控制模块设计相同,其状态机可分为三种状态,

初始状态机为idle态,当开始执行信号start有效后,根据fifo类型选择信号sel信号选择,当sel选择为0时,状态机选择为rd态,否则选择为wr态;

rd态判定在当前fifo非空条件下,对写操作请求wr_req反馈写授权信号wr_gnt,同时控制进行写数据的读出,并确保读出数据在下一次写操作请求有效前,数据保持稳定,在结束执行信号end有效后,转入idle态;

wr态判定在当前fifo非满条件下,发出写操作请求wr_req,并根据写授权信号wr_gnt,完成数据的写入操作,在结束执行信号end有效后,转入idle态。

第五,跨时钟域脉冲转换模块完成不同时钟域间脉冲的转换。针对clk1时钟域下的脉冲信号:开始执行信号start、结束执行信号end、fifo1写请求信号wr_req1、fifo2写授权信号wr_gntq,分别生成clk2时钟域下的脉冲信号:开始执行信号starts、结束执行信号ends、fifo1写请求信号wr_reqs、fifo2写授权信号wr_gnt2;针对clk2时钟域下的脉冲信号:fifo2写请求信号wr_req2、fifo1写授权信号wr_gnts,分别生成clk1时钟域下的脉冲信号:fifo1写请求信号wr_reqq、fifo2写授权信号wr_gnt1。

最后,开始执行信号start、结束执行信号end分别连接fifo1状态控制和跨时钟域脉冲转换模块;fifo类型选择信号sel连接fifo1状态控制模块,其取反连接fifo2状态控制模块;fifo1状态控制输出fifo1写请求信号wr_req1、fifo2写授权信号wr_gntq,连接到跨时钟域脉冲转换模块;fifo2状态控制输出fifo2写请求信号wr_req2、fifo1写授权信号wr_gnts,连接到跨时钟域脉冲转换模块;跨时钟域脉冲转换模块输出fifo1写授权信号wr_gnt1和fifo2的写请求信号wr_reqq,连接到fifo1状态控制模块;跨时钟域脉冲转换模块输出fifo2写授权信号wr_gnt2和fifo1的写请求信号wr_regs,连接到fifo2状态控制模块。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1