/*!
* Module:cmd_encod_tiled_mux
* @file cmd_encod_tiled_mux.v
* @date 2015-01-31
* @author Andrey Filippov
*
* @brief Multiplex parameters from multiple channels sharing the same
* tiled command encoders (cmd_encod_tiled_rd and cmd_encod_tiled_wr)
* Latency 1 clcok cycle
*
* @copyright Copyright (c) 2015 Elphel, Inc.
*
* License:
*
* cmd_encod_tiled_mux.v is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* cmd_encod_tiled_mux.v is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
* Additional permission under GNU GPL version 3 section 7:
* If you modify this Program, or any covered work, by linking or combining it
* with independent modules provided by the FPGA vendor only (this permission
* does not extend to any 3-rd party modules, "soft cores" or macros) under
* different license terms solely for the purpose of generating binary "bitstream"
* files and/or simulating the code, the copyright holders of this Program give
* you the right to distribute the covered work without those independent modules
* as long as the source code for them is available from the FPGA vendor free of
* charge, and there is no dependence on any encrypted modules for simulating of
* the combined code. This permission applies to you if the distributed code
* contains all the components and scripts required to completely simulate it
* with at least one of the Free Software programs.
*/
`timescale 1ns/1ps
`include "system_defines.vh"
module cmd_encod_tiled_mux #(
parameter ADDRESS_NUMBER= 15,
parameter COLADDR_NUMBER= 10,
parameter FRAME_WIDTH_BITS= 13, // Maximal frame width - 8-word (16 bytes) bursts
// parameter FRAME_HEIGHT_BITS= 16, // Maximal frame height
parameter MAX_TILE_WIDTH= 6, // number of bits to specify maximal tile (width-1) (6 -> 64)
parameter MAX_TILE_HEIGHT= 6 // number of bits to specify maximal tile (height-1) (6 -> 64)
) (
input clk,
`ifdef def_tiled_chn0
input [2:0] bank0, // bank address
input [ADDRESS_NUMBER-1:0] row0, // memory row
input [COLADDR_NUMBER-4:0] col0, // start memory column in 8-bit bursts
input [FRAME_WIDTH_BITS:0] rowcol_inc0, // increment {row.col} when bank rolls over, removed 3 LSBs (in 8-bursts)
input [MAX_TILE_WIDTH-1:0] num_rows0, // number of rows to read minus 1
input [MAX_TILE_HEIGHT-1:0] num_cols0, // number of 16-pixel columns to read (rows first, then columns) - 1
input keep_open0, // keep banks open (for <=8 banks only
input partial0, // first of the two halves of a split tile (caused by memory page crossing)
`ifdef def_read_mem_chn0
input start0_rd, // start generating memory read channel commands with 16-byte wide columns
input start0_rd32, // start generating memory read channel commands with 32-byte wide columns
`endif
`ifdef def_write_mem_chn0
input start0_wr, // start generating memory write channel commands with 16-byte wide columns
input start0_wr32, // start generating memory write channel commands with 32-byte wide columns
`endif
`endif
`ifdef def_tiled_chn1
input [2:0] bank1, // bank address
input [ADDRESS_NUMBER-1:0] row1, // memory row
input [COLADDR_NUMBER-4:0] col1, // start memory column in 8-bit bursts
input [FRAME_WIDTH_BITS:0] rowcol_inc1, // increment {row.col} when bank rolls over, removed 3 LSBs (in 8-bursts)
input [MAX_TILE_WIDTH-1:0] num_rows1, // number of rows to read minus 1
input [MAX_TILE_HEIGHT-1:0] num_cols1, // number of 16-pixel columns to read (rows first, then columns) - 1
input keep_open1, // keep banks open (for <=8 banks only
input partial1, // first of the two halves of a split tile (caused by memory page crossing)
`ifdef def_read_mem_chn1
input start1_rd, // start generating memory read channel commands with 16-byte wide columns
input start1_rd32, // start generating memory read channel commands with 32-byte wide columns
`endif
`ifdef def_write_mem_chn1
input start1_wr, // start generating memory write channel commands with 16-byte wide columns
input start1_wr32, // start generating memory write channel commands with 32-byte wide columns
`endif
`endif
`ifdef def_tiled_chn2
input [2:0] bank2, // bank address
input [ADDRESS_NUMBER-1:0] row2, // memory row
input [COLADDR_NUMBER-4:0] col2, // start memory column in 8-bit bursts
input [FRAME_WIDTH_BITS:0] rowcol_inc2, // increment {row.col} when bank rolls over, removed 3 LSBs (in 8-bursts)
input [MAX_TILE_WIDTH-1:0] num_rows2, // number of rows to read minus 1
input [MAX_TILE_HEIGHT-1:0] num_cols2, // number of 16-pixel columns to read (rows first, then columns) - 1
input keep_open2, // keep banks open (for <=8 banks only
input partial2, // first of the two halves of a split tile (caused by memory page crossing)
`ifdef def_read_mem_chn2
input start2_rd, // start generating memory read channel commands with 16-byte wide columns
input start2_rd32, // start generating memory read channel commands with 32-byte wide columns
`endif
`ifdef def_write_mem_chn2
input start2_wr, // start generating memory write channel commands with 16-byte wide columns
input start2_wr32, // start generating memory write channel commands with 32-byte wide columns
`endif
`endif
`ifdef def_tiled_chn3
input [2:0] bank3, // bank address
input [ADDRESS_NUMBER-1:0] row3, // memory row
input [COLADDR_NUMBER-4:0] col3, // start memory column in 8-bit bursts
input [FRAME_WIDTH_BITS:0] rowcol_inc3, // increment {row.col} when bank rolls over, removed 3 LSBs (in 8-bursts)
input [MAX_TILE_WIDTH-1:0] num_rows3, // number of rows to read minus 1
input [MAX_TILE_HEIGHT-1:0] num_cols3, // number of 16-pixel columns to read (rows first, then columns) - 1
input keep_open3, // keep banks open (for <=8 banks only
input partial3, // first of the two halves of a split tile (caused by memory page crossing)
`ifdef def_read_mem_chn3
input start3_rd, // start generating memory read channel commands with 16-byte wide columns
input start3_rd32, // start generating memory read channel commands with 32-byte wide columns
`endif
`ifdef def_write_mem_chn3
input start3_wr, // start generating memory write channel commands with 16-byte wide columns
input start3_wr32, // start generating memory write channel commands with 32-byte wide columns
`endif
`endif
`ifdef def_tiled_chn4
input [2:0] bank4, // bank address
input [ADDRESS_NUMBER-1:0] row4, // memory row
input [COLADDR_NUMBER-4:0] col4, // start memory column in 8-bit bursts
input [FRAME_WIDTH_BITS:0] rowcol_inc4, // increment {row.col} when bank rolls over, removed 3 LSBs (in 8-bursts)
input [MAX_TILE_WIDTH-1:0] num_rows4, // number of rows to read minus 1
input [MAX_TILE_HEIGHT-1:0] num_cols4, // number of 16-pixel columns to read (rows first, then columns) - 1
input keep_open4, // keep banks open (for <=8 banks only
input partial4, // first of the two halves of a split tile (caused by memory page crossing)
`ifdef def_read_mem_chn4
input start4_rd, // start generating memory read channel commands with 16-byte wide columns
input start4_rd32, // start generating memory read channel commands with 32-byte wide columns
`endif
`ifdef def_write_mem_chn4
input start4_wr, // start generating memory write channel commands with 16-byte wide columns
input start4_wr32, // start generating memory write channel commands with 32-byte wide columns
`endif
`endif
`ifdef def_tiled_chn5
input [2:0] bank5, // bank address
input [ADDRESS_NUMBER-1:0] row5, // memory row
input [COLADDR_NUMBER-4:0] col5, // start memory column in 8-bit bursts
input [FRAME_WIDTH_BITS:0] rowcol_inc5, // increment {row.col} when bank rolls over, removed 3 LSBs (in 8-bursts)
input [MAX_TILE_WIDTH-1:0] num_rows5, // number of rows to read minus 1
input [MAX_TILE_HEIGHT-1:0] num_cols5, // number of 16-pixel columns to read (rows first, then columns) - 1
input keep_open5, // keep banks open (for <=8 banks only
input partial5, // first of the two halves of a split tile (caused by memory page crossing)
`ifdef def_read_mem_chn5
input start5_rd, // start generating memory read channel commands with 16-byte wide columns
input start5_rd32, // start generating memory read channel commands with 32-byte wide columns
`endif
`ifdef def_write_mem_chn5
input start5_wr, // start generating memory write channel commands with 16-byte wide columns
input start5_wr32, // start generating memory write channel commands with 32-byte wide columns
`endif
`endif
`ifdef def_tiled_chn6
input [2:0] bank6, // bank address
input [ADDRESS_NUMBER-1:0] row6, // memory row
input [COLADDR_NUMBER-4:0] col6, // start memory column in 8-bit bursts
input [FRAME_WIDTH_BITS:0] rowcol_inc6, // increment {row.col} when bank rolls over, removed 3 LSBs (in 8-bursts)
input [MAX_TILE_WIDTH-1:0] num_rows6, // number of rows to read minus 1
input [MAX_TILE_HEIGHT-1:0] num_cols6, // number of 16-pixel columns to read (rows first, then columns) - 1
input keep_open6, // keep banks open (for <=8 banks only
input partial6, // first of the two halves of a split tile (caused by memory page crossing)
`ifdef def_read_mem_chn6
input start6_rd, // start generating memory read channel commands
`endif
`ifdef def_write_mem_chn6
input start6_wr, // start generating memory write channel commands
`endif
`endif
`ifdef def_tiled_chn7
input [2:0] bank7, // bank address
input [ADDRESS_NUMBER-1:0] row7, // memory row
input [COLADDR_NUMBER-4:0] col7, // start memory column in 8-bit bursts
input [FRAME_WIDTH_BITS:0] rowcol_inc7, // increment {row.col} when bank rolls over, removed 3 LSBs (in 8-bursts)
input [MAX_TILE_WIDTH-1:0] num_rows7, // number of rows to read minus 1
input [MAX_TILE_HEIGHT-1:0] num_cols7, // number of 16-pixel columns to read (rows first, then columns) - 1
input keep_open7, // keep banks open (for <=8 banks only
input partial7, // first of the two halves of a split tile (caused by memory page crossing)
`ifdef def_read_mem_chn7
input start7_rd, // start generating memory read channel commands with 16-byte wide columns
input start7_rd32, // start generating memory read channel commands with 32-byte wide columns
`endif
`ifdef def_write_mem_chn7
input start7_wr, // start generating memory write channel commands with 16-byte wide columns
input start7_wr32, // start generating memory write channel commands with 32-byte wide columns
`endif
`endif
`ifdef def_tiled_chn8
input [2:0] bank8, // bank address
input [ADDRESS_NUMBER-1:0] row8, // memory row
input [COLADDR_NUMBER-4:0] col8, // start memory column in 8-bit bursts
input [FRAME_WIDTH_BITS:0] rowcol_inc8, // increment {row.col} when bank rolls over, removed 3 LSBs (in 8-bursts)
input [MAX_TILE_WIDTH-1:0] num_rows8, // number of rows to read minus 1
input [MAX_TILE_HEIGHT-1:0] num_cols8, // number of 16-pixel columns to read (rows first, then columns) - 1
input keep_open8, // keep banks open (for <=8 banks only
input partial8, // first of the two halves of a split tile (caused by memory page crossing)
`ifdef def_read_mem_chn8
input start8_rd, // start generating memory read channel commands with 16-byte wide columns
input start8_rd32, // start generating memory read channel commands with 32-byte wide columns
`endif
`ifdef def_write_mem_chn8
input start8_wr, // start generating memory write channel commands with 16-byte wide columns
input start8_wr32, // start generating memory write channel commands with 32-byte wide columns
`endif
`endif
`ifdef def_tiled_chn9
input [2:0] bank9, // bank address
input [ADDRESS_NUMBER-1:0] row9, // memory row
input [COLADDR_NUMBER-4:0] col9, // start memory column in 8-bit bursts
input [FRAME_WIDTH_BITS:0] rowcol_inc9, // increment {row.col} when bank rolls over, removed 3 LSBs (in 8-bursts)
input [MAX_TILE_WIDTH-1:0] num_rows9, // number of rows to read minus 1
input [MAX_TILE_HEIGHT-1:0] num_cols9, // number of 16-pixel columns to read (rows first, then columns) - 1
input keep_open9, // keep banks open (for <=8 banks only
input partial9, // first of the two halves of a split tile (caused by memory page crossing)
`ifdef def_read_mem_chn9
input start9_rd, // start generating memory read channel commands with 16-byte wide columns
input start9_rd32, // start generating memory read channel commands with 32-byte wide columns
`endif
`ifdef def_write_mem_chn9
input start9_wr, // start generating memory write channel commands with 16-byte wide columns
input start9_wr32, // start generating memory write channel commands with 32-byte wide columns
`endif
`endif
`ifdef def_tiled_chn10
input [2:0] bank10, // bank address
input [ADDRESS_NUMBER-1:0] row10, // memory row
input [COLADDR_NUMBER-4:0] col10, // start memory column in 8-bit bursts
input [FRAME_WIDTH_BITS:0] rowcol_inc10, // increment {row.col} when bank rolls over, removed 3 LSBs (in 8-bursts)
input [MAX_TILE_WIDTH-1:0] num_rows10, // number of rows to read minus 1
input [MAX_TILE_HEIGHT-1:0] num_cols10, // number of 16-pixel columns to read (rows first, then columns) - 1
input keep_open10, // keep banks open (for <=8 banks only
input partial10, // first of the two halves of a split tile (caused by memory page crossing)
`ifdef def_read_mem_chn10
input start10_rd, // start generating memory read channel commands with 16-byte wide columns
input start10_rd32, // start generating memory read channel commands with 32-byte wide columns
`endif
`ifdef def_write_mem_chn10
input start10_wr, // start generating memory write channel commands with 16-byte wide columns
input start10_wr32, // start generating memory write channel commands with 32-byte wide columns
`endif
`endif
`ifdef def_tiled_chn11
input [2:0] bank11, // bank address
input [ADDRESS_NUMBER-1:0] row11, // memory row
input [COLADDR_NUMBER-4:0] col11, // start memory column in 8-bit bursts
input [FRAME_WIDTH_BITS:0] rowcol_inc11, // increment {row.col} when bank rolls over, removed 3 LSBs (in 8-bursts)
input [MAX_TILE_WIDTH-1:0] num_rows11, // number of rows to read minus 1
input [MAX_TILE_HEIGHT-1:0] num_cols11, // number of 16-pixel columns to read (rows first, then columns) - 1
input keep_open11, // keep banks open (for <=8 banks only
input partial11, // first of the two halves of a split tile (caused by memory page crossing)
`ifdef def_read_mem_chn11
input start11_rd, // start generating memory read channel commands with 16-byte wide columns
input start11_rd32, // start generating memory read channel commands with 32-byte wide columns
`endif
`ifdef def_write_mem_chn11
input start11_wr, // start generating memory write channel commands with 16-byte wide columns
input start11_wr32, // start generating memory write channel commands with 32-byte wide columns
`endif
`endif
`ifdef def_tiled_chn12
input [2:0] bank12, // bank address
input [ADDRESS_NUMBER-1:0] row12, // memory row
input [COLADDR_NUMBER-4:0] col12, // start memory column in 8-bit bursts
input [FRAME_WIDTH_BITS:0] rowcol_inc12, // increment {row.col} when bank rolls over, removed 3 LSBs (in 8-bursts)
input [MAX_TILE_WIDTH-1:0] num_rows12, // number of rows to read minus 1
input [MAX_TILE_HEIGHT-1:0] num_cols12, // number of 16-pixel columns to read (rows first, then columns) - 1
input keep_open12, // keep banks open (for <=8 banks only
input partial12, // first of the two halves of a split tile (caused by memory page crossing)
`ifdef def_read_mem_chn12
input start12_rd, // start generating memory read channel commands with 16-byte wide columns
input start12_rd32, // start generating memory read channel commands with 32-byte wide columns
`endif
`ifdef def_write_mem_chn12
input start12_wr, // start generating memory write channel commands with 16-byte wide columns
input start12_wr32, // start generating memory write channel commands with 32-byte wide columns
`endif
`endif
`ifdef def_tiled_chn13
input [2:0] bank13, // bank address
input [ADDRESS_NUMBER-1:0] row13, // memory row
input [COLADDR_NUMBER-4:0] col13, // start memory column in 8-bit bursts
input [FRAME_WIDTH_BITS:0] rowcol_inc13, // increment {row.col} when bank rolls over, removed 3 LSBs (in 8-bursts)
input [MAX_TILE_WIDTH-1:0] num_rows13, // number of rows to read minus 1
input [MAX_TILE_HEIGHT-1:0] num_cols13, // number of 16-pixel columns to read (rows first, then columns) - 1
input keep_open13, // keep banks open (for <=8 banks only
input partial13, // first of the two halves of a split tile (caused by memory page crossing)
`ifdef def_read_mem_chn13
input start13_rd, // start generating memory read channel commands with 16-byte wide columns
input start13_rd32, // start generating memory read channel commands with 32-byte wide columns
`endif
`ifdef def_write_mem_chn13
input start13_wr, // start generating memory write channel commands with 16-byte wide columns
input start13_wr32, // start generating memory write channel commands with 32-byte wide columns
`endif
`endif
`ifdef def_tiled_chn14
input [2:0] bank14, // bank address
input [ADDRESS_NUMBER-1:0] row14, // memory row
input [COLADDR_NUMBER-4:0] col14, // start memory column in 8-bit bursts
input [FRAME_WIDTH_BITS:0] rowcol_inc14, // increment {row.col} when bank rolls over, removed 3 LSBs (in 8-bursts)
input [MAX_TILE_WIDTH-1:0] num_rows14, // number of rows to read minus 1
input [MAX_TILE_HEIGHT-1:0] num_cols14, // number of 16-pixel columns to read (rows first, then columns) - 1
input keep_open14, // keep banks open (for <=8 banks only
input partial14, // first of the two halves of a split tile (caused by memory page crossing)
`ifdef def_read_mem_chn14
input start14_rd, // start generating memory read channel commands with 16-byte wide columns
input start14_rd32, // start generating memory read channel commands with 32-byte wide columns
`endif
`ifdef def_write_mem_chn14
input start14_wr, // start generating memory write channel commands with 16-byte wide columns
input start14_wr32, // start generating memory write channel commands with 32-byte wide columns
`endif
`endif
`ifdef def_tiled_chn15
input [2:0] bank15, // bank address
input [ADDRESS_NUMBER-1:0] row15, // memory row
input [COLADDR_NUMBER-4:0] col15, // start memory column in 8-bit bursts
input [FRAME_WIDTH_BITS:0] rowcol_inc15, // increment {row.col} when bank rolls over, removed 3 LSBs (in 8-bursts)
input [MAX_TILE_WIDTH-1:0] num_rows15, // number of rows to read minus 1
input [MAX_TILE_HEIGHT-1:0] num_cols15, // number of 16-pixel columns to read (rows first, then columns) - 1
input keep_open15, // keep banks open (for <=8 banks only
input partial15, // first of the two halves of a split tile (caused by memory page crossing)
`ifdef def_read_mem_chn15
input start15_rd, // start generating memory read channel commands with 16-byte wide columns
input start15_rd32, // start generating memory read channel commands with 32-byte wide columns
`endif
`ifdef def_write_mem_chn15
input start15_wr, // start generating memory write channel commands with 16-byte wide columns
input start15_wr32, // start generating memory write channel commands with 32-byte wide columns
`endif
`endif
output [2:0] bank, // bank address
output [ADDRESS_NUMBER-1:0] row, // memory row
output [COLADDR_NUMBER-4:0] col, // start memory column in 8-bit bursts
output [FRAME_WIDTH_BITS:0] rowcol_inc, // increment {row.col} when bank rolls over, removed 3 LSBs (in 8-bursts)
output [MAX_TILE_WIDTH-1:0] num_rows, // number of rows to read minus 1
output [MAX_TILE_HEIGHT-1:0] num_cols, // number of 16-pixel columns to read (rows first, then columns) - 1
output keep_open, // keep banks open (for <=8 banks only
output partial, // first of the two halves of a split tile (caused by memory page crossing)
output start_rd, // start generating commands in cmd_encod_linear_rd with 16-byte wide columns
output start_wr, // start generating commands in cmd_encod_linear_wr with 16-byte wide columns
output start_rd32, // start generating commands in cmd_encod_linear_rd with 32-byte wide columns
output start_wr32 // start generating commands in cmd_encod_linear_wr with 32-byte wide columns
);
reg [2:0] bank_r; // bank address
reg [ADDRESS_NUMBER-1:0] row_r; // memory row
reg [COLADDR_NUMBER-4:0] col_r; // start memory column in 8-bit bursts
reg [FRAME_WIDTH_BITS:0] rowcol_inc_r; // increment {row.col} when bank rolls over_r; removed 3 LSBs (in 8-bursts)
reg [MAX_TILE_WIDTH-1:0] num_rows_r; // number of rows to read minus 1
reg [MAX_TILE_HEIGHT-1:0] num_cols_r; // number of 16-pixel columns to read (rows first_r; then columns) - 1
reg keep_open_r; // keep banks open (for <=8 banks only
reg partial_r; // partial tile
reg start_rd_r; // start generating commands in cmd_encod_linear_rd with 16-byte wide columns
reg start_wr_r; // start generating commands in cmd_encod_linear_wr with 16-byte wide columns
reg start_rd32_r; // start generating commands in cmd_encod_linear_rd with 32-byte wide columns
reg start_wr32_r; // start generating commands in cmd_encod_linear_wr with 32-byte wide columns
wire [2:0] bank_w; // bank address
wire [ADDRESS_NUMBER-1:0] row_w; // memory row
wire [COLADDR_NUMBER-4:0] col_w; // start memory column in 8-bit bursts
wire [FRAME_WIDTH_BITS:0] rowcol_inc_w; // increment {row.col} when bank rolls over_r; removed 3 LSBs (in 8-bursts)
wire [MAX_TILE_WIDTH-1:0] num_rows_w; // number of rows to read minus 1
wire [MAX_TILE_HEIGHT-1:0] num_cols_w; // number of 16-pixel columns to read (rows first_r; then columns) - 1
wire keep_open_w; // keep banks open (for <=8 banks only
wire partial_w; // partila tile (first half)
wire start_rd_w; // start generating commands in cmd_encod_linear_rd with 16-byte wide columns
wire start_wr_w; // start generating commands in cmd_encod_linear_wr with 16-byte wide columns
wire start_rd32_w; // start generating commands in cmd_encod_linear_rd with 32-byte wide columns
wire start_wr32_w; // start generating commands in cmd_encod_linear_wr with 32-byte wide columns
localparam PAR_WIDTH=(3)+(ADDRESS_NUMBER)+(COLADDR_NUMBER-3)+(FRAME_WIDTH_BITS+1)+(MAX_TILE_WIDTH)+(MAX_TILE_HEIGHT)+(1)+(1);
localparam [PAR_WIDTH-1:0] PAR_DEFAULT=0;
assign bank = bank_r;
assign row = row_r;
assign col = col_r;
assign rowcol_inc = rowcol_inc_r; // increment {row.col} when bank rolls over_r; removed 3 LSBs (in 8-bursts)
assign num_rows = num_rows_r; // number of rows to read minus 1
assign num_cols = num_cols_r; // number of 16-pixel columns to read (rows first_r; then columns) - 1
assign keep_open = keep_open_r; // keep banks open (for <=8 banks only
assign partial = partial_r; // partial tile
assign start_rd = start_rd_r;
assign start_wr = start_wr_r;
assign start_rd32 = start_rd32_r;
assign start_wr32 = start_wr32_r;
assign {start_rd_w,start_rd32_w}= 2'b0
`ifdef def_tiled_chn0
`ifdef def_read_mem_chn0
| {start0_rd,start0_rd32}
`endif
`endif
`ifdef def_tiled_chn1
`ifdef def_read_mem_chn1
| {start1_rd,start1_rd32}
`endif
`endif
`ifdef def_tiled_chn2
`ifdef def_read_mem_chn2
| {start2_rd,start2_rd32}
`endif
`endif
`ifdef def_tiled_chn3
`ifdef def_read_mem_chn3
| {start3_rd,start3_rd32}
`endif
`endif
`ifdef def_tiled_chn4
`ifdef def_read_mem_chn4
| {start4_rd,start4_rd32}
`endif
`endif
`ifdef def_tiled_chn5
`ifdef def_read_mem_chn5
| {start5_rd,start5_rd32}
`endif
`endif
`ifdef def_tiled_chn6
`ifdef def_read_mem_chn6
| {start6_rd,start6_rd32}
`endif
`endif
`ifdef def_tiled_chn7
`ifdef def_read_mem_chn7
| {start7_rd,start7_rd32}
`endif
`endif
`ifdef def_tiled_chn8
`ifdef def_read_mem_chn8
| {start8_rd,start8_rd32}
`endif
`endif
`ifdef def_tiled_chn9
`ifdef def_read_mem_chn9
| {start9_rd,start9_rd32}
`endif
`endif
`ifdef def_tiled_chn10
`ifdef def_read_mem_chn10
| {start10_rd,start10_rd32}
`endif
`endif
`ifdef def_tiled_chn11
`ifdef def_read_mem_chn11
| {start11_rd,start11_rd32}
`endif
`endif
`ifdef def_tiled_chn12
`ifdef def_read_mem_chn12
| {start12_rd,start12_rd32}
`endif
`endif
`ifdef def_tiled_chn13
`ifdef def_read_mem_chn13
| {start13_rd,start13_rd32}
`endif
`endif
`ifdef def_tiled_chn14
`ifdef def_read_mem_chn14
| {start14_rd,start14_rd32}
`endif
`endif
`ifdef def_tiled_chn15
`ifdef def_read_mem_chn15
| {start15_rd,start15_rd32}
`endif
`endif
;
assign {start_wr_w, start_wr32_w}= 2'b0
`ifdef def_tiled_chn0
`ifdef def_write_mem_chn0
| {start0_wr,start0_wr32}
`endif
`endif
`ifdef def_tiled_chn1
`ifdef def_write_mem_chn1
| {start1_wr,start1_wr32}
`endif
`endif
`ifdef def_tiled_chn2
`ifdef def_write_mem_chn2
| {start2_wr,start2_wr32}
`endif
`endif
`ifdef def_tiled_chn3
`ifdef def_write_mem_chn3
| {start3_wr,start3_wr32}
`endif
`endif
`ifdef def_tiled_chn4
`ifdef def_write_mem_chn4
| {start4_wr,start4_wr32}
`endif
`endif
`ifdef def_tiled_chn5
`ifdef def_write_mem_chn5
| {start5_wr,start5_wr32}
`endif
`endif
`ifdef def_tiled_chn6
`ifdef def_write_mem_chn6
| {start6_wr,start6_wr32}
`endif
`endif
`ifdef def_tiled_chn7
`ifdef def_write_mem_chn7
| {start7_wr,start7_wr32}
`endif
`endif
`ifdef def_tiled_chn8
`ifdef def_write_mem_chn8
| {start8_wr,start8_wr32}
`endif
`endif
`ifdef def_tiled_chn9
`ifdef def_write_mem_chn9
| {start9_wr,start9_wr32}
`endif
`endif
`ifdef def_tiled_chn10
`ifdef def_write_mem_chn10
| {start10_wr,start10_wr32}
`endif
`endif
`ifdef def_tiled_chn11
`ifdef def_write_mem_chn11
| {start11_wr,start11_wr32}
`endif
`endif
`ifdef def_tiled_chn12
`ifdef def_write_mem_chn12
| {start12_wr,start12_wr32}
`endif
`endif
`ifdef def_tiled_chn13
`ifdef def_write_mem_chn13
| {start13_wr,start13_wr32}
`endif
`endif
`ifdef def_tiled_chn14
`ifdef def_write_mem_chn14
| {start14_wr,start14_wr32}
`endif
`endif
`ifdef def_tiled_chn15
`ifdef def_write_mem_chn15
| {start15_wr,start15_wr32}
`endif
`endif
;
`ifdef def_tiled_chn0
wire start0=0
`ifdef def_read_mem_chn0
| start0_rd | start0_rd32
`endif
`ifdef def_write_mem_chn0
| start0_wr | start0_wr32
`endif
;
`endif
`ifdef def_tiled_chn1
wire start1=0
`ifdef def_read_mem_chn1
| start1_rd | start1_rd32
`endif
`ifdef def_write_mem_chn1
| start1_wr | start1_wr32
`endif
;
`endif
`ifdef def_tiled_chn2
wire start2=0
`ifdef def_read_mem_chn2
| start2_rd | start2_rd32
`endif
`ifdef def_write_mem_chn2
| start2_wr | start2_wr32
`endif
;
`endif
`ifdef def_tiled_chn3
wire start3=0
`ifdef def_read_mem_chn3
| start3_rd | start3_rd32
`endif
`ifdef def_write_mem_chn3
| start3_wr | start3_wr32
`endif
;
`endif
`ifdef def_tiled_chn4
wire start4=0
`ifdef def_read_mem_chn4
| start4_rd | start4_rd32
`endif
`ifdef def_write_mem_chn4
| start4_wr | start4_wr32
`endif
;
`endif
`ifdef def_tiled_chn5
wire start5=0
`ifdef def_read_mem_chn5
| start5_rd | start5_rd32
`endif
`ifdef def_write_mem_chn5
| start5_wr | start5_wr32
`endif
;
`endif
`ifdef def_tiled_chn6
wire start6=0
`ifdef def_read_mem_chn6
| start6_rd | start6_rd32
`endif
`ifdef def_write_mem_chn6
| start6_wr | start6_wr32
`endif
;
`endif
`ifdef def_tiled_chn7
wire start7=0
`ifdef def_read_mem_chn7
| start7_rd | start7_rd32
`endif
`ifdef def_write_mem_chn7
| start7_wr | start7_wr32
`endif
;
`endif
`ifdef def_tiled_chn8
wire start8=0
`ifdef def_read_mem_chn8
| start8_rd | start8_rd32
`endif
`ifdef def_write_mem_chn8
| start8_wr | start8_wr32
`endif
;
`endif
`ifdef def_tiled_chn9
wire start9=0
`ifdef def_read_mem_chn9
| start9_rd | start9_rd32
`endif
`ifdef def_write_mem_chn9
| start9_wr | start9_wr32
`endif
;
`endif
`ifdef def_tiled_chn10
wire start10=0
`ifdef def_read_mem_chn10
| start10_rd | start10_rd32
`endif
`ifdef def_write_mem_chn10
| start10_wr | start10_wr32
`endif
;
`endif
`ifdef def_tiled_chn11
wire start11=0
`ifdef def_read_mem_chn11
| start11_rd | start11_rd32
`endif
`ifdef def_write_mem_chn11
| start11_wr | start11_wr32
`endif
;
`endif
`ifdef def_tiled_chn12
wire start12=0
`ifdef def_read_mem_chn12
| start12_rd | start12_rd32
`endif
`ifdef def_write_mem_chn12
| start12_wr | start12_wr32
`endif
;
`endif
`ifdef def_tiled_chn13
wire start13=0
`ifdef def_read_mem_chn13
| start13_rd | start13_rd32
`endif
`ifdef def_write_mem_chn13
| start13_wr | start13_wr32
`endif
;
`endif
`ifdef def_tiled_chn14
wire start14=0
`ifdef def_read_mem_chn14
| start14_rd | start14_rd32
`endif
`ifdef def_write_mem_chn14
| start14_wr | start14_wr32
`endif
;
`endif
`ifdef def_tiled_chn15
wire start15=0
`ifdef def_read_mem_chn15
| start15_rd | start15_rd32
`endif
`ifdef def_write_mem_chn15
| start15_wr | start15_wr32
`endif
;
`endif
assign {bank_w, row_w, col_w, rowcol_inc_w, num_rows_w, num_cols_w, keep_open_w, partial_w} = 0
`ifdef def_tiled_chn0
| (start0?{bank0, row0, col0, rowcol_inc0, num_rows0, num_cols0, keep_open0, partial0}:PAR_DEFAULT)
`endif
`ifdef def_tiled_chn1
| (start1?{bank1, row1, col1, rowcol_inc1, num_rows1, num_cols1, keep_open1, partial1}:PAR_DEFAULT)
`endif
`ifdef def_tiled_chn2
| (start2?{bank2, row2, col2, rowcol_inc2, num_rows2, num_cols2, keep_open2, partial2}:PAR_DEFAULT)
`endif
`ifdef def_tiled_chn3
| (start3?{bank3, row3, col3, rowcol_inc3, num_rows3, num_cols3, keep_open3, partial3}:PAR_DEFAULT)
`endif
`ifdef def_tiled_chn4
| (start4?{bank4, row4, col4, rowcol_inc4, num_rows4, num_cols4, keep_open4, partial4}:PAR_DEFAULT)
`endif
`ifdef def_tiled_chn5
| (start5?{bank5, row5, col5, rowcol_inc5, num_rows5, num_cols5, keep_open5, partial5}:PAR_DEFAULT)
`endif
`ifdef def_tiled_chn6
| (start6?{bank6, row6, col6, rowcol_inc6, num_rows6, num_cols6, keep_open6, partial6}:PAR_DEFAULT)
`endif
`ifdef def_tiled_chn7
| (start7?{bank7, row7, col7, rowcol_inc7, num_rows7, num_cols7, keep_open7, partial7}:PAR_DEFAULT)
`endif
`ifdef def_tiled_chn8
| (start8?{bank8, row8, col8, rowcol_inc8, num_rows8, num_cols8, keep_open8, partial8}:PAR_DEFAULT)
`endif
`ifdef def_tiled_chn9
| (start9?{bank9, row9, col9, rowcol_inc9, num_rows9, num_cols9, keep_open9, partial9}:PAR_DEFAULT)
`endif
`ifdef def_tiled_chn10
| (start10?{bank10, row10, col10, rowcol_inc10, num_rows10, num_cols10, keep_open10, partial10}:PAR_DEFAULT)
`endif
`ifdef def_tiled_chn11
| (start11?{bank11, row11, col11, rowcol_inc11, num_rows11, num_cols11, keep_open11, partial11}:PAR_DEFAULT)
`endif
`ifdef def_tiled_chn12
| (start12?{bank12, row12, col12, rowcol_inc12, num_rows12, num_cols12, keep_open12, partial12}:PAR_DEFAULT)
`endif
`ifdef def_tiled_chn13
| (start13?{bank13, row13, col13, rowcol_inc13, num_rows13, num_cols13, keep_open13, partial13}:PAR_DEFAULT)
`endif
`ifdef def_tiled_chn14
| (start14?{bank14, row14, col14, rowcol_inc14, num_rows14, num_cols14, keep_open14, partial14}:PAR_DEFAULT)
`endif
`ifdef def_tiled_chn15
| (start15?{bank15, row15, col15, rowcol_inc15, num_rows15, num_cols15, keep_open15, partial15}:PAR_DEFAULT)
`endif
;
always @ (posedge clk) begin
if (start_rd_w || start_wr_w || start_rd32_w || start_wr32_w) begin
bank_r <= bank_w;
row_r <= row_w;
col_r <= col_w;
rowcol_inc_r <= rowcol_inc_w;
num_rows_r <= num_rows_w;
num_cols_r <= num_cols_w;
keep_open_r <= keep_open_w;
partial_r <= partial_w;
end
start_rd_r <= start_rd_w;
start_wr_r <= start_wr_w;
start_rd32_r <= start_rd32_w;
start_wr32_r <= start_wr32_w;
end
endmodule