CPU multiciclo e máquina de controlo
Partilhar recursos, seguir estados e sinais e contar ciclos nas instruções executadas.
Ideia
Uma ALU e uma memória partilhadas, resultados guardados em IR, MDR, A, B, ALUOut. Saída combinatória atual não é valor guardado: writeback de lw usa MDR; branch usa o alvo em ALUOut enquanto a ALU compara.
| Classe | Passos após fetch/decode | Total com fetch/decode |
|---|---|---|
| lw | Endereço, leitura, escrita | 5 |
| sw | Endereço, escrita de B | 4 |
| R | ALU sobre A/B, escrita | 4 |
| beq | Compara, escreve PC se igual | 3 |
beq demora 3 tomado ou não. IRWrite só no fetch.
Sinais
IorD: PC ou ALUOut no endereço. ALUSrcA: PC ou A. ALUSrcB: B, 4 ou imediato. MemtoReg: ALUOut ou MDR. PCSource: saída da ALU ou ALUOut. Escreve PC se .
Alvo do branch
ISA: alvo PCinst+d. O fetch já avançou 4; o decode soma d−4 ao PC avançado. Exemplo: instrução em 0x00400010, d=−8, PC=0x00400014: alvo 0x00400014−12=0x00400008. Outra organização guarda PCinst. A compensação é deste modelo, não da ISA.
Contagem
Conta execuções reais: inicialização, testes finais, expansões de pseudo-instruções; saltadas não contam. Três iterações de lw+add+sub+beq: ciclos. Tempo = ciclos × período; CPI 4 com período de um terço dá razão 4/3.