FPGA资源不够用了,请教做优化

[复制链接]
2200|6
 楼主| supers001 发表于 2013-12-27 21:05 | 显示全部楼层 |阅读模式
如下代码,累加运算非常占资源,请教如何优化

// Data_acc.v
module Data_acc(Gd,Data_ch,Sin_index,Mul,Reset_n);

input Gd,Reset_n;
input [5:0] Sin_index;
input [27:0] Mul;
output [17:0] Data_ch;
        reg [17:0] Data_ch;
reg  [22:0] ACC;
reg  [22:0] ACC_tem;



always@(posedge Gd or negedge Reset_n)
    if(!Reset_n)
        begin
            ACC <=0;
            ACC_tem <=0;
            Data_ch <=0;
        end
    else
        begin
           if(Sin_index == 0)
                begin
                    if(ACC_tem > ACC)
                        begin
                            Data_ch <= ( ACC_tem - ACC ) >>4'd5;
                        end
                    else
                        begin
                            Data_ch <= ( ACC- ACC_tem ) >>4'd5;
                        end
                    ACC <= {5'd0,Mul[27:10]};
                end

            else if( (Sin_index < 6'd32) && (Sin_index > 6'd0) )
                ACC <= ACC +  {5'd0,Mul[27:10]};

            else if(Sin_index == 6'd32)
                begin
                    ACC_tem <= ACC;
                    ACC <=  {5'd0,Mul[27:10]};
                end  
                              
            else if( (Sin_index <= 6'd63) && (Sin_index > 6'd32))
                ACC <= ACC + {5'd0,Mul[27:10]};

            else
                    begin
                        ACC <= 0;
                end
        end  
        
endmodule


  
haitaox 发表于 2013-12-27 22:44 | 显示全部楼层
逻辑确实够多
zhaojingzb 发表于 2013-12-28 08:01 | 显示全部楼层
使用什么器件,可以先把资源结果贴图上来
zhaojingzb 发表于 2013-12-28 08:35 | 显示全部楼层
这才使用多少的LE啊?在设计中不算多了。
不过还是有可优化的空间的。
zhaojingzb 发表于 2013-12-28 08:43 | 显示全部楼层
使用7A100T
优化前布线结果后的资源:FF 64 , LUT 103
优化后布线结果后的资源:FF 42 , LUT 70
我可以说优化了30%吗?:lol

附上代码。大家交流
module Data_acc_opt(Gd,Data_ch,Sin_index,Mul,Reset_n);
input Gd,Reset_n;
input [5:0] Sin_index;
input [27:0] Mul;
output [17:0] Data_ch;
        reg [17:0] Data_ch;
reg  [23:0] ACC;

always@(posedge Gd or negedge Reset_n)
    if(!Reset_n)
        begin
            ACC <=0;
        end
    else
        begin
           if(Sin_index == 0)
                begin
                    ACC <= {5'd0,Mul[27:10]};
                end
            else if( (Sin_index < 6'd32) && (Sin_index > 6'd0) )
                ACC <= ACC +  {5'd0,Mul[27:10]};
     
            else if( (Sin_index <= 6'd63) && (Sin_index >= 6'd32))
                ACC <= ACC - {5'd0,Mul[27:10]};
            else
                    begin
                        ACC <= 0;
                end
        end  
always@(posedge Gd or negedge Reset_n)
    if(!Reset_n)
        begin
            Data_ch <=0;
        end
    else
        begin
           if(Sin_index == 0)
                begin
                    if(ACC[23] == 1'b1)
                        begin
                            Data_ch <=  (~ACC+ 1) >>4'd5;
                        end
                    else
                        begin
                            Data_ch <=  ACC >>4'd5;
                        end
                end
        end         
endmodule

 楼主| supers001 发表于 2013-12-28 13:30 | 显示全部楼层
zhaojingzb 发表于 2013-12-28 08:43
使用7A100T
优化前布线结果后的资源:FF 64 , LUT 103
优化后布线结果后的资源:FF 42 , LUT 70

多谢这位兄弟,请问这位兄弟在哪儿上班,能不能留个QQ,加个好友,
zhaojingzb 发表于 2013-12-28 14:28 | 显示全部楼层
私信给你了
顺便结贴送分哦
多谢:D
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

37

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部