如何在Xilinx FPGA中实现高质量时钟输出

      在xilinx的FPGA中,要实现高频时钟的输出,并保证时钟质量,最有效的方案是使用ODDR来产生。例如,需要输出的时钟为CLK,用CLK来驱动ODDR,让ODDR在CLK的上升沿输出0或1,在CLK的下降沿输出1或0,从而产生一个时钟脉冲CLKOUT,CLKOUT的时钟频率和CLK完全相同。ODDR位于IOB里面,如果CLK是由BUFG驱动的,那么从CLK到ODDR的路径在每次实现中是确定,从OODR到FPGA芯片PAD的路径和延迟也是确定的,由ODDR产生的时钟是一个稳定的高质量时钟。

      一种常见的错误做法是:用CLK由BUFG驱动以后,直接连接到某个具有时钟输入能力的管脚(CC管脚)。因为,CC管脚只有用作时钟输入时才能直接输入到BUFG中,而BUFG输出到CC管脚,效果等同于输出到任何一个普通管脚。这样应用方法是无法保证从BUFG到FPGA芯片PAD的走线长度的,而且一部分走线使用的是非专用布线资源。这种方法产生的时钟脉冲质量并不好。 


1.SPartan6FPGA中, PLL产生的时钟不能直接连到FPGA的通用I/O上;

2.如果硬件已经连上了,可通过在PLL输出与通用I/O之间增加ODDR2模块缓冲来解决。

3.ODDR2与PLL模块可放在一个V文件中。

4.ODDR2模块如下:

  ODDR2 #(
    .DDR_ALIGNMENT("NONE"), //Sets output alignment to "NONE", "C0" or "C1"
    .INIT(1'b0),    //Sets initial state of the Q output to 1'b0 or 1'b1
    .SRTYPE("SYNC") // Specifies"SYNC" or "ASYNC" set/reset
    ) U_ODDR2_PLL
输出时钟名 (
      .Q(oddr2_I/O
管脚名),   // 1-bit DDR output data
      .C0(clock_PLL输出时钟名),   // 1-bit clock input
      .C1(~clock_PLL输出时钟名),   // 1-bit clock input
      .CE(1'b1), //1-bit clock enable input
      .D0(1'b1), //1-bit data input (associated with C0)
      .D1(1'b0), //1-bit data input (associated with C1)
      .R(1'b0),   //1-bit reset input
      .S(1'b0)    //1-bit set input
    );




你可能感兴趣的:(FPGA)