x393  1.0
FPGAcodeforElphelNC393camera
dq_single.v
Go to the documentation of this file.
1 
39 `timescale 1ns/1ps
40 
41 module dq_single #(
42  parameter IODELAY_GRP ="IODELAY_MEMORY",
43  parameter integer IDELAY_VALUE = 0,
44  parameter integer ODELAY_VALUE = 0,
45  parameter IBUF_LOW_PWR ="TRUE",
46  parameter IOSTANDARD = "SSTL15_T_DCI",
47  parameter SLEW = "SLOW",
48  parameter real REFCLK_FREQUENCY = 300.0,
49  parameter HIGH_PERFORMANCE_MODE = "FALSE"
50 )(
51  inout dq, // I/O pad
52  input iclk, // source-synchronous clock (BUFR from DQS)
53  input clk, // free-running system clock, same frequency as iclk (shared for R/W)
54  input clk_div, // free-running half clk frequency, front aligned to clk (shared for R/W)
55  input inv_clk_div, // invert clk_div for R channel (clk_div is shared between R and W)
56  input rst,
57  input dci_disable, // disable DCI termination during writes and idle
58  input [7:0] dly_data, // delay value (3 LSB - fine delay)
59  input [3:0] din, // parallel data to be sent out
60  input [3:0] tin, // tristate for data out (sent out earlier than data!)
61  output [3:0] dout, // parallel data received from DDR3 memory
62  input set_odelay, // clk_div synchronous load odelay value from dly_data
63  input ld_odelay, // clk_div synchronous set odealy value from loaded
64  input set_idelay, // clk_div synchronous load idelay value from dly_data
65  input ld_idelay // clk_div synchronous set idealy value from loaded
66 );
67 wire d_ser;
68 wire dq_tri;
70 wire dq_dly;
71 // keep IOBUF_DCIEN.O to user as output only (UDM/LDM), so the rest of tyhe read channel will be optimized out, but I/O will stay the same
72 wire dq_di;
73 
74 
76  .MODE_DDR("TRUE")
77 ) oserdes_i (
78  .clk(clk), // serial output clock
79  .clk_div(clk_div), // oclk divided by 2, front aligned
80  .rst(rst), // reset
81  .din(din[3:0]), // parallel data in
82  .tin(tin[3:0]), // parallel tri-state in
83  .dout_dly(d_ser), // data out to be connected to odelay input
84  .dout_iob(), // data out to be connected directly to the output buffer
85  .tout_dly(), // tristate out to be connected to odelay input
86  .tout_iob(dq_tri) // tristate out to be connected directly to the tristate control of the output buffer
87 );
90  .DELAY_VALUE(ODELAY_VALUE),
93 ) dq_out_dly_i(
94  .clk(clk_div),
95  .rst(rst),
96  .set(set_odelay),
97  .ld(ld_odelay),
98  .delay(dly_data[7:0]),
99  .data_in(d_ser),
101 );
102 
106  .SLEW(SLEW),
107  .USE_IBUFDISABLE("FALSE")
108 ) iobufs_dq_i (
109  .O(dq_di),
110  .IO(dq),
111  .DCITERMDISABLE(dci_disable),
112  .IBUFDISABLE(1'b0),
113  .I(dq_data_dly), //dqs_data),
114  .T(dq_tri));
115 
118  .DELAY_VALUE(IDELAY_VALUE),
121 ) dq_in_dly_i(
122  .clk(clk_div),
123  .rst(rst),
124  .set(set_idelay),
125  .ld(ld_idelay),
126  .delay(dly_data[7:0]),
127  .data_in(dq_di),
128  .data_out(dq_dly)
129 );
130 
132  .DYN_CLKDIV_INV_EN("FALSE")
133 ) iserdes_mem_i (
134  .iclk(iclk), // source-synchronous clock
135  .oclk(clk), // system clock, phase should allow iclk-to-oclk jitter with setup/hold margin
136  .oclk_div(clk_div), // oclk divided by 2, front aligned
137  .inv_clk_div(inv_clk_div), // invert oclk_div (this clock is shared between iserdes and oserdes. Works only in MEMORY_DDR3 mode?
138  .rst(rst), // reset
139  .d_direct(1'b0), // direct input from IOB, normally not used, controlled by IOBDELAY parameter (set to "NONE")
140  .ddly(dq_dly), // serial input from idelay
141  .dout(dout[3:0]), // parallel data out
142  .comb_out() // output
143 );
144 
145 endmodule
146 
real 6112REFCLK_FREQUENCY300.0
Definition: dq_single.v:48
[3:0] 6124dout
Definition: dq_single.v:61
[MODE_DDR=="TRUE"?3:1:0] 11538din
Definition: oserdes_mem.v:48
6128ld_idelay
Definition: dq_single.v:65
6110IOSTANDARD"SSTL15_T_DCI"
Definition: dq_single.v:46
6109IBUF_LOW_PWR"TRUE"
Definition: dq_single.v:45
6131dq_data_dlywire
Definition: dq_single.v:69
6130dq_triwire
Definition: dq_single.v:68
integer 6107IDELAY_VALUE0
Definition: dq_single.v:43
[3:0] 11301dout
Definition: iserdes_mem.v:54
dq_in_dly_i idelay_fine_pipe
Definition: dq_single.v:116
6133dq_diwire
Definition: dq_single.v:72
[3:0] 6122din
Definition: dq_single.v:59
6125set_odelay
Definition: dq_single.v:62
dq_out_dly_i odelay_fine_pipe
Definition: dq_single.v:88
6132dq_dlywire
Definition: dq_single.v:70
integer 6108ODELAY_VALUE0
Definition: dq_single.v:44
[MODE_DDR=="TRUE"?3:0:0] 11539tin
Definition: oserdes_mem.v:50
6113HIGH_PERFORMANCE_MODE"FALSE"
Definition: dq_single.v:49
[7:0] 6121dly_data
Definition: dq_single.v:58
iobufs_dq_i IOBUF_DCIEN
Definition: dq_single.v:103
6118inv_clk_div
Definition: dq_single.v:55
[3:0] 6123tin
Definition: dq_single.v:60
6111SLEW"SLOW"
Definition: dq_single.v:47
6120dci_disable
Definition: dq_single.v:57
6126ld_odelay
Definition: dq_single.v:63
iserdes_mem_i iserdes_mem
Definition: dq_single.v:131
6106IODELAY_GRP"IODELAY_MEMORY"
Definition: dq_single.v:42
6129d_serwire
Definition: dq_single.v:67
oserdes_i oserdes_mem
Definition: dq_single.v:75
6127set_idelay
Definition: dq_single.v:64