1. 程式人生 > >如何在Xilinx FPGA中實現高質量時鐘輸出

如何在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     );