在xilinx的FPGA中,要实现高频时钟的输出,并保证时钟质量,最有效的方案是使用ODDR来产生。
ODDR位于IOB里面,如果CLK是由BUFG驱动的,那么从CLK到ODDR的路径在每次实现中都是确定的,从OODR到FPGA芯片PAD的路径和延迟也是确定的,由ODDR产生的时钟是一个稳定的高质量时钟。
下面是原语使用实例。
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
) CLOCK_OUT(
.Q(clk_out), // 1-bit DDR output data
.C0(clk_in), // 1-bit clock input
.C1(~clk_in), // 1-bit clock input
.CE(1'b1), // 1-bit clock enable input
.D0(1'b1), // 1-bit data input (associated with C0),C0上升沿输出D0
.D1(1'b0), // 1-bit data input (associated with C1),C1上升沿输出D1
.R(1'b0), // 1-bit reset input
.S(1'b0) // 1-bit set input
);