Hélice de paralaje
El Paralaje P8X32A Hélice chip, introducido en 2006, es un multi-core arquitectura paralelo microcontrolador con ocho 32-bit RISC CPU núcleos.[1][2]
El microcontrolador Parallax Propeller, hélice Lenguaje ensambladory Spin intérprete fueron diseñados por una persona, de paralaje Co-fundador y Presidente Chip Gracey. El giro lenguaje de programación y "Herramienta de hélice" entorno de desarrollo integrado fueron diseñadas por el ingeniero de software Chip Gracey y de paralaje Jeff Martin.
En 06 de agosto de 2014, Parallax Inc. lanzó el propulsor P8X32A Verilog y archivos de alto nivel HDL bajo el Licencia Pública General de GNU 3.0.[3]
Contenido
- 1 Arquitectura de núcleo múltiple
- 2 Gestión de velocidad y potencia
- 3 Periféricos integrados
- 4 Extensiones ROM
- 5 Construido en intérprete de código de bytes SPIN
- 5.1 Sintaxis
- 5.2 Palabras clave de ejemplo
- 5.3 Programa de ejemplo
- 6 Paquete y la entrada-salida
- 7 Dispositivos de E/S virtuales
- 8 Núcleos dedicados en lugar de
- 9 Mecanismo de arranque
- 10 Memoria externa persistente
- 11 Otras implementaciones de lengua
- 11.1 Compilador de C
- 11.2 En la hélice
- 11.2.1 PropForth
- 11.3 Hélice y Java
- 11.4 Tiempo de ejecución y compilador de Pascal
- 12 Programación gráfica
- 13 Futuras versiones
- 14 Referencias
- 15 Enlaces externos
Arquitectura de núcleo múltiple
Cada uno de los ocho núcleos de 32 bits (llamado un COG) tiene un CPU que tiene acceso a 512 32 bits palabras largas (2 kB) de las instrucciones y datos. Uno mismo-modificación código es posible y es utilizado internamente, por ejemplo por una instrucción que se utiliza para crear un mecanismo de llamada/retorno de subrutina sin necesidad de un pila. Acceso a memoria compartida (32 kB RAM; 32 kB ROM) está controlada en round robin moda por una interna autobús controlador llamado el Hub. Cada diente también tiene acceso a dos contadores de hardware dedicado y dos "video registros especiales" para su uso en la generación de PAL, NTSC, VGA, servo-control, u otras señales de temporización.[4]
Gestión de velocidad y potencia
La hélice puede ser velocidad de reloj usando ya sea un oscilador interno, la en-viruta (proporcionando un total inferior conteo de piezas, pero sacrificar alguna precisión y térmica estabilidad) o externo cristal o resonador (proporcionando una velocidad máxima más alta con una mayor precisión en un aumento de los costos total). Sólo el Oscilador externo puede ejecutarse a través de una en-viruta PLL multiplicador de reloj, que puede ser definido en 1 x, x 2, x 4, x 8 o x 16.
La frecuencia del oscilador a bordo (si se usa) y el valor del multiplicador PLL pueden cambiarse en tiempo de ejecución. Si se usa correctamente, esto puede mejorar la eficiencia de energía; por ejemplo, el multiplicador PLL puede reducirse antes de un largo "ninguna operación" espera necesario para fines de sincronización, luego aumentó después, causando el procesador a usar menos energía. Sin embargo, la utilidad de esta técnica es limitada a situaciones donde ninguna otra pieza está ejecutando código de sincronización dependiente (o está cuidadosamente diseñado para lidiar con el cambio), ya que la tasa de reloj efectiva es común a los dientes.
Las gamas de tasa de reloj efectiva de 32 kHz a 80 MHz (con los valores exactos disponibles para control dinámico depende de la configuración utilizada, como se describió anteriormente). Cuando se ejecuta a 80 MHz, interpretado por el propietario Girar el lenguaje de programación ejecuta aproximadamente 80.000 instrucción-fichas por segundo en cada núcleo, dando 8 veces 80.000 por 640.000 alto nivel de instrucciones por segundo. La mayoría de las instrucciones de lenguaje de máquina toma 4 ciclos de reloj para ejecutar, dando lugar a 20 MIPS por engranaje, o 160 MIPS en total para una hélice 8-cog.
Además de reducir la tasa de reloj para que realmente se requiere, puede reducirse el consumo de energía apagando cogs (que luego usan muy poca energía eléctrica) y mediante una nueva configuración de pines de I/O que no son necesarios, o pueden ser colocados con seguridad en un alta impedancia Estado ("tristated"), como entradas. Pines pueden reconfigurarse dinámicamente, pero una vez más, el cambio se aplica a los dientes, sincronización es importante para ciertos diseños. (Algún tipo de protección está disponible para las situaciones donde un núcleo intenta usar un pin como una salida mientras otros intentos para utilizarlo como insumo; esto se explica en el manual de referencia técnica de paralaje).
Periféricos integrados
Cada pieza tiene acceso a algún hardware dedicado contador/temporizador, y un generador de señal especial destinado a simplificar el diseño de las etapas de salida de vídeo, como compuesto PAL o NTSC muestra (incluyendo modulación para su difusión) y VGA monitores. Paralaje hace así el código de muestra disponible que puede generar las señales de vídeo (texto y gráficos de baja resolución algo) con un conteo de piezas mínimo consiste en la hélice, un oscilador de cristal y unas resistencias para formar un crudo DAC. La frecuencia del oscilador es importante, como la corrección de capacidad del hardware de video sincronización está limitada a la tarifa de reloj. Es posible utilizar engranajes múltiples en paralelo para generar una sola señal de vídeo. Más generalmente, el hardware de sincronización puede utilizarse para implementar varios ancho de Pulso modulado Señales de temporización (PWM).
Extensiones ROM
Además el intérprete Spin y un Gestor de arranque, el built-in ROM proporciona algunos datos que pueden ser útiles para algunos el sonido, video, o aplicaciones matemáticas:
- un mapa de bits fuente es proporcionado, adecuado para aplicaciones de generación de carácter típico (pero no personalizable);
- a logaritmo tabla (base 2, 2048 entradas);
- un antilog tabla (base 2, 2048 entradas); y
- una mesa de seno (16-bit, 2049 entradas que representan el primer cuadrante, ángulos de 0 a π/2; otros tres cuadrantes se crean de la misma tabla).
Las extensiones de las matemáticas tienen la intención de ayudar a compensar por la falta de un unidad de coma flotante así como más primitiva faltan las operaciones, como la multiplicación y división (esto se enmascara en la vuelta, pero es una limitación para lenguaje ensamblador rutinas). Sin embargo, la hélice es un procesador de 32 bits, y estas tablas pueden no tener suficiente precisión para aplicaciones de mayor precisión.
Construido en intérprete de código de bytes SPIN
Spin es un multitarea alto nivel lenguaje de programación de computadoras creado por Paralajede chip Gracey, quien también diseñó la hélice microcontrolador en el que se ejecuta, para su línea de microcontroladores de la hélice.[5]
Giro código está escrito en la herramienta de hélice, una plataforma de desarrollo de software orientado a GUI escrita para Windows XP.[6] Este compilador convierte el código de vuelta en bytecodes que pueden cargarse (con la misma herramienta) en el principal 32 kB de RAM y opcionalmente en el I²C Bota EEPROM, de la viruta del propulsor. Después de arrancar la hélice un intérprete de bytecode se copia de la ROM incorporada en los 2 kB de RAM de la corona primaria. Este diente entonces comenzará a interpretar los bytecodes en el principal 32 kB de RAM. Más de una copia del intérprete de bytecode puede funcionar en otros dientes, así que varios Spin código hilos de rosca puede ejecutar simultáneamente. Dentro de un programa de código Spin, programa de código ensamblador (s) puede ser"Inline"insertado. Estos programas ensamblador se ejecutará entonces en sus propios dientes.
Como PythonSpin utiliza sangría/espacios en blanco, en lugar de llaves o Palabras clave, para delimitar bloques.
Intérprete de la hélice por su propietaria multi-threaded Lenguaje informático SPIN es una Código de bytes intérprete. Este intérprete decodifica secuencias de instrucciones, una instrucción por Byte, del código de usuario que ha sido editado, compilado y cargan la hélice desde dentro de un propósito específico IDE. Este IDE, el cual Parallax llama simplemente "La herramienta de la hélice", está diseñado para utilizarse bajo el Windows Sistema operativo.
El idioma SPIN es una lenguaje de alto nivel. Porque se interpreta en el software, funciona más lento de lo puro montaje propulsor pero puede ser más eficiente en espacio (hélice Asamblea opcodes son 32 pedacitos largos; SPIN directivas son 8 bits de largos, que puede ser seguidos por un número de bytes de 8 bits para especificar cómo funciona la Directiva). SPIN también permite a los usuarios evitar importantes segmentación de memoria cuestiones que deben considerarse para el código ensamblador.
Al inicio, una copia del intérprete de código byte (menos de 2 kB de tamaño), se copiarán en la RAM dedicada de un engranaje y entonces comenzará a interpretar el código de bytes en el principal 32 KB de RAM. Dientes adicionales pueden iniciarse desde que punto, cargar una copia separada del intérprete en la corona nuevo dedicado a RAM (un total de ocho hilos intérprete puede, por tanto, simultáneamente). En particular, esto significa que al menos una cantidad mínima de código de inicio debe ser código de centrifugado, para todas las aplicaciones de la hélice.
Sintaxis
La sintaxis de giro puede dividirse en bloques. Los bloques son como siguiente.
- VAR Contiene variables globales
- CON Sostiene constantes del programa
- PUB Contiene código para una subrutina pública
- PRI Contiene código para una subrutina privada
- OBJ Contiene código para objetos
- DAT Sostiene predefinidas datos, código ensamblador y reservas de memoria
Palabras clave de ejemplo
- reinicio: provoca el microcontrolador reiniciar
- waitcnt: esperar a que el contador de sistema igualar o exceder un valor especificado
- waitvid: Espera para un evento de sincronización (video) antes de salida de datos (vídeo) a los pines de I/O.
- coginit: comienza un procesador en una nueva tarea
Programa de ejemplo
Un programa de ejemplo (tal y como aparecería en el editor de "Herramienta de hélice") que salidas de la barra de sistema actual cada 3.000.000 ciclos, entonces es cerrada por otro engranaje después de 40.000.000 ciclos:
La hélice de paralaje está acumulando gradualmente las bibliotecas de software que le dan una funcionalidad similar a la de paralaje mayor BASIC Stamp producto; Sin embargo no hay ninguna lista uniforme de los cuales PBASIC instalaciones ahora tienen Spin equivalentes.
Ha sido en broma opinó que "Si dos lenguas fueron a reunirse en un bar, Fortran y BASIC... Nueve meses más tarde uno encontraría SPIN. ". Esto se refiere al formato de espacios en blanco de FORTRAN y la operación basada en la palabra clave de BASIC.
Paquete y la entrada-salida
La versión inicial del chip (llamado el P8X32) proporciona un puerto de 32 bits en un 40-pin 0,6" DIP, 44-pin LQFP, o QFN paquete. De los 40 pines disponibles, 32 se utilizan para la entrada-salida, cuatro para la energía y tierra pernos, dos por un cristal externo (si se utiliza), uno para permitir apagón-detección y uno para el reajuste.
Todos los 8 núcleos pueden acceder al puerto de 32 bits (designado "A", actualmente no hay ningún "B") simultáneamente. Se utiliza un mecanismo de control especial para evitar conflictos I/O si un núcleo intenta usar un pin I/O como una salida mientras otro intenta utilizarlo como entrada. Cualquiera de estos pines puede utilizarse para las sincronización o ancho de pulso modulación salida técnicas descritas anteriormente.
Paralaje ha declarado que espera que las versiones posteriores de la hélice para ofrecer más pines I/O o más memoria.[7]
Dispositivos de E/S virtuales
Los diseñadores de la hélice diseñaron alrededor del concepto de "dispositivos de E/S virtuales". Por ejemplo, el "Kit de desarrollo de videojuegos de HYDRA", (un sistema informático diseñado para que aficionados, para aprender a desarrollar videojuegos"estilo retro") utiliza el generador de caracteres incorporado y soporte de vídeo lógica para generar un virtual Generador de visualización de vídeo salidas VGA color cuadros, fotografías en color compatible con PAL/NTSC o transmisión RF video + audio en software.[8]
La captura de pantalla muestra aquí fue hecha usando un software "controlador de pantalla virtual" que envía los datos de píxeles encima de un enlace serial a un PC.[9]
Bibliotecas de software están disponibles para implementar varios dispositivos de E/S que van desde simples UARTs y entrada-salida Serial interfaces tales como SPI, I²C y PS/2 compatible con ratón y teclado interfaces seriales, controladores de motor para sistemas robóticos, interfaces MIDI y controladores de LCD.[10]
Núcleos dedicados en lugar de
La filosofía de diseño de la hélice es un duro en tiempo real la arquitectura multinúcleo niega la necesidad para dedicada interrupción hardware y soporte de montaje. En la tradicional arquitectura de CPU, líneas de interrupción externa se alimentan a un controlador de interrupción de la en-viruta y son atendidas por una o más rutinas de servicio de interrupción. Cuando ocurre una interrupción, el controlador de interrupción suspende proceso CPU normal y guarda el estado interno (típicamente en la pila), luego vectores a la rutina de servicio de interrupción designado. Después de manipular la interrupción, la rutina de servicio ejecuta una instrucción "retorno de interrupción" que restaura el estado interno y se reanuda el procesamiento de la CPU.
Para manejar una señal externa puntualmente en la hélice, uno de las 32 líneas i/o está configurado como entrada. Un engranaje entonces está configurado para esperar una transición (borde positivo o negativo) sobre esa entrada utilizando uno de los circuitos de dos contadores disponibles para cada diente. Mientras esperaba la señal, la corona opera en modo de baja potencia, esencialmente para dormir. Extender esta técnica, una hélice se puede configurar para responder a ocho líneas independientes "interrumpir" con esencialmente cero retardo de manejo. Alternativamente, puede utilizarse una sola línea para indicar que la "interrupción" y entonces se pueden leer líneas de entrada adicionales para determinar la naturaleza del evento. El código que se ejecuta en los otros núcleos no es afectado por la interrupción manejo cog. A diferencia de una arquitectura de procesador único interrupción tradicional multitarea, sigue siendo el tiempo de respuesta de señal predecible,[11] y efectivamente utilizando el término "interrupción" en este contexto puede causar confusión, ya que esta funcionalidad puede ser más bien pensada como colegio electoral con un cero tiempo de bucle.
Mecanismo de arranque
En el poder apagón detección, software reset o reinicialización hardware externo, la hélice cargará un código de máquina rutina de arranque desde la ROM interna en la RAM de su primera (primaria) cog y ejecutarlo. Este código emula un I²C interfaz en software, temporalmente usando dos pines I/O para las señales de reloj y datos serial necesarias para cargar el código de usuario de un externo I2C EEPROM.
Simultáneamente, emula un puerto serial, con otros dos pernos de I/O que pueden utilizarse para cargar software directamente a RAM (y opcionalmente el external EEPROM). Si la hélice no ve ningún comando del puerto serial, cargará el programa de usuario (el código de acceso de los cuales debe ser escrito en la vuelta, como se describió anteriormente) de la EEPROM serial en el principal 32kB de RAM. Después de eso se cargará el intérprete SPIN desde su ROM incorporado en la RAM dedicada de su primera corona, tal modo sobrescribir la mayoría del gestor de arranque.
Independientemente de cómo se carga el programa de usuario, ejecución comienza interpretando usuario inicial bytecode con el intérprete de vuelta en el engranaje primario. Después de que se ejecuta este código inicial de giro, la aplicación puede activar cualquier engranaje no utilizado para iniciar un nuevo hilo de rosca, o empezar a código ensamblador rutinas.
Memoria externa persistente
Las botas de hélice desde una serie externo EEPROM; una vez completada la secuencia de arranque, puede accederse a este dispositivo como un periférico externo.[12]
Otras implementaciones de lengua
Aparte de Spin y ensamblador bajo nivel de la hélice, un número de otros idiomas ha portado a él.
Compilador de C
Paralaje apoya hélice-GCC, que es un puerto de la GCC C/C++ compiler para hélice[13] (rama release_1_0). El compilador de C y la biblioteca de C son compatibles con ANSI C. El compilador de C++ es compatible con ANSI-C99. C++ completo es compatible con memoria externa. El programa SimpleIDE[14] proporciona a los usuarios una forma sencilla de escribir programas sin necesidad de Makefiles. En 2013 paralaje había incorporado hélice-GCC y bibliotecas sencilla a la hélice-C aprender la serie de tutoriales.[15] Hélice-GCC se mantiene activamente. Hélice-GCC y SimpleIDE son productos de software de paralaje oficialmente soportados.
El ImageCraft ICCV7 para el compilador de C de la hélice se ha caracterizado al estado final de su vida.[16]
Un compilador ANSI C libre llamado a Catalina está disponible.[17] Se basa en LCC. Catalina se mantiene activamente.
En la hélice
Hay por lo menos 6 versiones diferentes de FORTH disponible para la hélice, de código abierto y pagado.
PropForth
Una versión gratuita que goza de amplio desarrollo y apoyo de la comunidad es PropForth[18] PropForth se adapta a la arquitectura de utilería y necesariamente se desvía de cualquier norma general sobre singularidad arquitectónica, consistente con el concepto de adelante.
Además el intérprete FORTH, PropForth ofrece muchas características que aprovechan las capacidades de la viruta. "Ligada I/O" hace referencia al método de asociar un flujo de proceso, permitiendo un proceso vincular a otro sobre la marcha, transparente para la aplicación. Esto puede reducir o eliminar la necesidad de una depuración del hardware o JTAG interfaz en muchos casos. "Mutli-canal Serial síncrono (MCS)" se refiere a la comunicación serial síncrona entre chips de apoyo. los paquetes de 96 bits se envían continuamente entre dos dientes, el resultado es que las aplicaciones vean recursos adicionales (+ 6 CV para cada chip apoyo añadido) con poco o ningún impacto sobre el rendimiento de una aplicación bien construida.
"LogicAnalyzer" se refiere a un paquete de extensión que implementa analizador lógico software. EEPROMfilesystem y SDfilesystem son las extensiones que implementan almacenamiento rudimentario usando EEPROM y flash SD.
"PagedAssembler" se refiere al paquete de las optimizaciones que permiten que las rutinas de ensamblador ser intercambiados en (y fuera por sobrescribir) sobre la marcha, permitiendo la aplicación prácticamente ilimitado tamaño. Ejecución del script permite extensiones de ser cargado a la mosca, permitiendo que la fuente del programa hasta el tamaño de los medios de almacenamiento.
Hélice y Java
También hay un movimiento en el lugar para poner el IV. en hélice. Se están desarrollando un compilador, depurador y emulador.[19]
Tiempo de ejecución y compilador de Pascal
Un gran subconjunto de Pascal se implementa mediante un compilador e interprete basado en el Sistema de P4.[20]
Programación gráfica
PICoPLC soporta salida al procesador de hélice. El programa se crea en una GUI lógica de escalera Editor y código resultante se emite como fuente de SPIN. PICoPLC también es compatible con la característica de crear-simular-run P8X32. Restricciones en el hardware de destino como la frecuencia del oscilador y pasadores de IO no son libremente configurables en el editor de escalera. PICoPLC ya no está disponible en el desarrollador web (HTTP 404), pero pueden encontrarse en https://picoplc.software.Informer.com/3.0/ .
Futuras versiones
Paralaje es actualmente[¿Cuándo?] construcción de un nuevo propulsor[21] con dientes que cada uno se desarrollará en aproximadamente 200 MIPS, mientras que el actual propulsor engranajes cada ejecución en alrededor de 20 MIPS. El rendimiento mejorado resultaría de un incremento de la velocidad de reloj máxima a 200 MHz (de 80 MHz) y una arquitectura que las tuberías instrucciones, logrando una ejecución promedio de casi una instrucción por el reloj ciclo (aproximadamente un aumento diez veces).[7]
Referencias
- ^ makezine.com
- ^ makezine.com
- ^ Página de hélice 1 Open Source
- ^ electronicdesign.com
- ^ David A. Scanlan, Martin A. Hebel. "La programación de la viruta del propulsor de ocho núcleos" Revista de Ciencias en las escuelas de computaciónVolumen 23, número 1, octubre de 2007.
- ^ Propeller.wikispaces.com
- ^ a b Foros de paralaje
- ^ selmaware.com; un tablero generador video dedicado con una hélice
- ^ software de captura de pantalla
- ^ Parallax.com; Biblioteca de software de intercambio de objeto de hélice
- ^ hélice wikispaces.com
- ^ circuitcellar.com
- ^ PropGCC en Google Code
- ^ SimpleIDE
- ^ Sistema de aprendizaje de hélice C
- ^ Parallax.com
- ^ Catalina - un compilador de C para la hélice
- ^ Google.com; propforth
- ^ Hélice de programación en Java
- ^ https://Propeller.wikispaces.com/Programming+in+Pascal
- ^ Parallax.com
Enlaces externos
- Wiki con información detallada acerca de la hélice
- Foro de hélice en el paralaje Inc:
- Página de hélice en Parallax Inc:
- Página de hélice 1 Open Source
- Hélice GCC sitio Beta
- Artículo en EiED en línea
- un segundo artículo en EiED en línea
- Un artículo en ferret.com.au
- Lista de ejecución en la hélice de lenguajes de programación
- Descargar PICoPLC de APStech
- Patrocinado por FirstSpin, un programa semanal de audio educativo sobre el lenguaje de programación y la hélice de la vuelta de Parallax