数字前端设计的一些问题——门控时钟

数字前端设计的一些问题——门控时钟

初次了解到门控时钟的概念是在做一个算法IP的时候,为了解决Block功耗较大,建议改版加入门控时钟clock gating的设计;

后续的改版也没有由我来完成,所以实际效果不能给出。

不过,这里会留有一份文件,仅供参考。

这里直接开始,看看怎么设计。

雏形

门控时钟,顾名思义,就是加一个门电路,来使能时钟信号。

当某个模块不使用的时候,将其drive clock进行复位,以减小该模块的功耗。

根据理解,最先想到的是这样的操作:

assign clk_gate = en & clk_in;

乍一看,像模像样;仔细考虑一下,如果EN没有跟clk_in对齐,就会出现gate_clk周期及相位上的波动,如下图所示:

在这里插入图片描述

在这里插入图片描述

上图的毛刺现象,可能会对设计带来一定的影响。

改进

可以在en端增加一个以clk_in为触发的寄存器,生成clk_en信号,再将clk_in与clk_en连接到与门;

在这里插入图片描述

可以理解为latch为低有效,也就是说latch的en端口(clk_in)为低时,latch的q端(clk_en)是根据en变化的;

latch的en端口(clk_in)为高时,latch的q端就会被锁住;

工作波形如下图所示:

在这里插入图片描述

可以对比红色cursor处进行观察。

RTL code

module clk_gating(
	input   wire        clk_in,
    input   wire        en,
    output  wire        clk_gate
);

reg     clk_en;
always @(*) begin           // latch
    if ( ~clk_in ) begin
        clk_en = en;
    end else begin
        clk_en = clk_en;
    else
end
        
assign  clk_gate = clk_en & clk_in;
endmodule

参考

关于latch的门控时钟

更新

2020-09-17:更新工作波形图;
2022-11-01:更新RTL code;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShareWow丶

前人栽树,分享知识,传播快乐。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值