ddr 发表于 2010-4-26 14:51:15

fpga多个模块并行运行问题

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

module bufly_array (clk, In, P, Out);
      input clk;
      //全部将寄存器值付给线值,一次性输入
      input In;
      input P;
      output wire Out;
      
      reg In_reg ;
      
      reg alm, ahm, al, ah;
      wire Out_wire ; //bufly输出赋值
      
      always @ (posedge clk)
                begin
                        In_reg<=In;
                        In_reg<=In;
                        ...
                        In_reg<=In;
                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<=add_up_out;
                                        add_down<=add_down_out;
                              end
                                       
                        // if (count<=9'h0ff)   //通过count来依次选择蝶形单元
                              
                        //else
                        //count<=9'b0;               
                end
      
      bufly bufly_00 (.In_up(In_reg])
                        .In_down(In_reg])
                        .Out_up(Out_wire])
                        .Out_down(Out_wire])
                        );
      ...
      
      bufly bufly_15 (.In_up(In_reg])
                        .In_down(In_reg])
                        .Out_up(Out_wire])
                        .Out_down(Out_wire])
                        );
      
      assign Out={Out_wire,...,Out_wire};
endmodule



module bufly (In_up, In_down, Out_up, Out_down);
      input In_up, In_down;
      output Out_up, Out_down;
      
      ......
endmodule

module add (P, al, ah, add_up, add_down);
      input P;
      input al, ah;
      output add_up, add_down;
      ......
endmodule
页: [1]
查看完整版本: fpga多个模块并行运行问题