parameterintegerIDELAY_VALUE=0,// same scale as for fine delay
parameterintegerODELAY_VALUE=0,
parameterIBUF_LOW_PWR="TRUE",
parameterIOSTANDARD="DIFF_SSTL15_T_DCI",
parameterSLEW="SLOW",
parameterrealREFCLK_FREQUENCY=300.0,
parameterHIGH_PERFORMANCE_MODE="FALSE"
)(
inoutdqs,
inoutndqs,
inputclk,
inputclk_div,
inputrst,
outputdqs_received_dly,
// output dqs_di, // debugging:
//Input buffer ddrc_sequencer_i/phy_cmd_i/phy_top_i/byte_lane0_i/dqs_i/iobufs_dqs_i/IBUFDS/IBUFDS_S (in ddrc_sequencer_i/phy_cmd_i/phy_top_i/byte_lane0_i/dqs_i/iobufs_dqs_i macro) has no loads. An input buffer must drive an internal load.
inputdci_disable,// disable DCI termination during writes and idle
input[7:0]dly_data,
input[3:0]din,
input[3:0]tin,
inputset_odelay,
inputld_odelay,
inputset_idelay,
inputld_idelay
);
wired_ser;
wiredqs_tri;
wiredqs_data_dly;
wiredqs_di;
oserdes_memoserdes_i(
.clk(clk),// serial output clock
.clk_div(clk_div),// oclk divided by 2, front aligned
.rst(rst),// reset
.din(din[3:0]),// parallel data in
.tin(tin[3:0]),// parallel tri-state in
.dout_dly(d_ser),// data out to be connected to odelay input
.dout_iob(),// data out to be connected directly to the output buffer
.tout_dly(),// tristate out to be connected to odelay input
.tout_iob(dqs_tri)// tristate out to be connected directly to the tristate control of the output buffer
);
odelay_fine_pipe#(
.IODELAY_GRP(IODELAY_GRP),
.DELAY_VALUE(ODELAY_VALUE),
.REFCLK_FREQUENCY(REFCLK_FREQUENCY),
.HIGH_PERFORMANCE_MODE(HIGH_PERFORMANCE_MODE)
)dqs_out_dly_i(
.clk(clk_div),
.rst(rst),
.set(set_odelay),
.ld(ld_odelay),
.delay(dly_data[7:0]),
.data_in(d_ser),
.data_out(dqs_data_dly)
);
IOBUFDS_DCIEN#(
.DIFF_TERM("FALSE"),
.DQS_BIAS("TRUE"),// outputs 1'b0 when IOB is floating