Today: Thursday 13 May 2021 , 4:02 am


search


RISC-V

Last updated 9 Día 1 Views

In this page talks about ( RISC-V ) It was sent to us on 04/05/2021 and was presented on 04/05/2021 and the last update on this page on 04/05/2021

Tu comentario


Introduzca el código
 
RISC-V (pronunciado "Risk-Five") es una arquitectura de conjunto de instrucciones (ISA) de hardware libre basado en un diseño de tipo RISC (conjunto de instrucciones reducido).
A diferencia de la mayoría de los conjuntos de instrucciones, el de RISC-V es libre y abierto y se puede usar sin royalties para cualquier propósito, lo que permite que cualquiera diseñe, fabrique y venda chips y software de RISC-V. Si bien no es la primera ISA de arquitectura abierta 1 , es significativa porque está diseñada para ser útil en una amplia gama de dispositivos. El conjunto de instrucciones también tiene un cuerpo sustancial de software de soporte, que evita una debilidad habitual de los nuevos conjuntos de instrucciones.
El proyecto comenzó en 2010 en la Universidad de California en Berkeley, pero muchos colaboradores son voluntarios y trabajadores de la industria fuera de la universidad.
El conjunto de instrucciones se ha diseñado pensando en implementaciones pequeñas, rápidas y de bajo consumo para el mundo real, pero sin una sobre-ingeniería excesiva que buscase una microarquitectura concreta.
En mayo de 2017, estaba cerrada la versión 2.2 del conjunto de instrucciones del espacio de usuario. El conjunto de instrucciones privilegiadas estaba disponible como borrador en la versión 1.10.

Importancia

Los autores de RISC-V pretenden proporcionar varios diseños de CPU disponibles de forma gratuita bajo las licencias BSD, que permiten que los trabajos derivados, como los diseños de chips RISC-V, sean abiertos y gratuitos, al igual que RISC-V, o cerrados y de propiedad exclusiva.
Por el contrario, los proveedores de chips comerciales como ARM Holdings y MIPS Technologies cobran tarifas de licencia sustanciales por el uso de sus patentes.   También requieren acuerdos de no divulgación antes de publicar documentos que describen las ventajas de sus diseños y el conjunto de instrucciones. El secreto impide la auditoría de seguridad.
El desarrollo de una CPU requiere experiencia en diseño en varias especialidades: lógica digital electrónica, compiladores y sistemas operativos. Es raro encontrar esto fuera de un equipo de ingeniería profesional. El resultado es que los conjuntos modernos de instrucción en computadora de alta calidad para fines generales no han estado ampliamente disponibles en ningún lugar, ni siquiera explicados, excepto en entornos académicos. Debido a esto, muchos colaboradores de RISC-V lo ven como un esfuerzo comunitario unificado. Esta necesidad de una gran base de contribuyentes es parte de la razón por la cual RISC-V se diseñó para adaptarse a tantos usos.
Los autores de RISC-V también tienen una importante investigación y experiencia de usuario que validan sus diseños en silicio y simulación. El RISC-V ISA es un desarrollo directo de una serie de proyectos académicos de diseño de computadoras. Se originó en parte para ayudar a tales proyectos.

Historia

Predecesores

El término RISC data de alrededor de 1980. Antes de esto, existía cierto conocimiento de que las computadoras más simples podrían ser efectivas, pero los principios de diseño no estaban ampliamente descritos. Las computadoras simples y efectivas siempre han sido de interés académico.
Los académicos crearon el conjunto de instrucciones RISC DLX para la primera edición de Arquitectura de Computadora: Un Enfoque Cuantitativo en 1990. David Patterson fue un autor, y luego asistió a RISC-V. DLX era para uso educativo. Académicos y aficionados lo implementaron utilizando arreglos de puertas programables en campo. No fue un éxito comercial.
Las CPU ARM, versiones 2 y anteriores, tenían un conjunto de instrucciones de dominio público, y aún es compatible con la Colección de compiladores GNU (GCC), un popular compilador de software libre. Existen tres núcleos de código abierto para esta ISA, pero no se han fabricado.
OpenRISC es una ISA de código abierto basada en DLX, con diseños RISC asociados. Es totalmente compatible con implementaciones GCC y Linux. Sin embargo, tiene pocas implementaciones comerciales.

Fundación

Krste Asanović en la Universidad de California, Berkeley, encontró muchos usos para un sistema informático de código abierto. En 2010, decidió desarrollar y publicar uno en un "proyecto corto de tres meses durante el verano". El plan era ayudar tanto a los usuarios académicos como a los industriales. 10 David Patterson en Berkeley también ayudó en el esfuerzo. Originalmente identificó las propiedades de Berkeley RISC , 11 y RISC-V es una de sus largas series de proyectos de investigación cooperativa RISC. Los primeros fondos fueron de DARPA .
Una lista parcial de organizaciones que apoyan la Fundación RISC-V incluye: AMD, 14 Andes Technology, 15 BAE Systems , Berkeley Architecture Research, Bluespec, Inc. , Cortus , Google , GreenWaves Technologies, Hewlett Packard Enterprise , Huawei , IBM , Imperas Software, Instituto de Tecnología de Computación (ICT) Academia China de Ciencias , IIT Madras , Lattice Semiconductor , Mellanox Technologies , Microsemi , Micron Technologies , Nvidia , NXP , Oracle , Qualcomm , Rambus Cryptography Research , Western Digital , SiFive y Raspberry Pi Foundation.

Premios


  • 2017: Premio a la elección del analista de The Linley Group a la mejor tecnología (para el conjunto de instrucciones)
  • Requisitos motivadores

    Los diseñadores dicen que el conjunto de instrucciones es la interfaz principal en una computadora, porque se encuentra entre el hardware y el software. Si un buen conjunto de instrucciones está abierto, disponible para que todos lo usen, debería reducir drásticamente el costo del software al permitir que se reutilice mucho más. También debería aumentar la competencia entre los proveedores de hardware, que pueden usar más recursos para el diseño y menos para el soporte de software.
    Los diseñadores afirman que los nuevos principios son cada vez más raros en el diseño de conjuntos de instrucciones, ya que los diseños más exitosos de los últimos cuarenta años se han vuelto cada vez más similares. De los que fallaron, la mayoría lo hizo porque sus compañías patrocinadoras fallaron comercialmente, no porque los conjuntos de instrucciones fueran técnicamente deficientes. Por lo tanto, un conjunto de instrucciones abiertas bien diseñado y diseñado con principios bien establecidos debería atraer el apoyo a largo plazo de muchos proveedores.
    La mayoría de los ISA abiertos utilizaban la Licencia Pública General de GNU (GPL), alentando a los usuarios a abrir sus implementaciones para que otros los copien y los usen.
    A diferencia de otros diseños académicos que están optimizados solo para la simplicidad de la exposición, los diseñadores afirman que el conjunto de instrucciones RISC-V es para computadoras prácticas. Se dice que tiene características para aumentar la velocidad de la computadora, y aun así reducir el costo y el uso de energía. Estos incluyen una arquitectura de carga y almacenamiento, patrones de bits para simplificar los multiplexores en una CPU, punto flotante basado en estándares simplificados, un diseño que es arquitectónicamente neutral y que coloca los bits más significativos en una ubicación fija para acelerar la extensión de signo. Se dice que la extensión de la señal a menudo se encuentra en la ruta de sincronización crítica.
    El conjunto de instrucciones está diseñado para una amplia gama de usos. Admite tres anchos de palabra, 32, 64 y 128 bits, y una variedad de subconjuntos. Las definiciones de cada subconjunto varían ligeramente para los tres anchos de palabra. Los subconjuntos son compatibles con sistemas integrados pequeños, computadoras personales, supercomputadoras con procesadores vectoriales y computadoras paralelas montadas en bastidores a escala de almacén.
    El conjunto de instrucciones es de ancho variable y extensible, de modo que siempre se pueden agregar más bits de codificación. Se reservó el espacio para la versión extendida de ISA de 128 bits, ya que 60 años de experiencia en la industria han demostrado que el error más irrecuperable en el diseño del conjunto de instrucciones es la falta de espacio de direcciones de memoria. A partir de 2016, la ISA de 128 bits permanece indefinida intencionalmente, porque aún hay muy poca experiencia práctica con sistemas de memoria tan grandes.
    Sin embargo, RISC-V también apoya los usos académicos de los diseñadores. La simplicidad del subconjunto de enteros permite los ejercicios básicos de los estudiantes. El subconjunto de enteros es un simple software de ISA que permite controlar máquinas de investigación. La ISA de longitud variable permite extensiones tanto para los ejercicios de los estudiantes como para la investigación.  El conjunto de instrucciones privilegiadas separadas permite la investigación en el soporte del sistema operativo, sin rediseñar los compiladores. La propiedad intelectual abierta de RISC-V permite que sus diseños se publiquen, reutilicen y modifiquen.

    Software

    Un problema normal para un nuevo conjunto de instrucciones es la falta de diseños y software de CPU.
    El sitio web de RISC-V tiene una especificación para las instrucciones en modo usuario y una especificación preliminar para un conjunto de instrucciones privilegiadas de propósito general, para soportar sistemas operativos.
    Hay varios diseños de CPU de fuente abierta, incluyendo la Máquina de Berkeley fuera de servicio (BOOM) de 64 bits, 21 Cohete de 64 bits, 22 cinco diseños de CPU Sodor de 32 bits de Berkeley, 23 picorv32 por Clifford Wolf, scr1 de Syntacore, PULPino (Riscy and Zero-Riscy) de ETH Zürich / Universidad de Bolonia.  y otros. La CPU Sodor de tres etapas parece ser adecuada para una pequeña CPU integrada. Rocket puede adaptarse a computadoras intermedias compactas y de bajo consumo, como dispositivos personales. BOOM usa gran parte de la infraestructura creada para Rocket, y puede usarse para computadoras personales, de supercomputadoras y de almacén. Tanto picorv como scr1 son implementaciones RV32IMC de clase de microcontrolador (MCU) de 32 bits en Verilog. Los núcleos en PULPino implementan una ISA RV32IMC simple para microcontroladores (Zero-Riscy) o una ISA RV32IMFC más potente con extensiones DSP personalizadas para el procesamiento de señales incrustadas.
    El software de diseño incluye un compilador de diseño, Chisel, que puede reducir los diseños a Verilog para su uso en dispositivos. El sitio web incluye datos de verificación para probar implementaciones principales.
    Las herramientas de software RISC-V disponibles incluyen una cadena de herramientas de la colección de compiladores GNU (GCC) (con GDB, el depurador), una cadena de herramientas LLVM , el simulador OVPsim (y la biblioteca de modelos de procesadores rápidos RISC-V), el simulador Spike y un simulador en QEMU .
    Existe compatibilidad con el sistema operativo para el núcleo Linux , FreeBSD y NetBSD , pero las instrucciones en modo supervisor no están estandarizadas a partir del 10 de noviembre de 2016 , por lo que este soporte es provisional. El puerto preliminar de FreeBSD para la arquitectura RISC-V se actualizó en febrero de 2016 y se envió en FreeBSD 11.0. Ports de Debian y Fedora  están estabilizando. Existe un port de Das U-Boot .  UEFI Spec v2.7 ha definido el enlace RISC-V y un puerto de tianocore ha sido realizado por ingenieros de HPE y se espera que esté actualizado. Hay un puerto preliminar del microkernel seL4 . Un simulador existe para correr un RISC-V sistema de Linux en un navegador de web que utiliza Javascript.
    El simulador educativo WepSIM WepSIM Web con ejemplo RISC-V_im: https://acaldero.github.io/wepsim/ws_dist/wepsim-classic.html?mode=ep&example=16&simulator=assembly:registers¬ify=false Código fuente de WepSIM en GitHub: https://github.com/wepsim/wepsim implementa un subconjunto de instrucciones RISC-V de forma microprogramada (RV32I + M) y permite ejecutar ejemplos de subrutinas en ensamblador. El simulador WepSIM puede usarse desde un navegador Web, y facilita aprender diversos aspectos de cómo una CPU funciona (microprogramación, interrupciones, llamadas al sistema, etc.) usando ensamblador RISC-V.

    Adopters

    Comercial

    • SiFive, una compañía establecida específicamente para desarrollar hardware RISC-V, lanzó modelos de procesador en 2017. 33 34 Estos incluyen un sistema de 64 bits de cuatro núcleos RISC-V SoCa en un chip (SoC). .
    • SSyntacore, 36 un miembro fundador de la Fundación RISC-V y uno de los primeros proveedores comerciales de IP RISC-V, desarrolla y otorga licencias a la familia de RISC-V IP desde 2015. A partir de 2018 , la línea de productos incluye ocho 32 - y núcleos de 64 bits, incluido el núcleo SCR1 MCU de código abierto. 37 Los primeros SoC comerciales, basados ​​en Syntacore IP se demostraron en 2016.
    • Andes Technology Corporation, miembro fundador de la Fundación RISC-V 39 que se unió al consorcio en 2016, lanzó sus primeros dos núcleos RISC-V en 2017. Los núcleos, el N25 y el NX25, vienen con un completo diseño de ecosistemas y un Número de socios del RISC-V. Andes está impulsando activamente el desarrollo del ecosistema RISC-V y espera lanzar varios nuevos productos RISC-V en 2018.
    • Codasip y UltraSoC han desarrollado una propiedad intelectual totalmente compatible para los SOC incorporados RISC-V que combinan los núcleos RISC-V de Codasip y otras IP con la depuración, optimización y análisis de UltraSoC.
    • Imperas ha desarrollado una familia de modelos de procesadores rápidos para los diferentes subconjuntos de variantes IS32 RV32GC y RV64GC que forman parte de las distribuciones de simulador precisas de instrucciones OVPsim utilizadas para el desarrollo de software integrado.
    • GreenWaves Technologies anunció la disponibilidad de GAP8, un controlador de 32 bits 1 más 8 núcleos informáticos, SoC de 32 bits y placa de desarrollo en febrero de 2018. Su placa de desarrollo GAPuino GAP8 comenzó a distribuirse en mayo de 2018. 
    • Hex Five anunció la disponibilidad general de MultiZone Security: el primer entorno de ejecución confiable (TEE) de RISC-V que utiliza el estándar ISA de RISC-V y las extensiones de modo privilegiado. 
    • CloudBEAR es una empresa de procesadores IP que desarrolla sus propios núcleos RISC-V para una amplia gama de aplicaciones. 

    En desarrollo

    • El Instituto Indio de Tecnología de Madras está desarrollando seis diseños de CPU de código abierto RISC-V para seis usos distintos, desde una pequeña CPU de 32 bits para Internet de las cosas (IoT) hasta grandes CPU de 64 bits diseñadas para computadoras de almacén como granjas de servidores basadas en las tecnologías RapidIO y Hybrid Memory Cube.
    • Nvidia planea usar RISC-V para reemplazar su procesador Falcon en sus tarjetas gráficas GeForce .

    • ASTC desarrolló una CPU RISC-V para circuitos integrados incrustados.
    • Adapteva planea utilizar RISC-V, en un sucesor de su producto acelerador de muchos puntos 49
    • lowRISC es un proyecto sin fines de lucro para implementar un sistema de hardware de fuente completamente abierta en un chip (SoC) basado en el RISC-V ISA de 64 bits. 
    • El Laboratorio de Computación de la Universidad de Cambridge , en colaboración con el Proyecto FreeBSD , ha adaptado ese sistema operativo a RISC-V de 64 bits para utilizarlo como una plataforma de investigación de hardware y software. .
    • ETH Zúrich y la Universidad de Bolonia han desarrollado de manera cooperativa el procesador de código abierto RISC-V PULPino 51 como parte del proyecto Parallel Ultra-Low Power (PULP) para la computación IoT eficiente en energía.
    • Western Digital anunció un plan para integrar procesadores RISC-V en sus futuros productos. 53 .
    • Esperanto Technologies anunció que están desarrollando tres procesadores basados ​​en RISC-V: el núcleo de alto rendimiento ET-Maxion , el núcleo de eficiencia energética ET-Minion y el procesador de gráficos ET-Graphics .

    Diseño

    ISA Base y extensiones

    RISC-V tiene un diseño modular, que consiste en partes de base alternativas, con extensiones opcionales agregadas. La base ISA y sus extensiones se desarrollan en un esfuerzo colectivo entre la industria, la comunidad de investigación y las instituciones educativas. La base especifica las instrucciones (y su codificación), el flujo de control, los registros (y sus tamaños), la memoria y el direccionamiento, la manipulación lógica (es decir, el número entero) y los elementos auxiliares. Solo la base puede implementar una computadora de propósito general simplificada, con soporte completo de software, incluido un compilador de propósito general.
    Las extensiones estándar están especificadas para funcionar con todas las bases estándar y entre sí sin conflicto.
    Muchas computadoras RISC-V pueden implementar la extensión compacta para reducir el consumo de energía, el tamaño del código y el uso de la memoria. 4 También hay planes futuros para admitir hipervisores y virtualización. 19 Junto con una extensión de conjunto de instrucciones de supervisor, S, un RVGC define todas las instrucciones necesarias para admitir de manera conveniente un sistema operativo de estilo Unix , interfaz de sistema operativo portátil ( POSIX ).
    { data-vivaldi-spatnav-clickable="1" Nombre
    ! scope="col" Descripción
    ! scope="col" Versión
    ! scope="col" Estadomás bajo-alfa 1
    -
    ! colspan="4" Base
    -
    ! scope="row" RV32I
    Instrucción de Entero de la base Puso, 32-bits
    2.0
    -
    ! scope="row" RV32E
    Conjunto de instrucciones de base entera(embedded), 32-bits, 16 registros
    1.9
    -
    ! scope="row" RV64I
    Conjunto de instrucciones de base entera, 64-bits
    2.0
    -
    ! scope="row" RV128I
    Conjunto de instrucciones de base entera, 128-bits
    1.7
    -
    ! colspan="4" Extensión
    -
    ! scope="row" M
    Extensión estándar para Multiplicación de Entero y División
    2.0
    -
    ! scope="row" Un
    Extensión estándar para Instrucciones Atómicas
    2.0
    -
    ! scope="row" F
    Extensión estándar para punto flotante de precisión simple
    2.0
    -
    ! scope="row" D
    Extensión estándar para punto flotante de precisión doble
    2.0
    -
    ! scope="row" G
    Abreviatura para la base y extensiones anteriores
    -
    ! scope="row" Q
    Extensión estándar para punto flotante de precisión cuádruple
    2.0
    -
    ! scope="row" L
    Extensión estándar para punto flotante decimal
    0.0
    -
    ! scope="row" C
    Extensión estándar para instrucciones comprimidas
    2.0
    -
    ! scope="row" B
    Extensión estándar para manipulación de bits
    0.36
    -
    ! scope="row" J
    Extensión estándar para lenguajes traducidos dinámicamente
    0.0
    -
    ! scope="row" T
    Extensión estándar para Memoria Transaccional
    0.0
    -
    ! scope="row" P
    Extensión estándar para Empaquetado-SIMD Instrucciones
    0.1
    -
    ! scope="row" V
    Extensión estándar para Operaciones de Vector
    0.2
    -
    ! scope="row" N
    Extensión estándar para interrupciones de nivel de usuario
    1.1
    Para dominar las combinaciones de funcionalidad que pueden implementarse, se define una nomenclatura para especificarlas. 4 La base del conjunto de instrucciones se especifica primero, la codificación para RISC-V, el ancho de bit de registro y la variante; por ejemplo, RV64I o RV32E. Luego sigue las letras que especifican extensiones implementadas en orden canónico (como arriba). La base, los enteros extendidos y los cálculos de punto flotante, y las primitivas de sincronización para la computación multinúcleo, la base y las extensiones MAFD, se consideran necesarias para el cálculo de propósito general, y por lo tanto tienen la taquigrafía, G.
    Una pequeña computadora de 32 bits para un sistema integrado podría ser RV32EC. Una computadora grande de 64 bits podría ser RV64GC; es decir, taquigrafía para RV64IMAFDC.
    Se ha propuesto un esquema de denominación con Zxxx para extensiones estándar y Yxxx para extensiones no estándar (específicas del proveedor). Por ejemplo, la extensión Ztso para el pedido total de tiendas, un modelo alternativo de consistencia de memoria para el ordenamiento de memoria débil, se encuentra en discusión.

    Conjuntos de registro

    RISC-V tiene 32 (o 16 en la variante incorporada) registros enteros y, cuando se implementa la extensión de punto flotante , 32 registros de punto flotante. A excepción de las instrucciones de acceso a la memoria, las instrucciones solo se refieren a los registros.
    El primer registro de enteros es un registro de cero, y el resto son registros de propósito general. Una escritura para el registro cero no tiene ningún efecto, y una lectura siempre proporciona 0. Usar el registro cero como un marcador de posición hace que el conjunto de instrucciones sea más simple. Por ejemplo, se convierte en .
    Existen registros de control y estado, pero los programas en modo usuario pueden acceder solo a aquellos utilizados para la medición del rendimiento y la gestión de punto flotante.
    No existen instrucciones para guardar y restaurar múltiples registros. Se pensaba que eran innecesarios, demasiado complejos y quizás demasiado lentos.

    Acceso a la memoria


    Al igual que muchos diseños RISC, RISC-V es una arquitectura de carga y almacenamiento : las instrucciones se dirigen solo a los registros, con las instrucciones de carga y almacenamiento que se transmiten hacia y desde la memoria.
    La memoria consta de y se trata como bytes de 8 bits, con las palabras en orden little-endian. Se puede acceder a las palabras, hasta el tamaño de registro, con las instrucciones de carga y almacenamiento.
    Las direcciones de memoria a las que se accede no necesitan estar alineadas a su ancho de palabra, pero los accesos a las direcciones alineadas siempre serán los más rápidos. Como, por ejemplo, las CPU simples pueden implementar accesos no alineados con una emulación de software lenta basada en una interrupción de falla de alineación.
    RISC-V administra los sistemas de memoria que se comparten entre CPU o subprocesos al garantizar que un subproceso de ejecución siempre vea sus operaciones de memoria en el orden programado. Pero entre los subprocesos y los dispositivos de E / S, RISC-V se simplifica: no garantiza el orden de las operaciones de memoria, excepto por instrucciones específicas, como la .
    Una la instrucción garantiza que los resultados de las operaciones predecesoras son visibles para las operaciones sucesivas de otros subprocesos o dispositivos de E / S. puede garantizar el orden de las combinaciones de memoria y operaciones de E / S asignadas en memoria. Por ejemplo, puede separar las operaciones de lectura y escritura de la memoria, sin afectar las operaciones de E / S. O, si un sistema puede operar dispositivos de E / S en paralelo con la memoria, no los obliga a esperarse el uno al otro. Una CPU con un hilo puede decodificar la como .
    Al igual que muchos conjuntos de instrucciones RISC (y algunos conjuntos de instrucciones de computadora de conjuntos de instrucciones complejas (CISC), como las familias x86 y IBM System / 360 ), RISC-V carece de modos de dirección que escriben en los registros. Por ejemplo, no se incrementa automáticamente.
    RISC-V es little-endian para parecerse a otras computadoras familiares exitosas, por ejemplo, x86. Esto también reduce la complejidad de la CPU y los costos ligeramente porque lee todos los tamaños de palabras en el mismo orden. Por ejemplo, el conjunto de instrucciones RISC-V se decodifica comenzando en el byte con la dirección más baja de la instrucción. La especificación deja abierta la posibilidad de sistemas big-endian o bi-endian no estándar.
    Algunas CPU RISC (como MIPS , PowerPC , DLX y RISC-I de Berkeley) colocan 16 bits de desplazamiento en las cargas y almacenes. Establecen los 16 bits superiores mediante una instrucción de palabra superior de carga. Esto permite que los valores de media palabra superior se configuren fácilmente, sin cambiar los bits. Sin embargo, la mayoría del uso de la instrucción de media palabra superior hace constantes de 32 bits, como direcciones. RISC-V utiliza una combinación similar a SPARC de compensaciones de 12 bits e instrucciones superiores de configuración de 20 bits. El desplazamiento más pequeño de 12 bits ayuda a las instrucciones compactas, de carga y almacenamiento de 32 bits a seleccionar dos de los 32 registros, pero aún tienen suficientes bits para admitir la codificación de instrucciones de longitud variable de RISC-V.

    Inmediatos

    RISC-V maneja constantes de 32 bits y direcciones con instrucciones que establecen los 20 bits superiores de un registro de 32 bits. Carga superior inmediata carga 20 bits en los bits 31 a 12. Otra instrucción, genera los mismos 20 bits de dirección superior agregando un desplazamiento al contador del programa y almacenando el resultado en un registro base. Esto permite que el código independiente de la posición tenga direcciones de 32 bits en relación con el contador del programa. El registro base se puede utilizar como está con las compensaciones de 12 bits de las cargas y las tiendas. Si es necesario, Puede establecer los 12 bits más bajos de un registro. En ISA de 64 bits, y sign-extender el resultado a 64 bits.
    Algunas CPU rápidas pueden interpretar combinaciones de instrucciones como instrucciones fusionadas simples. o Pueden ser buenos candidatos para fusionarse con cargas o almacenes.

    Subrutinas llamadas, saltos y ramas.

    Llamada de subrutina de RISC-V (saltar y vincular) coloca su dirección de retorno en un registro. Esto es más rápido en muchos diseños de computadoras, porque guarda un acceso a la memoria en comparación con los sistemas que empujan una dirección de retorno directamente en una pila en la memoria. tiene un offset de 20 bits firmado (complemento de 2). El desplazamiento se multiplica por 2 y luego se agrega a la PC para generar una dirección relativa a una instrucción de 32 bits. Si el resultado no está en una dirección de 32 bits (es decir, divisible de manera uniforme por 4), la CPU puede forzar una excepción.
    Las CPU RISC-V saltan a direcciones calculadas utilizando un salto y un registro de enlace , instrucción. es similar a , pero obtiene su dirección de destino agregando un desplazamiento de 12 bits a un registro base. (En contraste, agrega una mayor compensación de 20 bits a la PC. )
    El formato de bits es como las cargas y almacenes relativos al registro. Como ellos, se puede usar con las instrucciones que establecen los 20 bits superiores de un registro base para hacer ramas de 32 bits, ya sea a una dirección absoluta (usando ) o una PC-relativa (utilizando para el código independiente de la posición ). (El uso de una dirección de base cero constante permite realizar llamadas de una sola instrucción a una dirección pequeña (la compensación), positiva o negativa fija. )
    RISC-V recicla y para obtener saltos incondicionales de 20 bits relativos a PC y saltos incondicionales de 12 bits basados en registros. Los saltos solo hacen que el enlace registre 0 para que no se guarde ninguna dirección de retorno.
    RISC-V también recicla para regresar de una subrutina: para hacer esto, El registro base se establece como el registro de vinculación guardado por o . El desplazamiento es cero y el registro de vinculación es cero, de modo que no hay desplazamiento y no se guarda ninguna dirección de retorno.
    Al igual que muchos diseños RISC, en una llamada de subrutina, un compilador RISC-V debe usar instrucciones individuales para guardar registros en la pila al inicio y luego restaurarlos desde la pila al salir. RISC-V no tiene guardar varias instrucciones de registro múltiple o restaurar. Se pensó que esto hacía que la CPU fuera demasiado compleja y posiblemente lenta. Esto puede tomar más espacio de código. Los diseñadores planearon reducir el tamaño del código con las rutinas de la biblioteca para guardar y restaurar registros.
    RISC-V no tiene registro de código de condición ni bit de acarreo. Los diseñadores creían que los códigos de condición hacen que las CPU rápidas se vuelvan más complejas al forzar las interacciones entre instrucciones en diferentes etapas de ejecución. Esta elección hace que la aritmética de precisión múltiple sea más compleja. Además, algunas tareas numéricas necesitan más energía.
    En cambio, RISC-V tiene ramas cortas que realizan comparaciones: igual, no igual, menor que, sin signo menor que, mayor que o igual y sin signo mayor o igual que. Se implementan diez operaciones de comparación de ramas con solo seis instrucciones, invirtiendo el orden de los operandos en el ensamblador. Por ejemplo, bifurcar si es mayor de lo que puede hacerse con menor que con un orden inverso de operandos.
    Las ramas de comparación tienen un rango firmado de doce bits y saltan en relación con la PC.
    ISA RISC-V requiere predicciones de rama por defecto para las CPU: debería predecirse tomaron las ramas condicionales hacia atrás. Las ramas condicionales hacia adelante predicen no tomadas. Las predicciones son fáciles de decodificar en una CPU segmentada: las direcciones de las sucursales son números firmados que se agregan a la PC. Las ramas hacia atrás tienen direcciones de complemento a dos negativas y, por lo tanto, tienen una en el bit más significativo de la dirección. Las ramas adelantadas tienen un cero. El bit más significativo se encuentra en una ubicación fija en el código de operación para acelerar la tubería. Las CPU complejas pueden agregar predictores de rama para que funcionen bien incluso con datos o situaciones inusuales.
    El manual de ISA recomienda que el software se optimice para evitar paradas de sucursales mediante el uso de las predicciones de sucursales predeterminadas. Esto reutiliza el bit más significativo de la dirección relativa firmada como un bit de sugerencia para indicar si la rama condicional se tomará o no. Por lo tanto, no se necesitan otros bits de sugerencia en los códigos de operación de las sucursales RISC-V. Esto hace que haya más bits disponibles en los códigos de operación de rama. Las CPU simples y económicas pueden simplemente seguir las predicciones predeterminadas y seguir funcionando bien con la optimización de los compiladores. Los compiladores aún pueden realizar la optimización de la ruta estadística, si lo desea.
    Para evitar la carga innecesaria de la electrónica de predicción de bifurcación (y, por lo tanto, paradas de tuberías innecesarias), los códigos de bifurcación de comparación nunca deben utilizarse para saltos incondicionales.
    RISC-V no admite la predicación (la ejecución condicional de las instrucciones) ya que sus diseñadores afirman que las CPU sin predicación son más fáciles de diseñar, y es menos probable que los compiladores de optimización usen la predicación donde no deberían usarse. Los diseñadores afirman que los diseños de CPU fuera de orden muy rápidos hacen predicción de todos modos, al hacer la rama de comparación y el código condicional en paralelo, y luego descartar los efectos de la ruta no utilizada. También afirman que incluso en CPU más simples, la predicción es menos valiosa que la predicción de ramificación , lo que puede evitar la mayoría de los bloqueos asociados con las ramificaciones condicionales. El código sin predicación es mayor, con más ramas, pero también afirman que un conjunto de instrucciones comprimidas (como el conjunto C de RISC-V) resuelve ese problema en la mayoría de los casos.
    Muchos diseños RISC han incluido una ranura de retardo de ramificación , una posición después de una instrucción de bifurcación que se puede completar con una instrucción que se ejecuta independientemente de que se tome la bifurcación. Esta función puede mejorar el rendimiento de las CPU segmentadas al absorber parte del tiempo perdido si una CPU predice incorrectamente el funcionamiento de una rama condicional y la tubería de la CPU se detiene. RISC-V omite una ranura de retardo de bifurcación porque complica las CPU multiciclo, las CPU superescalar y las tuberías largas. Los predictores de ramificación dinámica han tenido el éxito suficiente para reducir la necesidad de ramificaciones retrasadas.

    Conjuntos aritméticos y lógicos.

    RISC-V segrega las matemáticas en un conjunto mínimo de instrucciones de enteros (conjunto I ) con suma, resta, cambio, lógica de bits y ramas de comparación. Estos pueden simular la mayoría de los otros conjuntos de instrucciones RISC-V con software. (Las instrucciones atómicas son una notable excepción. ) RISC-V actualmente carece del conteo de cero y las operaciones de campo de bits normalmente utilizadas para acelerar el punto flotante del software en un procesador de entero puro.
    Las instrucciones de multiplicación de enteros (conjunto M ) incluyen multiplicación y división con signo y sin signo. Se incluyen los números enteros de precisión doble y se divide, como se multiplica y divide que produce la palabra alta del resultado. El documento ISA recomienda que los implementadores de CPU y compiladores fusionen una secuencia estandarizada de alta y baja multiplicaciones y dividan las instrucciones en una operación si es posible.
    Las instrucciones de punto flotante (conjunto F ) incluyen aritmética de precisión simple y también ramas de comparación similares a la aritmética de enteros. Requiere un conjunto adicional de 32 registros de punto flotante. Estos son separados de los registros enteros. Las instrucciones de punto flotante de doble precisión (conjunto D ) generalmente asumen que los registros de punto flotante son de 64 bits (es decir, ancho doble), y el subconjunto F se coordina con el conjunto D. También se define una ISA ( Q ) de coma flotante de 128 bits de precisión cuádruple. Las computadoras RISC-V sin punto flotante pueden usar una biblioteca de software de punto flotante.
    RISC-V no causa excepciones en los errores aritméticos, incluyendo desbordamiento , subdesbordamiento, subnormal y división por cero. En su lugar, tanto la aritmética de enteros como la de punto flotante producen valores predeterminados razonables y establecen bits de estado. La división por cero puede ser descubierta por una rama después de la división. Los bits de estado se pueden probar mediante un sistema operativo o una interrupción periódica.

    Operaciones de memoria atómica


    RISC-V admite computadoras que comparten memoria entre varias CPU y subprocesos. El modelo de consistencia de memoria estándar de RISC-V es la consistencia de la versión. Es decir, las cargas y los almacenes generalmente se pueden reordenar, pero algunas cargas pueden designarse como operaciones de adquisición que deben preceder a los accesos de memoria posteriores, y algunas tiendas se pueden designar como operaciones de liberación que deben seguir a los accesos de memoria anteriores.
    El conjunto de instrucciones de la base incluye un soporte mínimo en forma de una instrucciones para hacer cumplir la ordenación de la memoria. Aunque esto es suficiente ( proporciona adquirir y proporciona lanzamiento ), las operaciones combinadas pueden ser más eficientes.
    La extensión de operación de memoria atómica admite dos tipos de operaciones de memoria atómica para la consistencia de la versión. En primer lugar, proporciona reservado de propósito general y almacenar condicional instrucciones. realiza una carga e intenta reservar esa dirección para su hilo. Una tienda posterior condicional La dirección reservada se realizará solo si la reserva no es interrumpida por una tienda intermedia de otra fuente. Si la tienda tiene éxito, se coloca un cero en un registro. Si falla, un valor distinto de cero indica que el software debe volver a intentar la operación. En cualquier caso, se libera la reserva.
    El segundo grupo de instrucciones atómicas realiza secuencias de lectura-modificación-escritura : una carga (que opcionalmente es una carga-adquisición) en un registro de destino, luego una operación entre el valor cargado y un registro de origen, luego una reserva del resultado (que puede ser opcionalmente un lanzamiento de tienda). Hacer las barreras de memoria opcionales permite combinar las operaciones. Las operaciones opcionales están habilitadas por los bits de adquisición y liberación que están presentes en cada instrucción atómica. RISC-V define nueve operaciones posibles: intercambio (use el valor del registro de origen directamente); añadir; bitwise y, o, y exclusivo -o; y mínimo y máximo firmado y sin firmar.
    Un diseño de sistema puede optimizar estas operaciones combinadas más que y . Por ejemplo, si el registro de destino para un swap es el cero constante, la carga puede omitirse. Si el valor almacenado no se modifica desde la carga, la tienda puede omitirse.
    El IBM System / 370 y sus sucesores, incluidos z / Architecture , y x86 , implementan un sistema de comparación e intercambio ( ) De instrucciones, que pone a prueba y de forma condicionada actualiza una ubicación en la memoria: si la ubicación contiene un valor esperado de edad, lo reemplaza con un nuevo valor dado; luego devuelve una indicación de si realizó el cambio. Sin embargo, una instrucción de tipo de carga simple generalmente se realiza antes del para recuperar el valor antiguo. El problema clásico es que si un hilo lee (carga) un valor A , calcula un nuevo valor C y luego usa ( ) para reemplazar A por C , no tiene forma de saber si la actividad concurrente en otro hilo reemplazó a A por algún otro valor B y luego restauró la A en el medio. En algunos algoritmos (por ejemplo, aquellos en los que los valores en la memoria son punteros a bloques asignados dinámicamente), este problema de ABA puede llevar a resultados incorrectos. La solución más común emplea un doble ancho. instrucciones para actualizar tanto el puntero como un contador adyacente; desafortunadamente, tal instrucción requiere un formato de instrucción especial para especificar múltiples registros, realiza varias lecturas y escrituras, y puede tener una operación de bus compleja.
    El / La alternativa es más eficiente. Por lo general, solo requiere una carga de memoria, y es deseable minimizar las operaciones de memoria lenta. También es exacto: controla todos los accesos a la celda de memoria, en lugar de solo asegurar un patrón de bits. Sin embargo, a diferencia de , puede permitir Livelock , en el que dos o más subprocesos repetidamente hacen que las instrucciones del otro falle. RISC-V garantiza el progreso hacia adelante (no Livelock) si el código sigue las reglas sobre el tiempo y la secuencia de instrucciones: 1) Debe usar solo el subconjunto I. 2) Para evitar las fallas de caché repetitivas, el código (incluido el ciclo de reintento) no debe ocupar más de 16 instrucciones consecutivas. 3) No debe incluir instrucciones de sistema o cerca, o ramas tomadas hacia atrás entre los y . 4) La rama hacia atrás al bucle de reintento debe ser a la secuencia original.
    La especificación proporciona ejemplos de cómo usar este subconjunto para bloquear una estructura de datos.

    Subconjunto comprimido

    El estándar RISC-V ISA especifica que todas las instrucciones son de 32 bits. Esto hace que para una implementación particularmente simple, pero al igual que otros procesadores RISC con tal codificación de instrucciones, resulta en un tamaño de código mayor que en otros conjuntos de instrucciones. Para compensar, instrucciones de 32 bits del RISC-V son en realidad 30 bits;
     
    Comentarios

    Todavía no hay comentarios




    ultima vez visto
    la mayoría de las visitas