IDDR原语基本使用
1.差分时钟/数据——单端时钟/数据都用ibufds
2.iddr的R/S都应该置为1’d0
genvar i;generatefor (i=0; i < 5; i=i+1)begin: rx_dataIBUFDS #(.DIFF_TERM("FALSE"), // Differential Termination.IBUF_LOW_PWR("TRUE"), // Low power="TRUE", Highest performance="FALSE" .IOSTANDARD("DEFAULT") // Specify the input I/O standard) IBUFDS_rx_data ( .O(iaddata [i]), // Buffer output .I(iaddata_p [i]), // Diff_p buffer input (connect directly to top-level port) .IB(iaddata_n[i]) // Diff_n buffer input (connect directly to top-level port) ); IDDR #(.DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE", "SAME_EDGE" // or "SAME_EDGE_PIPELINED" .INIT_Q1(1'b0), // Initial value of Q1: 1'b0 or 1'b1.INIT_Q2(1'b0), // Initial value of Q2: 1'b0 or 1'b1.SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC" ) IDDR_inst (.Q1(Q1), // 1-bit output for positive edge of clock.Q2(Q2), // 1-bit output for negative edge of clock.C(i_adclk), // 1-bit clock input.CE(1'd1), // 1-bit clock enable input.D(iaddata [i]), // 1-bit DDR data input.R(1'd0), // 1-bit reset.S(1'd0) // 1-bit set);endendgenerate
3.OPPOSITE_EDGE模式