具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明作进一步地详细描述。
本发明所述地址映射方法应用于N点基2n的蝶形运算,或者应用于混合蝶形运算,所述混合蝶形运算是基2n与基2n-1、基2n-2、...、基2中的任一个或多个组合构成的混合运算。所述操作数存储在存储器中,该存储器包括2n个存储体。
图1a是本发明所述地址映射方法流程图。如图,在步骤201,生成多个操作数各自的初次地址,其中,所述初次地址依传统地址映射方法产生,且所述操作数与所述存储体的个数相同,为2n个,基于所述操作数与所述初次地址的一一对应关系,所述操作数的初次地址也为2n个。
具体地说,N点基2
n蝶形运算时,蝶形运算每一次计算所需的操作数是2
n个,也就是说上述产生的2
n个操作数的初次地址是蝶形运算每一次计算所需的操作数的初次地址;N点混合蝶形运算时,上述产生的2
n个初次地址是基2
n蝶形运算每一次计算所需的操作数的初次地址,是基2
k蝶形运算所需的任
组操作数的初次地址,其中,k=n-1,n-2,...,1中的任一个。
在步骤202,处理所述初次地址,获得由片地址和内地址构成的无冲突地址;其中,片地址是所述存储体的地址,内地址是所述操作数在该存储体内的存放地址。
当本发明地址映射方法执行于蝶形运算的硬件处理***时,步骤201和步骤202重复执行,直到蝶形运算结束。
图1b是步骤202的细化。参考图1b,在步骤2020,使初次地址在2n进制下,各位依次相加;然后让相加所得的和对2n取模,该模即为片地址;以公式表示片地址与初次地址的映射关系如下,其中,CS表示片地址:
亦即r是
向上取整;A(i)为初次地址2
n进制下各位的值。
在步骤2021,抽取所述初次地址在二进制下的低m-n位,构成内地址,其中m是N-1在二进制下的位宽。以公式表示如下,其中,Aderess表示内地址,Am-1-n...A0是初次地址低m-n位:
Adress=Am-1-n...A0,其中,
经过步骤202的处理,初次地址转换为无冲突地址,操作数与初次地址的映射关系转换为操作数与无冲突地址的映射关系。由此,每一次蝶形运算所涉及的2
n个操作数(基2
n时为一组操作数或混合运算时,针对基2
n是
组操作数)将依据片地址和内地址分配到不同的存储体,使FFT处理***进行蝶形运算时,可并行访问所有操作数。
图2是本发明所述操作数并行的FFT处理***结构示意图。如图所示,该FFT处理***包括操作数存储器12、旋转因子存储器15、地址生成器14、去冲突映射器16、读选择器11、写选择器13和FFT处理器10。本发明所述操作数并行的FFT处理***可处理N点基2n的蝶形运算,也可处理混合蝶形运算,所述混合蝶形运算是基2n与基2n-1、基2n-2、...、基2中的任一个或多个组合构成的混合运算。
操作数存储器12存储N点蝶形运算的操作数,且其包括2
n个存储体,每个存储体对应一个片地址,以十进制表示为0,1,2,......,2
n-1。本发明中,操作数在所述存储体内的存放地址为内地址,各存储体的内地址由0开始,到
结束。旋转因子存储器15存储旋转因子。
地址生成器14产生旋转因子的地址以及产生多个操作数各自的初次地址。需要说明的是,蝶形运算一般会进行多级,每一级都有多次计算,本发明中,每一次计算所需的操作数个数与存储体的个数相同,为2n个;地址生成器14每一次生成蝶形运算一次所需的操作数的地址,也就是2n个,之后再生成下一次运算所需的操作数的地址,如此反复直到蝶形运算结束。
地址生成器14依照传统现有的地址映射方式,产生所述各操作数的初次地址。本发明中,产生的初次地址与所述存储体个数相同,为2
n个。具体地说,N点基2
n蝶形运算时,上述产生的2
n个初次地址是蝶形运算所需的一组操作数的初次地址;N点混合蝶形运算时,上述产生的2
n个初次地址是基2
n蝶形运算所需的一组操作数的初次地址,是基2
k蝶形运算所需的
组操作数的初次地址,其中,k为[n-1,n-2,...,1]中的任一个。
所述初次地址送入去冲突映射器16。N点的基2n的蝶形运算,N个操作数,初次地址最大为N-1,故地址生成器14到去冲突映射器16的传输线需至少可传输地址’b(N-1)。其中,’b表示跟随其后的为二进制数。
去冲突映射器16对所述初次地址进行去冲突处理,以获得无冲突地址。所述无冲突地址由片地址和内地址构成。接收到地址生成器14产生的初次地址后,去冲突映射器16计算该初次地址在2n进制下各位的和,并让所述和针对2n取模,该模即为片地址。以公式表示片地址与初次地址的关系如式(1)所示,其中CS表示片地址:
式(1)中,
亦即r是
向上取整;A(i)为初次地址2
n进制下各位的值。
去冲突映射器16抽取初次地址二进制下的低m-n位,构成内地址。其中,m是N-1二进制下的位宽。以公式表示内地址与初次地址的关系如式(2)所示,其中,Adress表示内地址。
Adress=Am-1-n,...A0 (2)
式(2)中, Am-1-n,...A0是所述初次地址的低m-n位。
本发明所述的操作数并行的FFT处理***,操作数存储器12包括2
n个存储体,片地址由0开始,最大为2
n-1;各存储体的内地址由0开始,到
结束,内地址最大是
基于此,去冲突映射器16到各存储体的传输线需至少可并行传输片地址’b2n和内地址
读选择器11是2n到2n的选择器。其输入端连接操作数储器12的各存储体,输出端连接FFT处理器10的操作数输入端(至少2n个)。读操作时,读选择器11自去冲突映射器16取得所述各操作数的无冲突地址,依据其片地址CS获知操作数所在的存储体,依据其内地址Adress获知操作数在该存储体内的地址。进而FFT处理器10通过读选择器11自操作数储器12的各存储体并行读出该组操作数。
FFT处理器10依据地址生成器14产生的旋转因子的地址,自旋转因子存储器15读取处理所需的旋转因子。FFT处理器10依据读取的旋转因子和所述操作数做蝶形运算。
写选择器13为2n到2n的选择器。其输入端连接FFT处理器10的操作数输出端,输出端连接操作数储器12的各存储体。写操作时,写选择器13自无冲突映射器16取得各操作数的无冲突地址。继而FFT处理器10将蝶形运算的结果(新一组的操作数),依据该无冲突地址通过写选择器13写入操作数储器12。
综上,经过去冲突映射器16的去冲突处理,初次地址转换为无冲突地址,操作数与初次地址的映射关系转换为操作数与无冲突地址的映射关系。由此,依据操作数和无冲突地址的映射,操作数可分别放置在操作数存储器12的2n个存储体,使FFT处理器10可并行读取所有的操作数,或写入操作数到操作数存储器12。
以下结合图1a,图1b和图2简要说明本发明所述地址映射方法执行于本发明所述的操作数并行的FFT处理***。
如步骤201,地址生成器14按照传统的地址映射方式产生2n个操作数各自的初次地址。然后,如步骤202所示,去冲突映射器16计算初次地址在2n进制下各位的和,并让所述和对2n取模,该模即为片地址;以及抽取初次地址在二进制下的低m-n位,构成内地址,由此获得无冲突地址。
依据操作数与无冲突地址的映射关系,FFT处理器10通过读选择器11自操作数存储器12读取操作数,并依据地址生成器14产生的旋转因子地址自旋转因子存储器读取处理所需的旋转因子,进行蝶形运算。同样,依据操作数与无冲突地址的映射关系,FFT处理器10通过写选择器11向操作数存储器12写入操作数。
进一步举例说明本发明所述地址映射方法和所述操作数并行的FFT处理***:
例一:
本例以进行基4的蝶形运算做说明,以64点为例。
图3为基4蝶形运算的操作数并行的FFT处理***结构示意图。如图,操作数存储器12由0#存储体120、1#存储体121、2#存储体122和3#存储体123共4个存储体构成,故片地址至少两位。各存储体具有16个存储空间,相应地,各存储体有16个内地址,故内地址至少四位。由此本例中,去冲突映射器16连接每个存储体的传输线至少需可并行传输6位地址。
读选择器11和写选择器13分别为4到4的选择器,其设计方式为现有技术,这里不再赘述。读选择器11和写选择器13分别自去冲突映射器16取得所述操作数的无冲突地址。之后,FFT处理器10通过读选择器11自相应的存储体读出所述操作数,或通过写选择器13向相应的存储体写入操作数。
在第二级基4蝶形运算中,随机取该级运算中地址生成器14生成的一组初次地址(3,7,11,15)。
去冲突映射器16收到地址生成器14传输的该地址后,计算初次地址在2n进制下各位的和,并让所述和对2n取模,以获得片地址,初次地址与片地址如公式(1)所示的映射关系,其中,r=3。去冲突映射器16自初次地址抽取其低m-n位,构成内地址,初次地址与内地址的映射关系如公式(2)所示,其中m=6,n=2,所以内地址是二进制下初次地址的低4位。后续针对片地址的计算,为方便起见,公式(1)中的A(i)用二进制表示。
针对3,即’b000011:
A(2)=′b00;A(1)=′b00;A(0)=′b11,由公式(1),片地址为A(2),A(1)和A(0)相加后除以4取模,故:
由公式(2),Adress=Am-1-n,...A0内地址为’b000011的低4位,故内地址为’b0011。
故经去冲突映射器16处理后,初次地址为3的操作数将放置在3#存储体123的内地址为′b0011的存储空间。
针对7,即’b000111:
A(2)=′b00;A(1)=′b01;A(0)=′b11,依据公式(1)和(2)计算,CS=b00,内地址Adress=′b0111
故经去冲突映射器16处理后,初次地址为7的操作数将放置在0#存储体120的内地址为′b0111的存储空间。
针对11,即’b001011:
A(2)=′b00;A(1)=′b10;A(0)=′b11,依据公式(1)和(2)计算,CS=′b01,内地址Adress=′b1011
故经去冲突处理后,初次地址为’b001011的操作数将放置在1#存储体121的内地址为′b1011的存储空间。
针对15,即’b001111:
A(2)=′b00;A(1)=′b11;A(0)=′b11,依据公式1)和(2),由去冲突映射器16计算,CS=′b10,内地址Adress=′b1111
故经去冲突处理后,初次地址为15的操作数将放置在2#存储体122的内地址为′b1111的存储空间。
表2为地址映射对比表。可以看出,所述初次地址如不经过去冲突映射器16的去冲突处理,其所对应的操作数都将存放在0#存储体120中,使FFT处理器10无法并行读取或写入这些操作数。但是,经过去冲突处理后,这些操作数将分别存放在不同的存储体,使FFT处理器可并行读取或写入,加快了处理速度。
对应读操作,读选择器11自无冲突映射器16获得该组操作数的无冲突地址,本例中,FFT处理器10通过读操作器11自相应的3#存储体,0#存储体,1#存储体,2#存储体并行读出操作数;FFT处理器10依据地址生成器14产生的旋转因子地址,自旋转因子存储器15中读出处理所需要的旋转因子;FFT处理器10结合所述操作数和旋转因子做基4蝶形运算。
对应写操作,写选择器13自去冲突映射器16获得该组操作数的无冲突地址,FFT处理器10将基4蝶形运算获得的新一组操作数通过写操作器13并行送入相应的3#存储体,0#存储体,1#存储体,2#存储体。
表2地址映射对比表
初次地址 |
初次地址存储体 |
无冲突地址 |
无冲突地址存储体 |
000011 |
0#存储体 |
110011 |
3#存储体 |
000111 |
0#存储体 |
000111 |
0#存储体 |
001011 |
0#存储体 |
011011 |
1#存储体 |
001111 |
0#存储体 |
111111 |
2#存储体 |
例二:
本例以进行基8蝶形运算来进行说明,以512点为例。
本例中,第一存储器12包括8个存储体;读选择器和写选择器均为8到8的选择器。
按照现有的地址映射方法,512点基8蝶形运算中,初次地址最多9位,故地址生成器14到去冲突映射器16的传输线最少可传输9位地址。
512点基8蝶形运算,操作数存储器12包括8个存储体,故片选地址至少3位。内地址最大为63,所以内地址至少6位。由此本例中,去冲突映射器16连接每个存储体的传输线需至少可传输9位地址。
以下仅描述本例与例一的主要不同之处,相同或相似之处不再多加描述。图4为运行512点基8蝶形运算的操作数并行的FFT处理***结构示意图。在第二级基8蝶形运算中,随机抽取地址生成器14生成的一组操作数地址为(65,73,81,89,97,105,113,121)(此组操作数之间步长为 ),该地址由去冲突映射器16重新计算,以获得无冲突地址。去冲突处理的原理过程同例一,这里就不多做描述。512点的基8处理中,r=3;m=9,n=3。
针对65,即’b001000001:
A(2)=′b001;A(1)=′b001;A(0)=b001,由公式(1),片地址为A(2),A(1)和A(0)相加后对8取模,故:
由公式(2):Adress=Am-1-n...A0,故内地址为′b000001
所以,经去冲突处理后,初次地址为’b00100001的操作数放置在2#存储体121中内地址为′b000001的存储空间。
针对73,即’b001001001:
A(2)=′b001;A(1)=′b001;A(0)=′b001,依据公式1计算,CS=′b011,内地址Adress=′b001001
经去冲突处理后,初次地址为’b001001001的操作数放置在3#存储体中内地址为′b001001的存储空间。
针对81,即’b001010001:
A(2)=′b001;A(1)=′b010;A(0)=′b001,依据公式1计算,CS=′b100,内地址Adress=′b010001
经去冲突处理后,初次地址为’b001010001的操作数放置在4#存储体中内地址为′b010001的存储空间。
针对89,即’b001011001:
A(2)=′b001;A(1)=′b011;A(0)=′b001,依据公式1计算,CS=′b101,内地址Adress=′b011001
经去冲突处理后,初次地址为’b001010001的操作数放置在5#存储体中内地址为′b011001的存储空间。
针对97,即’b001100001:
A(2)=′b001;A(1)=′b100;A(0)=′b001,依据公式1计算,CS=′b110,内地址A4dress=′b100001
经去冲突处理后,初次地址为’b001010001的操作数放置在6#存储体126中内地址为′b100001的存储空间。
针对105,即’b001101001:
A(2)=′b001;A(1)=′b101;A(0)=′b001,依据公式1计算,CS=′b111,内地址Adress=′b101001
经去冲突处理后,初次地址为’b001101001的操作数放置在7#存储体127中内地址为′b101001的存储空间。
针对113,即’b001110001:
A(2)=′b001;A(1)=′b110;A(0)=′b001,依据公式1计算,CS=b000,内地址Adress=′b110001
经去冲突处理后,初次地址为’b001110001的操作数放置在0#存储体120中内地址为′b110001的存储空间。
针对121,即’b001111001:
A(2)=′b001;A(1)=′b111;A(0)=′b001,依据公式1计算,CS=b001,内地址Adress=′b111001
经去冲突处理后,初次地址为’b001111001的操作数放置在1#存储体121中内地址为2′b111001的存储空间。
表4地址映射对比表
初次地址 |
初次地址存储体 |
无冲突地址 |
无冲突地址存储体 |
001000001 |
1#存储体 |
010000001 |
2#存储体 |
001001001 |
1#存储体 |
011001001 |
3#存储体 |
001010001 |
1#存储体 |
100010001 |
4#存储体 |
001011001 |
1#存储体 |
101011001 |
5#存储体 |
001100001 |
1#存储体 |
110100001 |
6#存储体 |
001101001 |
1#存储体 |
111101001 |
7#存储体 |
001110001 |
1#存储体 |
000110001 |
0#存储体 |
001111001 |
1#存储体 |
001111001 |
1#存储体 |
表4是本例的地址映射表,列出了初次地址及其所在的存储体,以及无冲突地址和它对应的存储体。由表4可以看出,经过去冲突处理,初次地址对应的操作数被放置到不同存储体中。
需要说明的是,例二所述的操作数并行的FFT处理***,同样也可处理基4的蝶形运算。
例三:
本例为2048点的基4和基2混合运算。2048点的蝶形运算,需进行1级基2运算,5级基4运算;实际处理中,可以在基2运算后,再进行5级基4运算;也可在进行5级基4运算后,再做基2运算。
本例以先进行基2运算为例来说明,但作为举例,并未表明本发明仅仅局限于此,本领域内技术人员易于变换为先做5级基4,再做1级基2的运算。
本例仍以图3为例进行说明。2048点初次地址最多11位,和例1比,所述操作数并行的FFT处理***的区别主要在于连接地址生成器14和无冲突地址映射器16的传输线最少可传输11位地址。
进行基4和基2的蝶形运算,本例第一存储器12包括4个存储体。故片地址至少2位。每个存储体的内地址最大为511,所以内地址最多9位。基于此,去冲突映射器16到每个存储体的传输线需至少可传输11位地址。
对基4运算而言,所述地址映射方法的处理同例一,故以下仅对基2运算作简单说明。基2的蝶形运算,一组两个操作数。在本例操作数并行的FFT处理***,执行本发明所述的地址映射方法,产生基2蝶形运算中操作数的无冲突地址。基2运算中,地址生成器14每一次产生4个操作数各自的初次地址,由去冲突映射器16对其进行处理,而FFT处理器一次性处理两组操作数,进行蝶形运算。
随机取地址生成器14产生的两组操作数的初次地址分别为(512,1536)和(514,1538),执行本发明所述地址映射方法,去冲突映射器16按照公式(1)产生片地址,按照公式(2)产生内地址,其中,r=6;m=11,n=2,故内地址是初次地址的低9位。
针对512,即’b01000000000:
A(5)=′b00;A(4)=′b10;A(3)=′b00,A(2)=′b00,A(1)=′b00,A(0)=b00,,
由此,CS=′b10,内地址Adress=′b000000000;
经去冲突处理后,初次地址为512的操作数放置在2#存储体中内地址为′b000000000的存储空间。
针对1536,即’b11000000000:
A(5)=′b01;A(4)=′b10;A(3)=′b00,A(2)=′b00,A(1)=′b00,A(0)=′b00,据此CS=′b11,内地址Adress=′b000000000;
经去冲突处理后,初次地址为1536的操作数放置在3#存储体中内地址为′b000000000的存储空间。
针对514,即’b01000000010:
A(5)=′b00;A(4)=′b10;A(3)=′b00,A(2)=′b00,A(1)=′b00,A(0)=′b10,
CS=′b00,内地址Adress=‘b00000010;
经去冲突处理后,初次地址为514的操作数放置在0#存储体中内地址为’b00000010的存储空间。
针对1538,即b’11000000010:
A(5)=′b01;A(4)=′b10;A(3)=′b00,A(2)=′b00,A(1)=′b00,A(0)=′b10,
CS=b01,内地址Adress=’b000000010;
经去冲突处理后,初次地址为1538的操作数放置在1#存储体中内地址为’b000000010的存储空间。
这样,针对基2和基4的混合蝶形运算,基4运算和例一相同,基2运算地址生成器每一次产生4个操作数的初次地址,经去冲突映射器16处理后,分配到不同的存储体,而FFT处理器则可并行访问该4个操作数,以进行蝶形运算。
对于基2n和基2k的蝶形运算而言,本发明所述操作数并行的FFT处理***,可运行基2n的蝶形运算时,就可以运行基2k的蝶形运算,或者基2n与基2k的混合蝶形运算。
结合上述举例描述,可以看出,执行本发明所述的地址映射方法及应用本发明所述的操作数并行的FFT处理***,可将蝶形运算的操作数分别映射到各存储体,使蝶形运算一次性计算所需要的操作数可由FFT处理器并行访问。
以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。