x393  1.0
FPGAcodeforElphelNC393camera
sens_hispi_din.v
Go to the documentation of this file.
1 
39 `timescale 1ns/1ps
40 
41 module sens_hispi_din #(
42  parameter IODELAY_GRP = "IODELAY_SENSOR", // may need different for different channels?
43  parameter integer IDELAY_VALUE = 0,
44  parameter real REFCLK_FREQUENCY = 200.0,
45  parameter HIGH_PERFORMANCE_MODE = "FALSE",
46 
47  parameter HISPI_NUMLANES = 4,
48  parameter HISPI_CAPACITANCE = "DONT_CARE",
49  parameter HISPI_DIFF_TERM = "TRUE",
50  parameter HISPI_UNTUNED_SPLIT = "FALSE", // Very power-hungry
51  parameter HISPI_DQS_BIAS = "TRUE",
52  parameter HISPI_IBUF_DELAY_VALUE = "0",
53  parameter HISPI_IBUF_LOW_PWR = "TRUE",
54  parameter HISPI_IFD_DELAY_VALUE = "AUTO",
55  parameter HISPI_IOSTANDARD = "DIFF_SSTL18_I" //"DIFF_SSTL18_II" for high current (13.4mA vs 8mA)
56 )(
57  input mclk,
58  input mrst,
59  input [HISPI_NUMLANES * 8-1:0] dly_data, // delay value (3 LSB - fine delay) - @posedge mclk
60  input [HISPI_NUMLANES-1:0] set_idelay, // mclk synchronous load idelay value
61  input ld_idelay, // mclk synchronous set idealy value
62  input ipclk, // 165 MHz
63  input ipclk2x, // 330 MHz
64  input irst, // reset @posedge iclk
65  input [HISPI_NUMLANES-1:0] din_p,
66  input [HISPI_NUMLANES-1:0] din_n,
67  output [HISPI_NUMLANES * 4-1:0] dout
68 
69 );
70  wire [HISPI_NUMLANES-1:0] din;
71  wire [HISPI_NUMLANES-1:0] din_dly;
72 
73  generate
74  genvar i;
75  for (i=0; i < HISPI_NUMLANES; i=i+1) begin: din_block
76  if (HISPI_UNTUNED_SPLIT == "TRUE") begin
78  .CAPACITANCE (HISPI_CAPACITANCE),
79  .DIFF_TERM (HISPI_DIFF_TERM),
80  .DQS_BIAS (HISPI_DQS_BIAS),
81  .IBUF_DELAY_VALUE (HISPI_IBUF_DELAY_VALUE),
82  .IBUF_LOW_PWR (HISPI_IBUF_LOW_PWR),
83  .IFD_DELAY_VALUE (HISPI_IFD_DELAY_VALUE),
84  .IOSTANDARD (HISPI_IOSTANDARD)
85  ) ibufds_ibufgds0_i (
86  .O (din[i]), // output
87  .I (din_p[i]), // input
88  .IB (din_n[i]) // input
89  );
90  end else begin
92  .CAPACITANCE (HISPI_CAPACITANCE),
93  .DIFF_TERM (HISPI_DIFF_TERM),
94  .DQS_BIAS (HISPI_DQS_BIAS),
95  .IBUF_DELAY_VALUE (HISPI_IBUF_DELAY_VALUE),
96  .IBUF_LOW_PWR (HISPI_IBUF_LOW_PWR),
97  .IFD_DELAY_VALUE (HISPI_IFD_DELAY_VALUE),
98  .IOSTANDARD (HISPI_IOSTANDARD)
99  ) ibufds_ibufgds0_i (
100  .O (din[i]), // output
101  .I (din_p[i]), // input
102  .IB (din_n[i]) // input
103  );
104  end
105 
108  .DELAY_VALUE (IDELAY_VALUE),
111  ) pxd_dly_i(
112  .clk (mclk),
113  .rst (mrst),
114  .set (set_idelay[i]),
115  .ld (ld_idelay),
116  .delay (dly_data[3 + 8*i +: 5]),
117  .data_in (din[i]),
118  .data_out (din_dly[i])
119  );
120 
122  .DYN_CLKDIV_INV_EN ("FALSE"),
123  .MSB_FIRST (1) // MSB is received first
124  ) iserdes_pxd_i (
125  .iclk (ipclk2x), // source-synchronous clock
126  .oclk (ipclk2x), // system clock, phase should allow iclk-to-oclk jitter with setup/hold margin
127  .oclk_div (ipclk), // oclk divided by 2, front aligned
128  .inv_clk_div (1'b0), // invert oclk_div (this clock is shared between iserdes and oserdes. Works only in MEMORY_DDR3 mode?
129  .rst (irst), // reset
130  .d_direct (1'b0), // direct input from IOB, normally not used, controlled by IOBDELAY parameter (set to "NONE")
131  .ddly (din_dly[i]), // serial input from idelay
132  .dout (dout[4*i +:4]), // parallel data out
133  .comb_out() // output
134  );
135 
136  end
137  endgenerate
138 
139 
140 endmodule
141 
7211HISPI_DQS_BIAS"TRUE"
7228din_dlywire[HISPI_NUMLANES-1:0]
real 7205REFCLK_FREQUENCY200.0
[HISPI_NUMLANES-1:0] 7225din_n
[HISPI_NUMLANES-1:0] 7219set_idelay
7209HISPI_DIFF_TERM"TRUE"
[3:0] 11301dout
Definition: iserdes_mem.v:54
7215HISPI_IOSTANDARD"DIFF_SSTL18_I"
7214HISPI_IFD_DELAY_VALUE"AUTO"
ibufds_ibufgds0_i ibufds_ibufgds_50[generate]
pxd_dly_i idelay_nofine[generate]
iserdes_pxd_i iserdes_mem[generate]
integer 7204IDELAY_VALUE0
[HISPI_NUMLANES * 8-1:0] 7218dly_data
7213HISPI_IBUF_LOW_PWR"TRUE"
7227dinwire[HISPI_NUMLANES-1:0]
[HISPI_NUMLANES * 4-1:0] 7226dout
7208HISPI_CAPACITANCE"DONT_CARE"
[HISPI_NUMLANES-1:0] 7224din_p
[4:0] 11280delay
Definition: idelay_nofine.v:52
7210HISPI_UNTUNED_SPLIT"FALSE"
ibufds_ibufgds0_i ibufds_ibufgds[generate]
7212HISPI_IBUF_DELAY_VALUE"0"
7206HIGH_PERFORMANCE_MODE"FALSE"
7203IODELAY_GRP"IODELAY_SENSOR"