Escolar Documentos
Profissional Documentos
Cultura Documentos
Instrução 1 2 3 4 5 6
add $t2, $t0, $t5 0x00A21014 0x0000000A 0x00000080 0x0000011D 0x00005020 0x0000009D
add $t2, $t0, $t5 0x00A21017 0x0000000A 0x00000080 0x0000011D 0x00005020 0x0000009D
Uma vez que a arquitetura é de ciclo único, cada instrução leva um ciclo de
clock para ser executada. Portanto, o programa completo levaria 8 ciclos de clock
para ser executado. Para 3 ciclos de clock, o programa seria executado até a terceira
instrução e para 5 ciclos, até a quinta instrução.
Por meio dos valores da tabela, primeiro calculou-se o tempo de ciclo (um
período de clock):
Assim, para cada um dos casos o tempo total de execução será de:
3 ciclos
lw 3
sw 3
add 3
beq 2
Total: 3 ∗ 3 + 3 ∗ 2 + 3 ∗ 2 + 2 ∗ 1 = 23 𝑐𝑖𝑐𝑙𝑜𝑠
5 ciclos
lw 5
sw 4
add 4
beq 3
Total: 5 ∗ 3 + 4 ∗ 2 + 4 ∗ 2 + 3 ∗ 1 = 34 𝑐𝑖𝑐𝑙𝑜𝑠
8 ciclos
lw 5
sw 4
add 4
beq 3
Total: 5 ∗ 3 + 4 ∗ 2 + 4 ∗ 2 + 3 ∗ 1 = 34 𝑐𝑖𝑐𝑙𝑜𝑠
Para 3 ciclos
Na operação beq, a operação PCBranch deve ser feita no segundo ciclo, assim
é necessário acrescentar um somador que recebe a PC+4 do ciclo anterior, além do
valor de SingExtend com o label para o deslocamento de 2 bits do Branch informado.
Sinais de Controle:
Para 5 ou 8 ciclos
Para 3 ciclos
Para 5 e 8 ciclos
3 ciclos
𝐶𝑙𝑜𝑐𝑘𝑠 = [3 + (𝑛 − 1)]
5 ciclos
𝐶𝑙𝑜𝑐𝑘𝑠 = [5 + (𝑛 − 1)]
8 ciclos
14 ciclos de clocks.
3 ciclos
𝐶𝑙𝑜𝑐𝑘𝑠 = [3 + (𝑛 − 1)]
Como não foi necessário a inclusão de stalls, o número de clocks será igual a 10.
5 ciclos
𝐶𝑙𝑜𝑐𝑘𝑠 = [5 + (𝑛 − 1)]
Inicialmente o número de clocks seria igual a 12. Entretanto, foi necessário
incluir um stall entre as instruções 2 e 3. Dessa forma, temos que 12 + 1 = 13 ciclos
de clock.
8 ciclos
Também será constituído de 13 ciclos de clock.
A função beq $t1, $t2, 0xC, torna-se um loop que retorna para a
posição de memória 0xc (linha 4), caso $t1 for igual a $t2. Dessa forma, as opções
para a reordenação do código, sem que a sua lógica seja alterada, são limitadas.
Entretanto, é possível subir o comando lw $t4, 8($t0) para a linha 3, de
maneira que o stall necessário entre o lw de lw $t1, 0($t0) , lw $t2, 4($t0)
e add $t3, $t1, $t2, possa ser substituído por somente um forwarding. Tal
modificação não altera a lógica do programa, já que caso $t1 for igual a $t2, o loop
irá repetir apenas a soma infinitas vezes. E caso $t1 for diferente a $t2, a lógica não
será modificada sem a linha lw $t4, 8($t0), já que os registradores
continuaram contendo os mesmos resultados de antes.
Pipeline 5 e 8 ciclos
Código reordenado
13.1 A equação de calculo do Tc muda, devido que vocês mudaram a configuração dos clocks!!!!