diff --git a/docs/Generators/RocketChip.rst b/docs/Generators/RocketChip.rst new file mode 100644 index 00000000..60b1e1cd --- /dev/null +++ b/docs/Generators/RocketChip.rst @@ -0,0 +1,66 @@ +RocketChip +========== + +RocketChip is an SoC generator supported by SiFive. Chipyard uses RocketChip +as the basis for producing a RISC-V SoC including Rocket, BOOM, and/or Hwacha. + +A detailed diagram of a typical RocketChip system is shown below. + +.. image:: ../images/rocketchip-diagram.png + +Tiles +----- + +This is a dual-core ``Rocket`` system. Each ``Rocket`` core is grouped with a +page-table walker, L1 instruction cache, and L1 data cache into a ``RocketTile``. + +The ``Rocket`` core can also be swapped for a ``BOOM`` core. Each tile can +also be configured with a RoCC accelerator that connects to the core as a +coprocessor. + +Memory System +------------- +The tiles connect to the ``SystemBus``, which connect it to the L2 cache banks. +The L2 cache banks then connect to the ``MemoryBus``, which connects to the +DRAM controller through a TileLink to AXI converter. + +To learn more about the memory hierarchy, see :ref:`Memory Hierarchy`. + +MMIO +---- + +For MMIO peripherals, the ``SystemBus`` connects to the ``ControlBus`` and ``PeripheryBus``. + +The ``ControlBus`` attaches standard peripherals like the BootROM, the +Platform-Level Interrupt Controller (PLIC), the core-local interrupts (CLINT), +and the Debug Unit. + +The BootROM contains the first stage bootloader, the first instructions to run +when the system comes out of reset. It also contains the Device Tree, which is +used by Linux to determine what other peripherals are attached. + +The PLIC aggregates and masks device interrupts and external interrupts. + +The core-local interrupts include software interrupts and timer interrupts for +each CPU. + +The Debug Unit is used to control the chip externally. It can be used to load +data and instructions to memory or pull data from memory. It can be controlled +through a custom DMI or standard JTAG protocol. + +The ``PeripheryBus`` attaches additional peripherals like the NIC and Block Device. +It can also optionally expose an external AXI4 port, which can be attached to +vendor-supplied AXI4 IP. + +To learn more about adding MMIO peripherals, check out the :ref:`MMIO Peripheral` +section of :ref:`Adding An Accelerator/Device`. + +DMA +--- + +You can also add DMA devices that read and write directly from the memory +system. These are attached to the ``FrontendBus``. The ``FrontendBus`` can also +connect vendor-supplied AXI4 DMA devices through an AXI4 to TileLink converter. + +To learn more about adding DMA devices, see the :ref:`Adding a DMA port` section +of :ref:`Adding an Accelerator/Device`. diff --git a/docs/Generators/index.rst b/docs/Generators/index.rst index a01b5adc..a147ffeb 100644 --- a/docs/Generators/index.rst +++ b/docs/Generators/index.rst @@ -14,4 +14,4 @@ The following pages introduce the generators integrated with the Chipyard framew Rocket BOOM Hwacha - + RocketChip diff --git a/docs/images/rocketchip-diagram.png b/docs/images/rocketchip-diagram.png new file mode 100644 index 00000000..febc2e87 Binary files /dev/null and b/docs/images/rocketchip-diagram.png differ