错误使用派生时钟对逻辑时序的影响
项目代码编译后打印如下信息:
Info: Clock “CLK48M” has Internal fmax of 67.47 MHz between source register “GLUE_LGC:glue|MCLK” and destination register “img_lgc:img|N2DSP” (period= 14.822 ns)
信号由MCLK到N2DSP这条通道限定了时针的最高速度只能到67.47MHz。
查看相关代码中存在如下代码段:
always @( posedge CLK48M )
begin
CLKDIV 《= CLKDIV + 1; //clock divider
end
always @(posedge CLKDIV[5])
begin
MCLKB3 《= MCLK_EXT;
MCLKB2 《= MCLKB3;
MCLKB 《= MCLKB2;
MCLK 《= MCLKB | MCLKB2 | MCLKB3;
End
该代码段是对MCLK_EXT做一个简单的防抖处理,相当于使用CLK48M衍生的一个时钟CLKDIV[5]。
MCLK在其它模块中又使用CLK48M系统时钟做了一次锁存,于是相当于在两个CLK48M时钟之间要完成CLKDIV[5]的转换,再用CLKDIV[5]的上升沿去触发MCLK的转换,再输出到目的寄存器。此过程占用时间较长,而CLKDIV[5]所耗的时间显然是多余的。
修改代码后如下:
always @( posedge CLK48M )
begin
CLKDIV 《= CLKDIV + 1; //clock divider
if (CLKDIV == 6‘b100000)
评论