一种数据缓存访问方法和数据缓存控制器转让专利

申请号 : CN201510565986.1

文献号 : CN105183665B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 罗宁

申请人 : 福州瑞芯微电子股份有限公司

摘要 :

发明人提供一种数据缓存访问方法和数据缓存控制器,涉及数据处理领域,并特别涉及数据缓存。在共享的存储器中分配一段连续的存储空间用于先进先出数据缓存,控制器的首地址指针指向所述存储空间的首地址,尾地址指针指向所述存储空间的尾地址,写指针的值为首地址指针的值,读指针的值为首地址指针的值,初始化存储空间为数据缓存队列;所述读写单位为存储空间读写操作的最小单元,所述存储空间的长度为存储空间中读写单位的个数。上述控制器能较好适应不同程序的开发和运行需求,充分利用存储器资源。

权利要求 :

1.一种数据缓存的写入方法,其特征在于,

包括步骤:在共享的存储器中分配一段连续的存储空间用于先进先出数据缓存,控制器的首地址指针指向所述存储空间的首地址,尾地址指针指向所述存储空间的尾地址,写指针的值为首地址指针的值,读指针的值为首地址指针的值,初始化存储空间为数据缓存队列;所述存储空间的长度为存储空间中读写单位的个数,读写单位为存储空间读写操作的最小单元;

写数据时:

判断预计写入计数值减去已读出计数值的差值是否达到存储空间长度,是则置写地址有效信号为无效状态;

否则,置写地址有效信号为有效状态,根据缓存队列的写指针,通过写地址信号线发出写地址,并在接收到外部控制器发送的读取写地址完成信号有效后,预计写入计数值增加一,写指针更新为当前写指针指向的地址值偏移一个读写单位长度后的地址;

同时异步地,当所述数据被外部控制器写入写指针指向的地址位置,且收到外部控制器输入的数据写入完成信号后,将已写入计数值增加一。

2.如权利要求1所述的一种数据缓存的写入方法,其特征在于,还包括步骤:当已写入计数值减去已读出计数值的差值小于设置值时,产生写中断信号。

3.如权利要求1所述的一种数据缓存的写入方法,其特征在于,所述写指针指向所述地址值偏移一个读写单位长度后的地址的步骤还包括,判断所述写指针的值是否已达到尾地址指针值,若否,则写指针指向其后一个读写单位地址;若是,则写指针指向首地址指针指向的位置。

4.一种数据缓存的读取方法,其特征在于,

包括步骤:在共享的存储器中分配一段连续的存储空间用于先进先出数据缓存,控制器的首地址指针指向所述存储空间的首地址,尾地址指针指向所述存储空间的尾地址,写指针的值为首地址指针的值,读指针的值为首地址指针的值,初始化存储空间为数据缓存队列;所述存储空间长度为存储空间中读写单位的个数,读写单位为存储空间读写操作时的最小单元;

读数据时:

判断已写入计数值减去预计读出计数值的值是否为0,

是0则置读地址有效信号为无效状态;

否则,置读地址有效信号为有效状态, 根据缓存队列的读指针,通过读地址信号线发出读地址,并在接收到外部控制器发送的读取读地址完成信号有效后,预计读出计数值增加一,读指针更新为当前读指针指向的地址值偏移一个读写单位长度后的地址;

同时异步地,当外部控制器读出读指针指向的地址位置的数据,且收到外部控制器输入的数据读取完成信号后,已读出计数值增加一。

5.如权利要求4所述的一种数据缓存的读取方法,其特征在于,还包括步骤:当已写入计数值减已读出计数值的差值大于设置值时,产生读中断信号。

6.如权利要求4所述的一种数据缓存的读取方法,其特征在于,所述读指针指向所述地址值偏移一个读写单位长度后的地址的步骤还包括,判断所述读指针的值是否已达到尾地址指针值,若否,则读指针指向其后一个读写单位地址;若是则读指针指向首地址指针指向的位置。

7.一种数据缓存控制器,其特征在于,

所述数据缓存控制器包括读指针寄存器、写指针寄存器,还包括首地址寄存器、尾地址寄存器、读地址产生模块,写地址产生模块;

读指针寄存器,用于存储读地址;

写指针寄存器,用于存储写地址;

首地址寄存器,用于接收和存储在存储器中分配的用于数据缓存的存储空间的首地址;

尾地址寄存器,用于接收和存储在存储器中分配的用于数据缓存的存储空间的尾地址;

读地址产生模块,用于根据已写入计数值减去预计读出计数值的值是否为0,是则置读地址有效信号为无效状态,否则置读地址有效信号为有效状态;用于根据缓存队列的读指针,通过读地址信号线发出读地址;当接收到读地址读取完成信号,预计读出计数值增加一,读指针寄存器修改为当前读指针指向的地址值偏移一个读写单位长度后的地址;用于当数据读取完成信号有效后,已读出计数值增加一;

写地址产生模块,用于当预计写入计数值减去已读出计数值的差值达到缓存空间长度时,置写地址有效信号为无效状态,否则置写地址有效信号为有效状态;用于根据缓存队列的写指针,通过写地址信号线发出写地址;当接收到写地址读取完成信号,预计写入计数值增加一,写指针寄存器修改为当前写指针指向的地址值偏移一个读写单位长度后的地址;

用于当数据写入完成信号有效后,已写入计数值增加一;

所述读写单位为存储空间读写操作的最小单元,所述缓存空间长度为存储空间中读写单位的个数。

8.如权利要求7所述的一种数据缓存控制器,其特征在于,

所述数据缓存控制器还包括读中断产生模块;读中断产生模块用于根据已写入计数值减已读出计数值的差值大于设置值时,产生读中断信号。

9.如权利要求7所述的一种数据缓存控制器,其特征在于,

所述数据缓存控制器还包括写中断产生模块;写中断产生模块用于根据已写入计数值减已读出计数值的差值小于设置值时,产生写中断信号。

10.如权利要求7所述的一种数据缓存控制器,其特征在于,所述读地址产生模块还用于当把读指针寄存器的值修改为读指针寄存器值偏移一个读写单位长度后的地址时,还判断所述读指针寄存器的值是否已达到尾地址寄存器的值,若否,则读指针指向其后一个读写单位地址;若是则将读指针寄存器的值修改为首地址寄存器的值;

所述写地址产生模块还用于当把写指针寄存器的值修改为写指针寄存器的值偏移一个读写单位长度后的地址时,还判断所述写指针寄存器的值是否已达到尾地址寄存器的值,若否,则写指针指向其后一个读写单位地址;若是则写指针寄存器的值修改为首地址寄存器的值。

11.如权利要求7~10任一项所述的一种数据缓存控制器,其特征在于,所述读地址产生模块使用的读时钟信号与写地址产生模块使用的写时钟信号为同步或异步。

说明书 :

一种数据缓存访问方法和数据缓存控制器

技术领域

[0001] 本发明涉及数据处理领域,并特别涉及数据缓存。

背景技术

[0002] FIFO(先进先出队列)是一种在电子系统得到广泛应用的器件。FIFO的工作原理可用图1来表示。请参考图1,通常的FIFO器件包括一块专用的存储器和FIFO读写控制电路,该存储器的大小在硬件设计的初期分配和设置,读写控制电路用于产生满信号和根据地址读写存储器中的数据。在实现本发明的过程中,发明人发现现有技术中存在如下问题,上述存储器价格较高。而随着产业分工的细化,硬件设计和软件设计通常由不同的机构或公司组织完成,因此在硬件设计初期的存储器容量可能会限制软件设计的。

发明内容

[0003] 为能达成前述及相关目的,这一个或更多个方面包括在下文中充分描述并在所附权利要求中特别指出的特征。以下描述和附图详细阐述了这一个或更多个方面的某些说明性特征。但是,这些特征仅仅是指示了可采用各种方面的原理的各种方式中的若干种,并且本描述旨在涵盖所有此类方面及其等效方面。
[0004] 发明人提供了一种数据缓存的写入方法,包括步骤:
[0005] 在共享的存储器中分配一段连续的存储空间用于先进先出数据缓存,控制器的首地址指针指向所述存储空间的首地址,尾地址指针指向所述存储空间的尾地址,写指针的值为首地址指针的值,读指针的值为首地址指针的值,初始化存储空间为数据缓存队列;所述读写单位为存储空间读写操作的最小单元,所述存储空间的长度为存储空间中读写单位的个数;
[0006] 写数据时:
[0007] 判断预计写入计数值减去已读出计数值的差值是否达到存储空间长度,
[0008] 是则置写地址有效信号为无效状态;
[0009] 否则,根据缓存队列的写指针,通过写地址信号线发出写地址,预计写入计数值增加一,写指针更新为指向所述地址值偏移一个读写单位长度后的地址;
[0010] 同时异步地,当所述数据被外部控制器写入上述位置完成,且收到外部控制器输入的数据写入完成信号后,将已写入计数值增加一。
[0011] 进一步,还包括步骤:当已写入计数值减去已读出计数值的差值小于设置值时,产生写中断信号。
[0012] 进一步,所述步骤写指针指向所述地址值偏移一个读写单位长度后的地址还包括,判断所述写指针的值是否已达到尾地址指针值,若否,则写指针指向其后一个读写单位地址;若是,则写指针指向首地址指针指向的位置。
[0013] 进一步,包括步骤:在共享的存储器中分配一段连续的存储空间用于先进先出数据缓存,控制器的首地址指针指向所述存储空间的首地址,尾地址指针指向所述存储空间的尾地址,写指针的值为首地址指针的值,读指针的值为首地址指针的值,初始化存储空间为数据缓存队列;所述读写单位为存储空间读写操作时的最小单元,所述存储空间长度为存储空间中读写单位的个数;
[0014] 读数据时:
[0015] 判断已写入计数值减去预计读出计数值的值是否为0,
[0016] 0则置读地址有效信号为无效状态;
[0017] 否则,根据缓存队列的读指针,通过读地址信号线发出读地址,预计读出计数值增加一,读指针更新为指向所述地址值偏移一个读写单位长度后的地址;
[0018] 同时异步地,当外部控制器读出上述位置数据,且收到外部控制器输入的数据读取完成信号后,已读出计数值增加一。
[0019] 进一步,还包括步骤:当已写入计数值减已读出计数值的差值大于设置值时,产生读中断信号。
[0020] 进一步,所述步骤读指针指向所述地址值偏移一个读写单位长度后的地址还包括,判断所述读指针的值是否已达到尾地址指针值,若否,则读指针指向其后一个读写单位地址;若是则读指针指向首地址指针指向的位置。
[0021] 发明人还提供了一种数据缓存控制器,所述数据缓存控制器包括读指针寄存器、写指针寄存器、,还包括首地址寄存器、尾地址寄存器、读地址产生模块,写地址产生模块;
[0022] 读指针寄存器,用于存储读地址;
[0023] 写指针寄存器,用于存储写地址;
[0024] 首地址寄存器,用于接收和存储在存储器中分配的用于数据缓存的存储空间的首地址;
[0025] 尾地址寄存器,用于接收和存储在存储器中分配的用于数据缓存的存储空间的尾地址;
[0026] 读地址产生模块,用于根据已写入计数值减去预计读出计数值的值是否为0,是则置读地址有效信号为无效状态,否则置读地址有效信号为有效状态;用于根据缓存队列的读指针,通过读地址信号线发出读地址;当接收到读地址读取完成信号,预计读出计数值增加一,读指针寄存器修改为所述地址值偏移一个读写单位长度后的地址;用于当数据读取完成信号有效后,已读出计数值增加一;
[0027] 写地址产生模块,用于当预计写入计数值减去已读出计数值的差值达到缓存空间长度时,置写地址有效信号为无效状态,否则置写地址有效信号为有效状态;用于根据缓存队列的写指针,通过写地址信号线发出写地址;当接收到写地址读取完成信号,预计读出计数值增加一,写指针寄存器修改为所述地址值偏移一个读写单位长度后的地址;用于当数据写入完成信号有效后,已写入计数值增加一;
[0028] 所述读写单位为存储空间读写操作的最小单元,所述缓存空间长度为存储空间中读写单位的个数。
[0029] 进一步,所述数据缓存控制器还包括读中断产生模块;读中断产生模块用于根据已写入计数值减已读出计数值的差值大于设置值时,产生读中断信号。
[0030] 进一步,所述数据缓存控制器还包括写中断产生模块;写中断产生模块用于根据已写入计数值减已读出计数值的差值小于设置值时,产生写中断信号。
[0031] 进一步,所述读地址产生模块还用于当把读指针寄存器的值修改为读指针寄存器值偏移一个读写单位长度后的地址时,还判断所述读指针寄存器的值是否已达到尾地址指针值,若否,则写指针指向其后一个读写单位地址;若是则读指针寄存器的值修改为首地址指针的值;
[0032] 所述写地址产生模块还用于当把写指针寄存器的值修改为写指针寄存器的值偏移一个读写单位长度后的地址时,还判断所述写指针寄存器的值是否已达到尾地址指针值,若否,则写指针指向其后一个读写单位地址;若是则写指针寄存器的值修改为首地址指针的值。
[0033] 进一步,所述读地址产生模块使用的读时钟信号与写地址产生模块使用的写时钟信号可以同步,也可以异步。
[0034] 区别于现有技术,上述方案的外部控制器进行实际的数据访问,而在FIFO控制器中主要管理FIFO队列的地址。该FIFO控制器在系统的存储器中分配一块连续的存储空间专门用于该FIFO控制器,使得FIFO的存储空间的大小可以根据具体需要而分配,能较好适应不同程序的开发和运行需求,充分利用存储器资源。

附图说明

[0035] 图1为背景技术所述一种常见FIFO读写控制电路的示意图;
[0036] 图2为具体实施方式所述实施例的一种FIFO模块的结构示意图。
[0037] 图3为具体实施方式所述实施例的一种FIFO模块的模块结构示意图。
[0038] 图4为具体实施方式所述实施例的一种FIFO读时序图;
[0039] 图5为具体实施方式所述实施例的一种FIFO写时序图;
[0040] 图6为具体实施方式所述的一种FIFO的读取方法;
[0041] 图7为具体实施方式所述的一种FIFO的写入方法;
[0042] 附图标记说明:
[0043] 101、读地址产生模块;
[0044] 103、写地址产生模块;
[0045] 105、FIFO寄存器组
[0046] 107、读中断产生模块;
[0047] 109、写中断产生模块。

具体实施方式

[0048] 为详细说明技术方案的技术内容、构造特征、所实现目的及效果,以下结合具体实施例并配合附图详予说明。在以下描述中,出于解释目的阐述了众多的具体细节以提供对一个或更多个方面的透彻理解。但是显而易见的是,没有这些具体细节也可实践此类方面。
[0049] 在此给出一些术语的列表:
[0050] FIFO:First Input First Output的缩写,先入先出队列
[0051] r_clk:读时钟信号
[0052] read_ReadAddr_done:读取读地址完成信号
[0053] read_data_done:数据读取完成信号
[0054] readAddr_valid:读地址有效信号
[0055] readAddr:读地址信号
[0056] read_int:读中断信号
[0057] w_clk:写时钟信号
[0058] read_writeAddr_done:读取写地址完成信号
[0059] write_data_done:数据写完成信号
[0060] writeAddr_valid:写地址有效信号
[0061] writeAddr:写地址信号
[0062] write_int(读中断信号)
[0063] write_count_predict:预计写入计数值
[0064] read_count_predict:预计读出计数值
[0065] write_count:已写入计数值
[0066] read_count:已读出计数值
[0067] addr0:地址0
[0068] addr1:地址0
[0069] addr2:地址2
[0070] addr3:地址3
[0071] D0:数据0
[0072] D1:数据1
[0073] D2:数据2
[0074] D3:数据3
[0075] 本发明提供一种FIFO控制器,所述FIFO控制器没有专用存储器,使用FIFO的模块间可共享的任意存储器都可以被FIFO控制器进行管理作为FIFO缓存使用,即FIFO对应的存储器与FIFO控制器完全独立。FIFO控制器直接与外部控制器连接,外部控制器可以是处理器或其他访问逻辑电路。FIFO控制器与它使用的存储器之间没有数据和地址通路。下述以本发明的一种FIFO控制器为例,说明FIFO控制器与处理器直接连接时,本发明中FIFO控制器、处理和存储器之间的一种可能的信号关系。在本发明的一种实施例中,FIFO控制器与处理器连接,FIFO控制器的读地址产生逻辑根据当前FIFO队列状态产生readAddr_valid(读地址有效信号)。readAddr_valid(读地址有效信号)表示FIFO队列的读地址有效或无效,处理器根据readAddr_valid(读地址有效信号)判断fifo控制器的读地址是否可以被使用来进行数据读取。当readAddr_valid(读地址有效信号)有效,即FIFO控制队列有数据可读取,处理器获取读地址信号,并在当前周期使能read_readAddr_done(读取读地址完成信号),FIFO控制器接收到该信号后,FIFO控制器的读地址产生逻辑在下一个周期更新FIFO队列readAddr(读地址);外部处理器收到readAddr(读地址)后主动发起对存储器的访问,即根据收到的readAddr(读地址)读取存储器中存储的数据。在一些实施例中,存储器收到readAddr(读地址)后返回忙信号或在相应的周期内返回对应的数据。当处理器收到存储器由于仲裁等原因返回的忙信号时,进入等待状态;若处理器数据读取请求被响应,则处理器收到数据后产生read_data_done(数据读完成信号)。类似的,在处理器发起FIFO写访问时,处理器在FIFO队列可接收数据时(即read_writeAddr_valid有效时)获取写地址并使能
read_writeAddr_done(读取写地址完成信号),当处理器根据writeAddr(写地址)访问存储器并被响应,完成数据写入后产生write_data_done(数据写入完成信号)。
[0076] 请参阅图2~3,为本实施例地址管理信号线组,其分别为读地址信号线组和写地址信号线组。
[0077] 读地址信号线组包括r_clk(读时钟信号)、read_ReadAddr_done(读取读地址完成信号)、read_data_done(数据读取完成信号)、readAddr_valid(读地址有效信号)、readAddr(读地址信号),其中readAddr_valid(读地址有效信号)、readAddr为FIFO控制器产生的对外信号,用于访问和控制存储器,read_ReadAddr_done(读取读地址完成信号)、read_data_done(数据读取完成信号)为外部输入FIFO控制器的信号。在另一些实施例中还包括了read_int(读中断信号),read_int为FIFO控制器产生的对外信号。
[0078] 写地址信号线组包括w_clk(写时钟信号)、read_writeAddr_done(读取写地址完成信号)、write_data_done(数据写完成信号)、writeAddr_valid(写地址有效信号)、writeAddr(写地址信号)。其中writeAddr_valid、wirteAddr为FIFO控制器产生的对外信号,用于访问和控制存储器,read_writeAddr_done、write_data_done(数据写完成信号)为外部输入FIFO控制器的信号。在另一些实施例中还包括了write_int(读中断信号),write_int为FIFO控制器产生的由存储器处理的信号。
[0079] read_ReadAddr_done(读取读地址完成信号)和read_writeAddr_done(读取写地址完成信号)信号分别由直接连接FIFO的外部电路产生,外部电路可以是直接连接FIFO控制器的处理器或其他逻辑电路产生,read_data_done(数据读取完成信号)和write_data_done(数据写完成信号)分别由直接连接FIFO控制器的处理器或其他逻辑电路根据存储器的访存状态产生。这些信号每个周期只对应一个单位数据的处理有效。
[0080] 本实施例的一种先进先出缓存数据访问方法,首先初始化一段存储空间专门用于先进先出数据访问。初始化过程可以发生在第三方程序启动时,或者系统启动时,根据当前需要动态分配存储空间的大小。初始化的过程为在共享的存储器比如内存中分配一段连续的存储空间用于先进先出数据缓存,该存储空间在未分配专用于先进先出数据访问之前,其他设备或者模块可以访问该存储区域的数据。FIFO控制器还根据分配的存储空间初始化FIFO队列。根据分配的存储空间,控制器的首地址指针指向所述存储空间的首地址,尾地址指针指向所述存储空间的尾地址,写指针的值为首地址指针的值,读指针的值为首地址指针的值;所述读写单位为存储空间读写操作的最小单元,所述存储空间长度为存储空间中读写单位的个数;读和写都是对该存储空间的访问。
[0081] 请参考图6,在一种实施例中,向该存储空间写数据的步骤为:
[0082] S501判断write_count_predict(预计写入计数值)减去read_count(已读出计数值)的差值是否达到存储空间长度,是则S502置writeAddr_valid(写地址有效信号)为无效状态,否则,S503置writeAddr_valid(写地址有效信号)为有效状态;S504根据缓存队列的写指针,发出writeAddr(写地址信号),write_count_predict(预计写入计数值)增加一,写指针更新为指向所述地址值偏移一个读写单位长度后的地址;同时异步地,S505当所述数据被外部控制器写入写指针指向的地址位置,且收到外部控制器输入的写完成信号后,将write_count(已写入计数值)增加一。
[0083] 请参考图4,图4为上述步骤方法时序图。writeAddr_valid(写地址有效信号)为低有效,read_writeAddr_done(读取写地址完成信号)和write_data_done(数据写完成信号)信号线高有效;FIFO控制器通过writeAddr信号线向与FIFO控制器直接连接的处理器或其他逻辑电路传送写地址。writeAddr_valid(写地址有效信号)可以通过计算write_count_predict(预计写入计数值)和read_count(已读出计数值)的差值判断,当差值为存储空间长度时,writeAddr_valid(写地址有效信号)无效,表示此时FIFO队列为满,无法向其写入数据。请参考图4中的信号变化,当FIFO队列可写writeAddr_valid(写地址有效信号)信号为低时,此时FIFO控制器的写指针指向addr0,即writeAddr有效且值为addr0,处理器接收addr0。处理器接收addr0后,处理器或其他访问逻辑通知存储器读取数据线上的数据data0,并对addr0指向的位置写入该数据。若处理器或其他访问逻辑在发起存储器访问完成后使能write_data_done(数据写完成信号)(图中D0所示区域);
[0084] 而在FIFO控制器接收到read_writeAddr_done(读取写地址完成信号)有效后(图中A0所示区域),FIFO控制器的写地址产生逻辑根据当前FIFO队列产新的writeAddr,即addr1,并且write_count_predict(预计写入计数值)增加一。addr0也由FIFO控制器内的写地址逻辑电路产生,每当处理器读取一个写地址之后,写地址逻辑产生电路将写指针(指向写缓存地址)加一,即writeAddr指向下一写地址,write_count_predict(预计写入计数值)增加一。写指针加一一般为写指针指向所述地址值偏移一个读写单位长度后的地址,该地址为FIFO队列中下一可写地址。
[0085] 请参考图7,在一种实施例中,向该存储空间读数据的步骤为:
[0086] S601判断write_count(已写入计数值)减去read_count_predict(预计读出计数值)的值是否为0,0则S602置读地址有效信号为无效状态;否则,S603置读地址有效信号为有效,S604根据缓存队列的读指针,通过读地址信号线发出读地址,read_count_predict(预计读出计数值)增加一,读指针更新为指向所述地址值偏移一个读写单位长度后的地址;同时异步地,S605通过总线根据所述地址值从读指针指向的位置读数据,当读出上述位置数据并收到读完成信号后,read_count(已读出计数值)增加一。
[0087] 请参考图5,图5为上述步骤方法时序图。readAddr_valid(读地址有效信号)为低有效,即当readAddr_valid(读地址有效信号)为高时,表示readAddr信号无效,当其为低时表示readAddr信号有效;read_ReadAddr_done(读取读地址完成信号)和read_data_done(数据读取完成信号)信号高有效;FIFO控制器通过readAddr信号线向存储器传送读地址。readAddr_valid(读地址有效信号)可以通过计算写入计数值和读出计数值的差值判断,当差值为0时表示FIFO队列为空,没有可读数据,此时readAddr_valid(读地址有效信号)无效,即readAddr_valid(读地址有效信号)为高。请参考图5中从信号变化,当判断FIFO队列可读则readAddr_valid(读地址有效信号)信号线为低,此时读地址信号线上传送的地址addr0有效,addr0的值为读指针的值。处理器或其他访问逻辑通知存储器根据addr0读取数据data0,并通过数据总线将data0回传送给处理器或其他访问逻辑。处理器或其他访问逻辑发起存储器访问并完成访问后使能read_data_done(数据读取完成信号)信号(图中D0所示区域),read_count(已读出计数值)增加一。
[0088] 当FIFO控制器接收到FIFO控制器直接连接的处理器或其他逻辑电路产生的read_ReadAddr_done(读取读地址完成信号)信号有效后(图中A0所示区域),FIFO控制器根据当前FIFO队列产生新的readAddr,即addr1,即读指针更新为指向所述地址值偏移一个读写单位长度后的地址,并且read_count_predict(预计读出计数值)加1。读指针加一一般为读指针指向所述地址值偏移一个读写单位长度后的地址,该地址为FIFO队列中下一可读地址。
[0089] 需要说明的是上述写数据和读数据的方法可以是同时实施的,即一个FIFO控制器中可以只实现其中的读方法步骤或只实现其中的写方法步骤,也可以同时实施读方法步骤和写方法步骤;在另一些实施例中,FIFO控制的读写方法可以是同步也可以是异步。上述方法在每次软件或系统运行时,根据不同软件或不同系统运行时对FIFO空间的需求,从共享的存储器中为FIFO控制器分配与所述需求对应大小的存储空间。并分别提供对应的读和写的方法,解决动态分配FIFO存储空间后读和写的问题。
[0090] 区别于现有技术,该方法的外部控制器进行实际的数据访问,而在FIFO控制器中主要管理FIFO队列的地址。该FIFO控制器在系统的存储器中分配一块连续的存储空间专门用于该FIFO控制器,使得FIFO的存储空间的大小可以根据具体需要而分配,FIFO的单位数据大小也可以进行指定,灵活性高,能较好适应不同程序的开发和运行需求,并有效的利用系统存储器资源。
[0091] 在另一些实施例中,当write_count(已写入计数值)减read_count(已读出计数值)的差值达到设置值时,控制器产生写中断信号。所述设置值为第三方程序或者系统根据需要临时设置的,该设置值可以存于寄存器中。FIFO控制器通过比较上述差值和设置值,在表达式为真的情况下,触发该中断。例如,在一些情况下,当写入的数据达到第三方程序所要求的数据量时,产生该中断,在另一些情况,写入的数据的无法达到第三方程序所要求的数量时产生该中断。产生该中断后,监听该中断的模块可以读取到该中断。
[0092] 在另一些实施例中,当write_count(已写入计数值)减read_count(已读出计数值)的差值达到设置值时,产生读中断信号。所述设置值为第三方程序或者系统根据需要临时设置的,该设置值可以存于寄存器中。FIFO控制器通过比较上述差值和设置值,在表达式为真的情况下,触发该中断。例如,在一些情况下,当读取的数据达到第三方程序所要求的数量时,触发该中断;在另一些请下,当读取的的数据量无法达到第三方程序要求时触发该中断。在另一些情况下,当write_count(已写入计数值)减read_count(已读出计数值)的差值小于设置值时产生写中断,告诉写缓存设备继续写入;当write_count(已写入计数值)减read_count(已读出计数值)的差值大于设置值时,产生读中断,告诉读缓存设备尽快读取走数据,否则缓存可能会被写满并停下来。
[0093] 上述两种中断有利于加快FIFO中的数据处理,根据不同的第三方程序或者系统需求设置不同的设置值和比较方程式,通过中断避免浪费第三方程序或系统的宝贵处理时间的浪费。
[0094] 在另一些实施例中FIFO控制器将分配到的存储空间初始化为一个循环队列。所述步骤读指针指向所述地址值偏移一个读写单位长度后的地址还包括,判断所述读指针的值是否已达到尾地址指针值,若否,则写指针指向其后一个读写单位地址;若是则读指针指向首地址指针指向的位置。所述步骤写指针指向所述地址值偏移一个读写单位长度后的地址还包括,判断所述写指针的值是否已达到尾地址指针值,若否,则写指针指向其后一个读写单位地址;若是则写指针指向首地址指针指向的位置。
[0095] 发明人还提供与方法对应的一种数据缓存控制器。请参考图3,所述数据缓存控制器包括FIFO寄存器组105,FIFO寄存器组包括读指针寄存器、写指针寄存器,还包括首地址寄存器、尾地址寄存器、读地址产生模块,写地址产生模块;
[0096] 读指针寄存器,用于存储读地址;
[0097] 写指针寄存器,用于存储写地址;
[0098] 首地址寄存器,用于接收和存储在存储器中分配的用于数据缓存的存储空间的首地址;
[0099] 尾地址寄存器,用于接收和存储在存储器中分配的用于数据缓存的存储空间的尾地址;
[0100] 读地址产生模块101,用于根据write_count(已写入计数值)减去read_count_predict(预计读出计数值)的值是否为0,设置读地址有效信号;用于读取读指针寄存器中的读地址值,等待读地址读取完成信号有效后,read_count_predict(预计读出计数值)增加一,读指针寄存器修改为所述地址值偏移一个读写单位长度后的地址;用于当读完成信号有效后,read_count(已读出计数值)增加一;
[0101] 写地址产生模块103,用于根据write_count_predict(预计写入计数值)减去read_count(已读出计数值)的差值是否达到缓存空间长度设置写地址有效信号,用于读取写指针寄存器中的地址值,等待写地址读取完成信号有效后,write_count_predict(预计写入计数值)增加一,写指针寄存器指修改为所述地址值偏移一个读写单位长度后的地址;
用于当写完成信号有效后,write_count(已写入计数值)增加一。
[0102] 所述读写单位为存储空间读写操作的最小单元,所述缓存空间长度为存储空间中读写单位的个数。
[0103] 在另一些实施例中,所述数据缓存控制器还包括读中断产生模块107;读中断产生模块107用于根据write_count(已写入计数值)减read_count(已读出计数值)的差值达到设置值时,产生读中断信号。
[0104] 在另一些实施例中,所述数据缓存控制器还包括写中断产生模块109;写中断产生模块109用于根据write_count(已写入计数值)减read_count(已读出计数值)的差值达到设置值时,产生写中断信号。
[0105] 在另一些实施例中,所述读地址产生模块101还用于当把读指针寄存器的值修改为读指针寄存器值偏移一个读写单位长度后的地址时,还判断所述读指针寄存器的值是否已达到尾地址指针值,若否,则写指针指向其后一个读写单位地址;若是则读指针寄存器的值修改为首地址指针的值。
[0106] 所述写地址产生模块103还用于当把写指针寄存器的值修改为写指针寄存器的值偏移一个读写单位长度后的地址时,还判断所述写指针寄存器的值是否已达到尾地址指针值,若否,则写指针指向其后一个读写单位地址;若是则写指针寄存器的值修改为首地址指针的值。
[0107] 在上述方案中,所述读地址产生模块101使用的读时钟信号与写地址产生模块使用的写时钟信号可以不是同一个时钟信号,即可以是同步时钟信号也可以是异步时钟信号。
[0108] 需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括……”或“包含……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的要素。此外,在本文中,“大于”、“小于”、“超过”等理解为不包括本数;“以上”、“以下”、“以内”等理解为包括本数。
[0109] 本领域内的技术人员应明白,上述各实施例可提供为方法、装置、或计算机程序产品。这些实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。上述各实施例涉及的方法中的全部或部分步骤可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机设备可读取的存储介质中,用于执行上述各实施例方法所述的全部或部分步骤。
[0110] 上述各实施例是参照根据实施例所述的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到计算机设备的处理器以产生一个机器,使得通过计算机设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0111] 这些计算机程序指令也可存储在能引导计算机设备以特定方式工作的计算机设备可读存储器中,使得存储在该计算机设备可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0112] 这些计算机程序指令也可装载到计算机设备上,使得在计算机设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0113] 尽管已经对上述各实施例进行了描述,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改,所以以上所述仅为本发明的实施例,并非因此限制本发明的专利保护范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围之内。