blob: 4a8508b50a2fd9b4d74203f666cdfe3ae0de91c6 [file] [view]
# Marmot RISC-V SoC
## A Customizable RISC-V Microcomputer
A custom microcomputer design is useful when off-the-shelf general-purpose microcontrollers fail to meet the system needs. The rocket SoC generator automatically generate an SoC. It circumvents labor-intensive, error-prone, top-level SoC design.
## SoC Customization Flow
The Rocket SoC Generator and Caravel SoC Template are reused to create a twin (not identical) RISC-V SoC consisting of one Rocket RISC-V and one Caravel RISC-V. The objectives here is to save hours on design verification and reduce power consumption rather than saving die area or chip cost.
```mermaid
graph TD
A(A SoC Wish List) -- SoC Description in Chisel--> B
B[The Rocket SoC Generator] --SoC RTL--> D[The OpenLane Flow]
C[Caravel SoC Harness] --Harness RTL--> D
B --FPGA RTL--> L
P[RISC-V IDE Tools]--Code and Executables-->H
L[_Yosys_+nextpnr] --Bitstream--> K[Lattice ECP5 Eval Board]
E(Caravel Firmware) --Init, Monitoring, Debug--> C
D --Sky130 GDS II Layout Data--> F[eFabless MPW]
O[Xschema]--Circuit schematics-->J
F --MPW Chips--> H
F --MPW Chips--> I
I[Caravel EVB] --Breadboarding-->H{User system}
J[KiCad]--Gerber and BOM-->H
```
## Implementing low power operations
The following shows a scheme to manage clock, reset, power and low power state.
```mermaid
sequenceDiagram
Note right of System: Powers<br/>Caravel<br/>Chip.
System -->> Harness: Reset
System -->> Harness: Reset
System -->> Caravel SoC: Reset
Harness -->> Caravel SoC: core clock
Harness -->> Caravel SoC: core reset
Caravel SoC->>Harness: Configuration of clk, DLL
Caravel SoC->>Harness: Configure pad data routing and GPIO
Harness-->>Rocket SoC: Set user_clock full speed
Caravel SoC->>Rocket SoC: Reset user logic
Note left of Rocket SoC: Rocket boots<br/>from ROM logic<br/>XIP SPI flash<br/>runs on DTIM.
Rocket SoC -->> Caravel SoC: Rocket is running OK
Note left of Caravel SoC: Acknoleging <br/>Rocket OK<br/>tuns off External<br/>CPG power<br/>via GPIO or I2C.
Caravel SoC->>System: Turn off External CPG Power
Note left of Rocket SoC: Rocket sends message<br/>"Bring Caravel<br/>to lowest power state"<br/>e.g. wishbone mailbox<br/>and interrupt.
Rocket SoC->>Caravel SoC: "Go low on power"
Note left of Caravel SoC: Management SoC sets<br/>Clocking and DLL<br/> to Caravel's<br/>lowest power state<br/>via System control.
Caravel SoC->> Harness: Caravel goes low power.
Note left of Rocket SoC: Rocket gets<br/>wake up signal<br/>from RTC.
Rocket SoC->>Caravel SoC: "Go full power"
Caravel SoC->>Harness: Configure Clock, DLL via System control
Caravel SoC->>Rocket SoC: "Went full power".
```
## Peripheral Overviews
|Peripheral|Units | Pins / unit | Total pins | Muxed with GPIO | Note
|-------|-------|-------|-------|------|------|
|Clock|1|1|0|-|From mgmt.SoC
|Reset|1|1|0|-|From mgmt.SoC
|QSPI 0 (XIP)|1|6|6|No|For Flash
|QSPI 1 (no XIP)|1|7|7|Yes|For ADC, etc. (CS x2)
|QSPI 2 (no XIP)|1|6|6|Yes|For PSRAM (no time to support XIP)
|UART 0|1|2|2|No
|UART 1-4|4|2|8|Yes
|I2C 0-1|2|2|4|Yes
|JTAG|1|4|4|No
|Total|||37||Max. 38
## Pinouts
Caravel mprj_io[#]|Caravel Mgmt. SoC|Rocket (Marmot) IOF0|Rocket (Marmot) GPIO
|-------|-------|-------|-------|
0|JTAG|-|-
1|SDO|TDO|-
2|SDI|TDI|-
3|CSB|TMS|-
4|SCK|TCK|-
5|ser_rx|uart0_rx|-
6|ser_tx|uart0_tx|-
7|irq|spi1_csb[1]|gpio[24]
8|flash2_csb|spi0_flash_csb|-
9|flash2_sck|spi0_flash_sck|-
10|flash2_io[0]|spi0_flash_io[0]|-
11|flash2_io[1]|spi0_flash_io[1]|-
12|-|spi0_flash_io[2]|-
13|-|spi0_flash_io[3]|-
14|-|spi1_csb[0]|gpio[0]
15|-|spi1_sck|gpio[1]
16|-|spi1_io[0]|gpio[2]
17|-|spi1_io[1]|gpio[3]
18|-|spi1_io[2]|gpio[4]
19|-|spi1_io[3]|gpio[5]
20|-|spi2_csb|gpio[6]
21|-|spi2_sck|gpio[7]
22|-|spi2_io[0]|gpio[8]
23|-|spi2_io[1]|gpio[9]
24|-|spi2_io[2]|gpio[10]
25|-|spi2_io[3]|gpio[11]
26|-|i2c0_sda|gpio[12]
27|-|i2c0_scl|gpio[13]
28|-|i2c1_sda|gpio[14]
29|-|i2c1_scl|gpio[15]
30|-|uart1_rx|gpio[16]
31|-|uart1_tx|gpio[17]
32|-|uart2_rx|gpio[18]
33|-|uart2_tx|gpio[19]
34|-|uart3_rx|gpio[20]
35|-|uart3_tx|gpio[21]
36|-|uart4_rx|gpio[22]
37|-|uart4_tx|gpio[23]
## Address Map
Base|Top|Attribute|Description|Notes
|-------|-------|-------|-------|-------|
0x0000_0000|0x0000_0FFF|RWX A|Debug|Debug Address Space
0x0000_1000|0x0000_2FFF||Reserved|On-Chip Non Volatile Memory
0x0000_3000|0x0000_3FFF|RWX A|Error Device|On-Chip Non Volatile Memory
0x0000_4000|0x0000_FFFF||Reserved|On-Chip Non Volatile Memory
0x0001_0000|0x0001_1FFF|R XC|Mask ROM (8 KiB)|On-Chip Non Volatile Memory
0x0001_2000|0x0002_1FFF||Reserved|On-Chip Non Volatile Memory
0x0200_0000|0x0200_FFFF|RW A|CLINT|On-Chip Peripherals
0x0201_0000|0x07FF_FFFF||Reserved|On-Chip Peripherals
0x0800_0000|0x0800_1FFF|RWX A|ITIM (8 KiB)[^1]|On-Chip Volatile Memory
0x0800_2000|0x0BFF_FFFF||Reserved|On-Chip Volatile Memory
0x0C00_0000|0x0FFF_FFFF|RW A|PLIC|On-Chip Peripherals
0x1000_0000|0x1000_0FFF|RW A|AON|On-Chip Peripherals
0x1000_1000|0x1001_1FFF||Reserved|On-Chip Peripherals
0x1001_2000|0x1001_2FFF|RW A|GPlO|On-Chip Peripherals
0x1001_3000|0x1001_3FFF|RW A|UART 0|On-Chip Peripherals
0x1001_4000|0x1001_4FFF|RW A|QSPI 0|On-Chip Peripherals
0x1001_5000|0x1001_5FFF||Reserved|On-Chip Peripherals
0x1001_6000|0x1001_6FFF|RW A|I2C 0|On-Chip Peripherals
0x1001_7000|0x1002_2FFF||Reserved|On-Chip Peripherals
0x1002_3000|0x1002_3FFF|RW A|UART 1|On-Chip Peripherals
0x1002_4000|0x1002_4FFF|RW A|QSPI 1|On-Chip Peripherals
0x1002_5000|0x1002_5FFF||Reserved|On-Chip Peripherals
0x1002_6000|0x1002_6FFF|RW A|I2C 1|On-Chip Peripherals
0x1002_7000|0x1003_2FFF||Reserved|On-Chip Peripherals
0x1003_3000|0x1003_3FFF|RW A|UART 2|On-Chip Peripherals
0x1003_4000|0x1003_4FFF|RW A|QSPI 2|On-Chip Peripherals
0x1003_5000|0x1FFF_FFFF||Reserved|On-Chip Peripherals
0x1004_3000|0x1005_2FFF|RW A|UART3|On-Chip Peripherals
0x1004_4000|0x1005_2FFF||Reserved|On-Chip Peripherals
0x1005_3000|0x1005_3FFF|RW A|UART 4|On-Chip Peripherals
0x1005_4000|0x1FFF_FFFF||Reserved|On-Chip Peripherals
0x2000_0000|0x3FFF_FFFF|R XC|QSPI 0 Flash (512 MiB)|Off-Chip Non-Volatile Memory
0x4000_0000|0x7FFF_FFFF||Reserved|Off-Chip Non-Volatile Memory
0x8000_0000|0x8000_3FFF|RWX A|DTIM (16 KiB)[^1]|On-Chip Volatile Memory
0x8000_4000|0xFFFF_FFFF||Reserved|On-Chip Volatile Memory
[^1]: Memory size may be reduced due to chip size limitation.
## Reference
Freedom E300 Arty FPGA Dev Kit
https://github.com/sifive/freedom#freedom-e300-arty-fpga-dev-kit
Krste Asanović, Rimas Avižienis, Jonathan Bachrach, Scott Beamer, David Biancolin, Christopher Celio, Henry Cook, Palmer Dabbelt, John Hauser, Adam Izraelevitz, Sagar Karandikar, Benjamin Keller, Donggyu Kim, John Koenig, Yunsup Lee, Eric Love, Martin Maas, Albert Magyar, Howard Mao, Miquel Moreto, Albert Ou, David Patterson, Brian Richards, Colin Schmidt, Stephen Twigg, Huy Vo, and Andrew Waterman, _[The Rocket Chip Generator](http://www.eecs.berkeley.edu/Pubs/TechRpts/2016/EECS-2016-17.html)_, Technical Report UCB/EECS-2016-17, EECS Department, University of California, Berkeley, April 2016
eFabless Caravel Architecture
https://caravel-harness.readthedocs.io/en/latest/getting-started.html
## Acknowledgements
This work is based on results obtained from project, JPNP16007, commissioned by The New Energy and Industrial Technology Development Organization (NEDO).