Simulador

CPU por Dentro: caminho de dados MIPS em 3D

Siga uma instrução MIPS pelo caminho de dados em 3D, estágio por estágio (IF, ID, EX, MEM, WB), veja quais peças ela usa e acompanhe o pipeline com cinco instruções ao mesmo tempo, bolhas, adiantamento e desvios.

Ensino Superior e técnico
Como usar

Uma instrução: escolha uma instrução (ou escreva a sua) e avance estágio por estágio. A instrução viaja pelo caminho de dados; as peças que ela usa ficam destacadas e os fios por onde passam os dados acendem. Ao lado aparecem a codificação em binário, os sinais de controle e as contas de cada estágio.

Pipeline: escolha um programa e avance ciclo a ciclo. Cada instrução tem uma cor, e até cinco ocupam o caminho de dados ao mesmo tempo, uma em cada estágio. Bolhas, adiantamentos (arcos vermelhos) e instruções descartadas depois de um desvio aparecem na cena, na lista de eventos e no diagrama.

Desafio: o simulador sorteia uma instrução e você marca as peças que ela usa de verdade. Depois confira e veja o caminho completo.

Clique numa peça (ou no botão dela abaixo da cena) para saber o que ela faz. Arraste a cena para girar; use a roda do mouse ou dois dedos para aproximar. Pelo teclado: Tab até a cena, setas giram e as teclas + e − aproximam. Todos os comandos também estão nos botões. O modelo é o pipeline de cinco estágios do livro de Patterson e Hennessy, com o desvio decidido no estágio ID e previsão de "não tomado". Fios de controle e alguns MUX foram omitidos para a cena não ficar poluída.

    Codificação

    Sinais de controle

    Registradores e memória

    Instruções suportadas

    add sub and or slt addi lw sw beq bne j nop. Registradores pelo nome ($t0) ou pelo número ($8). No pipeline, rótulos terminam com dois-pontos e comentários começam com #; os registradores começam em zero e a memória começa com 5, 8, 2, 7, 4, 9, 1 e 6 nos endereços 0, 4, 8, ... 28. Em "Uma instrução", o desvio recebe o deslocamento em instruções (beq $t0, $t1, 3) e o salto recebe um endereço (j 0x00400000).

    Para escrever e rodar programas inteiros, use o Mini-MIPS. Para ver o pipeline em 2D com mais opções (desvio decidido no MEM, comparação com e sem adiantamento), use o Pipeline MIPS. Para ver onde o processador fica no computador, use a Placa-mãe em 3D.

    Para o professor
    1. Antes do pipeline, uma instrução de cada vez. Passe add, lw, sw e beq em "Uma instrução" e peça que a turma anote, para cada uma, os estágios em que ela não faz nada. O sw não escreve registrador, o add não usa a memória de dados e o beq termina no ID. Essa tabela explica por que o monociclo desperdiça tempo: o relógio precisa caber a instrução mais lenta (o lw).
    2. Sinais de controle. Compare a tabela de controle do add com a do addi: só mudam RegDst e ALUSrc. Pergunte qual MUX cada sinal comanda e confira clicando nas peças. Depois peça que a turma preencha a linha do slt sem olhar.
    3. Codificação. Com a codificação na tela, mostre por que rs e rt estão sempre nos mesmos bits nos formatos R e I: o banco de registradores pode começar a leitura antes de o controle saber qual é a instrução.
    4. Pipeline. No programa sem dependências, conte os ciclos (5 instruções em 9 ciclos) e calcule o CPI. Em "Adiantamento", desligue o forwarding e conte as bolhas; ligue de novo e siga os arcos vermelhos. Em "lw seguido de uso", mostre que nem o adiantamento evita a bolha e peça uma reordenação do código que a elimine.
    5. Desvios. No laço, observe a instrução descartada a cada volta e a parada do bne, que precisa do valor do addi já no ID. Discuta por que processadores reais preveem desvios em vez de esperar.
    6. Desafio em duplas: uma pessoa sorteia a instrução e a outra marca as peças; troquem a cada rodada.

    Referência: Patterson e Hennessy, Organização e Projeto de Computadores, capítulo 4 (caminho de dados e pipeline do MIPS). Material concreto equivalente: cinco mesas em fila, uma por estágio, e fichas de papel com as instruções passando de mesa em mesa a cada palma (o relógio).