发明名称 基2×K并行FFT架构的地址映射方法及系统
摘要 本发明公开了一种基2×K并行FFT架构的地址映射方法及系统,其特征是采用定常结构的基2FFT运算流图;包含K个基2碟算单元,K为2的整数幂;以2K个双端口数据存储器为共用存储器,分别与两组2K个单端口数据存储器构成两个存储器组;K个基2碟算单元将FFT运算操作数从一个存储器组并行读出,将运算结果操作数并行写入另一个存储器组;旋转因子存放在K个旋转因子存储器中;FFT运算操作数存放算法,确定输入FFT运算操作数在存储器组中的地址;并行读/写地址产生算法,确定FFT运算操作数读/写地址。按照本发明设计的并行FFT处理器架构,避免了在操作数交换部件中使用多级查找表电路,同时简化了操作数并行读/写地址产生部件电路。
申请公布号 CN103034621A 申请公布日期 2013.04.10
申请号 CN201210541084.0 申请日期 2012.12.13
申请人 合肥工业大学;合肥工大先行微电子技术有限公司 发明人 侯宁;张多利;杜高明;宋宇鲲;贾靖华;王晓蕾
分类号 G06F17/14(2006.01)I 主分类号 G06F17/14(2006.01)I
代理机构 安徽省合肥新安专利代理有限责任公司 34101 代理人 何梅生
主权项 1.一种基2×K并行FFT架构的地址映射方法,其特征是:采用定常结构的基2FFT运算流图,并行FFT架构包含K个基2碟算单元,K为2的整数幂;以2K个双端口数据存储器为共用存储器,所述2K个双端口数据存储器与第一组2K个单端口数据存储器构成一个存储器组,并以所述2K个双端口数据存储器与第二组2K个单端口数据存储器构成另一个存储器组;K个基2碟算单元将FFT运算操作数从一个存储器组并行读出,并将FFT运算结果操作数并行写入另一个存储器组;旋转因子存放在K个旋转因子存储器中;所述基2×K并行FFT架构的地址映射方法是按如下步骤进行:a、确定所述FFT运算操作数在存储器组中的存放方法:设N为所述FFT运算操作数的数量;k为操作数的标号,k=0,1,…,N-1;操作数k存放在体标号为B(k),体内地址为A(k)的存储器组中;当<img file="FDA00002581087600011.GIF" wi="132" he="104" />时,操作数k存放在存储器组的双端口数据存储器中,并有:<img file="FDA00002581087600012.GIF" wi="977" he="222" />当<img file="FDA00002581087600013.GIF" wi="149" he="104" />操作数k存放在存储器组的单端口数据存储器中,并有:<img file="FDA00002581087600014.GIF" wi="1069" he="220" />其中<maths num="0001"><![CDATA[<math><mrow><mi>p</mi><mrow><mo>(</mo><mi>k</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mn>0</mn><mo>,</mo></mtd><mtd><mi>k</mi><mi>mod</mi><mn>2</mn><mo>=</mo><mn>1</mn></mtd></mtr><mtr><mtd><mn>2</mn><mo>,</mo></mtd><mtd><mi>k</mi><mi>mod</mi><mn>2</mn><mo>=</mo><mn>0</mn></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths><img file="FDA00002581087600016.GIF" wi="63" he="58" />为向下取整数,mod为取余数;b、确定所述FFT运算操作数的读地址;设m为所述基2碟算单元标号,m=0,1,…,K-1;基2碟算单元m包括两个读端口BFI(m,0)和BFI(m,1);以MBFI(m,0)和MBFI(m,1)分别表示读端口BFI(m,0)和BFI(m,1)读入的FFT运算操作数;以cntr表示完成一层FFT运算需要的并行读操作次数,<maths num="0002"><![CDATA[<math><mrow><mi>cntr</mi><mo>=</mo><mn>0,1</mn><mo>,</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>,</mo><mfrac><mi>N</mi><mrow><mn>2</mn><mi>K</mi></mrow></mfrac><mo>-</mo><mn>1</mn><mo>;</mo></mrow></math>]]></maths>所述FFT运算操作数MBFI(m,0)来自存储器组的双端口数据存储器,读地址为<img file="FDA00002581087600021.GIF" wi="1275" he="296" />所述FFT运算操作数MBFI(m,1)来自存储器组的单端口数据存储器,读地址为<img file="FDA00002581087600022.GIF" wi="1647" he="469" />c、确定所述FFT运算操作数的写地址;基2碟算单元m包括两个写端口BFO(m,0)和BFO(m,1);以MBFO(m,0)和MBFO(m,1)分别表示写端口BFO(m,0)和BFO(m,1)写入的FFT运算操作数;以cntw表示完成一层FFT运算需要的并行写操作次数,<img file="FDA00002581087600023.GIF" wi="464" he="104" />当<img file="FDA00002581087600024.GIF" wi="250" he="106" />所述FFT运算操作数MBFO(m,0)和MBFO(m,1)均写入存储器组的双端口数据存储器中,写地址为:<maths num="0003"><![CDATA[<math><mrow><mfenced open='{' close=''><mtable><mtr><mtd><mi>B</mi><mrow><mo>(</mo><mi>MBFO</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mn>0</mn><mo>)</mo></mrow><mo>)</mo></mrow><mo>=</mo><mn>2</mn><mi>m</mi></mtd></mtr><mtr><mtd><mi>B</mi><mrow><mo>(</mo><mi>MBFO</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mn>1</mn><mo>)</mo></mrow><mo>)</mo></mrow><mo>=</mo><mn>2</mn><mi>m</mi><mo>+</mo><mn>1</mn></mtd></mtr><mtr><mtd><mi>A</mi><mrow><mo>(</mo><mi>MBFO</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mn>0</mn><mo>)</mo></mrow><mo>)</mo></mrow><mo>=</mo><mi>A</mi><mrow><mo>(</mo><mi>MBFO</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mn>1</mn><mo>)</mo></mrow><mo>)</mo></mrow><mo>=</mo><mi>cntw</mi></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>当<img file="FDA00002581087600026.GIF" wi="250" he="106" />所述FFT运算操作数MBFO(m,0)和MBFO(m,1)均写入存储器组的单端口数据存储器中,写地址为:<maths num="0004"><![CDATA[<math><mrow><mfenced open='{' close=''><mtable><mtr><mtd><mi>B</mi><mrow><mo>(</mo><mi>MBFO</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mn>0</mn><mo>)</mo></mrow><mo>)</mo></mrow><mo>=</mo><mn>2</mn><mi>K</mi><mo>-</mo><mn>2</mn><mo>-</mo><mn>2</mn><mi>m</mi></mtd></mtr><mtr><mtd><mi>B</mi><mrow><mo>(</mo><mi>MBFO</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mn>1</mn><mo>)</mo></mrow><mo>)</mo></mrow><mo>=</mo><mn>2</mn><mi>K</mi><mo>-</mo><mn>1</mn><mo>-</mo><mn>2</mn><mi>m</mi></mtd></mtr><mtr><mtd><mi>A</mi><mrow><mo>(</mo><mi>MBFO</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mn>0</mn><mo>)</mo></mrow><mo>)</mo></mrow><mo>=</mo><mi>A</mi><mrow><mo>(</mo><mi>MBFO</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mn>1</mn><mo>)</mo></mrow><mo>)</mo></mrow><mo>=</mo><mi>cntw</mi><mo>-</mo><mfrac><mi>N</mi><mrow><mn>4</mn><mi>K</mi></mrow></mfrac></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>5</mn><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>d、确定旋转因子在所述旋转因子存储器中的存放方法:所述K个旋转因子存储器的存储内容相同,均按地址递增顺序存放指数为w的旋转因子,w取值范围为[0,N-1];e、确定旋转因子读地址:以cnt表示完成一层FFT运算并行读旋转因子的次数,<img file="FDA00002581087600031.GIF" wi="428" he="105" />N=2<sup>L</sup>为所述FFT运算操作数的数量;n为FFT运算级数,n=1,2,…,L;则蝶算单元m在第n级FFT运算时旋转因子的读地址P(m,n)为:<maths num="0005"><![CDATA[<math><mrow><mi>P</mi><mrow><mo>(</mo><mi>m</mi><mo>,</mo><mi>n</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mn>0</mn><mo>,</mo></mtd><mtd><mi>n</mi><mo>=</mo><mn>1</mn></mtd></mtr><mtr><mtd><mi>rev</mi><mrow><mo>(</mo><mrow><mo>(</mo><mi>m</mi><mo>+</mo><mi>K</mi><mo>&times;</mo><mi>cnt</mi><mo>)</mo></mrow><mi>mod</mi><msup><mn>2</mn><mrow><mi>n</mi><mo>-</mo><mn>1</mn></mrow></msup><mo>)</mo></mrow><mo>,</mo></mtd><mtd><mi>n</mi><mo>&NotEqual;</mo><mn>1</mn></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>6</mn><mo>)</mo></mrow></mrow></math>]]></maths>其中rev(),表示位倒序操作。
地址 230009 安徽省合肥市屯溪路193号