錯(cuò)誤使用派生時(shí)鐘對邏輯時(shí)序的影響
項(xiàng)目代碼編譯后打印如下信息:
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這條通道限定了時(shí)針的最高速度只能到67.47MHz。
查看相關(guān)代碼中存在如下代碼段:
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做一個(gè)簡單的防抖處理,相當(dāng)于使用CLK48M衍生的一個(gè)時(shí)鐘CLKDIV[5]。
MCLK在其它模塊中又使用CLK48M系統(tǒng)時(shí)鐘做了一次鎖存,于是相當(dāng)于在兩個(gè)CLK48M時(shí)鐘之間要完成CLKDIV[5]的轉(zhuǎn)換,再用CLKDIV[5]的上升沿去觸發(fā)MCLK的轉(zhuǎn)換,再輸出到目的寄存器。此過程占用時(shí)間較長,而CLKDIV[5]所耗的時(shí)間顯然是多余的。
修改代碼后如下:
always @( posedge CLK48M )
begin
CLKDIV 《= CLKDIV + 1; //clock divider
if (CLKDIV == 6‘b100000)
評論