Você está na página 1de 26

22

Captulo 3 O Processador: Caminho de Dados e Controle


O desempenho de um computador determinado por trs fatores principais: o nmero de instrues executadas, o perodo do clock e o nmero de ciclos gastos por uma instruo. O compilador e a arquitetura do conjunto de instrues determinam a quantidade de instrues executadas por um programa. Tanto o tempo do ciclo do clock quanto o nmero de ciclos por instruo so determinados pela implementao do processador. Este captulo descreve como construir o caminho de dados e a unidade de controle para duas implementaes diferentes do conjunto de instrues do processador MIPS, criado por Patterson e Hennessy.

3.1 Introduo
O estudo realizado neste captulo inclui o projeto de implementao de um subconjunto das instrues do processador MIPS. Este subconjunto composto por instrues de acesso memria load word (lw) e store word (sw), instrues lgicas e aritmticas (add, sub, and, or e slt) e instrues de desvio branch equal (beq) e jump (j). Consideramos este subconjunto de instrues representativo dos princpios fundamentais de um projeto de um caminho de dados e de uma unidade de controle. Isto porque qualquer conjunto de instrues possui pelo menos estas trs classes de instrues: as de acesso memria, as lgicas e aritmticas, e as de transferncia de controle. Lembre-se sempre que descrever uma arquitetura implica em definir quais so os seus componentes, a funcionalidade de cada um deles e como eles interagem entre si. Viso Geral da Implementao Parte do que necessrio ser realizado para implementar as instrues que tratam de nmeros inteiros, de acesso memria e de desvio no depende da classe de instrues que est sendo implementada. Para qualquer instruo necessrio primeiro busc-la na memria. Depois, pode ser necessrio usar os campos da instruo para selecionar os registradores a serem lidos. Aps estes passos, as aes realizadas para completar a execuo de uma instruo dependem da classe de instrues. Mesmo entre classes de instrues diferentes existem algumas semelhanas. Por exemplo, todas utilizam a ALU aps a leitura dos registradores. As instrues de acesso

23

memria usam a ALU para efetuar o clculo do endereo, as instrues lgicas e aritmticas executam a prpria operao e os desvios condicionais efetuam comparaes. Aps usar a ALU, as aes necessrias para completar a execuo das instrues de cada classe so diferentes. Uma instruo que referencia a memria precisa realizar o acesso memria. Nas instrues lgicas e aritmticas preciso armazenar o resultado produzido pela ALU num registrador. E, numa instruo de desvio pode ser necessrio modificar o endereo da prxima instruo a ser buscada da memria. A Figura 3.1 mostra uma viso de alto nvel de uma implementao do processador MIPS.
dados

PC

endereo

instruo

Reg #

ALU

endereo

Memria de Instrues

Banco de Registradores

Memria de Dados
dados

Figura 3.1. Viso abstrata da implementao de um caminho de dados.

No decorrer deste captulo esta viso refinada. Ela acrescenta, por exemplo, novas unidades funcionais e conexes entre as unidades, alm de uma unidade de controle para gerenciar as aes das diferentes classes de instrues. Antes de mostrar uma implementao mais detalhada discutimos alguns princpios de projeto da lgica do caminho de dados e da unidade de controle. Convenes da Lgica e Clock No projeto de um sistema necessrio decidir como a lgica que vai implement-lo deve operar e como o esquema do clock usado. Ao se projetar circuitos lgicos os sinais de controle ativos podem estar tanto no nvel de tenso alto quanto no baixo, de acordo com a necessidade. Neste texto usamos a representao de um sinal ativo quando ele est no nvel alto (1 lgico). As unidades funcionais implementadas no processador MIPS so construdas a partir de componentes (ou elementos) lgicos combinacionais e seqenciais. Nos componentes combinacionais as sadas produzidas dependem unicamente das entradas presentes num dado instante de tempo. Isto , para um dado conjunto de entradas a sada sempre a mesma. Os componentes combinacionais no armazenam informao.

24

Existem outros componentes que suportam o conceito de estado. Eles so conhecidos como componentes lgicos seqenciais. Um componente contm um estado se possuir uma memria interna, ou seja, se for capaz de armazenar informaes. O componente que armazena informao conhecido como elemento de estado. A sada de um elemento de estado fornece o valor que foi armazenado nele no ciclo de clock anterior. Os componentes seqenciais tm no mnimo dois valores de entrada e uma sada. Os dois valores de entrada so o clock e os dados de entrada. Estes componentes so conhecidos como seqenciais porque sua sada depende tanto de suas entradas quanto do estado interno armazenado anteriormente no elemento de estado. A metodologia de temporizao define quando os sinais podem ser lidos ou escritos. Se ocorrer uma tentativa de leitura e de escrita simultaneamente o resultado indeterminado. Assumimos que a metodologia de temporizao sensvel s transies ou sensvel s bordas do sinal de clock. Uma metodologia de temporizao baseada nas transies do sinal de clock permite que um elemento de estado seja lido e escrito dentro do mesmo ciclo de clock. A atualizao do estado armazenado somente nas transies no cria condies de corrida, o que evita a indeterminao dos valores dos dados. A Figura 3.2 mostra uma metodologia de temporizao baseada nas transies do sinal de clock.
Elemento de estado Lgica combinacional

Figura 3.2. Metodologia de temporizao.

No processador MIPS a maioria dos elementos combinacionais e de estado tm entradas/sadas de 32 bits. A maioria dos dados e todas as instrues tm tamanho de 32 bits. Primeiro, mostramos uma implementao bem simples do subconjunto de instrues. Ela baseada num nico ciclo de clock que grande o suficiente para atender todas as instrues consideradas (projeto monociclo). Assim, toda instruo comea sua execuo em uma transio ativa do clock e termina na prxima transio ativa do clock. Dessa forma, todas as instrues gastam o mesmo tempo para serem executadas. O tempo escolhido o da instruo mais demorada e deve obrigatoriamente ser igual ao tamanho do ciclo de clock. Este esquema mostrado por ser mais simples de entender. Porm, no implementado na realidade porque muito ineficiente. A segunda forma de implementao abordada mais realista. Cada instruo possui um tempo de execuo que varia de acordo com a quantidade de ciclos de clock necessrios a cada uma delas (projeto multiciclo).

25

3.2 Construo do Caminho de Dados


Num projeto de caminho de dados preciso examinar quais os componentes utilizados na execuo de cada uma das classes de instrues. Assim, iniciamos com os componentes do caminho de dados comum a todas as instrues. Em seguida, construmos, a partir deles, as diversas sees do caminho de dados para cada classe de instrues. Nesta construo so mostrados os respectivos sinais de controle associados aos componentes. Baseamos esta construo nos seguintes passos de execuo de uma instruo: busca, execuo e resultado. O passo de decodificao de uma instruo pertence seo de controle de um processador. Busca O primeiro passo de uma instruo o passo de busca. Ele comum a qualquer instruo. Para realizar a busca so necessrios trs componentes: dois elementos de estado e um somador. Um dos elementos de estado armazena instrues (memria de instrues) e o outro armazena o endereo da prxima instruo a ser executada (Program Counter - PC). O terceiro componente calcula o endereo da prxima instruo a ser executada (somador). A Figura 3.3 mostra a parte do caminho de dados usado na busca de uma instruo e no incremento do PC.

Somador

PC

Endereo de leitura Instruo

prximo endereo

Memria de Instrues

Figura 3.3. Parte do caminho de dados utilizada para armazenar instruo e incrementar o PC.

O PC um registrador de 32 bits que atualizado ao final de cada ciclo de clock. Por isso, no precisa de um sinal especfico para a sua atualizao. A tarefa do somador incrementar o valor do PC. Ele pode ser visto como uma ALU muito simples que s realiza operao de soma. O valor 4 numa das entradas do somador indica que a prxima instruo est armazenada 4 bytes depois do valor corrente do PC. Execuo de Instrues Lgicas e Aritmticas Todas instrues lgicas e aritmticas do processador MIPS precisam ler dois registradores, realizar a operao sobre o contedo dos registradores e escrever o resultado num terceiro registrador. Esta classe de instrues inclui operaes como add, sub, slt, and, or.

26

O conjunto dos registradores de 32 bits do processador MIPS forma uma estrutura conhecida como banco de registradores. Esses registradores podem ser lidos ou escritos. Alm dele, necessrio uma ALU para operar sobre os valores lidos dos registradores. A Figura 3.4 mostra a parte do caminho de dados usado na execuo de uma instruo lgica e aritmtica.
Instruo Reg lido # 1 Reg lido # 2 Reg a ser escrito Dado lido # 1 Zero ALU Resultado da ALU

Operao da ALU

Banco de Registradores
Dado lido # 2 Dado de escrita EscReg

Figura 3.4. Parte do caminho de dados utilizada na execuo der instrues lgicas e aritmticas.

O banco de registradores sempre coloca nas suas sadas o contedo dos registradores cujos nmeros aparecem nas entradas Reg lido #1 e Reg lido #2. No necessrio outro controle de entrada. As entradas relativas aos nmeros dos registradores tm 5 bits, para poder especificar um entre os 32 registradores, enquanto os barramentos de dados de entrada e sada tm 32 bits. A escrita em um registrador precisa ser indicada explicitamente. Isto feito ativando o sinal de controle de escrita (EscReg). O nmero do registrador que vai ser escrito e o sinal de controle de escrita precisam estar vlidos nas transies ativas do clock. A operao realizada pela ALU controlada por um sinal que contm 3 bits. A sada da ALU para deteco do valor zero usada para implementao de desvios condicionais. Execuo de Instrues de Load e Store Considere as instrues de load word e store word do processador MIPS, que tm a forma lw $t1, deslocamento($t2) ou sw $t1, deslocamento($t2). Elas calculam um endereo de memria somando o contedo de um registrador-base ($t2) ao nmero de 16 bits sem sinal armazenado no campo de deslocamento da instruo. O registrador $t1 armazena o dado que vai ser lido ou escrito na memria. Dessa forma, precisamos do banco de registradores e da ALU mostrados na Figura 3.4. Alm disso, precisamos de uma memria de dados e uma unidade de extenso de sinal para estender o campo de 16 bits do deslocamento para um valor de 32 bits com sinal. A Figura 3.5 mostra estes dois novos elementos combinados com os elementos da Figura 3.4.

27

A nova memria deve ter dois sinais para controlar a leitura (LerMem) e a escrita de dados (EscMem), duas entradas e uma sada. Uma das entradas para o endereo do dado e a outra para os dados a serem escritos. A nica sada para o dado a ser lido. A unidade de extenso de sinal tem uma entrada de 16 bits que, aps a extenso do sinal, transforma-se num resultado de 32 bits que disponibilizado na sua sada.

Instruo

Reg lido # 1 Reg lido # 2 Reg a ser escrito Dado lido # 1

Operao da ALU EscMem

Banco de Registradores
Dado lido # 2 Dado de escrita EscReg

Zero ALU Resultado da ALU

Endereo

Memria de Dados
Dado lido

16

Extenso de sinal

Dado a ser escrito LerMem

Figura 3.5. Parte do caminho de dados utilizada na execuo das instrues de load e store.

O nmero dos registradores de entrada do banco de registradores vem dos campos da prpria instruo, assim com o deslocamento. O valor especificado no campo de deslocamento aps ter seu sinal estendido torna-se a segunda entrada da ALU. Execuo de Instrues de Desvio Uma instruo de desvio condicional como, por exemplo, beq, possui trs operandos. Dois registradores cujos contedos so comparados, e um deslocamento de 16 bits usado no clculo do endereo alvo de desvio. Para implementao desta instruo, ento, precisamos calcular o endereo alvo do desvio. Esse endereo obtido somando o campo de deslocamento (com sinal estendido) da instruo ao valor armazenado no PC. Existem dois detalhes que precisam ser lembrados: a arquitetura do conjunto de instrues estabelece que a base para o clculo do endereo alvo do desvio igual ao valor do PC atualizado (PC + 4, passo de busca); e a arquitetura tambm define que o campo de deslocamento deve ser deslocado de 2 bits esquerda. Isto significa um deslocamento relativo palavra do processador. Este procedimento aumenta o alcance efetivo do campo de deslocamento por um fator de quatro.

28

A Figura 3.6 mostra o caminho de dados para uma instruo de desvio condicional.
PC + 4 (vindo da busca)
Soma Reg lido # 1 Reg lido # 2 Desl. 2 bits Somador

Endereo alvo do desvio condicional

Banco de Registradores
Dado de escrita

3
Dado lido # 1

Operao da ALU

Zero ALU Dado lido # 2 EscReg

Para lgica de controle do desvio condicional

16

Extenso Extenso de sinal de sinal

32

Figura 3.6. Parte do caminho de dados utilizada na execuo das instrues de desvio condicional.

Alm de calcular o endereo alvo do desvio condicional, necessrio determinar se a prxima instruo a ser executada segue imediatamente a instruo atual ou se a instruo armazenada no endereo alvo do desvio. Quando a condio verdadeira o endereo alvo do desvio calculado deve ser armazenado no PC. Caso contrrio, o valor do PC, incrementado no passo de busca, no deve ser substitudo. Para calcular o endereo alvo do desvio condicional, o caminho de dados possui uma unidade de extenso de sinal, igual ao da Figura 3.5, e um outro somador. Para a comparao necessrio utilizar o banco de registradores para fornecer para a ALU o contedo dos dois registradores que sero comparados. A ALU possui um sinal de sada indicando se o resultado calculado ou no igual a zero. Podemos enviar para a ALU um sinal de controle indicando a realizao de uma subtrao, por exemplo, para a condio de desvio da instruo beq. Se o sinal Zero da ALU estiver ativo os dois valores so iguais. A instruo de desvio incondicional opera substituindo os 28 bits menos significativos do PC atual (incrementado no passo de busca) pelos 26 bits da direita da instruo, deslocados de 2 bits. O deslocamento realizado com a simples concatenao de 00 no campo de endereo do desvio incondicional. Definidos os caminhos de dados para as classes de instrues lgicas e aritmticas, de acesso memria e de controle de fluxo, podemos combin-los em um nico caminho de dados. Alm disso, podemos acrescentar o controle para completar a implementao que est descrita na prxima seo.

29

3.3 Um Esquema Simples para Implementao


Esta seo trata de um esquema simples para implementar o subconjunto das instrues do processador MIPS. Construmos o caminho de dados completo a partir dos caminhos de dados abordados anteriormente para cada uma das classes de instrues, adicionando linhas de controle sempre que necessrio. Esta implementao abrange as instrues de acesso memria (lw e sw), as instrues lgicas e aritmticas (add, sub, and, or e slt) e de controle de fluxo (beq). Posteriormente, este projeto ampliado para incluir a instruo de desvio incondicional (j). O caminho de dados mais simples se prope a executar todas as instrues dentro de um nico perodo de clock. Por isso, nenhum dos recursos pode ser utilizado mais de uma vez por instruo. Assim, recursos que necessitarem de utilizao dentro do mesmo perodo de clock devem ser replicados. Esta uma das razes pelas quais separamos as memrias de instrues e de dados. Este tipo de projeto denominado projeto monociclo. Porm, quando os caminhos de dados definidos anteriormente forem combinados poderemos compartilhar alguns elementos que so utilizados em diferentes fluxos de execuo de instrues. Para compartilhar um elemento do caminho de dados entre classes de instrues diferentes devemos utilizar um multiplexador. O multiplexador um elemento combinacional que possui mltiplas conexes de entrada. Na sada do multiplexador apresentado somente um dos valores da entrada. O valor apresentado selecionado de acordo com os sinais de controle. O caminho de dados para as instrues lgicas e aritmticas e para as instrues de acesso memria so muito similares. As principais diferenas entre eles so: a segunda entrada da ALU corresponde ao contedo de um registrador, se a instruo for lgica e aritmtica, ou corresponde extenso do sinal do deslocamento fornecido pela instruo de acesso memria. o valor armazenado no registrador de destino vem da ALU (instruo lgica e aritmtica) ou da memria de dados (instruo de acesso memria). Exerccio Mostre como combinar esses dois caminhos de dados. Utilize multiplexadores e no duplique qualquer dos elementos que so comuns a cada caminho. Ignore os sinais de controle de seleo do multiplexador. Para combinar estes dois caminhos de dados, usando somente um banco de registradores e uma ALU, temos que obter uma forma de gerar somente um dado para ser apresentado segunda entrada da ALU, vindos de duas fontes diferentes. Da mesma forma,

30

temos que obter um dado para ser armazenado no banco de registradores vindos de fontes diferentes. Em ambas as entradas devem ser colocados multiplexadores, cujos sinais so denominados ALUFonte e MemReg, respectivamente. Essa combinao pode ser vista na Figura 3.7.
3 Reg # 1 Dado # 1 ALUFonte Dado # 2 Reg escrito

Operao da ALU
EscMem

Instruo

Reg # 2

Registradores
Dado escrito EscReg 16 32

0 M U X 1

Zero Resultado ALU

Endereo MemReg Dado lido

Memria de Dados
Dado escrito LerMem

0 M U X 1

Extenso de sinal

Figura 3.7. Caminho de dados combinando as instrues de acesso memria e lgicas e aritmticas.

O mesmo raciocnio deve ser utilizado para combinar o caminho de dados de todas as classes de instrues. A Figura 3.8 mostra o caminho de dados combinado que atende as instrues de acesso memria, lgicas e aritmticas e de desvio condicional.
0 M U X 1
4

Somador

Somador FontePC
Desl. 2 bits Reg # 1 Reg # 2 Dado # 1 ALUFonte 3 Oprao da ALU EscMem

PC

Endereo

Instruo [31-0]

Reg escrito

Zero Resultado ALU

Dado # 2

Memria de Instrues

Registradores
Dado escrito EscReg 16

0 M U X 1

Endereo

MemReg

Dado

Memria de Dados
Dado escrito LerMem

0 M U X 1

Extens. 32 sinal

Figura 3.8. Caminho de dados utilizado na execuo de todas as classes de instrues abordadas.

31

Controle do Caminho de Dados Atravs da Unidade de Controle Terminada a fase de combinao dos caminhos de dados individuais necessrio projetar a unidade de controle. A unidade de controle deve ser capaz de, a partir dos sinais de entrada, gerar os sinais de escrita para todos os elementos de estado, os sinais seletores de todos os multiplexadores e os sinais para o controle das operaes da ALU. Iniciamos o projeto da unidade de controle pela gerao dos sinais de controle da ALU. Controle da ALU A ALU possui trs entradas e so usadas somente cinco das oito possveis combinaes dessas entradas. A Tabela 3.1 mostra essas possveis combinaes. Entrada da ALU 000 001 010 110 111 Funo
AND OR

soma subtrao set less than

Tabela 3.1. Relao entre as entradas e as operaes da ALU.

Dependendo da classe de instrues a ALU executa uma destas cinco funes. Nas instrues lw e sw a ALU calcula o endereo de acesso memria. Para isso, a ALU s utiliza a operao de soma. Nas operaes lgicas e aritmticas a ALU executa uma das cinco funes dependendo do campo func (6 bits) da instruo. Na instruo de desvio condicional beq a ALU executa uma operao de subtrao. Podemos gerar os trs bits de controle da ALU usando uma unidade de controle pequena. Esta unidade recebe como entrada o campo func e um campo de controle de 2 bits, que denominamos ALUOp. O campo ALUOp indica se a operao de soma (00), para lw e sw, subtrao (01), para beq, ou se deve ser determinada pelo campo func (10), para instrues lgicas e aritmticas. A sada da unidade de controle da ALU um sinal de 3 bits que controla diretamente a ALU, gerando uma das cinco combinaes necessrias. Existem vrias maneiras de se implementar o mapeamento dos 2 bits do campo ALUOp e dos 6 bits do campo func nos 3 bits de controle da ALU. Observe que somente poucas combinaes das 64 possveis (2 bits ALUOp + 6 bits func) so realmente utilizadas. A tabela verdade, a seguir, mostra as combinaes que interessam (Tabela 3.2).

32

ALUOP Bit 1 0 x 1 1 1 1 1 Bit 0 0 1 x x x x x F5 x x x x x x x F4 x x x x x x x

Func F3 x x 0 0 0 0 1 F2 x x 0 0 1 1 0 F1 x x 0 1 0 0 1 F0 x x 0 0 0 1 0

Operao da ALU 010 110 010 110 000 001 111

Tabela 3.2. Tabela verdade com as combinaes dos sinais que devem ser gerados pe a unidade de controle da ALU.

Projeto da Unidade de Controle Para completar o projeto da unidade de controle importante considerar o formato das instrues do processador. A Figura 3.9 relembra o formato das instrues do processador MIPS para todas as classes de instrues que estamos considerando.
31-26 25-21 rs 25-21 rs 25-21 rs 20-16 rt 20-16 rt 20-16 rt 15-11 rd 10-6 shmat 5-0 func

Tipo R

0
31-26

15-0 endereo 15-0 endereo

lw/sw

35/43 31-26

beq

Figura 3.9. Formato de instrues do processador MIPS.

Considerando estes diferentes formatos podemos adicionar ao caminho de dados a identificao da instruo e um multiplexador extra. Este multiplexador deve ser colocado na entrada do registrador a ser escrito no banco de registradores. A entrada do multiplexador vem do campo rd [15-11], se a instruo for lgica ou aritmtica, e do campo rt [20-16], se a instruo for de acesso memria. Dessa forma, selecionamos qual dos campos da instruo usado para indicar o nmero do registrador a ser escrito. O sinal de controle deste multiplexador denominado RegDest. A Figura 3.10 mostra a adio do bloco de controle da ALU e do multiplexador.

33
0 M U X 1

Somador
4 Inst. [25-21]

Desl. 2 bits

Somador FontePC

Reg # 1 Reg # 2

Dado # 1 ALUFonte Dado # 2 0 M U X 1 EscMem

PC

Endereo

Inst. [20-16]
Instruo [31-0] 0 M U X Inst. [15-11] 1 RegDest

Memria de Instrues

Reg escrito

Zero Resultado ALU

Endereo

MemReg Dado 1 M U X 0

Registradores
Dado escrito EscReg

Memria de Dados
Dado escrito LerMem

Inst. [15-0]

Extenso de sinal Inst. [5-0]

Oper ALU

Figura 3.10. Adio do bloco de controle da ALU.

Observando a Figura 3.10 podemos atribuir valores a cada uma das linhas de controle, considerando o formato das instrues. A unidade de controle responsvel por gerar estes valores. Ela pode realizar esta tarefa baseada apenas no campo opcode da instruo, exceto para uma delas. A linha de controle FontePC a nica exceo. O valor dessa linha deve ser igual a 1 se a instruo for branch equal (ALU pode decidir sozinha) e a sada Zero da ALU, que usada nos testes de igualdade, for verdadeira. Portanto, para gerar o sinal de controle FontePC, precisamos colocar um sinal vindo da unidade de controle. Este sinal chamado DvC e colocado na entrada de uma porta AND junto com o sinal Zero produzido pela ALU. A Figura 3.11 mostra os 9 sinais que devem ser produzidos pela unidade de controle.
PC + 4
RegDest DvC LerMem MemParaReg ALUOp EscMem ALUFonte EscReg 0 M U X 1

Controle

Desl. 2 bits

Somador

Zero Resultado

ALU

Figura 3.11. Sinais emitidos pela unidade de controle e lgica para armazenamento do PC.

34

Exerccio Mostre, atravs de tabela-verdade, a definio de cada linha de controle (0, 1 ou dont care) para cada um dos opcodes das instrues. Ainda atravs de tabela-verdade, monte a funo de controle, para implementao monociclo, dos valores atribudos s linhas de controle dependendo da instruo. A Tabela 3.3, a seguir, mostra a definio dos sinais de sada produzidos pela unidade de controle para controlar a execuo dos diversos componentes do caminho de dados. Estes sinais so produzidos considerando cada uma das classes de instrues implementadas pela arquitetura exemplo (processador MIPS).
Instruo Tipo R lw sw beq RegDest 1 0 x x ALUFonte 0 1 1 0 MemReg 0 1 x x EscReg 1 1 0 0 LerMem 0 1 0 0 Escmem 0 0 1 0 DvC 0 0 0 1 ALUOp 1 0 0 0 0 0 0 1

Tabela 3.3. Tabela verdade para a definio dos sinais de sada da unidade de controle.

A Tabela 3.4 mostra a funo de controle agora relacionando os sinais de sada da unidade de controle com o cdigo de cada instruo do processador MIPS (entradas). Entrada/Sada Nome Sinal Op 5 Op 4 Entradas Op 3 Op 2 Op 1 Op 0 RegDest ALUFonte MemReg EscReg Sadas LerMem EscMem DvC ALUOp 0 ALUOp 1 Tipo R 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 lw 1 0 0 0 1 1 0 1 1 1 1 0 0 0 0 sw 1 0 1 0 1 1 x 1 x 0 0 1 0 0 0 beq 0 0 0 1 0 0 x 0 x 0 0 0 1 0 1

Tabela 3.4. Tabela verdade para a funo de controle associada ao cdigo das instrues.

35

Por simplicidade, deixamos de abordar at este ponto vrias instrues do conjunto de instrues do processador MIPS. Para exemplificar como podemos estender este projeto para incluir outras instrues, descrevemos nos pargrafos seguintes como inserir uma instruo de desvio incondicional no caminho de dados projetado anteriormente. O formato de uma instruo de desvio incondicional est mostrado na Figura 3.12.
31-26 25-0 endereo

jump

Figura 3.12. Formato da instruo de desvio incondicional do processador MIPS.

Esta instruo similar a de desvio condicional. Porm, produz o endereo alvo de desvio de forma diferente. Os 2 bits menos significativos so sempre iguais a zero (00). Os prximos 26 bits so fornecidos pela prpria instruo. Os 4 bits mais significativos so obtidos do PC corrente (PC + 4). Assim, o endereo alvo de desvio resultado da combinao de: 4 bits mais significativos do valor PC + 4, que so os bits de 31 a 28; 26 bits do campo imediato da instruo de desvio incondicional; e 2 bits 00. O sinal da unidade de controle DvI ativa o multiplexador que carrega o PC. A Figura 3.13 mostra a insero desta lgica no projeto monociclo.

26

Desl. 2 bits

28

32

1 0 M U X 0

PC + 4

Somador
Inst [25-0]

M U X 1 Somador Desl. 2 bits


DvI

PC

Endereo Instruo [31-0] Memria de Instrues DvC Zero

Figura 3.13. Insero da instruo de desvio incondicional no caminho de dados.

36

Finalmente, a Figura 3.14 ilustra o todo o caminho de dados, para todas as classes de instrues abordadas, junto com os sinais produzidos pela unidade de controle central e unidade de controle da ALU.
26
Desl. 2 bits

28

32 0 M U X 1

1 M U X 0

DvI

Somador
Desl. 2 bits

Somador

RegDest DvC LerMem Inst. [31-26] MemReg Controle ALUOp EscMem ALUFonte EscReg Inst. [25-21] Reg # 1 Reg # 2 Dado # 2 Reg escrito Dado # 1

PC

Endereo Instruo [31-0] Memria de Instrues

Inst. [20-16] 0 M U X 1

Zero 0 M U X 1 Resultado Endereo Dado lido

ALU

Inst. [15-11]

Registradores
Dado escrito

Memria de Dados
Dado escrito

1 M U X 0

Inst. [15-0]

Extenso Inst. [5-0] de sinal

Oper ALU

Figura 3.14.Caminho de dados completos junto com os sinais emitidos pela unidade de controle.

O projeto monociclo abordado possui um funcionamento correto e todas as instrues so executadas dentro de um nico ciclo de clock. O problema com este projeto sua ineficincia. A explicao para este fato est no tamanho do ciclo de clock utilizado para todas as instrues. Todas as instrues tm o mesmo tamanho de ciclo de clock. Por isso, o tamanho do ciclo deve ser grande o suficiente para suportar o maior atraso relativo aos componentes utilizados por uma determinada instruo. Em geral, as instrues de acesso memria possuem o maior tempo de execuo. Para ter uma noo do desempenho de um projeto monociclo considere a Tabela 3.5. Esta tabela relaciona o tempo de execuo de uma dada instruo (ns) de acordo com unidades funcionais utilizadas no caminho crtico de sua execuo.

37

Classe
Tipo R Load word Store word Branch Jump Busca (2) Busca (2) Busca (2) Busca (2) Busca (2)

Unidades funcionais utilizadas


Acesso a reg (1) Acesso a reg (1) Acesso a reg (1) Acesso a reg (1) ALU (2) ALU (2) ALU (2) ALU (2) Acesso a reg (1) Acesso a mem (2) Acesso a mem (2) Acesso a reg (1)

Tempo
6 ns 8 ns 7 ns 5 ns 2 ns

Tabela 3.5. Tabela que relaciona o tempo de execuo de instrues X unidades funcionais utilizadas.

Podemos perceber pelos tempos apresentados na Tabela 3.5 que as instrues possuem tempos de execuo bem diferentes dependendo da classe. Por exemplo, a instruo de jump consume de fato somente 2 ns, mas uma nova instruo s pode ser iniciada no prximo ciclo de clock. Como o ciclo tem tamanho de 8 ns, pois este o valor do maior tempo consumido por uma instruo (lw), so desperdiados 6 ns. O impacto da filosofia monociclo no desempenho pode ser desastroso. Este impacto depende da porcentagem de cada classe de instrues na execuo de um programa. As mquinas atuais no so monociclo. Existem outros fatores que contribuem para isso. Como o projeto monociclo pressupe que o ciclo de clock deve ser igual ao do piro caso no podemos usar tcnicas para reduzir os casos mais comuns. Este fato viola o princpio bsico de tornar o caso comum mais rpido. Alm disso, na implementao monociclo cada unidade funcional s pode ser utilizada uma vez a cada ciclo de clock. Sendo assim, necessrio duplicar algumas unidades funcionais. Isto demanda um aumento no custo de implementao. Para solucionar os problemas relacionados ao desempenho e ao custo do hardware, podemos usar tcnicas de implementao que tenham um ciclo de clock menor. Estes ciclos menores podem ser obtidos a partir dos retardos das unidades funcionais bsicas. Assim, vrios ciclos de clock so necessrios para a execuo de cada instruo. As prximas sees analisam este esquema alternativo de implementao, denominado multiciclo. Exerccios 1. Qual o efeito de manter em 0 lgico todos os sinais de controle dos multiplexadores no caminho de dados completo do projeto monociclo? Alguma instruo ainda continua funcionando? Elabore um raciocnio semelhante considerando agora com todos os sinais em 1 lgico. 2. A funo XOR (exclusive-or) utilizada com vrias finalidades. A sada desta funo verdadeira se exatamente uma das entradas verdadeira. Mostre a tabela verdade para a funo XOR com duas entradas e implemente esta funo em um circuito usando portas AND, OR e NOT.

38

3. Considere as seguintes unidades funcionais e seus respectivos tempos de retardo para a nossa implementao monociclo. Busca = 2 ns ALU = 2 ns Acesso a registradores = 1ns Somador PC + 4 = X ns Acesso memria = 2 ns Somador do desvio condicional = Y ns Qual seria o perodo de clock caso: X = 3 e Y = 5; X = 5 e Y = 5; e X = 1 e Y = 8. 4. Suponha que desejamos modificar a arquitetura do conjunto de instrues e que retiramos a capacidade de deslocamento para as instrues de acesso memria. Estas instrues devem se transformar em pseudo-instrues e devem ser implementadas por duas instrues se o deslocamento for diferente de zero. Por exemplo, addi $at, $t1, 104 lw $t0, $at Que mudanas devem ser feitas no caminho de dados monociclo e no controle para que essa arquitetura simplificada possa funcionar?

3.4 Uma Implementao Multiciclo


Podemos dividir a execuo de cada instruo em uma srie de passos que correspondem s operaes das unidades funcionais envolvidas. Podemos usar estes passos para criar uma implementao multiciclo. Neste tipo de implementao cada passo de execuo gasta um perodo de clock. A implementao multiciclo permite que uma unidade funcional seja utilizada mais de uma vez por instruo. Este fato ocorre porque a unidade funcional est sendo usada em diferentes ciclos de clock. Isso permite que se reduza a quantidade de hardware necessrio implementao por causa do compartilhamento. As vantagens da implementao multiciclo so: executar instrues em quantidades diferentes de perodos de clock e compartilhamento de unidades funcionais. A Figura 3.15 mostra uma verso abstrata do caminho de dados multiciclo.

IR
PC
Endereo Instruo ou Dado Memria Dado escrito

Reg # 1 Reg # 2 Reg escrito

Dado # 1

A R

MDR

Dado # 2

ALU

Registradores
Dado escrito

Figura 3.15. Viso abstrata do caminho de dados multiciclo.

39

Comparando esta figura com o caminho de dados monociclo podemos observar as


seguintes diferenas: uso de uma nica memria tanto para instrues quanto para dados; referncia a uma nica ALU e colocao de um ou mais registradores depois de cada unidade funcional para armazenar temporariamente o resultado calculado at que seja utilizado em um ciclo de clock subseqente. No final de um ciclo de clock todos os dados que precisam ser usados em ciclos subseqentes devem ser armazenados em um elemento de estado. Os dados a serem usados em outras instrues devem ser armazenados em elementos de estado visveis aos programadores (banco de registradores, PC ou memria). Portanto, a posio no caminho de dados dos registradores adicionais determinada por dois fatores: quais dados sero usados em ciclos de clock posteriores na execuo da instruo e quais as unidades funcionais cujo uso ficar restrito a um nico ciclo de clock. No projeto multiciclo supomos que o ciclo de clock compatvel com um acesso memria ou banco de registradores ou a uma operao da ALU. Assim, qualquer dado produzido por estas unidades funcionais deve ser armazenado em registradores (IR, MDR, A, B, e R). O IR necessita de um sinal de controle de escrita para armazenar a instruo durante todo o tempo de sua execuo. Os demais registradores no precisam de nenhum sinal de controle porque armazenam dados somente entre dois ciclos de clock. Como no projeto multiciclo existe o compartilhamento de unidades funcionais necessrio adicionar novos multiplexadores ou expandir os j existentes. Assim, para a nica memria necessrio um multiplexador para selecionar o endereo de acesso vindo do PC (instruo) ou do registrador (dado). Alm disso, para a ALU so necessrios dois multiplexadores, um em cada uma de suas entradas. Na primeira entrada da ALU so selecionados os caminhos vindos do registrador A ou do PC. Na segunda entrada da ALU, o multiplexador deve ser substitudo por outro multiplexador de 4 para 1. Ele seleciona entre os caminhos vindos do registrador B, a constante 4, o valor resultante da extenso de sinal e o valor para o clculo do endereo alvo de desvio condicional. A Figura 3.16 mostra o caminho de dados multiciclo para a execuo das instrues bsicas do processador MIPS abordadas at agora. Considerando que os multiplexadores e os registradores causam pouco impacto se comparados com a memria e somadores, estas modificaes contribuem para uma reduo significativa tanto no tamanho quanto no custo do hardware.

40

FonteALU_A LerMem EscMem IREsc RegDest


PC

EscReg
Reg # 1 Reg # 2 Reg escrito Dado # 2 Dado escrito Dado # 1

0 1 IouD

Endereo Instruo ou Dado Memria Dado escrito

IR
0 1

1
FonteALU_B
Zero

ALU

MDR

0 1 MemReg

B
4

Registradores

0 1 2 3

Controle ALU

Ext sinal

Desl 2 bits

ALUOp

Figura 3.16. Caminho de dados multiciclo.

O caminho de dados multiciclo exige ainda outros acrscimos para suportar os desvios condicionais e incondicionais. Existem trs possveis fontes para o valor a ser escrito no PC: a ALU produz o valor PC + 4 durante o passo de busca da instruo. Este valor pode ser armazenado diretamente no PC; o registrador R armazena o endereo alvo de desvio condicional calculado pela ALU e os 26 ltimos bits do IR, deslocados de 2 bits direita e concatenados com os 4 bits superiores do PC + 4, formam o endereo alvo de desvio incondicional. O PC sempre escrito durante um incremento normal e nos desvios incondicionais. Se a instruo for um desvio condicional, o PC incrementado substitudo pelo endereo alvo de desvio calculado pela ALU, se a condio for verdadeira. Assim, o controle precisa de dois sinais de escrita no PC, que so denominados PCEsc e PCEscCond. Da mesma forma que no projeto monociclo, precisamos adicionar portas lgicas para obter o sinal de escrita no PC, combinando os sinais PCEsc, PCEscCond e Zero (sada da ALU). Para determinar se o PC deve receber o endereo alvo de desvio num desvio condicional utilizamos uma porta AND, tendo como entradas os sinais Zero e PCEscCond. A sada da porta AND combinada, ento, com o sinal PCEsc (sinal de escrita incondicional) numa porta OR. A sada da porta OR conectada ao controle de escrita do PC. A Figura 3.17 mostra o caminho de dados multiciclo completo e sua unidade de controle. Observe os sinais de controle adicionais e o multiplexador para implementar a atualizao do PC.

41

PCEscCond PCEsc IouD LerMem EscMem MemReg IREsc


Desl 2 bits

FontePC ALUOp FonteALU_B FonteALU_A EscReg RegDest 0 1 2 0


Reg # 1 Reg # 2 Dado # 1

PC

0 1

Endereo Instruo ou Dado Memria Dado escrito

IR
0 1

1
Zero

Reg escrito

R
ALU
Dado # 2

MDR

0 1

B
4

Dado escrito

Registradores
Ext sinal

0 1 2 3

Controle ALU

Desl 2 bits

Figura 3.17. Caminho de dados multiciclo.

Como neste projeto so gastos vrios ciclos de clock diferentes. Dependendo da instruo necessrio um novo conjunto de sinais de controle. As Tabelas 3.6 (1 bit) e 3.7 (2 bits) mostram como estes sinais controlam o caminho de dados. Isto , o que cada sinal de controle determina quando est ativo e inativo. A Tabela 3.6 mostra os sinais de controle de um bit e seus efeitos quando esto ativos e inativos. Da mesma forma, a Tabela 3.7 mostra os sinais de controle de dois bits e seus efeitos.
Sinal RegDest EscReg FonteALU_A LerMem EscMem MemReg IouD IREsc PCEsc PCEscCond Inativo seleciona rt operando o PC dado vem de R PC usado para fornecer endereo seleciona rd Reg geral carregado com dado escrito operando o A Contedo da memria colocado na sada carrega dado na memria dado vem do MDR R usado para fornecer endereo Sada da memria escrita no IR PC atualizado PC atualizado se sada Zero estiver ativa Ativo

Tabela 3.6. Tabela dos sinais de controle com um bit.

42

Sinal ALUOp

Combinaes 00 01 10 soma subtrao

Significado

depende do campo func operando o B operando a constante 4 operando vem da extenso de sinal IR operando vem da extenso de sinal IR + 2 bits PC + 4 enviado ao PC endereo alvo de desvio produzido pela ALU (DvC) endereo alvo de desvio enviado ao PC (DvI)

FonteALU_B

00 01 10 11

FontePC

00 01 10

Tabela 3.7. Tabela dos sinais de controle com dois bits.

3.5 A Diviso da Execuo de Instrues em Ciclos de Clock


A anlise do que acontece em cada ciclo de clock numa execuo multiciclo define os sinais de controle e seus valores, que devem ser assumidos ao longo da execuo. A idia do projeto multiciclo melhorar o desempenho permitindo que cada instruo execute em diferentes quantidades de ciclos de clock. Alm disso, que o tamanho do ciclo de clock se reduz a uma operao da ALU, ou um acesso memria ou ao banco de registradores. O clock ter o tamanho do ciclo igual ao componente de maior tempo de retardo. Os passos de execuo de uma instruo e suas aes em cada passo so mostrados a seguir. Cada instruo necessita de 3 a 5 passos para ser executada. 1. Passo de busca da instruo. IR = Memria[PC]; PC = PC + 4; Sinais envolvidos LerMem 1 FonteALU_B IREsc 1 ALUOp I ou D 0 PCEsc FonteALU_A 0 FontePC

01 00 1 00

43 2. Passo de decodificao e busca do registrador. Neste passo ainda no conhecemos o que a instruo faz. Assim, s podemos realizar aes que sejam aplicveis a todas as classes de instrues. Neste passo enquanto a instruo est sendo decodificada podemos: a) supondo instrues do tipo R - ler os registradores rs e rt e armazen-los nos registradores temporrios A e B. A = Reg [IR[25-21]]; B = Reg [IR[20-16]]; b) supondo uma instruo de desvio condicional - calcular o endereo alvo de desvio. R = PC + extenso de sinal (IR[15-0] << 2); Sinais envolvidos Fonte ALU_A 0 (PC) FonteALU_B 11 (extenso de sinal deslocada) ALUOp 00 (soma) Aps este ciclo de clock a ao a ser realizada depende do contedo da instruo (decodificao). 3. Execuo. Clculo do endereo de acesso memria / efetivao do desvio incondicional. Neste ciclo a operao do caminho de dados fica determinada exclusivamente pela classe de instruo. A ALU est operando sobre os dados preparados no passo 2, realizando uma de suas trs funes. A funo depende da classe de instrues. Acesso memria R = A + extenso de sinal (IR[15-0]); Sinais envolvidos FonteALU_A 1 FonteALU_B 10 (seleciona como entrada extenso de sinal) ALUOp 00 (soma) Instrues do Tipo R R = A op B; Sinais envolvidos FonteALU_A 1 FonteALU_B 00 (seleciona B) ALUOp 10 (seleciona campo func que determina a operao)

44

Desvio Condicional Se (A = = B) PC R; Sinais envolvidos FonteALU_A 1 FonteALU_B 00 ALUOp 01 (subtrao) PCEscCond 1 FontePC 01 ( PC R) Desvio Incondicional PC PC (IR[31-28] | (IR[25-0] << 2); Sinais envolvidos PCEsc 1 FontePC 10 ( PC R) 4. Final da execuo das instrues de acesso memria e do Tipo R. Durante este passo uma instruo lw ou sw faz seu acesso memria, e uma instruo do tipo R escreve seu resultado no banco de registradores. Quando um valor recuperado da memria ele deve ser armazenado no MDR para ser acessado no prximo ciclo de clock. Acesso memria MDR = Memria[R]; Sinais envolvidos LerMem 1 lw ou Memria = R = B; EscMem IouD 1 sw 1 ( vem da ALU)

Instrues do Tipo R Reg [IR[15-11]] = R; Sinais envolvidos RegDest 1 EscReg 1 MemReg 0 5. Final do passo de leitura da memria. Reg [IR[20-16]] = MDR; Sinais envolvidos RegDest 0 EscReg 1 MemReg 1

45

A partir desta seqncia podemos determinar o que a unidade de controle precisa se realizar em cada ciclo de clock. Implementao do Ciclo de Clock No controle do caminho de dados multiciclo devem ser especificados os valores que os sinais devem assumir em qualquer ciclo de clock e os valores do prximo passo na seqncia de execuo. Existem duas tcnicas diferentes para especificar o controle. A primeira baseia-se em uma mquina de estados finitos, cuja representao pode ser feita graficamente. A segunda tcnica a microprogramao, j abordada no incio deste captulo. Ambas as tcnicas possuem representaes que podem ser implementadas usando portas lgicas, ROMs ou PLAs. A seguir abordamos a tcnica baseada em mquina de estados finitos.

3.6 Mquina de Estados Finitos


Este mtodo consiste na definio de uma srie de estados e na definio de regras para a transio entre os estados. As regras de transio so definidas pela funo prximo estado. Esta funo mapeia o estado atual e as entradas num novo estado. Ao usar uma mquina de estados finitos para especificar o controle cada estado, tambm, define um conjunto de sadas que estaro ativas quando a mquina estiver em tal estado. As sadas que no estiverem explicitamente ativas devero ser consideradas inativas. No caso do projeto multiciclo cada um dos estados corresponde essencialmente a um dos passos de execuo. Cada passo de execuo gasta um ciclo de clock. Considerando que os dois primeiros passos de execuo so iguais para qualquer instruo (busca e decodificao), os dois primeiros estados iniciais da mquina de estados finitos so iguais para qualquer instruo. Os passos de 3 a 5 diferem e dependem do cdigo de operao de cada instruo. Aps a execuo do ltimo passo, para qualquer instruo, a mquina de estados finitos retorna ao estado inicial, que busca uma nova instruo. A Figura 3.18 mostra uma representao abstrata dessa mquina de estados finitos. LerMem 1 Busca Decodificao IouD 0 IREsc 1 Estado 0 Estado 1 FonteALU_A 0
FonteALU_A 0 FonteALU_B 01 ALUOp 00 PCESc 1 FontePC 00

FonteALU_B 11 ALUOp 00

Referncia memria

Tipo R

Desvio

Desvio incondicional

Figura 3.18. Representao abstrata da mquina de estados finitos.

46

Mquina de Estados Finitos Cada uma das mquinas de estados finitos, para o passo de execuo, de cada uma das classes de instrues pode ser vista, a seguir, nas Figuras 3.19 (acesso memria), 3.20 (tipo R), 3.21 (desvio condicional) e 3.22 (desvio incondicional). Acesso memria
Do estado 1

Estado 2
FonteALU_A 1 FonteALU_B 10 ALUOp 00
Clculo do endereo de acesso memria

Op = lw Estado 3
LerMem 1 IouD 1

Op = sw Estado 5
EscMem 1 IouD 1

Estado 4

RegDest 0 EscReg 1 MemReg 1

Para o estado 0 Figura 3.19 Representao da mquina de estados finitos para instrues de acesso memria.

Instruo do Tipo R Estado 6

Do estado 1 FonteALU_A 1 FonteALU_B 00 ALUOp 10

Op = func

Estado 7

RegDest 1 EscReg 1 MemReg 0

Armazena resultado da operao no banco de registradores

Para o estado 0 Figura 3.20. Representao da mquina de estados finitos para instrues do tipo R.

47

Desvio Condicional
Do estado 1

Estado 8

FonteALU_A 1 FonteALU_B 00 ALUOp 01 PCEscCond 1 FontePC 01

Op = beq

Para o estado 0 Figura 3.21. Representao da mquina de estados finitos para instrues de desvio condicional.

Desvio Incondicional
Do estado 1

Estado 9

PCEsc 1 FontePC 10

Op = j

Para o estado 0 Figura 3.22. Representao da mquina de estados finitos para instrues de desvio incondicional.

Exerccios 1. Mostre como a mquina de estados finitos completa combinando todos os passos de execuo de todas as classes de instrues abordadas. 2. Acrescente ao caminho de dados multiciclo a instruo addi. Verifique a necessidade de algum componente de hardware adicional e sinais de controle. Mostre as modificaes necessrias na mquina de estados finitos. 3. Considere o mesmo enunciado da questo anterior e acrescente a instruo jal (jump and link) ao projeto multiciclo. 4. Mostre como a instruo jr (jump register) pode ser implementada simplesmente com algumas modificaes na mquina de estados finitos completa (lembre-se que $zero = 0 e est mapeado no registrador $0).
31-26 25-21 rs 20-16 rt 15-11 rd 10-6 shmat 5-0 func

jr

31-26

jal

25-0 valor imediato

31-26

25-21 rs

20-16

addi

rt

15-0 valor imediato