CN113448495A - 一种扩展双倍速率内存位宽的装置 - Google Patents

一种扩展双倍速率内存位宽的装置 Download PDF

Info

Publication number
CN113448495A
CN113448495A CN202010232265.XA CN202010232265A CN113448495A CN 113448495 A CN113448495 A CN 113448495A CN 202010232265 A CN202010232265 A CN 202010232265A CN 113448495 A CN113448495 A CN 113448495A
Authority
CN
China
Prior art keywords
data
ddr
request
sub
address
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.)
Pending
Application number
CN202010232265.XA
Other languages
English (en)
Inventor
申亮
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202010232265.XA priority Critical patent/CN113448495A/zh
Publication of CN113448495A publication Critical patent/CN113448495A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

本申请实施例提供一种扩展双倍速率内存位宽的装置,涉及芯片技术领域,能够在请求的数据量较大时,将多组DDR内存的能力联合起来等效为更高位宽的DDR内存,减少访问延时。其中,该装置包括多个DDR控制器和数据分配模块。每个DDR控制器访问一组DDR内存。数据分配模块,用于按照多组DDR内存的存取能力将接收到的一个请求拆分为多个子请求,并将多个子请求分别发送给多个DDR控制器;其中,每个DDR控制器,用于接收数据分配模块发送的子请求,以根据接收到的子请求实现对一组DDR内存的访问。本申请实施例用于视频会议系统中单次访问请求的处理过程。

Description

一种扩展双倍速率内存位宽的装置
技术领域
本申请实施例涉及芯片技术领域,尤其涉及一种扩展双倍速率(double datarate,DDR)内存位宽的装置。
背景技术
在视频会议系统的图像处理中,当进行多方与会者的视频会议时,每个会议终端的摄像机获取的图像可以被任意与会者看到,例如与会者可以选择观看一个或多个其他与会者的图像,这时需要使用可存储大数据的内存进行多路视频图像的缓存交换。该内存可以包括多组DDR内存,每组DDR内存包括多个DDR内存颗粒。
同时,随着视频图像分辨率的增加,视频图像处理需存储的数据量也大幅提升。例如对于单帧图像,分辨率为4K时需存储的数据量为分辨率为1080P时需存储的数据量的4倍,分辨率为8K时需存储的数据量为分辨率为1080P时需存储的数据量的16倍。其中,与每组DDR内存对应的DDR控制器的接口的位宽一般最高为64位或者更低。当需求更多的内存空间时,DDR控制器需求的位宽将超过64位,这时往往采用增加DDR控制器接入更多的内存空间。其中,每个DDR控制器控制一组DDR内存的读写,每组DDR内存独立使用。通常,使用多组DDR内存时,可使用仲裁机制将单次访问尽量合理的分配到负载为空或负载较小的一个DDR控制器上。但是,对于内存用户而言,单次访问只得到了单组DDR内存的能力,而在一些对内存访问延时要求短的场景下,如果单次访问请求的数据量较大,或者多个用户需要共享内存数据时,单组DDR内存的能力将不能满足对延时短的要求。
发明内容
本申请实施例提供一种扩展DDR内存位宽的装置,能够在请求的数据量较大时,将多组DDR内存的能力联合起来等效为更高位宽的DDR内存,减少访问延时。
为达到上述目的,本申请实施例采用如下技术方案:
第一方面,提供一种扩展双倍速率DDR内存位宽的装置,装置包括多个DDR控制器,每个DDR控制器访问一组DDR内存,一组DDR内存包括至少一个DDR芯片,装置还包括数据分配模块:数据分配模块,用于按照多组DDR内存的存取能力将接收到的一个请求拆分为多个子请求,并将多个子请求分别发送给多个DDR控制器。可选的,所述将多个子请求分别发送给多个DDR控制器,即对于多个子请求中的任一个子请求,将该任一子请求发送给多个DDR控制器中的一个DDR控制器。多个DDR控制器中的每个DDR控制器,用于接收数据分配模块发送的子请求,以根据接收到的子请求实现对一组DDR内存的访问。可选的,每个DDR控制器,可以接收数据分配模块发送的多个子请求中的一个子请求,并根据该子请求对DDR控制器能够访问的一组DDR内存实现读操作或写操作。
其中,该装置可以为芯片,例如FPGA。在视频会议系统中,该装置可以位于MCU或会议终端中。当该装置接收到一个请求时,若按照现有的方案,该请求可通过其中一个DDR控制器访问一组DDR内存。但是按照本申请的方案,则该请求可被数据分配模块拆分为多个子请求,子请求的数量可以与DDR控制器的数量相同。这样,每个DDR控制器可以根据一个子请求访问该DDR控制器连接的一组DDR内存,于是,对于一个请求的处理,可以将多组DDR内存的位宽联合起来使用,得到等效为更高位宽的DDR内存,这样可使得访问的数据量得到快速读写,减小访问延时。
在一种可能的设计中,数据分配模块具体用于:根据多个DDR控制器可访问的DDR内存的存取能力的比例,将请求拆分为多个子请求。也即,存取能力高的DDR内存可被分配到较多的数据量,存取能力较低的DDR内存可被分配到较少的数据量,使得一个请求的数据得到合理分配,减少访问延时。
在一种可能的设计中,比例是根据每组DDR内存的位宽和接口的访问频率确定的。
由于每组DDR内存的位宽和接口的访问频率可以影响到每组DDR内存的带宽能力,即存取数据的速度,因此,可以使用位宽和接口的访问频率计算每组DDR内存的存取能力。其中,每组DDR内存的位宽可以理解为一次访问该组DDR内存时,存取数据的位数,例如该位数可以为64位。每组DDR内存的接口的访问频率可以理解为:该组DDR内存在单位时间内存取数据的数据量,例如一组DDR内存1秒内存取数据的数据量为1600M。
在一种可能的设计中,数据分配模块具体用于:根据比例对请求的首地址和地址长度进行变换,得到变换后的首地址和地址长度,变换后的首地址和地址长度能够使得拆分后的子请求的首地址和地址长度为整数;根据请求变换后的首地址和地址长度,得到拆分后每个子请求的首地址和地址长度。
由根据位宽和接口的访问频率确定的比例记为第一比例时,如果按照第一比例进行数据分配时,可能不能将请求的数据长度和首地址以整数分配到每个子请求。因此,需要对第一比例进行变换,变换后的第二比例。而后按照第二比例和请求原有的首地址和地址长度计算得到变换后的首地址和地址长度,变换后的首地址和地址长度能够使得拆分后的子请求的首地址和地址长度为整数。
在一种可能的设计中,数据分配模块具体用于:若请求为写请求,则将写请求中的待写入数据根据变换后的首地址进行数据对齐,并将地址末尾的多余地址的数据置为无效;根据请求的数据位宽以及比例,确定数据对齐后,每单位数据长度内分配给每个子写请求的数据。
由于请求变换后的首地址相对变换前的首地址存在移位,因此,需要将写请求中的数据按照变换后的首地址进行数据对齐,变换后的地址长度中末尾多余的地址补数据后,可通过掩码指示多余的地址的数据无效。其中,单位数据长度可以是根据请求的数据位宽确定的。例如单位数据长度=请求的数据位宽/8。而后按照单位数据长度和第一比例,计算出单位数据长度内分配给每个子写请求的数据大小。例如拆分为两个子写请求时,单位数据长度内,
Figure BDA0002429623210000021
个字节分配个一个子写请求,
Figure BDA0002429623210000022
个字节分配给另一个子写请求,其中:M:N为第一比例,W为单位数据长度。
在一种可能的设计中,数据分配模块具体用于:若请求为读请求,则根据拆分后每个子读请求的首地址和地址长度从多组DDR内存中读取数据;合并每个子读请求读取的数据,得到读请求所读取的数据。
即在根据一个读请求读取数据时,可以根据拆分后的每个子读请求从多组DDR内存中读取数据,即联合起多组DDR内存的位宽,从更高位宽的DDR内存中快速读取数据,减少访问延时。
在一种可能的设计中,数据分配模块具体用于:根据请求的数据位宽以及比例,确定合并数据时,每单位数据长度中每个子读请求的数据量,以得到多个单位数据长度;将多个单位数据长度合并,得到读请求所读取的数据。
与写请求拆分类似,每个子读请求读取到的数据可以首先按照第二比例合成为多个单位数据长度,再将多个单位数据长度合并,得到地址变换后的数据,该变换后的数据中存在地址变换时被掩码的数据,在去掉掩码的数据后,即可得到读请求要读取的数据。
在一种可能的设计中,数据分配模块与多个DDR控制器连接,每个DDR控制器与一组DDR内存连接。一组DDR内存可以理解多个DDR芯片,即一个DDR控制器通过地址总线连接有多个DDR芯片。
在一种可能的设计中,数据分配模块可以具体用于:按照多组DDR内存的存取能力,确定每单位数据长度内中每个DDR内存占用的数据长度,以将该请求拆分为多个子请求。
也就是说,若请求为读请求,则可将读请求的地址长度拆分为多个单位数据长度,而后可按照DDR内存的存取能力确定每个DDR内存在单位数据长度中占用的数据长度,或者说在单位数据长度中各自分配到多少个地址;这样在读取数据时,多个DDR内存可以按照每单位数据长度中各自分配到的地址读取数据。类似的,若请求为写请求,在分配地址时还需要分配地址对应的数据,这样在写入数据时,多个DDR内存可以按照每单位数据长度中各自分配到的地址和数据执行写操作。这样在读取数据或写入数据时,就可兼顾到每个DDR内存的存取能力,提升读写速度,减少访问延时。
在一种可能的设计中,该单位数据长度是根据该请求的数据位宽确定的。
例如,请求的数据位宽为256bit,每个字节为8bit,那么单位数据长度可以为256/8=32字节。也就是说,可以将请求的地址和数据切分为多个32字节,将每个32字节按照DDR内存的存取能力分配给每个DDR内存。在一种可能的设计中,数据分配模块具体用于:根据每组DDR内存的位宽和接口的访问频率确定第一比例;根据请求的数据位宽确定待分配的单位数据长度;根据单位数据长度将第一比例转换为第二比例,以根据第二比例、请求的首地址和地址长度得到变换后该请求的首地址和地址长度,变换后该请求的首地址和地址长度能够使得拆分后的子请求的首地址和地址长度为整数。
该设计中对首地址和地址长度进行变换,是考虑到直接根据第一比例计算子请求的首地址和地址长度时,得到的子请求的首地址和地址长度可能不为整数。
第二方面,提供一种计算机设备,计算机设备包括多组双倍速率DDR内存和芯片,芯片包括多个DDR控制器,每个DDR控制器访问一组DDR内存,一组DDR内存包括至少一个DDR芯片,其中:芯片,用于按照多组DDR内存的存取能力将一个请求拆分为多个子请求,并向多组DDR内存分别发送子请求;多组DDR内存中的每组DDR内存,用于接收芯片发送的子请求,以根据接收到的子请求实现读写操作。第二方面的有益效果可以参见第一方面的说明。
在一种可能的设计中,芯片具体用于:根据多个DDR控制器可访问的DDR内存的存取能力的比例,将请求拆分为多个子请求。
在一种可能的设计中,比例是根据每组DDR内存的位宽和接口的访问频率确定的。
在一种可能的设计中,芯片具体用于:根据比例对请求的首地址和地址长度进行变换,得到变换后的首地址和地址长度,变换后的首地址和地址长度能够使得拆分后的子请求的首地址和地址长度为整数;根据请求变换后的首地址和地址长度,得到拆分后每个子请求的首地址和地址长度。
在一种可能的设计中,芯片具体用于:若请求为写请求,则将写请求中的待写入数据根据变换后的首地址进行数据对齐,并将地址末尾的多余地址的数据置为无效;根据请求的数据位宽以及比例,确定数据对齐后,每单位数据长度内分配给每个子写请求的数据。
在一种可能的设计中,芯片具体用于:若请求为读请求,则根据拆分后每个子读请求的首地址和地址长度从多组DDR内存中读取数据;合并每个子读请求读取的数据,得到读请求所读取的数据。
在一种可能的设计中,芯片具体用于:根据请求的数据位宽以及比例,确定合并数据时,每单位数据长度中每个子读请求的数据量,以得到多个单位数据长度;将多个单位数据长度合并,得到读请求所读取的数据。
第三方面,提供一种扩展双倍速率DDR内存的方法,该方法包括:按照多组DDR内存的存取能力将一个请求拆分为多个子请求,一组DDR内存包括至少一个DDR芯片;控制多个DDR控制器中的每个DDR控制器根据多个子请求中的一个子请求访问一组DDR内存。第三方面的有益效果可以参见第一方面的说明。
在一种可能的设计中,按照多组DDR内存的存取能力将一个请求拆分为多个子请求包括:根据多个DDR控制器可访问的DDR内存的存取能力的比例,将请求拆分为多个子请求。
在一种可能的设计中,比例是根据每组DDR内存的位宽和接口的访问频率确定的。
在一种可能的设计中,按照多组DDR内存的存取能力将一个请求拆分为多个子请求包括:若请求为读请求,子请求为子读请求,则根据比例以及读请求携带的首地址和地址长度,确定多个子读请求对应的首地址和地址长度;若请求为写请求,子请求为子写请求,则根据比例以及写请求携带的首地址、地址长度以及待写入的数据,确定多个子写请求对应的首地址、地址长度以及待写入的数据。
在一种可能的设计中,按照多组DDR内存的存取能力将一个请求拆分为多个子请求包括:根据比例对请求的首地址和地址长度进行变换,得到变换后的首地址和地址长度,变换后的首地址和地址长度用于使得拆分后的子请求的首地址和地址长度为整数;根据请求变换后的首地址和地址长度,得到拆分后每个子请求的首地址和地址长度。
在一种可能的设计中,按照多组DDR内存的存取能力将一个请求拆分为多个子请求包括:若请求为写请求,则将写请求中的待写入数据根据变换后的首地址进行数据对齐,并将地址末尾的多余地址的数据置为无效;根据请求的数据位宽以及比例,确定数据对齐后,每单位数据长度内分配给每个子写请求的数据。
在一种可能的设计中,将地址末尾的多余地址的数据置为无效包括:通过掩码计算在地址末尾的多余地址添加掩码。
在一种可能的设计中,控制多个DDR控制器根据多个子请求实现对多组DDR内存的读写操作包括:若请求为读请求,则控制多个DDR控制器根据拆分后每个子读请求的首地址和地址长度从多个DDR内存中读取数据;合并每个子读请求读取的数据,得到读请求所读取的数据。
在一种可能的设计中,控制多个DDR控制器根据多个子请求实现对多组DDR内存的读写操作包括:根据请求的数据位宽以及比例,确定合并数据时,每单位数据长度中每个子读请求的数据量,以得到多个单位数据长度;将多个单位数据长度合并,得到读请求所读取的数据。
第四方面,提供一种计算机可读存储介质,包括计算机指令,当计算机指令在电子设备上运行时,使得电子设备执行上述第三方面及第三方面的任一种可能的设计所述的方法。
第五方面,提供一种计算机程序产品,当计算机程序产品在计算机上运行时,使得电子设备执行上述第三方面及第三方面的任一种可能的设计所述的方法。
附图说明
图1为本申请实施例提供的一种视频会议系统的系统结构示意图;
图2为本申请实施例提供的一种多个与会者通过MCU进行视频会议时,MCU对视频数据的处理示意图;
图3为本申请实施例提供的一种多个与会者通过会议终端进行视频会议时,会议终端对视频数据的处理示意图;
图4为本申请实施例提供的一种装置40对单次访问的请求的处理示意图;
图5为本申请实施例提供的一种装置40的结构示意图;
图6为本申请实施例提供的一种对单次访问的请求拆分为两个子请求时的过程示意图;
图7为本申请实施例提供的一种对单次访问的请求拆分为两个子请求时的过程示意图;
图8为本申请实施例提供的一种对单次访问的请求拆分为两个子请求时的过程示意图;
图9为本申请实施例提供的一种通过MCU对会与者对应的数据通过多个控制器访问多组DDR内存的过程示意图;
图10为本申请实施例提供的一种计算设备的结构示意图。
具体实施方式
为了便于理解,示例的给出了部分与本申请实施例相关概念的说明以供参考。如下所示:
DDR内存:也可以称为DDR芯片,是指双倍速率同步动态随机存储器(double datarate synchronous dynamic random access memory,DDR SDRAM),其在一个时钟周期内可以传输两次数据,能够在时钟的上升期和下降期各传输一次数据,数据传输速率高。一个DDR控制器可通过地址总线连接有一组DDR内存,一组DDR内存包括至少一个DDR芯片。一个DDR芯片可支持8bit或16bit等位宽的数据接口。例如,当一个DDR控制器支持64bit的数据位宽时,该DDR控制器通过地址总线可连接有4个16bit数据位宽的DDR芯片,或连接有8个8bit数据位宽的DDR芯片。该DDR控制器连接的4个DDR芯片为一组DDR内存,或者连接的8个DDR芯片为一组DDR内存。
多点控制单元(multi control unit,MCU):视频会议系统中的重要组成部分,当多于两点以上的会场召开视频会议时,可以由MCU对多个会场的信号进行汇接、分配和切换,并对会议进行控制。其功能与交换机类似的,可作为各个视频会议终端的音频、视频、数据、信令等信号汇接和交换的处理点,并与其他的MCU相级联。
现场可编程逻辑门阵列(field programmable gate array,FPGA):属于专用集成电路中的一种半定制电路,是可编程的逻辑列阵,能够有效的解决原有的器件门电路数较少的问题。
特殊应用集成电路(application specific integrated circuit,ASIC):即专用集成电路,是指应特定用户要求和特定电子系统的需要而设计、制造的集成电路。
位宽:内存在一个时钟周期内所能传送数据的比特位数,位数越大则瞬间所能传输的数据量越大。例如位宽可以为64位。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,在本申请实施例的描述中,“多个”是指两个或多于两个。
本申请实施例可用于:对于具有多个DDR控制器的会议终端或者MCU,可以在接收到单次访问的请求时,可通过多个DDR控制器访问多组DDR内存。这样可以将多组DDR内存的存储能力联合起来使用,将多组DDR内存的位宽联合起来等效成更高位宽的DDR内存,这样当单次访问的数据量较大时,可以使得单次访问的存取速度得到提升,数据存取的延时短。
在上述应用场景下,本申请实施例可以应用于多种通用的具有一定处理功能的芯片上,该芯片可以执行一定的代码,该代码可以用于实现一定的功能。当该代码用于实现行一定的功能时,可以用于执行本申请实施例的实现方式,以实现本申请的目的。在一些实施例中,该代码可以用于FPGA芯片,也可以应用于其他具有处理功能的芯片设计上,例如中央处理单元(central processing unit,CPU)或ASIC。这些芯片上设计有多个DDR控制器,每个DDR控制器可以用于访问芯片外的一组DDR内存。这些芯片例如可以适用于上述会议终端或者MCU中,用于实现视频会议对大数据量的存储需求,或者其他涉及大量图像的设计需求。
其中,FPGA可以是通过软件改进实现本申请的实施例,CPU和ASIC可以是对芯片的前端设计时进行代码综合,再后端通过布局布线流片后用于实现综合的代码,以使得流片后的芯片可以用于实现本申请的实施例。
通常,在视频会议系统中,如图1所示,该系统可以包括多个与会者可操作的会议终端10,以及作为视频数据交换的MCU11。会议终端10包括麦克风、摄像头和显示屏等。该会议终端10例如可以为个人计算机(Personal Computer,PC)、专用的会议终端设备或者智能手机。PC或智能手机中可以安装有用于视频会议的软件。会议终端10可将获取的视频数据通过MCU传输到其他与会者操作的会议终端10。在该会议终端10和MCU11中,均可以设置FPGA和多组DDR内存,或设置有ASIC和多组DDR内存。会议终端10可以将视频数据通过会议终端中的FPGA或ASIC处理后缓存在DDR内存中,再将DDR内存中的视频数据通过网络传输到MCU11,MCU11也可以将视频数据通过MCU中的FPGA或ASIC处理后缓存在DDR内存中,再将DDR内存中的视频数据通过网络传输到其他会议终端10,以便其他会议终端10根据视频数据播放视频图像。因此,本申请实施例可以用于会议终端或MCU将视频数据通过FPGA或ASIC处理后缓存在DDR内存的过程。
例如参考图2,在一种视频会议系统的场景中,包括与会者A、与会者B、与会者C以及与会者D。MCU20中包括两个DDR控制器(DDR0控制器和DDR1控制器)和两组DDR内存(DDR0内存和DDR1内存),每个DDR控制器可对一组DDR内存实现读写操作。两组DDR内存可以独立使用。为了平衡流量,视频数据的存取可以重复存储到两组DDR内存。例如当MCU20接收到一个与会者A的会议终端编码后发送的视频数据时,MCU20可对接收到的视频数据进行解码,并重复写入到两组DDR内存中,即与会者A的视频数据既要写入到DDR0内存中,也要写入到DDR1内存中。同样的,对于与会者B、C以及D的视频数据也要重复写入到DDR0内存和DDR1内存中。当任一会议终端请求播放其中一个与会者的视频画面时,MCU20可以将请求的与会者的视频数据进行编码再传输到会议终端。相应的,会议终端可通过读取其中一组DDR内存中的视频数据进行解码,得到与会者的视频数据,进而观看会者的视频画面。例如与会者B的会议终端可从DDR0内存中读取与会者A的视频数据进行解码,得到与会者A的视频数据,从而观看与会者A的视频画面;另一个与会者C的会议终端可通过读取DDR1内存中与会者D的视频数据进行解码,得到与会者D的视频数据,从观看与会者D的视频画面。
或者也可以理解为,该视频会议系统中,当与会者A发送单次写请求时(即将与会者A的视频数据要缓存到MCU中时),该写请求中携带的数据需要重复写入到两组DDR内存,但是这样两组DDR内存会被重复占用,或造成额外的内存消耗。且一个会议终端通过发送读请求读取数据时,只能从一个DDR控制器对应的一组DDR内存中读取数据,但是一组DDR内存的位宽又有限,发送单次读请求读取的最大数据量被限制,数据读取延迟较长。
再例如,参考图3,在会议终端30侧,多人会议场景下,如果一个与会者在一个会议终端30同时观看多方与会者的多画面场景时,该场景下,多方与会者的视频数据必须在会议终端30的同一组DDR内存中进行多画面的拼接,即在同一片地址空间中进行多画面数据存储,还包括会议终端30自身的摄像机的环境数据和会议材料数据等都与与会者的视频数据在同一组DDR内存中存储。例如DDR0内存的剩余空间较大,或者说DDR0控制器的负载为空或者负载较小,多方与会者的视频数据被会议终端30存储在DDR0内存中。但是,这样容易出现DDR0内存满负荷,DDR1内存空闲的情况。假如DDR0能满足的位宽的极限能力只有64位,那么可能会造成视频数据传输延时大,会议终端的显示屏301中的多画面可能出现视频卡顿的现象。例如多方与会者的视频数据被从会议终端30中读取时,会议终端30的显示屏上出现了视频卡顿现象。另外,当会议终端30输入的会议材料的数据或摄像机获取到的环境数据等较大时,也会造成会议终端的显示屏301中显示该会议材料的画面或摄像机获取到的画面的卡顿。
从以上举例可看出,会议终端中,多组DDR内存的地址空间独立,每组DDR内存的位宽又有限,例如位宽为64位时,单次访问的最大数据位宽只有64位,如果进行多画面拼接时,多画面的数据对应存储在一组DDR内存,容易造成数据传输延时较大,画面出现卡顿现象。
为了减小数据传输延时,本申请提供一种扩展DDR内存位宽的装置,例如该装置可以为FPGA或ASIC的芯片,该芯片中包括多个DDR控制器,每个DDR控制器可访问芯片外的一组DDR内存。该芯片可以设计在MCU中或者会议终端中。本申请中,当该芯片接收到请求时,该芯片处理请求的过程可以为:当该芯片接收到单次访问的请求时,可将该单次访问的请求通过至少两个DDR控制器进行处理。也就是说,单次访问的请求用于写数据时,可将该请求携带的数据通过至少两个DDR控制器写入到对应的至少两组DDR内存中;单次访问的请求用于读数据时,该请求可通过至少两个DDR控制器从对应的至少两组DDR内存中读取数据。这样,相对现有的单次访问只能访问一组DDR内存来说,多组DDR内存的地址空间被共享,多组DDR内存的地址空间不再独立使用。这样,假设一组DDR内存的最大流量的位宽为64位时,可将多组DDR内存等效为更高位宽(例如128位宽或192位宽等)的单组DDR内存,可最大化利用多组DDR内存的能力,减小访问延时。
基于上述对本申请提供的装置的概要说明,下面对本申请提供的装置进行进一步说明。
参考图4,本申请提供的装置40包括多个DDR控制器,每个DDR控制器访问一组DDR内存,一组DDR内存包括至少一个DDR芯片,该装置40中,还包括:
数据分配模块41,用于按照多组DDR内存的存取能力将接收到的一个请求拆分为多个子请求,并将多个子请求分别发送给多个DDR控制器;其中,拆分的子请求的数量可以与装置40中的DDR控制器的数量相同,一个DDR控制器可根据一个子请求访问一组DDR内存。
多个DDR控制器中的每个DDR控制器42,用于接收数据分配模块发送的子请求,以根据接收到的子请求实现对一组DDR内存的访问。
示例性的,参考图4,假设该装置中,DDR控制器42包括DDR0控制器和DDR1控制器,DDR0控制器用于访问DDR0内存,DDR1控制器用于访问DDR1内存。当该装置40接收到一个请求时,数据分配模块41可将这一个请求拆分为2个子请求,一个子请求通过DDR0控制器进行处理,以访问DDR0内存;另一个子请求通过DDR1控制器进行处理,以访问DDR0内存。
在一些实施方式中,在拆分请求时,数据分配模块41可以用于:确定多个DDR控制器访问的DDR内存的存取能力的比例;根据该比例将请求拆分为多个子请求。
在一些实施方式中,该比例可以是根据每组DDR内存的位宽和接口的访问频率确定的。
由于每组DDR内存的位宽和接口的访问频率可以影响到每组DDR内存的带宽能力,即存取数据的速度,因此,可以使用位宽和接口的访问频率计算每组DDR内存的存取能力。其中,每组DDR内存的位宽可以理解为一次访问该组DDR内存时,存取数据的位数,例如该位数可以为64位。每组DDR内存的接口的访问频率可以理解为:该组DDR内存在单位时间内存取数据的数据量,例如一组DDR内存1秒内存取数据的数据量为1600M。
示例性的,参考图4,假设DDR0内存的位宽为64位,DDR1内存的位宽为32位,DDR0内存的访问频率为1600M/s,DDR1内存的访问频率为2133M/s。那么,计算DDR0内存和DDR1内存的存储能力比例的方式可以为:(64*1600):(32*2133),比值约为3:2。因此,在请求的分配上,可以按照3:2的比例,将该请求分为两个子请求。
在一些实施方式中,若请求为读请求,子请求为子读请求,则数据分配模块41在切分请求时可以用于:根据比例以及读请求携带的首地址和地址长度,确定多个子读请求对应的首地址和地址长度;
若请求为写请求,子请求为子写请求,则数据分配模块41可以用于:根据比例以及写请求携带的首地址、地址长度以及待写入的数据,确定多个子写请求对应的首地址、地址长度以及待写入的数据。
以请求为写请求为例,假设该写请求对应的首地址为B0,地址长度为30(B0~B29),待写入的数据长度为3840Byte,那么按照3:2的比例,DDR0控制器待处理的子写请求携带的地址长度占请求的地址长度的3/5,DDR0控制器待写入DDR0内存的数据占3840Byte的3/5,DDR1控制器待处理的地址长度占请求的地址长度的2/5,DDR1控制器待写入DDR1内存的数据占3840Byte的2/5。
在一种实施例中,按照多组DDR内存的存取能力,确定每单位数据长度内中每个DDR内存占用的数据长度,以将请求拆分为多个子请求。或者可以理解为,按照存取能力的比例,将请求的地址分配和数据分配按照单位数据长度交叉切分。例如,单位数据长度为10个地址,那么按照3:2的比例,可以对每10个地址进行一次切分,将前6个地址(例如B0~B5)分配给一个子写请求,对应DDR0内存,后4个地址(例如B6~B9)分配给另一个子写请求,对应DDR1内存。同时,对每10Byte(字节,位组)的连续的待写入数据进行一次切分,其中前6Byte的连续数据分配给一个子写请求,该子写请求用于将6Byte的连续数据存储到DDR0内存,后4Byte的连续数据分配给另一个子写请求,该子写请求用于将4Byte的连续数据存储到DDR1内存。
在一些实施例中,对于FPGA来说,数据分配模块41的功能和DDR控制器42的功能可以通过编写软件程序实现,该软件程序作用于数据分配模块41和DDR控制器42对应的硬件电路,使得该硬件电路可以实现数据分配模块41和DDR0控制器42的功能。
这样一来,对于单次访问的请求,该请求可以不只通过一个DDR控制器访问一组DDR内存,而是通过将该请求切分为多个子请求,多个子请求通过多个DDR控制器访问多个DDR内存,这样多个DDR内存的内存空间对于单次访问可以共享使用,且多个DDR内存的位宽结合起来可以等效为更高位宽的DDR内存,进而使得单次访问的位宽得到提升,数据传输的延迟相应减小。
下面对本申请的装置40进一步进行说明。
参考图5,本申请提供的装置40可以包括请求总线43、总线仲裁44、虚拟通道控制45、数据分配模块41、缓存46、虚拟通道仲裁47、读写均衡仲裁48、控制器接口模块49以及多个DDR控制器42。
在一些实施例中,若该装置40为FPGA,则本申请可以通过对总线仲裁44、虚拟通道控制45、数据分配模块41、缓存46、虚拟通道仲裁47以及读写均衡仲裁48通过软件编程实现其功能,编程的代码可以输入到对应的硬件模块中,由对应的硬件模块执行其功能。
若该装置40为ASIC或CPU等,则本申请可以通过前端代码综合设计用于实现总线仲裁44、虚拟通道控制45、数据分配模块41、缓存46、虚拟通道仲裁47以及读写均衡仲裁48的功能,再通过后端进行布局布线流片,以在芯片中设计对应的硬件模块,该硬件模块可以用于实现后续各硬件模块将要介绍的功能。
在一些实施例中,若该装置在MCU中,该请求总线43可以用于接收会议终端发送的请求;若该装置40在其他涉及大量图像处理的会议终端中,该请求总线43可以用于接收会议终端自身产生的请求,请求可用于对会议终端中的DDR内存进行读取或写入。相应的,请求总线43可以分为读请求总线431和写请求总线432。读请求总线431用于接收读请求,写请求总线432用于接收写请求。
当用户在请求总线43上发起内存操作请求,即发送了请求时,总线仲裁44可轮询检查请求总线43上的请求,若确定请求用于访问DDR内存,则总线仲裁44可以将请求发送给虚拟通道控制45。若确定请求不是用于访问DDR内存的,则总线仲裁44丢弃该请求。
当虚拟通道控制45接收到用户访问DDR内存的请求时,可以对该请求添加标识(Identity,ID),该ID用于表征请求后续处理中该请求的身份,且每个请求都会被分配一个ID,不同的请求对应的ID不同。同一个请求切分后的多个子请求对应的ID与相应的请求的ID相同。即当完成请求的拆分后,每个子请求的ID与对应的请求的ID相同。当每个DDR控制器处理完各子请求后,该ID可被请求释放,该ID还可以继续用于分配给新的请求。
本申请给每个请求分配ID是考虑到:一是每个缓存46可以看作是多个子缓存组成,可分配的ID个数可以与缓存46对应的子缓存数量相同。若还有空闲ID可分配时,则可将拆分得到的携带ID的子请求存入一个未存储满的子缓存中。当任一个子缓存存储满时,DDR控制器即可开始处理该子缓存中的子请求。二是为了管理子缓存的周期。当携带ID的子请求存入一个子缓存,DDR控制器根据该子请求读写完成时,该子缓存结束被占用,对应的ID可被释放。
虚拟通道控制45可以将添加ID后的请求发送给数据分配模块41,数据分配模块41可以按照多组DDR内存的存取能力将接收到的一个请求拆分为多个子请求。每个子请求对应一个DDR控制器。在上述实施例中,各DDR内存的存取能力的比例是根据每组DDR内存的位宽和接口的访问频率确定的,记为第一比例。但是根据确定的第一比例进行数据分配时,可能不能将请求的数据长度和首地址以整数分配到每个DDR控制器接口,因此,数据分配模块41可以用于:根据请求的数据位宽以及比例,确定每单位字节内,分配给每个子请求的字节大小。其中每单位字节内,每个子请求分配到的字节大小,可以理解为对上述第一比例进行变换后得到的比例。也就是说,数据分配模块41可以用于先将第一比例进行变换,得到第二比例,按照变换后的第二比例拆分请求。
参照图5,以两个DDR控制器(DDR0控制器和DDR1控制器)对应两组DDR内存为例,若两组DDR内存(DDR0内存和DDR1内存)变换前的第一比例约为:M:N=3:4,在进行比例变换时,可以根据单位数据长度(W个字节,W=请求的数据位宽/8,即单位数据长度是根据请求的数据位宽确定的。)和第一比例得到第二比例(M′:N′),以便按照变换后的第二比例拆分请求。例如请求的数据位宽为256bit,那么W的值为32字节。那么变换后的第二比例(M′:N′)的计算方式可以为:
Figure BDA0002429623210000101
这里的结果不需要简化,这样可以直接将32个字节,以14个字节和18个字节分配给两个子请求。
也就是说,每W个字节,
Figure BDA0002429623210000102
个字节分配给DDR0内存,
Figure BDA0002429623210000103
Figure BDA0002429623210000104
个字节分配给DDR1内存。即,在写数据时,每32个字节,14个字节分配给DDR0内存,18个字节分配给DDR1内存。类似的,读数据时,每32个字节,从DDR0内存读取14个字节,从DDR1内存读取18个字节。
而后,数据分配模块41可以用于:根据变换后的第二比例计算拆分后每个子请求的首地址和地址长度。考虑到按照变换后的第二比例、请求的首地址以及地址长度计算每个子请求对应的首地址和地址长度可能不为整数,还需要根据第二比例对请求的首地址和地址长度进行变换。
需要说明的是,根据第二比例拆分请求的方式是可选的,还可以有其他的方式用于拆分请求,本申请不做限定。
参考图5,假设装置40中包括2个DDR控制器:DDR0控制器和DDR1控制器,DDR0控制器对应DDR0内存,DDR1控制器对应DDR1内存。如果请求携带的首地址为A,请求的地址长度为L,第二比例为M′:N′,那么计算拆分后2个子请求的首地址A0和A1的计算公式,以及地址长度L0和L1的计算公式可以为:
A0=A*M′/(M′+N′),L0=L*M/(M′+N′);
A1=A*N′/(M′+N′),L1=L*N/(M′+N′)。
可以得知,为了保证子请求的首地址和地址长度均为整数,A和L须为M′+N′的整数倍。若A为M′+N′的整数倍,则子请求的首地址可以按照请求的首地址A计算;同样的,若L为M′+N′的整数倍,则子请求的地址长度按照请求的地址长度L计算。否则,若A和L不是M+N的整数倍时,需要对A进行变换,以及对L进行变换。
在一些实施例中,如果A和L不是M′+N′的整数倍时,数据分配模块41可以用于:经过地址变换、数据对齐和掩码计算过程对请求进行处理。具体地,地址变换可以理解为:根据第二比例以及请求的首地址,对请求的首地址进行变换,得到变换后的首地址;以及根据第二比例以及请求的地址长度,对请求的地址长度进行变换,得到变换后的地址长度。变换后的首地址和地址长度可使得切分后的子请求的地址长度为整数;根据变换后的首地址和地址长度,得到切分后每个子请求首地址和地址长度。
在一些实施例中,可以将请求的首地址A变换为FA,且
Figure BDA0002429623210000105
使得变换后请求的首地址FA为M′+N′的整数倍。特殊的,当A是M′+N′的整数倍时,FA=A。
类似的,可以将请求的地址长度L变换为FL,且
Figure BDA0002429623210000106
使得变换后请求的地址长度FL为M′+N′的整数倍。特殊的,当L是M′+N′的整数倍时,FL=L。
由于请求的首地址变换为FA,地址长度变换为FL,那么如果请求为写请求时,还需要将请求携带的数据与变换后的首地址和地址长度进行数据对齐,并通过掩码计算在变换后的地址长度中添加无效码。
在一些实施例中,请求携带的数据需要根据变换前的首地址A和变换后的首地址FA进行移位对齐,且移位FA-A,并在地址末尾的FA-A长度填入空数据(一般填0),同时进行掩码对齐,即在地址末尾对应的FA-A长度添加无效码,例如添加比特位为0的掩码,任一地址对应存在掩码意味着该地址对应的数据无效。
这样,在变换请求的首地址为FA,地址长度为FL之后,拆分后2个子请求的首地址A0和A1的计算公式,以及地址长度L0和L1的计算公式可以为:
A0=FA*M′/(M′+N′),L0=FL*M′/(M′+N′);
A1=FA*N′/(M′+N′),L1=FL*N′/(M′+N′)。
而后,将地址长度FL,按照每W个地址中,M′个地址分配给DDR0内存,N′个地址分配给DDR1内存进行分配。
举例来说,假设M:N=3:4,请求的数据位宽为256bit,那么分配数据时的单位字节大小W为32字节,M′:N′=14:18。以M′=14,N′=18为例,参考图6,如果请求的首地址A为10,请求的地址长度L为120字节,那么请求变换后的首地址FA=32,变换后的地址长度FL=128字节,DDR0内存对应的子请求的首地址A0=14,地址长度L0=56字节,DDR1内存对应的子请求的首地址A1=18,地址长度L1=72字节。
需要说明的是,本申请的图6、图7以及图8中,Bx代表一个地址,每个地址可写入一个字节(Byte),x=10、11、12、…287…。例如B10代表地址序号为10的地址。本申请实施例中,为了描述简练,Bx都被简写为x,即本申请实施例中的地址10、地址11、…、地址159、…、地址287…,与附图中的B10、B11、…、B159、…、B287…的意义相同。其中,请求的首地址A、A′、FA和FA′,和子请求的首地址A0、A1、A0′和A1′为Bx中的示例,均代表地址Bx的一个地址。
图6、图7以及图8中,箭头①表示请求的首地址和地址长度变换后,被划分为多个单位地址长度;箭头②表示根据第二比例以及变换后的首地址和地址长度可计算得到每个子请求的首地址和地址长度;箭头③表示每个DDR内存的地址长度按照第二比例拆分后,与请求变换后的地址中每个单位数据长度的对应关系。
如果请求为写请求,由于首地址变换,那么写请求携带的数据需要按照FA-A进行移位对齐(数据对齐),即变换前请求的原首地址10的数据移位到变换后的首地址32,移动了22个地址,并在地址32开始进行地址与数据的对齐,同时,需要通过掩码计算在变换后的地址末尾的多余地址进行掩码。该举例中,变换后的地址152到地址159需进行掩码对齐,即地址152到地址159这末尾的8个地址对应的数据为0或其他值,同时对应添加比特值为0的掩码,以指示这8个地址的数据无效。
其中,进行数据对齐时,原首地址10的数据对应变换后的地址32、原地址11的数据对应变换后的地址33、原地址13的数据对应变换后的地址34、……、原末地址129的数据对应变换后的地址151。
基于此,在将变换后的地址以及对应的数据分配到两个子请求时,以每单位32个字节进行分配,也可以说,将变换后的请求的地址32~159这128个地址分成4个32个地址:地址32~地址63、地址64~地址95、地址96~地址127以及地址128~地址159。其对应的数据也被分配4个32字节。按照每32个字节交叉切分,以及14:18的比例进行地址和数据分配时,可以有:
对于请求变换后的地址32~63,前14个地址32~45对应的数据,对应分配给DDR0对应的子请求的地址14~27;后18个地址46~63对应的数据,对应分配给DDR1对应的子请求的地址18~35;
对于请求变换后的地址64~95,前14个地址64~77对应的数据,对应分配给DDR0对应的子请求的地址28~41;后18个地址78~95对应的数据,对应分配给DDR1对应的子请求的地址36~53;
对于请求变换后的地址96~127,前14个地址96~109对应的数据,对应分配给DDR0对应的子请求的地址42~55;后18个地址110~127对应的数据,对应分配给DDR1对应的子请求的地址54~71;
对于请求变换后的地址128~159,前14个地址128~141对应的数据,对应分配给DDR0对应的子请求的地址56~69;后18个地址142~159对应的数据,对应分配给DDR1对应的子请求的地址72~89。
于是,数据分配模块41可以用于:按照分配后得到的两个子请求的首地址、地址长度以及每个地址分配到的数据进行内存的写操作。
按照上述举例,如果请求为读请求,则按照每个子请求的首地址和地址长度向对应的DDR内存进行读操作即可。
对于每个DDR内存,为了检验下一次按照本申请计算得到的子请求的首地址,与上一次拆分时得到子请求的末地址是连续的,以保证每次将请求拆分后,对每个DDR内存进行读写操作时,DDR内存的地址空间统一,以上一个请求的原首地址为10和地址长度为120字节为例,当接收到下一个请求时,参考图7,可以有:
与上一个请求的末地址129连续时可得到:下一个请求的首地址A'=130,地址长度L'=120,继续按照M′=14,N′=18为例,通过以上实施例中的计算公式,那么下一个请求变换后的首地址FA'=160,FL'=128。同时,得到拆分后DDR0内存对应的子请求的首地址A0'=70,F0'=56字节,DDR1内存对应的子请求的首地址A1'=90,F1'=72字节。
可以看出,下一次分配后,DDR0内存对应的子请求的首地址A0'=70,与上一次分配的子请求的末地址69是连续的,下一次分配后DDR1内存对应的子请求的首地址A1'=90,与上一次分配的子请求的末地址89是连续的。
类似的,以请求为写请求为例,进行数据对齐时,原首地址130的数据对应变换后的首地址160、原地址131的数据对应变换后的地址161、原地址132的数据对应变换后的地址162、……、原末地址249的数据对应变换后的末地址279。其中,变换后的地址280~287进行了掩码。
在将下一个请求变换后的地址以及对应的数据分配到两个子请求时,以每单位32个字节进行分配,即将下一个请求变换后的地址160~287这128个地址仍然分成4个32个地址:地址160~地址191、地址192~地址223、地址224~地址255以及地址256~地址287。其对应的数据也被分配4个32字节。按照每32个字节交叉切分,以及14:18的比例进行地址和数据分配,分配结果可以参考图7,此处不再赘述。
特殊的,如果两组DDR内存的位宽和接口的访问频率一致时,按照以上实施例中的计算公式可得到:M:N=1:1,每单位字节,或者说每单位地址长度可以平分给两个DDR内存。如果继续按照W值为32举例,M′:N′=16:16。假设请求的首地址A为10,请求的地址长度L为120字节,这时FA=32,FL=128,A0=16,L0=64字节,A1=16,L1=64字节。类似的,参考图8,依然需要对变换后的地址中的后8个地址进行掩码。
以请求为写请求为例,类似的,进行数据对齐时,原首地址10的数据对应变换后的地址32、原地址11的数据对应变换后的地址33、原地址13的数据对应变换后的地址34、……、原末地址129的数据对应变换后的末地址151。
基于此,在将变换后的地址以及对应的数据分配到两个子请求时,依然可以以每单位32个字节进行分配,分配后得到的4部分地址有:地址32~地址63、地址64~地址95、地址96~地址127以及地址128~地址159。其对应的数据也被分配4个32字节。按照每32个字节交叉切分,以及16:16的比例进行地址和数据分配时,可以有:
对于请求变换后的地址32~63,前14个地址32~47对应的数据,对应分配给DDR0对应的子请求的地址16~31;后18个地址48~63对应的数据,对应分配给DDR1对应的子请求的地址16~31;
对于请求变换后的地址64~95,前14个地址64~79对应的数据,对应分配给DDR0对应的子请求的地址32~47;后18个地址80~95对应的数据,对应分配给DDR1对应的子请求的地址32~47;
对于请求变换后的地址96~127,前14个地址96~111对应的数据,对应分配给DDR0对应的子请求的地址48~63;后18个地址112~127对应的数据,对应分配给DDR1对应的子请求的地址48~63;
对于请求变换后的地址128~159,前14个地址128~143对应的数据,对应分配给DDR0对应的子请求的地址64~79;后18个地址144~159对应的数据,对应分配给DDR1对应的子请求的地址64~79。
于是,数据分配模块41可以用于:按照分配后得到的两个子请求的首地址、地址长度以及每个地址分配到的数据进行内存的写操作。
当数据分配模块41将请求拆分得到多个子请求时,可以将拆分得到的多个子请求发送到缓存46,同一个请求的每个子请求对应一个缓存空间,记为缓存46。
缓存46可以用于存储多个请求对应的子请求,当缓存46确定存储多个子请求,且存储空间已满时,可以向缓存46对应的虚拟通道仲裁47发送指示,虚拟通道仲裁47确定对应的缓存46存储满时,可以将缓存46中的子请求发送给后续对应的读写均衡仲裁48。
读写均衡仲裁48可以用于对子请求中的写请求和读请求进行均衡控制。即读写均衡仲裁48可以用于:向相应的控制器接口模块交叉发送子写请求和子读请求,达到读写均衡控制。
当读写均衡仲裁48用于将子请求发送给相应的控制器接口模块49后,控制器接口模块49可以用于:将接收到的子请求转换为相应的DDR控制器42可识别的数据。再将转换后的子请求发送给DDR控制器42,以便DDR控制器42根据转换后的子请求访问对应的DDR内存。
需要说明的是,通常,多个DDR控制器访问DDR内存时,需要同步访问,也就是说,当每个DDR控制器对应的缓存46中都存储满时,多个DDR控制器才开始对相应的DDR内存进行访问。但是,本申请实施例中,由于每个请求都添加有ID,每个请求对应的子请求添加有与请求相同的ID,因此,多个DDR控制器间不需要同步访问。即,当一个虚拟通道仲裁47确定对应的缓存46存储满时,此时若其他的虚拟通道仲裁47对应的缓存46还未存储满,那么存储满的缓存46对应的虚拟通道仲裁47可以用于:将对应的缓存46中的子请求发送给相应的读写均衡仲裁48,读写均衡仲裁48可以将接收到的子请求通过控制器接口模块49发送给对应的DDR控制器42,DDR控制器42即可用于根据接收到的子请求访问对应的DDR内存。也就是说,DDR控制器42可以按照子请求先到先得的仲裁机制访问对应的DDR内存,不用关联其他的DDR控制器进行同步访问。类似的,当每个子请求的用户子响应通过DDR内存反馈回来时,每个用户子响应的ID与相应的子请求的ID相同。数据分配模块41可以用于根据具有相同ID的子请求获取具有相同ID的请求的响应,即可以用于将具有相同ID的用户子响应重组为一个用户响应,该用户响应即与请求具有相同ID的响应。
因此,若请求为读请求,子请求为子读请求,则当从DDR内存中按照对应的子读请求读取了数据之后,DDR内存向相应的DDR控制器反馈子读请求的响应,该子读请求的响应携带有从DDR内存中读取的每个地址的数据,读取的数据以及相应的ID携带在子读请求的响应中,并通过DDR控制器42、控制器接口模块49、读写均衡仲裁48、虚拟通道仲裁47以及缓存46反馈到数据分配模块41,数据分配模块41可以将来自于每个DDR内存的响应的数据,按照每个数据对应的地址顺序进行拼接,得到读请求对应的用户读响应,用户读响应中携带有拼接后的数据。
举例来说,以上述图6对应的实施例来说,如果请求为读请求,那么一个子读请求0用于从DDR0内存中读取DDR0内存对应的地址14~69对应的数据,另一个子读请求1用于从DDR1内存中读取DDR1内存对应的地址18~89的数据,若子读请求0对应子读响应0,子读请求1对应子读响应1,那么:
子读响应0携带的数据是以4部分数据构成的,每部分数据包括14字节:
地址14~27对应的14字节、地址28~41对应的14字节、地址42~55对应的14字节以及地址56~69对应的14字节;
类似的,子读响应1携带的数据也是以4部分数据构成的,每部分数据包括18字节:
地址18~35对应的18字节、地址36~53对应的18字节、地址54~71对应的18字节以及地址72~89对应的18字节。
当子读响应0和子读响应1到达数据分配模块41时,由于其携带的ID均相同,因此,数据分配模块41可以用于:将子读响应0的地址14~27对应的14字节与子读请求1的地址18~35对应的18字节拼接,得到第1个32字节的数据1;再将子读响应0的地址28~41对应的14字节与子读响应1的地址36~53对应的18字节拼接,得到第2个32字节的数据2;再将子读响应0的地址42~55对应的14字节与子读响应1的地址54~71对应的18字节拼接,得到第3个32字节的数据3;最后将子读响应0的地址56~69对应的14字节与子读响应1的地址72~89对应的18字节拼接,得到第4个32字节的数据4。
而后,再将得到的4部分数据按照数据1~数据2~数据3~数据4的顺序拼接起来,得到128字节,由于读请求的地址长度是120字节,因此,需将128个字节中末尾的8个字节的数据去除,就可得到读请求需读取的120字节的数据。
通过以上实施例,可以看出,本申请可以将请求拆分为多个子请求,每个子请求通过对应的DDR控制器访问DDR内存,这样以来,多个DDR内存的存储空间可以统一,等效成更高位宽的DDR内存,提升对DDR内存的读写速度,减少读写时延。
下面结合实际的应用场景对以上实施例进行说明。以视频会议系统为例,当MCU中需要进行大量的图像交换时,可以通过以下实施例提升图像数据的访问时延。
参考图9,视频会议系统包括与会者A、与会者B、与会者C和与会者D。每个与会者可通过操作对应的会议终端选择观看其他的一个或者多个与会者的视频图像。MCU可以包括上述装置40,并以装置40包括两个DDR控制器为例。
假设MCU中设置有FPGA,FPGA支持两组DDR内存。MCU在接收到多方与会者的会议终端编码后发送的请求时,MCU可以先对接收到的请求进行解码,得到解码后的请求。该请求可以为读请求或者写请求。若为写请求时,意味着相应的与会者的视频数据需要写入到MCU中,以供其他的与会者的会议终端从MCU中读取并显示在会议终端上。若为读请求时,意味着会议终端需要从MCU中读取视频数据并显示在会议终端的显示屏上。
举例来说,假设与会者的视频数据以行为单位访问DDR内存,即一个写请求用于在DDR内存中写入一行数据,一个读请求用于在DDR内存中读取一行数据。每行数据的大小例如可以为120字节时,以图6的举例来说,假设与会者A对应的会议终端向MCU发送一次写请求,该写请求携带120字节大小的数据,且请求的数据位宽为256字节。再假设MCU中两个DDR控制器的第一比例为3:2,那么MCU可以通过对写请求中的首地址、地址长度以及数据进行地址变换、数据对齐以及掩码计算,得到转换后的128字节的数据,并按照每32个地址对应的数据切分为2份的数据,即每32个地址及对应数据中,前14个地址的数据分配给DDR0内存,后18个地址的数据分配给DDR1内存,从而得到两个子写请求的数据。而后,MCU通过DDR0控制器将一个子写请求分配得到的56个字节的数据按照其对应的地址写入DDR0内存,并通过DDR1控制器将另一个子写请求分配得到的72个字节的数据按照其对应的地址写入DDR1内存。
当与会者B想要观看与会者A的视频画面时,可以从MCU中读取与会者A的视频数据。具体的,与会者B的会议终端可以向MCU发送多个读请求,每一个读请求到达MCU时,MCU可以从MCU的DDR0内存以及DDR1内存中读取数据并拼接,并返回读请求的响应,该响应携带拼接后的数据,以反馈给与会者B的会议终端。举例来说,按照图6的举例,MCU在接收到与会者B的一个读请求时,首先可以将读请求的首地址10和地址长度120字节进行变换,得到变换后的首地址32和地址长度159,再根据变换后的首地址、地址长度以及第二比例计算得到需读取每个DDR内存的地址,而后根据第二比例读取DDR0内存中的数据和DDR1内存中的数据进行合并,得到4个32字节的单位数据长度,再将4个单位数据长度合并且去掉掩码的地址数据,可得到会者B的会议终端的一个读请求要读取的120字节的数据。
这样,当与会者A的一次请求写入的视频数据量较大时,与会者A的视频数据可以通过MCU中的两个DDR控制器写入到两组DDR内存中,在两组DDR内存等效为更高位宽的DDR内存中快速存入数据,减少大数据量存入DDR内存的时间。同时,与会者B的会议终端也可以在发送一个读请求时,通过MCU中的两个DDR控制器读取两组DDR内存中的数据,如果读取的数据量较大,可以从等效为从更高位宽的DDR内存中快速读取大数据量,减少数据读取的时间。
本申请实施例还提供一种计算机设备10,参见图10,计算机设备10包括多组双倍速率DDR内存和芯片101,芯片101包括多个DDR控制器,每个DDR控制器1011可通过总线102访问一组DDR内存100,一组DDR内存100包括多个DDR芯片1001,其中:
芯片101,用于按照多组DDR内存的存取能力将一个请求拆分为多个子请求,并向多组DDR内存101分别发送子请求;
多组DDR内存101中的每组DDR内存100,用于接收芯片101发送的子请求,以根据接收到的子请求实现读写操作。
在一些实施例中,芯片101可以具体用于:根据多个DDR控制器可访问的DDR内存的存取能力的比例,将请求拆分为多个子请求。
在一些实施例中,比例是根据每组DDR内存的位宽和接口的访问频率确定的。
在一些实施例中,芯片101具体用于:根据比例对请求的首地址和地址长度进行变换,得到变换后的首地址和地址长度,变换后的首地址和地址长度能够使得拆分后的子请求的首地址和地址长度为整数;根据请求变换后的首地址和地址长度,得到拆分后每个子请求的首地址和地址长度。
在一些实施例中,芯片101具体用于:若请求为写请求,则将写请求中的待写入数据根据变换后的首地址进行数据对齐,并将地址末尾的多余地址的数据置为无效;根据请求的数据位宽以及比例,确定数据对齐后,每单位数据长度内分配给每个子写请求的数据。
在一些实施例中,芯片101具体用于:若请求为读请求,则根据拆分后每个子读请求的首地址和地址长度从多组DDR内存中读取数据;合并每个子读请求读取的数据,得到读请求所读取的数据。
在一些实施例中,芯片101具体用于:根据请求的数据位宽以及比例,确定合并数据时,每单位数据长度中每个子读请求的数据量,以得到多个单位数据长度;将多个单位数据长度合并,得到读请求所读取的数据。
需要说明的是,本实施例中芯片101功能的具体实现可以参见与上述装置40的具体实现,其所达到的有益效果也相同,此处不再赘述。
为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上内容,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (20)

1.一种扩展双倍速率DDR内存位宽的装置,所述装置包括多个DDR控制器,每个DDR控制器访问一组DDR内存,所述一组DDR内存包括至少一个DDR芯片,其特征在于,所述装置还包括数据分配模块:
所述数据分配模块,用于按照多组DDR内存的存取能力将接收到的一个请求拆分为多个子请求,并将所述多个子请求分别发送给所述多个DDR控制器;
所述多个DDR控制器中的每个DDR控制器,用于接收所述数据分配模块发送的子请求,以根据接收到的子请求实现对一组DDR内存的访问。
2.根据权利要求1所述的装置,其特征在于,所述数据分配模块具体用于:
根据多个DDR控制器可访问的DDR内存的存取能力的比例,将所述请求拆分为所述多个子请求。
3.根据权利要求2所述的装置,其特征在于,所述比例是根据每组DDR内存的位宽和接口的访问频率确定的。
4.根据权利要求2或3所述的装置,其特征在于,所述数据分配模块具体用于:
根据所述比例对所述请求的首地址和地址长度进行变换,得到变换后的首地址和地址长度,所述变换后的首地址和地址长度能够使得拆分后的子请求的首地址和地址长度为整数;
根据所述请求变换后的首地址和地址长度,得到拆分后每个子请求的首地址和地址长度。
5.根据权利要求4所述的装置,其特征在于,所述数据分配模块具体用于:
若所述请求为写请求,则将所述写请求中的待写入数据根据变换后的首地址进行数据对齐,并将地址末尾的多余地址的数据置为无效;
根据所述请求的数据位宽以及所述比例,确定数据对齐后,每单位数据长度内分配给每个子写请求的数据。
6.根据权利要求4所述的装置,其特征在于,所述数据分配模块具体用于:
若所述请求为读请求,则根据拆分后每个子读请求的首地址和地址长度从多组DDR内存中读取数据;
合并每个子读请求读取的数据,得到所述读请求所读取的数据。
7.根据权利要求6所述的装置,其特征在于,所述数据分配模块具体用于:
根据所述请求的数据位宽以及所述比例,确定合并数据时,每单位数据长度中每个子读请求的数据量,以得到多个单位数据长度;
将多个单位数据长度合并,得到所述读请求所读取的数据。
8.根据权利要求1所述的装置,其特征在于,所述数据分配模块与多个DDR控制器连接,每个DDR控制器与一组DDR内存连接。
9.一种计算机设备,其特征在于,所述计算机设备包括多组双倍速率DDR内存和芯片,所述芯片包括多个DDR控制器,每个DDR控制器访问一组DDR内存,所述一组DDR内存包括至少一个DDR芯片,其中:
所述芯片,用于按照所述多组DDR内存的存取能力将一个请求拆分为多个子请求,并向所述多组DDR内存分别发送所述子请求;
所述多组DDR内存中的每组DDR内存,用于接收所述芯片发送的所述子请求,以根据接收到的子请求实现读写操作。
10.根据权利要求9所述的计算机设备,其特征在于,所述芯片具体用于:
根据多个DDR控制器可访问的DDR内存的存取能力的比例,将所述请求拆分为所述多个子请求。
11.根据权利要求10所述的计算机设备,其特征在于,所述比例是根据每组DDR内存的位宽和接口的访问频率确定的。
12.根据权利要求10或11所述的计算机设备,其特征在于,所述芯片具体用于:
根据所述比例对所述请求的首地址和地址长度进行变换,得到变换后的首地址和地址长度,所述变换后的首地址和地址长度能够使得拆分后的子请求的首地址和地址长度为整数;
根据所述请求变换后的首地址和地址长度,得到拆分后每个子请求的首地址和地址长度。
13.根据权利要求12所述的计算机设备,其特征在于,所述芯片具体用于:
若所述请求为写请求,则将所述写请求中的待写入数据根据变换后的首地址进行数据对齐,并将地址末尾的多余地址的数据置为无效;
根据所述请求的数据位宽以及所述比例,确定数据对齐后,每单位数据长度内分配给每个子写请求的数据。
14.根据权利要求12所述的计算机设备,其特征在于,所述芯片具体用于:
若所述请求为读请求,则根据拆分后每个子读请求的首地址和地址长度从所述多组DDR内存中读取数据;
合并每个子读请求读取的数据,得到所述读请求所读取的数据。
15.根据权利要求14所述的计算机设备,其特征在于,所述芯片具体用于:
根据所述请求的数据位宽以及所述比例,确定合并数据时,每单位数据长度中每个子读请求的数据量,以得到多个单位数据长度;
将多个单位数据长度合并,得到所述读请求所读取的数据。
16.一种扩展双倍速率DDR内存的方法,其特征在于,所述方法包括:
按照多组DDR内存的存取能力将一个请求拆分为多个子请求,一组DDR内存包括至少一个DDR芯片;
控制多个DDR控制器中的每个DDR控制器根据所述多个子请求中的一个子请求访问一组DDR内存。
17.根据权利要求16所述的方法,其特征在于,所述按照多组DDR内存的存取能力将一个请求拆分为多个子请求包括:
根据多个DDR控制器可访问的DDR内存的存取能力的比例,将所述请求拆分为所述多个子请求。
18.根据权利要求17所述的方法,其特征在于,所述比例是根据每组DDR内存的位宽和接口的访问频率确定的。
19.一种计算机可读存储介质,包括计算机指令,其特征在于,当所述计算机指令在电子设备上运行时,使得电子设备执行上述权利要求16-18中的任一项所述的方法。
20.一种计算机程序产品,其特征在于,当所述计算机程序产品在计算机上运行时,使得电子设备执行上述权利要求16-18中的任一项中的任一项所述的方法。
CN202010232265.XA 2020-03-27 2020-03-27 一种扩展双倍速率内存位宽的装置 Pending CN113448495A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010232265.XA CN113448495A (zh) 2020-03-27 2020-03-27 一种扩展双倍速率内存位宽的装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010232265.XA CN113448495A (zh) 2020-03-27 2020-03-27 一种扩展双倍速率内存位宽的装置

Publications (1)

Publication Number Publication Date
CN113448495A true CN113448495A (zh) 2021-09-28

Family

ID=77808172

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010232265.XA Pending CN113448495A (zh) 2020-03-27 2020-03-27 一种扩展双倍速率内存位宽的装置

Country Status (1)

Country Link
CN (1) CN113448495A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114896182A (zh) * 2022-05-11 2022-08-12 地平线(上海)人工智能技术有限公司 存储装置、方法、电子设备和存储介质
CN116150058A (zh) * 2023-04-17 2023-05-23 合肥芯荣微电子有限公司 一种基于axi总线的并发传输模块和方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080104340A1 (en) * 2006-09-22 2008-05-01 Realtek Semiconductor Corp. Method of memory management
CN105045525A (zh) * 2014-04-21 2015-11-11 三星电子株式会社 存储控制器、存储系统及操作存储控制器的方法
CN110727401A (zh) * 2019-09-09 2020-01-24 无锡江南计算技术研究所 一种访存系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080104340A1 (en) * 2006-09-22 2008-05-01 Realtek Semiconductor Corp. Method of memory management
CN105045525A (zh) * 2014-04-21 2015-11-11 三星电子株式会社 存储控制器、存储系统及操作存储控制器的方法
CN110727401A (zh) * 2019-09-09 2020-01-24 无锡江南计算技术研究所 一种访存系统

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114896182A (zh) * 2022-05-11 2022-08-12 地平线(上海)人工智能技术有限公司 存储装置、方法、电子设备和存储介质
CN114896182B (zh) * 2022-05-11 2023-10-20 地平线(上海)人工智能技术有限公司 存储装置、方法、电子设备和存储介质
EP4276640A1 (en) * 2022-05-11 2023-11-15 Horizon (Shanghai) Artificial Intelligence Technology Co., Ltd Storage device and method, electronic device, and storage medium
CN116150058A (zh) * 2023-04-17 2023-05-23 合肥芯荣微电子有限公司 一种基于axi总线的并发传输模块和方法

Similar Documents

Publication Publication Date Title
US8314808B2 (en) Electronic system and method for selectively allowing access to a shared memory
US5486876A (en) Video interface unit for mapping physical image data to logical tiles
JP4426099B2 (ja) 共有メモリを有するマルチプロセッサ装置
US5812789A (en) Video and/or audio decompression and/or compression device that shares a memory interface
CN101374233B (zh) 视频流帧率适配方法和装置及fpga芯片及视频流处理设备
CN101882302B (zh) 一种基于多核的运动模糊图像复原系统
US20180239722A1 (en) Allocation of memory buffers in computing system with multiple memory channels
CN113448495A (zh) 一种扩展双倍速率内存位宽的装置
US20110317763A1 (en) Information processing apparatus and information processing method
US20150278145A1 (en) Processing system and multiprocessing system
CN117312201B (zh) 一种数据传输方法、装置及加速器设备、主机和存储介质
CN117435532B (zh) 基于视频硬件加速接口的拷贝方法、装置及存储介质
CN114442908B (zh) 一种用于数据处理的硬件加速系统及芯片
US8145852B2 (en) Device having shared memory and method for providing access status information by shared memory
WO2007013744A1 (en) Sharing multi-partitioned memory through a plurality of routes
US7861007B2 (en) Method and apparatus for multimedia display in a mobile device
US20180227581A1 (en) Intelligent MSI-X Interrupts for Video Analytics and Encoding
US20090254686A1 (en) Memory sharing through a plurality of routes
WO2022160321A1 (zh) 一种访问内存的方法和装置
CN114625891A (zh) 多媒体数据处理方法、装置和系统
JP2010287058A (ja) メモリシステム
US10146679B2 (en) On die/off die memory management
JP4735475B2 (ja) 動画像処理方法及び動画像処理装置
JP3327900B2 (ja) データ処理装置
US20240362165A1 (en) Computing Device, Data Processing Method and System, and Related Device

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20210928

RJ01 Rejection of invention patent application after publication