集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2260|回复: 0

fpga多个模块并行运行问题

[复制链接]
ddr 发表于 2010-4-26 14:51:15 | 显示全部楼层 |阅读模式
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
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

QQ|小黑屋|手机版|Archiver|集成电路技术分享 ( 京ICP备20003123号-1 )

GMT+8, 2024-5-14 03:47 , Processed in 0.062450 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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