tcache disable fix

This commit is contained in:
Blaise Tine 2023-04-05 17:20:05 -04:00
parent a82ae7df59
commit c13efc9d10
9 changed files with 73 additions and 70 deletions

View file

@ -316,17 +316,23 @@
assign dst.tag = src.tag; \
assign src.ready = dst.ready
`define ASSIGN_VX_MEM_REQ_IF_XTAG(dst, src) \
`define ASSIGN_VX_MEM_REQ_IF_X(dst, src, TD, TS) \
assign dst.valid = src.valid; \
assign dst.rw = src.rw; \
assign dst.byteen = src.byteen; \
assign dst.addr = src.addr; \
assign dst.data = src.data; \
if (TD != TS) \
assign dst.tag = {src.tag, {(TD-TS){1'b0}}}; \
else \
assign dst.tag = src.tag; \
assign src.ready = dst.ready
`define ASSIGN_VX_MEM_RSP_IF_XTAG(dst, src) \
`define ASSIGN_VX_MEM_RSP_IF_X(dst, src, TD, TS) \
assign dst.valid = src.valid; \
assign dst.data = src.data; \
assign dst.tag = src.tag[TS-1 -: TD]; \
assign src.ready = dst.ready
`define ASSIGN_VX_CACHE_REQ_IF(dst, src) \

View file

@ -60,7 +60,7 @@ localparam ICACHE_NUM_REQS = 1;
localparam ICACHE_NUM_BANKS = 1;
// Memory request data bits
localparam ICACHE_MEM_DATA_WIDTH= (ICACHE_LINE_SIZE * 8);
localparam ICACHE_MEM_DATA_WIDTH = (ICACHE_LINE_SIZE * 8);
// Memory request tag bits
`ifdef ICACHE_ENABLE
@ -86,7 +86,7 @@ localparam LSU_MEM_REQS = `NUM_THREADS;
// Batch select bits
localparam DCACHE_NUM_BATCHES = ((LSU_MEM_REQS + DCACHE_NUM_REQS - 1) / DCACHE_NUM_REQS);
localparam DCACHE_BATCH_SEL_BITS= `CLOG2(DCACHE_NUM_BATCHES);
localparam DCACHE_BATCH_SEL_BITS = `CLOG2(DCACHE_NUM_BATCHES);
// Core request tag Id bits
localparam LSUQ_TAG_BITS = (`CLOG2(`LSUQ_SIZE) + DCACHE_BATCH_SEL_BITS);
@ -97,10 +97,10 @@ localparam DCACHE_TAG_WIDTH = (`UP(`UUID_BITS) + DCACHE_TAG_ID_BITS);
localparam DCACHE_ARB_TAG_WIDTH = (DCACHE_TAG_WIDTH + `CLOG2(`SOCKET_SIZE));
// Memory request data bits
localparam DCACHE_MEM_DATA_WIDTH= (DCACHE_LINE_SIZE * 8);
localparam DCACHE_MEM_DATA_WIDTH = (DCACHE_LINE_SIZE * 8);
// Memory request tag bits
localparam DCACHE_NOSM_TAG_WIDTH= (DCACHE_ARB_TAG_WIDTH - `SM_ENABLED);
localparam DCACHE_NOSM_TAG_WIDTH = (DCACHE_ARB_TAG_WIDTH - `SM_ENABLED);
`ifdef DCACHE_ENABLE
localparam DCACHE_MEM_TAG_WIDTH = `CACHE_CLUSTER_NC_MEM_TAG_WIDTH(`DCACHE_MSHR_SIZE, `DCACHE_NUM_BANKS, DCACHE_NUM_REQS, DCACHE_LINE_SIZE, DCACHE_WORD_SIZE, DCACHE_NOSM_TAG_WIDTH, `NUM_SOCKETS, `NUM_DCACHES);
`else
@ -123,7 +123,7 @@ localparam TCACHE_NUM_REQS = `TCACHE_NUM_BANKS;
localparam TEX_MEM_REQS = (4 * `NUM_THREADS);
// Batch select bits
localparam TCACHE_BATCH_SEL_BITS=`ARB_SEL_BITS(TEX_MEM_REQS, TCACHE_NUM_REQS);
localparam TCACHE_BATCH_SEL_BITS =`ARB_SEL_BITS(TEX_MEM_REQS, TCACHE_NUM_REQS);
// Core request tag Id bits
localparam TCACHE_TAG_ID_BITS = (`CLOG2(`TEX_MEM_QUEUE_SIZE) + TCACHE_BATCH_SEL_BITS);
@ -132,7 +132,7 @@ localparam TCACHE_TAG_ID_BITS = (`CLOG2(`TEX_MEM_QUEUE_SIZE) + TCACHE_BATCH_SEL_
localparam TCACHE_TAG_WIDTH = (`UP(`UUID_BITS) + TCACHE_TAG_ID_BITS);
// Memory request data bits
localparam TCACHE_MEM_DATA_WIDTH= (TCACHE_LINE_SIZE * 8);
localparam TCACHE_MEM_DATA_WIDTH = (TCACHE_LINE_SIZE * 8);
// Memory request tag bits
`ifdef TCACHE_ENABLE
@ -157,7 +157,7 @@ localparam RCACHE_NUM_REQS = `RCACHE_NUM_BANKS;
localparam RASTER_MEM_REQS = 9;
// Batch select bits
localparam RCACHE_BATCH_SEL_BITS= `ARB_SEL_BITS(RASTER_MEM_REQS, RCACHE_NUM_REQS);
localparam RCACHE_BATCH_SEL_BITS = `ARB_SEL_BITS(RASTER_MEM_REQS, RCACHE_NUM_REQS);
// Core request tag Id bits
localparam RCACHE_TAG_ID_BITS = (`CLOG2(`RASTER_MEM_QUEUE_SIZE) + RCACHE_BATCH_SEL_BITS);
@ -191,7 +191,7 @@ localparam OCACHE_NUM_REQS = `OCACHE_NUM_BANKS;
localparam ROP_MEM_REQS = (2 * `NUM_THREADS);
// Batch select bits
localparam OCACHE_BATCH_SEL_BITS= `ARB_SEL_BITS(ROP_MEM_REQS, OCACHE_NUM_REQS);
localparam OCACHE_BATCH_SEL_BITS = `ARB_SEL_BITS(ROP_MEM_REQS, OCACHE_NUM_REQS);
// Core request tag Id bits
localparam OCACHE_TAG_ID_BITS = (`CLOG2(`ROP_MEM_QUEUE_SIZE) + OCACHE_BATCH_SEL_BITS);
@ -200,11 +200,11 @@ localparam OCACHE_TAG_ID_BITS = (`CLOG2(`ROP_MEM_QUEUE_SIZE) + OCACHE_BATCH_SEL_
localparam OCACHE_TAG_WIDTH = (`UP(`UUID_BITS) + OCACHE_TAG_ID_BITS);
// Memory request data bits
localparam OCACHE_MEM_DATA_WIDTH= (OCACHE_LINE_SIZE * 8);
localparam OCACHE_MEM_DATA_WIDTH = (OCACHE_LINE_SIZE * 8);
// Memory request tag bits
`ifdef OCACHE_ENABLE
localparam OCACHE_MEM_TAG_WIDTH= `CACHE_CLUSTER_MEM_TAG_WIDTH(`OCACHE_MSHR_SIZE, `OCACHE_NUM_BANKS, `NUM_OCACHES);
localparam OCACHE_MEM_TAG_WIDTH = `CACHE_CLUSTER_MEM_TAG_WIDTH(`OCACHE_MSHR_SIZE, `OCACHE_NUM_BANKS, `NUM_OCACHES);
`else
localparam OCACHE_MEM_TAG_WIDTH = `CACHE_CLUSTER_BYPASS_TAG_WIDTH(OCACHE_NUM_REQS, OCACHE_LINE_SIZE, OCACHE_WORD_SIZE, OCACHE_TAG_WIDTH, `NUM_ROP_UNITS, `NUM_OCACHES);
`endif
@ -212,9 +212,9 @@ localparam OCACHE_MEM_TAG_WIDTH = `CACHE_CLUSTER_BYPASS_TAG_WIDTH(OCACHE_NUM_REQ
/////////////////////////////// L1 Parameters /////////////////////////////////
localparam L1_MEM_TAG_WIDTH = `MAX(`MAX(`MAX(`MAX(ICACHE_MEM_TAG_WIDTH, DCACHE_MEM_TAG_WIDTH),
(`TCACHE_ENABLED ? TCACHE_MEM_TAG_WIDTH : 0)),
(`RCACHE_ENABLED ? RCACHE_MEM_TAG_WIDTH : 0)),
(`OCACHE_ENABLED ? OCACHE_MEM_TAG_WIDTH : 0));
(`EXT_TEX_ENABLED ? TCACHE_MEM_TAG_WIDTH : 0)),
(`EXT_RASTER_ENABLED ? RCACHE_MEM_TAG_WIDTH : 0)),
(`EXT_ROP_ENABLED ? OCACHE_MEM_TAG_WIDTH : 0));
localparam NUM_L1_OUTPUTS = (2 + `EXT_TEX_ENABLED + `EXT_RASTER_ENABLED + `EXT_ROP_ENABLED);

View file

@ -56,7 +56,7 @@ module VX_mem_unit # (
VX_perf_cache_if perf_l2cache_if();
`endif
/////////////////////////////// I-Cache ///////////////////////////////////
/////////////////////////////// I-Cache ///////////////////////////////////
VX_mem_req_if #(
.DATA_WIDTH (ICACHE_MEM_DATA_WIDTH),
@ -103,7 +103,7 @@ module VX_mem_unit # (
.mem_rsp_if (icache_mem_rsp_if)
);
/////////////////////////////// D-Cache ///////////////////////////////////
/////////////////////////////// D-Cache ///////////////////////////////////
VX_mem_req_if #(
.DATA_WIDTH (DCACHE_MEM_DATA_WIDTH),
@ -165,7 +165,7 @@ module VX_mem_unit # (
.mem_rsp_if (dcache_mem_rsp_if)
);
////////////////////////////// Shared Memory //////////////////////////////
////////////////////////////// Shared Memory //////////////////////////////
`ifdef SM_ENABLE
@ -274,7 +274,7 @@ module VX_mem_unit # (
`endif
/////////////////////////////// T-Cache ///////////////////////////////////
/////////////////////////////// T-Cache ///////////////////////////////////
`ifdef EXT_TEX_ENABLE
@ -327,7 +327,7 @@ module VX_mem_unit # (
`endif
/////////////////////////////// O-Cache ///////////////////////////////////
/////////////////////////////// O-Cache ///////////////////////////////////
`ifdef EXT_ROP_ENABLE
@ -381,7 +381,7 @@ module VX_mem_unit # (
`endif
/////////////////////////////// R-Cache ///////////////////////////////////
/////////////////////////////// R-Cache ///////////////////////////////////
`ifdef EXT_RASTER_ENABLE
@ -434,7 +434,7 @@ module VX_mem_unit # (
`endif
/////////////////////////////// L2-Cache //////////////////////////////////
/////////////////////////////// L2-Cache //////////////////////////////////
VX_mem_req_if #(
.DATA_WIDTH (L2_WORD_SIZE * 8),
@ -455,40 +455,25 @@ module VX_mem_unit # (
`UNUSED_PARAM (R_MEM_ARB_IDX)
`UNUSED_PARAM (O_MEM_ARB_IDX)
`ASSIGN_VX_MEM_REQ_IF_XTAG (l2_mem_req_if[I_MEM_ARB_IDX], icache_mem_req_if);
assign l2_mem_req_if[I_MEM_ARB_IDX].tag = L1_MEM_TAG_WIDTH'(icache_mem_req_if.tag);
`ASSIGN_VX_MEM_REQ_IF_X (l2_mem_req_if[I_MEM_ARB_IDX], icache_mem_req_if, L1_MEM_TAG_WIDTH, ICACHE_MEM_TAG_WIDTH);
`ASSIGN_VX_MEM_RSP_IF_X (icache_mem_rsp_if, l2_mem_rsp_if[I_MEM_ARB_IDX], ICACHE_MEM_TAG_WIDTH, L1_MEM_TAG_WIDTH);
`ASSIGN_VX_MEM_RSP_IF_XTAG (icache_mem_rsp_if, l2_mem_rsp_if[I_MEM_ARB_IDX]);
assign icache_mem_rsp_if.tag = ICACHE_MEM_TAG_WIDTH'(l2_mem_rsp_if[I_MEM_ARB_IDX].tag);
`ASSIGN_VX_MEM_REQ_IF_XTAG (l2_mem_req_if[D_MEM_ARB_IDX], dcache_mem_req_if);
assign l2_mem_req_if[D_MEM_ARB_IDX].tag = L1_MEM_TAG_WIDTH'(dcache_mem_req_if.tag);
`ASSIGN_VX_MEM_RSP_IF_XTAG (dcache_mem_rsp_if, l2_mem_rsp_if[D_MEM_ARB_IDX]);
assign dcache_mem_rsp_if.tag = DCACHE_MEM_TAG_WIDTH'(l2_mem_rsp_if[D_MEM_ARB_IDX].tag);
`ASSIGN_VX_MEM_REQ_IF_X (l2_mem_req_if[D_MEM_ARB_IDX], dcache_mem_req_if, L1_MEM_TAG_WIDTH, DCACHE_MEM_TAG_WIDTH);
`ASSIGN_VX_MEM_RSP_IF_X (dcache_mem_rsp_if, l2_mem_rsp_if[D_MEM_ARB_IDX], DCACHE_MEM_TAG_WIDTH, L1_MEM_TAG_WIDTH);
`ifdef EXT_TEX_ENABLE
`ASSIGN_VX_MEM_REQ_IF_XTAG (l2_mem_req_if[T_MEM_ARB_IDX], tcache_mem_req_if);
assign l2_mem_req_if[T_MEM_ARB_IDX].tag = L1_MEM_TAG_WIDTH'(tcache_mem_req_if.tag);
`ASSIGN_VX_MEM_RSP_IF_XTAG (tcache_mem_rsp_if, l2_mem_rsp_if[T_MEM_ARB_IDX]);
assign tcache_mem_rsp_if.tag = TCACHE_MEM_TAG_WIDTH'(l2_mem_rsp_if[T_MEM_ARB_IDX].tag);
`ASSIGN_VX_MEM_REQ_IF_X (l2_mem_req_if[T_MEM_ARB_IDX], tcache_mem_req_if, L1_MEM_TAG_WIDTH, TCACHE_MEM_TAG_WIDTH);
`ASSIGN_VX_MEM_RSP_IF_X (tcache_mem_rsp_if, l2_mem_rsp_if[T_MEM_ARB_IDX], TCACHE_MEM_TAG_WIDTH, L1_MEM_TAG_WIDTH);
`endif
`ifdef EXT_RASTER_ENABLE
`ASSIGN_VX_MEM_REQ_IF_XTAG (l2_mem_req_if[R_MEM_ARB_IDX], rcache_mem_req_if);
assign l2_mem_req_if[R_MEM_ARB_IDX].tag = L1_MEM_TAG_WIDTH'(rcache_mem_req_if.tag);
`ASSIGN_VX_MEM_RSP_IF_XTAG (rcache_mem_rsp_if, l2_mem_rsp_if[R_MEM_ARB_IDX]);
assign rcache_mem_rsp_if.tag = RCACHE_MEM_TAG_WIDTH'(l2_mem_rsp_if[R_MEM_ARB_IDX].tag);
`ASSIGN_VX_MEM_REQ_IF_X (l2_mem_req_if[R_MEM_ARB_IDX], rcache_mem_req_if, L1_MEM_TAG_WIDTH, RCACHE_MEM_TAG_WIDTH);
`ASSIGN_VX_MEM_RSP_IF_X (rcache_mem_rsp_if, l2_mem_rsp_if[R_MEM_ARB_IDX], RCACHE_MEM_TAG_WIDTH, L1_MEM_TAG_WIDTH);
`endif
`ifdef EXT_ROP_ENABLE
`ASSIGN_VX_MEM_REQ_IF_XTAG (l2_mem_req_if[O_MEM_ARB_IDX], ocache_mem_req_if);
assign l2_mem_req_if[O_MEM_ARB_IDX].tag = L1_MEM_TAG_WIDTH'(ocache_mem_req_if.tag);
`ASSIGN_VX_MEM_RSP_IF_XTAG (ocache_mem_rsp_if, l2_mem_rsp_if[O_MEM_ARB_IDX]);
assign ocache_mem_rsp_if.tag = OCACHE_MEM_TAG_WIDTH'(l2_mem_rsp_if[O_MEM_ARB_IDX].tag);
`ASSIGN_VX_MEM_REQ_IF_X (l2_mem_req_if[O_MEM_ARB_IDX], ocache_mem_req_if, L1_MEM_TAG_WIDTH, OCACHE_MEM_TAG_WIDTH);
`ASSIGN_VX_MEM_RSP_IF_X (ocache_mem_rsp_if, l2_mem_rsp_if[O_MEM_ARB_IDX], OCACHE_MEM_TAG_WIDTH, L1_MEM_TAG_WIDTH);
`endif
`RESET_RELAY (l2_reset, reset);

View file

@ -195,7 +195,13 @@ module VX_cache_bank #(
wire creq_fire = creq_valid && creq_ready;
wire [TAG_WIDTH-1:0] mshr_creq_tag = mshr_enable ? mshr_tag[0] : creq_tag[0];
`ASSIGN_REQ_UUID (req_uuid_sel, mshr_creq_tag)
if (UUID_WIDTH != 0) begin
assign req_uuid_sel = mshr_creq_tag[TAG_WIDTH-1 -: UUID_WIDTH];
end else begin
assign req_uuid_sel = 0;
end
`UNUSED_VAR (mshr_creq_tag)
wire [`LINE_WIDTH-1:0] wdata_sel;
@ -230,7 +236,11 @@ module VX_cache_bank #(
.data_out ({valid_st0, is_init_st0, is_mshr_st0, is_fill_st0, is_read_st0, is_write_st0, addr_st0, wdata_st0, wsel_st0, byteen_st0, req_idx_st0, pmask_st0, tag_st0, mshr_id_st0})
);
`ASSIGN_REQ_UUID (req_uuid_st0, tag_st0[0])
if (UUID_WIDTH != 0) begin
assign req_uuid_st0 = tag_st0[0][TAG_WIDTH-1 -: UUID_WIDTH];
end else begin
assign req_uuid_st0 = 0;
end
wire do_read_st0 = valid_st0 && is_read_st0;
wire do_mshr_st0 = valid_st0 && is_mshr_st0;
@ -289,7 +299,11 @@ module VX_cache_bank #(
.data_out ({valid_st1, is_mshr_st1, is_fill_st1, is_read_st1, is_write_st1, is_hit_st1, way_sel_st1, addr_st1, wdata_st1, wsel_st1, byteen_st1, req_idx_st1, pmask_st1, tag_st1, mshr_id_st1, mshr_pending_st1})
);
`ASSIGN_REQ_UUID (req_uuid_st1, tag_st1[0])
if (UUID_WIDTH != 0) begin
assign req_uuid_st1 = tag_st1[0][TAG_WIDTH-1 -: UUID_WIDTH];
end else begin
assign req_uuid_st1 = 0;
end
wire do_read_st1 = valid_st1 && is_read_st1;
wire do_write_st1 = valid_st1 && is_write_st1;

View file

@ -45,13 +45,6 @@
`define LINE_TAG_ADDR(x) x[`LINE_ADDR_WIDTH-1 : `LINE_SEL_BITS]
`define ASSIGN_REQ_UUID(dst, tag) \
if (UUID_WIDTH != 0) begin \
assign dst = tag[TAG_WIDTH-1 -: UUID_WIDTH]; \
end else begin \
assign dst = 0; \
end
///////////////////////////////////////////////////////////////////////////////
`define LINE_TO_MEM_ADDR(x, i) {x, `BANK_SEL_BITS'(i)}

View file

@ -459,8 +459,13 @@ module VX_cache_wrap #(
wire [`UP(UUID_WIDTH)-1:0] core_req_uuid;
wire [`UP(UUID_WIDTH)-1:0] core_rsp_uuid;
`ASSIGN_REQ_UUID (core_req_uuid, core_req_if[i].tag)
`ASSIGN_REQ_UUID (core_rsp_uuid, core_rsp_if[i].tag)
if (UUID_WIDTH != 0) begin
assign core_req_uuid = core_req_if[i].tag[TAG_WIDTH-1 -: UUID_WIDTH];
assign core_rsp_uuid = core_rsp_if[i].tag[TAG_WIDTH-1 -: UUID_WIDTH];
end else begin
assign core_req_uuid = 0;
assign core_rsp_uuid = 0;
end
wire core_req_fire = core_req_if[i].valid && core_req_if[i].ready;
wire core_rsp_fire = core_rsp_if[i].valid && core_rsp_if[i].ready;
@ -481,7 +486,7 @@ module VX_cache_wrap #(
wire [`UP(UUID_WIDTH)-1:0] mem_req_uuid;
wire [`UP(UUID_WIDTH)-1:0] mem_rsp_uuid;
if ((UUID_WIDTH != 0) && (NC_ENABLE || PASSTHRU)) begin
if ((UUID_WIDTH != 0) && (NC_BYPASS != 0)) begin
assign mem_req_uuid = mem_req_if.tag[MEM_TAG_WIDTH-1 -: UUID_WIDTH];
assign mem_rsp_uuid = mem_rsp_if.tag[MEM_TAG_WIDTH-1 -: UUID_WIDTH];
end else begin

View file

@ -252,7 +252,7 @@ module VX_warp_sched #(
assign {schedule_tmask, schedule_pc} = schedule_data[schedule_wid];
`ifndef NDEBUG
assign instr_uuid = (issued_instrs[schedule_wid] * `NUM_WARPS * `NUM_CORES * `NUM_CLUSTERS)
assign instr_uuid = UUID_WIDTH'(issued_instrs[schedule_wid] * `NUM_WARPS * `NUM_CORES * `NUM_CLUSTERS)
+ UUID_WIDTH'(`NUM_WARPS * CORE_ID)
+ UUID_WIDTH'(schedule_wid);
`else

View file

@ -8,8 +8,8 @@ module VX_mem_scheduler #(
parameter ADDR_WIDTH = 32,
parameter DATA_WIDTH = 32,
parameter TAG_WIDTH = 32,
parameter MEM_TAG_ID = 0,
parameter UUID_WIDTH = 0,
parameter MEM_TAG_ID = 0, // upper section of the tag sent to the memory interface
parameter UUID_WIDTH = 0, // upper section of the mem_tag_id containing the UUID
parameter QUEUE_SIZE = 16,
parameter RSP_PARTIAL = 0,
parameter CORE_OUT_REG = 0,

View file

@ -59,7 +59,7 @@ module VX_tex_unit #(
wire req_ready;
for (genvar i = 0; i < NUM_LANES; ++i) begin
assign sel_miplevel[i] = tex_req_if.lod[i][`TEX_LOD_BITS-1:0];
assign sel_miplevel[i] = tex_req_if.lod[i][`TEX_LOD_BITS-1:0];
assign sel_mipoff[i] = tex_dcrs.mipoff[sel_miplevel[i]];
end
@ -279,7 +279,7 @@ endmodule
module VX_tex_unit_top #(
parameter `STRING_TYPE INSTANCE_ID = "",
parameter NUM_LANES = `NUM_THREADS,
parameter TAG_WIDTH = 8
parameter TAG_WIDTH = `TEX_REQ_TAG_WIDTH
) (
input wire clk,
input wire reset,
@ -290,15 +290,15 @@ module VX_tex_unit_top #(
input wire tex_req_valid,
input wire [NUM_LANES-1:0] tex_req_mask,
input wire [1:0][NUM_LANES-1:0][31:0] tex_req_coords,
input wire [1:0][NUM_LANES-1:0][31:0] tex_req_coords,
input wire [NUM_LANES-1:0][`TEX_LOD_BITS-1:0] tex_req_lod,
input wire [`TEX_STAGE_BITS-1:0] tex_req_stage,
input wire [`TEX_REQ_TAG_WIDTH-1:0] tex_req_tag,
input wire [TAG_WIDTH-1:0] tex_req_tag,
output wire tex_req_ready,
output wire tex_rsp_valid,
output wire [NUM_LANES-1:0][31:0] tex_rsp_texels,
output wire [`TEX_REQ_TAG_WIDTH-1:0] tex_rsp_tag,
output wire [TAG_WIDTH-1:0] tex_rsp_tag,
input wire tex_rsp_ready,
output wire [TCACHE_NUM_REQS-1:0] cache_req_valid,
@ -325,12 +325,12 @@ module VX_tex_unit_top #(
VX_tex_req_if #(
.NUM_LANES (NUM_LANES),
.TAG_WIDTH (`TEX_REQ_TAG_WIDTH)
.TAG_WIDTH (TAG_WIDTH)
) tex_req_if();
VX_tex_rsp_if #(
.NUM_LANES (NUM_LANES),
.TAG_WIDTH (`TEX_REQ_TAG_WIDTH)
.TAG_WIDTH (TAG_WIDTH)
) tex_rsp_if();
assign tex_req_if.valid = tex_req_valid;