CN110968538B - 一种数据缓冲方法和装置 - Google Patents
一种数据缓冲方法和装置 Download PDFInfo
- Publication number
- CN110968538B CN110968538B CN201811141079.4A CN201811141079A CN110968538B CN 110968538 B CN110968538 B CN 110968538B CN 201811141079 A CN201811141079 A CN 201811141079A CN 110968538 B CN110968538 B CN 110968538B
- Authority
- CN
- China
- Prior art keywords
- data
- dual
- write
- block
- port ram
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Static Random-Access Memory (AREA)
Abstract
本发明实施例提供了一种数据缓冲方法和装置,所述方法包括:获取写/读操作的数据长度、在内部总线上的首个有效字节数据的起始位置信息,以及在多块双端口RAM上的数据操作指针,根据写/读操作的数据长度和数据操作指针,确定在多块双端口RAM上写/读操作的操作位置信息,根据写/读操作的操作位置信息和起始位置信息,重新排列多块双端口RAM的对应的字节数据,并执行数据缓冲的写/读操作,避免了DMA控制器的源地址和目的地址需要对齐的限制,并且没有增设触发器,继而减少了增设触发器所需占用的芯片面积,在处理源地址和目的地址不对齐的情况时,无需经过触发器对数据进行移位,继而减少了读数据从双端口RAM读端口到内部总线的延迟。
Description
技术领域
本发明涉及数据处理技术领域,特别是涉及一种数据缓冲方法、一种数据缓冲装置。
背景技术
片内总线DMA(Direct Memory Access,直接存储器存取)控制器是SoC(System onChip,片上***)中常见的一种DMA控制器。这种DMA控制器用于在SoC的片内总线网络上将指定长度的数据从源地址搬运到目的地址。
DMA控制器为了提高片内总线的利用效率,通常会将从源地址读取的数据在内部进行缓冲后再写入目的地址。DMA控制器在进行数据缓冲时,常用的缓冲资源有双端口RAM(random access memory,随机存取存储器)和触发器。触发器具有使用灵活的特点。双端口RAM的使用没有触发器灵活。存储相同容量的数据时,双端口RAM占用的芯片的面积通常远远小于触发器占用的芯片面积。
双端口RAM通常有一个写端口和一个读端口,写端口和读端口可以共用一个时钟输入也可以各自使用独立的时钟输入。双端口RAM的写端口通常包含:写地址、写数据、写使能、写时钟。在写时钟的每个上升沿,如果写使能有效,则将写数据在RAM中写入写地址指定的位置。双端口RAM的读端口通常包含:读地址、读使能、读数据、读时钟。在读时钟的每个上升沿,如果读使能有效,则读地址指定的数据在下一个读时钟上升沿来临前出现在读数据端口上。读使能有效时,双端口RAM读端口当前时钟周期读地址指定的数据在下一个时钟周期中出现在读数据端口上。
DMA控制器使用1块与片内总线位宽相同的双端口RAM作为数据缓冲。DMA控制器为双端口RAM提供一个写指针、一个读指针。DMA控制器使用一个用于记录双端口RAM中数据数量的计数器。这个计数器根据DMA控制器对双端口RAM的写入和读出操作统计双端口RAM中存储的有效数据的项数。DMA控制器每从内部总线上获得一次源数据,就将内部总线上读到的数据直接写入双端口RAM的写端口并递增写指针。当双端口RAM的数据量计数器到达设定的阈值时,DMA控制器开始从双端口RAM的读端口读取数据,双端口RAM读端口的数据直接作为内部总线上的数据被DMA控制器写入指定的目的地址。DMA控制器每从双端口RAM读取一次数据就对读指针进行递增。
在第一种方案中,由于DMA控制器直接将内部总线返回的源数据写入双端口RAM,并且直接将双端口RAM读端口的数据作为目的数据发送到内部总线上,DMA控制器要求起始源地址和起始目的地址的低位地址对齐。这里的地址低位是指小于总线位宽的部分。如果内部总线的位宽为2的M次幂字节,这种方案中的DMA控制器要求起始源地址的低M位和起始目的地址的低M位的值相同。
在第一种方案的基础上,还存在第二种方案,在双端口RAM的读端口外,增加了一组与内部总线同位宽的触发器。DMA数据进出双端口RAM的方式不变,当DMA的源地址和目的地址的低位不对齐时,DMA先将从双端口RAM中的数据读出到这组触发器中,再根据源地址和目的地址低位的差异从这组触发器和双端口RAM的读端口中选择发送到内部总线上的DMA数据。
在第二种方案中,避免了第一种方案中DMA源地址和DMA目的地址间低位地址对齐的限制,但是增加了一组与内部总线宽度相同的触发器会引起DMA控制器占用芯片面积的增加。这种对芯片面积增加的影响在FPGA(Field-Programmable Gate Array,现场可编程门阵列)的实现中较为明显。
发明内容
本发明实施例所要解决的技术问题是提供一种数据缓冲方法及装置,以便避免了DMA控制器的源地址和目的地址需要对齐的限制,减少了增设触发器所需占用的芯片面积,减少了读数据从双端口RAM读端口到内部总线的延迟。
为了解决上述问题,本发明公开了一种数据缓冲方法,包括:
获取写/读操作的数据长度;
获取写/读操作在内部总线上的首个有效字节数据对应的起始位置信息;
获取写/读操作在多块双端口RAM上对应的数据操作指针,其中,所述双端口RAM一次存储一个字节数据,所述双端口RAM的块数与所述内部总线一次传输的字节数据的最大数量相同;
根据所述写/读操作的数据长度和数据操作指针,确定在所述多块双端口RAM上写/读操作的的操作位置信息;
根据所述写/读操作的操作位置信息和起始位置信息,重新排列所述多块双端口RAM对应的字节数据,并执行数据缓冲的写/读操作。
可选地,所述方法还包括:
根据所述写/读操作的数据长度和记录的数据操作指针,生成下一个数据操作指针并记录。
可选地,所述操作位置信息包括双端口RAM中的块内位置标识,所述根据所述写/读操作的数据长度和数据操作指针,确定在所述多块双端口RAM上的操作位置信息包括:
根据所述写/读操作的数据长度和数据操作指针,生成在各块双端口RAM上写/读操作的块内位置标识。
可选地,所述数据操作指针包括双端口RAM的块标识和双端口RAM中的块内位置标识,所述根据所述写操作的数据长度和数据操作指针,生成在各块双端口RAM上写操作的块内位置标识包括:
根据所述写操作的数据长度和数据操作指针中的双端口RAM的块标识,确定在所述各块双端口RAM上写操作的使能信号;
根据所述写操作的使能信号和数据操作指针中的双端口RAM中的块内位置标识,确定在各块双端口RAM上写操作的块内位置标识。
可选地,所述根据所述写操作的数据长度和首个双端口RAM的块标识,确定在所述各块双端口RAM上写操作的使能信号包括:
根据所述写操作的数据长度和数据操作指针中的双端口RAM的块标识,确定写操作在数据操作指针中的块内位置标识和下一个数据操作指针中的块内位置标识对应的使能信息;
根据所述使能信息,确定在所述各块双端口RAM上写操作的使能信号。
可选地,所述数据操作指针包括双端口RAM的块标识和双端口RAM中的块内位置标识,所述根据所述读操作的数据长度和数据操作指针,生成在各块双端口RAM上读操作的块内位置标识包括:
根据所述读操作的数据长度和数据操作指针中的双端口RAM的块标识,确定读操作在数据操作指针中的块内位置标识和下一个数据操作指针的块内位置标识对应的使能信息;
当DMA控制器给双端口RAM有效的使能信号时,根据所述使能信息和数据操作指针中的块内位置标识,确定所述各个双端口RAM上读操作的块内位置标识;
根据所述使能信息和下一个数据操作指针中的块内位置标识,确定所述各块双端口RAM上读操作的块内位置标识。
可选地,所述根据所述写操作的操作位置信息和起始位置信息,重新排列所述多块双端口RAM对应的字节数据,并执行数据缓冲的写操作包括:
根据所述写操作的操作位置信息和起始位置信息,在所述内部总线上,为每块双端口RAM选取所述写操作的字节数据;
根据所述操作位置信息,将选取的字节数据写入对应的双端口RAM。
可选地,所述根据所述写操作的操作位置信息和起始位置信息,在所述内部总线上,为每块双端口RAM选取所述写操作的字节数据包括:
根据所述写操作的起始位置信息,按照小尾端的次序排列所述内部总线返回的有效数据,赋值给第一临时数据,所述第一临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同;
将所述第一临时数据赋值给第二临时数据的高N字节数据和低N字节数据,所述第二临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
根据所述写操作的操作位置信息和内部总线一次传输的字节数据的最大数量,确定所述第二临时数据右移的位数,并将所述第二临时数据右移后,赋值给第三临时数据,所述第三临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
所述根据所述写操作的操作位置信息,将选取的字节数据写入对应的双端口RAM包括:
将所述第三临时数据的低N位字节数据写入对应的双端口RAM。
可选地,所述根据所述读操作的操作位置信息和起始位置信息,重新排列所述多个双端口RAM的对应的字节数据,并执行数据缓冲的读操作包括:
根据所述读操作的操作位置信息和起始位置信息,按照所述内部总线的输出顺序,重新排列从所述多个双端口RAM读出的字节数据;
根据所述读操作的起始位置信息,读取排列后的双端口RAM读出字节数据到所述内部总线。
可选地,所述根据所述读操作的操作位置信息和起始位置信息,按照所述内部总线的输出顺序,重新排列从所述多块双端口RAM读出的字节数据包括:
将所述多个双端口RAM读出的字节数据,赋值给第四临时数据,所述第四临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同;
将所述第四临时数据赋值给第五临时数据的高N字节数据和低N字节数据,所述第五临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
根据所述操作位置信息,确定所述第五临时数据右移的位数,并将所述第五临时数据右移后,赋值给第六临时数据,所述第六临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
按照小尾端的次序排列所述第六临时数据,将所述第六临时数据的低N字节数据,赋值给第七临时数据,所述第七临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同;
所述根据所述读操作的起始位置信息,读取排列后的字节数据到所述内部总线包括:
根据所述读操作的起始位置信息,确定所述第七临时数据左移的位数,并将所述第七临时数据左移后,输出到所述内部总线。
相应的,本发明实施例还提供了一种数据缓冲装置,包括:
长度获取模块,用于获取写/读操作的数据长度;
起始信息获取模块,用于获取写/读操作的在内部总线上的首个有效字节数据对应的起始位置信息;
操作信息获取模块,用于获取写/读操作的在多块双端口RAM上对应的数据操作指针,其中,所述双端口RAM一次存储一个字节数据,所述双端口RAM的块数与所述内部总线一次传输的字节数据的最大数量相同;
信息确定模块,用于根据所述写/读操作的数据长度和数据操作指针,确定在所述多块双端口RAM上写/读操作的的操作位置信息;
操作模块,用于根据所述写/读操作的操作位置信息和起始位置信息,重新排列所述多块双端口RAM的对应的字节数据,并执行数据缓冲的写/读操作。
可选地,所述装置还包括:
指针生成模块,用于根据所述写/读操作数据长度和记录的数据操作指针,生成下一个数据操作指针并记录。
可选地,所述操作位置信息包括双端口RAM中的块内位置标识,所述信息确定模块包括:
标识生成子模块,用于根据所述写/读操作数据长度和数据操作指针,生成在各块双端口RAM上写/读操作的块内位置标识。
可选地,所述数据操作指针包括双端口RAM的块标识和双端口RAM中的块内位置标识,所述标识生成子模块包括:
第一信号确定单元,用于根据所述写操作的数据长度和数据操作指针的双端口RAM的块标识,确定在所述各块双端口RAM上写操作的使能信号;
标识确定单元,用于根据所述写操作的使能信号和数据操作指针中的双端口RAM中的块内位置标识,确定在各个双端口RAM上写操作的块内位置标识。
可选地,所述信号确定单元包括:
信息确定子单元,用于根据所述写操作的数据长度和数据操作指针中的双端口RAM的块标识,确定写操作在数据操作指针中的块内位置标识和下一个数据操作指针中的块内位置标识对应的使能信息;
信号确定子单元,用于根据所述使能信息,确定在所述各块双端口RAM上写操作的使能信号。
可选地,所述数据操作指针包括双端口RAM的块标识和双端口RAM中的块内位置标识,所述标识生成子模块包括:
第二信息确定单元,用于根据所述读操作的数据长度和数据操作指针中的双端口RAM的块标识,确定读操作在数据操作指针中的块内位置标识和下一个数据操作指针的块内位置标识对应的使能信息;
标识确定单元,用于当DMA控制器给双端口RAM有效的使能信号时,根据所述使能信息和数据操作指针中的块内位置标识,确定所述各个双端口RAM上读操作的块内位置标识;
标识确定单元,用于根据所述使能信息和下一个数据操作指针的块内位置标识,确定所述各块双端口RAM上读操作的块内位置标识。
可选地,所述操作模块包括:
选取子模块,用于根据所述写操作的操作位置信息和起始位置信息,在所述内部总线上,为每块双端口RAM选取所述写操作的字节数据;
写入子模块,用于根据所述操作位置信息,将选取的字节数据写入对应的双端口RAM。
可选地,所述选取子模块包括:
第一排列单元,用于根据所述写操作的起始位置信息,按照小尾端的次序排列所述内部总线返回的有效数据,赋值给第一临时数据,所述第一临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同;
第一赋值单元,用于将所述第一临时数据赋值给第二临时数据的高N字节数据和低N字节数据,所述第二临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
第一右移单元,用于根据所述写操作的操作位置信息和内部总线一次传输的字节数据的最大数量,确定所述第二临时数据右移的位数,并将所述第二临时数据右移后,赋值给第三临时数据,所述第三临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
所述写入子模块包括:
写入单元,用于将所述第三临时数据的低N字节数据写入对应的双端口RAM。
可选地,所述操作模块包括:
排列子模块,用于根据所述读操作的操作位置信息和起始位置信息,按照所述内部总线的输出顺序,重新排列从所述多个双端口RAM读出的字节数据;
读取子模块,用于根据所述读操作的起始位置信息,读取排列后的双端口RAM读出字节数据到所述内部总线。
可选地,所述排列子模块包括:
第二赋值单元,用于将所述多个双端口RAM读出的字节数据,赋值给第四临时数据,所述第四临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同;
第三赋值单元,用于将所述第四临时数据赋值给第五临时数据的高N字节数据和低N字节数据,所述第五临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
第二右移单元,用于根据所述操作位置信息,确定所述第五临时数据右移的位数,并将所述第五临时数据右移后,赋值给第六临时数据,所述第六临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
第二排列单元,用于按照小尾端的次序排列所述第六临时数据,将所述第六临时数据的低N字节数据,赋值给第七临时数据,所述第七临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同;
所述读取子模块包括:
输出单元,用于根据所述读操作的起始位置信息,确定所述第七临时数据左移的位数,并将所述第七临时数据左移后,输出到所述内部总线。
依据本发明实施例,通过获取写/读操作的数据长度、获取写/读操作在内部总线上的首个有效字节数据的起始位置信息,以及获取写/读操作在多块双端口RAM上的数据操作指针,根据所述写/读操作的数据长度和数据操作指针,确定在所述多块双端口RAM上写/读操作的操作位置信息,根据所述写/读操作的操作位置信息和起始位置信息,重新排列所述多块双端口RAM的对应的字节数据,并执行数据缓冲的写/读操作,避免了DMA控制器的源地址和目的地址需要对齐的限制,并且没有增设触发器,继而减少了增设触发器所需占用的芯片面积,在处理源地址和目的地址不对齐的情况时,无需经过触发器对数据进行移位,继而减少了读数据从双端口RAM读端口到内部总线的延迟。
附图说明
图1示出了本发明实施例一的一种数据缓冲方法的步骤流程图;
图2示出了本发明实施例二的一种数据缓冲方法的步骤流程图;
图3示出了本发明实施例三的一种数据缓冲装置实施例的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
参照图1,示出了本发明实施例一的一种数据缓冲方法的步骤流程图,具体可以包括如下步骤:
步骤101,获取写/操作的数据长度、写/读操作在内部总线上的首个有效字节字节的起始位置信息,以及写/读操作在多块双端口RAM上对应的数据操作指针。
DMA控制器等设备可以将源地址读取的数据在内部进行缓冲后再写入目的地址,写操作是DMA控制器将数据从内部总线写入到缓冲,而读操作是DMA控制器将数据从缓冲读取到内部总线。
在本发明实施例中,DMA控制器等设备所使用的缓冲由多块相同的双端口RAM组成,每块双端口RAM的数据位宽为1字节,其中,字节是DMA控制器进行数据缓冲时的最小存储单位,本发明实施例对双端口RAM存储数据的深度不做限制。双端口RAM的块数与内部总线的位宽的字节数相同,即与内部总线一次传输的字节数据的最大数量相同。
在本发明实施例中,DMA控制器等设备记录当前写入数据或当前读取数据在多块双端口RAM上的起始位置的数据操作指针。数据操作指针包括双端口RAM的块标识、单块双端口RAM中的块内位置标识,或者其他任意适用的形式来记录操作位置,本发明实施例对此不做限制。对于写操作和读操作,需要分别记录数据操作指针,写操作的数据操作指针是上一次写操作在多块双端口RAM中写入的位置之后的位置,读操作的数据操作指针是上一次读操作在多块双端口RAM中读取的位置之后的位置。
例如,DMA控制器连接的内部总线的位宽为N字节,N为2的M次幂,DMA控制器使用N个位宽为1字节的双端口RAM作为数据缓冲,双端口RAM的深度为K,K为2的L次幂。使用一个用于记录当前写入数据在多块双端口RAM中起始位置的写指针wptr(即写操作的数据操作指针)和一个用于记录当前读数据在多块双端口RAM中起始位置的读指针rptr(即读操作的数据操作指针),写指针和读指针的位宽均为L+M位,其中,高L位用于记录数据在单块双端口RAM中的块内位置标识(即读/写指针的高L位),低M位用于记录数据所属的双端口RAM的块标识(即读/写指针的低M位),实现了记录多块双端口RAM上的所有位置。
在本发明实施例中,DMA控制器对缓冲进行写/读操作的同时提供操作的参数。DMA控制器每次对缓冲进行读/写操作的同时提供当次读/写操作的数据长度,这个数据长度的单位为字节,其值小于等于N。DMA控制器每次对缓冲进行写操作的同时提供当前写入的数据在N字节宽的内部总线数据上首个有效字节数据的起始位置信息WP,WP的值为0至N-1;DMA控制器每次对缓冲进行读操作的同时提供当前读取的数据在N字节宽的内部总线上首个有效字节数据的起始位置信息RP,RP的值为0至N-1。对于写操作和读操作,需要分别提供数据长度和在内部总线上的首个有效字节数据的起始位置信息。
步骤102,根据所述写/读操作的数据长度和数据操作指针,确定在所述多块双端口RAM上写/读操作的操作位置信息。
在本发明实施例中,通过写操作的数据操作指针和数据长度,可以产生本次写操作在各块双端口RAM上的操作位置信息,还可以产生下一次写操作的数据操作指针。通过读操作的数据操作指针和数据长度,可以产生本次读操作在各个双端口RAM上的操作位置信息,还可以产生下一次读操作的数据操作指针。
在本发明实施例中,根据写/读操作的数据长度和数据操作指针,确定在多块双端口RAM上写/读操作的操作位置信息的具体实现方式可以包括多种,例如,根据所述写/读操作数据长度和数据操作指针,生成在各块双端口RAM上写/读操作的块内位置标识,具体可以包括任意适用的实现方式,本发明实施例对此不做限制。
例如,通过当前写指针wptr和当前写入数据长度wstep产生:下一次写操作的写指针(当前wptr的值增加wstep)、N块双端口RAM的写使能和写地址;通过当前读指针rptr和当前读取数据长度rstep产生:下一次读操作的读指针(当前rptr的值增加rstep)、N块双端口RAM的读地址。
步骤103,根据所述写/读操作的操作位置信息和起始位置信息,重新排列所述多块双端口RAM对应的字节数据,并执行数据缓冲的写/读操作。
在本发明实施例中,处理DMA数据允许源地址和目的地址不对齐,也即是说,在写操作时,内部总线上的写入数据可能会写入到多块双端口RAM的不同深度,而在读操作时,内部总线可能会从多块双端口RAM的不同深度读取数据。若将一块双端口RAM看做一列,将多块双端口RAM的同一深度看做一行,则一次写操作可能会从一行的中间一列开始,至下一行的中间一列结束,而一次读操作也可能会从一行的中间一列开始,至下一行的中间一列结束。因此,需要根据操作位置信息和起始位置信息,重新排列多块双端口RAM的对应的字节数据,然后执行数据缓冲的写操作或读操作。
在本发明实施例中,根据所述写/读操作的操作位置信息和首个有效字节数据在内部总线的起始位置信息,重新排列所述多个双端口RAM的对应的字节数据,并执行数据缓冲的写操作或读操作的具体实现方式可以包括多种,例如,在写操作时,根据所述操作位置信息和起始位置信息,在所述内部总线上,为每块双端口RAM选取所述写操作的字节数据,根据所述操作位置信息,将选取的字节数据写入对应的双端口RAM;在读操作时,根据所述操作位置信息和有效数据在内部总线的起始位置信息,按照所述内部总线的输出顺序,重新排列所述多块双端口RAM的读出字节数据,根据所述有效数据在内部总线的起始位置信息,读取排列后的字节数据到所述内部总线,具体可以包括任意适用的实现方式,本发明实施例对此不做限制。
依据本发明实施例,通过获取写/读操作的数据长度、写/读操作在内部总线上的首个有效字节数据的起始位置信息,以及写/读操作在多块双端口RAM上的数据操作指针,根据写/读操作的数据长度和数据操作指针,确定在所述多块双端口RAM上写/读操作的操作位置信息,根据所述写/读操作的操作位置信息和起始位置信息,重新排列所述多块双端口RAM的对应的字节数据,并执行数据缓冲的写/读操作,避免了DMA控制器的源地址和目的地址需要对齐的限制,并且没有增设触发器,继而减少了增设触发器所需占用的芯片面积,在处理源地址和目的地址不对齐的情况时,无需经过触发器对数据进行移位,继而减少了读数据从双端口RAM读端口到内部总线的延迟。
参照图2,示出了本发明实施例二的一种数据缓冲方法的步骤流程图,具体可以包括如下步骤:
步骤201,获取写/读操作的数据长度、写/读操作在内部总线上的首个有效字节数据的起始位置信息,以及写/读操作在多块双端口RAM上的数据操作指针。
在本发明实施例中,此步骤的具体实现方式可以参见前述实施例中的描述,此处不另赘述。
步骤202,根据所述写/读操作数据长度和记录的数据操作指针,生成下一个数据操作指针并记录。
在本发明实施例中,DMA控制器记录有数据操作指针,在数据操作指针增加数据长度,即可生成下一个数据操作指针,并记录,用于下一次写操作或读操作时使用。
例如,在写操作中,使用1个L+M位的写指针wptr(即数据操作指针)用于记录当前写入多块双端口RAM的起始位置,DMA控制器每次向多块双端口RAM写入数据的同时提供当次写入数据的数据长度wstep(单位为字节),每次DMA控制器向缓冲写入数据,wptr的值增加wstep,生成下一个写操作的数据操作指针。在读操作中,使用一个L+M位的读指针rptr(即数据操作指针)用于记录当前从多块双端口RAM中读取的数据的起始位置。DMA控制器每次从缓冲读取数据的同时提供当次读取数据的数据长度rstep(单位为字节),每次DMA控制器从缓冲读取数据,rptr的值增加rstep,生成下一个读操作的数据操作指针。
步骤203,根据所述写/读操作的数据长度和数据操作指针,生成在各块双端口RAM上写/读操作的块内位置标识。
在本发明实施例中,根据数据操作指针,可以确定对应的双端口RAM的块标识以及在该块双端口RAM中的块内位置标识,即深度。操作位置信息包括双端口RAM中的块内位置标识,在写操作时,内部总线上的写入数据可能会写入到多块双端口RAM的不同深度,根据写操作的数据长度和数据操作指针,可以生成在各块双端口RAM上写操作的块内位置标识;而在读操作时,内部总线可能会从多块双端口RAM的不同深度读取数据,根据读操作的数据长度和数据操作指针,可以生成在各块双端口RAM上读操作的块内位置标识。具体可以包括任意适用的实现方式,本发明实施例对此不做限制。
在本发明的一种优选实施例中,数据操作指针包括双端口RAM的块标识和双端口RAM中的块内位置标识,根据所述写操作的数据长度和数据操作指针,生成在各块双端口RAM上写操作的块内位置标识的实现方式可以包括:根据所述写操作的数据长度和数据操作指针的双端口RAM的块标识,确定在所述各块双端口RAM上写操作的使能信号;根据所述写操作的使能信号和数据操作指针的块内位置标识,确定在各个双端口RAM上写操作的块内位置标识。
写操作的数据长度是小于等于内部总线一次传输的字节数据的最大数量的,因此,在一次写操作中,可能存在部分双端口RAM上没有写入数据,对应的写操作的使能信号应该置为无效,而有写入数据的双端口RAM,对应的写操作的使能信号应该置为有效。根据所述写操作的数据长度和首块双端口RAM的块标识,确定在所述各块双端口RAM上写操作的使能信号可以包括任意适用的实现方式,本发明实施例对此不做限制。
在本发明的一种优选实施例中,所述根据所述写操作的数据长度和首块双端口RAM的块标识,确定在所述各块双端口RAM上写操作的使能信号的实现方式可以包括:根据所述写操作的数据长度和数据操作指针的双端口RAM的块标识,确定写操作在数据操作指针的块内位置标识和下一个数据操作指针的块内位置标识对应的使能信息;根据所述使能信息,确定在所述各块双端口RAM上写操作的使能信号。
由于在写操作时,内部总线上的写入数据可能会写入到多块双端口RAM的两个深度,所以先确定在数据操作指针的块内位置标识的使能信息和下一个数据操作指针的块内位置标识对应的使能信息,再根据使能信息,确定各块双端口RAM上写操作的使能信号。
例如,作为数据缓冲的N块双端口RAM依次编号为RAM_0~RAM_N-1。使用2N位的写使能掩码we_dual,其中,低N位为写操作在数据操作指针的块内位置标识的使能信息,高N位为下一个数据操作指针的块内位置标识对应的使能信息。当wptr[M-1:0](即数据操作指针的双端口RAM的块标识)<=i<wptr[M-1:0]+wstep(即数据操作指针的双端口RAM的块标识加上数据长度)时,第i位写使能掩码we_dual[i]为1,否则we_dual[i]为0。we_dual的高N位(2N-1到N位,即下一个数据操作指针的块内位置标识的使能信息)与we_dual低N位(N-1到0位,即数据操作指针的块内位置标识对应的使能信息)逻辑或产生N位的RAM写使能we(即写操作的使能信号),we[i]为RAM_i的写使能,we[i]为1表示RAM_i的写使能有效。
然后再根据写操作的使能信号和数据操作指针的块内位置标识,确定在各个双端口RAM上写操作的块内位置标识,例如,RAM_i(i的值为0~N-1)的写指针(即块内位置标识)产生方式为:如果we_dual[i](i的值为0~N-1)的值为1,RAM_i的写指针为wptr的高L位的值(wptr[M+L-1:M]),否则RAM_i的写指针为wptr的高L位的值加1。具体可以包括任意适用的实现方式,本发明实施例对此不做限制。
在本发明的一种优选实施例中,数据操作指针包括双端口RAM的块标识和双端口RAM中的块内位置标识,所述根据所述读操作的数据长度和数据操作指针,生成在各块双端口RAM上读操作的块内位置标识的实现方式可以包括:根据所述读操作的数据长度和数据操作指针的双端口RAM的块标识,确定读操作在数据操作指针的块内位置标识和下一个数据操作指针的块内位置标识对应的使能信息;当DMA控制器给双端口RAM有效的使能信号时,根据所述使能信息和数据操作指针的块内位置标识,确定所述各块双端口RAM上读操作的块内位置标识;当DMA控制器给双端口RAM有效的使能信号时,根据所述使能信息和下一个数据操作指针的块内位置标识,确定所述各块双端口RAM上读操作的块内位置标识。
多块双端口RAM的读使能信号固定为常值1(读有效)。每块双端口RAM的读操作的块内位置标识根据数据操作指针、DMA控制器读操作的数据长度、DMA控制器给缓冲的读使能产生。内部总线可能会从多块双端口RAM的两个深度读取数据,先确定读操作在数据操作指针的块内位置标识和下一个数据操作指针的块内位置标识对应的使能信息,在根据使能信息和数据操作指针的块内位置标识,确定各块双端口RAM上读操作的块内位置标识,具体可以包括任意适用的实现方式,本发明实施例对此不做限制。
例如,双端口RAM读指针的产生方法如下:
使用2N位的读使能掩码re_dual,其中,N位为读操作在数据操作指针的块内位置标识的使能信息,另外N位为下一个数据操作指针的块内位置标识对应的使能信息。当rptr[M-1:0](即数据操作指针的双端口RAM的块标识)<=i<rptr[M-1:0]+rstep(即数据操作指针的双端口RAM的块标识加上数据长度)时,第i位的使能信息re_dual[i]为1,否则re_dual[i]为0。
RAM_i的读操作的块内位置标识的产生方式为:当DMA控制器给缓冲的读请求信号是无效时,如果re_dual[i](i的值为0~N-1)为1,RAM_i的读指针(即块内位置标识)为rptr的高L位(rptr[M+L-1:M])的值,否则RAM_i的读指针(即块内位置标识)为rptr的高L位的值加1;当DMA控制器给缓冲的读请求信号是有效时,如果re_dual[i](i的值为0~N-1)为1,RAM_i的读指针为rptr的更新值(当前rptr的值增加rstep)的高L位的值,否则RAM_i的读指针为rptr的更新值的高L位的值加1。
步骤204,根据所述写操作的操作位置信息和起始位置信息,在所述内部总线上,为每块双端口RAM选取所述写操作的字节数据。
在本发明实施例中,在写操作时,每块双端口RAM通过当前写指针wptr和当前写入数据在N字节宽的内部总线上首个有效字节数据的起始位置信息WP,在N字节宽的内部总线返回数据线bus_rdata上选择写入数据。
在本发明的一种优选实施例中,根据所述写操作的操作位置信息和起始位置信息,在所述内部总线上,为每块双端口RAM选取所述写操作的字节数据的一种实现方式可以包括:
根据所述写操作的起始位置信息,按照小尾端的次序排列所述内部总线返回的有效数据,赋值给第一临时数据,所述第一临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同;将所述第一临时数据赋值给第二临时数据的高N位字节数据和低N位字节数据,所述第二临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;根据所述写操作的操作位置信息和内部总线一次传输的字节数据的最大数量,确定所述第二临时数据右移的位数,并将所述第二临时数据向右移后,赋值给第三临时数据,所述第三临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同。
例如,DMA控制器将N字节宽的内部总线返回数据线bus_rdata右移WP*8位,得到内部总线返回的有效数据,赋给N字节宽的数据线din(即第一临时数据)。内部总线返回的有效数据按照小尾端的次序排列在din上。第0个有效字节数据在din[7:0],第1个有效字节数据在din[15:8],第N-1个有效字节在din[N*8-1:(N-1)*8]。使用一个2N字节宽的数据线din_dual(即第二临时数据)。din_dual的低N字节宽的值为din,din_dual的高N字节宽的值也为din。使用一个2N字节宽的数据线din_shift(即第三临时数据)。din_shift的值由din_dual向右移WS位产生。其中,WS=(N-wptr[M-1:0])*8。
步骤205,根据所述写操作的操作位置信息,将选取的字节数据写入对应的双端口RAM。
在本发明实施例中,选取字节数据后,根据操作位置信息写入对应的双端口RAM,完成数据缓冲的写操作。
在本发明的一种优选实施例中,根据所述写操作的操作位置信息,将选取的字节数据写入对应的双端口RAM的一种实现方式可以包括:将所述第三临时数据的低N位字节数据写入对应的双端口RAM。
例如,编号为i的双端口RAM的数据输入为din_shift[i*8+7:i*8]。i的值为0至N-1。
步骤206,根据所述读操作的操作位置信息和起始位置信息,按照所述内部总线的输出顺序,重新排列所述多块双端口RAM的读操作的字节数据。
在本发明实施例中,在读操作时,根据读指针rptr(即操作位置信息)和读取数据在N字节宽的内部总线上首个有效字节数据的起始位置信息RP将N块双端口RAM的读端口值重新排列为N字节位宽的内部总线数据输出线bus_wdata。
在本发明的一种优选实施例中,根据所述读操作的操作位置信息和起始位置信息,按照所述内部总线的输出顺序,重新排列所述多块双端口RAM读出的字节数据的一种实现方式可以包括:
将所述多块双端口RAM读出的字节数据,赋值给第四临时数据,所述第四临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同;将所述第四临时数据赋值给第五临时数据的高N位字节数据和低N位字节数据,所述第五临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;根据所述操作位置信息,确定所述第五临时数据右移的位数,将所述第五临时数据右移后,赋值给第六临时数据,所述第六临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;按照小尾端的次序排列所述第六临时数据,将所述第六临时数据的低N位字节数据,赋值给第七临时数据,所述第七临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同。
例如,为每块双端口RAM的读端口进行编号,编号为i的双端口RAM的读端口编号为q_i,i的值为0至N-1。使用一个N字节宽的数据线qout(即第四临时数据)。将q_i的值赋给qout[i*8+7:i*8]。使用一个2N字节宽的数据线qout_dual(即第五临时数据)。qout_dual的低N字节宽的值为qout,qout_dual的高N字节宽的值也为qout。使用一个2N字节宽的数据线qout_shift(即第六临时数据)。qout_shift的值由qout_dual向右移RS位产生。RS=rptr[M-1:0]*8。使用一个N字节宽的数据线qout_fix(即第七临时数据)。经过移位后,qout_shift的低N字节宽的值赋给qout_fix。这些读数据按照小尾端的顺序排列,第0个有效字节的数据在qout_fix[7:0],第1个有效字节的数据在qout_fix[15:8],第N-1个有效字节的数据在qout_fix[N*8-1:(N-1)*8]。
步骤207,根据所述读操作的起始位置信息,读取排列后的字节数据到所述内部总线。
在本发明实施例中,将多块双端口RAM的读端口重新排列为内部总线需要的顺序后,读取字节数据到内部总线,完成读操作。
在本发明的一种优选实施例中,根据所述读操作的起始位置信息,读取排列后的字节数据到所述内部总线的一种实现方式可以包括:根据所述读操作的起始位置信息,确定所述第七临时数据左移的位数,并将所述第七临时数据左移后,输出到所述内部总线。例如,将qout_fix(即第七临时数据)左移RP*8位后,赋值给内部总线的输出线bus_wdata,完成送给内部总线数据的生成。
依据本发明实施例,通过获取写/读操作的数据长度、写/读操作在内部总线上的首个有效字节数据的起始位置信息,以及写/读操作在多块双端口RAM上的数据操作指针,根据所述写/读操作数据长度和记录的数据操作指针,生成下一个数据操作指针并记录,根据所述写/读操作数据长度和数据操作指针,生成在各块双端口RAM上写/读操作的块内位置标识,根据所述写操作的操作位置信息和起始位置信息,在所述内部总线上,为每块双端口RAM选取写操作的字节数据,根据所述写操作的操作位置信息,将选取的字节数据写入对应的双端口RAM,根据所述读操作的操作位置信息和起始位置信息,按照所述内部总线的输出顺序,重新排列所述多块双端口RAM的读操作的字节数据,根据所述读操作的起始位置信息,读取排列后的字节数据到所述内部总线,避免了DMA控制器的源地址和目的地址需要对齐的限制,并且没有增设触发器,继而减少了增设触发器所需占用的芯片面积,在处理源地址和目的地址不对齐的情况时,无需经过触发器对数据进行移位,继而减少了读数据从双端口RAM读端口到内部总线的延迟。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图3,示出了本发明实施例三的一种数据缓冲装置实施例的结构框图,具体可以包括如下模块:
长度获取模块301,用于获取写/读操作的数据长度;
起始信息获取模块302,用于获取写/读操作的在内部总线上的首个有效字节数据对应的起始位置信息;
操作信息获取模块303,用于获取写/读操作的在多块双端口RAM上对应的数据操作指针,其中,所述双端口RAM一次存储一个字节数据,所述双端口RAM的块数与所述内部总线一次传输的字节数据的最大数量相同;
信息确定模块304,用于根据所述写/读操作的数据长度和数据操作指针,确定在所述多块双端口RAM上写/读操作的的操作位置信息;
操作模块305,用于根据所述写/读操作的操作位置信息和起始位置信息,重新排列所述多块双端口RAM的对应的字节数据,并执行数据缓冲的写/读操作。
在本发明的一种优选实施例中,所述装置还包括:
指针生成模块,用于根据所述写/读操作数据长度和记录的数据操作指针,生成下一个数据操作指针并记录。
在本发明的一种优选实施例中,所述操作位置信息包括双端口RAM中的块内位置标识,所述信息确定模块包括:
标识生成子模块,用于根据所述写/读操作数据长度和数据操作指针,生成在各块双端口RAM上写/读操作的块内位置标识。
在本发明的一种优选实施例中,所述数据操作指针包括双端口RAM的块标识和双端口RAM中的块内位置标识,所述标识生成子模块包括:
第一信号确定单元,用于根据所述写操作的数据长度和数据操作指针的双端口RAM的块标识,确定在所述各块双端口RAM上写操作的使能信号;
标识确定单元,用于根据所述写操作的使能信号和数据操作指针中的双端口RAM中的块内位置标识,确定在各个双端口RAM上写操作的块内位置标识。
在本发明的一种优选实施例中,所述信号确定单元包括:
信息确定子单元,用于根据所述写操作的数据长度和数据操作指针中的双端口RAM的块标识,确定写操作在数据操作指针中的块内位置标识和下一个数据操作指针中的块内位置标识对应的使能信息;
信号确定子单元,用于根据所述使能信息,确定在所述各块双端口RAM上写操作的使能信号。
在本发明的一种优选实施例中,所述数据操作指针包括双端口RAM的块标识和双端口RAM中的块内位置标识,所述标识生成子模块包括:
第二信息确定单元,用于根据所述读操作的数据长度和数据操作指针中的双端口RAM的块标识,确定读操作在数据操作指针中的块内位置标识和下一个数据操作指针的块内位置标识对应的使能信息;
标识确定单元,用于当DMA控制器给双端口RAM有效的使能信号时,根据所述使能信息和数据操作指针中的块内位置标识,确定所述各个双端口RAM上读操作的块内位置标识;
标识确定单元,用于根据所述使能信息和下一个数据操作指针的块内位置标识,确定所述各块双端口RAM上读操作的块内位置标识。
在本发明的一种优选实施例中,所述操作模块包括:
选取子模块,用于根据所述写操作的操作位置信息和起始位置信息,在所述内部总线上,为每块双端口RAM选取所述写操作的字节数据;
写入子模块,用于根据所述操作位置信息,将选取的字节数据写入对应的双端口RAM。
在本发明的一种优选实施例中,所述选取子模块包括:
第一排列单元,用于根据所述写操作的起始位置信息,按照小尾端的次序排列所述内部总线返回的有效数据,赋值给第一临时数据,所述第一临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同;
第一赋值单元,用于将所述第一临时数据赋值给第二临时数据的高N字节数据和低N字节数据,所述第二临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
第一右移单元,用于根据所述写操作的操作位置信息和内部总线一次传输的字节数据的最大数量,确定所述第二临时数据右移的位数,并将所述第二临时数据右移后,赋值给第三临时数据,所述第三临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
所述写入子模块包括:
写入单元,用于将所述第三临时数据的低N字节数据写入对应的双端口RAM。
在本发明的一种优选实施例中,所述操作模块包括:
排列子模块,用于根据所述读操作的操作位置信息和起始位置信息,按照所述内部总线的输出顺序,重新排列从所述多个双端口RAM读出的字节数据;
读取子模块,用于根据所述读操作的起始位置信息,读取排列后的双端口RAM读出字节数据到所述内部总线。
在本发明的一种优选实施例中,所述排列子模块包括:
第二赋值单元,用于将所述多个双端口RAM读出的字节数据,赋值给第四临时数据,所述第四临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同;
第三赋值单元,用于将所述第四临时数据赋值给第五临时数据的高N字节数据和低N字节数据,所述第五临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
第二右移单元,用于根据所述操作位置信息,确定所述第五临时数据右移的位数,并将所述第五临时数据右移后,赋值给第六临时数据,所述第六临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
第二排列单元,用于按照小尾端的次序排列所述第六临时数据,将所述第六临时数据的低N字节数据,赋值给第七临时数据,所述第七临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同;
所述读取子模块包括:
输出单元,用于根据所述读操作的起始位置信息,确定所述第七临时数据左移的位数,并将所述第七临时数据左移后,输出到所述内部总线。
依据本发明实施例,通过获取写/读操作的数据长度、写/读操作在内部总线上的首个有效字节数据的起始位置信息,以及写/读操作在多块双端口RAM上的数据操作指针,根据写/读操作数据长度和数据操作指针,确定在所述多块双端口RAM上写/读操作的操作位置信息,根据所述写/读操作操作位置信息和起始位置信息,重新排列所述多块双端口RAM的对应的字节数据,并执行数据缓冲的写/读操作,避免了DMA控制器的源地址和目的地址需要对齐的限制,并且没有增设触发器,继而减少了增设触发器所需占用的芯片面积,在处理源地址和目的地址不对齐的情况时,无需经过触发器对数据进行移位,继而减少了读数据从双端口RAM读端口到内部总线的延迟。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种数据缓冲方法、一种数据缓冲装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (20)
1.一种数据缓冲方法,其特征在于,包括:
获取写/读操作的数据长度;
获取写/读操作在内部总线上的首个有效字节数据对应的起始位置信息;
获取写/读操作在多块双端口RAM上对应的数据操作指针,其中,所述双端口RAM一次存储一个字节数据,所述双端口RAM的块数与所述内部总线一次传输的字节数据的最大数量相同;
根据所述写/读操作的数据长度和数据操作指针,确定在所述多块双端口RAM上写/读操作的的操作位置信息;
根据所述写/读操作的操作位置信息和起始位置信息,重新排列所述多块双端口RAM对应的字节数据,并执行数据缓冲的写/读操作;
其中,所述数据操作指针包括:读指针和写指针,所述读指针通过当前读指针和当前读取数据长度产生,所述写指针通过当前写指针和当前写入数据长度产生。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据所述写/读操作的数据长度和记录的数据操作指针,生成下一个数据操作指针并记录。
3.根据权利要求1所述的方法,其特征在于,所述操作位置信息包括双端口RAM中的块内位置标识,所述根据所述写/读操作的数据长度和数据操作指针,确定在所述多块双端口RAM上的操作位置信息包括:
根据所述写/读操作的数据长度和数据操作指针,生成在各块双端口RAM上写/读操作的块内位置标识。
4.根据权利要求3所述的方法,其特征在于,所述数据操作指针包括双端口RAM的块标识和双端口RAM中的块内位置标识,所述根据写操作的数据长度和数据操作指针,生成在各块双端口RAM上写操作的块内位置标识包括:
根据所述写操作的数据长度和数据操作指针中的双端口RAM的块标识,确定在所述各块双端口RAM上写操作的使能信号;
根据所述写操作的使能信号和数据操作指针中的双端口RAM中的块内位置标识,确定在各块双端口RAM上写操作的块内位置标识。
5.根据权利要求4所述的方法,其特征在于,所述根据所述写操作的数据长度和首个双端口RAM的块标识,确定在所述各块双端口RAM上写操作的使能信号包括:
根据所述写操作的数据长度和数据操作指针中的双端口RAM的块标识,确定写操作在数据操作指针中的块内位置标识和下一个数据操作指针中的块内位置标识对应的使能信息;
根据所述使能信息,确定在所述各块双端口RAM上写操作的使能信号。
6.根据权利要求3所述的方法,其特征在于,所述数据操作指针包括双端口RAM的块标识和双端口RAM中的块内位置标识,所述根据所述读操作的数据长度和数据操作指针,生成在各块双端口RAM上读操作的块内位置标识包括:
根据所述读操作的数据长度和数据操作指针中的双端口RAM的块标识,确定读操作在数据操作指针中的块内位置标识和下一个数据操作指针的块内位置标识对应的使能信息;
当DMA控制器给双端口RAM有效的使能信号时,根据所述使能信息和数据操作指针中的块内位置标识,确定所述各个双端口RAM上读操作的块内位置标识;
根据所述使能信息和下一个数据操作指针中的块内位置标识,确定各块双端口RAM上读操作的块内位置标识。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述根据写操作的操作位置信息和起始位置信息,重新排列所述多块双端口RAM对应的字节数据,并执行数据缓冲的写操作包括:
根据所述写操作的操作位置信息和起始位置信息,在所述内部总线上,为每块双端口RAM选取所述写操作的字节数据;
根据所述操作位置信息,将选取的字节数据写入对应的双端口RAM。
8.根据权利要求7所述的方法,其特征在于,所述根据所述写操作的操作位置信息和起始位置信息,在所述内部总线上,为每块双端口RAM选取所述写操作的字节数据包括:
根据所述写操作的起始位置信息,按照小尾端的次序排列所述内部总线返回的有效数据,赋值给第一临时数据,所述第一临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同;
将所述第一临时数据赋值给第二临时数据的高N字节数据和低N字节数据,所述第二临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
根据所述写操作的操作位置信息和内部总线一次传输的字节数据的最大数量,确定所述第二临时数据右移的位数,并将所述第二临时数据右移后,赋值给第三临时数据,所述第三临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
所述根据所述写操作的操作位置信息,将选取的字节数据写入对应的双端口RAM包括:
将所述第三临时数据的低N位字节数据写入对应的双端口RAM。
9.根据权利要求1-6任一项所述的方法,其特征在于,所述根据所述读操作的操作位置信息和起始位置信息,重新排列多个双端口RAM的对应的字节数据,并执行数据缓冲的读操作包括:
根据所述读操作的操作位置信息和起始位置信息,按照所述内部总线的输出顺序,重新排列从所述多个双端口RAM读出的字节数据;
根据所述读操作的起始位置信息,读取排列后的双端口RAM读出字节数据到所述内部总线。
10.根据权利要求9所述的方法,其特征在于,所述根据所述读操作的操作位置信息和起始位置信息,按照所述内部总线的输出顺序,重新排列从所述多块双端口RAM读出的字节数据包括:
将所述多个双端口RAM读出的字节数据,赋值给第四临时数据,所述第四临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同;
将所述第四临时数据赋值给第五临时数据的高N字节数据和低N字节数据,所述第五临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
根据所述操作位置信息,确定所述第五临时数据右移的位数,并将所述第五临时数据右移后,赋值给第六临时数据,所述第六临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
按照小尾端的次序排列所述第六临时数据,将所述第六临时数据的低N字节数据,赋值给第七临时数据,所述第七临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同;
所述根据所述读操作的起始位置信息,读取排列后的字节数据到所述内部总线包括:
根据所述读操作的起始位置信息,确定所述第七临时数据左移的位数,并将所述第七临时数据左移后,输出到所述内部总线。
11.一种数据缓冲装置,其特征在于,包括:
长度获取模块,用于获取写/读操作的数据长度;
起始信息获取模块,用于获取写/读操作的在内部总线上的首个有效字节数据对应的起始位置信息;
操作信息获取模块,用于获取写/读操作的在多块双端口RAM上对应的数据操作指针,其中,所述双端口RAM一次存储一个字节数据,所述双端口RAM的块数与所述内部总线一次传输的字节数据的最大数量相同;
信息确定模块,用于根据所述写/读操作的数据长度和数据操作指针,确定在所述多块双端口RAM上写/读操作的的操作位置信息;
操作模块,用于根据所述写/读操作的操作位置信息和起始位置信息,重新排列所述多块双端口RAM的对应的字节数据,并执行数据缓冲的写/读操作;
其中,所述数据操作指针包括:读指针和写指针,所述读指针通过当前读指针和当前读取数据长度产生,所述写指针通过当前写指针和当前写入数据长度产生。
12.根据权利要求11所述的装置,其特征在于,所述装置还包括:
指针生成模块,用于根据所述写/读操作数据长度和记录的数据操作指针,生成下一个数据操作指针并记录。
13.根据权利要求11所述的装置,其特征在于,所述操作位置信息包括双端口RAM中的块内位置标识,所述信息确定模块包括:
标识生成子模块,用于根据所述写/读操作数据长度和数据操作指针,生成在各块双端口RAM上写/读操作的块内位置标识。
14.根据权利要求13所述的装置,其特征在于,所述数据操作指针包括双端口RAM的块标识和双端口RAM中的块内位置标识,所述标识生成子模块包括:
第一信号确定单元,用于根据写操作的数据长度和数据操作指针的双端口RAM的块标识,确定在所述各块双端口RAM上写操作的使能信号;
标识确定单元,用于根据所述写操作的使能信号和数据操作指针中的双端口RAM中的块内位置标识,确定在各个双端口RAM上写操作的块内位置标识。
15.根据权利要求14所述的装置,其特征在于,所述信号确定单元包括:
信息确定子单元,用于根据所述写操作的数据长度和数据操作指针中的双端口RAM的块标识,确定写操作在数据操作指针中的块内位置标识和下一个数据操作指针中的块内位置标识对应的使能信息;
信号确定子单元,用于根据所述使能信息,确定在所述各块双端口RAM上写操作的使能信号。
16.根据权利要求13所述的装置,其特征在于,所述数据操作指针包括双端口RAM的块标识和双端口RAM中的块内位置标识,所述标识生成子模块包括:
第二信息确定单元,用于根据所述读操作的数据长度和数据操作指针中的双端口RAM的块标识,确定读操作在数据操作指针中的块内位置标识和下一个数据操作指针的块内位置标识对应的使能信息;
标识确定单元,用于当DMA控制器给双端口RAM有效的使能信号时,根据所述使能信息和数据操作指针中的块内位置标识,确定各个双端口RAM上读操作的块内位置标识;
标识确定单元,用于根据所述使能信息和下一个数据操作指针的块内位置标识,确定所述各块双端口RAM上读操作的块内位置标识。
17.根据权利要求11-16任一项所述的装置,其特征在于,所述操作模块包括:
选取子模块,用于根据写操作的操作位置信息和起始位置信息,在所述内部总线上,为每块双端口RAM选取所述写操作的字节数据;
写入子模块,用于根据所述操作位置信息,将选取的字节数据写入对应的双端口RAM。
18.根据权利要求17所述的装置,其特征在于,所述选取子模块包括:
第一排列单元,用于根据所述写操作的起始位置信息,按照小尾端的次序排列所述内部总线返回的有效数据,赋值给第一临时数据,所述第一临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同;
第一赋值单元,用于将所述第一临时数据赋值给第二临时数据的高N字节数据和低N字节数据,所述第二临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
第一右移单元,用于根据所述写操作的操作位置信息和内部总线一次传输的字节数据的最大数量,确定所述第二临时数据右移的位数,并将所述第二临时数据右移后,赋值给第三临时数据,所述第三临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
所述写入子模块包括:
写入单元,用于将所述第三临时数据的低N字节数据写入对应的双端口RAM。
19.根据权利要求11-16任一项所述的装置,其特征在于,所述操作模块包括:
排列子模块,用于根据所述读操作的操作位置信息和起始位置信息,按照所述内部总线的输出顺序,重新排列从多个双端口RAM读出的字节数据;
读取子模块,用于根据所述读操作的起始位置信息,读取排列后的双端口RAM读出字节数据到所述内部总线。
20.根据权利要求19所述的装置,其特征在于,所述排列子模块包括:
第二赋值单元,用于将所述多个双端口RAM读出的字节数据,赋值给第四临时数据,所述第四临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同;
第三赋值单元,用于将所述第四临时数据赋值给第五临时数据的高N字节数据和低N字节数据,所述第五临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
第二右移单元,用于根据所述操作位置信息,确定所述第五临时数据右移的位数,并将所述第五临时数据右移后,赋值给第六临时数据,所述第六临时数据中字节数据的个数2N与所述内部总线一次传输的字节数据的最大数量的两倍相同;
第二排列单元,用于按照小尾端的次序排列所述第六临时数据,将所述第六临时数据的低N字节数据,赋值给第七临时数据,所述第七临时数据中字节数据的个数与所述内部总线一次传输的字节数据的最大数量相同;
所述读取子模块包括:
输出单元,用于根据所述读操作的起始位置信息,确定所述第七临时数据左移的位数,并将所述第七临时数据左移后,输出到所述内部总线。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811141079.4A CN110968538B (zh) | 2018-09-28 | 2018-09-28 | 一种数据缓冲方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811141079.4A CN110968538B (zh) | 2018-09-28 | 2018-09-28 | 一种数据缓冲方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110968538A CN110968538A (zh) | 2020-04-07 |
CN110968538B true CN110968538B (zh) | 2021-07-20 |
Family
ID=70027799
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811141079.4A Active CN110968538B (zh) | 2018-09-28 | 2018-09-28 | 一种数据缓冲方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110968538B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112328522B (zh) * | 2020-11-26 | 2023-05-26 | 北京润科通用技术有限公司 | 数据处理方法和装置 |
CN116483754B (zh) * | 2023-06-26 | 2023-10-10 | 湖北芯擎科技有限公司 | Ram的读写控制方法、控制器、ram以及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4949246A (en) * | 1988-06-23 | 1990-08-14 | Ncr Corporation | Adapter for transmission of data words of different lengths |
CN1407458A (zh) * | 2001-08-30 | 2003-04-02 | 华为技术有限公司 | 一种异步先进先出(fifo)数据缓存的方法 |
CN101257313A (zh) * | 2007-04-10 | 2008-09-03 | 深圳市同洲电子股份有限公司 | 一种基于fpga实现的解卷积交织器及解卷积交织方法 |
CN101789845A (zh) * | 2010-02-22 | 2010-07-28 | 烽火通信科技股份有限公司 | 应用sfec的光传送网中总线位宽变换实现方法及电路 |
CN103220168A (zh) * | 2013-03-29 | 2013-07-24 | 西安空间无线电技术研究所 | 一种基于定长协议数据包长度异常的处理方法 |
-
2018
- 2018-09-28 CN CN201811141079.4A patent/CN110968538B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4949246A (en) * | 1988-06-23 | 1990-08-14 | Ncr Corporation | Adapter for transmission of data words of different lengths |
CN1407458A (zh) * | 2001-08-30 | 2003-04-02 | 华为技术有限公司 | 一种异步先进先出(fifo)数据缓存的方法 |
CN101257313A (zh) * | 2007-04-10 | 2008-09-03 | 深圳市同洲电子股份有限公司 | 一种基于fpga实现的解卷积交织器及解卷积交织方法 |
CN101789845A (zh) * | 2010-02-22 | 2010-07-28 | 烽火通信科技股份有限公司 | 应用sfec的光传送网中总线位宽变换实现方法及电路 |
CN103220168A (zh) * | 2013-03-29 | 2013-07-24 | 西安空间无线电技术研究所 | 一种基于定长协议数据包长度异常的处理方法 |
Non-Patent Citations (1)
Title |
---|
"内存地址对齐及大小端";hukunzhen;《CSDN》;20100122;第1-5页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110968538A (zh) | 2020-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9104526B2 (en) | Transaction splitting apparatus and method | |
CN110737536A (zh) | 一种基于共享内存的消息存储方法和消息读取方法 | |
CN110968538B (zh) | 一种数据缓冲方法和装置 | |
CN115080455B (zh) | 一种计算机芯片、计算机板卡、存储空间分配方法及装置 | |
WO2016070668A1 (zh) | 一种实现数据格式转换的方法、装置及计算机存储介质 | |
CN110515872B (zh) | 直接内存存取方法、装置、专用计算芯片及异构计算*** | |
WO2018148918A1 (zh) | 存储设备、芯片及存储设备的控制方法 | |
WO2022068328A1 (zh) | 数据迁移的方法、装置、处理器和计算设备 | |
WO2021227789A1 (zh) | 存储空间的分配方法、装置、终端及计算机可读存储介质 | |
JP2008046771A (ja) | ダイレクトメモリアクセスコントローラ | |
CN108984148B (zh) | 一种基于同步fifo存储器的数据存储的方法及存储器 | |
JP6332756B2 (ja) | データ処理方法、装置、およびシステム | |
CN111459879A (zh) | 一种数据处理方法和片上*** | |
US9767054B2 (en) | Data transfer control device and memory-containing device | |
CN112035380B (zh) | 一种数据处理方法、装置、设备及可读存储介质 | |
CN114610231A (zh) | 大位宽数据总线分段存储的控制方法、***、设备及介质 | |
US10175913B2 (en) | Link management method and physical device | |
US11740900B2 (en) | Associatively indexed circular buffer | |
US9544229B2 (en) | Packet processing apparatus and packet processing method | |
KR102285940B1 (ko) | 데이터 처리 회로, 데이터 처리 회로를 포함하는 데이터 저장 장치 및 그것의 동작 방법 | |
WO2016177083A1 (zh) | 一种数据存储方法、存储装置和计算机存储介质 | |
JP5907558B2 (ja) | マルチインターバルタイマ並びにその制御装置、制御方法及び制御プログラム | |
CN109344093B (zh) | 缓存结构、读写数据的方法和装置 | |
CN115952326B (zh) | 一种链表式数据结构及其数据处理方法、存储介质、电子设备 | |
WO2024113448A1 (zh) | 灵活以太网数据块处理方法、装置、存储介质及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Applicant after: Loongson Zhongke Technology Co.,Ltd. Address before: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Applicant before: LOONGSON TECHNOLOGY Corp.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |