mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:46:10 +00:00
Reviewed-by: Taylor Simpson <ltaylorsimpson@gmail.com> Signed-off-by: Brian Cain <brian.cain@oss.qualcomm.com>
104 lines
4.8 KiB
ReStructuredText
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
|
|
|