An open API service indexing awesome lists of open source software.

https://github.com/ultraembedded/core_soc

Basic Peripheral SoC (SPI, GPIO, Timer, UART)
https://github.com/ultraembedded/core_soc

fpga gpio spi timer uart verilog

Last synced: about 2 months ago
JSON representation

Basic Peripheral SoC (SPI, GPIO, Timer, UART)

Awesome Lists containing this project

README

        

## Basic Peripheral SoC

Github: [http://github.com/ultraembedded/core_soc](http://github.com/ultraembedded/core_soc)

A basic SoC with Timer, UART, SPI, GPIO and Interrupt Controller peripherals.

### Features
* 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.

### Configuration
* 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

### Memory Map

| 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 |

### Interrupt Sources

| 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 |

### Peripheral Register Map

| 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

##### IRQ Register: IRQ_ISR

| Bits | Name | Description |
| ---- | ---- | -------------- |
| 7:0 | STATUS | Pending interrupt (unmasked) bitmap. |

##### IRQ Register: IRQ_IPR

| Bits | Name | Description |
| ---- | ---- | -------------- |
| 7:0 | PENDING | Pending interrupts (masked) bitmap. |

##### IRQ Register: IRQ_IER

| Bits | Name | Description |
| ---- | ---- | -------------- |
| 7:0 | ENABLE | Interrupt enable mask. |

##### IRQ Register: IRQ_IAR

| Bits | Name | Description |
| ---- | ---- | -------------- |
| 7:0 | ACK | Bitmap of interrupts to acknowledge. |

##### IRQ Register: IRQ_SIE

| Bits | Name | Description |
| ---- | ---- | -------------- |
| 7:0 | SET | Bitmap of interrupts to enable. |

##### IRQ Register: IRQ_CIE

| Bits | Name | Description |
| ---- | ---- | -------------- |
| 7:0 | CLR | Bitmap of interrupts to disable. |

##### IRQ Register: IRQ_IVR

| Bits | Name | Description |
| ---- | ---- | -------------- |
| 31:0 | VECTOR | Highest priority active interrupt number. |

##### IRQ Register: IRQ_MER

| 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. |

##### UART Register: ULITE_RX

| Bits | Name | Description |
| ---- | ---- | -------------- |
| 7:0 | DATA | Date byte |

##### UART Register: ULITE_TX

| 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 |

##### SPI Register: SPI_DGIER

| Bits | Name | Description |
| ---- | ---- | -------------- |
| 31 | GIE | Global interrupt enable. |

##### SPI Register: SPI_IPISR

| Bits | Name | Description |
| ---- | ---- | -------------- |
| 2 | TX_EMPTY | Tx FIFO empty interrupt status. |

##### SPI Register: SPI_IPIER

| Bits | Name | Description |
| ---- | ---- | -------------- |
| 2 | TX_EMPTY | Tx FIFO interrupt enable. |

##### SPI Register: SPI_SRR

| Bits | Name | Description |
| ---- | ---- | -------------- |
| 31:0 | RESET | Software FIFO reset. |

##### SPI Register: SPI_CR

| 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). |

##### SPI Register: SPI_SR

| 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. |

##### SPI Register: SPI_DTR

| Bits | Name | Description |
| ---- | ---- | -------------- |
| 7:0 | DATA | Date byte |

##### SPI Register: SPI_DRR

| Bits | Name | Description |
| ---- | ---- | -------------- |
| 7:0 | DATA | Date byte |

##### SPI Register: SPI_SSR

| 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 |