reg的clk gating问题
reg[9:0] counter_clk;
always @(negedge resetn or posedge clk_3) begin
if(~resetn)
counter_clk <= 10'd0;
else
counter_clk <= counter_clk + 1'b1;
end
assign det_clk = clk_3 & (&counter_clk);
不是clkgate。1K分频啊,det_clk可以做使能信号比较省事。
det_clk应该算门控时钟,因为它是时钟信号clk_3与控制信号(&counter_clk)逻辑与生成的
通常理解的时钟门控,应该是使用专用器件完成的
时钟门控的基本要求是不能产生毛刺,只保持需要的脉冲,并且对原始时钟的特性不能有破坏
比如:脉冲宽度、transation时间等等
上面这段代码,实际上是拿一个脉宽的高电平和时钟做了组合逻辑,出来的信号波形应该是一个“凹”字形的脉冲
小编自己画一画看看
而且脉冲的高电平宽度都是很短的(~= 寄存器的CLK->Q延时)
即上面我所说的出现的毛刺
综上,上述代码不是时钟门控
只是用时钟和数据做了一个逻辑而已
其输出的det_clk根本无法作为后续寄存器的时钟用
因为它的脉冲都是毛刺
说错了
更正如下
=======================
“凹”型脉冲的前一个脉冲的宽度要大些
= T/2 - Tclk->q
后一个脉冲的宽度= Tclk->q
所以前一个脉宽的宽度比原始时钟的脉宽小了,而后一个是毛刺
=====================================
如寄存器采用negedge时钟沿,是可以完成门控,det_clk会输出一个正常脉宽的时钟沿
=====================================
对的,我认为也是,这个det_clk很容易出现毛刺,不能作为clk给下级电路用。 如果用下降沿为counter进行采样,毛刺会好很多。个人感觉这就是个不成熟
的脉冲检测信号?
请问Xilinx的FPGA做CLK GATING,用LZ这样的RTL综合后就自动实现了吗?
还有如果我对这个模块做CLK GATING,想LZ这样通过RTL代码,那么理论上是不是这个模块就没有动态功耗了呢?(Xilinx FPGA 能支持这个功耗的优化吗)
