General, Informática → Núcleo OpenSPARC T1
El núcleo o “core” OpenSPARC T1 forma parte del procesador OpenSPARC T1.

Diagrama de bloques de alto nivel del núcleo
El núcleo OpenSPARC contiene el hardware necesario para soportar cuatro hilos de ejecución. Este soporte consiste en un conjunto de todos los registros (con ventanas de 8 registros) por hilo, con la mayoría de los identificadores de espacio de direcciones (ASI), registros de estado auxiliares (ASR) y registros privilegiados replicados por hilo. Los cuatro hilos comparten las cachés de instrucción y de datos y los TLBs. Cada caché de instrucción es de 16 Kbytes con un tamaño de 32 bits por línea. Los TLB incluyen una funcionalidad de automapeo que permite a los múltiples hilos actualizar la TLB sin bloquear.
Cada núcleo SPARC tiene solo un tipo de pipeline de seis fases o etapas.
También dispone de las siguientes unidades:
1. La unidad Fech-Instruction (lectura de instrucción) (IFU), que incluye un sistema de cache de instrucción (Se encarga de gestionar los pc´s de los procesos, la cache L1).
2. La unidad de ejecución (EXU) incluye las fases de ejecución del pipeline.
3. La unidad Load/store (LSU) incluye etapas de memoria, write-back, y un sistema de cache de datos.
4. La unidad lógica Trap (TLU).
5. La unidad de procesamiento de flujo (o “stream”) (SPU) es usada para funciones de aritmética modular para criptografía.
6. La unidad de gestión de memoria (MMU).
7. La unidad frontend Floating- point (FFU).
Aquí explicaremos cada una de ellas.
1. IFU – Unidad de búsqueda de instrucción (Instruction Fetch Unit)
La política de selección de hilos (o “threads”) es como sigue: una elección entre los hilos disponibles cada ciclo siguiendo la prioridad del hilo menos reciente ejecutado. Los hilos se vuelven no disponibles debido a las largas latencias de operaciones como cargas, multiplicaciones, divisiones, ramas, fallos de caché, excepciones y conflictos. Las cargas son estimadas como fallos de caché y los hilos pasan a tener baja prioridad.
La Unbidad de búsqueda de instrucción tiene una matriz de la caché de instrucción tiene 16Kb, 4 vías, líneas de 32 bytes de tamaño con un solo tag de instrucción portado. También tiene un vector dual (1R/ 1W) de bit de validez para mantener la línea de validez de la caché con su estado (válido / inválido). La invalidación accede a este vector y no al tag de instrucción. Un algoritmo pseudo-aleatorio es el encargado de elegir las instrucciones inválidas para reemplazarlas.
Hay una TLB asociativa total de instrucción con 64 entradas. El buffer soporta los siguientes tamaños de página: 8K, 64K, 4M y 256M La TLB usa un algoritmo de tipo pseudo LRU (primero el menos recientemente usado) para los reemplazos.
Dos instrucciones son buscadas en cada ciclo, aunque sólo una es usada, lo que reduce la actividad en la caché. Sólo puede haber un fallo por hilo y 4 por núcleo. Fallos duplicados no cusan búsquedas en la caché de nivel 2.
El fichero de registros de enteros (IRF – “Integer Register File”) del núcleo, tiene 5K con 3 puertos de lectura, 2 de escritura y 1 de transporte. Hay 640 registros de 64 bits con código de corrección de errores (ECC). Sólo 32 registros de la ventana actual pueden ser vistos por el hilo. La ventana cambia en segundo plano mientras se hace la seleccion del hilo. El IRF proporciona un acceso de lectura / escritura por ciclo.
2. EXU – Unidad de Ejecución (Execution Unit)
Esta unidad tiene una unidad aritmética lógica (ALU) simple y un cambiador. La ALU es reutilizada para el cálculo de las direcciones de rama y virtuales. Hay un multiplicador de enteros por núcleo. El multiplicador de enteros es compartido por el EXU y el SPU basándose en el algoritmo de round-robin. Hay un divisor simple (sin resto) por núcleo. Un hilo usando MUL / DIV será desecha su operación (roll-back) y desactivado si otro hilo está ocupando las unidades de MUL / DIV.
3. LSU – Unidad de carga / almacén (Load / Store Unit)
La caché de datos tiene 8K de datos, 4 vías y un tamaño de linea de 16 bits. También se almacena la validación de los datos con un vector dual 1R/1W. Un algoritmo pseudoaleatorio es usado para el reemplazamiento de los datos. El TLB de datos opera como el TLB de instrucción.
La LSU tiene 8 búferes de entrada para almancén, uniendose en un array de 32 entradas. Sólo una carga es permitida por hilo. Cargas de líneas duplicadas no son enviadas a la caché de nivel 2.
La LSU tiene un interfaz lógico con el crossbar de la caché de la CPU (CCX). Este interfaz permite:
- priorizar las peticiones de operaciones en coma flotante, de streaming, salvados (stores) e interrupciones.
- pedir prioridad
- ensamblar paquetes provinientes de la caché del procesador (PCX)
La LSU mantiene los retornos de la PCX y el orden de las actualizaciones y las invalidaciones de la caché.
4. FFU – Unidad frontend de coma flotante (Floating-point Frontend Unit)
Esta unidad decodifica las instrucciones de coma flotante e incluye un fichero de registros de coma flotante (FRF). Algunas operaciones de coma flotante como “mover”, “valor absoluto” y “negativo” están implementadas aquí, mientras otras lo están en la FPU.
Cuando la FFU detecta una operación de coma flotante (Fpop) hace lo siguiente:
- El hilo se desactiva.
- La Fpop es decodificada y leído el FRF.
- Se empaqueta la operación y los operanados y se envía a la FPU a través del crossbar.
- La computación se termina cuando el resultado es retornado a través del crossbar.
- Se actualiza el FRF y se reinicia el hilo.
5. TLU – Unidad Lógica de Interrupcioes (Trap Logic Unit)
Soporta seis niveles de interrupciones. Las interrupciones causan el flush del pipeline y el thread cambia hasta que el contador de programa de interrupción está disponible. La TLU tambiénn tiene capacidad hasta 64 interrupciones pendientes por hilo.
6. SPU – Unidad de Procesamiento de Cadenas (Stream Processing Unit)
La SPU incluye una unidad aritmética modular (MAU) para criptografía (una por núcleo), y soporta criptografía asimétrica (RSA de clave pública) de clave de hasta 2048 bytes. Comparte un multiplicador de enteros para las operaciones artiméticas modulares. La MAU pues ser usada sólo por un hilo a la vez. La operación de la MAU es configurada por lo guardado en el registro de control, y el hilo retorna al procesamiento normal. La MAU inicia operacioes de lectura y guardado de cadenas en la caché de nivel 2 a través del crossbar, y computa operaciones en el multiplicador. La finalización de la MAU puede ser comprobada por votación o usando una interrupción.
