You are on page 1of 63

O processador: Caminho de

dados e controle
Sistemas Digitais
Raquel da Silva Cabral
raquel.cabral@arapiraca.ufal.br
2
O que vimos até agora ?
 O que foi visto:
• Visão geral de Sistemas Computacionais
• Desempenho (segundos, ciclos, instruções)
• Abstrações: Arquitetura do Conjunto de Instruções
(ISA) Ling. Assembly e Ling. de Máquina
• Conjunto de Instruções MIPS (tipo R, I, J)
• Compilação de código para MIPS.
• Construção de um somador
O processador: Caminho de dados
3
O processador: caminho de dados e
controle
 Estamos prontos para ver uma implementação do MIPS
 Simplificada para conter apenas:
• Instruções lógicas e aritméticas: add, sub, and, or, slt
• Instruções de referência à memória: lw, sw
• Instruções de fluxo de controle: beq, j
 Implementação genérica:
• Use o contador de programa (PC) para fornecer endereço de instrução
• Obtenha a instrução da memória
• Leia os registradores
• Use a instrução para decidir exatamente o que fazer
 Todas as instruções usam a ALU após lerem os registradores
 Por quê? Referência à memória? Aritmética? Fluxo de controle?
O processador: Caminho de dados
4
O processador: caminho de dados e
controle
 Visão abstrata/simplificada:
 Dois tipos de unidades funcionais:
• Elementos que operamnos valores de dados (combinacionais)
• Elementos que contêmestado (seqüenciais)
O processador: Caminho de dados
5
O processador: caminho de dados e
controle
O processador: Caminho de dados
6
Passos na execução de uma instrução
O processador: Caminho de dados
Passo 1:
Busca da
Instrução
Passo 2:
Decodificação
e Busca de
Registradores
Passo 3:
Execução,
cálculo de
endereço de
memória,
desvio
condicional
Passo 4:
Escrita de
resultado para
instruções
tipo R e SW
Passo 5:
Escrita de
resultado para
a instrução
LW
Tipo R
IR = Mem[PC];
PC = PC+ 4;
A = Regs[IR[25-21]];
B = Regs[IR[20-16]];
UALSaída = PC +
extensão_sinal(
IR[15-0]) << 2;
UALSaída =
A op B;
Regs[IR[15-11]] =
UALSaída;
LW
UALSaída = A +
extensão_sinal(
IR[15-
0]);
MDR =
Mem[UALSaída]
Regs[IR[20-16]] =
MDR;
SW
Mem[UALSaída] =
B;
BEQ
if (A==B)
PC=UALSaída;
J
PC = PC[31-28]
|| (IR[25-
0]<<2);
7
Convenções lógicas de projeto
 Cada instrução começa a execução em uma
transição de clock e completa a execução na
próxima transição do clock.
 O clock é usado para determinar quando se deve
escrever no elemento de estado; esse elemento
pode ser lido a qualquer momento.
 Ativo indica que o sinal está “logicamente” alto.
O processador: Caminho de dados
8
Convenções lógicas de projeto
 Metodologia de clocking:
• Determina quando os sinais podem ser lidos e escritos.
• Uma metodologia de acionamento por transição.
• Execução típica:
Ler conteúdo de alguns elementos de estado,
Enviar valores através de alguma lógica combinacional
Escrever os resultados em um ou mais elementos de
estado
O processador: Caminho de dados
9
Construindo um caminho de dados
 Quais elementos do caminho de dados ?
• Unidade de mémória: armazenar as instruções de um
programa e fornecer instruções de um dado endereço
• Contador de programa (PC): contém o endereço da
instrução atual
• ALU: somador para incrementar o PC.
O processador: Caminho de dados
10
Construindo um caminho de dados
 Para executar qualquer instrução:
1. Buscar a instrução na memória.
2. Incrementar o PC (4 bytes depois) para apontar para a
próxima instrução.
O processador: Caminho de dados
11
Construindo um caminho de dados
 Lembre-se dos formatos das instruções
O processador: Caminho de dados
12
Construindo um caminho de dados
 Instruções no formato R (lógica e aritmética)
• ADD, SUB, AND, OR, SLT
• Sequencia de execução:
1. Leem dois registradores
2. Realizam uma operação na ALU com o conteúdo
dos registradores
3. Escrevem o resultado
• Exemplo: ADD $t1,$t2,$t3
 Banco de registradores:
• Registradores de uso geral de 32 bits
• Podem ser lidos ou escrtios indicando o seu número.
O processador: Caminho de dados
13
Construindo um caminho de dados
 Instruções no formato R (lógica e aritmética)
• Para a leitura da palavra no registrador:
 Entrada com o número dos registradores que serão
lidos.
 Saída com o valor lido.
• Para a escrita da palavra no registrador:
 Número do registrador a ser escrito
 Dados a serem escritos no registrador
• No total:
 Quarto entradas (três para o número do registrador e
uma para dados)
 Duas saídas (para dados)
O processador: Caminho de dados
14
Construindo um caminho de dados
 As entradas possuem 5 bits de largura para
especificar um dos 32 registradores disponíveis.
 Entrada de dados e barramentos de saída de dados
possuem 32 bits de largura cada um.
O processador: Caminho de dados
15
Construindo um caminho de dados
 Instruções LOAD, STORE
• LW $t1, offset_value($t2) e SW $t1, offset_value($t2)
• Calculam o endereço de memória somando o
registrador de base, que é $t2, com o campo offset de 16
bits com o sinal contido na instrução.
• Se a instrução for store, o valor a ser armazenado
também precisa ser lido $t2.
• Se a instrução for load, o valor lido na memória precisa
ser escrito no registrador especificado $t2.
O processador: Caminho de dados
16
Construindo um caminho de dados
 Instruções LOAD, STORE
• Assim, precisamos do banco de registradores e da ALU
• Além disso, precisamos de uma unidade para
Estender o sinal
Unidade de memória da qual ler ou na qual escrever.
O processador: Caminho de dados
17
Construindo um caminho de dados
 A instrução BEQ
• BEQ $t1,$t2,offset
• Três operandos, dois registradores que são comparados
e um offset de 16 bits para calcular o endereço do
destino do desvio.
• Calcular o endereço de destino somando ao offset
estendido com sinal com o PC.
• Comparar o conteúdo do registrador.
O processador: Caminho de dados
18
Construindo um caminho de dados
 Caminho de dados para o desvio
O processador: Caminho de dados
19
Construindo um caminho de dados
 Como combinar todos os elementos vistos?
 Caminho de dados simples: executa todas as
instruções em um único ciclo de clock  nenhum
recurso pode ser usado mais de uma vez por
instrução  qualquer elemento que precise ser
usado mais de uma vez é duplicado.
O processador: Caminho de dados
20
Construindo um caminho de dados
 Diferenças entre instruções do tipo R e instruções
de acesso a memória
• As instruções R usam a ALU com entradas vindas de
dois registradores.
• As intruções de acesso a memória também podem usar
a ALU para fazer cálculo de endereço.
• O valor armazenado em um registrador de destino vem
da ALU (R) ou da memória (para load)
O processador: Caminho de dados
21
Construindo um caminho de dados
 Como construir um caminho de dados para a parte
operacional das instruções do tipo R e instruções
de acesso a memória, que use um único banco de
registradores e uma ALU para manipular os dois
tipos de instruções, incluindo quaisquer
multiplexadorer ?
O processador: Caminho de dados
22
Construindo um caminho de dados
O processador: Caminho de dados
 Caminho de dados para as instruções de acesso a
memória e as instruções do tipo R
23
Construindo um caminho de dados
 Combinando todas as partes:
• Busca da instrução
• Execução de instruções do tipo R e de acesso a memória
• Desvios
O processador: Caminho de dados
24
Construindo um caminho de dados
O processador: Caminho de dados
25
Construindo um caminho de dados
 A unidade de controle
• Selecionar as operações a serem realizadas (ALU,
leitura/escrita etc.)
• Controlar o fluxo de dados (entradas do multiplexador)
• Informações vêm dos 32 bits da instrução
• Esquema simples de implementação
Acesso a memória: LW, SW,
Desvio: BEQ,
Operações de lógica e aritmética: ADD, SUB, AND,
OR, SLT.
O processador: Caminho de dados
26
Construindo um caminho de dados
 O controle da ALU
 Operação da ALU com base no tipo de instrução e
código de função
O processador: Caminho de dados
27
Construindo um caminho de dados
 O controle da ALU
• A ALU possui quatro entradas de controle
Aritméticas e lógicas (and, or, sub, add, slt)
Load/store (add para cálculo do endereço)
BEQ (subtração)
O processador: Caminho de dados
28
Construindo um caminho de dados
 Acrescentando o controle
• Precisamos descrever o hardware para calcular entrada
de controle da ALU de 4 bits.
Tipo de instrução (OpALU) – 2 bits
– 00 = lw, sw
– 01 = beq
– 10 = aritmética
Código de função para aritmética (funct) – 6 bits
O processador: Caminho de dados
29
Construindo um caminho de dados
 Controle da ALU
• Precisamos descrever o hardware para calcular entrada
de controle da ALU de 4 bits.
O processador: Caminho de dados
30
Construindo um caminho de dados
 Controle da ALU
• Precisamos descrever o hardware para calcular entrada
de controle da ALU de 4 bits.
Descreva-o usando uma tabela verdade (pode se
tornar portões)
O processador: Caminho de dados
31
Construindo um caminho de dados
 Controle da ALU
• Uma vez que a tabela verdade é construída ela pode ser
otimizada e, depois transformada em portas lógicas.
• Processo completamente mecânico.
O processador: Caminho de dados
32
Construindo um caminho de dados:
Unidade de controle principal
 Formatos de instrução considerados
• Campo de opcode (bits 31-26)
• Os dois registradores a serem lidos (rs e rt): posições 25-21 e 20-16 (tipo R, BEQ e store
word)
• Registrador-base para instruções de load e store: está na posição 25-21 (rs)
• 16 bits de deslocamento do BE, lw e sw: 15-0
• Registrador destino:
 Para lw: 20-16 (rt)
 Tipo R: 15-12 (rd)
• É necessário ummultiplexador antes do banco de registradores
O processador: Caminho de dados
33
O caminho de dados com todos os
multiplexadores e linhas de controle
O processador: Caminho de dados
34
O processador: Caminho de dados
35
Operação do caminho de dados
 Como cada instrução usa o caminho de dados ?
• Fluxo das três classes de instrução diferentes por meio
do caminho de dados.
• Tudo ocorre em um ciclo de clock.
O processador: Caminho de dados
36
Operação do caminho de dados
 Passos para a execução de instruções R, ex., add
$t1,$t2,$t3
1. Busca da instrução na memória de instruções e incremento
do PC
2. Dois registradores, $t2 e $t3, são lidos do banco de
registradores. A unidade de controle coloca valores nas
linhas de controle.
3. A ALU opera sobre os dados lidos do banco de
registradores, usando o código da função (bits 5-0) para
gerar a função da ALU
4. O resultado da ALU é escrito no banco de registradores
usando-se os bits 15-11 da instruçã para selecionar o
registrador-destino ($t1)
O processador: Caminho de dados
37
Passos para a execução da instrução add $t1,$t2,$t3
1. Busca da instrução na memória de instruções e incremento do PC
O processador: Caminho de dados
38
Passos para a execução da instrução add $t1,$t2,$t3
2. Dois registradores, $t2 e $t3, são lidos do banco de registradores e a
unidade de controle coloca valores nas linhas de controle.
O processador: Caminho de dados
39
Passos para a execução da instrução add $t1,$t2,$t3
3. A ALU opera sobre os dados lidos do banco de registradores, usando o
código da função (bits 5-0) para gerar a função da ALU
O processador: Caminho de dados
40
Passos para a execução da instrução add $t1,$t2,$t3
4. O resultado da ALU é escrito no banco de registradores usando-se os
bits 15-11 da instruçã para selecionar o registrador-destino ($t1)
O processador: Caminho de dados
41
Operação do caminho de dados
 Passos para a execução de instruções R, ex., LW/SW
1. Busca da instrução na memória de instruções e incremento
do PC
2. Leitura do conteúdo de um registrador ($t2) do banco de
registradores
3. Cálculo da soma do valor lido do banco de registradores
com o resultado da extensão do sinal de 16 bits menos
significativos da instrução (offset)
4. O resultado da soma é usado para endereçar a memória de
dados
5. O dado vindo da unidade de memória é escrito no banco de
registradores; o número do registrador destino é dado
pelos bits 20-16 da instrução ($t1)
O processador: Caminho de dados
42
Passos para a execução da instrução lw $t1, offset($t2)
1. Busca da instrução na memória de instruções e incremento do PC
O processador: Caminho de dados
43
Passos para a execução da instrução lw $t1, offset($t2)
2. Leitura do conteúdo de um registrador ($t2) do banco de registradores
O processador: Caminho de dados
44
Passos para a execução da instrução lw $t1, offset($t2)
3. Cálculo da soma do valor lido do banco de registradores com o resultado da
extensão do sinal de 16 bits menos significativos da instrução (offset)
O processador: Caminho de dados
45
Passos para a execução da instrução lw $t1, offset($t2)
4. O resultado da soma é usado para endereçar a memória de dados
O processador: Caminho de dados
46
Passos para a execução da instrução lw $t1, offset($t2)
5. O dado vindo da unidade de memória é escrito no banco de registradores; o
número do registrador destino é dado pelos bits 20-16 da instrução ($t1)
O processador: Caminho de dados
47
Operação do caminho de dados
 Passos para execução de instruções BEQ
1. Busca da instrução na memória de instruções e incremento
do PC
2. Leitura do conteúdo dos registradores $t1 e $t2
3. Realização de uma subtração pela ALU sobre os dois valores
lidos do bando de registradores. O valor de PC+4 é somado
ao resultado da extensão do sinal dos 16 bits menos
significativos da instrução (deslocamento) deslocado de
dois bits à esquerda. O resultado dessa soma é o endereço
do destino do desvio
4. A saída Zero da ALU é usada para decidir se o PC deve ser
atualizado com o valor de PC+4 ou com o valor do endereço
de destino do desvio condicional.
O processador: Caminho de dados
48
Execução de instruções BEQ
O processador: Caminho de dados
49
Exercício
 Verifique a implementação de JUMPS ?
O processador: Caminho de dados
50
Implementação de ciclo único
 O projeto de ciclo único é ineficiente
 O clock precisa ter a mesma duração para cada instrução nesse
projeto e o CPI será sempre 1
 O tempo de ciclo é determinado pelo caminho mais longo; esse
caminho, certamente, é uma instrução lw, que usa cinco
unidades funcionais em série:
• Memória de instruções
• Banco de registradores
• ALU
• Memória de dados
• Banco de registradores
 Embora o CPI seja 1, o desempenho geral de uma
implementação de ciclo único provavelmente não será bom, já
que outras instruções poderiam ficar em um ciclo de clock mais
simples
O processador: Caminho de dados
51
Desempenho das máquinas de ciclo
único
 Suponha os seguintes tempos de operação
• Unidade de memória: 200 ps
• ALU e somadores: 100 ps
• Banco de registradores: 50 ps
 Considerando que os multiplexadores, a unidade de
controle, os acessos do PC, a unidade de extensão do sinal e
os fios não possuem atraso, qual das seguintes
implementações seria mais rápida e por quanto?
• Uma implementação em que toda instrução opera em 1 ciclo de
clock de uma duração fixa
• Uma implementação em que toda instrução é executada em 1 ciclo
de clock usando um ciclo de clock com duração variável, que para
cada instrução, tem apenas a duração necessária (método não
prático)
O processador: Caminho de dados
52
Desempenho das máquinas de ciclo
único
 Solução
• Considerando o mix: 25% loads, 10% stores, 45% ALU,
15% desvios, 5% jumps
• Lembre-se:
Tempo de execução = Contagem instruções x CPI x
Tempo de ciclo
• Como CPI é 1 então:
Tempo de execução = Contagem instruções x 1 x
Tempo de ciclo
Tempo de execução = Contagem instruções x Tempo
de ciclo
O processador: Caminho de dados
53
Desempenho das máquinas de ciclo
único
 Precisamos então encontrar o tempo do ciclo de
clock para as duas implementações, já que a
contagem de instruções e CPI são iguais.
 Caminho crítico:
O processador: Caminho de dados
54
Desempenho das máquinas de ciclo
único
 Caminho crítico e tempo exigido para cada classe
de instruções
O processador: Caminho de dados
55
Desempenho das máquinas de ciclo
único
 O ciclo de clock é determinado pela instrução mais
longa, que leva 600ps para ser executada:
=
600 × 25%+550 × 10%+400 × 45%+350 × 15%+200
× 5% =
,



ú
=
çã
ú
çã
á
=

×
ú
×
á
=
O processador: Caminho de dados
56
Desempenho das máquinas de ciclo
único
 A implementação de clock variável seria 1,34 vez
mais rápida
 Mas, implementar um clock de velocidade variável
para cada classe de instrução é extremamente
difícil e o overhead para esse método poderia ser
maior do que qualquer vantagem obtida.
 Alternativa: usar um ciclo de clock mais curto que
realize menos trabalho e, então, variar o número
de ciclos de clock para diferentes classes de
instruções.
O processador: Caminho de dados
57
Uma implementação multiciclo
 A execução de cada instrução é quebrada em
passos
 Cada etapa na execução levará um ciclo de clock
 Permite que que uma unidade funcional seja usada
mais de uma vez por instrução, desde que seja
usada em diferentes ciclos de clock
O processador: Caminho de dados
58
Uma implementação multiciclo
 Uma única unidade de memória é usada para instruções e para
dados
 Existe uma única ALU, em vez de uma ALU e dois somadores
 Um ou mais registradores são adicionados após cada unidade
funcional para conter a saída dessa unidade até o valor ser
usado em um ciclo de clock subsequentente.
O processador: Caminho de dados
59
Uma implementação multiciclo
O processador: Caminho de dados
 O ciclo de clock pode acomodar no máximo umas
das seguintes operações:
• Um acesso à memória
• Um acesso ao banco de registradores (duas leituras e
uma escrita)
• Uma operação da ALU
 Assim, os dados precisam ser salvos em um
registrador temporário para o uso em um ciclo
posterior.
60
Uma implementação multiciclo
 Registradores temporários adicionais:
• Registrador de instrução (IR)
• Registrador de dados da memória (MDR)
• Registradores A e B
• Registrador SaídaALU
 Sinais de controle
 Multiplexadores
O processador: Caminho de dados
61
Uma implementação multiciclo
O processador: Caminho de dados
62
Uma implementação multiciclo
O processador: Caminho de dados
63
Uma implementação multiciclo
O processador: Caminho de dados