blob: d215e1cfb6b4bfb4ffe5386f1d66fe19dfc9b159 [file] [log] [blame]
module axi_address_decoder_BR
#(
parameter N_TARG_PORT = 8,
parameter AXI_ID_IN = 16,
parameter AXI_ID_OUT = AXI_ID_IN+$clog2(N_TARG_PORT)
)
(
rid_i,
rvalid_i,
rready_o,
rvalid_o,
rready_i
);
//parameter N_TARG_PORT = 8;
//parameter AXI_ID_IN = 16;
//parameter AXI_ID_OUT = AXI_ID_IN + $clog2(N_TARG_PORT);
input wire [AXI_ID_OUT - 1:0] rid_i;
input wire rvalid_i;
output reg rready_o;
output reg [N_TARG_PORT - 1:0] rvalid_o;
input wire [N_TARG_PORT - 1:0] rready_i;
reg [N_TARG_PORT - 1:0] req_mask;
wire [$clog2(N_TARG_PORT) - 1:0] ROUTING;
assign ROUTING = rid_i[(AXI_ID_IN + $clog2(N_TARG_PORT)) - 1:AXI_ID_IN];
always @(*) begin
req_mask = 1'sb0;
req_mask[ROUTING] = 1'b1;
end
always @(*) begin
if (rvalid_i)
rvalid_o = {N_TARG_PORT {rvalid_i}} & req_mask;
else
rvalid_o = 1'sb0;
rready_o = |(rready_i & req_mask);
end
endmodule