|  | <!--- | 
|  | # SPDX-FileCopyrightText: 2020 Efabless Corporation | 
|  | # | 
|  | # Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | # you may not use this file except in compliance with the License. | 
|  | # You may obtain a copy of the License at | 
|  | # | 
|  | #      http://www.apache.org/licenses/LICENSE-2.0 | 
|  | # | 
|  | # Unless required by applicable law or agreed to in writing, software | 
|  | # distributed under the License is distributed on an "AS IS" BASIS, | 
|  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | # See the License for the specific language governing permissions and | 
|  | # limitations under the License. | 
|  | # | 
|  | # SPDX-License-Identifier: Apache-2.0 | 
|  | --> | 
|  |  | 
|  | # Simulation Environment Setup | 
|  |  | 
|  | There are two options for setting up the simulation environment: | 
|  |  | 
|  | * Pulling a pre-built docker image | 
|  | * Installing the dependecies locally | 
|  |  | 
|  | ## 1. Docker | 
|  |  | 
|  | There is an available docker setup with the needed tools at [efabless/dockerized-verification-setup](https://github.com/efabless/dockerized-verification-setup) | 
|  |  | 
|  | Run the following to pull the image: | 
|  |  | 
|  | ``` | 
|  | docker pull efabless/dv_setup:latest | 
|  | ``` | 
|  |  | 
|  | ## 2. Local Installion (Linux) | 
|  |  | 
|  | You will need to fullfil these dependecies: | 
|  |  | 
|  | * Icarus Verilog (10.2+) | 
|  | * RV32I Toolchain | 
|  |  | 
|  | Using apt, you can install Icarus Verilog: | 
|  |  | 
|  | ```bash | 
|  | sudo apt-get install iverilog | 
|  | ``` | 
|  |  | 
|  | Next, you will need to build the RV32I toolchain. Firstly, export the installation path for the RV32I toolchain, | 
|  |  | 
|  | ```bash | 
|  | export GCC_PATH=<gcc-installation-path> | 
|  | ``` | 
|  |  | 
|  | Then, run the following: | 
|  |  | 
|  | ```bash | 
|  | # packages needed: | 
|  | sudo apt-get install autoconf automake autotools-dev curl libmpc-dev \ | 
|  | libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo \ | 
|  | gperf libtool patchutils bc zlib1g-dev git libexpat1-dev | 
|  |  | 
|  | sudo mkdir $GCC_PATH | 
|  | sudo chown $USER $GCC_PATH | 
|  |  | 
|  | git clone https://github.com/riscv/riscv-gnu-toolchain riscv-gnu-toolchain-rv32i | 
|  | cd riscv-gnu-toolchain-rv32i | 
|  | git checkout 411d134 | 
|  | git submodule update --init --recursive | 
|  |  | 
|  | mkdir build; cd build | 
|  | ../configure --with-arch=rv32i --prefix=$GCC_PATH | 
|  | make -j$(nproc) | 
|  | ``` | 
|  |  | 
|  | # Running Simulation | 
|  |  | 
|  | ## Docker | 
|  |  | 
|  | First, you will need to export a number of environment variables: | 
|  |  | 
|  | ```bash | 
|  | export PDK_PATH=<pdk-location/sky130A> | 
|  | export CARAVEL_ROOT=<caravel_root> | 
|  | export UPRJ_ROOT=<user_project_root> | 
|  | ``` | 
|  |  | 
|  | Then, run the following command to start the docker container : | 
|  |  | 
|  | ``` | 
|  | docker run -it -v $CARAVEL_ROOT:$CARAVEL_ROOT -v $PDK_PATH:$PDK_PATH -v $UPRJ_ROOT:$UPRJ_ROOT -e CARAVEL_ROOT=$CARAVEL_ROOT -e PDK_PATH=$PDK_PATH -e UPRJ_ROOT=$UPRJ_ROOT -u $(id -u $USER):$(id -g $USER) efabless/dv_setup:latest | 
|  | ``` | 
|  |  | 
|  | Then, navigate to the directory where the DV tests reside : | 
|  |  | 
|  | ```bash | 
|  | cd $UPRJ_ROOT/verilog/dv/ | 
|  | ``` | 
|  |  | 
|  | Then, follow the instructions at [Both](#both) to run RTL/GL simulation. | 
|  |  | 
|  | ## Local | 
|  |  | 
|  | You will need to export these environment variables: | 
|  |  | 
|  | ```bash | 
|  | export GCC_PATH=<gcc-installation-path> | 
|  | export PDK_PATH=<pdk-location/sky130A> | 
|  | ``` | 
|  |  | 
|  | Then, follow the instruction at [Both](#both) to run RTL/GL simulation. | 
|  |  | 
|  | ## Both | 
|  |  | 
|  | To run RTL simulation for one of the DV tests, | 
|  |  | 
|  | ```bash | 
|  | cd <dv-test> | 
|  | make | 
|  | ``` | 
|  |  | 
|  | To run gate level simulation for one of the DV tests, | 
|  |  | 
|  | ```bash | 
|  | cd <dv-test> | 
|  | SIM=GL make | 
|  | ``` | 
|  |  | 
|  | # User Analog Project Example DV | 
|  |  | 
|  | > :construction: Under construction :construction: |