tag 标签: 逻辑优化

相关博文
  • 热度 28
    2011-11-7 15:58
    2440 次阅读|
    7 个评论
    项目代码编译后打印如下信息: 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 )                 begin                    MCLKB3 = MCLK_EXT;                    MCLKB2 = MCLKB3;                    MCLKB = MCLKB2;                    MCLK = MCLKB | MCLKB2 | MCLKB3;          End   该代码段是对MCLK_EXT做一个简单的防抖处理,相当于使用CLK48M衍生的一个时钟CLKDIV 。   MCLK在其它模块中又使用CLK48M系统时钟做了一次锁存,于是相当于在两个CLK48M时钟之间要完成CLKDIV 的转换,再用CLKDIV 的上升沿去触发MCLK的转换,再输出到目的寄存器。此过程占用时间较长,而CLKDIV 所耗的时间显然是多余的。   修改代码后如下: always @( posedge CLK48M )          begin                    CLKDIV = CLKDIV + 1;                            //clock divider                    if (CLKDIV == 6'b100000)                             begin                                      MCLKB3 = MCLK_EXT;                                      MCLKB2 = MCLKB3;                                      MCLKB = MCLKB2;                                      MCLK = MCLKB | MCLKB2 | MCLKB3;                             end          end   两个从逻辑功能上看是一样的,但修改后因为只使用CLK48M时钟,逻辑都是以CLK48M为触发时钟,省去了一级触发器的延时,于是大大缩短了从源到目的寄存器的延时。提高了最高时钟速率。编译后打印CLK48M系统时钟最高频率信息如下:   Info: Clock "CLK48M" has Internal fmax of 77.08 MHz between source register "img_lgc:img|DATABUF " and destination register "img_lgc:img|CAM_D " (period= 12.974 ns)   可以看到CLK48M最高频率可以达到77.08M,这个频率是由"img_lgc:img|DATABUF "到"img_lgc:img|CAM_D "之间的路径决定的。后面再继续针对该网络做优化。   这种使用衍生时钟的方法是很多人逻辑设计中存在的错误(因为对时序影响非常严重,所以这里称它为一个错误也不为过),因为比较有典型性,所以特意整理了一下,希望引起初级逻辑工程师的注意。