x393  1.0
FPGAcodeforElphelNC393camera
pxd_single.v
Go to the documentation of this file.
1 
39 `timescale 1ns/1ps
40 
41 module pxd_single#(
42  parameter IODELAY_GRP ="IODELAY_SENSOR", // may need different for different channels?
43  parameter integer IDELAY_VALUE = 0,
44  parameter integer PXD_DRIVE = 12,
45  parameter PXD_IBUF_LOW_PWR = "TRUE",
46  parameter PXD_IOSTANDARD = "DEFAULT",
47  parameter PXD_SLEW = "SLOW",
48  parameter real REFCLK_FREQUENCY = 300.0,
49  parameter HIGH_PERFORMANCE_MODE = "FALSE"
50 
51 )(
52  inout pxd, // I/O pad
53  input pxd_out, // data to be sent out through the pad (normally not used)
54  input pxd_en, // enable data output (normally not used)
55  output pxd_async, // direct ouptut from the pad (maybe change to delayed?), does not depend on clocks - use for TDI
56  output pxd_in, // data output (@posedge ipclk?)
57  input ipclk, // restored clock from the sensor, phase-shifted
58  input ipclk2x, // restored clock from the sensor, phase-shifted, twice frequency
59  input mrst, // reset @ posedge mclk
60  input irst, // reset @ posedge iclk
61  input mclk, // clock for setting delay values
62  input [7:0] dly_data, // delay value (3 LSB - fine delay) - @posedge mclk
63  input set_idelay, // mclk synchronous load idelay value
64  input ld_idelay, // mclk synchronous set idealy value
65  input [1:0] quadrant // select one of 4 90-degree shifts for the data (MT9P0xx) have VACT, HACT shifted from PXD
66 );
67  wire pxd_iobuf;
69  wire [3:0] dout;
70  reg pxd_r;
71 
72  assign pxd_in=pxd_r;
73 // assign pxd_async = pxd_iobuf;
74  always @ (posedge ipclk) begin
75  if (irst) pxd_r <= 0;
76  else pxd_r <= quadrant[1]?(quadrant[0]? dout[3]: dout[2]) : (quadrant[0]? dout[1]: dout[0]);
77  end
78 
79  iobuf #(
80  .DRIVE (PXD_DRIVE),
81  .IBUF_LOW_PWR (PXD_IBUF_LOW_PWR),
82  .IOSTANDARD (PXD_IOSTANDARD),
83  .SLEW (PXD_SLEW)
84  ) iobuf_pxd_i (
85  .O (pxd_iobuf), // output
86  .IO (pxd), // inout
87  .I (pxd_out), // input
88  .T (!pxd_en) // input
89  );
90 
91 //finedelay not supported by HR banks?
92 /*
93  idelay_fine_pipe # (
94  .IODELAY_GRP (IODELAY_GRP),
95  .DELAY_VALUE (IDELAY_VALUE),
96  .REFCLK_FREQUENCY (REFCLK_FREQUENCY),
97  .HIGH_PERFORMANCE_MODE (HIGH_PERFORMANCE_MODE)
98  ) pxd_dly_i(
99  .clk (mclk),
100  .rst (rst),
101  .set (set_idelay),
102  .ld (ld_idelay),
103  .delay (dly_data[7:0]),
104  .data_in (pxd_iobuf),
105  .data_out (pxd_delayed)
106  );
107 
108  */
111  .DELAY_VALUE (IDELAY_VALUE),
114  ) pxd_dly_i(
115  .clk (mclk),
116  .rst (mrst),
117  .set (set_idelay),
118  .ld (ld_idelay),
119  .delay (dly_data[7:3]),
120  .data_in (pxd_iobuf),
122  );
123 
125  .DYN_CLKDIV_INV_EN("FALSE")
126  ) iserdes_pxd_i (
127  .iclk(ipclk2x), // source-synchronous clock
128  .oclk(ipclk2x), // system clock, phase should allow iclk-to-oclk jitter with setup/hold margin
129  .oclk_div(ipclk), // oclk divided by 2, front aligned
130  .inv_clk_div(1'b0), // invert oclk_div (this clock is shared between iserdes and oserdes. Works only in MEMORY_DDR3 mode?
131  .rst(irst), // reset
132  .d_direct(1'b0), // direct input from IOB, normally not used, controlled by IOBDELAY parameter (set to "NONE")
133  .ddly(pxd_delayed), // serial input from idelay
134  .dout(dout[3:0]), // parallel data out
135  .comb_out(pxd_async) // output
136  );
137 
138 endmodule
139 
6810PXD_IBUF_LOW_PWR"TRUE"
Definition: pxd_single.v:45
[1:0] 6828quadrant
Definition: pxd_single.v:65
integer 6809PXD_DRIVE12
Definition: pxd_single.v:44
6832pxd_rreg
Definition: pxd_single.v:70
integer 6808IDELAY_VALUE0
Definition: pxd_single.v:43
11290T
Definition: iobuf.v:51
[3:0] 11301dout
Definition: iserdes_mem.v:54
real 6813REFCLK_FREQUENCY300.0
Definition: pxd_single.v:48
iobuf_pxd_i iobuf
Definition: pxd_single.v:79
6807IODELAY_GRP"IODELAY_SENSOR"
Definition: pxd_single.v:42
[7:0] 6825dly_data
Definition: pxd_single.v:62
6829pxd_iobufwire
Definition: pxd_single.v:67
6814HIGH_PERFORMANCE_MODE"FALSE"
Definition: pxd_single.v:49
pxd_dly_i idelay_nofine
Definition: pxd_single.v:109
iserdes_pxd_i iserdes_mem
Definition: pxd_single.v:124
6811PXD_IOSTANDARD"DEFAULT"
Definition: pxd_single.v:46
11288IO
Definition: iobuf.v:49
6831doutwire[3:0]
Definition: pxd_single.v:69
[4:0] 11280delay
Definition: idelay_nofine.v:52
11287O
Definition: iobuf.v:48
6812PXD_SLEW"SLOW"
Definition: pxd_single.v:47
11289I
Definition: iobuf.v:50
6830pxd_delayedwire
Definition: pxd_single.v:68