outputstatus_rq,// input request to send status downstream
outputstatus_rq,// input request to send status downstream
inputstatus_start,// Acknowledge of the first status packet byte (address)
inputstatus_start,// Acknowledge of the first status packet byte (address)
// Buffer interfaces
// Buffer interfaces, combined for 4 channels
inputxfer_reset_page_rd_chn0,// from mcntrl_tiled_rw (
input[3:0]xfer_reset_page_rd,// from mcntrl_tiled_rw (
inputbuf_wpage_nxt_chn0,// advance to next page memory interface writes to
input[3:0]buf_wpage_nxt,// advance to next page memory interface writes to
inputbuf_we_chn0,// @!mclk write buffer from memory, increment write
input[3:0]buf_we,// @!mclk write buffer from memory, increment write
input[63:0]buf_din_chn0,// data out
input[255:0]buf_din,// data out
inputpage_ready_chn0,// single mclk (posedge)
input[3:0]page_ready,// single mclk (posedge)
outputnext_page_chn0,// single mclk (posedge): Done with the page in the buffer, memory controller may read more data
output[3:0]next_page,// single mclk (posedge): Done with the page in the buffer, memory controller may read more data
inputxfer_reset_page_rd_chn1,// from mcntrl_tiled_rw (
inputbuf_wpage_nxt_chn1,// advance to next page memory interface writes to
inputbuf_we_chn1,// @!mclk write buffer from memory, increment write
input[63:0]buf_din_chn1,// data out
inputpage_ready_chn1,// single mclk (posedge)
outputnext_page_chn1,// single mclk (posedge): Done with the page in the buffer, memory controller may read more data
inputxfer_reset_page_rd_chn2,// from mcntrl_tiled_rw (
// master (sensor) with slave (compressor) synchronization I/Os
inputbuf_wpage_nxt_chn2,// advance to next page memory interface writes to
output[3:0]frame_start_dst,// @mclk - trigger receive (tiledc) memory channel (it will take care of single/repetitive
inputbuf_we_chn2,// @!mclk write buffer from memory, increment write
// these output either follows vsync_late (reclocks it) or generated in non-bonded mode
input[63:0]buf_din_chn2,// data out
// (compress from memory)
inputpage_ready_chn2,// single mclk (posedge)
input[4*FRAME_HEIGHT_BITS-1:0]line_unfinished_src,// number of the current (unfinished ) line, in the source (sensor) channel (RELATIVE TO FRAME, NOT WINDOW?)
outputnext_page_chn2,// single mclk (posedge): Done with the page in the buffer, memory controller may read more data
input[4*LAST_FRAME_BITS-1:0]frame_number_src,// current frame number (for multi-frame ranges) in the source (sensor) channel
input[3:0]frame_done_src,// single-cycle pulse when the full frame (window) was transferred to/from DDR3 memory
// frame_done_src is later than line_unfinished_src/ frame_number_src changes
// Used withe a single-frame buffers
input[4*FRAME_HEIGHT_BITS-1:0]line_unfinished_dst,// number of the current (unfinished ) line in this (compressor) channel
input[4*LAST_FRAME_BITS-1:0]frame_number_dst,// current frame number (for multi-frame ranges) in this (compressor channel
input[3:0]frame_done_dst,// single-cycle pulse when the full frame (window) was transferred to/from DDR3 memory
// use as 'eot_real' in 353
output[3:0]suspend,// suspend reading data for this channel - waiting for the source data
inputxfer_reset_page_rd_chn3,// from mcntrl_tiled_rw (
inputbuf_wpage_nxt_chn3,// advance to next page memory interface writes to
inputbuf_we_chn3,// @!mclk write buffer from memory, increment write
input[63:0]buf_din_chn3,// data out
inputpage_ready_chn3,// single mclk (posedge)
outputnext_page_chn3,// single mclk (posedge): Done with the page in the buffer, memory controller may read more data
// statistics data was not used in late nc353
// statistics data was not used in late nc353
// input dccout, //enable output of DC and HF components for brightness/color/focus adjustments
// input dccout, //enable output of DC and HF components for brightness/color/focus adjustments
...
@@ -161,80 +155,18 @@ module compressor393 # (
...
@@ -161,80 +155,18 @@ module compressor393 # (
// output [15:0] statistics_do,
// output [15:0] statistics_do,
// Timestamp messages (@mclk) - combine to a single ts_data?
// Timestamp messages (@mclk) - combine to a single ts_data?
inputts_pre_stb_chn0,// @mclk - 1 cycle before receiving 8 bytes of timestamp data
input[3:0]ts_pre_stb,// @mclk - 1 cycle before receiving 8 bytes of timestamp data
input[7:0]ts_data_chn0,// timestamp data (s0,s1,s2,s3,us0,us1,us2,us3==0)
input[31:0]ts_data,// timestamp data (s0,s1,s2,s3,us0,us1,us2,us3==0)
inputts_pre_stb_chn1,// @mclk - 1 cycle before receiving 8 bytes of timestamp data
input[7:0]ts_data_chn1,// timestamp data (s0,s1,s2,s3,us0,us1,us2,us3==0)
inputts_pre_stb_chn2,// @mclk - 1 cycle before receiving 8 bytes of timestamp data
input[7:0]ts_data_chn2,// timestamp data (s0,s1,s2,s3,us0,us1,us2,us3==0)
inputts_pre_stb_chn3,// @mclk - 1 cycle before receiving 8 bytes of timestamp data
input[7:0]ts_data_chn3,// timestamp data (s0,s1,s2,s3,us0,us1,us2,us3==0)
// Outputs for interrupts generation
// Outputs for interrupts generation
outputeof_written_mclk_chn0,
output[3:0]eof_written_mclk,
outputstuffer_done_mclk_chn0,
output[3:0]stuffer_done_mclk,
outputeof_written_mclk_chn1,
outputstuffer_done_mclk_chn1,
outputeof_written_mclk_chn2,
outputstuffer_done_mclk_chn2,
outputeof_written_mclk_chn3,
outputstuffer_done_mclk_chn3,
// frame input synchronization
// frame input synchronization
inputvsync_late_chn0,// delayed start of frame, @xclk. In 353 it was 16 lines after VACT active
input[3:0]vsync_late,// delayed start of frame, @xclk. In 353 it was 16 lines after VACT active
// source channel should already start, some delay give time for sequencer commands
// source channel should already start, some delay give time for sequencer commands
// that should arrive before it
// that should arrive before it
inputvsync_late_chn1,
inputvsync_late_chn2,
inputvsync_late_chn3,
// master (sensor) with slave (compressor) synchronization I/Os
outputframe_start_dst_chn0,// @mclk - trigger receive (tiledc) memory channel (it will take care of single/repetitive
// these output either follows vsync_late (reclocks it) or generated in non-bonded mode
// (compress from memory)
input[FRAME_HEIGHT_BITS-1:0]line_unfinished_src_chn0,// number of the current (unfinished ) line, in the source (sensor) channel (RELATIVE TO FRAME, NOT WINDOW?)
input[LAST_FRAME_BITS-1:0]frame_number_src_chn0,// current frame number (for multi-frame ranges) in the source (sensor) channel
inputframe_done_src_chn0,// single-cycle pulse when the full frame (window) was transferred to/from DDR3 memory
// frame_done_src is later than line_unfinished_src/ frame_number_src changes
// Used withe a single-frame buffers
input[FRAME_HEIGHT_BITS-1:0]line_unfinished_dst_chn0,// number of the current (unfinished ) line in this (compressor) channel
input[LAST_FRAME_BITS-1:0]frame_number_dst_chn0,// current frame number (for multi-frame ranges) in this (compressor channel
inputframe_done_dst_chn0,// single-cycle pulse when the full frame (window) was transferred to/from DDR3 memory
// use as 'eot_real' in 353
outputsuspend_chn0,// suspend reading data for this channel - waiting for the source data
outputframe_start_dst,// @mclk - trigger receive (tiledc) memory channel (it will take care of single/repetitive
// these output either follows vsync_late (reclocks it) or generated in non-bonded mode
// (compress from memory)
input[FRAME_HEIGHT_BITS-1:0]line_unfinished_src,// number of the current (unfinished ) line, in the source (sensor) channel (RELATIVE TO FRAME, NOT WINDOW?)
input[LAST_FRAME_BITS-1:0]frame_number_src,// current frame number (for multi-frame ranges) in the source (sensor) channel
inputframe_done_src,// single-cycle pulse when the full frame (window) was transferred to/from DDR3 memory
// frame_done_src is later than line_unfinished_src/ frame_number_src changes
// Used withe a single-frame buffers
input[FRAME_HEIGHT_BITS-1:0]line_unfinished_dst,// number of the current (unfinished ) line in this (compressor) channel
input[LAST_FRAME_BITS-1:0]frame_number_dst,// current frame number (for multi-frame ranges) in this (compressor channel
inputframe_done_dst,// single-cycle pulse when the full frame (window) was transferred to/from DDR3 memory
// use as 'eot_real' in 353
outputsuspend,// suspend reading data for this channel - waiting for the source data
// statistics data was not used in late nc353
// statistics data was not used in late nc353
inputdccout,//enable output of DC and HF components for brightness/color/focus adjustments
inputdccout,//enable output of DC and HF components for brightness/color/focus adjustments
input[2:0]hfc_sel,// [2:0] (for autofocus) only components with both spacial frequencies higher than specified will be added
input[2:0]hfc_sel,// [2:0] (for autofocus) only components with both spacial frequencies higher than specified will be added
...
@@ -139,20 +155,6 @@ module jp_channel#(
...
@@ -139,20 +155,6 @@ module jp_channel#(
inputvsync_late,// delayed start of frame, @xclk. In 353 it was 16 lines after VACT active
inputvsync_late,// delayed start of frame, @xclk. In 353 it was 16 lines after VACT active
// source channel should already start, some delay give time for sequencer commands
// source channel should already start, some delay give time for sequencer commands
// that should arrive before it
// that should arrive before it
outputframe_start_dst,// @mclk - trigger receive (tiledc) memory channel (it will take care of single/repetitive
// these output either follows vsync_late (reclocks it) or generated in non-bonded mode
// (compress from memory)
input[FRAME_HEIGHT_BITS-1:0]line_unfinished_src,// number of the current (unfinished ) line, in the source (sensor) channel (RELATIVE TO FRAME, NOT WINDOW?)
input[LAST_FRAME_BITS-1:0]frame_number_src,// current frame number (for multi-frame ranges) in the source (sensor) channel
inputframe_done_src,// single-cycle pulse when the full frame (window) was transferred to/from DDR3 memory
// frame_done_src is later than line_unfinished_src/ frame_number_src changes
// Used withe a single-frame buffers
input[FRAME_HEIGHT_BITS-1:0]line_unfinished_dst,// number of the current (unfinished ) line in this (compressor) channel
input[LAST_FRAME_BITS-1:0]frame_number_dst,// current frame number (for multi-frame ranges) in this (compressor channel
inputframe_done_dst,// single-cycle pulse when the full frame (window) was transferred to/from DDR3 memory
// use as 'eot_real' in 353
outputsuspend,// suspend reading data for this channel - waiting for the source data
parameterMCONTR_WR_MASK='h3c00,// AXI write address mask for the 1Kx32 buffers command sequence memory
parameterMCONTR_WR_MASK='h3c00,// AXI write address mask for the 1Kx32 buffers command sequence memory
parameterMCONTR_RD_MASK='h3c00,// AXI read address mask to generate busy
parameterMCONTR_RD_MASK='h3c00,// AXI read address mask to generate busy
...
@@ -261,8 +270,35 @@ module mcntrl393 #(
...
@@ -261,8 +270,35 @@ module mcntrl393 #(
// wire [31:0] axird_bram_rdata; // .data_out(rdata[31:0]), // data out
// wire [31:0] axird_bram_rdata; // .data_out(rdata[31:0]), // data out
output[31:0]axird_rdata,// combinatorial multiplexed (add external register layer, modify axibram_read?) .data_out(rdata[31:0]), // data out
output[31:0]axird_rdata,// combinatorial multiplexed (add external register layer, modify axibram_read?) .data_out(rdata[31:0]), // data out
outputaxird_selected,// axird_rdata contains valid data from this module
outputaxird_selected,// axird_rdata contains valid data from this module
// wire [31:0] port0_rdata; //
// wire [31:0] status_rdata; //
// sensor subsystem interface
output[3:0]sens_rpage_set,// (), // input
output[3:0]sens_rpage_next,// (), // input
output[3:0]sens_buf_rd,// (), // input
input[255:0]sens_buf_dout,// (), // output[63:0]
// compressor subsystem interface
// Buffer interfaces, combined for 4 channels
output[3:0]cmprs_xfer_reset_page_rd,// from mcntrl_tiled_rw (
output[3:0]cmprs_buf_wpage_nxt,// advance to next page memory interface writes to
output[3:0]cmprs_buf_we,// @!mclk write buffer from memory, increment write
output[255:0]cmprs_buf_din,// data out
output[3:0]cmprs_page_ready,// single mclk (posedge)
input[3:0]cmprs_next_page,// single mclk (posedge): Done with the page in the buffer, memory controller may read more data
// master (sensor) with slave (compressor) synchronization I/Os
input[3:0]cmprs_frame_start_dst,// @mclk - trigger receive (tiledc) memory channel (it will take care of single/repetitive
// these output either follows vsync_late (reclocks it) or generated in non-bonded mode
// (compress from memory)
output[4*FRAME_HEIGHT_BITS-1:0]cmprs_line_unfinished_src,// number of the current (unfinished ) line, in the source (sensor) channel (RELATIVE TO FRAME, NOT WINDOW?)
output[4*LAST_FRAME_BITS-1:0]cmprs_frame_number_src,// current frame number (for multi-frame ranges) in the source (sensor) channel
output[3:0]cmprs_frame_done_src,// single-cycle pulse when the full frame (window) was transferred to/from DDR3 memory
// frame_done_src is later than line_unfinished_src/ frame_number_src changes
// Used withe a single-frame buffers
output[4*FRAME_HEIGHT_BITS-1:0]cmprs_line_unfinished_dst,// number of the current (unfinished ) line in this (compressor) channel
output[4*LAST_FRAME_BITS-1:0]cmprs_frame_number_dst,// current frame number (for multi-frame ranges) in this (compressor channel
output[3:0]cmprs_frame_done_dst,// single-cycle pulse when the full frame (window) was transferred to/from DDR3 memory
// use as 'eot_real' in 353
input[3:0]cmprs_suspend,// suspend reading data for this channel - waiting for the source data
// TODO: move line_unfinished and suspend to internals of this module (and control comparator modes)
// TODO: move line_unfinished and suspend to internals of this module (and control comparator modes)
// Channel 1 - AFI read/write to system memory with scanline linear mode
// Channel 1 - AFI read/write to system memory with scanline linear mode
...
@@ -287,10 +323,6 @@ module mcntrl393 #(
...
@@ -287,10 +323,6 @@ module mcntrl393 #(
outputbuf_rd_chn1,
outputbuf_rd_chn1,
input[63:0]buf_rdata_chn1,
input[63:0]buf_rdata_chn1,
// Channels 2 and 3 control signals
// Channels 2 and 3 control signals
inputframe_start_chn2,// resets page, x,y, and initiates transfer requests (in write mode will wait for next_page)
inputframe_start_chn2,// resets page, x,y, and initiates transfer requests (in write mode will wait for next_page)
inputnext_page_chn2,// page was read/written from/to 4*1kB on-chip buffer
inputnext_page_chn2,// page was read/written from/to 4*1kB on-chip buffer
...
@@ -320,6 +352,10 @@ module mcntrl393 #(
...
@@ -320,6 +352,10 @@ module mcntrl393 #(
inputsuspend_chn4,// suspend transfers (from external line number comparator)
inputsuspend_chn4,// suspend transfers (from external line number comparator)
.axird_pre_araddr(axird_pre_araddr),// input[12:0] // SuppressThisWarning VivadoSynthesis: [Synth 8-3295] tying undriven pin #mcntrl393_i:axird_pre_araddr[9:0] to constant 0 (seems to be unused, not undriven)
.axird_pre_araddr(axird_pre_araddr),// input[12:0] // SuppressThisWarning VivadoSynthesis: [Synth 8-3295] tying undriven pin #mcntrl393_i:axird_pre_araddr[9:0] to constant 0 (seems to be unused, not undriven)
// Originally implemented channels, some are just for testing and may be replaced
)axibram_write_i(//SuppressThisWarning ISExst Output port <bram_wstb> of the instance <axibram_write_i> is unconnected or connected to loadless signal.
)axibram_write_i(//SuppressThisWarning ISExst Output port <bram_wstb> of the instance <axibram_write_i> is unconnected or connected to loadless signal.