一种实现预读式FIFO的方法和预读式FIFO转让专利

申请号 : CN201010001523.X

文献号 : CN102117193B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 林晖

申请人 : 杭州华三通信技术有限公司

摘要 :

本发明提供了一种实现预读式先入先出存储器(FIFO)的方法和预读式FIFO,其中,输出寄存器的设置使得原来由RAM输出和后续用户逻辑单元的操作构成的关键路径被打破,输出通过单独的寄存器完成,输出延迟减小,从而使预读式FIFO更好地满足时序要求。另外,使能控制器在确定RAM为非空状态且输出寄存器为空状态,或者接收到读请求时,使输入FIFO控制器的读信号有效,并使能输出寄存器输出数据;否则,使输出FIFO控制器的读信号无效,并锁存输出寄存器,通过该方式,使能控制器能够保证在增加一级寄存器的基础上,仍能够保证预读方式的准确实现。

权利要求 :

1.一种预读式先入先出寄存器FIFO,该FIFO包括FIFO控制器、输入寄存器和随机存储器RAM;其特征在于,还包括:输出寄存器和使能控制器,且所述输出寄存器、输入寄存器和RAM均属于RAM硬核中的存储资源;

所述使能控制器,用于在没有收到读请求、并确定所述RAM为非空状态且所述输出寄存器为空状态时,使输入所述FIFO控制器的读信号有效,并使能所述输出寄存器输出数据;在接收到读请求时,使输入所述FIFO控制器的读信号有效,并使能所述输出寄存器输出数据;在没有收到读请求、且所述RAM和所述输出寄存器都处于非空状态时,使输入所述FIFO控制器的读信号无效,并锁存所述输出寄存器;

所述FIFO控制器,用于在没有收到有效的读信号时,通过所述输入寄存器设置所述RAM的读地址指向RAM中当前待读取的数据;收到有效的读信号时,通过所述输入寄存器设置所述RAM的读地址指向RAM中下一待读取的数据;

所述RAM,用于按照读时钟和被设置的读地址,以先入先出的方式输出被写入的数据给所述输出寄存器;

所述输出寄存器,用于在被使能时,按照读时钟输出寄存的数据;所述输出寄存器和所述RAM的数据位宽相同。

2.根据权利要求1所述的预读式FIFO,其特征在于,所述FIFO控制器,还用于向所述使能控制器通知所述RAM是否处于空状态;

所述使能控制器,还用于检测所述输出寄存器是否处于空状态,并在所述输出寄存器处于空状态时,输出空信号。

3.根据权利要求1所述的预读式FIFO,其特征在于,所述FIFO控制器,还用于在接收到有效的写信号时,通过所述输入寄存器设置所述RAM的写地址;

所述RAM,还用于按照写时钟,根据被设置的写地址接收被写入的数据。

4.一种实现预读式FIFO的方法,其特征在于,在包含FIFO控制器、输入寄存器和RAM的FIFO中增设输出寄存器和使能控制器,其中,所述输出寄存器、输入寄存器和RAM均属于RAM硬核中的存储资源;

所述使能控制器在没有收到读请求、并确定所述RAM为非空状态且所述输出寄存器为空状态时,使输入所述FIFO控制器的读信号有效,并使能所述输出寄存器输出数据;在接收到读请求时,使输入所述FIFO控制器的读信号有效,并使能所述输出寄存器输出数据;

在没有收到读请求、且所述RAM和所述输出寄存器都处于非空状态时,使输出所述FIFO控制器的读信号无效,并锁存所述输出寄存器;

所述FIFO控制器在没有收到有效的读信号时,通过所述输入寄存器设置所述RAM的读地址指向RAM中当前待读取的数据;收到有效的读信号时,通过所述输入寄存器设置所述RAM的读地址指向RAM中下一待读取的数据;

所述RAM按照读时钟和被设置的读地址,以先入先出的方式输出被写入的数据给所述输出寄存器;

所述输出寄存器在被使能时,按照读时钟输出寄存的数据;所述输出寄存器和所述RAM的数据位宽相同。

5.根据权利要求4所述的方法,其特征在于,所述使能控制器确定所述RAM为非空状态且所述输出寄存器为空状态具体包括:所述FIFO控制器检测所述RAM的状态,并将检测结果通知给所述使能控制器;

所述使能控制器对输出寄存器的状态进行检测,根据自身的检测结果和所述FIFO控制器的通知,确定是否所述RAM为非空状态且所述输出寄存器为空状态。

6.根据权利要求4所述的方法,其特征在于,所述FIFO控制器在接收到有效的写信号时,通过所述输入寄存器设置所述RAM的写地址;

所述RAM按照写时钟,根据被设置的写地址接收被写入的数据。

说明书 :

一种实现预读式FIFO的方法和预读式FIFO

技术领域

[0001] 本发明涉及存储器技术,特别涉及一种实现预读式FIFO的方法和预读式FIFO。

背景技术

[0002] 在现场可编程门阵列(FPGA)设计中,先入先出寄存器(FIFO)是最常用的功能模块之一,按照对接口时序要求的不同,FIFO可以分为预读式FIFO和非预读式FIFO两种,其中,预读式FIFO能够提高后级模块的处理效率,因此在高速设计中经常使用。
[0003] 预读式FIFO与非预读式FIFO的区别主要在于:预读式FIFO中,在有数据的情况下,数据已经准备在总线上,即用户在发起读请求之前数据已经有效,当用户发起读请求后,能够在当前时钟周期读出数据,而非预读式FIFO需要在下一时钟周期读出数据。其中,预读式FIFO的读时序图如图1所示,其中,rdclk为读时钟,empty为FIFO空信号,rd为用户读请求的读信号,rdata为FIFO读出的数据。从时序图可以看出,在FIFO有数据的情况下,数据已经准备在总线上;当用户发起读请求后,能够在当前时钟周期立即读出数据0,并在后续时钟周期依次读出数据1和数据2。
[0004] 为了更清楚地说明预读式FIFO,参见图2所示的预读式FIFO的逻辑结构,主要包括FIFO控制器、输入寄存器和随机存储器(RAM),其中,输入寄存器和RAM同属于RAM硬核中的存储资源。FIFO控制器用于完成对读地址(rd_addr)、写地址(wr_addr)、空信号(empty)和满信号(full)的管理。FIFO控制器通过输入寄存器设置RAM的rd_addr指向当前数据的地址(非预读式FIFO中rd_addr指向读取的上一数据的地址),也就是说,当RAM内有数据时,输出FIFO控制器将RAM的读地址预先加1,将数据准备好。当接收到用户的读请求,即读信号(rd)有效时,能够立即在当前时钟周期从RAM读取当前数据,即rdata输出当前数据。
[0005] 然而,在上述过程中,RAM的输出到后续用户逻辑单元在一个时钟周期内执行,这显然对RAM的逻辑时序影响较大,其中,RAM输出所带来的时延影响较为突出,特别是在诸如时钟频率较高、逻辑利用率较高或者后级组合逻辑处理复杂等对时序要求较高的场合,现有预读式FIFO往往不能满足时序要求。

发明内容

[0006] 有鉴于此,本发明提供了一种实现预读式FIFO的方法和预读式FIFO,以便于使预读式FIFO更好的满足时序要求。
[0007] 一种预读式先入先出寄存器FIFO,该FIFO包括FIFO控制器、输入寄存器和随机存储器RAM;还包括:输出寄存器和使能控制器,且所述输出寄存器、输入寄存器和RAM均属于RAM硬核中的存储资源;
[0008] 所述使能控制器,用于在没有收到读请求、并确定所述RAM为非空状态且所述输出寄存器为空状态时,使输入所述FIFO控制器的读信号有效,并使能所述输出寄存器输出数据;在接收到读请求时,使输入所述FIFO控制器的读信号有效,并使能所述输出寄存器输出数据;在没有收到读请求、且所述RAM和所述输出寄存器都处于非空状态时,使输入所述FIFO控制器的读信号无效,并锁存所述输出寄存器;
[0009] 所述FIFO控制器,用于在没有收到有效的读信号时,通过所述输入寄存器设置所述RAM的读地址指向RAM中当前待读取的数据;收到有效的读信号时,通过所述输入寄存器设置所述RAM的读地址指向RAM中下一待读取的数据;
[0010] 所述RAM,用于按照读时钟和被设置的读地址,以先入先出的方式输出被写入的数据给所述输出寄存器;
[0011] 所述输出寄存器,用于在被使能时,按照读时钟输出寄存的数据。
[0012] 一种实现预读式FIFO的方法,在包含FIFO控制器、输入寄存器和RAM的FIFO中增设输出寄存器和使能控制器,其中,所述输出寄存器、输入寄存器和RAM均属于RAM硬核中的存储资源;
[0013] 所述使能控制器在没有收到读请求、并确定所述RAM为非空状态且所述输出寄存器为空状态时,使输入所述FIFO控制器的读信号有效,并使能所述输出寄存器输出数据;在接收到读请求时,使输入所述FIFO控制器的读信号有效,并使能所述输出寄存器输出数据;在没有收到读请求、且所述RAM和所述输出寄存器都处于非空状态时,使输入所述FIFO控制器的读信号无效,并锁存所述输出寄存器;
[0014] 所述FIFO控制器在没有收到有效的读信号时,通过所述输入寄存器设置所述RAM的读地址指向RAM中当前待读取的数据;收到有效的读信号时,通过所述输入寄存器设置所述RAM的读地址指向RAM中下一待读取的数据;
[0015] 所述RAM按照读时钟和被设置的读地址,以先入先出的方式输出被写入的数据给所述输出寄存器;
[0016] 所述输出寄存器在被使能时,按照读时钟输出寄存的数据。
[0017] 由以上技术方案可以看出,在本发明中,为了减小RAM的时延,在包含FIFO控制器、输入寄存器和RAM的FIFO中增设输出寄存器和使能控制器,其中,输出寄存器的设置使得原来由RAM输出和后续用户逻辑单元的操作构成的关键路径被打破,输出通过单独的寄存器完成,输出延迟减小,从而使预读式FIFO更好地满足时序要求,解决时序紧张的问题。另外,使能控制器在确定RAM为非空状态且输出寄存器为空状态,或者接收到读请求时,使输入FIFO控制器的读信号有效,并使能输出寄存器输出数据;否则,使输出FIFO控制器的读信号无效,并锁存输出寄存器,通过该方式,使能控制器能够保证在增加一级寄存器的基础上,仍能够保证预读方式的准确实现。并且,输出寄存器充分使用了RAM硬核中已有的寄存器资源,从而节约了FPGA的寄存器资源。

附图说明

[0018] 图1为预读式FIFO的读时序图;
[0019] 图2为预读式FIFO的逻辑结构示意图;
[0020] 图3为本发明提供的预读式FIFO的逻辑结构示意图;
[0021] 图4为输出寄存器采用的寄存器示意图;
[0022] 图5为RAM和输出寄存器在RAM实例化模块中的结构示意图。

具体实施方式

[0023] 为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
[0024] 图3为本发明提供的预读式FIFO的逻辑结构示意图,如图3所示,该预读式FIFO可以包括:FIFO控制器、输入寄存器、RAM、使能控制器和输出寄存器。其中,FIFO控制器、输入寄存器和RAM是现有单元,而使能控制器和输出寄存器是增设的单元。输出寄存器也是RAM硬核上已有的寄存器资源,现有技术中没有被预读式FIFO加以利用,而在本发明中采用。
[0025] 其中,使能控制器,用于确定RAM为非空状态且输出寄存器为空状态,或者接收到读请求时,使输入FIFO控制器的读信号有效,并使能输出寄存器输出数据;否则,使输入FIFO控制器的读信号无效,并锁存输出寄存器。
[0026] FIFO控制器,用于没有收到有效的读信号时,通过输入寄存器设置RAM的读地址指向RAM中当前待读取的数据;收到有效的读信号时,通过输入寄存器设置RAM的读地址指向RAM中下一待读取的数据。
[0027] RAM,用于按照读时钟和被设置的读地址,以先入先出的方式输出被写入的数据给输出寄存器。
[0028] 输出寄存器,用于在被使能时,按照读时钟输出寄存的数据。
[0029] 在该预读式FIFO结构中,利用了RAM硬核内部寄存器资源的锁存功能,即输出寄存器的锁存功能。通常,寄存器的结构可以如图4所示,当寄存器的时钟使能(EN)端无效时,寄存器被锁存,其数据输出(Q)端保持数据不变;当寄存器的EN端有效时,寄存器被使能从Q端正常输出数据。图中的D端为数据输入端。
[0030] 由于单纯增加一个输出寄存器会使得FIFO输出的数据晚一个读时钟周期,这样就无法达到预读的功能要求,为此,上述预读式FIFO中额外增加了使能控制器。使能控制器控制对输出寄存器的锁存和使能输出,主要包括以下三种情况:
[0031] 当使能控制器没有收到读请求(图3中的rd),且RAM和输出寄存器都处于非空状态或都处于空状态时,使能控制器使输入FIFO控制器的读信号(图3中的rd_buf)无效,且通过时钟使能信号(图3中的oe_en)锁定输出寄存器。使得输出寄存器保持上一输出数据的状态,不输出新的数据。
[0032] 当使能控制器没有读请求(图3中的rd),RAM为非空状态且输出寄存器为空状态时,使输入FIFO控制器的读信号(图3中的rd_buf)有效,并通过时钟使能信号(图3中的oe_en)使能输出寄存器输出数据。也就是说,只要RAM中有数据,就预先向输出寄存器输出数据,保证在RAM中有数据的情况下输出寄存器非空。这种情况下,如果当前待发送的数据地址为rdata0,则如果没有收到读信号且RAM中有数据,则FIFO控制器设置RAM的读地址为rdata0+1,RAM输出rdata0给输出寄存器。
[0033] 当使能控制器接收到读请求时,同样使能输入FIFO控制器的读信号有效,并使能输出寄存器输出数据;FIFO控制器在读信号有效时,更新RAM的读地址为rdata0+2,RAM在当前读时钟周期输出地址为rdata0+1的数据给输出寄存器,输出寄存器在当前读时钟周期输出地址为rdata0的数据。
[0034] 通过上述三种情况可见,通过使能控制器对FIFO控制器的读信号和输出寄存器的时钟使能信号的控制,可以同样完成FIFO的预读功能。
[0035] 对于预读式FIFO输出的空信号,现有技术中的预读式FIFO的空信号是由FIFO控制器通过比较RAM的读地址和写地址产生,在本发明提供的上述预读式FIFO中,空信号(图3中的empty)由使能控制器直接根据输出寄存器的状态产生,如果输出寄存器为空状态,则使能控制器输出空信号,如果输出寄存器为非空状态,则使能控制器输出非空信号。原有FIFO控制器输出的空信号(图3中的empty_buf)用于向使能控制器通知RAM是否处于空状态,而不作为预读式FIFO的空信号输出。
[0036] 也就是说,FIFO控制器检测RAM的空状态或非空状态,将检测结果通知使能控制器。使能控制器检测输出寄存器是否处于空状态,并在输出寄存器处于空状态时,输出空信号。
[0037] 对于该预读式FIFO控制器中写数据的过程并没有发生变化,即仍然由FIFO控制器控制数据写入RAM的地址。即FIFO控制器接收到有效的写信号(图3中的wr)时,通过输入寄存器设置RAM的写地址(图3中的wr_addr)。
[0038] 相应地,RAM按照写时钟,根据被设置的写地址(图3中的wr_addr)接收被写入的数据(图3中的wdata)。
[0039] 另外,为了保证数据的正常写入和读取,需要保证输出寄存器和RAM的位宽相同,例如,如果预读式FIFO的顶层封装模块采用字节级同步FIFO,RAM的深度为128位,数据位宽为32位,则输出寄存器的数据位宽也为32位。
[0040] 由图3中可见,在上述预读式FIFO中,读时钟对输出寄存器是单独进行时序控制的,原来由RAM输出和后续用户逻辑单元的操作构成的关键路径被打破,输出通过单独的寄存器完成,输出延迟减小,显然相比较现有技术而言更好地满足时序要求,解决时序紧张的问题,能够在此基础上提高预读式FIFO的时钟频率。另外,输出寄存器充分使用了RAM硬核中已有的寄存器资源,从而节约了FPGA的寄存器资源,特别在FIFO位宽较宽时,优点更加突出。
[0041] 另外,本发明提供的上述预读式FIFO基于原有FIFO控制器,且利用的信号都可以基于原有FIFO中的信号生成,充分利用了FPGA内部已有资源,对原有预读式FIFO的改动很小。本发明提供的预读式FIFO中RAM和输出寄存器在RAM实例化模块中的结构可以如图5所示。图5中,oe_en信号只作为输出寄存器的输入信号,该oe_en信号在RAM例化模块中可以直接使用,而其它信号均是已有信号,没有发生变动。
[0042] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。