xilinx FPGA全局時鍾資源的使用


1.什么是xilinx fpga全局時鍾資源

  時鍾對於一個系統的作用不言而喻,就像人體的心臟一樣,如果系統時鍾的抖動、延遲、偏移過大,會導致系統的工作頻率降低,嚴重時甚至會導致系統的時序錯亂,實現不了預期的邏輯功能。xilinx fpga內的全局時鍾資源可以很好的優化時鍾的性能,因此在設計時要盡可能多的使用fpga內部的時鍾資源。xilinx fpga內部的全局時鍾采用全銅工藝實現,配合專用時鍾緩沖和驅動結構,可以使進入全局時鍾網絡的時鍾到達fpga內部各個邏輯單元的抖動和延遲最小。全局時鍾資源是專用布線資源,存在於全銅布線層上,使用全局時鍾資源不會影響芯片的其他布線資源。最好的全局時鍾解決方案是:讓時鍾從全銅工藝的全局時鍾輸入管腳進入fpga,然后經內部的全局時鍾緩沖單元去控制各個觸發器。xilinx常用的全局時鍾資源原語有:全局時鍾緩沖IBUFG、差分全局時鍾緩沖IBUFGDS、全局緩沖BUFG、數字時鍾管理單元DCM、鎖相環PLL。

2.全局時鍾資源的使用方法

  IBUFG是從全局時鍾輸入管腳輸入的單端時鍾的第一級緩沖,IBUFGDS是指的是差分時鍾的緩沖。只要是從全局時鍾管腳的輸入的時鍾必須要經過IBUFG,如果不經過,那么ise在布局布線時就會報錯,反之如果使用了IBUFG,那么信號一定是從全局時鍾輸入管腳輸入的,這是因為IBUFG和IBUFGDS的輸入只和fpga的全局時鍾輸入引腳有物理上的連接,與普通的IO和內部邏輯塊CLB沒有物理上的連接。BUFG是全局緩沖,BUFG的輸出到達fpga內部各個邏輯單元的時鍾延遲與抖動都是最小的。BUFG不但可以驅動IBUFG和DCM的輸出,還可以驅動其他普通的片內信號和普通io,當某個信號扇出很大時,而且要求的抖動延遲最小時,可以用BUFG驅動該信號,普通IO和普通的片內邏輯信號進入全局時鍾布線層有一個固定的延遲,一般在10ns左右,即普通信號或普通IO從輸入到BUFG的輸出有一個約10ns左右的固有延遲,但BUFG的輸出到片內所有的單元(IOB,CLB,選擇性塊RAM)的延時可以忽略不計。時鍾資源原語的使用方法主要有以下四種:

  1.IBUFG/IBUFGDS + BUFG

IBUFG IBUFG_INST(
  .I(clk_in),
  .O(clk_bufg)
);

BUFG BUFG_INST(
  .I(clk_bufg),
  .O(clk_out)
);

 

  2.內部邏輯信號 + BUFG

BUFG BUFG_INST(
  .I(internal_sig),
  .O(clk_out)
);

 

  3.IBUFG/IBUFGDS + DCM + BUFG (常用方法,比較靈活)

IBUFG IBUFG_INST(
  .I(clk_in),
  .O(clk_bufg)
);

  dcm dcm_inst (
    .CLKIN_IN(clk_bufg), 
    .RST_IN(dcm_lvds_rst),              
    .CLKDV_OUT(dcm_lvds_clk0_div), 
    .CLKFX_OUT(), 
    .CLK0_OUT(dcm_lvds_clk0), 
    .LOCKED_OUT(dcm_lvds_locked)
    );
 
         
BUFG BUFG_sen_rx_div_clk(

       .I(dcm_lvds_clk0_div),
       .O(sen_rx_div_clk) 
);

 

  4.內部邏輯信號 + DCM + BUFG (DCM的信號源選擇內部,不使用加了BUFG的外部信號源)

 dcm dcm_inst (
    .CLKIN_IN(internal_sig), 
    .RST_IN(dcm_lvds_rst),              
    .CLKDV_OUT(dcm_lvds_clk0_div), 
    .CLKFX_OUT(), 
    .CLK0_OUT(dcm_lvds_clk0), 
    .LOCKED_OUT(dcm_lvds_locked)
    );
BUFG BUFG_sen_rx_div_clk( .I(dcm_lvds_clk0_div), .O(sen_rx_div_clk) );

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM