本发明涉及数据缓存技术领域,尤其涉及一种先进先出数据缓存器及缓存数据的方法。
背景技术
先进先出(fifo,firstinfirstout)数据缓存器由于具备先进先出、平衡输入输出处理速率等特性,在数字集成电路设计中有着广泛的应用,主要用来匹配不同传输速度之间的数据传输。
根据fifo工作的时钟域,可以将fifo分为同步fifo和异步fifo。同步fifo的读时钟和写时钟为同一个时钟,在时钟沿来临时同时发生读写操作;异步fifo的读写时钟不一致,读写时钟是互相独立的。
目前,同步fifo在各类芯片设计中广泛应用,现有芯片设计中通常使用寄存器或伪双端口/双端口随机存取存储器(ramdomaccessmemory,ram)来实现同步fifo,当存储比特较少时,采用寄存器实现在面积上有优势;当存储比特较多时,用ram实现在面积上有优势。如图1所示,一种现有的大容量同步fifo包括输入端口、输出端口、写控制单元、读控制单元和伪双端口ram单元,读控制单元和写控制单元用于产生读写地址进行读写以及产生空满信号提供给外围接口。图1所示的fifo是一个典型的同步fifo,由于需要同时进行读写,此fifo采用了伪双端口ram。
技术实现要素:
为了解决上述技术问题,本发明提供了一种先进先出数据缓存器及缓存数据的方法,能够降低同步fifo的面积。
为了达到本发明目的,本发明实施例的技术方案是这样实现的:
本发明实施例提供了一种先进先出数据缓存器,包括输入端口、输出端口,还包括第一缓存单元、第二缓存单元、第三缓存单元、第一控制单元、第二控制单元和切换单元,其中:
所述第一缓存单元,用于存储通过输入端口输入的数据;
所述第二缓存单元,用于存储通过输出端口输出的数据;
所述第三缓存单元为数据位宽为dw*n的单口随机存取存储器,用于存储通过第二控制单元输入或输出的数据,所述n为大于或等于2的自然数,dw为先进先出数据缓存器的数据位宽;
所述第一控制单元,用于读取第一缓存单元的数据,并写入第二缓存单元中;
所述第二控制单元,用于读取第一缓存单元的数据,并写入第三缓存单元中;当第二缓存单元的数据存储状态为非满状态时,读取第三缓存单元的数据,并写入第二缓存单元中;
所述切换单元,用于获取输入端口的状态、第二控制单元的数据读写状态以及第一缓存单元与第二缓存单元的数据存储状态;并根据获取的状态,打开第一控制单元并关闭第二控制单元,或者关闭第一控制单元并打开第二控制单元。
进一步地,所述切换单元根据获取的状态,打开第一控制单元并关闭第二控制单元,或者关闭第一控制单元并打开第二控制单元,具体包括:
所述先进先出数据缓存器上电后,打开所述第一控制单元并关闭所述第二控制单元;
当所述第一缓存单元与所述第二缓存单元的数据存储状态均为满状态且当前输入端口有数据输入时,关闭所述第一控制单元并打开所述第二控制单元;
当所述第二缓存单元的数据存储状态为非满状态且所述第二控制单元的数据读写状态为空状态时,打开所述第一控制单元并关闭所述第二控制单元。
进一步地,所述第二控制单元包括写控制单元、读写仲裁单元和读控制单元,其中,
所述写控制单元,用于产生写信号,所述写信号用于读取所述第一缓存单元的数据,并写入所述第三缓存单元中;
所述读控制单元,用于获取所述第二缓存单元的数据存储状态,当所述第二缓存单元的数据存储状态为非满状态时,产生读信号,所述读信号用于读取所述第三缓存单元的数据,并写入所述第二缓存单元中;
所述读写仲裁单元,用于对产生的读信号和写信号进行仲裁。
进一步地,所述第一缓存单元为数据位宽为dw、存储深度为(n-1)的寄存器。
进一步地,所述第三缓存单元为数据位宽为dw*2、存储深度为md/2的单口随机存取存储器,所述md为先进先出数据缓存器的存储深度;所述第一缓存单元为数据位宽为dw、存储深度为1的寄存器。
进一步地,所述第二缓存单元为数据位宽为dw、存储深度为4的寄存器。
本发明实施例还提供了一种缓存数据的方法,包括如下步骤:
先进先出数据缓存器接收输入端口写入的数据,存储至第一缓存单元;
先进先出数据缓存器获取输入端口的状态、第二控制单元的数据读写状态以及第一缓存单元与第二缓存单元的数据存储状态;根据获取的状态,打开第一控制单元并关闭第二控制单元,或者关闭第一控制单元并打开第二控制单元;
当打开第一控制单元并关闭第二控制单元时,先进先出数据缓存器读取第一缓存单元的数据,并写入第二缓存单元中;
当关闭第一控制单元并打开第二控制单元时,先进先出数据缓存器读取第一缓存单元的数据,并写入第三缓存单元中,所述第三缓存单元为数据位宽为dw*n的单口随机存取存储器,所述n为大于或等于2的自然数,dw为先进先出数据缓存器的数据位宽;当第二缓存单元的数据存储状态为非满状态时,读取第三缓存单元的数据,并写入第二缓存单元中;
所述先进先出数据缓存器通过输出端口读取第二缓存单元中存储的数据。
进一步地,所述根据获取的状态,打开第一控制单元并关闭第二控制单元,或者关闭第一控制单元并打开第二控制单元的步骤,具体包括:
所述先进先出数据缓存器上电后,打开所述第一控制单元并关闭所述第二控制单元;
当所述第一缓存单元与所述第二缓存单元的数据存储状态均为满状态且输入端口有数据输入时,关闭所述第一控制单元并打开所述第二控制单元;
当所述第二缓存单元的数据存储状态为非满状态且所述第二控制单元的数据读写状态为空状态时,打开所述第一控制单元并关闭所述第二控制单元。
进一步地,所述第三缓存单元为数据位宽为dw*2、存储深度为md/2的单口随机存取存储器,所述md为先进先出数据缓存器的存储深度;所述第一缓存单元为数据位宽为dw、存储深度为1的寄存器。
进一步地,所述第二缓存单元为数据位宽为dw、存储深度为4的寄存器。
本发明的技术方案,具有如下有益效果:
本发明提供的先进先出数据缓存器及缓存数据的方法,通过采用多倍数据位宽的单口ram分时复用,并通过切换单元控制第一控制单元和第二控制单元的状态,进而切换数据传输通路,有效地减小了芯片的面积,降低了芯片的成本,提高了芯片的竞争力。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为传统的大容量同步fifo结构示意图;
图2为本发明第一实施例的一种先进先出数据缓存器的结构示意图;
图3为本发明第二实施例的一种先进先出数据缓存器的结构示意图;
图4为本发明实施例的一种缓存数据的方法的流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
如图2所示,根据本发明的一种先进先出数据缓存器,包括输入端口、输出端口,还包括第一缓存单元、第二缓存单元、第三缓存单元、第一控制单元、第二控制单元和切换单元,其中:
所述第一缓存单元,用于存储通过输入端口输入的数据;
所述第二缓存单元,用于存储通过输出端口输出的数据;
所述第三缓存单元为数据位宽为dw*n的单口随机存取存储器,用于存储通过第二控制单元输入或输出的数据,所述n为大于或等于2的自然数,dw为先进先出数据缓存器的数据位宽;
所述第一控制单元,用于读取第一缓存单元的数据,并写入第二缓存单元中;
所述第二控制单元,用于读取第一缓存单元的数据,并写入第三缓存单元中;当第二缓存单元的数据存储状态为非满状态时,读取第三缓存单元的数据,并写入第二缓存单元中;
所述切换单元,用于获取输入端口的状态、第二控制单元的数据读写状态以及第一缓存单元与第二缓存单元的数据存储状态;并根据获取的状态,打开第一控制单元并关闭第二控制单元,或者关闭第一控制单元并打开第二控制单元。
需要说明的是,所述第一控制单元和第二控制单元在读取第一缓存单元的数据前,先获取第一缓存单元的数据存储状态,输入端口的状态和第二缓存单元的数据存储状态,当切换单元打开第一控制单元并关闭第二控制单元(即数据传输通路为输入端口、第一缓存单元、第一控制单元、第二缓存单元、输出端口)时,若第一缓存单元的数据存储状态为非空,且第二缓存单元的数据存储状态为非满,产生读写地址和读写信号读取第一缓存单元的数据写到第二缓存单元中;当切换单元关闭第一控制单元并打开第二控制单元(即数据传输通路为输入端口、第一缓存单元、第二控制单元、第三缓存单元、第二控制单元、第二缓存单元、输出端口)时,若第一缓存单元的数据存储状态为满、输入端口有数据输入时,产生读写地址和读写信号读取第一缓存单元的数据,写入第三缓存单元中。所述第一控制单元、第二控制单元和切换单元均可以通过现有的组合和时序逻辑电路实现。
进一步地,所述切换单元根据获取的状态,打开第一控制单元并关闭第二控制单元,或者关闭第一控制单元并打开第二控制单元,具体包括:
所述先进先出数据缓存器上电后,打开所述第一控制单元并关闭所述第二控制单元;
当第一缓存单元与第二缓存单元的数据存储状态均为满状态且输入端口有数据输入时,关闭第一控制单元并打开第二控制单元;
当第二缓存单元的数据存储状态为非满状态且第二控制单元的数据读写状态为空状态时,打开第一控制单元并关闭第二控制单元。
在本发明一实施例中,先进先出数据缓存器上电复位后,切换单元打开第一控制单元并关闭第二控制单元,从第一缓存单元中读取输入的数据,并写入第二缓存单元中,此时输出端口可能为空状态,也可能为非空状态,当第二缓存单元没有写满之前,一直通过第一控制单元读写数据;
当第二缓存单元写满以后,新输入的数据先缓存到第一缓存单元中;
如果还有数据输入,那么切换单元产生通道切换信号,关闭第一控制单元并打开第二控制单元,读取第一缓存单元的数据,并写入第三缓存单元中;
获取第二缓存单元的数据存储状态,一旦第二缓存单元中有数据存储空间时,第二控制单元从第三缓存单元读出数据,并将读出的数据写入第二缓存单元中;
当第三缓存单元中的数据全部读完且此时没有数据要写到第三缓存单元中时,切换单元产生通道切换信号,打开第一控制单元并关闭第二控制单元,然后持续根据存储和输入情况自动重复以上的判断和通道切换。
进一步地,参考图3,所述第二控制单元包括写控制单元、读写仲裁单元和读控制单元,其中,
写控制单元,用于产生写信号,所述写信号用于读取第一缓存单元的数据,并写入第三缓存单元中;
读控制单元,用于获取所述第二缓存单元的数据存储状态,当第二数据存储状态为非满状态时,产生读信号,所述读信号用于读取第三缓存单元的数据,并写入第二缓存单元中;
读写仲裁单元,用于对产生的读信号和写信号进行仲裁,以避免对第三缓存单元的读写冲突。
值得说明的是,由于单口ram无法同时进行读写,本发明的第三缓存单元采用多倍数据位宽(1个时钟周期写/读多倍数据位宽的数据)的单口ram分时复用,采用时间片读写数据,以位宽换取时间,解决fifo同时需要读写的问题。另外由于单口ram读写两部分逻辑是独立的,会产生读写冲突的问题,本发明中引入读写仲裁单元来解决读写冲突的问题。
进一步地读写仲裁单元采用写优先策略。
进一步地,所述切换单元通过获取写控制单元和读控制单元的数据读写状态来获取所述第二控制单元的数据读写状态,当写控制单元的数据读写状态为满状态时,第二控制单元的数据读写状态为满状态(此时,第三缓存单元的数据存储状态也为满状态);当读控制单元的数据读写状态为空状态时,第二控制单元的数据读写状态为空状态(此时,第三缓存单元的数据读写状态也为空状态)。
进一步地,参考图3,所述第二缓存单元和第一控制单元、第二控制单元之间设有数据选择器,所述数据选择器用于根据第一控制单元和第二控制单元的状态,从第一控制单元或第二控制单元中选择写入第二缓存单元的数据。
进一步地,所述第一缓存单元为数据位宽为dw、存储深度为(n-1)的寄存器。
需要说明的是,缓存容量等于数据位宽和存储深度的乘积,所述数据位宽、存储深度分别指一次写入或读出的比特位数、最多可存储多少个数据位宽的数据量。
在本发明一具体实施例中,所述第三缓存单元为数据位宽为dw*2、存储深度为md/2的单口随机存取存储器ram,所述md为先进先出数据缓存器的存储深度;第一缓存单元为数据位宽为dw、存储深度为1的寄存器。
在本发明一具体实施例中,所述第二缓存单元为数据位宽为dw、存储深度为4的寄存器。
具体地,由于第二缓存单元的数据位宽为dw而第三缓存单元单口ram的位宽为dw*2,因此可以保证两个时钟周期内至少有一个用于从ram读取数据;由于第二缓存单元的存储深度为4,数据可以以1个时钟周期两个dw数据位宽的速度读出,并写到第二缓存单元中,这样在输入端无数据的情况下,可以实现数据从第三缓存单元到第二缓存单元的快速搬运,节约时间以保证通路控制单元在切换数据流通道时,先进先出数据缓存器的数据输出的连续性。
如图4所示,根据本发明的一种缓存数据的方法,包括如下步骤:
步骤401:先进先出数据缓存器接收输入端口写入的数据,存储至第一缓存单元;
步骤402:先进先出数据缓存器获取输入端口的状态、第二控制单元的数据读写状态以及第一缓存单元与第二缓存单元的数据存储状态;
步骤403:根据获取的状态,打开第一控制单元并关闭第二控制单元,或者关闭第一控制单元并打开第二控制单元;
当打开第一控制单元并关闭第二控制单元时,先进先出数据缓存器读取第一缓存单元的数据,并写入第二缓存单元中;
当关闭第一控制单元并打开第二控制单元时,先进先出数据缓存器读取第一缓存单元的数据,并写入第三缓存单元中,所述第三缓存单元为数据位宽为dw*n的单口随机存取存储器,所述n为大于或等于2的自然数,dw为先进先出数据缓存器的数据位宽;当第二缓存单元的数据存储状态为非满状态时,读取第三缓存单元的数据,并写入第二缓存单元中;
步骤404:先进先出数据缓存器通过输出端口读取第二缓存单元中存储的数据。
进一步地,所述步骤403中根据获取的状态,打开第一控制单元并关闭第二控制单元,或者关闭第一控制单元并打开第二控制单元的步骤,具体包括:
所述先进先出数据缓存器上电后,打开所述第一控制单元并关闭所述第二控制单元;
当第一缓存单元与第二缓存单元的数据存储状态均为满状态且输入端口有数据输入时,关闭第一控制单元并打开第二控制单元;
当第二缓存单元的数据存储状态为非满状态且第二控制单元的数据读写状态为空状态时,打开第一控制单元并关闭第二控制单元。
在本发明一实施例中,先进先出数据缓存器上电复位后,切换单元打开第一控制单元并关闭第二控制单元,从第一缓存单元中读取输入的数据,并写入第二缓存单元中,此时输出端口可能为空状态,也可能为非空状态,当第二缓存单元没有写满之前,一直通过第一控制单元读写数据;
当第二缓存单元写满以后,新输入的数据先缓存到第一缓存单元中;
如果还有数据输入,那么切换单元产生通道切换信号,关闭第一控制单元并打开第二控制单元,读取第一缓存单元的数据,并写入第三缓存单元中;
获取第二缓存单元的数据存储状态,一旦第二缓存单元中有数据存储空间时,第二控制单元从第三缓存单元读出数据,并将读出的数据写入第二缓存单元中;
当第三缓存单元中的数据全部读完且此时没有数据要写到第三缓存单元中时,切换单元产生通道切换信号,打开第一控制单元并关闭第二控制单元,然后持续根据存储和输入情况自动重复以上的判断和通道切换。
进一步地,所述第一缓存单元为数据位宽为dw、存储深度为(n-1)的寄存器。
进一步地,所述第三缓存单元为数据位宽为dw*2、存储深度为md/2的单口随机存取存储器ram,md为先进先出数据缓存器的存储深度;第一缓存单元为数据位宽为dw、存储深度为1的寄存器。
需要说明的是,本发明的第三缓存单元采用多倍数据位宽的单口ram分时复用,采用时间片读写数据,以位宽换取时间,解决fifo同时需要读写的问题,利用读写仲裁机制解决读写冲突问题。本发明的读写仲裁机制采用写优先策略。
进一步地,所述第二缓存单元为数据位宽为dw、存储深度为4的寄存器。
具体地,由于第二缓存单元的数据位宽为dw而第三缓存单元单口ram的位宽为dw*2,因此可以保证两个时钟周期内至少有一个用于从ram读取数据;由于第二缓存单元的存储深度为4,数据可以以1个时钟周期两个dw数据位宽的速度读出,并写到第二缓存单元中,这样在输入端无数据的情况下,可以实现数据从第三缓存单元到第二缓存单元的快速搬运,节约时间以保证通路控制单元在切换数据流通道时,先进先出数据缓存器的数据输出的连续性。
根据本发明的先进先出数据缓存器,其面积相比于传统的大容量fifo具有明显的优势,以存储深度*数据宽度为800x128的fifo为例,第一缓存单元的存储深度*数据宽度为1*128,第二缓存单元的存储深度*数据宽度为4*128,第三缓存单元的存储深度*数据宽度为400*256。如果采用伪双端口ram,那么面积为52145um2,如果采用本发明,那么可以用400x256的单端口ram来解决问题,面积为22825um2,能节约56%的面积,考虑到新增加的外部逻辑的面积(1405um2),仍然能够节省53.5%的面积,进而能够降低芯片的成本,提高芯片的竞争力。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现,相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。