## 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 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
util/dvsim_match/dvsim.py \
    hw/top_matcha/dv/chip_sim_cfg.hjson \
    -i <test_name>
```


### 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 kdb of the current design with `-kdb[=only]` option in VCS runs
  2. Invoke Verdi with the following command:
  ```
  	verdi -dbdir <path to 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
  ```

2. Comment out lines 204-207 in
  ```
  hw/top_matcha/ip/smc/rtl/smc_controller.sv
  ```
  to avoid the unnecessary error messages
