blob: 139646a92a4b0c2e03444a4f222d070faf03fcc5 [file] [log] [blame] [view]
Charlie45626812022-05-24 12:32:51 +01001[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![UPRJ_CI](https://github.com/Wevel/ExperiarSoC/actions/workflows/user_project_ci.yml/badge.svg)](https://github.com/Wevel/ExperiarSoC/actions/workflows/user_project_ci.yml)
2<!-- [![Caravel Build](https://github.com/Wevel/ExperiarSoC/actions/workflows/caravel_build.yml/badge.svg)](https://github.com/Wevel/ExperiarSoC/actions/workflows/caravel_build.yml) -->
3
Wevelfc8ae012022-03-31 22:01:54 +01004# ExperiarSoC
Charliec8a96692022-05-20 17:42:32 +01005RISC-V SoC designed for the Efabless Open MPW Program. This project
Charlied62bdfe2022-05-07 19:31:28 +01006
7![Block diagram of Experiar SoC](docs/Design/ExperiarSoC.png "Block diagram of Experiar SoC")
8
Charliec8a96692022-05-20 17:42:32 +01009## Features
Charlied62bdfe2022-05-07 19:31:28 +010010- Dual RV32I cores
11- Per core SRAM
Charliea41bb8b2022-05-19 22:41:45 +010012- JTAG interface
Charlied62bdfe2022-05-07 19:31:28 +010013- External flash controller
Charliea41bb8b2022-05-19 22:41:45 +010014- Shared video SRAM
15- Configurable VGA output
16- 3x UART ports + 1 internal to caravel
17- 1x SPI ports
Charlie7d7207a2022-05-21 18:43:37 +010018- 4x PWM counters with 4x separate outputs (2 are internal read only)
Charlied62bdfe2022-05-07 19:31:28 +010019
Charliec8a96692022-05-20 17:42:32 +010020## Memory Map
Charlie2da27a22022-05-07 21:00:34 +010021
22![Memory map for Experiar SoC](docs/Design/MemoryMap.png "Memory map for Experiar SoC")
23
Charliec8a96692022-05-20 17:42:32 +010024## Macro Layout
Charlie5d5650c2022-05-16 23:05:51 +010025
Charlieff79e922022-05-22 16:49:09 +010026<p float="left">
27 <img alt="Experiar SoC macro layout" src="docs/Design/MacrosPlacement.png" width = 49% />
28 <img alt="Experiar SoC macro layout with detailed routing guide overlay" src="docs/Scripts/detailed.guide.jpg" width = 49% />
29</p>
Charlie5d5650c2022-05-16 23:05:51 +010030
Charliec8a96692022-05-20 17:42:32 +010031## Build Status
32- CaravelHost: Success
Charlie7e131522022-05-24 23:56:27 +010033- ExperiarCore: Success
Charliec8a96692022-05-20 17:42:32 +010034- Flash: Success
35- Peripherals: Success
36- Video: Success
37- WishboneInterconnect: Success
Charlie7e131522022-05-24 23:56:27 +010038- user_project_wrapper: Success
39
40Several macros have max slew violations.
Charliec8a96692022-05-20 17:42:32 +010041
42# Tests
Charlie7d7207a2022-05-21 18:43:37 +010043## RTL
44### verify-peripheralsGPIO-rtl: Success
Charlieb2e455b2022-05-26 00:31:14 +010045### verify-peripheralsUART-rtl: Success
Charlie7d7207a2022-05-21 18:43:37 +010046### verify-peripheralsSPI-rtl: Not implemented
47### verify-peripheralsPWM-rtl: Not implemented
48### verify-memory-rtl: Not implemented
Charlieb2e455b2022-05-26 00:31:14 +010049### verify-video-rtl: Not run
Charlie7e131522022-05-24 23:56:27 +010050### verify-corePC-rtl: Success
Charlie52866022022-05-23 23:35:40 +010051### verify-coreMem-rtl: Not implemented
52### verify-coreArch-rtl: Not implemented
Charliec8a96692022-05-20 17:42:32 +010053
Charlie7d7207a2022-05-21 18:43:37 +010054## GL
Charlieb2e455b2022-05-26 00:31:14 +010055### verify-peripheralsGPIO-gl: Failed
56### verify-peripheralsUART-gl: Failed
Charlie7d7207a2022-05-21 18:43:37 +010057### verify-peripheralsSPI-gl: Not implemented
58### verify-peripheralsPWM-gl: Not implemented
59### verify-memory-gl: Not implemented
60### verify-video-gl: Not implemented
Charlieb2e455b2022-05-26 00:31:14 +010061### verify-corePC-gl: Failed
Charlie7e131522022-05-24 23:56:27 +010062### verify-coreMem-gl: Not implemented
63### verify-coreArch-gl: Not implemented
Charlieb8c7bb22022-05-21 01:21:54 +010064
Charlieff79e922022-05-22 16:49:09 +010065# Need to do
Charlieff79e922022-05-22 16:49:09 +010066- Write remaining tests (and fix everything until they pass)
67- Fix timing violations
Charlie45626812022-05-24 12:32:51 +010068- Fix precheck errors
Charlieff79e922022-05-22 16:49:09 +010069
70# Could do
Charlie9cc20312022-05-24 19:11:00 +010071- Add uart pin swapping
Charlied62bdfe2022-05-07 19:31:28 +010072- Flash controller
Charlie7d7207a2022-05-21 18:43:37 +010073- JTAG core management controller
Charliea41bb8b2022-05-19 22:41:45 +010074- CSRs
Charlieff79e922022-05-22 16:49:09 +010075- More tests
76- Tile map rendering
Charlie52866022022-05-23 23:35:40 +010077- Change peripheral bus design to have a read ready signal
78- Fetch next instruction a clock cycle earlier so instructions only take 2 cycles
Charlie14a14af2022-05-07 18:56:52 +010079
80# Reference work and inspiration
Charliec8a96692022-05-20 17:42:32 +010081- [Zero to ASIC Course](https://www.zerotoasiccourse.com/): Complete course on ASIC design. Also has useful references and terminology definitions.
Charlied62bdfe2022-05-07 19:31:28 +010082- [Openlane Documentation](https://openlane-docs.readthedocs.io/en/rtd-develop/index.html): Reference for a lot of configuration. The [Variables](https://openlane-docs.readthedocs.io/en/rtd-develop/configuration/README.html) and [Hardening Macros](https://openlane-docs.readthedocs.io/en/rtd-develop/doc/hardening_macros.html#) pages have been particularity useful.
Charliec8a96692022-05-20 17:42:32 +010083- [Caravel Documentation](https://caravel-harness.readthedocs.io/en/latest/index.html): Reference for caravel and configuration. This seems slightly out of date, but an alternate version can be found in the [github repository](https://github.com/efabless/caravel/tree/main/docs/pdf).
84- [Riscduino](https://github.com/dineshannayya/riscduino): Used for inspiration and as a reference for using openlane. There are a number of similar aspects to this project, but all have been reimplemented rather than copied.