24 lines
1.2 KiB
ReStructuredText
24 lines
1.2 KiB
ReStructuredText
.. _harness-clocks:
|
|
|
|
Creating Clocks in the Test Harness
|
|
===================================
|
|
|
|
Chipyard currently allows the SoC design (everything under ``ChipTop``) to
|
|
have independent clock domains through diplomacy.
|
|
``ChipTop`` clock ports are driven by ``harnessClockInstantiator.requestClock(freq)``.
|
|
``ChipTop`` reset ports are driven by the ``referenceReset()`` function, which is intended to provide an asynchronous reset.
|
|
|
|
The ``HarnessBinder`` s in ``ChipTop`` are clocked by the ``HarnessBinderClockFrequencyKey`` value. The reset is provided as a synchronous reset, sync'd to the clock.
|
|
|
|
|
|
Requests for a harness clock is done by the ``HarnessClockInstantiator`` class in ``generators/chipyard/src/main/scala/harness/HarnessClocks.scala``.
|
|
Then you can request a clock and syncronized reset at a particular frequency by invoking the ``requestClock`` function.
|
|
Take the following example:
|
|
|
|
.. literalinclude:: ../../generators/chipyard/src/main/scala/harness/HarnessBinders.scala
|
|
:language: scala
|
|
:start-after: DOC include start: HarnessClockInstantiatorEx
|
|
:end-before: DOC include end: HarnessClockInstantiatorEx
|
|
|
|
Here you can see the ``th.harnessClockInstantiator`` is used to request a clock and reset at ``memFreq`` frequency.
|