最近有用到clock extend 功能,具体就是在clock gating功能中,在要关clock时晚几个clock关,具体晚几个clk是通过寄存器配置的。如何实现其功能呢?
always(@posedge clk or negedge rst_n)begin
if(~rst_b)
ck_dly_cnt <= 0;
else if(ck_en)
ck_dly_cnt <= reg_ck_dly_cnt;
else if(|ck_dly_cnt)
ck_dly_cnt <= ck_dly_cnt - 1;
end
assign total_ck_en = ck_en || (|ck_dly_cnt);
验证思路
由于input clock与output clock同频同相,并且input clock 为free run
所以可以用input clock来采样output clock,用clk negedge进行采样,如果有output的clock,则看到的一直是1,如果clock被gate住了,则采样到的value会变成0。
用上述方法可以判断ck_on的有效性