当前位置:首页 > EDA > 电子设计自动化
[导读]LUT爆满别先加器件,先按“报告定位热点—RTL瘦身—综合/实现引导—专用资源替换”四步收。复杂控制+DSP混合设计靠单项往往不够,组合拳才容易把Slice LUT压下来。


LUT爆满别先加器件,先按“报告定位热点—RTL瘦身—综合/实现引导—专用资源替换”四步收。复杂控制+DSP混合设计靠单项往往不够,组合拳才容易把Slice LUT压下来。

一、先定位热点

Vivado综合后跑层次报告,找LUT占比最高的子模块:

report_utilization -hierarchical -file util.rpt

report_timing_summary -file timing.rpt

重点看三类:深组合算术(乘加/比较树)、大reg数组(被推成FF而非RAM)、状态机次态译码过宽。某模块占整体LUT超35%再动手,避免全局瞎改。

二、RTL瘦身:位宽、case、流水

位宽只取有效范围,避免隐式扩位产生多余LUT;深层if-else改case并补default,防止综合出锁存器。

// 次优:宽总线+嵌套if,易出锁存和长组合

always @* begin

 if(en) if(mode==0) o=d0; else if(mode==1) o=d1; ...

end

// 优化:case+default,数据选择明确

always @* begin

 o=0;

 case({en,mode})

   3'b1_00: o=d0;

   3'b1_01: o=d1;

   3'b1_10: o=d2;

   default: o=0;

 endcase

end

长算术拆流水,既降LUT也改善时序:

reg [31:0] p0,p1,sum;

always @(posedge clk or negedge rst_n) begin

 if(!rst_n) {p0,p1,sum}<=0;

 else begin

   p0<=a*b; p1<=c*d;          // 第1拍乘

   sum<=p0+p1+e*f;            // 第2拍加,组合深度减半

 end

end

状态机按数量编码:≤6态用binary省FF/LUT,≥8~16态用one-hot降低次态译码;加fsm_encoding属性让工具别自作主张。

(* fsm_encoding="onehot" *) reg [7:0] st;

localparam IDLE=8'h01, RD=8'h02, WR=8'h04, DONE=8'h08;

三、乘加与算术:DSP、常系数、资源共享

18×18/27×18、连续MAC优先DSP;中等乘法加use_dsp引导,避免被推成LUT+进位链。

(* use_dsp="yes" *) wire [31:0] mac = a*b + c*d;

常系数用小乘加/移位替代:x3→(x<<1)+x,x10→(x<<3)+(x<<1)。多通道同系数滤波做时分复用,4路串行比4路并行少3组乘法资源。

综合开资源共享,重复算术合并:

opt_design -resource_sharing on

set_property OPT_MODE Area [current_design]

synth_design -resource_sharing auto -retiming true

retiming可重排寄存器、压缩等价组合;面积模式会牺牲部分频率换LUT,关键路径别一起开。

四、存储:BRAM/SRL替代FF堆

大缓冲别用reg数组硬写,深度≥1024或位宽较大直接block RAM;小深度查表用distributed RAM;纯延时移位不加复位,让工具推SRL16/SRL32,1个LUT当16级触发器用。

(* ram_style="block" *) reg [31:0] buf1024 [0:1023];

(* ram_style="distributed" *) reg [7:0] lut_tbl [0:63];

// 移位延时:无复位,综合可推SRL

reg [7:0] pipe;

always @(posedge clk) pipe<={pipe[6:0],din};

非线性校正、协议解码、阈值判断若分支过多,预计算存ROM/分布式RAM,比大case组合省LUT。

五、实现阶段收尾

布局前再跑:

opt_design -directive ExploreWithRemapping

synth_design -flatten_hierarchy rebuilt

place_design -directive ExtraNetDelay_high

route_design

flatten重建可让跨模块公共子表达式合并;ExploreWithRemapping对LUT重映射、常量化冗余逻辑更有效。复位能不用异步就不用,数据通路暂存寄存器可不复位,仅控制/状态机/接口复位,减少全局复位驱动出的额外逻辑。

六、验收口径

优化前后对比同一实现报告:Slice LUT、LUTRAM、FF、DSP、BRAM五项一起看。单纯压LUT若导致FF暴涨或WNS转负,不算成功。经验顺序:位宽→case/default→资源共享→乘法DSP/常系数→大数组BRAM、小延时SRL→状态机重编码→流水/retiming→实现重映射。热点集中、算术多、缓冲大的设计,按这套组合通常可拿到显著降幅,目标35%要在Artix-7/Kintex同器件、同约束下用前后DCP对比,不拿不同频率或不同功能版本硬比。



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭