如需轉載,請將下列字段一起轉載。
新浪海風博客http://blog.sina.com.cn/dingyunfeng
聲明:以下內容僅指Xilinx Spartan6系列,其他FPGA並不一定適用。
FPGA的設計中,時鐘系統的設計極其重要,通常時鐘信號會使用BUFG網絡減少傳輸延遲,提高系統性能並增強系統的穩定性。
在實際使用中,經常會遇到需要將某個BUFG上的時鐘信號通過FPGA的普通IO輸出。如果直接從BUFG上連接到OBUF上,在編譯器map的過程中就會出現錯誤,並提示規避錯誤的方法,就是在約束文件中加上一條約束,讓編譯器忽略時序約束的要求,直接通過普通邏輯資源連接。雖然這個約束能規避這個錯誤,但中間的時序將無法評估,因此可能會導致錯誤的發生。
Xilinx Spartan6對於這種應用給出的解決方案是通過ODDR2來連接,每個IO都有ODDR2資源,這些資源可以連接到BUFG網絡上。
使用舉例:
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
) ODDR2_inst (
.Q(需要輸出的時鐘信號連線), //
1-bit DDR output data
.C0(BUFG上的時鐘信號), //
1-bit clock input
.C1(BUFG上的時鐘信號的180度反相信號), //
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
);