Files
OpenExSys_NoC/rtl/util/oh2idx.sv
2023-11-26 14:59:34 +01:00

30 lines
588 B
Systemverilog

module oh2idx
#(
parameter int unsigned N_INPUT = 2,
localparam int unsigned N_INPUT_WIDTH = N_INPUT > 1 ? $clog2(N_INPUT) : 1
)
(
input [N_INPUT-1:0] oh_i,
output [N_INPUT_WIDTH-1:0] idx_o
);
genvar i, j;
logic [N_INPUT_WIDTH-1:0][N_INPUT-1:0] mask;
generate
for(i = 0; i < N_INPUT_WIDTH; i++) begin: gen_mask_i
for(j = 0; j < N_INPUT; j++) begin: gen_mask_j
assign mask[i][j] = (j/(2**i)) % 2;
end
end
endgenerate
generate
for(i = 0; i < N_INPUT_WIDTH; i++) begin: gen_idx_o
assign idx_o[i] = |(oh_i & mask[i]);
end
endgenerate
endmodule