Arquitectura de Computadores

Notas de estudo

Alberto José Proença

1999/00

 

Índice geral

 Capítulos | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |

 

  1. Arquitectura interna dum processador simples - a unidade de controlo
  1. Revisão do datapath
  2. Sinais de controlo no datapath do MIPS
  3. Projecto da unidade de controlo
  4. Implementação da FSM da unidade de controlo
  5. Excepções e interrupções na arquitectura interna
  6. Análise da arquitectura do MIPS (versão reduzida)

 

O cap. 8 destas notas de estudo começou a abordar o assunto da arquitectura interna dum processador - o MIPS - por duas vias: a análise da estrutura duma ALU com funcionalidade idêntica à do MIPS, e posteriormente a análise da estrutura interna dum processador, apenas em termos do seu datapath. Neste capítulo, vai-se aprofundar o estudo da arquitectura interna dum processador - incluindo a unidade de controlo - e respectivas estratégias de implementação realistas e de acordo com os processadores no mercado.

A primeira parte do capítulo limita-se a rever matéria relevante, quer relacionada com capítulos anteriores, quer ainda numa perspectiva complementar aos conceitos adquiridos em disciplinas de Sistemas Digitais: análise da implementação dos diversos blocos constituintes duma arquitectura interna (tomando o MIPS como exemplo) - a ALU e sua unidade de controlo, o banco de registos, o acesso e estrutura da memória - e a identificação dos sinais de controlo e respectiva implementação de uma unidade de controlo para execução de instruções num único ciclo. Este assunto é tratado com detalhe no texto de apoio (ver 5.3 e B.5). Posteriormente analisa-se uma evolução da arquitectura interna, de modo a suportar uma unidade de controlo multi-ciclo, em que cada instrução é executada por vários passos ao longo de alguns ciclos de clock. Este assunto é tratado com detalhe no texto de apoio (ver 5.4).

Uma vez concluída a análise do funcionamento duma unidade de controlo - da arquitectura interna dum processador (MIPS) - vão-se analisar as alternativas de implementação dessa unidade de controlo: com lógica combinatória (em ROM ou PLA) e com registos de estado, ou com micro-memória e sequenciador (e respectivo microprograma). Este assunto é tratado com detalhe no texto de apoio (ver 5.5 e todo o Apêndice C). O estudo da influência das excepções na unidade de controlo (mais detalhes no texto de apoio em 5.6) completa este capítulo sobre a análise duma arquitectura interna.

 

  1. Revisão do datapath

Estrutura interna da ALU do MIPS

A análise da estrutura duma ALU de 32-bits em termos de circuitos lógicos básicos - gates AND, OR, NOT, e multiplexadores - foi feita na disciplina da ACI, e encontra-se exposta em 4.5.

As figuras 4.19 a 4.21, apresentadas na aula, resumem os aspectos relevantes para se introduzir a unidade de controlo da processador: a funcionalidade da ALU e a relação entre as operações que implementa e os sinais de controlo que permitem seleccionar essas operações. É esta ALU que é utilizada posteriormente quando se apresenta o datapath do MIPS.

 (Fig 4.21 Representação da ALU do MIPS)

Datapath do MIPS

A fig. 5.13 apresenta o datapath do MIPS que permite a execução das principais instruções aritméticas e lógicas - as do tipo-R - mais as de acesso à memória - lw e sw - e os saltos relativos - branch.

(Fig 5.13 O datapath duma arquitectura simples, versão reduzida do MIPS)

Uma análise do funcionamento destas instruções principais acompanhando o percurso que os sinais seguem no datapath desta figura, permite relembrar vários conceitos básicos, nomeadamente:

Formatos de instruções no MIPS

Uma breve revisão dos formatos mais usados no MIPS torna-se relevante nesta altura, para relembrar as posições relativas dos diversos campos; é a partir dos bits presentes em cada instrução que se retira toda a informação necessária para a descodificação e execução de cada uma delas. A fig. 5.20 mostra de novo os formatos das instruções do tipo-R, de acesso à memória, e de salto relativo. Esta visão facilita a compreensão e análise dos sinais presentes no datapath da figura apresentada acima, aquando da execução dessas instruções.

Estrutura interna do banco de registos do MIPS

A outra unidade funcional que ainda não foi analisada internamente é o banco de registos. A secção B.5 nas suas figuras B.18 a B.20 recorda a estrutura interna dum banco de registos com uma estrutura equivalente ao do MIPS. Ei-las:

 

Nestas figuras se mostra como é feita a selecção de cada um dos registos para as duas saídas existentes no banco de registos - para alimentarem as 2 entradas da ALU, por exemplo - e como é feita a operação de escrita nos flip-flops do registo que se seleccionou (i.e., como se inibe que o sinal de controlo de escrita chegue à entrada de clock dos flip-flops que não devem ser alterados).

Estrutura interna duma memória

Para se poder perceber as funções dos sinais de controlo de uma memória a partir do CPU, é vantajoso rever a estrutura interna duma memória. A fig. B.23 mostra a estrutura básica de uma memória estática de 4*2 bits, a qual permite relembrar como são efectuadas as operações de selecção de uma célula para sua leitura e para escrita. Ei-la:

As fig. B.21, B.22 e B.24 complementam a análise ao apresentarem a estrutura de uma memória estática de 32K*8 bits, quer em termos de actuação na operação de leitura para um barramento (i.e., com necessidade de colocar os bits dos circuitos de memória não seleccionados em tri-state), quer ainda na organização típica de uma SRAM como uma matriz quadrada ou quase-quadrada para uma mais fácil implementação no silício. No caso do exemplo apresentado - SRAM de 32K*8 - a memória está organizada numa linha de 8 matrizes de 512*64 bits, o que dá uma organização global de 512*512 bits. Eis as figuras referidas:

  1. Sinais de controlo no datapath do MIPS

Os sinais de controlo da ALU

Todos os formatos apresentados na fig. 5.20 são relativos a instruções que necessitam de usar a ALU durante a sua execução: para além das instruções aritméticas e lógicas, as de acesso à memória usam a ALU no cálculo do endereço de memória, e as de salto relativo, condicionais, usam a ALU para a comparação (através de uma subtracção com uso posterior do sinal zero).

De notar que todas as instruções aritméticas e lógicas do tipo-R na fig. 5.20 têm o mesmo valor nos 5 bits do opcode - o valor 0 - e que o processo que o MIPS usa para distinguir qual a operação a seleccionar na ALU num caso destes é o de usar 6 bits adicionais no formato de instrução para especificar qual a operação da ALU: o campo funct no formato de instrução. Nos restantes casos - acessos à memória e saltos relativos - os opcodes são distintos e os bits 0 a 5 no formato da instrução - que representam o campo funct nas instruções do tipo-R - são usados com outro tipo de informação (os 6 bits menos significativos dum endereço ou dum valor imediato).

Assim, para seleccionar a operação a efectuar, a ALU terá uma unidade de controlo própria, que funcionará de seguinte maneira:

Um resumo destas alternativas encontra-se na tabela da fig. 5.14, estando a tabela de verdade que define o comportamento da unidade de controlo da ALU representada na fig. 5.15; uma aproximação às duas é a seguir representada.

Instrução

Cód. Operação

ALU Op

Function code

ALU Control

Acção pretendida

load/store word

LW/SW

0 0

x x x x x x

0 1 0

Soma

branch equal

Branch equal

x 1

x x x x x x

1 1 0

Subtracção

add

Tipo-R

1 x

x x 0 0 0 0

0 1 0

Soma

sub

Tipo-R

1 x

x x 0 0 1 0

1 1 0

Subtracçaõ

AND

Tipo-R

1 x

x x 0 1 0 0

0 0 0

"E"

OR

Tipo-R

1 x

x x 0 1 0 1

0 0 1

"OU"

set-on-less-than

Tipo-R

1 x

x x 1 0 1 0

1 1 1

set-on-less-than

Esta tabela de verdade que define o comportamento da unidade de controlo da ALU tem diversas alternativas de implementação: gates, PLA, ROM. Contudo, dado ser uma tabela simples, aplicando algumas das regras de simplificação é possível chegar-se a um circuito com apenas 5 circuitos AND/OR de 2 entradas!

A fig. 5.18 (na 1ª edição do livro) ilustra essa implementação: a partir de 4 bits do campo funct (bits [4-0] do formato de instrução) e dos 2 bits ALUOp codificados a partir do campo opcode (bits [31-26] do formato de instrução), são criados os 3 bits do sinal que selecciona a operação a executar pela ALU.

Arquitectura interna completa do MIPS (versão mínima)

Uma vez apresentadas as estruturas internas de todos os blocos constituintes do datapath do MIPS a leitura da fig. 5.17 vem bem mais simplificada: a nova versão do datapath inclui já todos os multiplexadores bem como os sinais de controlo.

(Fig. 5.17 Datapath com os sinais de controlo identificados)

Uma análise da função dos 9 sinais de controlo - RegDst, RegWrite, ALUSrc, ALUOp (2), PCSrc, MemRead, MemWrite, MemtoReg - é feita na fig. 5.21, onde se clarifica qual o efeito de cada sinal, conforme se activa (i.e., se coloca a "1") ou não se activa (i.e., se coloca a "0").

Com a descrição dos sinais de controlo, já faz sentido apresentar o diagrama completo da arquitectura interna do MIPS (fig. 5.19) - o datapath e a respectiva unidade de controlo - embora na sua versão mínima (i.e., suportando apenas as instruções aritméticas/lógicas do tipo-R, as de acesso à memória para leitura e escrita de palavras, e as de salto condicional beq). Eis essa figura:

(Fig. 5.19 Diagrama completo da arquitectura interna duma versão mínima do MIPS)

A fig. 5.19, complementada da tabela de verdade que descreve o funcionamento da unidade de controlo (nas fig. 5.20), permite analisar com detalhe o funcionamento, passo a passo, das diversas instruções que esta arquitectura suporta (e ilustrada no texto de apoio através das figuras 5.21 a 5.26).

As instruções nesta arquitectura (versão mínima) são sempre executadas num único ciclo de clock, cujo período se inicia com a escrita dum novo valor no registo IP/PC e com a eventual escrita do resultado da operação anterior no registo seleccionado em rs ou rt .

Para uma melhor compreensão e visão temporal do funcionamento desta arquitectura é conveniente que a análise do modo de operação de cada uma das instruções se processe pelos seguintes 5 passos (conforme sugerido atrás): a busca da instrução da memória e o incremento do IP/PC; a selecção dos operandos nos registos; a execução de operações na ALU e/ou somador para cálculo de novo endereço; o acesso à memória para leitura ou escrita de valores; a escrita de resultados de volta no registo seleccionado no formato de instrução.

Implementação da unidade de controlo

A partir da tabela de verdade que descreve o funcionamento da unidade de controlo (já referido anteriormente) é possível implementar esta unidade de várias maneiras. A utilização de uma PLA pode servir de exemplo de revisão dos conceitos básicos de PLA em lógica combinatória (e revistos de novo em B.3).

Para completar a descrição desta versão mínima e de ciclo (de clock) simples, falta apenas juntar ao diagrama da fig. 5.19 os elementos que permitem a execução de saltos incondicionais: a construção do endereço de salto de 32 bits a partir do valor imediato de 26 bits (e que representa o endereço de uma palavra de 32 bits, alinhada na memória num endereço múltiplo de 4) presente no formato de instrução. Os 4 bits mais significativos são retirados do IP/PC (já depois de incrementado), os 26 seguintes vem da instrução, e os 2 menos significativos são colocados a 0. Novos sinais de controlo são também incluídos. A fig. 5.29 ilustra este novo diagrama:

(Fig. 5.29 A arquitectura interna da versão reduzida do MIPS com suporte a saltos incondicionais)

 

Novo datapath para unidade de controlo multi-ciclo

Para uma melhor compreensão das limitações, em termos de desempenho, de uma implementação desta arquitectura onde as instruções são sempre executadas num único ciclo de clock, o exemplo da pág 373 (e respectivas tabelas na pág 374) ilustra a sequência de utilização das unidades funcionais e o tempo requerido para a execução de cada tipo de instrução.

É patente nesta figura que, se quisermos calcular o tempo de execução que cada tipo de instrução necessia - face a um nº de pressupostos relativos aos tempos de execução nas diversas unidades funcionais - iremos encontrar uma relação de 1:4 (neste exemplo), entre a operação mais rápida (um jump) e a mais lenta (um load).

Para resolver esta limitação, poderíamos trabalhar com clocks de frequência variada, o que é uma tarefa complexa sob o ponto de vista da electrónica. Alternativamente, poder-se-ia utilizar um clock com um período menor - derivado dos atrasos básicos em cada uma das unidades funcionais - e adaptar o datapath a uma implementação onde a execução de instruções requeresse um número múltiplo de ciclos de clock para a sua concretização.

Nesta perspectiva, há que analisar o conjunto de operações em cada ciclo numa arquitectura multi-ciclo:

Desta análise pode-se concluir que é possível partilhar unidades funcionais do datapath anterior, desde que sejam usadas em ciclos de clock distintos.

Assim, o novo datapath terá as seguintes características, quando comparado com o anterior (fig. 5.30):

O diagrama do novo datapath com os sinais de controlo vem representado na fig. 5.32; a fig. 5.33 inclui ainda a unidade de controlo.

(Fig. 5.30 O novo datapath para suporte a uma implementação multi-ciclo)

 

(Fig. 5.32 O novo datapath com os sinais de controlo)

 

 

  1. Projecto da unidade de controlo

 Análise da execução de instruções passo-a-passo:

1. Busca da instrução

2. Descodificação da instrução e selecção de registos e cálculo do endereço de salto

3. Execução da instrução especificada em IR [31-26]

3A. Acesso à memória (cálculo do endereço de memória)

3B. Operação aritmética/lógica (tipo-R)

3C. Instrução de salto (verificação da condição)

4. Continuação da execução da instrução especificada em IR [31-26]

4Aa. Acesso à memória (para leitura)

4Ab. Acesso à memória (para escrita)

4B. Operação aritmética/lógica (escrita do resultado em registo)

5. Continuação da execução da instrução especificada em IR [31-26]

5A. Acesso à memória para leitura (escrita do valor lido em registo)

A fig. 5.33 mostra a arquitectura completa, enquanto a fig. 5.35 apresenta um resumo da execução de instruções passo-a-passo, conforma apresentado nas linhas acima.

 

(Fig. 5.33 A nova arquitectura multi-ciclo: o datapath e a unidade de controlo)

 

A máquina de estados da unidade de controlo

(Fig. 5.41 Visão de alto-nível da máquina de estados (FSM))

 

Análise detalhada da FSM da unidade de controlo:

1. Busca da instrução

2. Descodificação da instrução e selecção de registos e cálculo do endereço de salto

3A. Acesso à memória (cálculo do endereço de memória)

4Aa. Acesso à memória (para leitura)

4Ab. Acesso à memória (para escrita)

5A. Acesso à memória para leitura (escrita do valor lido em registo)

3B. Operação aritmética/lógica (tipo-R)

4B. Operação aritmética/lógica (escrita do resultado em registo)

3C. Instrução de salto (verificação da condição / incondicional)

 

Visão global

 

  1. Implementação da FSM da unidade de controlo

 

fig C.2

Tabela de próximos estados

fig C.8

Resumo das equações lógicas da unidade de controlo

fig C.3

Tabela de saídas de estado

fig C.7

Implementação da unidade de controlo usando uma PLA

fig C.9

Implementação alternativa da função próximo estado

Implementação da unidade de controlo por microprograma

fig C.15

Detalhe: lógica de selecção do próximo micro-endereço

fig C.11

Campos da micro-instrução

fig C.16

O microprograma para a unidade de controlo

fig 5.46

 

  1. Excepções e interrupções na arquitectura interna

 Exemplos

tabela pag 344

Acções a tomar:

Facilidades no MIPS:

fig pag A.30

Fig A-13

fig pag A.31

 

  1. Análise da arquitectura do MIPS (versão reduzida)