Update README
diff --git a/README.md b/README.md
index 34b9a05..a8e0708 100644
--- a/README.md
+++ b/README.md
@@ -2,11 +2,96 @@
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![UPRJ_CI](https://github.com/efabless/caravel_project_example/actions/workflows/user_project_ci.yml/badge.svg)](https://github.com/efabless/caravel_project_example/actions/workflows/user_project_ci.yml) [![Caravel Build](https://github.com/efabless/caravel_project_example/actions/workflows/caravel_build.yml/badge.svg)](https://github.com/efabless/caravel_project_example/actions/workflows/caravel_build.yml)
-| :exclamation: Important Note |
-|-----------------------------------------|
+# Waveform Generator
-## Please fill in your project documentation in this README.md file
+The source files for the Waveform Generator can be found under the [waveform-generator](https://github.com/semify-eda/waveform-generator) repository.
-Refer to [README](docs/source/index.rst#section-quickstart) for a quickstart of how to use caravel_user_project
+![The completed GSD file](img/caravel_wfg.png)
-Refer to [README](docs/source/index.rst) for this sample project documentation.
+The general idea is that various stimuli can be arbitrarily connected to different driver.
+
+![WFG block diagram](img/WFG.svg)
+
+Currently the following blocks are implemented:
+
+### Stimuli
+
+- `wfg_stim_sine`
+- `wfg_stim_mem`
+
+### Driver
+
+- `wfg_drive_spi`
+- `wfg_drive_pat`
+
+### Various
+
+- `wfg_interconnect`
+- `wfg_core`
+- `wfg_subcore`
+
+## Memory Map
+
+The base address of the user project is `0x30000000`.
+
+By adding an offset to this base address, the various peripherals can be configured.
+
+For more information about the register entries please refer to the [waveform-generator](https://github.com/semify-eda/waveform-generator) repository.
+
+### wfg_core
+
+| Offset | Name | Description |
+|--------|--------|------------------------------------------------|
+| 0x10 | CTRL | Core control register |
+| 0x14 | CFG | Core configuration register |
+
+### wfg_subcore
+
+| Offset | Name | Description |
+|--------|--------|------------------------------------------------|
+| 0x20 | CTRL | Subcore control register |
+| 0x24 | CFG | Subcore configuration register |
+
+### wfg_interconnect
+
+| Offset | Name | Description |
+|--------|--------|------------------------------------------------|
+| 0x30 | CTRL | Control register for interconnect |
+| 0x34 | DRIVER0| Driver configuration register |
+| 0x38 | DRIVER1| Driver configuration register |
+
+### wfg_stim_sine
+
+| Offset | Name | Description |
+|--------|--------|------------------------------------------------|
+| 0x40 | CTRL | Control register for sine wave generation unit |
+| 0x44 | INC | Increment register |
+| 0x48 | GAIN | Gain register |
+| 0x4C | OFFSET | Offset register |
+
+### wfg_stim_mem
+
+| Offset | Name | Description |
+|--------|--------|------------------------------------------------|
+| 0x50 | CTRL | Control register for memory unit |
+| 0x54 | START | Start register |
+| 0x58 | END | End register |
+| 0x5C | CFG | Configuration register |
+
+### wfg_drive_spi
+
+| Offset | Name | Description |
+|--------|--------|------------------------------------------------|
+| 0x60 | CTRL | Control register for SPI unit |
+| 0x64 | CFG | SPI configuration register |
+| 0x68 | CLKCFG | SPI clock configuration register |
+
+### wfg_drive_pat
+
+| Offset | Name | Description |
+|--------|--------|------------------------------------------------|
+| 0x70 | CTRL | Control register for pattern unit |
+| 0x74 | CFG | Pattern configuration register |
+| 0x78 | PATSEL0| Low bits of PATSEL |
+| 0x7C | PATSEL1| High bits of PATSEL |
+