Files
qemu/docs/system/target-hexagon.rst
Brian Cain 234133b916 docs/system: Add hexagon CPU emulation
Reviewed-by: Taylor Simpson <ltaylorsimpson@gmail.com>
Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>
2026-06-29 06:02:59 -07:00

104 lines
4.8 KiB
ReStructuredText

.. SPDX-License-Identifier: GPL-2.0-or-later
.. _Hexagon-System-emulator:
Hexagon System emulator
-----------------------
Use the ``qemu-system-hexagon`` executable to simulate a 32-bit Hexagon
machine.
Hexagon Machines
================
Hexagon DSPs are suited to various functions and generally appear in a
"DSP subsystem" of a larger system-on-chip (SoC).
Hexagon DSPs are often included in a subsystem that looks like the diagram
below. Instructions are loaded into DDR before the DSP is brought out of
reset and the first instructions are fetched from DDR via the EVB/reset vector.
In a real system, a TBU/SMMU would normally arbitrate AXI accesses but
we don't have a need to model that for QEMU.
Hexagon DSP cores use simultaneous multithreading (SMT) with as many as 8
hardware threads.
.. admonition:: Diagram
.. code:: text
AHB (local) bus AXI (global) bus
│ │
│ │
┌─────────┐ │ ┌─────────────────┐ │
│ L2VIC ├──┤ │ │ │
│ ├──┼───────► ├───────┤
└─────▲───┘ │ │ Hexagon DSP │ │
│ │ │ │ │ ┌─────┐
│ │ │ N threads │ │ │ DDR │
│ ├───────┤ │ │ │ │
┌────┴──┐ │ │ │ ├────────┤ │
│QTimer ├───┤ │ │ │ │ │
│ │ │ │ │ │ │ │
└───────┘ │ │ ┌─────────┐ │ │ │ │
│ │ ┌─────────┐│ │ │ │ │
┌───────┐ │ │ │ HVX xM ││ │ │ │ │
│QDSP6SS├───┤ │ │ │┘ │ │ │ │
└───────┘ │ │ └─────────┘ │ │ └─────┘
│ │ │ │
┌───────┐ │ └─────────────────┘ │
│ CSR ├───┤
└───────┘ │ ┌──────┐ ┌───────────┐
│ │ TCM │ │ VTCM │
│ │ │ │
└──────┘ │ │
│ │
│ │
│ │
└───────────┘
Components
----------
Other than l2vic and HVX, the components below are not implemented in QEMU.
* L2VIC: the L2 vectored interrupt controller. Supports 1024 input
interrupts, edge- or level-triggered. The core ISA has system registers
``VID``, ``VID1`` which read through to the L2VIC device.
* QTimer: ARMSSE-based programmable timer device. Its interrupts are
wired to the L2VIC. System registers ``TIMER``, ``UTIMER`` read
through to the QTimer device.
* QDSP6SS: DSP subsystem features, accessible to the entire SoC, including
DSP NMI, watchdog, reset, etc.
* CSR: Configuration/Status Registers.
* TCM: DSP-exclusive tightly-coupled memory. This memory can be used for
DSPs when isolated from DDR and in some bootstrapping modes.
* VTCM: DSP-exclusive vector tightly-coupled memory. This memory is accessed
by some HVX instructions.
* HVX: the vector coprocessor supports 64 and 128-byte vector registers.
64-byte mode is not implemented in QEMU.
Bootstrapping
-------------
Hexagon systems do not generally have access to a block device. So, for
QEMU the typical use case involves loading a binary or ELF file into memory
and executing from the indicated start address::
$ qemu-system-hexagon -kernel ./prog -append 'arg1 arg2'
Semihosting
-----------
Hexagon supports a semihosting interface similar to other architectures'.
The ``trap0`` instruction can activate these semihosting calls so that the
guest software can access the host console and filesystem. Semihosting
is not yet implemented in QEMU hexagon.
Hexagon Features
================
.. toctree::
hexagon/emulation
hexagon/cdsp