SPRUJB6B November 2024 – May 2025 AM2612
This section specifies the MAU’s address space. The relevant constants are produced automatically in header files. All addresses are in words, not bytes.
Certain addresses are described as “sticky”. Normally when the MAU reads n words starting at an address x, they will be from incrementing addresses: x, x+1, …, x+n-1. However, if an address is “sticky”, then the MAU will not increment the address after reading from it, so the reads will be x, x, …, x; or if x+1 is sticky they will be x, x+1, x+1, …, x+1. This is used for the RNG port, for example: to read a random number of many words, the MCG must repeatedly read the same RNG address. Likewise, it is used for constant values such as 0 or 1.
| Region Start | Region Length | Interpretation |
|---|---|---|
| ADDR_RAM_BASE | RAM_WORDS | SRAM port |
| ADDR_ROM_BASE | ROM_WORDS | ROM port |
| ADDR_RAM_SLOT_BASE | RAM_NSLOTS | ADDR_RAM_SLOT_BASE + offset is equivalent to RAM_SLOT_PTR + offset*RAM_STRIDE. |
| ADDR_ROM_SLOT_BASE | ROM_NSLOTS | ADDR_ROM_SLOT_BASE + offset is equivalent to ROM_SLOT_PTR + offset*ROM_STRIDE. |
| ADDR_RNG_ODD | 1 | When read, returns a random word with the least significant bit set (i.e. a random odd word). This address is not sticky. |
| ADDR_RNG | 1 | When read, returns a random word. This address is sticky. |
| ADDR_CONST_BASE | 32 |
ADDR_CONST_BASE + 0bWXYZ0 reads as 0bWXX..XXYZ and is not sticky. ADDR_CONST_BASE + 0bWXYZ1 reads as 0bXX…XX and is sticky. |
In the default configuration of PKE, the RNG is a weak pseudorandom generator designed for blinding countermeasures to DPA attacks. It is not strong enough to generate keys or ECDSA nonces. The address space for PKE is shown in the table below:
| Region Start | Start Value | Region Length | Length Value |
|---|---|---|---|
| ADDR_RAM_BASE | 0x4000 | RAM_WORDS | 0x400 |
| ADDR_ROM_BASE | 0x2000 | ROM_WORDS | 0x200 |
| ADDR_RAM_SLOT_BASE | 0x1020 | RAM_NSLOTS | 0x20 |
| ADDR_ROM_SLOT_BASE | 0x1040 | ROM_NSLOTS | 0x20 |
| ADDR_RNG_ODD | 0x1060 | 1 | 1 |
| ADDR_RNG | 0x1061 | 1 | 1 |
| ADDR_CONST_BASE | 0x1000 | 32 | 32 |
The address ADDR_CONST_BASE + 0bwxyz0 generates the word 0bwxx…xxyz and is not sticky. The address ADDR_CONST_BASE+0bwxyz1 generates the word 0bxx…xx and is sticky. Thus, the n-word value at ADDR_CONST_BASE + 0bwxyz0 is 0bxx…xxwxx…xxyz. Some useful generated values are shown in the table below.
| Generated Constant Value | Binary Value | Address |
|---|---|---|
| 0 | 0b000…000…000 | ADDR_CONST_BASE + 0b00000 |
| 1 | 0b000…000…001 | ADDR_CONST_BASE + 0b00010 |
| 2n*MAU_INT_WORD_SIZE-1 | 0b111…111…111 | ADDR_CONST_BASE + 0b11110 |
| 2 | 0b000…000…010 | ADDR_CONST_BASE + 0b00100 |
| 2n*MAU_INT_WORD_SIZE-2 | 0b111…111…110 | ADDR_CONST_BASE + 0b11100 |
| 2MAU_INT_WORD_SIZE/2 | 0b100..00 | ADDR_CONST_BASE + 0b10000 |