Verilog电路设计小技巧之功耗优化

–不积跬步无以至千里
记录Verilog电路设计中的点点滴滴

对ASIC流程而言,功耗一直是一个重点关注的问题,时钟树的功耗消耗达到芯片动态功耗的30%~60%,因此,电路不工作时关断时钟是目前降低动态功耗最常用和最成熟的手段之一。
下面分享从RTL实现角度来降低动态功耗的一些“投机取巧”。

1、模块级时钟门控
对于一些功能较独立,通常用于处理某一特定命令流或数据流的模块,可以在其外部手动例化一个单独的时钟门控单元,用于实现模块级的动态时钟门控;当有新命令或数据到来时,自动打开时钟,模块正常工作;当命令或数据处理完成后,通过模块送出的idle或empty等指示信号,再整体关闭当前模块的时钟。

CLK_ICG_WRAP U_DMA_CLK_ICG(
    .clk        (sys_clk),
    .gt_en      (dma_idle),
    .dft_gt_se  (dft_glb_gt_se),
    .clk_gt     (sys_clk_gt)
);
DMA U_DMA(
    .clk    (sys_clk_gt),
    .reset  (sys_rst_n),
    .idle   (dma_idle)
);

可以看到DMA模块在dma_idle有效的时候代表DMA模块没有向AXI总线发起读取或写入即空闲状态,此时时钟门控ICG模块gt_en使能,输出时钟sys_clk_gt门控,关闭DMA模块的输入时钟。

2、寄存器级时钟门控

在RTL设计中,如果寄存器有翻转条件,那么这些寄存器在综合时便会被自动加上时钟门控。如下代码中cnt_add_en成为门控条件,只有其值为1时,寄存器时钟才打开。

always@(posedge clk or negedge rst_n) begin
    if(rst_n)
        cnt <= 5'd0;
    else if(cnt_add_en)
        cnt <= cnt + 1'd1;
end

需要注意的是,综合脚本里会有自动插入时钟门控的相关设置,会对时钟门控的自动插入造成影响:

-minimum_bitwidth minimum_bitwidth_value

该选项设定了自动触发clock gating插入的寄存器下限值,意思就是说只有当需要被门控的寄存器位宽至少为3bit时,才有可能为其插入时钟门控单元。由于门控单元自身也有功耗,所以当寄存器位宽过小的时候,再为其插入门控单元,有可能整体功耗反而会增大。
在这里插入图片描述
工具在综合时会对寄存器门控率进行分析,建议整体的寄存器门控率在90%以上。
在这里插入图片描述
以上就是有关功耗优化的分享内容,欢迎关注我的公众号:深入浅出玩转FPGA

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值