.. role:: raw-html-m2r(raw)
:format: html
Area
====
Area
----
Sometime, creating a ``Component`` to define some logic is overkill :
* Need to define all construction parameters and IO (verbosity, duplication)
* Split your code (more than needed)
For this kind of cases you can use ``Area`` to define a group of signals/logic.
.. code-block:: scala
class UartCtrl extends Component {
...
val timer = new Area {
val counter = Reg(UInt(8 bit))
val tick = counter === 0
counter := counter - 1
when(tick) {
counter := 100
}
}
val tickCounter = new Area {
val value = Reg(UInt(3 bit))
val reset = False
when(timer.tick) { // Refer to the tick from timer area
value := value + 1
}
when(reset) {
value := 0
}
}
val stateMachine = new Area {
...
}
}
.. tip::
| Abuse of area !
| No more toto_a, toto_b, toto_c as it so often done in common HDL, any ``Component``\ 's internal module could be an ``Area``\
.. note::
\ :ref:`ClockingArea ` are a special kind of ``Area`` which allow to define chunk of hardware which use a given ``ClockDomain``\