首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

fpga多个模块并行运行问题

fpga多个模块并行运行问题

FT并行运算时多个相同模块并行调用运行怎么处理
做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
继承事业,薪火相传
返回列表