Bits Extraction
For an integer input this block outputs a contiguous selection of bits. The operation can be summarized by this expression:
Output = Input ∧ Mask
i.e. a bitwise AND
between Input
and
Mask
an integer of the same length as input with the bits to extract
set to 1
and the other bits set to 0
.
Bits to Extract parameter defines the method by which the
user selects the output bits as summarized by the following table with index
0
, as that of the least significant bit :
Bits to Extract | Output | Number of Bits or Index of Bit |
Upper Half | Half of the input that contain the most significant bit | Ignored |
Lower Half | Half of the input that contain the least significant bit | Ignored |
Range from MSB | Number of Bits or Index of Bit bits of the input that contain the most significant bit (MSB) | Number of bits to extract. |
Range to LSB | Number of Bits or Index of Bit bits of the input that contain the least significant bit (LSB) | Number of bits to extract. |
Range of bits | Range of bits of the input between the indexes of the bits Start and
End of Number of Bits or Index of Bit parameter. |
Vector with the format [Start, End] where start
the first bit index and end the last bit index. |
The output value depends also on the forth parameter Treat Bit Field as an Integer :
0 : the output is directly the result of extraction.
1 : the output is the integer conversion of the extraction result according to the signed or non-signed status of the input.
The block supports the following types :
Input : scalar. All Scilab's integer type (Data Type parameter).
Output : same type than input.
Data Type (3:int32, 4:int16, 5:int8, ...)
It indicates the integer type on input: Between 3 and 8.
Properties : Type 'vec' of size 1.
Bits to Extract
It indicates the mode used to extract bits from the input data : Between 1 and 5 (1:Upper Half, 2:Lower Half, 3:Range from MSB, 4:Range to LSB, 5:Range of bits)
Properties : Type 'vec' of size 1.
Number of Bits or Index of Bit
When the Bits to Extract field is set to :
1 or 2, this parameter is ignored.
3 or 4, this parameter is used to determine the number of bits to extract. This number must be if the type is :
int32 or uint32: positive and less than 32.
int16 or uint16: positive and less than 16.
int8 or uint8: positive and less than 8.
5, this parameter is used to determine range of bits to extract and it must have the [Start, End]
form vector. Start
must be less than End
.
These values must be, if the type is:
int32 or uint32: positive and less than 32.
int16 or uint16: positive and less than 16.
int8 or uint8: positive and less than 8.
See description for more information
Properties : Type 'vec' of size -1.
Treat Bit Field as an Integer (0:No, 1:Yes)
0 or 1. It indicates the scaling mode to use on the output bits selection. See description for more explanation.
Properties : Type 'vec' of size 1.
always active: no
direct-feedthrough: yes
zero-crossing: no
mode: no
regular inputs:
- port 1 : size [1,1] / type 3
regular outputs:
- port 1 : size [1,1] / type 3
number/sizes of activation inputs: 0
number/sizes of activation outputs: 0
continuous-time state: no
discrete-time state: no
object discrete-time state: no
name of computational function: extract_bit_32_UH0
In the following table, we present the results obtained for the number 215 according to several combinations of the parameters.
Input | Bits to Extract | Number of Bits or Index of Bit | Treat Bit Field as an Integer | Output |
11010111 (215) | Upper Half | Ignored | no | 01100000 (208) |
11010111 (215) | Upper Half | Ignored | yes | 00001101 (13) |
11010111 (215) | Lower Half | Ignored | no | 00000111 (7) |
11010111 (215) | Lower Half | Ignored | yes | 00000111 (7) |
11010111 (215) | Range starting with MSB | 6 | no | 11010100 (212) |
11010111 (215) | Range starting with MSB | 6 | yes | 00110101 (53) |
11010111 (215) | Range starting with LSB | 6 | no | 00010111 (23) |
11010111 (215) | Range starting with LSB | 6 | yes | 00010111 (23) |
11010111 (215) | Range of bits | [ 2, 5 ] | no | 00010100 (20) |
11010111 (215) | Range of bits | [ 2, 5 ] | yes | 00000101 (5) |
11010111 (-41) | Upper half | Ignored | no | 11010000 (-48) |
11010111 (-48) | Upper half | Ignored | yes | 11111101 (-3) |
In the following diagram, two decimal digit numbers are coded on an only byte. The diagram decode the input to obtain two separate digits.