Descreva detalhadamente as etapas da execução de uma instrução do tipo LOAD (LW) no MIPS multiciclo, indicando os estados e as transições.
Passo 1
O enunciado pede que eu descreva, passo a passo, as etapas (estados) e as transições que ocorrem quando uma instrução do tipo LOAD (especificamente
em MIPS) é executada no datapath multiciclo.
Informações relevantes fornecidas implicitamente (e que vou usar na explicação):
Informações relevantes fornecidas implicitamente (e que vou usar na explicação):
- A instrução é
. Um exemplo concreto que usarei para ilustrar: . - O datapath multiciclo típico tem registradores internos de estado:
, , , , , . - Existem sinais de controle que podem ser ativados em cada ciclo, por exemplo:
, , , , , , , , , , , . - A ideia do multiciclo é dividir a execução em vários ciclos de clock, reutilizando unidades funcionais (ALU, memória, registradores) em ciclos distintos.
Passo 2
Estado 1 — Instruction Fetch (IF). Objetivo: buscar a instrução da memória e incrementar
.
O que acontece (detalhado):
O que acontece (detalhado):
- Endereço de memória fornecido:
. Isso é feito configurando (seleciona como fonte de endereço para a memória). - Memória (unidade de dados/instruções) é lida com
. Saída da memória vai para . - Habilita-se
para que a palavra lida (a instrução) seja carregada em . - Paralelamente, a ALU calcula
para preparar o próximo PC. Para isso: -
(lado A da ALU lê ), -
(lado B recebe constante ), -
.
-
- Resultado da soma
é colocado em . - Escreve-se
ativando e ajustando para escolher .
Por que cada peça é necessária (didático):
-
guarda a instrução para que, nos ciclos seguintes, decodifiquemos opcode, campos , , . -
é buffer para dados vindos/indo para memória; na busca da instrução usamos temporariamente antes de mover para . - Incrementar
já neste ciclo evita precisar recomputar no próximo, e o mesmo ALU é usado para isso (economia de hardware).
Passo 3
Estado 2 — Instruction Decode / Register Fetch (ID). Objetivo: decodificar a instrução e ler os registradores-fonte.
O que acontece (detalhado):
O que acontece (detalhado):
- A instrução está em
. Daí extrai-se os campos: , , , . (Ex.: para , , , .) - O arquivo de registradores é lido:
e . e são registradores internos temporários que guardam os conteúdos lidos. - O imediato de 16 bits é sinal-estendido para 32 bits:
. (Sign-extend: se o bit mais significativo do imediato for , preenche os bits altos com ; senão, com .) - Opcionalmente (no datapath de P&H), a ALU calcula
para preparar cálculo de desvio, mas isso é irrelevante para . O importante aqui é que já temos , e prontos para o próximo passo. - Nenhum registro de destino é escrito neste estado; somente leitura.
Didática sobre sign-extension e por que é necessário: endereços de deslocamento (offset) são 16 bits na instrução; para somar corretamente ao conteúdo do registrador (32 bits) precisamos estender para 32 bits respeitando o sinal (caso o offset seja negativo).
Passo 4
Estado 3 — Execution / Effective Address calculation (EX). Objetivo: calcular o endereço efetivo da carga (base + offset).
O que acontece (detalhado):
O que acontece (detalhado):
- A ALU recebe
(conteúdo de ) e (o imediato sinal-estendido). Define-se . - A ALU realiza a operação:
(Este é o endereço efetivo em byte para a leitura de memória.) -
é um registrador intermediário que guarda esse resultado para o próximo ciclo (acesso à memória).
Exemplo numérico (didático): se
e
, então
Isso indica que vamos ler a palavra armazenada no endereço
.
Passo 5
Estado 4 — Memory Access (MEM). Objetivo: acessar a memória usando o endereço calculado.
O que acontece (detalhado):
O que acontece (detalhado):
- Configura-se
para que a memória use como endereço a saída (e não ). - Para um
: e . - A memória lê
e coloca o valor lido em : -
segura os dados lidos para que, no ciclo seguinte, possamos escrevê-los no registrador destino.
Observação didática: usamos
porque a leitura de memória produz dados que chegam um pouco depois; o
é buffer para cruzar o limite de ciclo clock.
Passo 6
Estado 5 — Write Back (WB). Objetivo: escrever o dado carregado no registrador destino (
).
O que acontece (detalhado):
O que acontece (detalhado):
- Seleciona-se a fonte de escrita do registrador como
(portanto escreve-se o conteúdo de no arquivo de registradores). - O registrador destino é
. Define-se (para instruções tipo carga o destino é ). - Habilita-se
. Então: - Fim da execução da instrução
.
Exemplo numérico: se
e
, então
.
Passo 7
Resumo dos sinais importantes por estado (para memorizar no exame). Vou listar apenas os sinais mais usados e o que devem valer em cada estado para
:
- IF:
-
, , , , , , .
-
- ID:
- Ler registradores: (nenhum sinal de memória); sinal-extender do imediato;
, .
- Ler registradores: (nenhum sinal de memória); sinal-extender do imediato;
- EX (effective address):
-
, , . Resultado em .
-
- MEM:
-
, . .
-
- WB:
-
, , . .
-
Comentário prático: em provas costumam pedir exatamente esta tabela de sinais ou pedir que você descreva o que cada registrador interno guarda em cada ciclo — decore o papel de
,
,
,
,
.
Passo 8
Por que o multiciclo divide em tantos estados? Explicação didática e intuitiva:
- Em multiciclo cada instrução ocupa vários ciclos de clock, e cada ciclo realiza uma operação simples (ex.: leitura de memória, operação ALU). Isso permite que:
- O mesmo hardware (ALU, memória, registrador de propósito geral) seja reutilizado em diferentes ciclos, reduzindo a área do chip (menos hardware duplicado).
- Cada ciclo seja curto (tempo menor por ciclo do que em um design single-cycle), aumentando a frequência possível.
- O custo é que a instrução demora vários ciclos, e o controle precisa sequenciar estados corretamente.
- Para
usamos 5 estados porque: busca, decodifica/ler regs, calcula endereço, acessa memória, escreve no registrador.
Passo 9
Exemplo completo com números (para fixar; tudo em LaTeX):
- Instrução:
. - Valores iniciais:
. Memória tem .
Passo a passo numérico: - IF:
(exemplo) → lê memória em → instrução . ALU faz → . - ID:
. . - EX: ALU calcula
. - MEM: lê
→ . - WB:
. Instrução concluída; pronto para próxima instrução.
Passo 10
Dicas de prova (quem está nervoso vai gostar):
- Sempre escreva explicitamente o que cada registrador interno (IR, MDR, A, B, ALUOut) contém ao final de cada ciclo — isso costuma marcar pontos.
- Lembre-se: para
são tipicamente 5 ciclos (IF, ID, EX, MEM, WB). Se a questão pede sinais, liste-os por ciclo como eu fiz. - Se pedirem diferenças entre
e : usa os mesmos 4 primeiros ciclos, mas no ciclo MEM ativa e usa (conteúdo de ) como dados; não há ciclo WB. - Se a questão pedir transições de estado desenhe uma seta linear: IF → ID → EX → MEM → WB e anote o que é carregado em cada registrador interno em cada seta.
Resposta
IF → ID → EX → MEM → WB (com os detalhes e sinais descritos nos passos anteriores).