The MicroBlaze data-side bus
interface performs the read steering and write steering required to support the
following transfers:
- byte, halfword, and word transfers to word devices
- byte and halfword transfers to halfword devices
- byte transfers to byte devices
MicroBlaze does not support transfers that are larger than
the addressed device. These types of transfers require dynamic bus sizing and
conversion cycles that are not supported by the MicroBlaze bus
interface.
Big endian format is only applicable when using the MMU in virtual or
protected mode (C_USE_MMU
> 1) or when reorder instructions are
enabled (C_USE_REORDER_INSTR
= 1).
Data steering with 32-bit data for read cycles are shown in Table 1 and Table 2, and 32-bit data
steering for write cycles are shown in Table 3 and Table 4.
Table 1. Big Endian Read Data Steering (Load to Register
rD)
Address [LSB-1:LSB] |
Byte_Enable [0:3] |
Transfer Size |
Register
rD Data |
0:7 |
8:15 |
16:23 |
24:31 |
11 |
0001 |
byte |
|
|
|
Byte3 |
10 |
0010 |
byte |
|
|
|
Byte2 |
01 |
0100 |
byte |
|
|
|
Byte1 |
00 |
1000 |
byte |
|
|
|
Byte0 |
10 |
0011 |
halfword |
|
|
Byte2 |
Byte3 |
00 |
1100 |
halfword |
|
|
Byte0 |
Byte1 |
00 |
1111 |
word |
Byte0 |
Byte1 |
Byte2 |
Byte3 |
Table 2. Little Endian Read Data Steering (Load to Register
rD)
Address [LSB-1:LSB] |
Byte_Enable [0:3] |
Transfer Size |
Register
rD Data |
0:7 |
8:15 |
16:23 |
24:31 |
11 |
1000 |
byte |
|
|
|
Byte0 |
10 |
0100 |
byte |
|
|
|
Byte1 |
01 |
0010 |
byte |
|
|
|
Byte2 |
00 |
0001 |
byte |
|
|
|
Byte3 |
10 |
1100 |
halfword |
|
|
Byte0 |
Byte1 |
00 |
0011 |
halfword |
|
|
Byte2 |
Byte3 |
00 |
1111 |
word |
Byte0 |
Byte1 |
Byte2 |
Byte3 |
Table 3. Big Endian Write Data Steering (Store from
Register rD)
Address [LSB-1:LSB] |
Byte_Enable [0:3] |
Transfer Size |
Write
Data Bus Bytes from rD |
Byte0 |
Byte1 |
Byte2 |
Byte3 |
11 |
0001 |
byte |
|
|
|
24:31 |
10 |
0010 |
byte |
|
|
rD[24:31 |
|
01 |
0100 |
byte |
|
24:31 |
|
|
00 |
1000 |
byte |
24:31 |
|
|
|
10 |
0011 |
halfword |
|
|
16:23 |
24:31 |
00 |
1100 |
halfword |
16:23 |
24:31 |
|
|
00 |
1111 |
word |
0:7 |
8:15 |
16:23 |
24:31 |
Table 4. Little Endian Write Data Steering (Store from
Register rD)
Address [LSB-1:LSB] |
Byte_Enable [0:3] |
Transfer Size |
Write
Data Bus Bytes from rD |
Byte3 |
Byte2 |
Byte1 |
Byte0 |
11 |
1000 |
byte |
24:31 |
|
|
|
10 |
0100 |
byte |
|
24:31 |
|
|
01 |
0010 |
byte |
|
|
24:31 |
|
00 |
0001 |
byte |
|
|
|
24:31 |
10 |
1100 |
halfword |
16:23 |
24:31 |
|
|
00 |
0011 |
halfword |
|
|
16:23 |
24:31 |
00 |
1111 |
word |
0:7 |
8:15 |
16:23 |
24:31 |
Note: Other masters could have more restrictive
requirements for byte lane placement than those allowed by MicroBlaze. Slave devices are typically attached “left-justified”
with byte devices attached to the most-significant byte lane, and halfword devices
attached to the most significant halfword lane. The MicroBlaze steering logic fully supports this attachment
method.
When using 64-bit data on DLMB or M_AXI_DP with 64-bit
MicroBlaze, the following transfers are
also supported:
- byte, halfword, word, and long transfers to long devices
Data steering with 64-bit data for read cycles are shown
in Table 5 and Table 6, and 64-bit data
steering for write cycles are shown in Table 7 and Table 8.
Table 5. Big Endian Read Data Steering (Load to Register
rD)
Address [LSB-2:LSB] |
Byte_Enable [0:7] |
Transfer Size |
Register
rD Data |
0:7 |
8:15 |
16:23 |
24:31 |
32:39 |
40:47 |
48:55 |
56:63 |
111 |
00000001 |
byte |
|
|
|
|
|
|
|
Byte7 |
110 |
00000010 |
byte |
|
|
|
|
|
|
|
Byte6 |
101 |
00000100 |
byte |
|
|
|
|
|
|
|
Byte5 |
100 |
00001000 |
byte |
|
|
|
|
|
|
|
Byte4 |
011 |
00010000 |
byte |
|
|
|
|
|
|
|
Byte3 |
010 |
00100000 |
byte |
|
|
|
|
|
|
|
Byte2 |
001 |
01000000 |
byte |
|
|
|
|
|
|
|
Byte1 |
000 |
10000000 |
byte |
|
|
|
|
|
|
|
Byte0 |
110 |
00000011 |
halfword |
|
|
|
|
|
|
Byte7 |
Byte6 |
100 |
00001100 |
halfword |
|
|
|
|
|
|
Byte5 |
Byte4 |
010 |
00110000 |
halfword |
|
|
|
|
|
|
Byte3 |
Byte2 |
000 |
11000000 |
halfword |
|
|
|
|
|
|
Byte1 |
Byte0 |
100 |
00001111 |
word |
|
|
|
|
Byte4 |
Byte5 |
Byte6 |
Byte7 |
000 |
11110000 |
word |
|
|
|
|
Byte0 |
Byte1 |
Byte2 |
Byte3 |
000 |
11111111 |
long |
Byte0 |
Byte1 |
Byte2 |
Byte3 |
Byte4 |
Byte5 |
Byte6 |
Byte7 |
Table 6. Little Endian Read Data Steering (Load to Register
rD)
Address [LSB-2:LSB] |
Byte_Enable [0:7] |
Transfer Size |
Register
rD Data |
0:7 |
8:15 |
16:23 |
24:31 |
32:39 |
40:47 |
48:55 |
56:63 |
111 |
10000000 |
byte |
|
|
|
|
|
|
|
Byte0 |
110 |
01000000 |
byte |
|
|
|
|
|
|
|
Byte1 |
101 |
00100000 |
byte |
|
|
|
|
|
|
|
Byte2 |
100 |
00010000 |
byte |
|
|
|
|
|
|
|
Byte3 |
011 |
00001000 |
byte |
|
|
|
|
|
|
|
Byte4 |
010 |
00000100 |
byte |
|
|
|
|
|
|
|
Byte5 |
001 |
00000010 |
byte |
|
|
|
|
|
|
|
Byte6 |
000 |
00000001 |
byte |
|
|
|
|
|
|
|
Byte7 |
110 |
11000000 |
halfword |
|
|
|
|
|
|
Byte0 |
Byte1 |
100 |
00110000 |
halfword |
|
|
|
|
|
|
Byte2 |
Byte3 |
010 |
00001100 |
halfword |
|
|
|
|
|
|
Byte4 |
Byte5 |
000 |
00000011 |
halfword |
|
|
|
|
|
|
Byte6 |
Byte7 |
100 |
11110000 |
word |
|
|
|
|
Byte0 |
Byte1 |
Byte2 |
Byte3 |
000 |
00001111 |
word |
|
|
|
|
Byte4 |
Byte5 |
Byte6 |
Byte7 |
000 |
11111111 |
long |
Byte0 |
Byte1 |
Byte2 |
Byte3 |
Byte4 |
Byte5 |
Byte6 |
Byte7 |
Table 7. Big Endian Write Data Steering (Store from
Register rD)
Address [LSB-2:LSB] |
Byte_Enable [0:7] |
Transfer Size |
Write
Data Bus Bytes from rD |
Byte0 |
Byte1 |
Byte2 |
Byte3 |
Byte4 |
Byte5 |
Byte6 |
Byte7 |
111 |
00000001 |
byte |
|
|
|
|
|
|
|
56:63 |
110 |
00000010 |
byte |
|
|
|
|
|
|
56:63 |
|
101 |
00000100 |
byte |
|
|
|
|
|
56:63 |
|
|
100 |
00001000 |
byte |
|
|
|
|
56:63 |
|
|
|
011 |
00010000 |
byte |
|
|
|
56:63 |
|
|
|
|
010 |
00100000 |
byte |
|
|
56:63 |
|
|
|
|
|
001 |
01000000 |
byte |
|
56:63 |
|
|
|
|
|
|
000 |
10000000 |
byte |
56:63 |
|
|
|
|
|
|
|
110 |
00000011 |
halfword |
|
|
|
|
|
|
48:55 |
56:63 |
100 |
00001100 |
halfword |
|
|
|
|
48:55 |
56:63 |
|
|
010 |
00110000 |
halfword |
|
|
48:55 |
56:63 |
|
|
|
|
000 |
11000000 |
halfword |
48:55 |
56:63 |
|
|
|
|
|
|
100 |
00001111 |
word |
|
|
|
|
32:39 |
40:47 |
48:55 |
56:63 |
000 |
11110000 |
word |
32:39 |
40:47 |
48:55 |
56:63 |
|
|
|
|
000 |
11111111 |
long |
0:7 |
8:15 |
16:23 |
24:31 |
32:39 |
40:47 |
48:55 |
56:63 |
Table 8. Little Endian Write Data Steering (Store from
Register rD)
Address [LSB-2:LSB] |
Byte_Enable [0:7] |
Transfer Size |
Write
Data Bus Bytes from rD |
Byte7 |
Byte6 |
Byte5 |
Byte4 |
Byte3 |
Byte2 |
Byte1 |
Byte0 |
111 |
10000000 |
byte |
56:63 |
|
|
|
|
|
|
|
110 |
01000000 |
byte |
|
56:63 |
|
|
|
|
|
|
101 |
00100000 |
byte |
|
|
56:63 |
|
|
|
|
|
100 |
00010000 |
byte |
|
|
|
56:63 |
|
|
|
|
011 |
00001000 |
byte |
|
|
|
|
56:63 |
|
|
|
010 |
00000100 |
byte |
|
|
|
|
|
56:63 |
|
|
001 |
00000010 |
byte |
|
|
|
|
|
|
56:63 |
|
000 |
00000000 |
byte |
|
|
|
|
|
|
|
56:63 |
110 |
11000000 |
halfword |
48:55 |
56:63 |
|
|
|
|
|
|
100 |
00110000 |
halfword |
|
|
48:55 |
56:63 |
|
|
|
|
010 |
00001100 |
halfword |
|
|
|
|
48:55 |
56:63 |
|
|
000 |
00000011 |
halfword |
|
|
|
|
|
|
48:55 |
56:63 |
100 |
11110000 |
word |
32:39 |
40:47 |
48:55 |
56:63 |
|
|
|
|
000 |
00001111 |
word |
|
|
|
|
32:39 |
40:47 |
48:55 |
56:63 |
000 |
11111111 |
long |
0:7 |
8:15 |
16:23 |
24:31 |
32:39 |
40:47 |
48:55 |
56:63 |