[docs] update documentation [ci skip] (#393)
This commit is contained in:
@@ -4,7 +4,7 @@ Tops, Test-Harnesses, and the Test-Driver
|
||||
The three highest levels of hierarchy in a Chipyard
|
||||
SoC are the Top (DUT), ``TestHarness``, and the ``TestDriver``.
|
||||
The Top and ``TestHarness`` are both emitted by Chisel generators.
|
||||
The ``TestDriver`` serves as our testbench, and is a verilog
|
||||
The ``TestDriver`` serves as our testbench, and is a Verilog
|
||||
file in Rocket Chip.
|
||||
|
||||
|
||||
@@ -45,22 +45,13 @@ System
|
||||
Tops
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
A SoC Top then extends the ``System`` class with any config-specific components. There are two "classes" of Tops in Chipyard that enable different bringup methods.
|
||||
A SoC Top then extends the ``System`` class with any config-specific components.
|
||||
In Chipyard, this includes things like adding a NIC, UART, and GPIO as well as setting up the hardware for the bringup method.
|
||||
Please refer to :ref:`Communicating with the DUT` for more information on these bringup methods.
|
||||
|
||||
- ``Top`` is the default setup. These top modules instantiate a serial module which interfaces with the ``TestHarness``. In addition, the Debug Transfer Module (DTM) is removed and replaced with a TSI-based bringup flow. All other example "Tops" (except the ``TopWithDTM``) extend this Top as the "base" top-level system.
|
||||
- ``TopWithDTM`` does not include the TSI-based bringup flow. Instead it keeps the Debug Transfer Module (DTM) within the design so that you can use a DMI-based or JTAG-based bringup.
|
||||
|
||||
For a custom Top a mixed-in trait adds the additional modules or IOs (an example of this is ``TopWithGPIO``).
|
||||
|
||||
TestHarness
|
||||
-------------------------
|
||||
|
||||
There are two variants of ``TestHarness`` generators in Chipyard, both located in
|
||||
`generators/example/src/main/scala/TestHarness.scala <https://github.com/ucb-bar/chipyard/blob/master/generators/example/src/main/scala/TestHarness.scala>`__.
|
||||
One is designed for TSI-based bringup, while the other performs DTM-based bringup.
|
||||
See :ref:`Communicating with the DUT` for more information on these two methodologies.
|
||||
|
||||
The wiring between the ``TestHarness`` and the Top are performed in methods defined in mixins added to the Top.
|
||||
When these methods are called from the ``TestHarness``, they may instantiate modules within the scope of the harness,
|
||||
and then connect them to the DUT. For example, the ``connectSimAXIMem`` method defined in the
|
||||
@@ -70,21 +61,9 @@ and connect them to the correct IOs of the top.
|
||||
While this roundabout way of attaching to the IOs of the top may seem to be unnecessarily complex, it allows the designer to compose
|
||||
custom traits together without having to worry about the details of the implementation of any particular trait.
|
||||
|
||||
Specifying a Top
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
To see why the Top connection method is useful, consider the case where we want to use a custom Top with additional GPIO pins.
|
||||
In `generators/example/src/main/scala/Top.scala <https://github.com/ucb-bar/chipyard/blob/master/generators/example/src/main/scala/Top.scala>`__,
|
||||
we can see how the ``TopWithGPIO`` class adds the ``HasPeripheryGPIO`` trait. This trait adds IOs to the Top module,
|
||||
instantiates a TileLink GPIO node, and connects it to the proper buses.
|
||||
|
||||
If we look at the ``WithGPIOTop`` mixin in the ``ConfigMixins.scala`` file, we see that adding this mixin to the top-level Config overrides the
|
||||
``BuildTop`` key with a custom function that both instantiates the custom Top, and drives all the GPIO pins.
|
||||
When the ``TestHarness`` looks up the ``BuildTop`` key, this function will run and perform the specified wiring, and then return the Top module.
|
||||
|
||||
TestDriver
|
||||
-------------------------
|
||||
|
||||
The ``TestDriver`` is defined in ``generators/rocketchip/src/main/resources/vsrc/TestDriver.v``.
|
||||
This verilog file executes a simulation by instantiating the ``TestHarness``, driving the clock and reset signals, and interpreting the success output.
|
||||
This file is compiled with the generated verilog for the ``TestHarness`` and the Top to produce a simulator.
|
||||
This Verilog file executes a simulation by instantiating the ``TestHarness``, driving the clock and reset signals, and interpreting the success output.
|
||||
This file is compiled with the generated Verilog for the ``TestHarness`` and the Top to produce a simulator.
|
||||
|
||||
Reference in New Issue
Block a user