打印

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

[复制链接]
1781|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啊?在设计中不算多了。
不过还是有可优化的空间的。

使用特权

评论回复
5
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

使用特权

评论回复
6
supers001|  楼主 | 2013-12-28 13:30 | 只看该作者
zhaojingzb 发表于 2013-12-28 08:43
使用7A100T
优化前布线结果后的资源:FF 64 , LUT 103
优化后布线结果后的资源:FF 42 , LUT 70

多谢这位兄弟,请问这位兄弟在哪儿上班,能不能留个QQ,加个好友,

使用特权

评论回复
7
zhaojingzb| | 2013-12-28 14:28 | 只看该作者
私信给你了
顺便结贴送分哦
多谢:D

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

37

帖子

0

粉丝