CPU uniciclo: datapath e controlo
Seguir R, lw, sw e beq, escolher sinais de controlo e diagnosticar falhas.
Datapath
Subconjunto didático: add,sub,and,or,lw,sw,beq. Cada instrução termina num período; a mais lenta define o relógio.
- ALU recebe rs1 e escolhe rs2 ou imediato. O resultado escreve R ou endereça lw/sw. MUX de writeback: ALU ou memória.
- PC seguinte: PC+4 ou PC da instrução+d.
PCSrc=Branch AND Zero; somador separado calcula o alvo. O imediato já sai em bytes.
Sinais
| Classe | RegWrite | ALUSrc | MemRead | MemWrite | MemtoReg | Branch | ALUOp |
|---|---|---|---|---|---|---|---|
| R | 1 | 0 | 0 | 0 | 0 | 0 | 10 |
| lw | 1 | 1 | 1 | 0 | 1 | 0 | 00 |
| sw | 0 | 1 | 0 | 1 | X | 0 | 00 |
| beq | 0 | 0 | 0 | 0 | X | 1 | 01 |
- ALUSrc=1 usa imediato; MemtoReg=1 usa memória. X em MemtoReg, em sw e beq, porque RegWrite=0 impede a escrita e o MUX de writeback é ignorado. ALUSrc e MemWrite continuam a importar no sw.
- ALUOp pede a operação (00 soma, 01 subtrai, 10 consulta f3/f7); ALUControl é a codificação interna (AND 0000, OR 0001, ADD 0010, SUB 0110).
Diagnóstico
lw x5,12(x8) com x8=0x10010000 e 42 no destino: ALU dá 0x1001000C, MemtoReg=1 escreve 42.
- MemtoReg preso em 0: load escreve o endereço. Testa com conteúdo diferente do endereço.
- Leitura 2 presa: afeta R, sw, beq; lw não a usa. PCSrc preso em 0: só falha o branch tomado. RegWrite em 0: R e lw calam.
addi: ALUSrc=1, ALUOp=00, MemtoReg=0, RegWrite=1.jalrprecisa de caminho para PC+4 e destino da ALU com bit 0 limpo.- CPI=1 não garante rapidez: o período é o do load.