本发明涉及硬件电路设计领域,具体为一种异步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状态控制模块。