# Qualcomm Hexagon

Hexagon es el nombre de marca para una familia de procesadores de señales digitales (DSP) productos por Qualcomm. Hexagon también es conocido como QDSP6, siglas de la frase en inglés “procesador de señales digitales de sexta generación de Qualcomm". Según Qualcomm, la arquitectura Hexagon está diseñada para ofrecer rendimiento con poca energía para una variedad de aplicaciones.
Cada versión de Hexagon tiene un juego de instrucciones y un micro-arquitectura. Estos dos características están íntimamente relacionadas.
Hexagon es utilizado en los chips Qualcomm Snapdragon, por ejemplo en teléfonos inteligentes, automóviles, dispositivos wearables y otros dispositivos móviles, y es también utilizado en componentes de redes de telefonía celular.

## Arquitectura del conjunto de instrucciones

Los dispositivos informáticos tienen conjuntos o juegos de instrucciones, que son sus lenguajes más bajos y primitivos. Las instrucciones comunes son aquellas que hacen que se agreguen, multipliquen o combinen dos números de otras maneras, así como las instrucciones que dirigen al procesador a dónde buscar en la memoria su siguiente instrucción. Existen muchos otros tipos de instrucciones.
Los ensambladores y compiladores traducen los programas de un computador en flujos de instrucciones - flujos de bits - que el dispositivo puede entender y llevar a cabo (ejecutar). A medida que se ejecuta un flujo de instrucciones, la integridad de la función del sistema se sostiene mediante el uso de niveles de privilegios de instrucción. Las instrucciones con privilegios tienen acceso a más recursos en el dispositivo, incluida la memoria. Hexagon admite niveles de privilegios.
Originalmente, las instrucciones de Hexagon operaban sobre números enteros, pero no sobre números en coma flotante, finalmente, en la versión 5 (v5) se agregó el soporte para punto flotante.
La unidad de procesamiento que maneja la ejecución de instrucciones es capaz de despachar, en orden, hasta 4 instrucciones (por paquete) a 4 Unidades de Ejecución por ciclo del procesador (cada tick).

## Soporte de software
### Sistemas operativos

El port de Linux para Hexagon se ejecuta bajo una capa de hipervisor ("Hexagon Virtual Machine") y se fusionó con la versión 3.2 del núcleo.
La versión original del Hipervisor (hypervisor) es de código cerrado, mas en abril del 2013, se liberó una versión mínima, de código abierto del hipervisor, el cual fue implementado para la arquitectura QDSP6 V2 y V3. Teniendo por nombre "Hexagon MiniVM", este último fue liberado por Qualcomm bajo una licencia de tipo BSD.

### Compiladores

El soporte para Hexagon fue agregado en la versión 3.1 de LLVM por Tony Linthicum. La compatibilidad con Hexagon/HVX V66 ISA se agregó en la versión 8.0.0 de LLVM. También hay una rama no mantenida por la FSF de GCC y binutils.

## Adopción del bloque de SIP

Los DSPs Qualcomm Hexagon han estado disponibles en los SoCs Qualcomm Snapdragon desde 2006. En el Snapdragon S4 (MSM8960 y más recientes) existen tres núcleos QDSP, dos en el subsistema del módem y un núcleo hexagonal en el subsistema multimedia. Los núcleos de módem son programados por Qualcomm solamente, y sólo el núcleo multimedia puede ser programado por el usuario.
También son utilizados en algunos procesadores para femtoceldas de Qualcomm, incluyendo los FSM98xx, FSM99xx y FSM90xx.

## Integración de terceras partes

En marzo de 2016, se anunció que el software de procesamiento de audio AudioSmart de la compañía de semiconductores Conexant sería integrado al Hexagon de Qualcomm.
En mayo de 2018 wolfSSL agregó soporte para usar Qualcomm Hexagon. Esto es soporte para ejecutar operaciones criptográficas wolfSSL en el DSP. Además del uso de operaciones criptográficas, más tarde se agregó una biblioteca de administración de carga de operaciones especializada.

## Versiones

Existen seis versiones de la arquitectura QDSP6 publicadas: V1 (2006), V2 (2007-2008), V3 (2009), V4 (2010-2011), QDSP6 V5 (2013, en el Snapdragon 800); y QDSP6 V6 (2016, en el Snapdragon 820). La V4 tiene 20 DMIPS por milliwatt, operando a 500 MHz. La velocidad de reloj del Hexagon varía entre los 400-2000 MHz para el QDSP6 y entre 256-350 MHz para generación anterior de la arquitectura, el QDSP5.
| Versions of QDSP6 | Process node, nm | Date | Number of simultaneous threads | Per-thread clock, MHz | Total core clock, MHz | Product |
| QDSP6 V1 | 65 | Oct 2006 | | | | |
| QDSP6 V2 | 65 | Dec 2007 | 6 | 100 | 600 | |
| QDSP6 V3 (1st gen) | 45 | 2009 | 6 | 67 | 400 | |
| QDSP6 V3 (2nd gen) | 45 | 2009 | 4 | 100 | 400 | |
| QDSP6 V4 (V4M, V4C, V4L) | 28 | 2010–2011 | 3 | 167 | 500 | |
| QDSP6 V5 (V5A, V5H) | 28 | 2013 | 3 | 200 or greater with DMT | 600 | |
| 642 | 14 | 2017 | | | | Snapdragon 630 |
| QDSP6 V6 or 680 | 14 | 2016/2017 | 4 | 500 | 2000 | Snapdragon 820/821/636/660 |
| 682 | 10 | 2017 | | | | Snapdragon 835 |
| 683 | 11 | 2020 | | | | Snapdragon 845/670/675/678/710/712 |
| 686 | 11/8 | 2019/2021 | (3.3 TOPS) | | | Snapdragon 665/480 |
| 688 | 8 | 2019/2020 | (3.6 TOPS) | | | Snapdragon 730(G)/732G |
| 690 | 7 | 2019 | (7 TOPS) | | | Snapdragon 855/855+ |
| 692 | 8 | 2020 | | | | Snapdragon 720G/690 |
| 694 | 8 | 2020 | (4.7 TOPS) | | | Snapdragon 750G |
| 696 | 7 | 2020 | (5.4 TOPS) | | | Snapdragon 765(G)/768G |
| 698 | 7 | 2020 | (15 TOPS) | | | Snapdragon 865/865+/870 |
| 780 | 5 | 2021 | (26 TOPS) | | | Snapdragon 888 |
| 790 | ? | 2022 | ? | - | - | Snapdragon 8 gen 1 / 8+ gen 1 |

## Disponibilidad en Snapdragon productos

Tanto los núcleos Hexagon (QDSP6) como los pre-Hexagon (QDSP5) se utilizan en los SoC modernos de Qualcomm, QDSP5 principalmente en productos de gama baja. Los QDSP de módem (a menudo anteriores a Hexagon) no se muestran en la tabla.
QDSP5 uso:
| Snapdragon Generación | Chipset (SoC) ID | DSP Generación | DSP Frecuencia, MHz | Nodo de proceso, nm |
| S1 | MSM7627, MSM7227, MSM7625, MSM7225 | QDSP5 | 320 | 65 |
| S1 | MSM7627Un, MSM7227Un, MSM7625Un, MSM7225Un | QDSP5 | 350 | 45 |
| S2 | MSM8655, MSM8255, APQ8055, MSM7630, MSM7230 | QDSP5 | 256 | 45 |
| S4 Juego | MSM8625, MSM8225 | QDSP5 | 350 | 45 |
| S200 | 8110, 8210, 8610, 8112, 8212, 8612, 8225Q, 8625Q | QDSP5 | 384 | 45 #elepé |
QDSP6 (Hexágono) uso:
| Snapdragon Generación | Chipset (SoC) ID | QDSP6 versión | DSP Frecuencia, MHz | Nodo de proceso, nm |
| S1 | QSD8650, QSD8250 | QDSP6 | 600 | 65 |
| S3 | MSM8660, MSM8260, APQ8060 | QDSP6 (V3?) | 400 | 45 |
| S4 Albor | MPQ8064 | QDSP6 (V3?) | 500 | 28 |
| S4 Pro | MSM8960 Pro, APQ8064 | QDSP6 (V3?) | 500 | 28 |
| S4 Plus | MSM8960, MSM8660Un, MSM8260Un, APQ8060Un, MSM8930, MSM8630, MSM8230, APQ8030, MSM8627, MSM8227 | QDSP6 (V3?) | 500 | 28 |
| S400 | 8926, 8930, 8230, 8630, 8930AB, 8230AB, 8630AB, 8030AB, 8226, 8626 | QDSP6V4 | 500 | 28 #elepé |
| S600 | 8064T, 8064M | QDSP6V4 | 500 | 28 #elepé |
| S800 | 8974, 8274, 8674, 8074 | QDSP6V5Un | 600 | 28 HPm |
| S820 | 8996 | QDSP6V6 | 2000 | 14 FinFet LPP |