Example
Suppose that you are unpacking a vector of data type uint8 or uint16, and the unpacked signals have these attributes.
| Dimension | Size | Type |
|---|
| Vector | 3 | int8 |
| Vector | 2 | int16 |
| Scalar | 1 | uint8 |
| Scalar | 1 | uint32 |
To unpack the signals:
Set to:
Set to:
{'int8’, ‘int16’, ‘uint8’, ‘uint32’}The block creates four output ports that match the order of the signal data types specified in the cell array.
Set the required byte alignment value. The byte alignment value specifies the number of bytes after which a new byte starts from the previous boundary.
The size of the output is based on the packed vector size, the byte alignment value, and the smallest memory cell size of the processor. Depending on the byte alignment value, output values padded with zeros are discarded before the next signal is unpacked. The smallest addressable memory cell indicates the number of bits occupied by char or uint8 data type for a processor, and determines the structure of packets.
Connect incoming signals to the input port of the Byte Unpack block.
For processors with a smallest addressable memory cell of 8 bits per char, consider the packed input vector data type uint8.
Red zeros represent padded empty memory cells.
For a packed input vector of data type uint8 and byte alignment value 2, the int8 data value (23 04 FD) occupies three memory cells, with each cell occupying 8 bits. The next input signal of int16 data value (00DA FFF4) occupies the next four cells (fifth through eighth), and the fourth cell is empty (padded). The Byte Unpack block considers the alignment and padding of cells while unpacking.
The packed input vector of data type uint16 is:
The unpacked output signals are:
| Unpacked Signals |
|---|
| Dimension | Size | Data Type | Dec Value | Hex Value |
|---|
| Vector | 3 | int8 | 35 | 23 |
| 4 | 04 |
| –3 | FD |
| Vector | 2 | int16 | 218 | 00DA |
| –12 | FFF4 |
| Scalar | 1 | uint8 | 112 | 70 |
| Scalar | 1 | uint32 | 5000 | 00001388 |
For processors such as Texas Instruments® C2000™, with a smallest addressable memory cell of 16 bits per char, consider a packed input vector data type uint8. The output packet occupies 16 bits although the data value that the packet represents is 8 bits. The byte alignment values are calculated with respect to the 16-bit addressable memory.
For a packed input vector of data type uint8 and byte alignment value 2, the int8 data value (0023 0004 00FD) occupies three memory cells, with each cell occupying 16 bits. The next signal of data type int16 (00DA 0000 00F4 00FF) occupies the next four cells (fifth through eighth), and the fourth cell is empty (padded). The Byte Unpack block considers the alignment and padding of cells while unpacking.
For the packed input vector of data type uint16, the output packet occupies 16 bits, and the data value the packet represents is also 16 bits. For a packet size of 16 and larger, the byte alignment is calculated with respect to the number of bytes the data values have to be packed. Therefore, in this case, 1-byte alignment is not allowed.
For a packed input of data type uint16 and byte alignment value 2, the three int8 data values (0423 FD) occupy the first two memory cells. The fourth byte in the second memory cell is empty and padded with zero. The int16 data value (00DA FFF4) occupies the next two memory cells (third and fourth). The Byte Unpack block considers the alignment and padding of cells while unpacking.
The table lists the unpacked output signals. The int8 and uint8 data values occupy 16 bits, as indicated by the hex value.
| Unpacked Signals |
|---|
| Dimension | Size | Data Type | Dec Value | Hex Value |
|---|
| Vector | 3 | int8 | 35 | 0023 |
| 4 | 0004 |
| –3 | FFFD |
| Vector | 2 | int16 | 218 | 00DA |
| –12 | FFF4 |
| Scalar | 1 | uint8 | 112 | 0070 |
| Scalar | 1 | uint32 | 5000 | 00001388 |