Você está na página 1de 29

O

 Processador:  O  Caminho  de  Dados  e  Controle  

Daniel  Ludovico  Guidoni  


danielguidoni@gmail.com  

AOC  1   1  
Introdução  

• O  desempenho  de  um  programa  depende:  


– Número  de  instruções  (depende  do  set  de  instruções)  
– Velocidade  de  clock  (depende  da  implementação)  
– CPI  -­‐  Número  de  ciclos  gastos  por  instrução  (depende  da  implementação  do  
conjunto  de  instruções)  

• Implementação  do  MIPS  simplificada:  


– Instruções  de  referência  à  memória  (lw  e  sw)  
– Instruções  lógicas  e  aritméScas  (add,  sub,  and,  or,  slt)  
– Instruções  de  controle  de  fluxo  (saltos)  beq  e  j  

• lw  $t1,  offset($t2)  
– $t1  =  valor  armazenado  na  posição  de  memória  $t2  +  offset  
• sw  $t1,  offset($t2)  
– posição  de  memória  [$t2  +  offset]  =  $t1  
• Beq  $t1,  $t2,  endereço  
– Branch  if  equal  (salte  se  igual)  
ISL  1  
AOC   2  
MulSplexadores  

ISL  1  
AOC   3  
Para  que  mulSplexadores?  

ISL  1  
AOC   4  
Construindo  o  Caminho  de  Dados  

• Elementos  principais  do  caminho  de  dados  


– Memória  de  instruções,  PC  e  somador  

ISL  1  
AOC   5  
Construindo  o  Caminho  de  Dados  

• Banco  de  registradores  


– Devido  às  instruções  de  formato  R  terem  três  operandos  de  registrador,  
precisamos  ler  duas  words  de  dados  do  banco  de  registradores  e  escrever  
uma  word  de  dados  no  banco  de  registradores.  
– 3  entradas  de  5  bits  (32  registradores):  
• 2  entradas  com  endereço  dos  registradores  lidos  
• 1  entrada  com  endereço  do  registrador  escrito  
– 2  saídas  de  32  bits:  operandos  p/  a  UAL  
– 1  entrada  de  32  bits:  escrita  do  resultado  
• As  escritas  são  controladas  pelo  sinal  de  controle  de  escrita,  que  precisa  
estar  aSvo  para  que  um  escrita  ocorra  na  transição  do  clock  

ISL  1  
AOC   6  
Construindo  o  Caminho  de  Dados  

• Banco  de  registradores  e  ULA  

ISL  1  
AOC   7  
Construindo  o  Caminho  de  Dados  

• Instruções  de  load/store  


– lw  $t1,  offset($t2)  e  sw  $t1,  offset($t2)  
– Calculam  um  endereço  de  memória  somando  o  registrador  base  ($t2  no  
exemplo)  ao  número  de  16  bits  sem  sinal  estendido  
– Para  sw,  o  valor  a  ser  armazenado  na  memória  de  dados  é  lido  do  registrador;  
para  lw:  o  valor  é  lido  da  memória  de  dados  e  escrito  no  registrador  
– É  necessária  uma  unidade  para  estender  o  sinal  de  16  para  32  bits  e  uma  
memória  para  ler  e  escrever  os  dados  

ISL  1  
AOC   8  
Construindo  o  Caminho  de  Dados  

• A  instrução  beq  
– Tem  três  operandos  
• Dois  registradores  uSlizados  para  a  comparação  
• Offset  indicando  o  endereço  de  memória  para  o  deslocamento  (PC  +  
offset)  

• Instruções  de  desvio  


– O  conjunto  de  instruções  especifica  que  a  base  para  o  cálculo  do  endereço  de  
desvio  é  o  endereço  da  instrução  seguinte  ao  desvio.  Como  calculamos  PC  +  4  
no  caminho  de  dados  para  a  busca  de  instruções,  é  fácil  usar  esse  valor  como  
a  base  para  calcular  o  endereço  de  desSno  do  desvio  

– A  arquitetura  é  especificada  de  forma  que  o  campo  offset  é  deslocado  2  bits  


para  a  esquerda  de  modo  que  seja  uma  offset  de  uma  word;  essa  forma  de  
cálculo  aumenta  a  amplitude  do  salto  por  um  fator  igual  a  4  

ISL  1  
AOC   9  
Construindo  o  Caminho  de  Dados  

• A  instrução  beq  
– Além  de  calcular  o  endereço  do  desvio,  é  necessário  verificar  se  o  desvio  deve  
ser  executado  ou  não,  de  acordo  com  a  comparação  entre  os  dois  
registradores  

ISL  1  
AOC   10  
Integrando  os  Caminhos  de  Dados  
• Os  caminhos  de  dados  são  unidos  e  linhas  de  controle  são  adicionadas,  
assim  como  os  mulSplexadores  necessários  

ISL  1  
AOC   11  
Uma  Implementação  Simples  

• Projeto  de  ciclo  único:  a  busca,  decodificação  e  execução  das  instruções  


ocorre  em  um  único  ciclo  de  clock  
– Nenhum  recurso  do  caminho  de  dados  pode  ser  usados  mais  de  uma  vez  por  
instrução,  de  forma  que  aqueles  que  necessitam  ser  uSlizados  mais  de  uma  
vez  devem  ser  replicados  (ex.  memória  de  instruções  e  de  dados  separados,  
mais  de  um  somador)  
– MulSplexadores  são  necessários  na  entrada  dos  componentes  comparSlhados  
para  realizar  a  seleção    
– Sinais  de  escrita  para  controlar  a  gravação  no  banco  de  registradores  e  na  
memória  de  dados  

• O  tempo  de  ciclo  é  determinado  pelo  tamanho  do  caminho  mais  longo  
(caminho  com  maior  tempo  de  execução)  

ISL  1  
AOC   12  
Uma  Implementação  Simples  

ISL  1  
AOC   13  
O  Controle  da  ALU  

• Dependendo  da  instrução,  uma  das  operações  abaixo  deverá  ser  


executada  
– AritméScas  e  lógicas  (and,  or,  sub,  add,  slt)  
– Load/store  (add  para  cálculo  do  endereço)  
– Beq  (subtração)  

ISL  1  
AOC   14  
O  Controle  da  ALU  

• Podemos  gerar  a  entrada  do  controle  da  ALU  de  4  bits  usando  uma  
pequena  unidade  de  controle  que  tenha  como  entradas  o  campo  funct  da  
instrução  e  um  campo  control  de  2  bits,  que  chamamos  de  OpALU  

• OpALU  indica:  
– 00  :  operação  add  para  load/stores  
– 01:  operação  sub  para  beq  
– 10:  determinada  pela  operação  do  campo  funct  

ISL  1  
AOC   15  
O  Controle  da  ALU  

• Criar  2  bits  de  controle  (ALUOp),  que  juntamente  com  o  campo  funct,  
definem  a  função  que  será  executada  
 

ISL  1  
AOC   16  
O  Controle  da  ALU  

• ALUOp  (2  bits)  +  funct  (6  bits)  


• Combinações  relevantes  

ISL  1  
AOC   17  
O  Controle  da  ALU  

• Implementação  

ISL  1  
AOC   18  
Unidade  de  Controle  Principal  
• As  três  classes  de  instruções  

• Campo  de  opcode  (bits  31-­‐26)  


• Os  dois  registradores  a  serem  lidos  (rs  e  rt):  posições  25-­‐21  e  20-­‐16  (Spo  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  beq,  lw  e  sw:  15-­‐0  
• Registrador  desSno:  
– Para  lw:  20-­‐16  (rt)  
– Tipo  R:  15-­‐12  (rd)  
ISL  1  
AOC   19  
Unidade  de  Controle  Principal  
• Controla  as  linhas  azuis  

ISL   20  
Unidade  de  Controle  Principal  

• Implementação  

ISL  1  
AOC   21  
Caminho  de  Dados  Simples  com  a  Unidade  de  Controle  

ISL   22  
ISL   23  
Execução  de  Instruções  

• Passos  para  a  execução  de  instruções  R  


1. Busca  da  instrução  na  memória  de  instruções  e  incremento  do  PC  
2. Dois  registradores,  $t0  e  $t1,  são  lidos  do  banco  de  registradores.  A  unidade  
de  controle  coloca  valores  nas  linhas  de  controle  
3. A  UAL  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  UAL  
4. O  resultado  da  UAL  é  escrito  no  banco  de  registradores  usando-­‐se  os  bits  
15-­‐11  da  instrução  para  selecionar  o  registrador-­‐desSno  ($t1)  

ISL  1  
AOC   24  
Execução  de  Instruções  

• Exemplo  1:  Add  $t1,  $t2,  $t3  

ISL  1  
AOC   25  
Execução  de  Instruções  

• Passos  para  a  execução  de  instruções  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  significaSvos  da  instrução  (deslocamento)  
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  desSno  é  dado  pelos  bits  20-­‐16  da  instrução  ($t1)  

ISL  1  
AOC   26  
Execução  de  Instruções  

• Exemplo  2:  lw  $t1,  offset  ($t2)  

ISL  1  
AOC   27  
Execução  de  Instruções  

• 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  banco  
de  registradores.  O  valor  de  PC+4  é  somado  ao  resultado  da  extensão  do  
sinal  dos  16  bits  menos  significaSvos  da  instrução  (deslocamento)  deslocado  
de  dois  bits  à  esquerda.  O  resultado  dessa  soma  é  o  endereço  de  desSno  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  desSno  do  desvio  condicional  

ISL  1  
AOC   28  
Execução  de  Instruções  

• Exemplo  3:  beq  $t1,  $t2,  offset  

ISL   29  

Você também pode gostar