PREVIEW
Control Unit

Control Unit

Advanced signal_cellular_alt Advanced schedule 40 min

Unidad de control

Descripción general

  • Propósito: La unidad de control es el componente de orquestación de la arquitectura de computadora de 8 bits de DigiSim. Genera las señales de control necesarias para coordinar el contador de programa, la memoria (RAM), el registro de instrucción, la ALU, el registro de banderas y otros componentes para ejecutar un conjunto completo de instrucciones.
  • Símbolo: La unidad de control se representa mediante un bloque rectangular con múltiples pines de entrada y salida para interactuar con los diversos componentes de la CPU.
  • Rol en DigiSim.io: La unidad de control permite la creación de una computadora completa y funcional de 8 bits al secuenciar y controlar adecuadamente todos los componentes del sistema a través de un ciclo de búsqueda-decodificación-ejecución-almacenamiento.

Control Unit component

Descripción funcional

Operación de máquina de estados

La unidad de control opera como una máquina de estados finitos de 4 estados que cicla a través de:

  1. FETCH (Búsqueda): Obtener la siguiente instrucción de memoria
  2. DECODE (Decodificación): Decodificar la instrucción e incrementar el contador de programa
  3. EXECUTE (Ejecución): Realizar la operación especificada por la instrucción
  4. STORE (Almacenamiento): Almacenar resultados y actualizar banderas según sea necesario

Entradas y salidas

Entradas (7 pines):

Pin Nombre del pin Tipo Descripción
0 CLK Entrada Reloj del sistema para operación síncrona
1 RST Entrada Señal de reinicio para inicializar la unidad de control
2 OP0 Entrada Bit 0 del código de operación del registro de instrucción
3 OP1 Entrada Bit 1 del código de operación del registro de instrucción
4 OP2 Entrada Bit 2 del código de operación del registro de instrucción
5 OP3 Entrada Bit 3 del código de operación del registro de instrucción
6 Z_FLAG Entrada Bandera de cero del registro de banderas para saltos condicionales

Salidas (18 pines):

Pin Nombre del pin Tipo Descripción
0 PC_INC Salida Incrementar contador de programa
1 PC_LD Salida Cargar contador de programa (para saltos)
2 PC_OE Salida Habilitación de salida del contador de programa (al bus de direcciones)
3 MEM_RD Salida Habilitación de lectura de memoria
4 MEM_WR Salida Habilitación de escritura de memoria
5 RAM_OE Salida Habilitación de salida de RAM (al bus de datos)
6 IR_LD Salida Carga del registro de instrucción
7 IR_ADDR_OE Salida Habilitación de salida de dirección del IR (al bus de direcciones)
8 ALU_OP0 Salida Bit 0 del código de operación de la ALU
9 ALU_OP1 Salida Bit 1 del código de operación de la ALU
10 ALU_OP2 Salida Bit 2 del código de operación de la ALU
11 ALU_OE Salida Habilitación de salida de la ALU (al bus de datos)
12 ACC_LD Salida Carga del acumulador
13 ACC_OE Salida Habilitación de salida del acumulador (al bus de datos)
14 FLG_LD Salida Carga del registro de banderas
15 HALT Salida Indicador de detención del sistema
16 STATE0 Salida Bit de estado 0 (LSB de la codificación de estado de 2 bits)
17 STATE1 Salida Bit de estado 1 (MSB de la codificación de estado de 2 bits)

Codificación de estados (STATE1:STATE0):

  • 00 → FETCH (Búsqueda)
  • 01 → DECODE (Decodificación)
  • 10 → EXECUTE (Ejecución)
  • 11 → STORE (Almacenamiento)

Arquitectura del conjunto de instrucciones

La unidad de control soporta un conjunto de 16 instrucciones con códigos de operación de 4 bits:

Opcode Hex Mnemónico Descripción Operación
0000 0x0 NOP Sin operación PC ← PC + 1
0001 0x1 LDA addr Cargar acumulador ACC ← M[addr]
0010 0x2 STA addr Almacenar acumulador M[addr] ← ACC
0011 0x3 ADD addr Sumar al acumulador ACC ← ACC + M[addr]
0100 0x4 SUB addr Restar del acumulador ACC ← ACC - M[addr]
0101 0x5 AND addr AND lógico ACC ← ACC & M[addr]
0110 0x6 OR addr OR lógico ACC ← ACC | M[addr]
0111 0x7 XOR addr XOR lógico ACC ← ACC ^ M[addr]
1000 0x8 NOT NOT lógico ACC ← ~ACC
1001 0x9 SHL Desplazamiento a la izquierda ACC ← ACC << 1
1010 0xA SHR Desplazamiento a la derecha ACC ← ACC >> 1
1011 0xB JMP addr Salto incondicional PC ← addr
1100 0xC JZ addr Salto si cero if (Z=1) PC ← addr
1101 0xD JNZ addr Salto si no cero if (Z=0) PC ← addr
1110 0xE LDI Carga inmediata Reservado para futuro
1111 0xF HLT Detener Detener ejecución

Formato de instrucción

Posición de bit 7 6 5 4 3 2 1 0
Campo OPCODE (4 bits) OPERANDO (4 bits)
Descripción Operación a realizar Dirección de memoria/Valor

Arquitectura de microcódigo

Generación de señales de control

La unidad de control usa un enfoque de ROM de microcódigo donde cada instrucción se descompone en micro-operaciones a través de los cuatro estados. Cada combinación de código de operación y estado produce un conjunto específico de señales de control.

Ejemplo: Instrucción LDA (Cargar acumulador)

Estado FETCH:

  • PC_OE = 1 (PC controla el bus de direcciones)
  • MEM_RD = 1 (Leer instrucción de memoria)
  • IR_LD = 1 (Cargar instrucción en IR)

Estado DECODE:

  • PC_INC = 1 (Incrementar PC a la siguiente instrucción)

Estado EXECUTE:

  • IR_ADDR_OE = 1 (La dirección del IR controla el bus de direcciones)
  • MEM_RD = 1 (Leer datos de la dirección de memoria)

Estado STORE:

  • RAM_OE = 1 (RAM controla el bus de datos)
  • ACC_LD = 1 (Cargar datos en el acumulador)
  • FLG_LD = 1 (Actualizar banderas)

Control de bus y gestión de tres estados

La unidad de control gestiona cuidadosamente la contención de bus asegurando que solo un componente controle cada bus en cualquier momento:

  • Bus de direcciones: Controlado por PC_OE o IR_ADDR_OE
  • Bus de datos: Controlado por RAM_OE, ALU_OE o ACC_OE

Integración con otros componentes

Compatibilidad de componentes

La unidad de control está diseñada para funcionar sin problemas con los componentes existentes de DigiSim:

  • ALU de 8 bits: Recibe códigos de operación (ALU_OP0-2) y proporciona resultados con banderas
  • Contador de programa: Controlado mediante señales PC_INC, PC_LD y PC_OE
  • RAM (256×8): Gestionada mediante señales MEM_RD, MEM_WR y RAM_OE
  • Registro de instrucción: Cargado mediante IR_LD y proporciona separación de código de operación/dirección
  • Registro de banderas: Actualizado mediante FLG_LD y leído para saltos condicionales (Z_FLAG)
  • Acumulador: Controlado mediante señales ACC_LD y ACC_OE

Temporización de señales

La unidad de control asegura tiempos de establecimiento y mantenimiento adecuados para todos los componentes:

  1. Establecimiento de dirección: Las señales de dirección son estables antes de las operaciones de memoria
  2. Datos válidos: Los datos son válidos cuando las señales de carga están activas
  3. Sincronización de reloj: Todos los cambios de estado ocurren en flancos de subida del reloj
  4. Comportamiento de reinicio: Reinicio asíncrono inmediato a un estado conocido

Ejemplos de uso

Programa simple: Sumar dos números

; Sumar dos números almacenados en memoria
0x0: LDA 0x8    ; Cargar primer número de la dirección 0x8
0x1: ADD 0x9    ; Sumar segundo número de la dirección 0x9
0x2: STA 0xA    ; Almacenar resultado en la dirección 0xA
0x3: HLT        ; Detener ejecución
...
0x8: 0x05       ; Primer número (5)
0x9: 0x03       ; Segundo número (3)
0xA: 0x00       ; Ubicación del resultado

Ejemplo de bucle: Contar de 1 a 10

; Contar de 0 a 10
0x0: LDA 0x8    ; Cargar contador
0x1: ADD 0x9    ; Sumar 1
0x2: STA 0x8    ; Almacenar contador
0x3: SUB 0xA    ; Restar 10
0x4: JNZ 0x0    ; Saltar atrás si no es cero
0x5: HLT        ; Detener cuando termine
...
0x8: 0x00       ; Contador
0x9: 0x01       ; Constante 1
0xA: 0x0A       ; Constante 10

Notas técnicas

Requisitos de reloj

  • Frecuencia mínima: 1 Hz para observación educativa
  • Frecuencia máxima: Limitada por los retardos de propagación de los componentes
  • Ciclo de trabajo: 50% recomendado para márgenes de temporización óptimos

Comportamiento de reinicio

  • Reinicio asíncrono: Establece inmediatamente el estado a FETCH
  • Borrado de señales: Todas las señales de control se reinician al estado inactivo
  • Recuperación de detención: Requiere reinicio para reanudar la ejecución

Rendimiento

  • Todas las instrucciones: 4 ciclos de reloj (búsqueda-decodificación-ejecución-almacenamiento)
  • Instrucciones por segundo: Frecuencia de reloj ÷ 4
  • Ancho de banda de memoria: Una lectura o escritura por ciclo de instrucción

school Ruta de Aprendizaje

arrow_forward Siguientes Pasos

help_outline Preguntas Frecuentes

¿Qué hace la Unidad de Control?

La UC decodifica instrucciones y genera señales de control que coordinan todos los componentes de la CPU: habilitando registros, seleccionando operaciones de ALU, controlando el acceso a memoria.

¿Qué es el microcódigo?

El microcódigo es código de control de bajo nivel que implementa cada instrucción máquina como una secuencia de micro-operaciones, controlando las señales internas de la CPU.

play_arrow Ejecutar Circuito en Vivo

Ver Otros Componentes