声明:以下内容仅指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
);
|