ARM Cortex-M es un grupo de núcleos de procesador RISC ARM de 32 bits con licencia de ARM Limited . Estos núcleos están optimizados para circuitos integrados de bajo costo y energéticamente eficientes, que se han integrado en decenas de miles de millones de dispositivos de consumo. [1] Aunque suelen ser el componente principal de los chips de microcontroladores , a veces también están integrados dentro de otros tipos de chips. La familia Cortex-M consta de Cortex-M0, [2] Cortex-M0+, [3] Cortex-M1, [4] Cortex-M3, [5] Cortex-M4, [6] Cortex-M7, [7] Cortex -M23, [8] Cortex-M33, [9] Cortex-M35P, [10] Cortex-M52, [11] Cortex-M55, [12] Cortex-M85. [13] Una opción de unidad de punto flotante (FPU) está disponible para los núcleos Cortex-M4 / M7 / M33 / M35P / M52 / M55 / M85, y cuando se incluyen en el silicio, estos núcleos a veces se conocen como "Cortex-MxF". donde 'x' es la variante principal.
Descripción general
La familia ARM Cortex-M son núcleos de microprocesadores ARM diseñados para su uso en microcontroladores , ASIC , ASSP , FPGA y SoC . Los núcleos Cortex-M se utilizan comúnmente como chips de microcontroladores dedicados, pero también están "ocultos" dentro de chips SoC como controladores de administración de energía, controladores de E/S, controladores de sistema, controladores de pantalla táctil, controladores de batería inteligentes y controladores de sensores.
Aunque los microcontroladores de 8 bits fueron muy populares en el pasado, Cortex-M ha ido erosionando lentamente el mercado de 8 bits a medida que los precios de los chips Cortex-M de gama baja han bajado. Cortex-M se ha convertido en un reemplazo popular para chips de 8 bits en aplicaciones que se benefician de operaciones matemáticas de 32 bits y reemplazando núcleos ARM heredados más antiguos, como ARM7 y ARM9 .
Licencia
ARM Limited no fabrica ni vende dispositivos de CPU basados en sus propios diseños, sino que otorga licencias de la arquitectura del procesador a las partes interesadas. Arm ofrece una variedad de términos de licencia, que varían en costo y entregables. Para todos los licenciatarios, Arm proporciona una descripción de hardware integrable del núcleo ARM, así como un conjunto completo de herramientas de desarrollo de software y el derecho a vender silicio fabricado que contenga la CPU ARM.
Personalización de silicio
Los fabricantes de dispositivos integrados (IDM) reciben la IP del procesador ARM como RTL sintetizable (escrito en Verilog ). De esta forma, tienen la capacidad de realizar optimizaciones y extensiones a nivel arquitectónico. Esto permite al fabricante lograr objetivos de diseño personalizados, como una mayor velocidad de reloj, un consumo de energía muy bajo, extensiones del conjunto de instrucciones (incluido el punto flotante), optimizaciones de tamaño, soporte de depuración, etc. Para determinar qué componentes se han incluido en un ARM en particular. Chip CPU, consulte la hoja de datos del fabricante y la documentación relacionada.
Algunas de las opciones de silicio para los núcleos Cortex-M son:
Temporizador SysTick: un temporizador de sistema de 24 bits que amplía la funcionalidad tanto del procesador como del controlador de interrupción vectorial anidado (NVIC). Cuando está presente, también proporciona una interrupción SysTick de prioridad configurable adicional. [14] [15] [16] Aunque el temporizador SysTick es opcional para M0/M0+/M1/M23, es extremadamente raro encontrar un microcontrolador Cortex-M sin él. Si un microcontrolador Cortex-M33/M35P/M52/M55/M85 tiene la opción de extensión de seguridad, opcionalmente puede tener dos SysTicks (uno seguro y otro no seguro).
Banda de bits: asigna una palabra completa de memoria a un solo bit en la región de banda de bits. Por ejemplo, escribir en una palabra de alias establecerá o borrará el bit correspondiente en la región de la banda de bits. Esto permite que cada bit individual en la región de la banda de bits sea directamente accesible desde una dirección alineada con palabras. En particular, los bits individuales se pueden configurar, borrar o alternar desde C/C++ sin realizar una secuencia de instrucciones de lectura, modificación y escritura. [14] [15] [16] Aunque la banda de bits es opcional, es menos común encontrar un microcontrolador Cortex-M3 y Cortex-M4 sin ella. Algunos microcontroladores Cortex-M0 y Cortex-M0+ tienen banda de bits.
Unidad de protección de memoria (MPU): brinda soporte para proteger regiones de la memoria mediante la aplicación de reglas de acceso y privilegios. Admite hasta dieciséis regiones diferentes, cada una de las cuales se puede dividir en subregiones del mismo tamaño. [14] [15] [16]
Memoria estrechamente acoplada (TCM): SRAM de baja latencia ( estado de espera cero ) que se puede usar para contener la pila de llamadas , estructuras de control RTOS, estructuras de datos de interrupción, código de controlador de interrupciones y código de velocidad crítica. Además del caché de la CPU , TCM es la memoria más rápida en un microcontrolador ARM Cortex-M. Dado que TCM no está almacenado en caché y no se puede acceder a él a la misma velocidad que el procesador y el caché, podría describirse conceptualmente como "caché direccionable". Hay un ITCM (TCM de instrucciones) y un DTCM (TCM de datos) para permitir que un procesador de arquitectura Harvard lea ambos simultáneamente. El DTCM no puede contener instrucciones, pero el ITCM puede contener datos. Dado que TCM está estrechamente conectado al núcleo del procesador, es posible que los motores DMA no puedan acceder a TCM en algunas implementaciones.
Nota: La mayoría de los chips Cortex-M3 y M4 tienen banda de bits y MPU. La opción de banda de bits se puede agregar al M0/M0+ usando el kit de diseño del sistema Cortex-M. [28]
Nota: El software debe validar la existencia de cada función antes de intentar utilizarla. [dieciséis]
Nota: Hay información pública limitada disponible para Cortex-M35P hasta que se publique su Manual de referencia técnica .
Opciones adicionales de silicio: [14] [15]
Endianidad de los datos: Little-endian o big-endian. A diferencia de los núcleos ARM heredados, el Cortex-M está permanentemente fijado en silicio como una de estas opciones.
Interrupciones: 1 a 32 (M0/M0+/M1), 1 a 240 (M3/M4/M7/M23), 1 a 480 (M33/M35P/M52/M55/M85).
Controlador de interrupción de despertador: Opcional.
Registro de compensación de tabla vectorial: opcional. (no disponible para M0).
Ancho de búsqueda de instrucciones: solo 16 bits o principalmente 32 bits.
Soporte de usuario/privilegios: Opcional.
Restablecer todos los registros: Opcional.
Puerto de E/S de ciclo único: Opcional. (M0+/M23).
Puerto de acceso de depuración (DAP): Ninguno, SWD , JTAG y SWD. (opcional para todos los núcleos Cortex-M)
Detener el soporte de depuración: opcional.
Número de comparadores de puntos de vigilancia: 0 a 2 (M0/M0+/M1), 0 a 4 (M3/M4/M7/M23/M33/M35P/M52/M55/M85).
Número de comparadores de puntos de interrupción: 0 a 4 (M0/M0+/M1/M23), 0 a 8 (M3/M4/M7/M33/M35P/M52/M55/M85).
Conjuntos de instrucciones
El Cortex-M0/M0+/M1 implementa la arquitectura ARMv6-M , [14] el Cortex-M3 implementa la arquitectura ARMv7-M , [15] el Cortex-M4/Cortex-M7 implementa la arquitectura ARMv7E-M , [15] el Cortex-M23/M33/M35P implementa la arquitectura ARMv8-M , [30] y el Cortex-M52/M55/M85 implementa la arquitectura ARMv8.1-M . [30] Las arquitecturas son compatibles con instrucciones binarias desde ARMv6-M a ARMv7-M y ARMv7E-M. Las instrucciones binarias disponibles para Cortex-M0 / Cortex-M0+ / Cortex-M1 se pueden ejecutar sin modificaciones en Cortex-M3 / Cortex-M4 / Cortex-M7. Las instrucciones binarias disponibles para Cortex-M3 se pueden ejecutar sin modificaciones en Cortex-M4 / Cortex-M7 / Cortex-M33 / Cortex-M35P. [14] [15] Solo los conjuntos de instrucciones Thumb-1 y Thumb-2 son compatibles con las arquitecturas Cortex-M; el conjunto de instrucciones ARM heredado de 32 bits no es compatible.
Todos los núcleos Cortex-M implementan un subconjunto común de instrucciones que consta de la mayoría de los Thumb-1, algunos Thumb-2, incluida una multiplicación de resultados de 32 bits. Cortex-M0 / Cortex-M0+ / Cortex-M1 / Cortex-M23 fueron diseñados para crear el troquel de silicio más pequeño, por lo que tienen la menor cantidad de instrucciones de la familia Cortex-M.
Cortex-M0/M0+/M1 incluye instrucciones Thumb-1, excepto las nuevas instrucciones (CBZ, CBNZ, IT) que se agregaron en la arquitectura ARMv7-M. Cortex-M0/M0+/M1 incluye un subconjunto menor de instrucciones Thumb-2 (BL, DMB, DSB, ISB, MRS, MSR). [14] Cortex-M3 / M4 / M7 / M33 / M35P tienen todas las instrucciones básicas Thumb-1 y Thumb-2. El Cortex-M3 agrega tres instrucciones Thumb-1, todas las instrucciones Thumb-2, división de enteros por hardware e instrucciones aritméticas de saturación . El Cortex-M4 agrega instrucciones DSP y una unidad opcional de punto flotante de precisión simple (VFPv4-SP). El Cortex-M7 agrega una FPU de doble precisión opcional (VFPv5). [22] [15] Cortex-M23 / M33 / M35P / M52 / M55 / M85 agregan instrucciones TrustZone .
Nota: El recuento del ciclo de latencia de interrupción supone: 1) pila ubicada en RAM en estado de espera cero, 2) otra función de interrupción que no se está ejecutando actualmente, 3) la opción de Extensión de seguridad no existe porque agrega ciclos adicionales. Los núcleos Cortex-M con arquitectura informática Harvard tienen una latencia de interrupción más corta que los núcleos Cortex-M con arquitectura informática Von Neumann.
Nota: La serie Cortex-M incluye tres nuevas instrucciones Thumb-1 de 16 bits para el modo de suspensión: SEV, WFE, WFI.
Nota: Cortex-M0 / M0+ / M1 no incluye estas instrucciones Thumb-1 de 16 bits : CBZ, CBNZ, IT. [14] [15]
Nota: Cortex-M0 / M0+ / M1 solo incluye estas instrucciones Thumb-2 de 32 bits : BL, DMB, DSB, ISB, MRS, MSR. [14] [15]
Nota: Cortex-M0 / M0+ / M1 / M23 solo tiene instrucciones de multiplicación de 32 bits con un resultado inferior de 32 bits (32 bits × 32 bits = 32 bits inferiores), mientras que Cortex-M3 / M4 / M7 / M33/M35P incluye instrucciones de multiplicación adicionales de 32 bits con resultados de 64 bits (32 bits × 32 bits = 64 bits). Cortex-M4/M7 (opcionalmente M33/M35P) incluye instrucciones DSP para (16 bits × 16 bits = 32 bits), (32 bits × 16 bits = 32 bits superiores), (32 bits × 32 bits = 32 bits superiores) multiplicaciones. [14] [15]
Nota: La cantidad de ciclos para completar las instrucciones de multiplicación y división varía según los diseños del núcleo ARM Cortex-M. Algunos núcleos tienen una opción de silicio para elegir entre velocidad rápida o tamaño pequeño (velocidad lenta), por lo que los núcleos tienen la opción de usar menos silicio con la desventaja de un mayor número de ciclos. Una interrupción que ocurre durante la ejecución de una instrucción de división o de una instrucción de multiplicación iterativa lenta hará que el procesador abandone la instrucción y luego la reinicie después de que regrese la interrupción.
Instrucciones de multiplicación "resultado de 32 bits": Cortex-M0/M0+/M23 es una opción de silicio de 1 o 32 ciclos, Cortex-M1 es una opción de silicio de 3 o 33 ciclos, Cortex-M3/M4/M7/M33/M35P es de 1 ciclo.
Instrucciones de multiplicación "resultado de 64 bits": Cortex-M3 es de 3 a 5 ciclos (según los valores), Cortex-M4/M7/M33/M35P es 1 ciclo.
Instrucciones de división: Cortex-M3/M4 es de 2 a 12 ciclos (según los valores), Cortex-M7 es de 3 a 20 ciclos (según los valores), Cortex-M23 es una opción de 17 o 34 ciclos, Cortex-M33 es de 2 a 11 ciclos (dependiendo de los valores), Cortex-M35P está por determinar.
Nota: Algunos núcleos Cortex-M tienen opciones de silicio para varios tipos de unidades de punto flotante ( FPU ). El Cortex-M55/M85 tiene una opción para media precisión ( HP ), el Cortex-M4/M7/M33/M35P/M52/M55/M85 tiene una opción para precisión simple ( SP ), el Cortex-M7/M52 / M55 / M85 tiene una opción para doble precisión ( DP ). Cuando se incluye una FPU, el núcleo a veces se denomina "Cortex-MxF", donde 'x' es la variante del núcleo, como Cortex- M4 F. [14] [15]
Nota: MOVW es un alias que significa instrucción MOV "ancha" de 32 bits.
Nota: BW es una rama incondicional de larga distancia (similar en codificación, operación y rango a BL, menos la configuración del registro LR).
Nota: Para Cortex-M1, existen instrucciones WFE/WFI/SEV, pero se ejecutan como una instrucción NOP.
Nota: Las instrucciones de FPU de media precisión (HP) son válidas en Cortex-M52/M55/M85 solo cuando la opción HP FPU existe en el silicio.
Nota: Las instrucciones de FPU de precisión simple (SP) son válidas en Cortex-M4 / M7 / M33 / M35P / M52 / M55 / M85 solo cuando la opción SP FPU existe en el silicio.
Nota: Las instrucciones FPU de doble precisión (DP) son válidas en Cortex-M7 / M52 / M55 / M85 solo cuando la opción DP FPU existe en el silicio.
Depreciaciones
La arquitectura ARM para la serie ARM Cortex-M eliminó algunas características de núcleos heredados más antiguos: [14] [15]
El conjunto de instrucciones ARM de 32 bits no está incluido en los núcleos Cortex-M.
La endianidad se elige en la implementación del silicio en los núcleos Cortex-M. Los núcleos heredados permitieron el cambio "sobre la marcha" del modo endian de datos .
Los coprocesadores no fueron compatibles con los núcleos Cortex-M, hasta que se reintrodujo la opción de silicio en "ARMv8-M Mainline" para los núcleos ARM Cortex-M33/M35P.
Las capacidades del conjunto de instrucciones ARM de 32 bits se duplican de muchas maneras con los conjuntos de instrucciones Thumb-1 y Thumb-2, pero algunas características de ARM no tienen una característica similar:
Las instrucciones ARM SWP y SWPB (swap) no tienen una característica similar en Cortex-M.
El conjunto de instrucciones Thumb-1 de 16 bits ha evolucionado con el tiempo desde que se lanzó por primera vez en los núcleos ARM7T heredados con la arquitectura ARMv4T. Se agregaron nuevas instrucciones Thumb-1 a medida que se lanzaban las arquitecturas ARMv5/ARMv6/ARMv6T2 heredadas. Se eliminaron algunas instrucciones Thumb-1 de 16 bits de los núcleos Cortex-M:
La instrucción "BLX <inmediata>" no existe porque se usó para cambiar del conjunto de instrucciones Thumb-1 al ARM. La instrucción "BLX <registro>" todavía está disponible en Cortex-M.
SETEND no existe porque ya no se admite el cambio sobre la marcha del modo endian de datos.
Las instrucciones del coprocesador no eran compatibles con los núcleos Cortex-M, hasta que se reintrodujo la opción de silicio en "ARMv8-M Mainline" para los núcleos ARM Cortex-M33/M35P.
La instrucción SWI pasó a llamarse SVC, aunque la codificación binaria de la instrucción es la misma. Sin embargo, el código del controlador SVC es diferente del código del controlador SWI debido a cambios en los modelos de excepción.
Corteza-M0
El núcleo Cortex-M0 está optimizado para tamaños de matriz de silicio pequeños y para su uso en chips de precio más bajo. [2]
Las características clave del núcleo Cortex-M0 son: [17]
El Cortex-M0+ es un superconjunto optimizado del Cortex-M0. El Cortex-M0+ tiene compatibilidad completa con el conjunto de instrucciones del Cortex-M0, lo que permite el uso del mismo compilador y herramientas de depuración. La tubería Cortex-M0+ se redujo de 3 a 2 etapas, lo que reduce el uso de energía y aumenta el rendimiento (IPC promedio más alto debido a que las sucursales toman un ciclo menos). Además de las funciones de depuración en el Cortex-M0 existente, se puede agregar una opción de silicio al Cortex-M0+ llamada Micro Trace Buffer (MTB), que proporciona un búfer de seguimiento de instrucciones simple. El Cortex-M0+ también recibió características de Cortex-M3 y Cortex-M4, que se pueden agregar como opciones de silicio, como la unidad de protección de memoria (MPU) y la reubicación de la tabla vectorial. [18]
Las características clave del núcleo Cortex-M0+ son: [18]
Los microcontroladores ARM más pequeños son del tipo Cortex-M0+ (a partir de 2014, el más pequeño con 1,6 mm por 2 mm en un paquete a escala de chip es Kinetis KL03). [32]
Multiplicación de enteros de hardware de 32 bits con resultado de 32 o 64 bits, con o sin signo, suma o resta después de la multiplicación. La multiplicación de 32 bits es 1 ciclo, pero la multiplicación de 64 bits y las instrucciones MAC requieren ciclos adicionales.
División de enteros por hardware de 32 bits (2 a 12 ciclos).
Conceptualmente, el Cortex-M4 es un Cortex-M3 más instrucciones DSP y una unidad de punto flotante (FPU) opcional. Un núcleo con una FPU se conoce como Cortex-M4F.
Las características clave del núcleo Cortex-M4 son: [21]
Multiplicación de enteros de hardware de 32 bits con resultado de 32 o 64 bits, con o sin signo, suma o resta después de la multiplicación. Multiplicación de 32 bits y MAC son de 1 ciclo.
División de enteros por hardware de 32 bits (2 a 12 ciclos).
El Cortex-M7 es un núcleo de alto rendimiento con casi el doble de eficiencia energética que el antiguo Cortex-M4. [7] Cuenta con una tubería superescalar de 6 etapas con predicción de rama y una unidad de punto flotante opcional capaz de realizar operaciones de precisión simple y, opcionalmente, de doble precisión . [7] [38] Los buses de instrucciones y datos se han ampliado a 64 bits de ancho con respecto a los buses de 32 bits anteriores. Si un núcleo contiene una FPU, se conoce como Cortex-M7F; de lo contrario, es Cortex-M7.
Las características clave del núcleo Cortex-M7 son: [22]
Arquitectura ARMv7E-M.
Tubería de 6 etapas con especulación en rama . El segundo núcleo más largo de todos los ARM Cortex-M, siendo el primero el Cortex-M85.
Conjuntos de instrucciones:
Pulgar-1 (entero).
Pulgar-2 (entero).
Multiplicación de enteros de hardware de 32 bits con resultado de 32 o 64 bits, con o sin signo, suma o resta después de la multiplicación. Multiplicación de 32 bits y MAC son de 1 ciclo.
División de enteros por hardware de 32 bits (2 a 12 ciclos).
Unidad de punto flotante (FPU) opcional: (precisión simple) o (precisión simple y doble), ambas compatibles con IEEE-754-2008. Se llama extensión FPv5.
Caché de CPU opcional : caché de instrucciones de 0 a 64 KB, caché de datos de 0 a 64 KB, cada uno con ECC opcional .
Memoria estrechamente acoplada (TCM) opcional: TCM de instrucciones de 0 a 16 MB, TCM de datos de 0 a 16 MB, cada uno con ECC opcional.
Unidad de protección de memoria (MPU) opcional: 8 o 16 regiones.
Macrocelda de seguimiento integrada (ETM) opcional: solo instrucción o instrucción y datos.
Modo de retención opcional (con kit de administración de energía del brazo) para modos de suspensión.
El núcleo Cortex-M23 se anunció en octubre de 2016 [39] y se basa en la arquitectura ARMv8-M que se anunció previamente en noviembre de 2015. [40] Conceptualmente, Cortex-M23 es similar a un Cortex-M0+ más instrucciones de división de enteros y TrustZone. características de seguridad y también tiene un canal de instrucciones de 2 etapas . [8]
Las características clave del núcleo Cortex-M23 son: [23] [39]
El núcleo Cortex-M33 se anunció en octubre de 2016 [39] y se basa en la arquitectura ARMv8-M que se anunció previamente en noviembre de 2015. [40] Conceptualmente, Cortex-M33 es similar a un cruce de Cortex-M4 y Cortex-M23. y también tiene un proceso de instrucción de 3 etapas . [9]
Las características clave del núcleo Cortex-M33 son: [24] [39]
El núcleo Cortex-M35P se anunció en mayo de 2018 y se basa en la arquitectura Armv8-M . Conceptualmente es un núcleo Cortex-M33 con un nuevo caché de instrucciones, además de nuevos conceptos de hardware a prueba de manipulaciones tomados de la familia ARM SecurCore y funciones de paridad configurables y ECC. [10]
Actualmente, la información sobre Cortex-M35P es limitada porque su Manual de referencia técnica y su Guía de usuario genérica aún no se han publicado.
Papas fritas
Los siguientes microcontroladores se basan en el núcleo Cortex-M35P:
La documentación de los chips ARM es extensa. En el pasado, la documentación de los microcontroladores de 8 bits normalmente cabía en un solo documento, pero a medida que los microcontroladores evolucionaron, también lo hizo todo lo necesario para respaldarlos. Un paquete de documentación para chips ARM normalmente consta de una colección de documentos del fabricante del circuito integrado y del proveedor del núcleo de la CPU ( ARM Limited ).
Un árbol de documentación de arriba hacia abajo típico es:
Árbol de documentación (de arriba a abajo)
Sitio web del fabricante de circuitos integrados.
Diapositivas de marketing del fabricante de circuitos integrados.
Hoja de datos del fabricante de circuitos integrados para el chip físico exacto.
Manual de referencia del fabricante de circuitos integrados que describe periféricos comunes y aspectos de una familia de chips físicos.
Sitio web principal de ARM.
Guía de usuario genérica del núcleo ARM.
Manual de referencia técnica central de ARM.
Manual de referencia de arquitectura ARM.
Los fabricantes de circuitos integrados tienen documentos adicionales, como: manuales de usuario de la placa de evaluación, notas de aplicación, guías de introducción, documentos de biblioteca de software, erratas y más. Consulte la sección de enlaces externos para obtener enlaces a documentos oficiales de Arm.
^ abcdefghijklmnopqr "Manual de referencia de arquitectura ARMv6-M". BRAZO limitado .
^ abcdefghijklmnopqr "Manual de referencia de arquitectura ARMv7-M". BRAZO limitado .
^ Desarrollo de software integrado abcd Cortex-M3; Nota de aplicación 179; BRAZO limitado.
^ abc "Manual de referencia técnica de Cortex-M0". BRAZO limitado .
^ abcd "Manual de referencia técnica de Cortex-M0 +". BRAZO limitado .
^ abc "Manual de referencia técnica de Cortex-M1". BRAZO limitado .
^ abc "Manual de referencia técnica de Cortex-M3". BRAZO limitado .
^ abc "Manual de referencia técnica de Cortex-M4". BRAZO limitado .
^ abcd "Manual de referencia técnica de Cortex-M7". BRAZO limitado .
^ abc "Manual de referencia técnica de Cortex-M23". BRAZO limitado .
^ abc "Manual de referencia técnica de Cortex-M33". BRAZO limitado .
^ ab "Manual de referencia técnica de Cortex-M52". BRAZO limitado .
^ ab "Manual de referencia técnica de Cortex-M55". BRAZO limitado .
^ ab "Manual de referencia técnica de Cortex-M85". BRAZO limitado .
^ abc "Kit de diseño del sistema Cortex-M (CMSDK)". Portabrazos . Archivado desde el original el 4 de marzo de 2016.
^ abcdefghij Guía de programación ARM Cortex-M para instrucciones de barrera de memoria; Sección 3.6 Requisitos de implementación del sistema; Nota de aplicación 321; BRAZO limitado.
^ abcdefghijkl "Manual de referencia de arquitectura ARMv8-M". BRAZO limitado .
^ Microcontroladores PIC y SAM de 32 bits; Pastilla.
^ Fingas, Jon (25 de febrero de 2014). "Freescale hace que el chip controlador ARM más pequeño del mundo sea aún más pequeño" . Consultado el 2 de octubre de 2014 .
^ GOWIN Semiconductor se une a ARM DesignStart y ofrece procesadores ARM Cortex-M1 gratuitos para sus familias de productos FPGA