|  | // Copyright lowRISC contributors. | 
|  | // Licensed under the Apache License, Version 2.0, see LICENSE for details. | 
|  | // SPDX-License-Identifier: Apache-2.0 | 
|  | // | 
|  | // Slicer chops the incoming bitstring into OutW granularity. | 
|  | // It supports fractional InW/OutW which fills 0 at the end of message. | 
|  |  | 
|  | `include "prim_assert.sv" | 
|  |  | 
|  | module prim_slicer #( | 
|  | parameter int InW = 64, | 
|  | parameter int OutW = 8, | 
|  |  | 
|  | parameter int IndexW = 4 | 
|  | ) ( | 
|  | input        [IndexW-1:0] sel_i, | 
|  | input        [InW-1:0]    data_i, | 
|  | output logic [OutW-1:0]   data_o | 
|  | ); | 
|  |  | 
|  | localparam int UnrollW = OutW*(2**IndexW); | 
|  |  | 
|  | logic [UnrollW-1:0] unrolled_data; | 
|  |  | 
|  | assign unrolled_data = UnrollW'(data_i); | 
|  |  | 
|  | assign data_o = unrolled_data[sel_i*OutW+:OutW]; | 
|  |  | 
|  | `ASSERT_INIT(ValidWidth_A, InW <= OutW*(2**IndexW)) | 
|  |  | 
|  | endmodule | 
|  |  |