Expand description
Single-cycle IO block
Provides core-local and inter-core hardware for the two processors, with single-cycle access.
Modules§
- cpuid
- Processor core identifier
Value is 0 when read from processor core 0, and 1 when read from processor core 1. - div_csr
- Control and status register for divider.
- div_
quotient - Divider result quotient
The result ofDIVIDEND / DIVISOR
(division). Contents undefined while CSR_READY is low.
For signed calculations, QUOTIENT is negative when the signs of DIVIDEND and DIVISOR differ.
This register can be written to directly, for context save/restore purposes. This halts any
in-progress calculation and sets the CSR_READY and CSR_DIRTY flags.
Reading from QUOTIENT clears the CSR_DIRTY flag, so should read results in the order
REMAINDER, QUOTIENT if CSR_DIRTY is used. - div_
remainder - Divider result remainder
The result ofDIVIDEND % DIVISOR
(modulo). Contents undefined while CSR_READY is low.
For signed calculations, REMAINDER is negative only when DIVIDEND is negative.
This register can be written to directly, for context save/restore purposes. This halts any
in-progress calculation and sets the CSR_READY and CSR_DIRTY flags. - div_
sdividend - Divider signed dividend
The same as UDIVIDEND, but starts a signed calculation, rather than unsigned. - div_
sdivisor - Divider signed divisor
The same as UDIVISOR, but starts a signed calculation, rather than unsigned. - div_
udividend - Divider unsigned dividend
Write to the DIVIDEND operand of the divider, i.e. the p inp / q
.
Any operand write starts a new calculation. The results appear in QUOTIENT, REMAINDER.
UDIVIDEND/SDIVIDEND are aliases of the same internal register. The U alias starts an
unsigned calculation, and the S alias starts a signed calculation. - div_
udivisor - Divider unsigned divisor
Write to the DIVISOR operand of the divider, i.e. the q inp / q
.
Any operand write starts a new calculation. The results appear in QUOTIENT, REMAINDER.
UDIVISOR/SDIVISOR are aliases of the same internal register. The U alias starts an
unsigned calculation, and the S alias starts a signed calculation. - fifo_rd
- Read access to this core’s RX FIFO
- fifo_st
- Status register for inter-core FIFOs (mailboxes).
There is one FIFO in the core 0 -> core 1 direction, and one core 1 -> core 0. Both are 32 bits wide and 8 words deep.
Core 0 can see the read side of the 1->0 FIFO (RX), and the write side of 0->1 FIFO (TX).
Core 1 can see the read side of the 0->1 FIFO (RX), and the write side of 1->0 FIFO (TX).
The SIO IRQ for each core is the logical OR of the VLD, WOF and ROE fields of its FIFO_ST register. - fifo_wr
- Write access to this core’s TX FIFO
- gpio_
hi_ in - Input value for QSPI pins
- gpio_
hi_ oe - QSPI output enable
- gpio_
hi_ oe_ clr - QSPI output enable clear
- gpio_
hi_ oe_ set - QSPI output enable set
- gpio_
hi_ oe_ xor - QSPI output enable XOR
- gpio_
hi_ out - QSPI output value
- gpio_
hi_ out_ clr - QSPI output value clear
- gpio_
hi_ out_ set - QSPI output value set
- gpio_
hi_ out_ xor - QSPI output value XOR
- gpio_in
- Input value for GPIO pins
- gpio_oe
- GPIO output enable
- gpio_
oe_ clr - GPIO output enable clear
- gpio_
oe_ set - GPIO output enable set
- gpio_
oe_ xor - GPIO output enable XOR
- gpio_
out - GPIO output value
- gpio_
out_ clr - GPIO output value clear
- gpio_
out_ set - GPIO output value set
- gpio_
out_ xor - GPIO output value XOR
- interp0_
accum0 - Read/write access to accumulator 0
- interp0_
accum0_ add - Values written here are atomically added to ACCUM0
Reading yields lane 0’s raw shift and mask value (BASE0 not added). - interp0_
accum1 - Read/write access to accumulator 1
- interp0_
accum1_ add - Values written here are atomically added to ACCUM1
Reading yields lane 1’s raw shift and mask value (BASE1 not added). - interp0_
base0 - Read/write access to BASE0 register.
- interp0_
base1 - Read/write access to BASE1 register.
- interp0_
base2 - Read/write access to BASE2 register.
- interp0_
base_ 1and0 - On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously.
Each half is sign-extended to 32 bits if that lane’s SIGNED flag is set. - interp0_
ctrl_ lane0 - Control register for lane 0
- interp0_
ctrl_ lane1 - Control register for lane 1
- interp0_
peek_ full - Read FULL result, without altering any internal state (PEEK).
- interp0_
peek_ lane0 - Read LANE0 result, without altering any internal state (PEEK).
- interp0_
peek_ lane1 - Read LANE1 result, without altering any internal state (PEEK).
- interp0_
pop_ full - Read FULL result, and simultaneously write lane results to both accumulators (POP).
- interp0_
pop_ lane0 - Read LANE0 result, and simultaneously write lane results to both accumulators (POP).
- interp0_
pop_ lane1 - Read LANE1 result, and simultaneously write lane results to both accumulators (POP).
- interp1_
accum0 - Read/write access to accumulator 0
- interp1_
accum0_ add - Values written here are atomically added to ACCUM0
Reading yields lane 0’s raw shift and mask value (BASE0 not added). - interp1_
accum1 - Read/write access to accumulator 1
- interp1_
accum1_ add - Values written here are atomically added to ACCUM1
Reading yields lane 1’s raw shift and mask value (BASE1 not added). - interp1_
base0 - Read/write access to BASE0 register.
- interp1_
base1 - Read/write access to BASE1 register.
- interp1_
base2 - Read/write access to BASE2 register.
- interp1_
base_ 1and0 - On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously.
Each half is sign-extended to 32 bits if that lane’s SIGNED flag is set. - interp1_
ctrl_ lane0 - Control register for lane 0
- interp1_
ctrl_ lane1 - Control register for lane 1
- interp1_
peek_ full - Read FULL result, without altering any internal state (PEEK).
- interp1_
peek_ lane0 - Read LANE0 result, without altering any internal state (PEEK).
- interp1_
peek_ lane1 - Read LANE1 result, without altering any internal state (PEEK).
- interp1_
pop_ full - Read FULL result, and simultaneously write lane results to both accumulators (POP).
- interp1_
pop_ lane0 - Read LANE0 result, and simultaneously write lane results to both accumulators (POP).
- interp1_
pop_ lane1 - Read LANE1 result, and simultaneously write lane results to both accumulators (POP).
- spinlock
- Reading from a spinlock address will:
- spinlock_
st - Spinlock state
A bitmap containing the state of all 32 spinlocks (1=locked).
Mainly intended for debugging.
Structs§
- Register
Block - Register block
Type Aliases§
- CPUID
- CPUID (r) register accessor: Processor core identifier
Value is 0 when read from processor core 0, and 1 when read from processor core 1. - DIV_CSR
- DIV_CSR (r) register accessor: Control and status register for divider.
- DIV_
QUOTIENT - DIV_QUOTIENT (rw) register accessor: Divider result quotient
The result ofDIVIDEND / DIVISOR
(division). Contents undefined while CSR_READY is low.
For signed calculations, QUOTIENT is negative when the signs of DIVIDEND and DIVISOR differ.
This register can be written to directly, for context save/restore purposes. This halts any
in-progress calculation and sets the CSR_READY and CSR_DIRTY flags.
Reading from QUOTIENT clears the CSR_DIRTY flag, so should read results in the order
REMAINDER, QUOTIENT if CSR_DIRTY is used. - DIV_
REMAINDER - DIV_REMAINDER (rw) register accessor: Divider result remainder
The result ofDIVIDEND % DIVISOR
(modulo). Contents undefined while CSR_READY is low.
For signed calculations, REMAINDER is negative only when DIVIDEND is negative.
This register can be written to directly, for context save/restore purposes. This halts any
in-progress calculation and sets the CSR_READY and CSR_DIRTY flags. - DIV_
SDIVIDEND - DIV_SDIVIDEND (rw) register accessor: Divider signed dividend
The same as UDIVIDEND, but starts a signed calculation, rather than unsigned. - DIV_
SDIVISOR - DIV_SDIVISOR (rw) register accessor: Divider signed divisor
The same as UDIVISOR, but starts a signed calculation, rather than unsigned. - DIV_
UDIVIDEND - DIV_UDIVIDEND (rw) register accessor: Divider unsigned dividend
Write to the DIVIDEND operand of the divider, i.e. the p inp / q
.
Any operand write starts a new calculation. The results appear in QUOTIENT, REMAINDER.
UDIVIDEND/SDIVIDEND are aliases of the same internal register. The U alias starts an
unsigned calculation, and the S alias starts a signed calculation. - DIV_
UDIVISOR - DIV_UDIVISOR (rw) register accessor: Divider unsigned divisor
Write to the DIVISOR operand of the divider, i.e. the q inp / q
.
Any operand write starts a new calculation. The results appear in QUOTIENT, REMAINDER.
UDIVISOR/SDIVISOR are aliases of the same internal register. The U alias starts an
unsigned calculation, and the S alias starts a signed calculation. - FIFO_RD
- FIFO_RD (r) register accessor: Read access to this core’s RX FIFO
- FIFO_ST
- FIFO_ST (rw) register accessor: Status register for inter-core FIFOs (mailboxes).
There is one FIFO in the core 0 -> core 1 direction, and one core 1 -> core 0. Both are 32 bits wide and 8 words deep.
Core 0 can see the read side of the 1->0 FIFO (RX), and the write side of 0->1 FIFO (TX).
Core 1 can see the read side of the 0->1 FIFO (RX), and the write side of 1->0 FIFO (TX).
The SIO IRQ for each core is the logical OR of the VLD, WOF and ROE fields of its FIFO_ST register. - FIFO_WR
- FIFO_WR (w) register accessor: Write access to this core’s TX FIFO
- GPIO_
HI_ IN - GPIO_HI_IN (r) register accessor: Input value for QSPI pins
- GPIO_
HI_ OE - GPIO_HI_OE (rw) register accessor: QSPI output enable
- GPIO_
HI_ OE_ CLR - GPIO_HI_OE_CLR (w) register accessor: QSPI output enable clear
- GPIO_
HI_ OE_ SET - GPIO_HI_OE_SET (w) register accessor: QSPI output enable set
- GPIO_
HI_ OE_ XOR - GPIO_HI_OE_XOR (w) register accessor: QSPI output enable XOR
- GPIO_
HI_ OUT - GPIO_HI_OUT (rw) register accessor: QSPI output value
- GPIO_
HI_ OUT_ CLR - GPIO_HI_OUT_CLR (w) register accessor: QSPI output value clear
- GPIO_
HI_ OUT_ SET - GPIO_HI_OUT_SET (w) register accessor: QSPI output value set
- GPIO_
HI_ OUT_ XOR - GPIO_HI_OUT_XOR (w) register accessor: QSPI output value XOR
- GPIO_IN
- GPIO_IN (r) register accessor: Input value for GPIO pins
- GPIO_OE
- GPIO_OE (rw) register accessor: GPIO output enable
- GPIO_
OE_ CLR - GPIO_OE_CLR (w) register accessor: GPIO output enable clear
- GPIO_
OE_ SET - GPIO_OE_SET (w) register accessor: GPIO output enable set
- GPIO_
OE_ XOR - GPIO_OE_XOR (w) register accessor: GPIO output enable XOR
- GPIO_
OUT - GPIO_OUT (rw) register accessor: GPIO output value
- GPIO_
OUT_ CLR - GPIO_OUT_CLR (w) register accessor: GPIO output value clear
- GPIO_
OUT_ SET - GPIO_OUT_SET (w) register accessor: GPIO output value set
- GPIO_
OUT_ XOR - GPIO_OUT_XOR (w) register accessor: GPIO output value XOR
- INTER
P0_ ACCU M0 - INTERP0_ACCUM0 (rw) register accessor: Read/write access to accumulator 0
- INTER
P0_ ACCU M0_ ADD - INTERP0_ACCUM0_ADD (rw) register accessor: Values written here are atomically added to ACCUM0
Reading yields lane 0’s raw shift and mask value (BASE0 not added). - INTER
P0_ ACCU M1 - INTERP0_ACCUM1 (rw) register accessor: Read/write access to accumulator 1
- INTER
P0_ ACCU M1_ ADD - INTERP0_ACCUM1_ADD (rw) register accessor: Values written here are atomically added to ACCUM1
Reading yields lane 1’s raw shift and mask value (BASE1 not added). - INTER
P0_ BASE0 - INTERP0_BASE0 (rw) register accessor: Read/write access to BASE0 register.
- INTER
P0_ BASE1 - INTERP0_BASE1 (rw) register accessor: Read/write access to BASE1 register.
- INTER
P0_ BASE2 - INTERP0_BASE2 (rw) register accessor: Read/write access to BASE2 register.
- INTER
P0_ BASE_ 1AND0 - INTERP0_BASE_1AND0 (w) register accessor: On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously.
Each half is sign-extended to 32 bits if that lane’s SIGNED flag is set. - INTER
P0_ CTRL_ LANE0 - INTERP0_CTRL_LANE0 (rw) register accessor: Control register for lane 0
- INTER
P0_ CTRL_ LANE1 - INTERP0_CTRL_LANE1 (rw) register accessor: Control register for lane 1
- INTER
P0_ PEEK_ FULL - INTERP0_PEEK_FULL (r) register accessor: Read FULL result, without altering any internal state (PEEK).
- INTER
P0_ PEEK_ LANE0 - INTERP0_PEEK_LANE0 (r) register accessor: Read LANE0 result, without altering any internal state (PEEK).
- INTER
P0_ PEEK_ LANE1 - INTERP0_PEEK_LANE1 (r) register accessor: Read LANE1 result, without altering any internal state (PEEK).
- INTER
P0_ POP_ FULL - INTERP0_POP_FULL (r) register accessor: Read FULL result, and simultaneously write lane results to both accumulators (POP).
- INTER
P0_ POP_ LANE0 - INTERP0_POP_LANE0 (r) register accessor: Read LANE0 result, and simultaneously write lane results to both accumulators (POP).
- INTER
P0_ POP_ LANE1 - INTERP0_POP_LANE1 (r) register accessor: Read LANE1 result, and simultaneously write lane results to both accumulators (POP).
- INTER
P1_ ACCU M0 - INTERP1_ACCUM0 (rw) register accessor: Read/write access to accumulator 0
- INTER
P1_ ACCU M0_ ADD - INTERP1_ACCUM0_ADD (rw) register accessor: Values written here are atomically added to ACCUM0
Reading yields lane 0’s raw shift and mask value (BASE0 not added). - INTER
P1_ ACCU M1 - INTERP1_ACCUM1 (rw) register accessor: Read/write access to accumulator 1
- INTER
P1_ ACCU M1_ ADD - INTERP1_ACCUM1_ADD (rw) register accessor: Values written here are atomically added to ACCUM1
Reading yields lane 1’s raw shift and mask value (BASE1 not added). - INTER
P1_ BASE0 - INTERP1_BASE0 (rw) register accessor: Read/write access to BASE0 register.
- INTER
P1_ BASE1 - INTERP1_BASE1 (rw) register accessor: Read/write access to BASE1 register.
- INTER
P1_ BASE2 - INTERP1_BASE2 (rw) register accessor: Read/write access to BASE2 register.
- INTER
P1_ BASE_ 1AND0 - INTERP1_BASE_1AND0 (w) register accessor: On write, the lower 16 bits go to BASE0, upper bits to BASE1 simultaneously.
Each half is sign-extended to 32 bits if that lane’s SIGNED flag is set. - INTER
P1_ CTRL_ LANE0 - INTERP1_CTRL_LANE0 (rw) register accessor: Control register for lane 0
- INTER
P1_ CTRL_ LANE1 - INTERP1_CTRL_LANE1 (rw) register accessor: Control register for lane 1
- INTER
P1_ PEEK_ FULL - INTERP1_PEEK_FULL (r) register accessor: Read FULL result, without altering any internal state (PEEK).
- INTER
P1_ PEEK_ LANE0 - INTERP1_PEEK_LANE0 (r) register accessor: Read LANE0 result, without altering any internal state (PEEK).
- INTER
P1_ PEEK_ LANE1 - INTERP1_PEEK_LANE1 (r) register accessor: Read LANE1 result, without altering any internal state (PEEK).
- INTER
P1_ POP_ FULL - INTERP1_POP_FULL (r) register accessor: Read FULL result, and simultaneously write lane results to both accumulators (POP).
- INTER
P1_ POP_ LANE0 - INTERP1_POP_LANE0 (r) register accessor: Read LANE0 result, and simultaneously write lane results to both accumulators (POP).
- INTER
P1_ POP_ LANE1 - INTERP1_POP_LANE1 (r) register accessor: Read LANE1 result, and simultaneously write lane results to both accumulators (POP).
- SPINLOCK
- SPINLOCK (rw) register accessor: Reading from a spinlock address will:
- SPINLOCK_
ST - SPINLOCK_ST (r) register accessor: Spinlock state
A bitmap containing the state of all 32 spinlocks (1=locked).
Mainly intended for debugging.