背景技术
随着集成电路工艺的发展,芯片上可集成更多的运算部件和更大容量静态存储器SRAM容量。高速嵌入式信号处理芯片中可设计多个运算部件和多个大容量、大位宽的片上存储器,实现并行计算和并行存储。信号处理算法经常以矩阵的形式来组织输入/输出数据,并以矩阵为对象进行计算。矩阵数据一般按行或按列存放在存储器中。存储器读写端口位宽固定,并且顺序编址。当矩阵按行存放时,存储器可以一次性并行读写多个矩阵行元素,但无法一次性并行读写多个矩阵列元素;当矩阵按列存放时,存储器可以一次性并行读写多个矩阵列元素,但无法一次性并行读取多个矩阵列元素。
图1是传统的片上存储器的结构和编址方法的示意图,其中显示了当矩阵数据类型与存储单元一致时,矩阵元素在普通片上存储器中的位置。如图1所示,假定存储器读写端口101位宽为4,即存储器100的一行存放4个元素,一次操作可并行读写4个地址连续的元素;矩阵A的尺寸为4×4,矩阵第i行,第j列元素为aij,(0≤i<4,0≤j<4),按行存放在地址0处。此时,存储器100可一次性并行读写4个矩阵行元素,但由于矩阵列元素分布在存储器的多个存储行104中,所以一次只能读写一个矩阵列元素,无法并行读取矩阵列元素。
在信号处理系统中,在并行读写矩阵行元素的同时常常还需要并行读写矩阵列元素,如某信号处理算法输入三个矩阵(A,B,D),需要得到两个矩阵乘法结果:C=A×B,E=B×D;同时,信号处理系统中有4个运算单元可并行计算。那么在计算C=A×B时,需要并行读取矩阵B的4个行元素;在计算E=B×D时,需要并行读取矩阵B的4个列元素。因此,在整个算法实现过程中,即需要按行并行读取矩阵B,也需要按列并行读取矩阵B。但传统存储器结构只能按行并行读取,或按列并行读取。当存储器在每个时钟周期无法并行提供所需的4个操作数时,4个运算单元中只有一个处于工作状态,这必将降低整个系统的运算效率。
同时,矩阵的数据类型多种多样,常用的数据类型有8bit的字节类型、16bit的短字类型、32bit的整数类型和单精度浮点类型以及64bit的双精度浮点类型。而存储单元是固定一种数据类型,一个地址对应一个8bit数据或一个地址对应一个32bit数据。为了在存储器中用最基本的存储单元来表达所有数据类型,常用的做法是用多个连续的低位宽数据类型拼接成一个高位宽数据类型。如图2所示,假定存储单元是8bit的字节,而矩阵尺寸为4×2,数据类型为16bit的短字,按行存放,一个矩阵元素由两个连续8bit拼接而成。在图1中,矩阵数据类型与存储单元是一致的,矩阵列的元素地址为{3,7,11,15},列地址完全离散;但在图2中,矩阵数据类型与存储元不一致,矩阵列的元素地址为{2,3,6,7,10,11,14,15},列地址整体离散,部分连续。因此,在并行读写矩阵行、列元素时,还需要考虑矩阵元素的不同数据类型,采用不同的读写粒度。这里所述的“读写粒度”是指地址连续的存储单元的个数。
目前已有一些专利讨论如何实现矩阵行列的读写,但都没有在SRAM架构层次实现矩阵行列多粒度并行读取的功能。如美国专利US 6,084,771B(Processor With Register File Accessible By Row Column to Achieve DataArray Transposition)、中国专利200910043343.5(行列访问端口分离的矩阵寄存器文件)都提出了一种支持矩阵行列读取的寄存器文件,但矩阵数据仍存放在存储器中,读写矩阵行列时需要先将矩阵数据从存储器载入寄存器文件,再从寄存器文件读写矩阵行列;同时,由于寄存器文件容量非常少,每次操作只能读写整个矩阵的小部分数据;另外,它们都没有考虑如何支持不同的数据类型。美国专利US 7,802,049 B2(Random Access MemoryHave Fast Column Access)主要讨论了如何快速地从DRAM存储行中获取连续数据,但没有讨论矩阵行列的并行读取。
发明内容
(一)要解决的技术问题
本发明所要解决的技术问题是克服传统的片上存储系统不能并行读写矩阵行列数据及无法跨行读写的缺点,提高存储系统和存储器的读写效率。
(二)技术方案
本发明提出的多粒度并行存储系统包括多个存储器、移位产生器、地址增量查找单元、地址移位器、行地址产生器和多个地址加法器,所述移位产生器用于根据外部输入的地址Addr产生移位值Shift;所述地址增量查找单元用于根据读写粒度g产生地址移位器的输入数据;地址移位器用于将输入的数据循环右移Shift个元素后输出到所述地址加法器一个输入端;所述行地址产生器用于根据外部输入的地址Addr产生行地址RowAddr,输入到每个地址加法器的另一个输入端;所述地址加法器用于将所述两个输入端输入的数据进行无符号相加,得到存储器的读写地址,并将其输入到所述多个存储器的地址输入端。
所述存储系统还包括写移位器和读移位器,所述写移位器用于将外部输入的写数据循环右移Shift个元素后输出到所述多个存储器;所述读移位器接收来自所述多个存储器的数据,并将该数据循环左移Shift个元素后向外部输出。
所述地址移位器、写移位器、读移位器都具有一个移位控制端,所述移位产生器的输出端分别与地址移位器、写移位器、读移位器的该移位控制端相连,用于将所述移位值Shift输入到所述地址移位器1410、写移位器、读移位器。
所述地址移位器、写移位器、读移位器由多路选择器实现。
所述存储系统的位宽为W,K=log2W,所述存储器支持K+1种读写粒度,所述地址增量查找单元包括多个列,且每个列与一个读写粒度相对应。
所述多个存储器构成多个存储块,每个存储块的尺寸为N,地址增量查找单元中从左至右第i列的从下至上第j个元素的值为[(j/2i)×2i]×D,其中“/”表示整除,D=N/W,0≤i≤K,0≤j<W。
所述移位产生器产生Shift值的公式为:
Shift=(Addr%W)+(Addr/N),其中“%”表示求模,“/”表示整除。
所述行地址产生器产生行地址RowAddr的公式为RowAddr=Addr/W,其中“/”表示整除。
所述存储器具有一个写使能端,写使能WE直接输入到每个存储器的该写使能端。
(三)有益效果
本发明提出的多粒度并行存储系统和存储器具有多Bank的逻辑结构、支持多粒度并行读写模式和多粒度编址方法,可同时支持不同数据类型的矩阵行列数据并行读取,从而在根本上清除信号处理算法中转置操作的要求,提高信号处理算法执行效率。
附图说明
图1是传统的片上存储器的结构和编址方法的示意图,其中示出了当矩阵数据类型与存储单元一致时,矩阵元素在存储器中的位置;
图2是传统的片上存储器的结构和编址方法的另一示意图,其中示出了当矩阵数据位宽是存储单元的位宽的两倍时,矩阵元素在片上存储器中的位置;
图3是本发明提出的存储系统的存储器逻辑结构图;
图4是本发明在不同读写粒度下存储器的编址方式和逻辑Bank划分的示意图;
图5示出了本发明在读写粒度g=1、读写地址=4时,存储器读写数据与存储单元的对应关系,以及数据选通路径;
图6示出了读写粒度g=2、读写地址=4时,存储器读写数据与存储单元的对应关系,以及选通路径;
图7示出了读写粒度g=4、读写地址=4时,存储器读写数据与存储单元的对应关系,以及选通路径;
图8示出了当一尺寸为8×5的矩阵的数据位宽与存储单元位宽一致时,该矩阵元素与存储单元的映射关系;
图9示出了当一尺寸为8×5的矩阵的数据位宽为存储单元位宽的两倍时,该矩阵元素与存储单元的映射关系;
图10示出了存储块305与物理存储单元的映射关系;
图11示出了在图10示出的映射关系下所对应的存储单元,此时读写粒度g=1,读写地址为4;
图12示出了在图10示出的映射关系下所对应的存储单元,此时读写粒度g=2,读写地址为4;
图13示出了在图10示出的映射关系下所对应的存储单元,此时读写粒度g=4,读写地址为4;
图14示出了在图10示出的映射关系下的存储器的物理结构。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
为便于说明发明内容,各个数据位宽以存储单元为单位来度量,存储单元定义为存储器的编址单位,也是存储器可读写的最小数据位宽。描述过程中出现包含“位宽为W”的语句都需要理解成W个存储单元的比特位(bit)。如存储单元为8bit的字节类型时,读写端口位宽为4的存储器实际位宽为4×8=32bit。同时,所有对象从0开始,从左至右编号。另外,如前所述,“粒度”是指地址连续的存储单元的个数。在以下的描述过程中,约定以下符号:
■W:存储器读写端口位宽,必须为2的幂次方(即:W为2的n次方,n为自然数);
■K:K=log2W,K+1表示存储器支持的读写粒度种类;
■k:存储器读写粒度参数,为自然数,且0≤k≤K,实际读写粒度为g=2k;
■g:g=2k,存储器读写粒度,1≤g≤W;
■N:一个存储块的大小。
本发明示意图中均假定W=4,但本发明适用于W为2的幂次方的其它情况。
(一)存储系统和存储器的逻辑结构
本发明所提出的存储系统的逻辑结构如图3所示。所述存储系统包括存储器300和存储器读写端口301,存储器读写端口301的位宽为W,存储器300由W个存储块305和一个数据选通网络301构成。每个存储块305是由存储单元303构成的二维阵列,该阵列中的存储行304必须包含W个存储单元303,每个存储块一次可读写一个存储行304。
需要说明的是,存储块305只是表示了存储单元303的逻辑结构,并不是物理结构。
数据选通网络302在逻辑上根据读写地址和读写粒度从W个存储块305中选择W个存储单元303作为读写对象。
本发明所提出的存储系统支持多种读写粒度,存储系统中每个存储块305的编址方法与图1中存储器编址一致,但在不同的读写粒度下,每个存储块305的起始地址各不相同。我们以参数k来表征不同的读写粒度,实际的读写粒度g=2k。
图4示出了W=4时,存储器在不同读写粒度下每个存储块405的编址。对于读写粒度g,每g个相邻的存储块405拼接成一个逻辑Bank 406,所有逻辑Bank 406的起始地址相同;逻辑Bank 406内的存储块405起始地址前后相接,每个逻辑Bank 406的寻址范围为0~gN-1,整个存储器的寻址范围为0~gN-1。
存储器在进行读操作时,将读写地址和读写粒度发送给每个逻辑Bank406,每个逻辑Bank 406读取g个存储单元并通过数据选通网络302传递给存储器读写端口301,W/g个逻辑Bank 406所读取的数据按从左到右的顺序拼接成位宽为W的输出数据。
存储器在进行写操作时,将存储器读写端口301传递过来的数据拆分成g份,每份数据位宽为W/g,通过数据选通网络302将第i份数据发送给第i个逻辑Bank 406(0≤i<g),同时将读写地址和读写粒度发送给每个逻辑Bank 406。每个逻辑Bank 406写入g个存储单元。
图5示出了读写粒度g=1,读写地址为4时,存储器内部逻辑通路。数据选通网络502选通逻辑如图中所示,存储器读写端口501的数据与各个逻辑Bank 506中地址为4,粒度为1的存储单元503相对应。
图6示出了读写粒度g=2,读写地址为4时,存储器内部逻辑通路。数据选通网络602选通逻辑如图中所示,存储器读写端口601的数据与各个逻辑Bank 606中地址为4,粒度为2的存储单元603相对应。
图7示出了读写粒度g=4,读写地址为4时的存储器内部逻辑通路。数据选通网络702选通逻辑如图中所示,存储器读写端口701的数据与各个逻辑Bank 706中地址为4,粒度为4的存储单元703相对应。
为利用本发明所提出的多粒度并行存储系统和存储器并行读写矩阵行列数据,需要将矩阵元素按一定的规律存放在存储器中。
图8示出了当一矩阵的数据位宽与存储单元位宽一致时,该矩阵元素与存储单元的映射关系。如图8所示,假定矩阵尺寸为8×5,矩阵第i行,第j列元素为aij,(0≤i<8,0≤j<5),当矩阵数据类型与存储单元一致时,按读写粒度g=1划分逻辑Bank 806:第i个逻辑Bank 806中连续存放(行号%W==i)的矩阵行,其中“%”表示求模运算。在进行矩阵行列读写时,我们定义连续的W个行元素或W个列元素为一个数据组,如{a00,a01,a02,a03}是行元素构成的一个数据组,{a00,a10,a20,a30}是由列元素构成的一个数据组。整个矩阵划分成多个数据组,存储器每个时钟周期可并行读写一个数据组。此时矩阵元素在存储器中的位置如图8所示。当并行读写矩阵行数据组时,读写粒度g=W(这里假定W=4,也可以为其它2的幂次方)。第i行的第j个数据组的读写地址为
矩阵起始地址+N×(i%W)+(i/W)×矩阵列数+(j×W) |
其中“%”表示求模,“/”表示整除。当并行读写矩阵列数据组时,令读写粒度g=1,如图8所示。第i列的第j个数据组的读写地址:
图9示出了当一矩阵的数据位宽为存储单元位宽的两倍时,该矩阵元素与存储单元的映射关系。如图9所示,当矩阵数据位宽为存储单元位宽的M倍时(我们假定M=2,但实际上M可以为2的任意幂次方),我们需要M个存储单元存储一个矩阵元素,令W’=W/M,此时按读写粒度g=M划分逻辑Bank 906:第i个逻辑Bank 906中连续存放(行号%W’==i)的矩阵行。在进行矩阵行列读写时,我们定义连续的W’个行元素或W’个列元素为一个数据组,如{a00,a01}是行元素构成的一个数据组,{a00,a10}是由列元素构成的一个数据组。整个矩阵划分成多个数据组,存储器每个时钟周期可并行读写一个数据组。此时矩阵元素在存储器中的位置如图9所示。当并行读写矩阵行数据组时,读写粒度g=W(这里假定W=4,也可以为其它2的幂次方)。则第i行的第j个数据组的读写地址为:
矩阵起始地址+N×(i%W’)+(i/W’)×矩阵列数×M+(j×W) |
其中“%”表示求模,“/”表示整除。当并行读写矩阵列数据组时,令读写粒度g=M,如图8所示。第i列的第j个数据组的读写地址为:
由此可见,通过指定不同的读写粒度,本发明所提出的存储系统和存储器可并行读写不同数据类型的矩阵行列数据。
(二)存储系统的电路结构
以上描述了本发明的存储系统和存储器的整体逻辑结构,该整体逻辑结构可以由多种具体的电路结构来实现。以下将详细描述实现本发明的的具体电路结构,其是一种物理结构;对于其它电路结构,如果可以抽象成本发明所述的逻辑结构,均应包含在本发明的保护范围之内。
在详细描述本发明的存储系统和存储器的电路结构之前,我们首先说明如何将图3中所述的存储块305映射成实际的物理存储单元。描述过程中我们仍假定存储器读写端口位宽为4,但在实际应用中,读写端口位宽可以为2的任何其他幂次方。
图10示出了存储块305与物理存储单元的映射关系。对于读写端口位宽为W的存储系统,从物理结构的角度,该存储系统由W个位宽为1的存储器1007组成。每个存储器1007可为传统的单端口存储器,一个时钟周期只能读写一个存储单元。存储器1007中的物理存储单元从0开始按顺序编址,W个地址相同的物理存储单元构成一个逻辑结构中的存储行1004,多个连续的存储行1004构成逻辑结构中的一个存储块1005。尺寸为N的存储块1005由N/W个存储行1004构成,图中假定N=16。
为使在不同读写粒度下,存储系统和存储器均能实现并行读写,本发明所示的电路结构利用一数据选通网络1002对读写数据进行重排列。读写数据顺序与物理存储行的行内映射关系如图10中的逻辑结构所示。每个存储块1001内的存储行映射关系相同;不同存储块1005之间的存储行映射关系不同。对于第i个存储块1005,(0≤i<W),其映射关系为:W个读写数据组成的一维向量,经循环右移i个元素后,与实际物理存储行1004中的物理存储单元一一对应。
在图10示出的映射关系下,当读写粒度g=1,读写地址为4时,图11示出了与其对应的物理存储单元。此时,读写数据按顺序存放在物理存储单元1103中。
在图10示出的映射关系下,当读写粒度g=2,读写地址为4时,图12示出了与其对应的物理存储单元。此时,读写数据按顺序存放在物理存储单元1203中。
在图10示出的映射关系下,当读写粒度g=4,读写地址为4时,图13示出了与其对应的物理存储单元。此时,读写数据按顺序存放在物理存储单元1303中。
在图10示出的映射关系下,本发明的存储系统的电路结构如图14所示。在图14中,存储系统包括W个存储器1407、移位产生器1414、行地址产生器1413、地址移位器1410、写移位器1412、读移位器1408、W个地址加法器1411和地址增量查找单元1409。
该存储系统的对外接口包括:读写粒度g、写数据、读数据、读写地址Addr、写使能WE。
W个存储器中的每个存储器1407均可为传统的单端口存储器,其具有写使能端、数据输入端、数据输出端和地址输入端。写使能WE直接输入到每个存储器1407的写使能端。多个存储器1407中的逻辑结构如前所述,可划分为多个存储块1005(参见图10)。
移位产生器1414和行地址产生器1413都具有一个输入端,地址Addr直接输入到移位产生器1414和行地址产生器1413的输入端,移位产生器1414用于根据当前输入的地址Addr产生移位值Shift,行地址产生器1413用于根据当前输入的地址Addr产生行地址RowAddr。对于位宽为W、存储块1005尺寸为N的存储系统来说,Shift=(Addr%W)+(Addr/N),RowAddr=Addr/W。其中“%”表示求模操作,“/”表示整除操作。当W和N均为2的幂次方时,“%”操作可通过截取数据的低位实现;“/”操作可通过截取数据的高位实现。
地址移位器1410、写移位器1412、读移位器1408都包括一个移位控制端,移位产生器1414的输出端分别与地址移位器1410、写移位器1412、读移位器1408的移位控制端相连,用于将移位值Shift输入到地址移位器1410、写移位器1412、读移位器1408。
地址加法器1411具有两个输入端和一个输出端,行地址产生器1413生成的行地址RowAddr直接输入到所有W个地址加法器1411的每一个的一个输入端。地址加法器1411的另一个输入端接受来自地址移位器的输出数据(将在下面描述)。地址加法器1411用于将两个输入端输入的数据进行无符号相加,得到存储器1407的读写地址。W个地址加法器1411的输出端分别与W个存储器1407的地址输入端相连,以将读写地址输入到每个存储器1407的地址输入端。
地址增量查找单元1409具有一个输入端和W个输出端,读写粒度g直接输入到地址增量查找单元1409的输入端,地址增量查找单元1409的W个输出端直接与地址移位器1410的输入端相连。地址增量查找单元1409根据读写粒度g产生地址移位器1410的输入。对于位宽为W的存储系统,K=log2W,一共为K+1种读写粒度,地址增量查找单元1409中具有多个列,每个列与一个读写粒度相对应。对于存储块1005尺寸为N的存储系统来说,令D=N/W,则地址增量查找单元1409中的第i(0≤i≤K,从左至右)列的第j(0≤j<W,从下至上)个元素值为[(j/2i)×2i]×D,其中“/”表示整除。
地址移位器1410用于将输入的数据循环右移Shift个元素。地址移位器1410具有W个输出数据(i0,i1,i2,i3),其分别输入到W个地址加法器1411中的每一个的一个输入端。
写移位器1412的输入端直接接受外部的写数据,写移位器1412用于将输入的写数据循环右移Shift个元素,写移位器1412的W个输出数据(w0,w1,w2,w3)分别输入到W个存储器1407的数据输入端。
读移位器1408具有W个输入端,读移位器1408的W个输入端分别与W个存储器1407的数据输出端相连,接收W个存储器1407的W个输出数据(r0,r1,r2,r3),读移位器1408用于将输入的数据循环左移Shift个元素,并通过其输出端向外部输出读数据。
地址移位器1410、写移位器1412、读移位器1408的循环左移或循环右移的功能例如可以利用多路选择器实现,但也可以用其他功能器件实现。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。