Github: http://github.com/ultraembedded/core_soc
A basic SoC with Timer, UART, SPI, GPIO and Interrupt Controller peripherals.
Multi-channel timer peripheral.
UART peripheral.
SPI (master mode) peripheral with 8 chip selects.
32 I/O GPIO controller.
3 external peripherals (AXI4-Lite interface).
Interrupt controller (combines peripheral IRQs into single IRQ).
AXI4-Lite slave interface.
Top: core_soc
Clock: clk_i
Reset: rst_i - Asynchronous, active high
parameter CLK_FREQ - Clock speed (in Hz)
parameter BAUDRATE - UART baud rate (e.g. 115200)
parameter C_SCK_RATIO - SPI clock divider ratio for clk_i -> spi_clk_o
Range
Description
0x0000_0000 - 0x00ff_ffff
Peripheral - IRQ controller
0x0100_0000 - 0x01ff_ffff
Peripheral - Timer
0x0200_0000 - 0x02ff_ffff
Peripheral - UART
0x0300_0000 - 0x03ff_ffff
Peripheral - SPI
0x0400_0000 - 0x04ff_ffff
Peripheral - GPIO
0x0500_0000 - 0x05ff_ffff
Peripheral - External 1
0x0600_0000 - 0x06ff_ffff
Peripheral - External 2
0x0700_0000 - 0x07ff_ffff
Peripheral - External 3
Index
Source
0
Peripheral - Timer
1
Peripheral - UART
2
Peripheral - SPI
3
Peripheral - GPIO
4
Peripheral - External 1
5
Peripheral - External 2
6
Peripheral - External 3
Offset
Name
Description
0x0000_0000
IRQ_ISR
[RW] Interrupt Status Register
0x0000_0004
IRQ_IPR
[R] Interrupt Pending Register
0x0000_0008
IRQ_IER
[RW] Interrupt Enable Register
0x0000_000c
IRQ_IAR
[W] Interrupt Acknowledge Register
0x0000_0010
IRQ_SIE
[W] Set Interrupt Enable bits
0x0000_0014
IRQ_CIE
[W] Clear Interrupt Enable bits
0x0000_0018
IRQ_IVR
[RW] Interrupt Vector Register
0x0000_001c
IRQ_MER
[RW] Master Enable Register
0x0100_0008
TIMER_CTRL0
[RW] Control
0x0100_000c
TIMER_CMP0
[RW] Compare value (interrupt on match)
0x0100_0010
TIMER_VAL0
[RW] Current Value
0x0100_0014
TIMER_CTRL1
[RW] Control
0x0100_0018
TIMER_CMP1
[RW] Compare value (interrupt on match)
0x0100_001c
TIMER_VAL1
[RW] Current Value
0x0200_0000
ULITE_RX
[R] UART Data Register
0x0200_0004
ULITE_TX
[W] UART Data Register
0x0200_0008
ULITE_STATUS
[R] UART Status Register
0x0200_000c
ULITE_CONTROL
[RW] UART Configuration Register
0x0300_001c
SPI_DGIER
[RW] Device Global Interrupt Enable Register
0x0300_0020
SPI_IPISR
[RW] IP Interrupt Status Register
0x0300_0028
SPI_IPIER
[RW] IP Interrupt Enable Register
0x0300_0040
SPI_SRR
[RW] Software Reset Register
0x0300_0060
SPI_CR
[RW] SPI Control Register
0x0300_0064
SPI_SR
[R] SPI Status Register
0x0300_0068
SPI_DTR
[W] SPI Data Transmit Register
0x0300_006c
SPI_DRR
[R] SPI Data Receive Register
0x0300_0070
SPI_SSR
[RW] SPI Slave Select Register
0x0400_0000
GPIO_DIRECTION
[RW] Configuration Register
0x0400_0004
GPIO_INPUT
[R] GPIO Input Status
0x0400_0008
GPIO_OUTPUT
[RW] GPIO Output Control
0x0400_000c
GPIO_OUTPUT_SET
[W] GPIO Output Control Set Alias
0x0400_0010
GPIO_OUTPUT_CLR
[W] GPIO Output Control Clr Alias
0x0400_0014
GPIO_INT_MASK
[RW] GPIO Interrupt Enable Mask
0x0400_0018
GPIO_INT_SET
[W] GPIO Interrupt Set
0x0400_001c
GPIO_INT_CLR
[W] GPIO Interrupt Clear
0x0400_0020
GPIO_INT_STATUS
[R] GPIO Interrupt Raw Status
0x0400_0024
GPIO_INT_LEVEL
[RW] GPIO Interrupt Level
0x0400_0028
GPIO_INT_MODE
[RW] GPIO Interrupt Mode
Peripheral Register Fields
Bits
Name
Description
7:0
STATUS
Pending interrupt (unmasked) bitmap.
Bits
Name
Description
7:0
PENDING
Pending interrupts (masked) bitmap.
Bits
Name
Description
7:0
ENABLE
Interrupt enable mask.
Bits
Name
Description
7:0
ACK
Bitmap of interrupts to acknowledge.
Bits
Name
Description
7:0
SET
Bitmap of interrupts to enable.
Bits
Name
Description
7:0
CLR
Bitmap of interrupts to disable.
Bits
Name
Description
31:0
VECTOR
Highest priority active interrupt number.
Bits
Name
Description
0
ME
Master Enable
Timer Register: TIMER_CTRLx
Bits
Name
Description
1
INTERRUPT
Interrupt enable.
2
ENABLE
Timer enable.
Timer Register: TIMER_CMPx
Bits
Name
Description
31:0
VALUE
Match value.
Timer Register: TIMER_VALx
Bits
Name
Description
31:0
CURRENT
Current timer value.
Bits
Name
Description
7:0
DATA
Date byte
Bits
Name
Description
7:0
DATA
Date byte
UART Register: ULITE_STATUS
Bits
Name
Description
4
IE
Interrupt enabled
3
TXFULL
Transmit buffer full
2
TXEMPTY
Transmit buffer empty
1
RXFULL
Receive buffer full
0
RXVALID
Receive buffer not empty
UART Register: ULITE_CONTROL
Bits
Name
Description
4
IE
Interrupt enable
1
RST_RX
Flush Rx Buffer
0
RST_TX
Flush Tx Buffer
Bits
Name
Description
31
GIE
Global interrupt enable.
Bits
Name
Description
2
TX_EMPTY
Tx FIFO empty interrupt status.
Bits
Name
Description
2
TX_EMPTY
Tx FIFO interrupt enable.
Bits
Name
Description
31:0
RESET
Software FIFO reset.
Bits
Name
Description
0
LOOP
Loopback enable (MOSI to MISO).
1
SPE
SPI Enable.
2
MASTER
Master mode (slave mode not currently supported).
3
CPOL
Clock polarity.
4
CPHA
Clock phase.
5
TXFIFO_RST
Tx FIFO reset.
6
RXFIFO_RST
Rx FIFO reset.
7
MANUAL_SS
Manual chip select mode (auto mode not supported).
8
TRANS_INHIBIT
Transfer inhibit.
9
LSB_FIRST
Data LSB first (1) or MSB first (0).
Bits
Name
Description
0
RX_EMPTY
Rx FIFO empty.
1
RX_FULL
Rx FIFO full.
2
TX_EMPTY
Tx FIFO empty.
3
TX_FULL
Tx FIFO full.
Bits
Name
Description
7:0
DATA
Date byte
Bits
Name
Description
7:0
DATA
Date byte
Bits
Name
Description
0
VALUE
Chip select value
GPIO Register: GPIO_DIRECTION
Bits
Name
Description
31:0
OUTPUT
0 = Input, 1 = Output
GPIO Register: GPIO_INPUT
Bits
Name
Description
31:0
VALUE
Raw input status
GPIO Register: GPIO_OUTPUT
Bits
Name
Description
31:0
DATA
GPIO output value
GPIO Register: GPIO_OUTPUT_SET
Bits
Name
Description
31:0
DATA
GPIO output mask - set for high
GPIO Register: GPIO_OUTPUT_CLR
Bits
Name
Description
31:0
DATA
GPIO output mask - set for low
GPIO Register: GPIO_INT_MASK
Bits
Name
Description
31:0
ENABLE
GPIO Interrupt Enable Mask
GPIO Register: GPIO_INT_SET
Bits
Name
Description
31:0
SW_IRQ
Write 1 to assert an interrupt
GPIO Register: GPIO_INT_CLR
Bits
Name
Description
31:0
ACK
Write 1 to clear an interrupt
GPIO Register: GPIO_INT_STATUS
Bits
Name
Description
31:0
RAW
Set if interrupt active (regardless of INT_MASK)
GPIO Register: GPIO_INT_LEVEL
Bits
Name
Description
31:0
ACTIVE_HIGH
GPIO Interrupt Level - 1 = active high / rising edge, 0 = active low / falling edge
GPIO Register: GPIO_INT_MODE
Bits
Name
Description
31:0
EDGE
GPIO Interrupt Mode - 1 = edge triggered, 0 = level