项目代码编译后打印如下信息:
" G$ l3 D5 [: l: y: ^
Info: Clock "CLK48M" has Internalfmax of 67.47 MHz between source register "GLUE_LGC:glue|MCLK" anddestination register "img_lgc:img|N2DSP" (period= 14.822 ns) / i- @( K1 ^- |% X8 M5 R
信号由MCLK到N2DSP这条通道限定了时针的最高速度只能到67.47MHz。
3 R2 V1 t, A. [0 J
查看相关代码中存在如下代码段:
+ |) `: z( Z' Q, k9 ^$ p% \. Galways @( posedge CLK48M )
9 o# l, \# _8 x
begin
l3 B* Q6 W8 J# f6 m
CLKDIV<= CLKDIV + 1; //clock divider
% x6 A, Y4 Z/ w$ M, }) e9 u
end
" e/ o$ J8 P7 n: h G8 b3 z
always @(posedge CLKDIV[5])
8 x/ T; |8 r6 K3 s% d0 |, g6 ~
begin
4 {, Z/ |& Y9 Z0 n" _3 M8 [' I
MCLKB3<= MCLK_EXT;
& R' B$ ?. n8 A" V3 ^
MCLKB2<= MCLKB3;
5 a! z, N9 L0 y% U; |; y& ` MCLKB<= MCLKB2;
2 @5 F5 x& v/ w1 i. K" T* Y
MCLK<= MCLKB | MCLKB2 | MCLKB3;
. V4 S+ D0 k- h5 ] End
8 X K$ r8 v X3 j3 }! t该代码段是对MCLK_EXT做一个简单的防抖处理,相当于使用CLK48M衍生的一个时钟CLKDIV[5]。
4 p1 z9 ~( p1 d
MCLK在其它模块中又使用CLK48M系统时钟做了一次锁存,于是相当于在两个CLK48M时钟之间要完成CLKDIV[5]的转换,再用CLKDIV[5]的上升沿去触发MCLK的转换,再输出到目的寄存器。此过程占用时间较长,而CLKDIV[5]所耗的时间显然是多余的。
/ B9 P2 s+ M! ~$ Q
修改代码后如下:
3 ^1 Q+ _+ h3 X5 _/ E) { ]' N
always @( posedge CLK48M )
2 v! H1 M, Q; ]& F% F% p. i
begin
" S/ P: S$ n+ }$ N* }7 W& f CLKDIV<= CLKDIV + 1; //clock divider
/ r& w% \5 ]& p4 r X
if(CLKDIV == 6'b100000)
8 v1 l7 s) F$ Q: {" y
begin
) j+ d1 B* \9 |4 w MCLKB3<= MCLK_EXT;
- B- }/ |( |3 z2 h, J7 X4 n: H
MCLKB2<= MCLKB3;
: O" g$ P% M# \8 {3 Q: {7 q9 x( a MCLKB<= MCLKB2;
! t7 Y+ V- Y+ e MCLK<= MCLKB | MCLKB2 | MCLKB3;
6 [2 E5 p( W: C2 b5 N3 d end
2 O% ~3 H6 O& G end
8 q8 r& l Q; g% l3 P4 o1 ? f C