x393  1.0
FPGAcodeforElphelNC393camera
sensor_channel.v
Go to the documentation of this file.
1 
39 `timescale 1ns/1ps
40 
42  // parameters, individual to sensor channels and those likely to be modified
43  parameter SENSOR_NUMBER = 0, // sensor number (0..3)
44  parameter SENSOR_GROUP_ADDR = 'h400, // sensor registers base address
45  parameter SENSOR_BASE_INC = 'h040, // increment for sesor channel
46  parameter SENSI2C_STATUS_REG_BASE = 'h20, // 4 locations" x30, x32, x34, x36
47  parameter SENSI2C_STATUS_REG_INC = 2, // increment to the next sensor
48  parameter SENSI2C_STATUS_REG_REL = 0, // 4 locations" 'h30, 'h32, 'h34, 'h36
49  parameter SENSIO_STATUS_REG_REL = 1, // 4 locations" 'h31, 'h33, 'h35, 'h37
50 
51  parameter SENS_SYNC_RADDR = 'h4,
52  parameter SENS_SYNC_MASK = 'h7fc,
53  // 2 locations reserved for control/status (if they will be needed)
54  parameter SENS_SYNC_MULT = 'h2, // relative register address to write number of frames to combine in one (minus 1, '0' - each farme)
55  parameter SENS_SYNC_LATE = 'h3, // number of lines to delay late frame sync
56  parameter SENS_SYNC_FBITS = 16, // number of bits in a frame counter for linescan mode
57  parameter SENS_SYNC_LBITS = 16, // number of bits in a line counter for sof_late output (limited by eof)
58  parameter SENS_SYNC_LATE_DFLT = 15, // number of lines to delay late frame sync
59  parameter SENS_SYNC_MINBITS = 8, // number of bits to enforce minimal frame period
60  parameter SENS_SYNC_MINPER = 130, // minimal frame period (in pclk/mclk?)
61 
62 
63  parameter SENSOR_NUM_HISTOGRAM= 3, // number of histogram channels
64  parameter HISTOGRAM_RAM_MODE = "BUF32", // "NOBUF", // valid: "NOBUF" (32-bits, no buffering), "BUF18", "BUF32"
65  parameter SENS_NUM_SUBCHN = 3, // number of subchannels for his sensor ports (1..4)
66  parameter SENS_GAMMA_BUFFER = 0, // 1 - use "shadow" table for clean switching, 0 - single table per channel
67 
68  // parameters defining address map
69  parameter SENSOR_CTRL_RADDR = 0, //'h00
70  parameter SENSOR_CTRL_ADDR_MASK = 'h7ff, //
71  // bits of the SENSOR mode register
72  parameter SENSOR_MODE_WIDTH = 10,
73  parameter SENSOR_HIST_EN_BITS = 0, // 0..3 1 - enable histogram modules, disable after processing the started frame
74  parameter SENSOR_HIST_NRST_BITS = 4, // 0 - immediately reset all histogram modules
75  parameter SENSOR_CHN_EN_BIT = 8, // 1 - this enable channel
76  parameter SENSOR_16BIT_BIT = 9, // 0 - 8 bpp mode, 1 - 16 bpp (bypass gamma). Gamma-processed data is still used for histograms
77 
78  parameter SENSI2C_CTRL_RADDR = 2, // 'h02..'h03
79  parameter SENSI2C_CTRL_MASK = 'h7fe,
80  // sensor_i2c_io relative control register addresses
81  parameter SENSI2C_CTRL = 'h0,
82  // Control register bits
83  parameter SENSI2C_CMD_TABLE = 29, // [29]: 1 - write to translation table (ignore any other fields), 0 - write other fields
84  parameter SENSI2C_CMD_TAND = 28, // [28]: 1 - write table address (8 bits), 0 - write table data (28 bits)
85 
86  parameter SENSI2C_CMD_RESET = 14, // [14] reset all FIFO (takes 16 clock pulses), also - stops i2c until run command
87  parameter SENSI2C_CMD_RUN = 13, // [13:12]3 - run i2c, 2 - stop i2c (needed before software i2c), 1,0 - no change to run state
88  parameter SENSI2C_CMD_RUN_PBITS = 1,
89  parameter SENSI2C_CMD_SOFT_SDA = 6, // [7:6] - SDA software control: 0 - nop, 1 - low, 2 - active high, 3 - float
90  parameter SENSI2C_CMD_SOFT_SCL = 4, // [5:4] - SCL software control: 0 - nop, 1 - low, 2 - active high, 3 - float
91  parameter SENSI2C_CMD_FIFO_RD = 3, // advance I2C read data FIFO by 1
92  parameter SENSI2C_CMD_ACIVE = 2, // [2] - SENSI2C_CMD_ACIVE_EARLY0, SENSI2C_CMD_ACIVE_SDA
93  parameter SENSI2C_CMD_ACIVE_EARLY0 = 1, // release SDA==0 early if next bit ==1
94  parameter SENSI2C_CMD_ACIVE_SDA = 0, // drive SDA=1 during the second half of SCL=1
95 
96  //i2c page table bit fields
97  parameter SENSI2C_TBL_RAH = 0, // high byte of the register address
98  parameter SENSI2C_TBL_RAH_BITS = 8,
99  parameter SENSI2C_TBL_RNWREG = 8, // read register (when 0 - write register
100  parameter SENSI2C_TBL_SA = 9, // Slave address in write mode
101  parameter SENSI2C_TBL_SA_BITS = 7,
102  parameter SENSI2C_TBL_NBWR = 16, // number of bytes to write (1..10)
103  parameter SENSI2C_TBL_NBWR_BITS = 4,
104  parameter SENSI2C_TBL_NBRD = 16, // number of bytes to read (1 - 8) "0" means "8"
105  parameter SENSI2C_TBL_NBRD_BITS = 3,
106  parameter SENSI2C_TBL_NABRD = 19, // number of address bytes for read (0 - 1 byte, 1 - 2 bytes)
107  parameter SENSI2C_TBL_DLY = 20, // bit delay (number of mclk periods in 1/4 of SCL period)
108  parameter SENSI2C_TBL_DLY_BITS= 8,
109 
110  parameter SENSI2C_STATUS = 'h1,
111 
112  parameter SENS_GAMMA_RADDR = 'h38, //4, 'h38..'h3b
113  parameter SENS_GAMMA_ADDR_MASK = 'h7fc,
114  // sens_gamma registers
115  parameter SENS_GAMMA_CTRL = 'h0,
116  parameter SENS_GAMMA_ADDR_DATA = 'h1, // bit 20 ==1 - table address, bit 20==0 - table data (18 bits)
117  parameter SENS_GAMMA_HEIGHT01 = 'h2, // bits [15:0] - height minus 1 of image 0, [31:16] - height-1 of image1
118  parameter SENS_GAMMA_HEIGHT2 = 'h3, // bits [15:0] - height minus 1 of image 2 ( no need for image 3)
119  // bits of the SENS_GAMMA_CTRL mode register
120  parameter SENS_GAMMA_MODE_WIDTH = 5, // does not include trig
121  parameter SENS_GAMMA_MODE_BAYER = 0,
122  parameter SENS_GAMMA_MODE_PAGE = 2,
123  parameter SENS_GAMMA_MODE_EN = 3,
124  parameter SENS_GAMMA_MODE_REPET = 4,
125  parameter SENS_GAMMA_MODE_TRIG = 5,
126 // Vignetting correction / pixel value scaling - controlled via single data word (same as in 252), some of bits [23:16]
127 // are used to select register, bits 25:24 - select sub-frame
128  parameter SENS_LENS_RADDR = 'h3c,
129  parameter SENS_LENS_ADDR_MASK = 'h7fc,
130  parameter SENS_LENS_COEFF = 'h3, // set vignetting/scale coefficients (
131  parameter SENS_LENS_AX = 'h00, // 00000...
132  parameter SENS_LENS_AX_MASK = 'hf8,
133  parameter SENS_LENS_AY = 'h08, // 00001...
134  parameter SENS_LENS_AY_MASK = 'hf8,
135  parameter SENS_LENS_C = 'h10, // 00010...
136  parameter SENS_LENS_C_MASK = 'hf8,
137  parameter SENS_LENS_BX = 'h20, // 001.....
138  parameter SENS_LENS_BX_MASK = 'he0,
139  parameter SENS_LENS_BY = 'h40, // 010.....
140  parameter SENS_LENS_BY_MASK = 'he0,
141  parameter SENS_LENS_SCALES = 'h60, // 01100...
142  parameter SENS_LENS_SCALES_MASK = 'hf8,
143  parameter SENS_LENS_FAT0_IN = 'h68, // 01101000
144  parameter SENS_LENS_FAT0_IN_MASK = 'hff,
145  parameter SENS_LENS_FAT0_OUT = 'h69, // 01101001
146  parameter SENS_LENS_FAT0_OUT_MASK = 'hff,
147  parameter SENS_LENS_POST_SCALE = 'h6a, // 01101010
148  parameter SENS_LENS_POST_SCALE_MASK = 'hff,
149 
150  parameter SENSIO_RADDR = 8, //'h408 .. 'h40f
151  parameter SENSIO_ADDR_MASK = 'h7f8,
152  // sens_parallel12 registers
153  parameter SENSIO_CTRL = 'h0,
154  // SENSIO_CTRL register bits
155  parameter SENS_CTRL_MRST = 0, // 1: 0
156  parameter SENS_CTRL_ARST = 2, // 3: 2
157  parameter SENS_CTRL_ARO = 4, // 5: 4
158  parameter SENS_CTRL_RST_MMCM = 6, // 7: 6
159 `ifdef HISPI
160  parameter SENS_CTRL_IGNORE_EMBED =8, // 9: 8
161 `else
162  parameter SENS_CTRL_EXT_CLK = 8, // 9: 8
163 `endif
164  parameter SENS_CTRL_LD_DLY = 10, // 10
165 `ifdef HISPI
166  parameter SENS_CTRL_GP0= 12, // 13:12
167  parameter SENS_CTRL_GP1= 14, // 15:14
168 `else
169  parameter SENS_CTRL_QUADRANTS = 12, // 17:12, enable - 20
170  parameter SENS_CTRL_QUADRANTS_WIDTH = 6,
171  parameter SENS_CTRL_QUADRANTS_EN = 20, // 17:12, enable - 20 (2 bits reserved)
172 `endif
173  parameter SENSIO_STATUS = 'h1,
174  parameter SENSIO_JTAG = 'h2,
175  // SENSIO_JTAG register bits
176  parameter SENS_JTAG_PGMEN = 8,
177  parameter SENS_JTAG_PROG = 6,
178  parameter SENS_JTAG_TCK = 4,
179  parameter SENS_JTAG_TMS = 2,
180  parameter SENS_JTAG_TDI = 0,
181 `ifndef HISPI
182  parameter SENSIO_WIDTH = 'h3, // 1.. 2^16, 0 - use HACT
183 `endif
184  parameter SENSIO_DELAYS = 'h4, // 'h4..'h7
185  // 4 of 8-bit delays per register
186  // sensor_i2c_io command/data write registers s (relative to SENSOR_BASE_ADDR)
187  parameter SENSI2C_ABS_RADDR = 'h10, // 'h410..'h41f
188  parameter SENSI2C_REL_RADDR = 'h20, // 'h420..'h42f
189  parameter SENSI2C_ADDR_MASK = 'h7f0, // both for SENSI2C_ABS_ADDR and SENSI2C_REL_ADDR
191  // sens_hist registers (relative to SENSOR_BASE_ADDR)
192  parameter HISTOGRAM_RADDR0 = 'h30, //
193  parameter HISTOGRAM_RADDR1 = 'h32, //
194  parameter HISTOGRAM_RADDR2 = 'h34, //
195  parameter HISTOGRAM_RADDR3 = 'h36, //
196  parameter HISTOGRAM_ADDR_MASK = 'h7fe, // for each channel
197  // sens_hist registers
198  parameter HISTOGRAM_LEFT_TOP = 'h0,
199  parameter HISTOGRAM_WIDTH_HEIGHT = 'h1, // 1.. 2^16, 0 - use HACT
200 
201  //sensor_i2c_io other parameters
202  parameter integer SENSI2C_DRIVE= 12,
203  parameter SENSI2C_IBUF_LOW_PWR= "TRUE",
204  parameter SENSI2C_SLEW = "SLOW",
205 
206  parameter NUM_FRAME_BITS = 4,
207 
208 `ifndef HISPI
209  //sensor_fifo parameters
210  parameter SENSOR_DATA_WIDTH = 12,
211  parameter SENSOR_FIFO_2DEPTH = 4,
212  parameter [3:0] SENSOR_FIFO_DELAY = 5, // 7,
213 `endif
214 
215  // sens_parallel12 other parameters
216 
217  parameter IODELAY_GRP ="IODELAY_SENSOR", // may need different for different channels?
218  parameter integer IDELAY_VALUE = 0,
219  parameter integer PXD_DRIVE = 12,
220  parameter PXD_IBUF_LOW_PWR = "TRUE",
221  parameter PXD_SLEW = "SLOW",
222  parameter real SENS_REFCLK_FREQUENCY = 300.0,
223  parameter SENS_HIGH_PERFORMANCE_MODE = "FALSE",
224 `ifdef HISPI
225  parameter PXD_CAPACITANCE = "DONT_CARE",
226  parameter PXD_CLK_DIV = 10, // 220MHz -> 22MHz
227  parameter PXD_CLK_DIV_BITS = 4,
228 //`else
229 // parameter SENS_PCLK_PERIOD = 10.000, // input period in ns, 0..100.000 - MANDATORY, resolution down to 1 ps
230 `endif
231 
232  parameter SENS_PHASE_WIDTH= 8, // number of bits for te phase counter (depends on divisors)
233  parameter SENS_BANDWIDTH = "OPTIMIZED", //"OPTIMIZED", "HIGH","LOW"
234 
235  // parameters for the sensor-synchronous clock PLL
236 `ifdef HISPI
237  parameter CLKIN_PERIOD_SENSOR = 3.000, // input period in ns, 0..100.000 - MANDATORY, resolution down to 1 ps
238  parameter CLKFBOUT_MULT_SENSOR = 3, // 330 MHz --> 990 MHz
239  parameter CLKFBOUT_PHASE_SENSOR = 0.000, // CLOCK FEEDBACK phase in degrees (3 significant digits, -360.000...+360.000)
240  parameter IPCLK_PHASE = 0.000,
241  parameter IPCLK2X_PHASE = 0.000,
242  parameter PXD_IOSTANDARD = "LVCMOS18",
243  parameter SENSI2C_IOSTANDARD = "LVCMOS18",
244 `else
245  parameter CLKIN_PERIOD_SENSOR = 10.000, // input period in ns, 0..100.000 - MANDATORY, resolution down to 1 ps
246  parameter CLKFBOUT_MULT_SENSOR = 8, // 100 MHz --> 800 MHz
247  parameter CLKFBOUT_PHASE_SENSOR = 0.000, // CLOCK FEEDBACK phase in degrees (3 significant digits, -360.000...+360.000)
248  parameter IPCLK_PHASE = 0.000,
249  parameter IPCLK2X_PHASE = 0.000,
250  parameter PXD_IOSTANDARD = "LVCMOS25",
251  parameter SENSI2C_IOSTANDARD = "LVCMOS25",
252 `endif
253 
254  parameter BUF_IPCLK = "BUFR",
255  parameter BUF_IPCLK2X = "BUFR",
257  parameter SENS_DIVCLK_DIVIDE = 1, // Integer 1..106. Divides all outputs with respect to CLKIN
258  parameter SENS_REF_JITTER1 = 0.010, // Expected jitter on CLKIN1 (0.000..0.999)
259  parameter SENS_REF_JITTER2 = 0.010,
260  parameter SENS_SS_EN = "FALSE", // Enables Spread Spectrum mode
261  parameter SENS_SS_MODE = "CENTER_HIGH",//"CENTER_HIGH","CENTER_LOW","DOWN_HIGH","DOWN_LOW"
262  parameter SENS_SS_MOD_PERIOD = 10000 // integer 4000-40000 - SS modulation period in ns
263 
264 `ifdef HISPI
265  ,parameter HISPI_MSB_FIRST = 0,
266  parameter HISPI_NUMLANES = 4,
267  parameter HISPI_DELAY_CLK = "FALSE",
268  parameter HISPI_MMCM = "TRUE",
269  parameter HISPI_KEEP_IRST = 5, // number of cycles to keep irst on after release of prst (small number - use 1 hot)
270  parameter HISPI_WAIT_ALL_LANES = 4'h8, // number of output pixel cycles to wait after the earliest lane
271  parameter HISPI_FIFO_DEPTH = 4,
272  parameter HISPI_FIFO_START = 7,
273  parameter HISPI_CAPACITANCE = "DONT_CARE",
274  parameter HISPI_DIFF_TERM = "TRUE",
275  parameter HISPI_UNTUNED_SPLIT = "FALSE", // Very power-hungry
276  parameter HISPI_DQS_BIAS = "TRUE",
277  parameter HISPI_IBUF_DELAY_VALUE = "0",
278  parameter HISPI_IBUF_LOW_PWR = "TRUE",
279  parameter HISPI_IFD_DELAY_VALUE = "AUTO",
280  parameter HISPI_IOSTANDARD = "DIFF_SSTL18_I" //"DIFF_SSTL18_II" for high current (13.4mA vs 8mA)
281 `endif
282 
283 `ifdef DEBUG_RING
284  ,parameter DEBUG_CMD_LATENCY = 2
285 `endif
286 
287 ) (
288 
289  input pclk, // global clock input, pixel rate (96MHz for MT9P006)
290  // TODO: get rid of pclk2x in histograms by doubling memories (making 1 write port and 2 read ones)
291  // How to erase?
292  // Alternative: copy/erase to a separate buffer in the beginning/end of a frame?
293 `ifdef USE_PCLK2X
294  input pclk2x, // global clock input, double pixel rate (192MHz for MT9P006)
295 `endif
296  input mrst, // @posedge mclk, sync reset
297  input prst, // @posedge pclk, sync reset
298 
299  // I/O pads, pin names match circuit diagram
300 `ifdef HISPI
301  input [3:0] sns_dp,
302  input [3:0] sns_dn,
303  inout [7:4] sns_dp74,
304  inout [7:4] sns_dn74,
305  input sns_clkp,
306  input sns_clkn,
307 `else
308  inout [7:0] sns_dp,
309  inout [7:0] sns_dn,
310  inout sns_clkp,
311  inout sns_clkn,
312 `endif
313  inout sns_scl,
314  inout sns_sda,
315 `ifdef HISPI
316  output sns_ctl,
317 `else
318  inout sns_ctl,
319 `endif
320  inout sns_pg,
321  // programming interface
322  input mclk, // global clock, half DDR3 clock, synchronizes all I/O through the command port
323  input [7:0] cmd_ad_in, // byte-serial command address/data (up to 6 bytes: AL-AH-D0-D1-D2-D3
324  input cmd_stb_in, // strobe (with first byte) for the command a/d
325  output [7:0] status_ad, // status address/data - up to 5 bytes: A - {seq,status[1:0]} - status[2:9] - status[10:17] - status[18:25]
326  output status_rq, // input request to send status downstream
327  input status_start, // Acknowledge of the first status packet byte (address)
329  input trigger_mode, // running in triggered mode (0 - free running mode)
330  input trig_in, // per-sensor trigger input
331 
332  input [NUM_FRAME_BITS-1:0] frame_num_seq, // frame number from the command sequencer (to sync i2c)
333 
335  // 16/8-bit mode data to memory (8-bits are packed by 2 in 16 mode @posedge pclk
336  output [15:0] dout, // @posedge pclk
337  output dout_valid, // in 8-bit mode continues pixel flow have dout_valid alternating on/off
338  output last_in_line, // valid with dout_valid - last in line dout
339 
340  output sof_out, // @pclk start of frame 1-clk pulse with the same delays as output data
341  output eof_out, // @pclk end of frame 1-clk pulse with the same delays as output data
342  output sof_out_mclk, // @mclk filtered, possibly decimated start of frame
343  output sof_late_mclk, // @mclk filtered, possibly decimated start of frame, delayed by specified number of lines
345  // histogram interface to S_AXI, 256x32bit continuous bursts @posedge mclk, each histogram having 4 bursts
346  output hist_request, // request to transfer a burst
347  input hist_grant, // request to transfer over S_AXI granted
348  output [1:0] hist_chn, // output[1:0] histogram (sub) channel, valid with request and transfer
349  output hist_dvalid, // output data valid - active when sending a burst
350  output [31:0] hist_data // output[31:0] histogram data
351 `ifdef DEBUG_RING
352  ,output debug_do, // output to the debug ring
353  input debug_sl, // 0 - idle, (1,0) - shift, (1,1) - load
354  input debug_di // input from the debug ring
355 `endif
356 
357 );
358 `ifdef DEBUG_RING
359  localparam DEBUG_RING_LENGTH = 5; // for now - just connect the histogram(s) module(s)
360  wire [DEBUG_RING_LENGTH:0] debug_ring; // TODO: adjust number of bits
361  assign debug_do = debug_ring[0];
363 `endif
364 
365 `ifdef USE_PCLK2X
366  localparam HIST_MONOCHROME = 1'b0; // TODO:make it configurable (at expense of extra hardware).
367  // No, will not use it - monochrome is rare, can combine
368  // 4 (color) histograms by the software.
369 `endif
375 // parameter SENSOR_BASE_ADDR = 'h300; // sensor registers base address
379  localparam SENSIO_ADDR = SENSOR_BASE_ADDR + SENSIO_RADDR;
387 
388 
389  reg [7:0] cmd_ad; // byte-serial command address/data (up to 6 bytes: AL-AH-D0-D1-D2-D3
390  reg cmd_stb; // strobe (with first byte) for the command a/d
393  wire [7:0] sens_i2c_status_ad;
394  wire sens_i2c_status_rq;
399 
400 `ifndef HISPI
401  wire ipclk; // Use in FIFO
402  wire [11:0] pxd_to_fifo;
403  wire vact_to_fifo; // frame active @posedge ipclk
404  wire hact_to_fifo; // line active @posedge ipclk
405 `endif
406  // data from FIFO
407  wire [11:0] pxd; // TODO: align MSB? parallel data, @posedge ipclk
408  wire hact; // line active @posedge ipclk
409  wire sof; // start of frame
410  wire eof; // end of frame
411 
412  wire sof_out_sync; // sof filtetred, optionally decimated (for linescan mode)
413 
414  wire [15:0] lens_pxd_in;
421  wire [15:0] gamma_pxd_in;
425  wire [1:0] gamma_bayer; // gamma module mode register bits -> lens_flat module
426 
427 
428  wire [7:0] gamma_pxd_out;
429  wire gamma_hact_out;
430  wire gamma_sof_out;
431  wire gamma_eof_out;
432 
433  wire [31:0] sensor_ctrl_data;
434  wire sensor_ctrl_we;
435  reg [SENSOR_MODE_WIDTH-1:0] mode;
436  wire [3:0] hist_en;
437  wire en_mclk; // enable this channel
438  wire en_pclk; // enable in pclk domain
439  wire [3:0] hist_nrst;
440  wire bit16; // 16-bit mode, 0 - 8 bit mode
441  wire [3:0] hist_rq;
442  wire [3:0] hist_gr;
443  wire [3:0] hist_dv;
444  wire [31:0] hist_do0;
445  wire [31:0] hist_do1;
446  wire [31:0] hist_do2;
447  wire [31:0] hist_do3;
448  reg [7:0] gamma_data_r;
449  reg [15:0] dout_r;
450  reg dav_8bit;
451  reg dav_r;
452  wire [15:0] dout_w;
453  wire dav_w;
454  wire trig;
455  reg sof_out_r;
456  reg eof_out_r;
457  wire prsts; // @pclk - includes sensor reset and sensor PLL reset
458 
459  // TODO: insert vignetting and/or flat field, pixel defects before gamma_*_in
460  assign lens_pxd_in = {pxd[11:0],4'b0};
461  assign lens_hact_in = hact;
462  assign lens_sof_in = sof_out_sync; // sof;
463  assign lens_eof_in = eof;
464 
465  assign dout = dout_r;
466  assign dout_valid = dav_r;
467  assign sof_out = sof_out_r;
468  assign eof_out = eof_out_r;
469 
470 // assign dout_w = bit16 ? gamma_pxd_in : {gamma_data_r,gamma_pxd_out};
471  assign dout_w = bit16 ? gamma_pxd_in : {gamma_pxd_out,gamma_data_r}; // earlier data in LSB, later - MSB
472  assign dav_w = bit16 ? gamma_hact_in : dav_8bit;
474 
475  assign en_mclk = mode[SENSOR_CHN_EN_BIT];
476  assign hist_en = mode[SENSOR_HIST_EN_BITS +: 4];
477  assign hist_nrst = mode[SENSOR_HIST_NRST_BITS +: 4];
478  assign bit16 = mode[SENSOR_16BIT_BIT];
479 
480 
481 `ifdef DEBUG_RING
482  `ifdef HISPI
483  `else
484  reg vact_to_fifo_r;
485  `endif
486  reg hact_to_fifo_r;
487  reg [15:0] debug_line_cntr;
488  reg [15:0] debug_lines;
489  reg [15:0] hact_cntr;
490  reg [15:0] vact_cntr;
491 `ifdef HISPI
492  always @(posedge pclk) begin
493 // vact_to_fifo_r <= vact_to_fifo;
494  hact_to_fifo_r <= hact;
495 
496  if (sof) debug_line_cntr <= 0;
497  else if (hact && !hact_to_fifo_r) debug_line_cntr <= debug_line_cntr + 1;
498 
500 
501  if (prst) hact_cntr <= 0;
502  else if (hact && !hact_to_fifo_r) hact_cntr <= hact_cntr + 1;
503 
504  if (prst) vact_cntr <= 0;
505  else if (sof) vact_cntr <= vact_cntr + 1;
506 
507  end
508 `else
509  always @(posedge ipclk) begin
510  vact_to_fifo_r <= vact_to_fifo;
511  hact_to_fifo_r <= hact_to_fifo;
512 
513  if (vact_to_fifo && !vact_to_fifo_r) debug_line_cntr <= 0;
514  else if (hact_to_fifo && !hact_to_fifo_r) debug_line_cntr <= debug_line_cntr + 1;
515 
516  if (vact_to_fifo && !vact_to_fifo_r) debug_lines <= debug_line_cntr;
517 
518  if (irst) hact_cntr <= 0;
519  else if (hact_to_fifo && !hact_to_fifo_r) hact_cntr <= hact_cntr + 1;
520 
521  if (irst) vact_cntr <= 0;
522  else if (vact_to_fifo && !vact_to_fifo_r) vact_cntr <= vact_cntr + 1;
523 
524  end
525 `endif
526  debug_slave #(
527  .SHIFT_WIDTH (128),
528  .READ_WIDTH (128),
529  .WRITE_WIDTH (32),
530  .DEBUG_CMD_LATENCY (DEBUG_CMD_LATENCY)
531  ) debug_slave_i (
532  .mclk (mclk), // input
533  .mrst (mrst), // input
534  .debug_di (debug_ring[5]), // input
535  .debug_sl (debug_sl), // input
536  .debug_do (debug_ring[4]), // output
537 // .rd_data ({height_m1[15:0], vcntr[15:0], width_m1[15:0], hcntr[15:0]}), // input[31:0]
538 // .rd_data ({vact_cntr[15:0], hact_cntr[15:0], debug_lines[15:0], debug_line_cntr[15:0]}), // input[31:0]
539 // .rd_data ({6'b0,hist_grant,hist_request, hist_gr[3:0], hist_rq[3:0], hact_cntr[15:0], debug_lines[15:0], debug_line_cntr[15:0]}), // input[31:0]
540  .rd_data ({
541  lens_pxd_in, gamma_pxd_in[15:0],
542 `ifdef HISPI
543  12'b0,
544 `else
545  pxd_to_fifo[11:0],
546 `endif
547  pxd[11:0],gamma_pxd_out[7:0],
548  6'b0,hist_grant,hist_request, hist_gr[3:0], hist_rq[3:0], hact_cntr[15:0],
549  debug_lines[15:0], debug_line_cntr[15:0]}), // input[31:0]
550 
551 //debug_lines <= debug_line_cntr
552  .wr_data (), // output[31:0] - not used
553  .stb () // output - not used
554  );
555 `endif
556 
557 
558  always @ (posedge mclk) begin
559  cmd_ad <= cmd_ad_in;
560  cmd_stb <= cmd_stb_in;
561  end
562 
563  always @ (posedge mclk) begin
564  if (mrst) mode <= 0;
566  end
567 
568  always @ (posedge pclk) begin
569  if (dav_w) dout_r <= dout_w;
571  dav_r <= dav_w;
572 
574 
576 
579  end
580 
581  level_cross_clocks level_cross_clocks_en_pclk_i (.clk(pclk), .d_in(en_mclk), .d_out(en_pclk));
582 
583  status_router2 status_router2_sensor_i (
584  .rst (1'b0), //rst), // input
585  .clk (mclk), // input
586  .srst (mrst), // input
587  .db_in0 (sens_i2c_status_ad), // input[7:0]
588  .rq_in0 (sens_i2c_status_rq), // input
589  .start_in0 (sens_i2c_status_start), // output
590  .db_in1 (sens_phys_status_ad), // input[7:0]
591  .rq_in1 (sens_phys_status_rq), // input
592  .start_in1 (sens_phys_status_start), // output
593  .db_out (status_ad), // output[7:0]
594  .rq_out (status_rq), // output
595  .start_out (status_start) // input
596  );
597 
598  cmd_deser #(
599  .ADDR (SENSOR_CTRL_ADDR),
600  .ADDR_MASK (SENSOR_CTRL_ADDR_MASK),
601  .NUM_CYCLES (6),
602  .ADDR_WIDTH (1),
603  .DATA_WIDTH (32)
604  ) cmd_deser_sens_channel_i (
605  .rst (1'b0), // rst), // input
606  .clk (mclk), // input
607  .srst (mrst), // input
608  .ad (cmd_ad), // input[7:0]
609  .stb (cmd_stb), // input
610  .addr (), // output[0:0] - not used
611  .data (sensor_ctrl_data), // output[31:0]
612  .we (sensor_ctrl_we) // output
613  );
614 
615  sensor_i2c_io #(
635  .SENSI2C_TBL_RAH (SENSI2C_TBL_RAH), // high byte of the register address
637  .SENSI2C_TBL_RNWREG (SENSI2C_TBL_RNWREG), // read register (when 0 - write register
638  .SENSI2C_TBL_SA (SENSI2C_TBL_SA), // Slave address in write mode
640  .SENSI2C_TBL_NBWR (SENSI2C_TBL_NBWR), // number of bytes to write (1..10)
642  .SENSI2C_TBL_NBRD (SENSI2C_TBL_NBRD), // number of bytes to read (1 - 8) "0" means "8"
644  .SENSI2C_TBL_NABRD (SENSI2C_TBL_NABRD), // number of address bytes for read (0 - 1 byte, 1 - 2 bytes)
645  .SENSI2C_TBL_DLY (SENSI2C_TBL_DLY), // bit delay (number of mclk periods in 1/4 of SCL period)
652  ) sensor_i2c_io_i (
653  .mrst (mrst), // input
654  .mclk (mclk), // input
655  .cmd_ad (cmd_ad), // input[7:0]
656  .cmd_stb (cmd_stb), // input
657  .status_ad (sens_i2c_status_ad), // output[7:0]
658  .status_rq (sens_i2c_status_rq), // output
660  .frame_sync (sof_out_mclk), // input
661  .frame_num_seq (frame_num_seq), // input[3:0]
662  .scl (sns_scl), // inout
663  .sda (sns_sda) // inout
664  );
665 
666 // debug_hist_mclk is never active, alive_hist0_rq == 0
667 // assign status_alive = {last_in_line_1cyc_mclk, dout_valid_1cyc_mclk, alive_hist0_gr, alive_hist0_rq, sof_out_mclk, eof_mclk, sof_mclk, sol_mclk};
668 // assign status_alive = {last_in_line_1cyc_mclk, dout_valid_1cyc_mclk, debug_hist_mclk[0], alive_hist0_rq, sof_out_mclk, eof_mclk, sof_mclk, sol_mclk};
669 `ifndef HISPI
670  reg hact_r; // hact delayed by 1 cycle to generate start pulse
671  reg dout_valid_d_pclk; //@ pclk - delayed by 1 clk from dout_valid to detect edge
672  reg last_in_line_d_pclk; //@ pclk - delayed by 1 clk from last_in_line to detect edge
673  reg hist_rq0_r;
674  reg hist_gr0_r;
675  wire sol_mclk;
676  wire sof_mclk;
677  wire eof_mclk;
678  wire alive_hist0_rq = hist_rq[0] && !hist_rq0_r;
679  wire alive_hist0_gr = hist_gr[0] && !hist_gr0_r;
680  // sof_out_mclk - already exists
681  wire dout_valid_1cyc_mclk;
682  wire last_in_line_1cyc_mclk;
683 // wire [3:0] debug_hist_mclk;
684  wire irst; // @ posedge ipclk
685  localparam STATUS_ALIVE_WIDTH = 8;
686  wire [STATUS_ALIVE_WIDTH - 1 : 0] status_alive;
687  assign status_alive = {last_in_line_1cyc_mclk, dout_valid_1cyc_mclk, alive_hist0_gr, alive_hist0_rq,
688  sof_out_mclk, eof_mclk, sof_mclk, sol_mclk};
689  always @ (posedge mclk) begin
690  hist_rq0_r <= hist_rq[0];
691  hist_gr0_r <= hist_gr[0];
692  end
693 
694  always @ (posedge pclk) begin
695  hact_r <= gamma_hact_out;
696  dout_valid_d_pclk <= dout_valid;
697  last_in_line_d_pclk <= last_in_line;
698  end
699 
700 
701  // for debug/test alive
702  pulse_cross_clock pulse_cross_clock_sol_mclk_i (
703 // .rst (prst), // input
704  .rst (prsts), // input extended to include sensor reset and rst_mmcm
705  .src_clk (pclk), // input
706  .dst_clk (mclk), // input
707  // .in_pulse (hact && !hact_r), // input
708  .in_pulse (gamma_hact_out && !hact_r), // input
709  .out_pulse (sol_mclk), // output
710  .busy() // output
711  );
712 
713  pulse_cross_clock pulse_cross_clock_sof_mclk_i (
714 // .rst (prst), // input
715  .rst (prsts), // input extended to include sensor reset and rst_mmcm
716  .src_clk (pclk), // input
717  .dst_clk (mclk), // input
718  // .in_pulse (sof), // input
719  .in_pulse (gamma_sof_out), // input
720  .out_pulse (sof_mclk), // output
721  .busy() // output
722  );
723 
724  pulse_cross_clock pulse_cross_clock_eof_mclk_i (
725 // .rst (prst), // input
726  .rst (prsts), // input extended to include sensor reset and rst_mmcm
727  .src_clk (pclk), // input
728  .dst_clk (mclk), // input
729  .in_pulse (eof), // input
730  .out_pulse (eof_mclk), // output
731  .busy() // output
732  );
733 
734  pulse_cross_clock pulse_cross_clock_dout_valid_1cyc_mclk_i (
735 // .rst (prst), // input
736  .rst (prsts), // input extended to include sensor reset and rst_mmcm
737  .src_clk (pclk), // input
738  .dst_clk (mclk), // input
739  .in_pulse (dout_valid && !dout_valid_d_pclk), // input
740  .out_pulse (dout_valid_1cyc_mclk), // output
741  .busy() // output
742  );
743 
744  pulse_cross_clock pulse_cross_clock_last_in_line_1cyc_mclk_i (
745 // .rst (prst), // input
746  .rst (prsts), // input extended to include sensor reset and rst_mmcm
747  .src_clk (pclk), // input
748  .dst_clk (mclk), // input
749  .in_pulse (last_in_line && !last_in_line_d_pclk), // input
750  .out_pulse (last_in_line_1cyc_mclk), // output
751  .busy() // output
752  );
753 
754 `endif
755 
756 
757 
758 
759 `ifdef HISPI
760  sens_10398 #(
783  .REFCLK_FREQUENCY (SENS_REFCLK_FREQUENCY),
784  .HIGH_PERFORMANCE_MODE (SENS_HIGH_PERFORMANCE_MODE),
786 // .SENS_PCLK_PERIOD (SENS_PCLK_PERIOD),
793  .BUF_IPCLK (BUF_IPCLK),
800  .SENS_SS_MOD_PERIOD (SENS_SS_MOD_PERIOD),
816  .HISPI_IOSTANDARD (HISPI_IOSTANDARD),
817  .PXD_DRIVE (PXD_DRIVE),
820  .PXD_SLEW (PXD_SLEW),
824  ) sens_10398_i (
825  .pclk (pclk), // input
826  .prst (prst), // input
827  .prsts (prsts), // output
828  .mclk (mclk), // input
829  .mrst (mrst), // input
830  .cmd_ad (cmd_ad), // input[7:0]
831  .cmd_stb (cmd_stb), // input
832  .status_ad (sens_phys_status_ad), // output[7:0]
833  .status_rq (sens_phys_status_rq), // output
835  .trigger_mode (trigger_mode), // input
836  .trig (trig), // input
837  .sns_dp (sns_dp[3:0]), // input[3:0]
838  .sns_dn (sns_dn[3:0]), // input[3:0]
839  .sns_clkp (sns_clkp), // input
840  .sns_clkn (sns_clkn), // input
841  .sens_ext_clk_p (sns_dp74[6]), // output
842  .sens_ext_clk_n (sns_dn74[6]), // output
843  .sns_pgm (sns_pg), // inout
844  .sns_ctl_tck (sns_ctl), // output
845  .sns_mrst (sns_dp74[7]), // output
846  .sns_arst_tms (sns_dn74[7]), // output
847  .sns_gp0_tdi (sns_dp74[5]), // output
848  .sns_gp1 (sns_dn74[5]), // output
849  .sns_flash_tdo (sns_dp74[4]), // input
850  .sns_shutter_done (sns_dn74[4]), // input
851  .pxd (pxd), // output[11:0]
852  .hact (hact), // output
853  .sof (sof), // output
854  .eof (eof) // output
855  );
857 `else
858  sens_parallel12 #(
859  .SENSIO_ADDR (SENSIO_ADDR),
860  .SENSIO_ADDR_MASK (SENSIO_ADDR_MASK),
861  .SENSIO_CTRL (SENSIO_CTRL),
862  .SENSIO_STATUS (SENSIO_STATUS),
863  .SENSIO_JTAG (SENSIO_JTAG),
864  .SENSIO_WIDTH (SENSIO_WIDTH),
865  .SENSIO_DELAYS (SENSIO_DELAYS),
866  .SENSIO_STATUS_REG (SENSIO_STATUS_REG),
867  .SENS_JTAG_PGMEN (SENS_JTAG_PGMEN),
868  .SENS_JTAG_PROG (SENS_JTAG_PROG),
869  .SENS_JTAG_TCK (SENS_JTAG_TCK),
870  .SENS_JTAG_TMS (SENS_JTAG_TMS),
871  .SENS_JTAG_TDI (SENS_JTAG_TDI),
872  .SENS_CTRL_MRST (SENS_CTRL_MRST),
873  .SENS_CTRL_ARST (SENS_CTRL_ARST),
874  .SENS_CTRL_ARO (SENS_CTRL_ARO),
875  .SENS_CTRL_RST_MMCM (SENS_CTRL_RST_MMCM),
876  .SENS_CTRL_EXT_CLK (SENS_CTRL_EXT_CLK),
877  .SENS_CTRL_LD_DLY (SENS_CTRL_LD_DLY),
878  .SENS_CTRL_QUADRANTS (SENS_CTRL_QUADRANTS),
879  .SENS_CTRL_QUADRANTS_WIDTH (SENS_CTRL_QUADRANTS_WIDTH),
880  .SENS_CTRL_QUADRANTS_EN (SENS_CTRL_QUADRANTS_EN),
881  .IODELAY_GRP (IODELAY_GRP),
882  .IDELAY_VALUE (IDELAY_VALUE),
883  .PXD_DRIVE (PXD_DRIVE),
884  .PXD_IOSTANDARD (PXD_IOSTANDARD),
885  .PXD_SLEW (PXD_SLEW),
886  .SENS_REFCLK_FREQUENCY (SENS_REFCLK_FREQUENCY),
887  .SENS_HIGH_PERFORMANCE_MODE (SENS_HIGH_PERFORMANCE_MODE),
888  .SENS_PHASE_WIDTH (SENS_PHASE_WIDTH),
889 // .SENS_PCLK_PERIOD (SENS_PCLK_PERIOD),
890  .SENS_BANDWIDTH (SENS_BANDWIDTH),
891  .CLKIN_PERIOD_SENSOR (CLKIN_PERIOD_SENSOR),
892  .CLKFBOUT_MULT_SENSOR (CLKFBOUT_MULT_SENSOR),
893  .CLKFBOUT_PHASE_SENSOR (CLKFBOUT_PHASE_SENSOR),
894  .IPCLK_PHASE (IPCLK_PHASE),
895  .IPCLK2X_PHASE (IPCLK2X_PHASE),
896  .PXD_IBUF_LOW_PWR (PXD_IBUF_LOW_PWR),
897  .BUF_IPCLK (BUF_IPCLK),
898  .BUF_IPCLK2X (BUF_IPCLK2X),
899  .SENS_DIVCLK_DIVIDE (SENS_DIVCLK_DIVIDE),
900  .SENS_REF_JITTER1 (SENS_REF_JITTER1),
901  .SENS_REF_JITTER2 (SENS_REF_JITTER2),
902  .SENS_SS_EN (SENS_SS_EN),
903  .SENS_SS_MODE (SENS_SS_MODE),
904  .SENS_SS_MOD_PERIOD (SENS_SS_MOD_PERIOD),
905  .STATUS_ALIVE_WIDTH (STATUS_ALIVE_WIDTH)
906  ) sens_parallel12_i (
907 // .rst (rst), // input
908  .pclk (pclk), // input
909  .mclk_rst (mrst), // input
910  .prst (prst), // input
911  .prsts (prsts), // output
912  .irst (irst), // output
913  .ipclk (ipclk), // output
914  .ipclk2x (), // ipclk2x), // output
915  .trigger_mode (trigger_mode), // input
916  .trig (trig), // input
917  .vact (sns_dn[1]), // input
918  .hact (sns_dp[1]), // input
919  .bpf (sns_dn[0]), // inout
920  .pxd ({sns_dn[6],sns_dp[6],sns_dn[5],sns_dp[5],sns_dn[4],sns_dp[4],sns_dn[3],sns_dp[3],sns_dn[2],sns_dp[2],sns_clkp,sns_clkn}), // inout[11:0]
921  .mrst (sns_dp[7]), // inout
922  .senspgm (sns_pg), // inout
923  .arst (sns_dn[7]), // inout
924  .aro (sns_ctl), // inout
925  .dclk (sns_dp[0]), // output
926  .pxd_out (pxd_to_fifo[11:0]), // output[11:0] @posedge ipclk
927  .vact_out (vact_to_fifo), // output @posedge ipclk
928  .hact_out (hact_to_fifo), // output @posedge ipclk: either delayed input, or regenerated from the leading edge and programmable duration
929  .status_alive_1cyc (status_alive), // input [3:0] @ posedge mclk, each bit single cycle pulse
930  .mclk (mclk), // input
931  .cmd_ad (cmd_ad), // input[7:0]
932  .cmd_stb (cmd_stb), // input
933  .status_ad (sens_phys_status_ad), // output[7:0]
934  .status_rq (sens_phys_status_rq), // output
935  .status_start (sens_phys_status_start) // input
936  );
937 
938  sensor_fifo #(
939  .SENSOR_DATA_WIDTH (SENSOR_DATA_WIDTH),
940  .SENSOR_FIFO_2DEPTH (SENSOR_FIFO_2DEPTH),
941  .SENSOR_FIFO_DELAY (SENSOR_FIFO_DELAY)
942  ) sensor_fifo_i (
943  // .rst (rst), // input
944  .iclk (ipclk), // input
945  .pclk (pclk), // input
946 // .prst (prst), // input
947  .prst (prsts), // input extended to include sensor reset and rst_mmcm
948 
949  .irst (irst), // input
950  .pxd_in (pxd_to_fifo), // input[11:0]
951  .vact (vact_to_fifo), // input
952  .hact (hact_to_fifo), // input
953  .pxd_out (pxd), // output[11:0] @posedge pclk
954  .data_valid (hact), // output @posedge pclk
955  .sof (sof), // output @posedge pclk
956  .eof (eof) // output @posedge pclk
957  );
958 `endif
959  sens_sync #(
969  ) sens_sync_i (
970  .pclk (pclk), // input
971  .mclk (mclk), // input
972  .mrst (mrst), // input
973 // .prst (prst), // input
974  .prst (prsts), // input extended to include sensor reset and rst_mmcm
975  .en (en_pclk), // input @pclk
976  .sof_in (sof), // input
977  .eof_in (eof), // input
978  .hact (hact), // input
979  .trigger_mode (trigger_mode), // input
980  .trig_in (trig_in), // input
981  .trig (trig), // output @pclk
982  .sof_out_pclk (sof_out_sync), // output reg @pclk
983  .sof_out (sof_out_mclk), // output @mclk
984  .sof_late (sof_late_mclk), // output @mclk
985  .cmd_ad (cmd_ad), // input[7:0]
986  .cmd_stb (cmd_stb) // input
987  );
988 
989  lens_flat393 #(
1012  .SENS_LENS_F_WIDTH (19),
1013  .SENS_LENS_F_SHIFT (22),
1014  .SENS_LENS_B_SHIFT (12),
1015  .SENS_LENS_A_WIDTH (19),
1016  .SENS_LENS_B_WIDTH (21)
1017  ) lens_flat393_i (
1018 // .prst (prst), // input
1019  .prst (prsts), // input extended to include sensor reset and rst_mmcm
1020  .pclk (pclk), // input
1021  .mrst (mrst), // input
1022  .mclk (mclk), // input
1023  .cmd_ad (cmd_ad), // input[7:0]
1024  .cmd_stb (cmd_stb), // input
1025  .pxd_in (lens_pxd_in), // input[15:0]
1026  .hact_in (lens_hact_in), // input
1027  .sof_in (lens_sof_in), // input
1028  .eof_in (lens_eof_in), // input
1029  .pxd_out (gamma_pxd_in), // output[15:0] reg
1030  .hact_out (gamma_hact_in), // output
1031  .sof_out (gamma_sof_in), // output
1032  .eof_out (gamma_eof_in), // output
1033  .bayer (gamma_bayer), // input[1:0] // from gamma module
1034  .subchannel(), // output[1:0] - RFU
1035  .last_in_sub() // output - RFU
1036  );
1037 
1053  ) sens_gamma_i (
1054 // .rst (rst), // input
1055  .pclk (pclk), // input
1056  .mrst (mrst), // input
1057 // .prst (prst), // input
1058  .prst (prsts), // input extended to include sensor reset and rst_mmcm
1059  .pxd_in (gamma_pxd_in), // input[15:0]
1060  .hact_in (gamma_hact_in), // input
1061  .sof_in (gamma_sof_in), // input
1062  .eof_in (gamma_eof_in), // input
1063  .trig_in (1'b0), // input (use trig_soft)
1064  .pxd_out (gamma_pxd_out), // output[7:0]
1065  .hact_out (gamma_hact_out), // output
1066  .sof_out (gamma_sof_out), // output
1067  .eof_out (gamma_eof_out), // output
1068  .mclk (mclk), // input
1069  .cmd_ad (cmd_ad), // input[7:0]
1070  .cmd_stb (cmd_stb), // input
1071  .bayer_out (gamma_bayer) // output [1:0]
1072  );
1073 
1074  // TODO: Use generate to generate 1-4 histogram modules
1075  generate
1076  if (HISTOGRAM_ADDR0 != -1)
1077 `ifdef USE_PCLK2X
1078  sens_histogram #(
1079  .HISTOGRAM_RAM_MODE (HISTOGRAM_RAM_MODE),
1080  .HISTOGRAM_ADDR (HISTOGRAM_ADDR0),
1081  .HISTOGRAM_ADDR_MASK (HISTOGRAM_ADDR_MASK),
1082  .HISTOGRAM_LEFT_TOP (HISTOGRAM_LEFT_TOP),
1083  .HISTOGRAM_WIDTH_HEIGHT (HISTOGRAM_WIDTH_HEIGHT)
1084  `ifdef DEBUG_RING
1085  ,.DEBUG_CMD_LATENCY (DEBUG_CMD_LATENCY)
1086  `endif
1087  ) sens_histogram_0_i (
1088  .mrst (mrst), // input
1089  .prst (prsts), // input extended to include sensor reset and rst_mmcm
1090  .pclk (pclk), // input
1091  .pclk2x (pclk2x), // input
1092  .sof (gamma_sof_out), // input
1093  .eof (gamma_eof_out), // input
1094  .hact (gamma_hact_out), // input
1095  .hist_di (gamma_pxd_out), // input[7:0]
1096  .mclk (mclk), // input
1097  .hist_en (hist_en[0]), // input
1098  .hist_rst (!hist_nrst[0]), // input
1099  .hist_rq (hist_rq[0]), // output
1100  .hist_grant (hist_gr[0]), // input
1101  .hist_do (hist_do0), // output[31:0]
1102  .hist_dv (hist_dv[0]), // output
1103  .cmd_ad (cmd_ad), // input[7:0]
1104  .cmd_stb (cmd_stb), // input
1105  .monochrome (HIST_MONOCHROME) // input
1106 // ,.debug_mclk(debug_hist_mclk[0])
1107  `ifdef DEBUG_RING
1108  ,.debug_do (debug_ring[0]), // output
1109  .debug_sl (debug_sl), // input
1110  .debug_di (debug_ring[1]) // input
1111  `endif
1112 
1113  );
1114  else
1115  sens_histogram_dummy sens_histogram_0_i (
1116  .hist_rq (hist_rq[0]), // output
1117  .hist_do (hist_do0), // output[31:0]
1118  .hist_dv (hist_dv[0]) // output
1119  `ifdef DEBUG_RING
1120  ,.debug_do (debug_ring[0]), // output
1121  .debug_di (debug_ring[1]) // input
1122  `endif
1123  );
1124 // `ifdef USE_PCLK2X
1125 `else
1128  .HISTOGRAM_ADDR (HISTOGRAM_ADDR0),
1132  `ifdef DEBUG_RING
1133  ,.DEBUG_CMD_LATENCY (DEBUG_CMD_LATENCY)
1134  `endif
1135  ) sens_histogram_0_i (
1136  .mrst (mrst), // input
1137  .prst (prsts), // input extended to include sensor reset and rst_mmcm
1138  .pclk (pclk), // input
1139  .sof (gamma_sof_out), // input
1140  .eof (gamma_eof_out), // input
1141  .hact (gamma_hact_out), // input
1142  .hist_di (gamma_pxd_out), // input[7:0]
1143  .mclk (mclk), // input
1144  .hist_en (hist_en[0]), // input
1145  .hist_rst (!hist_nrst[0]), // input
1146  .hist_rq (hist_rq[0]), // output
1147  .hist_grant (hist_gr[0]), // input
1148  .hist_do (hist_do0), // output[31:0]
1149  .hist_dv (hist_dv[0]), // output
1150  .cmd_ad (cmd_ad), // input[7:0]
1151  .cmd_stb (cmd_stb) // input
1152  `ifdef DEBUG_RING
1153  ,.debug_do (debug_ring[0]), // output
1154  .debug_sl (debug_sl), // input
1155  .debug_di (debug_ring[1]) // input
1156  `endif
1157 
1158  );
1159  else
1160  sens_histogram_snglclk_dummy sens_histogram_0_i (
1161  .hist_rq (hist_rq[0]), // output
1162  .hist_do (hist_do0), // output[31:0]
1163  .hist_dv (hist_dv[0]) // output
1164  `ifdef DEBUG_RING
1165  ,.debug_do (debug_ring[0]), // output
1166  .debug_di (debug_ring[1]) // input
1167  `endif
1168  );
1169 // `ifdef USE_PCLK2X
1170 `endif
1171  endgenerate
1172 
1173 
1174  generate
1175  if (HISTOGRAM_ADDR1 != -1)
1176 `ifdef USE_PCLK2X
1177  sens_histogram #(
1178  .HISTOGRAM_RAM_MODE (HISTOGRAM_RAM_MODE),
1179  .HISTOGRAM_ADDR (HISTOGRAM_ADDR1),
1180  .HISTOGRAM_ADDR_MASK (HISTOGRAM_ADDR_MASK),
1181  .HISTOGRAM_LEFT_TOP (HISTOGRAM_LEFT_TOP),
1182  .HISTOGRAM_WIDTH_HEIGHT (HISTOGRAM_WIDTH_HEIGHT)
1183  `ifdef DEBUG_RING
1184  ,.DEBUG_CMD_LATENCY (DEBUG_CMD_LATENCY)
1185  `endif
1186  ) sens_histogram_1_i (
1187  .mrst (mrst), // input
1188  .prst (prsts), // input extended to include sensor reset and rst_mmcm
1189  .pclk (pclk), // input
1190  .pclk2x (pclk2x), // input
1191  .sof (gamma_sof_out), // input
1192  .eof (gamma_eof_out), // input
1193  .hact (gamma_hact_out), // input
1194  .hist_di (gamma_pxd_out), // input[7:0]
1195  .mclk (mclk), // input
1196  .hist_en (hist_en[1]), // input
1197  .hist_rst (!hist_nrst[1]), // input
1198  .hist_rq (hist_rq[1]), // output
1199  .hist_grant (hist_gr[1]), // input
1200  .hist_do (hist_do1), // output[31:0]
1201  .hist_dv (hist_dv[1]), // output
1202  .cmd_ad (cmd_ad), // input[7:0]
1203  .cmd_stb (cmd_stb), // input
1204  .monochrome (HIST_MONOCHROME) // input
1205  `ifdef DEBUG_RING
1206  ,.debug_do (debug_ring[1]), // output
1207  .debug_sl (debug_sl), // input
1208  .debug_di (debug_ring[2]) // input
1209  `endif
1210  );
1211  else
1212  sens_histogram_dummy sens_histogram_1_i (
1213  .hist_rq (hist_rq[1]), // output
1214  .hist_do (hist_do1), // output[31:0]
1215  .hist_dv (hist_dv[1]) // output
1216  `ifdef DEBUG_RING
1217  ,.debug_do (debug_ring[1]), // output
1218  .debug_di (debug_ring[2]) // input
1219  `endif
1220  );
1221 // `ifdef USE_PCLK2X
1222 `else
1225  .HISTOGRAM_ADDR (HISTOGRAM_ADDR1),
1229  `ifdef DEBUG_RING
1230  ,.DEBUG_CMD_LATENCY (DEBUG_CMD_LATENCY)
1231  `endif
1232  ) sens_histogram_1_i (
1233  .mrst (mrst), // input
1234  .prst (prsts), // input extended to include sensor reset and rst_mmcm
1235  .pclk (pclk), // input
1236  .sof (gamma_sof_out), // input
1237  .eof (gamma_eof_out), // input
1238  .hact (gamma_hact_out), // input
1239  .hist_di (gamma_pxd_out), // input[7:0]
1240  .mclk (mclk), // input
1241  .hist_en (hist_en[1]), // input
1242  .hist_rst (!hist_nrst[1]), // input
1243  .hist_rq (hist_rq[1]), // output
1244  .hist_grant (hist_gr[1]), // input
1245  .hist_do (hist_do1), // output[31:0]
1246  .hist_dv (hist_dv[1]), // output
1247  .cmd_ad (cmd_ad), // input[7:0]
1248  .cmd_stb (cmd_stb) // input
1249  `ifdef DEBUG_RING
1250  ,.debug_do (debug_ring[1]), // output
1251  .debug_sl (debug_sl), // input
1252  .debug_di (debug_ring[2]) // input
1253  `endif
1254  );
1255  else
1256  sens_histogram_snglclk_dummy sens_histogram_1_i (
1257  .hist_rq (hist_rq[1]), // output
1258  .hist_do (hist_do1), // output[31:0]
1259  .hist_dv (hist_dv[1]) // output
1260  `ifdef DEBUG_RING
1261  ,.debug_do (debug_ring[1]), // output
1262  .debug_di (debug_ring[2]) // input
1263  `endif
1264  );
1265 // `ifdef USE_PCLK2X
1266 `endif
1267  endgenerate
1268 
1269  generate
1270  if (HISTOGRAM_ADDR2 != -1)
1271 `ifdef USE_PCLK2X
1272  sens_histogram #(
1273  .HISTOGRAM_RAM_MODE (HISTOGRAM_RAM_MODE),
1274  .HISTOGRAM_ADDR (HISTOGRAM_ADDR2),
1275  .HISTOGRAM_ADDR_MASK (HISTOGRAM_ADDR_MASK),
1276  .HISTOGRAM_LEFT_TOP (HISTOGRAM_LEFT_TOP),
1277  .HISTOGRAM_WIDTH_HEIGHT (HISTOGRAM_WIDTH_HEIGHT)
1278 `ifdef DEBUG_RING
1279  ,.DEBUG_CMD_LATENCY (DEBUG_CMD_LATENCY)
1280 `endif
1281  ) sens_histogram_2_i (
1282  .mrst (mrst), // input
1283  .prst (prsts), // input extended to include sensor reset and rst_mmcm
1284  .pclk (pclk), // input
1285  .pclk2x (pclk2x), // input
1286  .sof (gamma_sof_out), // input
1287  .eof (gamma_eof_out), // input
1288  .hact (gamma_hact_out), // input
1289  .hist_di (gamma_pxd_out), // input[7:0]
1290  .mclk (mclk), // input
1291  .hist_en (hist_en[2]), // input
1292  .hist_rst (!hist_nrst[2]), // input
1293  .hist_rq (hist_rq[2]), // output
1294  .hist_grant (hist_gr[2]), // input
1295  .hist_do (hist_do2), // output[31:0]
1296  .hist_dv (hist_dv[2]), // output
1297  .cmd_ad (cmd_ad), // input[7:0]
1298  .cmd_stb (cmd_stb), // input
1299  .monochrome (HIST_MONOCHROME) // input
1300 `ifdef DEBUG_RING
1301  ,.debug_do (debug_ring[2]), // output
1302  .debug_sl (debug_sl), // input
1303  .debug_di (debug_ring[3]) // input
1304 `endif
1305  );
1306  else
1307  sens_histogram_dummy sens_histogram_2_i (
1308  .hist_rq(hist_rq[2]), // output
1309  .hist_do(hist_do2), // output[31:0]
1310  .hist_dv(hist_dv[2]) // output
1311 `ifdef DEBUG_RING
1312  ,.debug_do (debug_ring[2]), // output
1313  .debug_di (debug_ring[3]) // input
1314 `endif
1315  );
1316 // `ifdef USE_PCLK2X
1317 `else
1320  .HISTOGRAM_ADDR (HISTOGRAM_ADDR2),
1324 `ifdef DEBUG_RING
1325  ,.DEBUG_CMD_LATENCY (DEBUG_CMD_LATENCY)
1326 `endif
1327  ) sens_histogram_2_i (
1328  .mrst (mrst), // input
1329  .prst (prsts), // input extended to include sensor reset and rst_mmcm
1330  .pclk (pclk), // input
1331  .sof (gamma_sof_out), // input
1332  .eof (gamma_eof_out), // input
1333  .hact (gamma_hact_out), // input
1334  .hist_di (gamma_pxd_out), // input[7:0]
1335  .mclk (mclk), // input
1336  .hist_en (hist_en[2]), // input
1337  .hist_rst (!hist_nrst[2]), // input
1338  .hist_rq (hist_rq[2]), // output
1339  .hist_grant (hist_gr[2]), // input
1340  .hist_do (hist_do2), // output[31:0]
1341  .hist_dv (hist_dv[2]), // output
1342  .cmd_ad (cmd_ad), // input[7:0]
1343  .cmd_stb (cmd_stb) // input
1344 `ifdef DEBUG_RING
1345  ,.debug_do (debug_ring[2]), // output
1346  .debug_sl (debug_sl), // input
1347  .debug_di (debug_ring[3]) // input
1348 `endif
1349  );
1350  else
1351  sens_histogram_snglclk_dummy sens_histogram_2_i (
1352  .hist_rq(hist_rq[2]), // output
1353  .hist_do(hist_do2), // output[31:0]
1354  .hist_dv(hist_dv[2]) // output
1355 `ifdef DEBUG_RING
1356  ,.debug_do (debug_ring[2]), // output
1357  .debug_di (debug_ring[3]) // input
1358 `endif
1359  );
1360 // `ifdef USE_PCLK2X
1361 `endif
1362  endgenerate
1363 
1364  generate
1365  if (HISTOGRAM_ADDR3 != -1)
1366 `ifdef USE_PCLK2X
1367  sens_histogram #(
1368  .HISTOGRAM_RAM_MODE (HISTOGRAM_RAM_MODE),
1369  .HISTOGRAM_ADDR (HISTOGRAM_ADDR3),
1370  .HISTOGRAM_ADDR_MASK (HISTOGRAM_ADDR_MASK),
1371  .HISTOGRAM_LEFT_TOP (HISTOGRAM_LEFT_TOP),
1372  .HISTOGRAM_WIDTH_HEIGHT (HISTOGRAM_WIDTH_HEIGHT)
1373  `ifdef DEBUG_RING
1374  ,.DEBUG_CMD_LATENCY (DEBUG_CMD_LATENCY)
1375  `endif
1376  ) sens_histogram_3_i (
1377  .mrst (mrst), // input
1378  .prst (prsts), // input extended to include sensor reset and rst_mmcm
1379  .pclk (pclk), // input
1380  .pclk2x (pclk2x), // input
1381  .sof (gamma_sof_out), // input
1382  .eof (gamma_eof_out), // input
1383  .hact (gamma_hact_out), // input
1384  .hist_di (gamma_pxd_out), // input[7:0]
1385  .mclk (mclk), // input
1386  .hist_en (hist_en[3]), // input
1387  .hist_rst (!hist_nrst[3]), // input
1388  .hist_rq (hist_rq[3]), // output
1389  .hist_grant (hist_gr[3]), // input
1390  .hist_do (hist_do3), // output[31:0]
1391  .hist_dv (hist_dv[3]), // output
1392  .cmd_ad (cmd_ad), // input[7:0]
1393  .cmd_stb (cmd_stb), // input
1394  .monochrome (HIST_MONOCHROME) // input
1395  `ifdef DEBUG_RING
1396  ,.debug_do (debug_ring[3]), // output
1397  .debug_sl (debug_sl), // input
1398  .debug_di (debug_ring[4]) // input
1399  `endif
1400  );
1401  else
1402  sens_histogram_dummy sens_histogram_3_i (
1403  .hist_rq(hist_rq[3]), // output
1404  .hist_do(hist_do3), // output[31:0]
1405  .hist_dv(hist_dv[3]) // output
1406  `ifdef DEBUG_RING
1407  ,.debug_do (debug_ring[3]), // output
1408  .debug_di (debug_ring[4]) // input
1409  `endif
1410  );
1411 // `ifdef USE_PCLK2X
1412 `else
1413 // `ifdef USE_PCLK2X
1416  .HISTOGRAM_ADDR (HISTOGRAM_ADDR3),
1420  `ifdef DEBUG_RING
1421  ,.DEBUG_CMD_LATENCY (DEBUG_CMD_LATENCY)
1422  `endif
1423  ) sens_histogram_3_i (
1424  .mrst (mrst), // input
1425  .prst (prsts), // input extended to include sensor reset and rst_mmcm
1426  .pclk (pclk), // input
1427  .sof (gamma_sof_out), // input
1428  .eof (gamma_eof_out), // input
1429  .hact (gamma_hact_out), // input
1430  .hist_di (gamma_pxd_out), // input[7:0]
1431  .mclk (mclk), // input
1432  .hist_en (hist_en[3]), // input
1433  .hist_rst (!hist_nrst[3]), // input
1434  .hist_rq (hist_rq[3]), // output
1435  .hist_grant (hist_gr[3]), // input
1436  .hist_do (hist_do3), // output[31:0]
1437  .hist_dv (hist_dv[3]), // output
1438  .cmd_ad (cmd_ad), // input[7:0]
1439  .cmd_stb (cmd_stb) // input
1440  `ifdef DEBUG_RING
1441  ,.debug_do (debug_ring[3]), // output
1442  .debug_sl (debug_sl), // input
1443  .debug_di (debug_ring[4]) // input
1444  `endif
1445  );
1446  else
1447  sens_histogram_snglclk_dummy sens_histogram_3_i (
1448  .hist_rq(hist_rq[3]), // output
1449  .hist_do(hist_do3), // output[31:0]
1450  .hist_dv(hist_dv[3]) // output
1451  `ifdef DEBUG_RING
1452  ,.debug_do (debug_ring[3]), // output
1453  .debug_di (debug_ring[4]) // input
1454  `endif
1455  );
1456 `endif
1457  endgenerate
1458 
1459  sens_histogram_mux sens_histogram_mux_i (
1460  .mclk (mclk), // input
1461  .en (|hist_nrst), // input
1462  .rq0 (hist_rq[0]), // input
1463  .grant0 (hist_gr[0]), // output
1464  .dav0 (hist_dv[0]), // input
1465  .din0 (hist_do0), // input[31:0]
1466  .rq1 (hist_rq[1]), // input
1467  .grant1 (hist_gr[1]), // output
1468  .dav1 (hist_dv[1]), // input
1469  .din1 (hist_do1), // input[31:0]
1470  .rq2 (hist_rq[2]), // input
1471  .grant2 (hist_gr[2]), // output
1472  .dav2 (hist_dv[2]), // input
1473  .din2 (hist_do2), // input[31:0]
1474  .rq3 (hist_rq[3]), // input
1475  .grant3 (hist_gr[3]), // output
1476  .dav3 (hist_dv[3]), // input
1477  .din3 (hist_do3), // input[31:0]
1478  .rq (hist_request), // output
1479  .grant (hist_grant), // input
1480  .chn (hist_chn), // output[1:0]
1481  .dv (hist_dvalid), // output
1482  .dout (hist_data) // output[31:0]
1483  );
1484 
1485 
1486 endmodule
1487 
1488 
7916SENS_LENS_SCALES_MASK'hf8
8042SENS_SYNC_ADDRSENSOR_BASE_ADDR + SENS_SYNC_RADDR
8082modereg[SENSOR_MODE_WIDTH-1:0]
7951HISTOGRAM_WIDTH_HEIGHT'h1
7963PXD_CAPACITANCE"DONT_CARE"
status_router2_sensor_i status_router2
7993HISPI_UNTUNED_SPLIT"FALSE"
7839SENSI2C_STATUS_REG_BASE'h20
8049SENSI2C_REL_ADDRSENSOR_BASE_ADDR + SENSI2C_REL_RADDR
[WIDTH-1:0] 10629d_out
[WRITE_WIDTH - 1 : 0] 10318wr_data
Definition: debug_slave.v:56
8095gamma_data_rreg[7:0]
7921SENS_LENS_POST_SCALE'h6a
7838SENSOR_BASE_INC'h040
7956IODELAY_GRP"IODELAY_SENSOR"
7864SENSI2C_CTRL_MASK'h7fe
8040SENSI2C_STATUS_REG(SENSI2C_STATUS_REG_BASE + SENSOR_NUMBER * SENSI2C_STATUS_REG_INC + SENSI2C_STATUS_REG_REL
8062pxdwire[11:0]
sens_10398_i sens_10398
[HISPI_NUMLANES-1:0] 6908sns_dn
Definition: sens_10398.v:142
[15:0] 6984pxd_in
Definition: sens_gamma.v:75
8038debug_ringwire[DEBUG_RING_LENGTH:0]
[1:0] 6996bayer_out
Definition: sens_gamma.v:91
8089hist_grwire[3:0]
7962SENS_HIGH_PERFORMANCE_MODE"FALSE"
7924SENSIO_ADDR_MASK'h7f8
7988HISPI_WAIT_ALL_LANES4'h8
[WIDTH-1:0] 10628d_in
8107debug_linesreg[15:0]
[1:0] 6703bayer
Definition: lens_flat393.v:114
6912sens_ext_clk_n
Definition: sens_10398.v:147
7954SENSI2C_SLEW"SLOW"
7996HISPI_IBUF_LOW_PWR"TRUE"
7978SENS_REF_JITTER10.010
8056sens_i2c_status_adwire[7:0]
7968CLKIN_PERIOD_SENSOR3.000
[1:0] 6704subchannel
Definition: lens_flat393.v:115
[11:0] 6921pxd
Definition: sens_10398.v:159
7967SENS_BANDWIDTH"OPTIMIZED"
6911sens_ext_clk_p
Definition: sens_10398.v:146
7919SENS_LENS_FAT0_OUT'h69
8080sensor_ctrl_datawire[31:0]
7979SENS_REF_JITTER20.010
8053HISTOGRAM_ADDR3(SENSOR_NUM_HISTOGRAM > 3)?(SENSOR_BASE_ADDR + HISTOGRAM_RADDR3):-1
7994HISPI_DQS_BIAS"TRUE"
8058sens_i2c_status_startwire
8099dout_wwire[15:0]
[HISPI_NUMLANES-1:0] 6907sns_dp
Definition: sens_10398.v:141
8057sens_i2c_status_rqwire
[7:0] 7808cmd_ad
Definition: sens_sync.v:70
[ADDR_MASK2!=0?2:ADDR_MASK1!=0?1:0:0] 9935we
Definition: cmd_deser.v:60
7944SENSI2C_ADDR_MASK'h7f0
[7:0] 8016status_ad
8075gamma_bayerwire[1:0]
[7:0] 6902status_ad
Definition: sens_10398.v:132
7920SENS_LENS_FAT0_OUT_MASK'hff
8059sens_phys_status_adwire[7:0]
8071gamma_pxd_inwire[15:0]
7981SENS_SS_MODE"CENTER_HIGH"
8092hist_do1wire[31:0]
lens_flat393_i lens_flat393
8052HISTOGRAM_ADDR2(SENSOR_NUM_HISTOGRAM > 2)?(SENSOR_BASE_ADDR + HISTOGRAM_RADDR2):-1
7891SENS_GAMMA_ADDR_MASK'h7fc
[7:0] 6994cmd_ad
Definition: sens_gamma.v:88
7853HISTOGRAM_RAM_MODE"BUF32"
8047SENS_LENS_ADDRSENSOR_BASE_ADDR + SENS_LENS_RADDR
[NUM_FRAME_BITS-1:0] 8021frame_num_seq
sens_sync_i sens_sync
7973PXD_IOSTANDARD"LVCMOS18"
8041SENSIO_STATUS_REG(SENSI2C_STATUS_REG_BASE + SENSOR_NUMBER * SENSI2C_STATUS_REG_INC + SENSIO_STATUS_REG_REL
7949HISTOGRAM_ADDR_MASK'h7fe
[7:0] 6989pxd_out
Definition: sens_gamma.v:81
8088hist_rqwire[3:0]
[READ_WIDTH - 1 : 0] 10317rd_data
Definition: debug_slave.v:55
[7:0] 8303status_ad
Definition: sensor_i2c_io.v:88
8039SENSOR_BASE_ADDR(SENSOR_GROUP_ADDR + SENSOR_NUMBER * SENSOR_BASE_INC
sensor_i2c_io_i sensor_i2c_io
[31:0] 8033hist_data
8096dout_rreg[15:0]
8054cmd_adreg[7:0]
8061sens_phys_status_startwire
8044SENSI2C_CTRL_ADDRSENSOR_BASE_ADDR + SENSI2C_CTRL_RADDR
8045SENS_GAMMA_ADDRSENSOR_BASE_ADDR + SENS_GAMMA_RADDR
8067lens_pxd_inwire[15:0]
[7:0] 8301cmd_ad
Definition: sensor_i2c_io.v:86
integer 7952SENSI2C_DRIVE12
[7:0] 6693cmd_ad
Definition: lens_flat393.v:101
[DATA_WIDTH-1:0] 9934data
Definition: cmd_deser.v:59
7844SENS_SYNC_MASK'h7fc
integer 7957IDELAY_VALUE0
8060sens_phys_status_rqwire
7997HISPI_IFD_DELAY_VALUE"AUTO"
7985HISPI_DELAY_CLK"FALSE"
debug_slave_i debug_slave
[15:0] 6695pxd_in
Definition: lens_flat393.v:104
8106debug_line_cntrreg[15:0]
6920sns_shutter_done
Definition: sens_10398.v:157
8090hist_dvwire[3:0]
[7:0] 9931ad
Definition: cmd_deser.v:56
8051HISTOGRAM_ADDR1(SENSOR_NUM_HISTOGRAM > 1)?(SENSOR_BASE_ADDR + HISTOGRAM_RADDR1):-1
sens_histogram_3_i sens_histogram_snglclk_dummy[generate]
reg 7805sof_out_pclk
Definition: sens_sync.v:66
8109vact_cntrreg[15:0]
sens_histogram_3_i sens_histogram_snglclk[generate]
[ADDR_WIDTH-1:0] 9933addr
Definition: cmd_deser.v:58
7953SENSI2C_IBUF_LOW_PWR"TRUE"
[7:0] 10954db_in0
7970CLKFBOUT_PHASE_SENSOR0.000
[NUM_FRAME_BITS-1:0] 8307frame_num_seq
Definition: sensor_i2c_io.v:92
7918SENS_LENS_FAT0_IN_MASK'hff
7991HISPI_CAPACITANCE"DONT_CARE"
8086hist_nrstwire[3:0]
8094hist_do3wire[31:0]
level_cross_clocks_en_pclk_i level_cross_clocks
8091hist_do0wire[31:0]
7974SENSI2C_IOSTANDARD"LVCMOS18"
8076gamma_pxd_outwire[7:0]
[7:0] 8014cmd_ad_in
[7:0] 10960db_out
7922SENS_LENS_POST_SCALE_MASK'hff
7992HISPI_DIFF_TERM"TRUE"
integer 7958PXD_DRIVE12
cmd_deser_sens_channel_i cmd_deser
reg [15:0] 6699pxd_out
Definition: lens_flat393.v:109
sens_gamma_i sens_gamma
7802trigger_mode
Definition: sens_sync.v:63
7980SENS_SS_EN"FALSE"
[7:0] 6900cmd_ad
Definition: sens_10398.v:130
8050HISTOGRAM_ADDR0(SENSOR_NUM_HISTOGRAM > 0)?(SENSOR_BASE_ADDR + HISTOGRAM_RADDR0):-1
8046SENSIO_ADDRSENSOR_BASE_ADDR + SENSIO_RADDR
sens_histogram_mux_i sens_histogram_mux
7807sof_late
Definition: sens_sync.v:68
7903SENS_LENS_ADDR_MASK'h7fc
7837SENSOR_GROUP_ADDR'h400
8093hist_do2wire[31:0]
8108hact_cntrreg[15:0]
7857SENSOR_CTRL_ADDR_MASK'h7ff
8083hist_enwire[3:0]
7995HISPI_IBUF_DELAY_VALUE"0"
[7:0] 10957db_in1
7959PXD_IBUF_LOW_PWR"TRUE"
real 7961SENS_REFCLK_FREQUENCY300.0
8048SENSI2C_ABS_ADDRSENSOR_BASE_ADDR + SENSI2C_ABS_RADDR
8043SENSOR_CTRL_ADDRSENSOR_BASE_ADDR + SENSOR_CTRL_RADDR