College Online
0%

Arquitetura de um Processador Simples

Modulo 2 · Aula 1 ~22 min de leitura Nivel: Intermediario

Video da aula estara disponivel em breve

Componentes do Datapath

O datapath e o caminho que os dados percorrem dentro do processador durante a execucao de instrucoes. Um processador simples de 32 bits (estilo MIPS ou RISC-V) contem os seguintes componentes fundamentais:

Diagrama — Datapath Simplificado (MIPS)
                    +4
                     |
  ┌──────┐     ┌────┴────┐
  │  PC  │────>│  Instr  │
  │      │     │  Memory │
  └──┬───┘     └────┬────┘
     │              │ instrucao (32 bits)
     │         ┌────┴────┐
     │         │  IR /   │
     │         │ Decoder │
     │         └──┬──┬───┘
     │            │  │
     │      rs ───┘  └─── rt/rd
     │         ┌─────────────┐
     │         │  Register   │
     │         │    File     │
     │         │  (32 regs)  │
     │         └──┬──────┬───┘
     │         Read1   Read2
     │            │      │
     │      ┌─────┴──────┴─────┐
     │      │    MUX (ALUSrc)  │  ← imediato ou registrador
     │      └────────┬─────────┘
     │          ┌────┴────┐
     │          │   ALU   │
     │          │ (+ - &  │
     │          │  | ^ <) │
     │          └──┬──┬───┘
     │          result│zero
     │             │
     │       ┌─────┴─────┐
     │       │   Data    │
     │       │  Memory   │
     │       └─────┬─────┘
     │             │
     │       ┌─────┴─────┐
     │       │MUX(MemToR)│ ← resultado da ALU ou da memoria
     │       └─────┬─────┘
     │             │
     └─────────────┘ Write Back ao Register File

Ciclo de Instrucao: Fetch-Decode-Execute

Toda instrucao passa pelo ciclo classico de três (ou mais) fases:

  1. Fetch (Busca): a instrucao e lida da memoria no endereco apontado pelo PC. O PC e incrementado para apontar para a proxima instrucao.
  2. Decode (Decodificacao): a instrucao e interpretada — o opcode identifica a operacao, os campos de registradores sao lidos, e os sinais de controle sao gerados.
  3. Execute (Execucao): a ALU realiza a operacao. Para instrucoes aritmeticas, o resultado e escrito no registrador de destino. Para LOAD/STORE, o endereco de memoria e calculado.
  4. Memory Access: para LOAD, o dado e lido da memoria; para STORE, o dado e escrito na memoria.
  5. Write Back: o resultado (da ALU ou da memoria) e escrito no register file.
Exemplo — Instrucao ADD em MIPS
  Instrucao: ADD $t0, $t1, $t2    (t0 = t1 + t2)
  Binario:   000000 01001 01010 01000 00000 100000
             opcode  rs    rt    rd   shamt  funct

  1. FETCH:   PC → Instr Memory → IR = 0x012A4020
              PC = PC + 4

  2. DECODE:  opcode = 000000 (tipo R)
              rs = $t1 (reg 9),  rt = $t2 (reg 10),  rd = $t0 (reg 8)
              Register File le: A = Reg[9], B = Reg[10]

  3. EXECUTE: ALU calcula A + B
              Resultado = Reg[9] + Reg[10]

  4. MEMORY:  (nao usado para instrucoes tipo R)

  5. WRITE BACK: Reg[8] = Resultado da ALU

Unidade de Controle

A unidade de controle gera os sinais que dirigem o datapath — selecionando entradas de multiplexadores, habilitando escritas em registradores, e definindo a operacao da ALU. Ha duas implementacoes classicas:

Controle Hardwired (Cabecado)

A logica de controle e implementada como um circuito combinacional fixo. O opcode e os campos da instrucao sao as entradas; os sinais de controle sao as saidas.

Tabela — Sinais de Controle por Tipo de Instrucao
  Instrucao  RegDst  ALUSrc  MemToReg  RegWrite  MemRead  MemWrite  Branch  ALUOp
  ─────────────────────────────────────────────────────────────────────────────────
  R-type      1       0       0         1         0        0         0       10
  LW          0       1       1         1         1        0         0       00
  SW          X       1       X         0         0        1         0       00
  BEQ         X       0       X         0         0        0         1       01

Controle Microprogramado

Os sinais de controle sao armazenados em uma memoria de controle (microcode ROM). Cada instrucao e executada como uma sequência de microinstrucoes.

i
RISC vs. CISC na pratica moderna Processadores x86 modernos (Intel, AMD) sao externamente CISC mas internamente RISC: instrucoes x86 complexas sao decodificadas em sequências de micro-operacoes (uops) simples que executam em um pipeline superescalar. A fronteira RISC/CISC e hoje mais uma questao de ISA (interface) do que de implementacao.

Single-Cycle vs. Multi-Cycle

Em um processador single-cycle, cada instrucao e executada em exatamente um ciclo de clock. O periodo do clock deve ser longo o suficiente para acomodar a instrucao mais lenta (tipicamente LOAD, que precisa de fetch + decode + ALU + memory + write back).

Em um processador multi-cycle, cada instrucao e dividida em varios ciclos mais curtos. Instrucoes simples (como ADD) usam menos ciclos que instrucoes complexas (como LOAD), melhorando o throughput medio.

Comparacao — Single vs. Multi-Cycle
  Single-Cycle:
  ┌──────────────────────────────────────┐
  │  FETCH │ DECODE │ EXECUTE │ MEM │ WB │  Instrucao 1
  └──────────────────────────────────────┘
  ┌──────────────────────────────────────┐
  │  FETCH │ DECODE │ EXECUTE │ MEM │ WB │  Instrucao 2
  └──────────────────────────────────────┘
  Periodo do clock = tempo da instrucao mais lenta

  Multi-Cycle:
  ┌──────┬──────┬──────┬──────┬──────┐
  │FETCH │DECODE│  EX  │ MEM  │  WB  │  LW (5 ciclos)
  └──────┴──────┴──────┴──────┴──────┘
  ┌──────┬──────┬──────┬──────┐
  │FETCH │DECODE│  EX  │  WB  │         ADD (4 ciclos)
  └──────┴──────┴──────┴──────┘
  Periodo do clock = tempo de 1 fase (mais curto)

  Pipeline (evolucao):
  ┌───┬───┬───┬───┬───┐
  │ F │ D │ E │ M │ W │  Instrucao 1
  └───┼───┼───┼───┼───┘
      │ F │ D │ E │ M │ W │  Instrucao 2 (comeca 1 ciclo depois)
      └───┼───┼───┼───┼───┘
          │ F │ D │ E │ M │ W │  Instrucao 3
          └───┴───┴───┴───┴───┘
  Throughput: ~1 instrucao por ciclo (ideal)

Formato de Instrucoes

Em uma ISA RISC tipica (MIPS), as instrucoes sao codificadas em 32 bits com formatos fixos:

Formatos MIPS
  Tipo R (aritmeticas):
  ┌────────┬─────┬─────┬─────┬───────┬────────┐
  │ opcode │  rs │  rt │  rd │ shamt │ funct  │
  │ 6 bits │5 b  │5 b  │5 b  │ 5 b   │ 6 bits │
  └────────┴─────┴─────┴─────┴───────┴────────┘
  Exemplo: ADD $t0, $t1, $t2

  Tipo I (imediato / load / store / branch):
  ┌────────┬─────┬─────┬──────────────────────┐
  │ opcode │  rs │  rt │     imediato         │
  │ 6 bits │5 b  │5 b  │     16 bits          │
  └────────┴─────┴─────┴──────────────────────┘
  Exemplo: ADDI $t0, $t1, 42
           LW   $t0, 8($sp)

  Tipo J (jump):
  ┌────────┬──────────────────────────────────┐
  │ opcode │         endereco                 │
  │ 6 bits │         26 bits                  │
  └────────┴──────────────────────────────────┘
  Exemplo: J 0x00400020

No harness.os

A arquitetura de um processador simples tem analogias diretas com a arquitetura do harness.os:

Exercicios

  1. Trace o caminho dos dados no datapath para a instrucao LW $t0, 12($sp). Liste cada componente ativado e os sinais de controle necessarios.
  2. Um processador single-cycle tem: Fetch=200ps, Decode=100ps, ALU=200ps, Memory=200ps, WriteBack=100ps. Qual e a frequência maxima de clock? Qual instrucao determina esse limite?
  3. O mesmo processador implementado como multi-cycle pode ter clock de quanto? Compare o tempo total para executar a sequência: ADD, ADD, LW, SW, BEQ.
  4. Projete a tabela de sinais de controle para as instrucoes AND, OR e SLT (Set Less Than) em um processador MIPS simplificado.
  5. Explique por que processadores CISC modernos decodificam instrucoes em micro-ops. Qual a vantagem dessa abordagem hibrida?

Resumo

Verifique seu entendimento

Em um processador single-cycle, o que determina o periodo minimo do clock?

  • A instrucao mais rapida, para maximizar o throughput
  • A instrucao mais lenta, pois todas devem completar em um unico ciclo
  • A media do tempo de todas as instrucoes
  • O tempo de acesso a memoria de instrucoes apenas