## Design Verification Setup in matcha
*Revision 1.1*



### DV Methodology

[Design Verification Methodology in Opentitan](https://docs.opentitan.org/doc/ug/dv_methodology/) has been followed in matcha.

Currently, [VCS](https://www.synopsys.com/verification/simulation/vcs.html) is used as the major simulator for running DV tests in matcha.

### DV Settings

At the root of shodan repo:

```
export ROOTDIR=`pwd`
export proj_root=$ROOTDir/hw/matcha
export titan_root=$ROOTDIR/hw/opentitan-upstream
export PYTHONPATH=$ROOTDIR/hw/matcha/util:$titan_root/util:$titan_root/util/dvsim:$PYTHONPATH
```


### Run DV tests

```
cd $ROOTDIR/hw/matcha
bazel build @kelvin_hw//hdl/chisel:kelvin.core  # build kelvin RTL
util/dvsim_match/dvsim.py \
    hw/top_matcha/dv/chip_sim_cfg.hjson \
    -i <test_name>
```

### Generate Debug Messages
Use `-v` option to dump out the debug messages from the simulation. For example:
```
util/dvsim_match/dvsim.py \
    hw/top_matcha/dv/chip_sim_cfg.hjson \
    -i <test_name>
    -v d
```

### Generate Waveform

To dump waveforms from the simulation, use the `-w` or `--waves` option to pass the argument to dvsim.py. For example:
```
util/dvsim_match/dvsim.py \
    hw/top_matcha/dv/chip_sim_cfg.hjson \
    -i <test_name> \
    -w fsdb
```


### Debug with Verdi

To debug with Verdi:

  1. Generate the waveform
  2. Invoke Verdi with the following command:
  ```
    cd ${proj_root}/scratch/<branch>/chip_matcha_asic-sim-vcs/default
  	verdi -dbdir ./simv.daidir
  ```
  3. Load the waveform (fsdb, vcd, etc)
  4. Trace the signals with Verdi


### Run DV tests with bazel in air-gapped environment

[Sparrow HW DV Notes](https://docs.google.com/document/d/10LiU3v8PBc06KkpTVaceIhJqqcdVIvO2GzFaJh7x_bY/edit) describes how to set up the bazel runs on EDACloud.

In an air-gapped environment like EDACloud, DV tests can be invoked from hw/matcha with bazel. Here is the sample bazel command:
```
bazel run //util/dvsim_matcha:dvsim.py \
          --distdir=`pwd` \
          -- hw/top_matcha/dv/chip_sim_cfg.hjson \
          -i chip_sw_uart_tx_rx
```



### Notes
#### Known issues
1. To turn off all the assertions in simulation, add the following lines in tb.sv:
  ```
  initial
  begin
    $assertoff(0, tb.dut);
  end
  ```
