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) );
01-03 21:48