blob: 6e72e68edf5926b40779e11905587eb7c5ddd5c7 [file] [log] [blame] [view]
# Timing scripts
A set of scripts for rcx and sta for caravel top level
## Dependencies
- Docker
## Prerequisites
A set of exports are needed:
```bash
export CARAVEL_ROOT=${HOME}/caravel/
export MCW_ROOT=${HOME}/caravel_mgmt_soc_litex/
export CUP_ROOT=${HOME}/caravel_user_project/
export TIMING_ROOT=${HOME}/timing-scripts/
export PDK_ROOT=${HOME}/pdk/
export PDK=sky130A
export OPENLANE_IMAGE_NAME=efabless/openlane:4476a58407d670d251aa0be6a55e5391bb181c4e-amd64
```
python modules:
- `pyverilog`
- `click`
## Usage
### caravel_user_project
1. After exporting the prerequisites, run:
```
make -f timing.mk list-rcx
```
You should get `rcx-user_project_wrapper` amongst others such as:
```
rcx-buff_flash_clkrst
rcx-caravel
rcx-caravel_clocking
rcx-constant_block
rcx-digital_pll
rcx-gpio_control_block
rcx-gpio_defaults_block
rcx-gpio_logic_high
rcx-gpio_signal_buffering
rcx-gpio_signal_buffering_alt
rcx-housekeeping
rcx-mgmt_protect
rcx-mprj2_logic_high
rcx-mprj_logic_high
rcx-spare_logic_block
rcx-RAM256
rcx-mgmt_core_wrapper
rcx-user_proj_example
rcx-user_project_wrapper
```
2. extract multicorner spefs for `user_project_wrapper` and any other blocks inside:
```
make -f timing.mk rcx-user_project_wrapper
make -f timing.mk rcx-user_proj_example
```
3. generate spef mapping file for caravel_user_project:
```
python3 ./scripts/generate_spef_mapping -i ${CUP_ROOT}/verilog/gl/user_project_wrapper.v -o ${CUP_ROOT}/env/spef-mapping.tcl --project-root '$::env(CUP_ROOT)' --pdk-root ${PDK_ROOT} --pdk ${PDK}
```
4. run sta:
```
make -f timing.mk caravel-timing-typ
make -f timing.mk caravel-timing-slow
make -f timing.mk caravel-timing-fast
```
## Limitations
- Makefile
- Makefile
- Assumes a fixed folder structure for the exported directories
- Probably a lot of corner cases that weren't considered