@@ -33,27 +33,15 @@ THE SOFTWARE.
3333 */
3434module iddr #
3535(
36- // target ("SIM", "GENERIC", "XILINX", "ALTERA")
37- parameter TARGET = "GENERIC" ,
38- // IODDR style ("IODDR", "IODDR2")
39- // Use IODDR for Virtex-4, Virtex-5, Virtex-6, 7 Series, Ultrascale
40- // Use IODDR2 for Spartan-6
41- parameter IODDR_STYLE = "IODDR2" ,
4236 // Width of register in bits
4337 parameter WIDTH = 1 ,
4438 parameter INSERT_BUFFERS = "FALSE"
4539)
4640(
4741 input wire clk,
48- input wire rst,
49- input wire en,
50- input wire en_vtc,
51- input wire inc,
52- input wire load,
53- input wire [8 :0 ] cnt_value_in,
42+ // idelay count output
5443 output wire [(WIDTH* 9 )- 1 :0 ] cnt_value_out,
5544 // Data input
56-
5745 input wire [WIDTH- 1 :0 ] d,
5846
5947 output wire [WIDTH- 1 :0 ] q1,
@@ -75,11 +63,7 @@ Provides a consistent input DDR flip flop across multiple FPGA families
7563*/
7664wire [WIDTH- 1 :0 ] d_int;
7765wire [WIDTH- 1 :0 ] delayed_data_int;
78- reg en_ff,en_ff1;
79- always @(posedge clk) begin
80- en_ff <= en;
81- en_ff1 <= en_ff;
82- end
66+
8367genvar n;
8468
8569generate
@@ -96,34 +80,35 @@ end else begin
9680end
9781
9882for (n = 0 ; n < WIDTH; n = n + 1 ) begin : iddr
99-
83+ // Use IDELAYE3 for Ultrascale and Ultrascale+ devices to adjust delay between clock and data
84+ // set delay format to count and delay value to 9'h19 (2 ns at 125 MHz approximate)
10085 IDELAYE3 #(
101- .CASCADE("NONE" ), // Cascade setting (MASTER, NONE, SLAVE_END, SLAVE_MIDDLE)
102- .DELAY_FORMAT("COUNT" ), // Units of the DELAY_VALUE (COUNT, TIME)
103- .DELAY_SRC("IDATAIN" ), // Delay input (DATAIN, IDATAIN)
104- .DELAY_TYPE("VARIABLE " ), // Set the type of tap delay line (FIXED, VARIABLE, VAR_LOAD)
105- .DELAY_VALUE(9'h19 ), // Input delay value setting
106- .IS_CLK_INVERTED(1'b0 ), // Optional inversion for CLK
107- .IS_RST_INVERTED(1'b0 ), // Optional inversion for RST
108- .REFCLK_FREQUENCY(300 .0 ), // IDELAYCTRL clock input frequency in MHz (200.0-800.0)
109- .SIM_DEVICE("ULTRASCALE_PLUS" ), // Set the device version for simulation functionality (ULTRASCALE)
110- .UPDATE_MODE("ASYNC" ) // Determines when updates to the delay will take effect (ASYNC, MANUAL, SYNC)
86+ .CASCADE("NONE" ),
87+ .DELAY_FORMAT("COUNT" ), // Units of the DELAY_VALUE (COUNT, TIME)
88+ .DELAY_SRC("IDATAIN" ),
89+ .DELAY_TYPE("FIXED " ),
90+ .DELAY_VALUE(9'h19 ),
91+ .IS_CLK_INVERTED(1'b0 ),
92+ .IS_RST_INVERTED(1'b0 ),
93+ .REFCLK_FREQUENCY(300 .0 ),
94+ .SIM_DEVICE("ULTRASCALE_PLUS" ),
95+ .UPDATE_MODE("ASYNC" )
11196 )
11297 IDELAYE3_inst (
113- .CASC_OUT(), // 1-bit output: Cascade delay output to ODELAY input cascade
114- .CNTVALUEOUT(cnt_value_out[(n*9 )+8 : n*9 ]), // 9-bit output: Counter value output
115- .DATAOUT(delayed_data_int[n]), // 1-bit output: Delayed data output
116- .CASC_IN(0 ), // 1-bit input: Cascade delay input from slave ODELAY CASCADE_OUT
117- .CASC_RETURN(0 ), // 1-bit input: Cascade delay returning from slave ODELAY DATAOUT
118- .CE(en_ff & ~en_ff1 ), // 1-bit input: Active-High enable increment/decrement input
119- .CLK(clk), // 1-bit input: Clock input
120- .CNTVALUEIN(cnt_value_in ), // 9-bit input: Counter value input
121- .DATAIN(0 ), // 1-bit input: Data input from the logic
122- .EN_VTC(en_vtc ), // 1-bit input: Keep delay constant over VT
123- .IDATAIN(d_int[n]), // 1-bit input: Data input from the IOBUF
124- .INC(inc ), // 1-bit input: Increment / Decrement tap delay input
125- .LOAD(load ), // 1-bit input: Load DELAY_VALUE input
126- .RST(rst) // 1-bit input: Asynchronous Reset to the DELAY_VALUE
98+ .CASC_OUT(),
99+ .CNTVALUEOUT(cnt_value_out[(n*9 )+8 : n*9 ]),
100+ .DATAOUT(delayed_data_int[n]),
101+ .CASC_IN(0 ),
102+ .CASC_RETURN(0 ),
103+ .CE(0 ),
104+ .CLK(clk),
105+ .CNTVALUEIN(0 ),
106+ .DATAIN(0 ),
107+ .EN_VTC(0 ),
108+ .IDATAIN(d_int[n]),
109+ .INC(0 ),
110+ .LOAD(0 ),
111+ .RST(0 )
127112 );
128113
129114end
@@ -133,11 +118,11 @@ end
133118 reg [WIDTH- 1 :0 ] q_reg_1 = {WIDTH{1'b0 }};
134119 reg [WIDTH- 1 :0 ] q_reg_2 = {WIDTH{1'b0 }};
135120
136- always @(negedge clk) begin
121+ always @(posedge clk) begin
137122 d_reg_1 <= delayed_data_int;
138123 end
139124
140- always @(posedge clk) begin
125+ always @(negedge clk) begin
141126 d_reg_2 <= delayed_data_int;
142127 end
143128
0 commit comments