Explique as principais características do caminho de dados monociclo em uma arquitetura MIPS simplificada. Quais são os principais componentes?
Passo 1
O que o enunciado pede: explicar as principais características do caminho de dados monociclo em uma arquitetura MIPS simplificada e listar os principais componentes.
Informações disponíveis: nenhuma figura específica foi enviada — vou usar o caminho de dados monociclo MIPS clássico (o que normalmente aparece em livros/ aulas). Vou responder com uma explicação passo a passo e exemplos de fluxo de dados para as instruções mais comuns. Não vou pedir nada a você; segue a explicação completa.
Informações disponíveis: nenhuma figura específica foi enviada — vou usar o caminho de dados monociclo MIPS clássico (o que normalmente aparece em livros/ aulas). Vou responder com uma explicação passo a passo e exemplos de fluxo de dados para as instruções mais comuns. Não vou pedir nada a você; segue a explicação completa.
Passo 2
Visão geral do que é “monociclo” (explicação didática e calma).
Um caminho de dados monociclo significa que cada instrução (por exemplo, uma operação aritmética, um load, um store, um branch ou um jump) é completada em exatamente um ciclo de clock. Isso tem duas implicações importantes:
Um caminho de dados monociclo significa que cada instrução (por exemplo, uma operação aritmética, um load, um store, um branch ou um jump) é completada em exatamente um ciclo de clock. Isso tem duas implicações importantes:
- Simplicidade de controle: não há estágio de pipeline a sincronizar, logo a lógica de controle é mais direta.
- Relógio lento: o período do clock precisa ser longo o suficiente para atravessar o caminho crítico de delay de hardware da instrução mais lenta (normalmente um load), então o desempenho por ciclo é ruim. Pense assim: é como fazer todo o trabalho de uma receita inteira antes de poder começar a próxima — simples, mas demorado.
Passo 3
Lista rápida (resumo) dos componentes que vamos detalhar depois — para você já saber o mapa mental:
,
e
,
,
,
e
,
, multiplexadores (MUXes),
, shift-left-2 para branch, lógica de branch/jump. Vou explicar um a um.
Passo 4
Função: armazena instruções em formato binário. Entrada: endereço (vindo do
Passo 5
-
contém o endereço da próxima instrução a ser buscada. - Normalmente após buscar a instrução calculamos
(pois em MIPS cada instrução tem bytes) usando um somador dedicado. O resultado vai para a seleção do próximo (pode ser , endereço de branch ou endereço de jump).
Importante: no monociclo o novo valor doé escrito no flanco ativo do clock depois de todo o trabalho da instrução — por isso tudo precisa caber no mesmo ciclo.
Passo 6
- Entradas para leitura: os campos
e da instrução indicam quais registradores ler; o arquivo entrega duas saídas: e . - Escrita: existe um porto de escrita com sinais
(número do registrador destino), (dados a gravar) e (habilita escrita). A escrita ocorre no final do ciclo (exatamente no flanco do clock).
Dica prática: memorize que leitura é combinacional (disponível imediatamente), escrita é síncrona (no clock).
Passo 7
Sign-extend e shift-left-2 (para immediatos e branches).
-
: toma o imediado de bits da instrução e o estende para bits preservando o sinal (se o bit for , os bits altos em ficam ). Isso é usado para instruções tipo load/store e para calcular o offset do branch. -
: para calcular o endereço-alvo do branch, o imediato estendido é deslocado 2 bits à esquerda (equivalente a multiplicar por ), porque os endereços são múltiplos de 4. Depois somamos esse valor a para obter o destino do branch.
Passo 8
-
: realiza operações aritméticas e lógicas (soma, subtração, AND, OR, etc.). Recebe dois operandos: tipicamente e ou ou o imediato estendido (dependendo do tipo de instrução). Produz e sinal (indica se o resultado é zero — usado por ). - MUX
: escolhe o segundo operando do ALU entre (para instruções R-type) ou (para / /immediate). O controle desse MUX é o sinal . -
: traduz sinais do opcode e do campo (em instruções R-type) para um código de operação interno do ALU. Normalmente a emite um campo e o combina com bits para gerar as linhas de controle do ALU.
Passo 9
- Entradas: endereço (vindo de
), (vindo do — normalmente ), sinais e . - Saída:
(dados carregados do endereço para serem escritos no registrador se for ).
No monociclo tanto o acesso à memória de instrução quanto à memória de dados acontecem no mesmo ciclo (pelo menos conceitualmente em modelos simplificados).
Passo 10
Mux de Write-back e
.
-
: MUX que escolhe o dado a ser escrito no registrador destino entre (resultado de operações aritméticas) e (dados vindos da memória em um ). Controlado por . -
: em instruções R-type o registrador destino vem do campo ; em instruções I-type (por exemplo ou ) o destino vem do campo . O sinal escolhe entre e para formar .
Passo 11
- Entrada: opcode (bits mais altos da instrução).
- Saídas (exemplos clássicos):
, , , , , , , , e . - Propósito: gerar os sinais de controle que configuram os MUXes, a escrita no registrador, memória, e informar o
que operação realizar. Na prova, você normalmente precisa saber que cada tipo de instrução tem um conjunto de sinais fixos (por exemplo, para : , , , , etc.).
Passo 12
Lógica de branch e jump (como escolhemos o próximo
).
- Cálculo do endereço de branch:
. O sinal vindo do ALU e o sinal da são combinados (normalmente via AND) para decidir se tomamos o branch. - MUX de seleção do
: existem tipicamente duas etapas: um MUX escolhe entre e (quando o branch é tomado), e um outro MUX pode escolher um endereço de jump (formado por concatenar bits altos de com o campo de 26 bits da instrução deslocado 2 bits) para suportar instruções . O resultado final vai para o .
Passo 13
Fluxos concretos (passo a passo) para instruções comuns — isso ajuda a memorizar na hora da prova.
Exemplo A — instrução R-type (por exemplo
com
destino):
-
fornece endereço para → buscamos instrução. - Campos
são usados; lê e . -
(mux escolhe ). usa para configurar a operação (soma, sub, etc.). -
produz . , . -
, , : no write-back o MUX seleciona e escreve em . -
é atualizado para .
Exemplo B —
(carregar palavra):
- Buscar instrução. Ler
e . -
→ ALU recebe e → calcula endereço efetivo. -
, → acessar em . -
, , → escrever (vindo da memória) em . -
.
Exemplo C —
(armazenar palavra):
- Buscar instrução. Ler
e . - ALU calcula endereço com
. -
escreve na memória no endereço . Não há escrita no registrador ( ). -
.
Exemplo D —
(branch if equal):
- Buscar instrução. Ler
e . - ALU faz
com . Se e , seleciona-se como novo ; caso contrário . Não há escrita em registrador nem acesso a memória de dados.
Exemplo E —
:
- Buscar instrução. O campo de 26 bits é deslocado e concatenado com bits altos de
para formar o destino de 32 bits. recebe esse destino. Geralmente , sem acesso a memória.
Passo 14
Tempo, caminho crítico e vantagens/desvantagens — fique com isso para a prova.
- Caminho crítico: em monociclo é a soma dos atrasos de todos os blocos que uma instrução poderia atravessar (Instruction Memory → Register File → ALU → Data Memory → Write-back MUX, etc.). O clock precisa ser maior que esse atraso.
- Vantagens: simplicidade arquitetural e de controle; fácil de entender e de implementar em aula; sem problemas de hazards de pipeline porque não há pipeline.
- Desvantagens: baixa eficiência (o clock é ditado pela instrução mais lenta), desperdício de tempo para instruções simples (por exemplo, um add não necessita de memória, mas espera o tempo do ciclo longo), escala ruim para alta performance. Em hardware real costuma-se usar pipeline para contornar isso.
Passo 15
Dicas práticas para a prova (como estudar/ desenhar e checar).
- Desenhe sempre o diagrama clássico do datapath monociclo:
→ → decodificador/ → ALU (+ MUX ALUSrc) → → MUX MemtoReg → write; paralelo: cálculo , shift-left-2 + adder para branch, concat para jump. - Liste os sinais de controle essenciais:
, , , , , , , e . Para cada tipo de instrução escreva um vetor desses sinais — treino rápido para prova. - Na hora de responder questões, siga o fluxo: buscar instrução → ler registradores → calcular ALU → acessar memória (se preciso) → escrever resultado → atualizar PC. Se pedirem o caminho de dados para uma instrução específica, descreva quais blocos são usados e quais sinais de controle assumem
ou . - Força! Você consegue decorar o diagrama e praticar 4–5 instruções (R-type, lw, sw, beq, jump) e estará muito bem preparado.
Resposta
Principais características: cada instrução é completada em um único ciclo de clock, simplicidade de controle (sem pipeline), período de clock grande definido pelo caminho crítico (baixa eficiência/baixo throughput), e uso de multiplexadores e sinais de controle para selecionar diferentes caminhos de dados conforme o tipo de instrução.
Principais componentes: ,
e
(
),
,
,
,
,
,
, multiplexadores (ex.:
,
,
, seleção de
), e
(geradora de
,
,
,
,
,
,
,
,
).
Principais componentes: