Percurso de dados e controlo

Do ciclo único à máquina multiciclo e aos registos de pipeline.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Em lw t0,12(a0), a instrução fornece uma base e um deslocamento. O processador precisa de somá-los, ler a memória e escrever o valor obtido em t0. O percurso de dados reúne os componentes que fazem estas operações; a unidade de controlo seleciona as entradas e autoriza cada escrita. Um multiplexador escolhe uma origem para um sinal.

Ciclo único

Modelo reduzido: add/sub/and/or, lw, sw, beq; memórias de instruções e dados separadas, banco de registos com duas leituras e uma escrita, ALU e gerador de imediatos. A ALU, unidade aritmética e lógica, calcula operações inteiras e endereços.

Em lw t0,12(a0): obtém a instrução; lê a0; estende o imediato; a ALU calcula a0+12; lê quatro bytes; seleciona o dado da memória para escrever em t0. Se a0=200, o endereço é 212. O imediato não é o dado carregado.

Sinais de controlo

Segue três instruções com valores antes de decorar a tabela. Supõe a0 = 0x1000, palavra em 0x100C com valor 9, t1 = 4.

Em lw t0, 12(a0), a ALU soma 0x1000 + 12 = 0x100C. A memória lê 9. O multiplexador de escrita escolhe a memória e o banco escreve 9 em t0. Sinais: ALUSrc = 1, MemRead = 1, RegWrite = 1, origem do dado escrito igual a memória.

Em sw t1, 12(a0), a ALU calcula o mesmo endereço. O dado de t1 segue para a memória. Sinais: ALUSrc = 1, MemWrite = 1, sem escrita no banco.

Em beq t0, t1, L, a ALU subtrai para testar igualdade e o imediato forma o destino. Se a comparação for verdadeira, o PC seguinte é o destino. Com os valores dados, t0=9 e t1=4, a comparação é falsa e o PC avança 4 bytes.

RegWrite autoriza escrita no banco; ALUSrc escolhe registo ou imediato como segundo operando da ALU. MemRead/MemWrite controlam a memória de dados. MemtoReg escolhe a memória em vez da ALU para retorno ao banco. Branch autoriza a seleção do destino se a condição for verdadeira.

ClasseALUSrcMemtoRegRegWriteMemReadMemWriteBranchALUOp
R00100010
lw11110000
sw1X001000
beq0X000101

X significa indiferente nesse uso: como sw não escreve registo, MemtoReg não afeta um estado visível. Não significa que todos os sinais sejam dispensáveis.

Neste modelo, ALUOp 00 pede soma de endereço e 01 pede subtração para igualdade; 10 pede descodificação de funct3/funct7. A saída Zero de rs1−rs2 vale 1 quando são iguais.

O PC seguinte é o alvo se Branch AND Zero; caso contrário, PC+4. O alvo usa o PC da instrução e o deslocamento B reconstruído, não PC+4.

Período de ciclo único

O período tem de acomodar a instrução mais lenta. Se obtenção leva 200 ps, leitura de registos 100 ps, ALU 150 ps, memória de dados 250 ps e escrita 100 ps, um load precisa de 800 ps no modelo de soma desses atrasos. Uma instrução ALU mais curta também ocupa esse ciclo de 800 ps.

Não somes dois componentes que funcionam em paralelo. Primeiro segue o caminho combinacional mais longo entre elementos de estado.

Uma máquina multiciclo

Uma máquina multiciclo reparte a instrução por estados de controlo, cada um com um ciclo. No modelo seguinte, obtenção e descodificação são separadas do cálculo do endereço. Por isso lw usa cinco ciclos, enquanto add usa quatro e beq usa três.

O período passa a ser determinado pelo estado mais lento. Isso permite um relógio mais rápido, mas cada instrução paga vários períodos. Para comparar organizações, calcula CPI vezes período.

A máquina multiciclo reutiliza memória e ALU em ciclos distintos, porque cada passo usa só uma parte do hardware. Registos temporários guardam a instrução (IR), dado carregado (MDR), operandos (A/B) e resultado (ALUOut). Assim, a instrução não se perde quando a memória recebe outro endereço.

PassoAções principais
ObterIR←Mem[PC]; guardar PC original e avançar PC
DescodificarLer A/B; preparar alvo de branch
ExecutarALU faz operação ou endereço, ou decide branch
MemóriaLer para MDR ou escrever dado B
RetornoEscrever resultado ALU ou MDR no destino

O branch usa o PC original da instrução. Se o passo de obtenção já avançou o PC, recupera-o do registo guardado ou compensa esse avanço antes de formar o alvo.

R usa 4 ciclos, load 5, store 4 e branch 3, nesta organização. A unidade de controlo é uma máquina de estados: os dois primeiros estados são comuns, depois o opcode escolhe a sequência. O passo de retorno de um store não é necessário.

Se as frações são 40% R, 30% load, 20% store e 10% branch, o CPI é 0,4×4+0,3×5+0,2×4+0,1×3=4,20,4\times4+0,3\times5+0,2\times4+0,1\times3=4,2. Com ciclo 250 ps, o tempo por instrução é 1050 ps. Apesar do relógio mais rápido, este exemplo é mais lento do que ciclo único 800 ps, por isso calcula sempre o produto CPI×período.

O que atravessa uma pipeline

Na pipeline, os registos IF/ID, ID/EX, EX/MEM e MEM/WB separam instruções distintas. Cada instrução leva consigo os dados e sinais de que ainda precisa.

RegistoConteúdo necessário no modelo básico
IF/IDInstrução e PC
ID/EXPC, operandos, imediato, rs1/rs2/rd e controlos EX/M/WB
EX/MEMResultado ALU, dado a guardar, rd e controlos M/WB; dados do branch
MEM/WBDado lido, resultado ALU, rd e controlos WB

O destino de um load deve atravessar todos esses registos até WB. Usar o rd da instrução atualmente em ID escreveria no destino de outra instrução. O mesmo vale para RegWrite e para a seleção memória/ALU.

Uma bolha desativa os sinais que alteram estado, como RegWrite e MemWrite. Os bits de dados antigos podem continuar nos registos; deixam de causar efeitos porque os sinais de controlo estão inativos.

Exercícios

Escolher controlos de store

Indica os sinais principais para sw t1, 20(a0) e explica origem do endereço/dado.

Pista
O imediato serve para calcular endereço.
Solução

ALUSrc 1, ALUOp 00, MemWrite 1, MemRead 0, RegWrite 0, Branch 0; MemtoReg indiferente, porque o endereço é a0+20 e a palavra guardada vem de t1.

Confere a tua resposta:

  • Ativei MemWrite e ALUSrc.
  • Desativei RegWrite e MemRead.
  • Usei o segundo registo como dado, não como endereço.

Erros frequentes

Ativar RegWrite ou usar t1 como base do endereço.
Voltar à explicação
Diagnosticar uma escrita no destino errado

Um lw x7,0(x10) chega a WB com dado 9. Nesse ciclo, ID descodifica add x8,x11,x12. O circuito usa o rd de ID para escrever o dado de WB. Que registo altera indevidamente? Que informação tem de atravessar os registos da pipeline para corrigir o circuito?

Solução

Escreve 9 em x8, embora o load devesse escrever em x7. O destino x7 pertence ao load e deve passar por ID/EX, EX/MEM e MEM/WB. RegWrite e a seleção do dado de memória acompanham-no; usar os controlos de ID também aplicaria os efeitos de uma instrução diferente.

Confere a tua resposta:

  • Identifiquei x7 como destino do load.
  • Mostrei por que usar x8 da instrução em ID corrompe o estado.
  • Transportei rd, RegWrite e a seleção do dado até WB.
Voltar à explicação
Comparar organizações

Máquina multiciclo: R 4, load 5, store 4, branch 3 ciclos; mistura 40%, 30%, 20%, 10%; período 250 ps. Calcula tempo médio por instrução.

Pista
Pondera ciclos e multiplica pelo período.
Solução

CPI=0,4×4+0,3×5+0,2×4+0,1×3=4,2. Cada ciclo custa 250 ps, logo o tempo médio é 4,2×250=1050 ps. Uma organização de ciclo único com 800 ps por instrução seria mais rápida para esta mistura.

Erros frequentes

Concluir que relógio mais rápido implica menor tempo de execução.

Voltar à explicação

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.