集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2048|回复: 1

做FFT实现的时候多个相同模块并行调用运行怎么处理

[复制链接]
CHA 发表于 2010-6-27 23:42:00 | 显示全部楼层 |阅读模式
本帖最后由 fpgaw 于 2010-7-12 17:18 编辑

做FFT实现的时候,要用并行处理,16个蝶形单元并行运行,但是一直没有处理好。
大家帮帮忙,指点一下。
大体思路见下面的代码:

module bufly_array (clk, In, P, Out);
    input clk;
    //全部将寄存器值付给线值,一次性输入
    input [255:0] In;
    input [2:0] P;
    output wire [255:0] Out;
   
    reg [15:0] In_reg [16];
   
    reg [3:0] alm, ahm, al, ah;
    wire [15:0] Out_wire [16]; //bufly输出赋值
   
    always @ (posedge clk)
        begin
            In_reg[0]<=In[7:0];
            In_reg[1]<=In[15:8];
            ...
            In_reg[15]<=In[255:248];
        end
   
    /*地址产生器,计算节点数据地址add_up,add_down
    P为级数
    al为地地址,ah为高地址
    add_up_out为高节点地址
    add_down_out为低节点地址
    */
    add add_0 (.P(P), .al(al), .ah(ah), .add_up(add_up_out), .add_down(add_down_out));
   
    always @ (p)
        begin
            alm<=4'b1<<(p-3'b1);
            ahm<=4'b1<<(3'b100-p);
        end
   
    always @ (posedge clk)
        begin
            for (i=0;i<=5'h0f;i=i+5'b1)
                begin
                    if(ah<ahm)
                        ah<=ah+4'b1;
                    else if (al<alm)
                        begin
                            ah<=4'b0;
                            al<=al+4'b1;
                        end
                    else
                        al<=4'b0;
                    //完成赋值
                    count<=count+4'b1;
                    //通过地址来选择操作数和旋转因子
                    add_up[count]<=add_up_out;
                    add_down[count]<=add_down_out;
                end
                    
            // if (count<=9'h0ff) //通过count来依次选择蝶形单元
               
            //else
            //count<=9'b0;        
        end
   
    bufly bufly_00 (.In_up(In_reg[add_up[0]])
        .In_down(In_reg[add_down[0]])
        .Out_up(Out_wire[add_up[0]])
        .Out_down(Out_wire[add_down[0]])
        );
    ...
   
    bufly bufly_15 (.In_up(In_reg[add_up[15]])
        .In_down(In_reg[add_down[15]])
        .Out_up(Out_wire[add_up[15]])
        .Out_down(Out_wire[add_down[15]])
        );
   
    assign Out={Out_wire[15],...,Out_wire[0]};
endmodule



module bufly (In_up, In_down, Out_up, Out_down);
    input [15:0] In_up, In_down;
    output [15:0] Out_up, Out_down;
   
    ......
endmodule

module add (P, al, ah, add_up, add_down);
    input [2:0] P;
    input [3:0] al, ah;
    output [3:0] add_up, add_down;
    ......
endmodule
usb 发表于 2010-6-28 01:11:40 | 显示全部楼层
哎,怎么就没人理呢?
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-11-16 07:30 , Processed in 0.093056 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表