* [uart] add uart adapter | add uart + adapter to all configs * [uart] change pty define name | add uart to all configs that need it * [uart] default to 115200 baudrate * [dromajo] first working commit * [dromajo] bump boom for commit-width > 1 fix * [dromajo] adjust dromajo commits * [dromajo] bump boom * commit dromajo changes * extra * [dromajo] add block device to configs * rebump older modules * bump firesim * [chipyard] enable dromajo in midas level simulation * [testchipip] forgot to bump * get rid of breaking things * bump firesim * bump boom * Bump BOOM to ifu3 WIP * bump firesim * fix how memory is passed to dromajo * bump boom and firesim * fix merge issues * add dromajo cosim bridge in chipyard * move traceio back into testchipip (#488) * refer to testchipip traceio in firechip (#490) * Move TraceIO fragment to chipyard (#492) * fix chipyard dromajo bridge (#493) * Sboom dromajo bump (#501) * [FireChip] Use clock in BridgeBinders * [firesim] Update TraceGen BridgeBinder * [Firechip] Add support for Tile <-> Uncore rational division * [firesim] Update the multiclock test * [firechip] Commit some Eagle X-related mock configs * [firechip] Instantiate multiple TracerV bridges * [Firechip] Include reset in tracerv tokens * [TracerV] Drop the first token in comparison tests * [Firechip] Make reverse instruction order in trace printf * WARNING: Point at a fork of boom @ davidbiancolin * [firesim] Update ClockBridge API * Add Gemmini to README [ci skip] (#487) * [firechip] Isolate all firesim-multiclock stuff in a single file * add documentation on ring network and system bus * Bump firesim for CI * Bump FireSim * Bump testchipip to dev [ci skip] * Bump FireSim * [make] split up specific make vars/targets into frags (#499) * [make] split up specific make vars/targets into frags * [make] move dramsim and max-cycles into SIM_FLAGS * [misc] move ariane configs to configs/ folder * [dromajo] add dromajo * [dromajo] bump for new traceio changes * bump firesim * bump firesim * point to chipyard traceio * bump boom Co-authored-by: David Biancolin <david.biancolin@gmail.com> Co-authored-by: Howard Mao <zhehao.mao@gmail.com> * Support Dromajo + TracerV configurations * [docs] add documentation for Dromajo in FireSim + Chipyard * add a bit more docs * [docs] bump docs * [firesim] dump artefacts in firesim * [firesim] update firesim * [testchipip] remove extraneous items in testchipip * [dromajo] prevent dromajo from breaking when params unset * update firesim, dromajo, and testchipip * [firesim] bump firesim * [firesim] bump firesim * [misc] bump firesim and testchipip for reviewer comments * remove WithNoGPIO fragment * bump firesim * bump dromajo boom config * bump firesim * generate artefacts in firesim testsuite Co-authored-by: abejgonzalez <abe.j.gonza@gmail.com> Co-authored-by: Abraham Gonzalez <abe.gonzalez@berkeley.edu> Co-authored-by: David Biancolin <david.biancolin@gmail.com> Co-authored-by: Howard Mao <zhehao.mao@gmail.com>
118 lines
4.7 KiB
ReStructuredText
118 lines
4.7 KiB
ReStructuredText
Debugging RTL
|
|
======================
|
|
|
|
While the packaged Chipyard configs and RTL have been tested to work,
|
|
users will typically want to build custom chips by adding their own
|
|
IP, or by modifying existing Chisel generators. Such changes might introduce
|
|
bugs. This section aims to run through a typical debugging flow
|
|
using Chipyard. We assume the user has a custom SoC configuration,
|
|
and is trying to verify functionality by running some software test.
|
|
We also assume the software has already been verified on a functional
|
|
simulator, such as Spike or QEMU. This section will focus on debugging
|
|
hardware.
|
|
|
|
Waveforms
|
|
---------------------------
|
|
|
|
The default software RTL simulators do not dump waveforms during execution.
|
|
To build simulators with wave dump capabilities use must use the ``debug``
|
|
make target. For example:
|
|
|
|
.. code-block:: shell
|
|
|
|
make CONFIG=CustomConfig debug
|
|
|
|
The ``run-binary-debug`` rule will also automatically build a simulator,
|
|
run it on a custom binary, and generate a waveform. For example, to run a
|
|
test on ``helloworld.riscv``, use
|
|
|
|
.. code-block:: shell
|
|
|
|
make CONFIG=CustomConfig run-binary-debug BINARY=helloworld.riscv
|
|
|
|
VCS and Verilator also support many additional flags. For example, specifying
|
|
the ``+vpdfilesize`` flag in VCS will treat the output file as a circular
|
|
buffer, saving disk space for long-running simulations. Refer to the VCS
|
|
and Verilator manuals for more information You may use the ``SIM_FLAGS``
|
|
make variable to set additional simulator flags:
|
|
|
|
.. code-block:: shell
|
|
|
|
make CONFIG=CustomConfig run-binary-debug BINARY=linux.riscv SIM_FLAGS=+vpdfilesize=1024
|
|
|
|
.. note::
|
|
In some cases where there is multiple simulator flags, you can write the ``SIM_FLAGS``
|
|
like the following: ``SIM_FLAGS="+vpdfilesize=XYZ +some_other_flag=ABC"``.
|
|
|
|
Print Output
|
|
---------------------------
|
|
|
|
Both Rocket and BOOM can be configured with varying levels of print output.
|
|
For information see the Rocket core source code, or the BOOM `documentation
|
|
<https://docs.boom-core.org/en/latest/>`__ website. In addition, developers
|
|
may insert arbitrary printfs at arbitrary conditions within the Chisel generators.
|
|
See the Chisel documentation for information on this.
|
|
|
|
Once the cores have been configured with the desired print statements, the
|
|
``+verbose`` flag will cause the simulator to print the statements. The following
|
|
commands will all generate desired print statements:
|
|
|
|
.. code-block:: shell
|
|
|
|
make CONFIG=CustomConfig run-binary-debug BINARY=helloworld.riscv
|
|
|
|
# The below command does the same thing
|
|
./simv-CustomConfig-debug +verbose helloworld.riscv
|
|
|
|
Both cores can be configured to print out commit logs, which can then be compared
|
|
against a Spike commit log to verify correctness.
|
|
|
|
Basic tests
|
|
---------------------------
|
|
``riscv-tests`` includes basic ISA-level tests and basic benchmarks. These
|
|
are used in Chipyard CI, and should be the first step in verifying a chip's
|
|
functionality. The make rule is
|
|
|
|
.. code-block:: shell
|
|
|
|
make CONFIG=CustomConfig run-asm-tests run-bmark-tests
|
|
|
|
|
|
Torture tests
|
|
---------------------------
|
|
The RISC-V torture utility generates random RISC-V assembly streams, compiles them,
|
|
runs them on both the Spike functional model and the SW simulator, and verifies
|
|
identical program behavior. The torture utility can also be configured to run
|
|
continuously for stress-testing. The torture utility exists within the ``utilities``
|
|
directory.
|
|
|
|
Dromajo Co-simulation for BOOM designs
|
|
--------------------------------------
|
|
Dromajo co-simulation is setup to work when two config. fragments are added to a BOOM config.
|
|
First, a ``chipyard.config.WithTraceIO`` config. fragment must be added so that BOOM's traceport is enabled.
|
|
Second, a ``chipyard.iobinders.WithSimDromajoBridge`` config. fragment must be added to
|
|
connect the Dromajo co-simulator to the traceport.
|
|
Once both config. fragments are added Dromajo should be enabled.
|
|
|
|
To build/run Dromajo with a BOOM design, run your configuration the following make commands:
|
|
|
|
.. code-block:: shell
|
|
|
|
# build the default Dromajo BOOM config. without waveform dumps
|
|
# replace "DromajoBoomConfig" with your particular config
|
|
make CONFIG=DromajoBoomConfig ENABLE_DROMAJO=1
|
|
|
|
# run a simulation with Dromajo
|
|
make CONFIG=DromajoBoomConfig ENABLE_DROMAJO=1 BINARY=<YOUR-BIN> run-binary
|
|
|
|
.. warning:: Dromajo currently only works in single-core BOOM systems without accelerators.
|
|
|
|
.. warning:: Dromajo currently only works in VCS simulation and FireSim.
|
|
|
|
Firesim Debugging
|
|
---------------------------
|
|
Chisel printfs, asserts, Dromajo co-simulation, and waveform generation are also available in FireSim
|
|
FPGA-accelerated simulation. See the FireSim
|
|
`documentation <https://docs.fires.im/en/latest/>`__ for more detail.
|
|
|