Você está na página 1de 28

Caminho de Dados e Controle Parte 1

Obs.: Os slides se baseiam no contedo associado ao livro de Patterson e Hennessy.

Projeto Caminho de Dados e Controle


Analisaremos, neste captulo, como podem ser construdas duas implementaes do conjunto de instrues MIPS 32. Concentraremos nossa ateno em algumas instrues representativas, mas importante destacar que os princpios aqui abordados so bastante genricos e permeiam a feitura de diversos tipos de processadores. Portanto, procure compreender a lgica subjacente aos exemplos discutidos.

Implementaes
Lidaremos com duas implementaes distintas uma monociclo e uma multiciclo. As diferenas entre ambas ficaro claras at o final do captulo. Consideraremos as seguintes instrues: lw, sw, add, sub, and, or, slt, beq e j (jump). essencial que voc reveja a utilidade e a sintaxe de cada uma, bem como os campos em linguagem de mquina. Essas instrues pertencem a trs classes: referncia memria, lgica e aritmtica e desvios.

Caractersticas Gerais
Executar instrues num computador digital algo que, como vimos, tem por base um movimento peridico de busca e execuo de instrues armazenadas numa memria. Sendo assim, natural que constatemos que a execuo de toda instruo comea de maneira similar: o valor do contador de programa (PC) enviado memria que abriga o cdigo e a instruo buscada. Os campos adequados da instruo obtida permitem (quando o caso) que sejam determinados os registradores que sero lidos. Aps esse incio, passam a ser fundamentais as diferenas entre os diversos tipos de instrues. No entanto, mesmo nas diferenas, pode haver similaridades: muito provvel, por exemplo, que, em algum ponto, uma ALU seja usada (voc consegue perceber por que isso verdade para todas as instrues expostas anteriormente, excetuando o salto incondicional?).

Viso Simplificada da Primeira Implementao

Vejamos qual a funo de cada bloco. Note que h vrias ligaes que precisam ser substitudas por multiplexadores. Note tambm que h elementos lgicos combinacionais e seqenciais voc pode apont-los? Isso requer uma metodologia de clocking criteriosamente elaborada.

Verso Simplificada da Primeira Implementao


Logo comearemos a ver em mais detalhe essa implementao. Desde j convm observar alguns pontos:
A instruo executada num nico ciclo de clock. Portanto, a execuo comea aps uma transio e termina na transio seguinte. Esse mtodo pode trazer problemas, pois o tempo de execuo de cada classe de instrues tende a ser diferente. Note a existncia de uma memria de instrues distinta da memria de dados. Essa idia se associa noo de arquitetura Harvard, e a adotaremos nessa primeira implementao especial por que ser necessrio acessar instruo e dados num mesmo ciclo.

Convenes Lgicas de Projeto


Lidaremos com elementos lgicos combinacionais e de estado. importante recordar a natureza e as caractersticas de cada classe. Em nosso projeto, precisaremos unir componentes das duas categorias. Portanto, definir um protocolo de leitura e escrita de dados imperativo: isso evita o risco de que haja algum tipo de conflito ou indeterminao. Lidaremos com uma metodologia baseada na transio (borda) do sinal de clock: os valores contidos num elemento de estado s podem ser modificados na transio do relgio. Isso significa que a informao contida nos elementos de estado por percorrer livremente circuitos combinacionais desde que os dados que precisam ser escritos imediatamente estejam prontos no ciclo seguinte.

Convenes Lgicas de Projeto


No mostraremos sinais de controle de escrita quando o elemento for escrito a cada transio ativa de clock. Algumas das linhas de dados que sero mostradas correspondem a barramentos, ou seja, a dutos pelos quais fluem mltiplos bits.

Construindo um Caminho de Dados


Um caminho de dados formado por elementos de operao e armazenagem no nvel do processador. Seu funcionamento regido por um outro componente: o controle. Comecemos a construir nosso caminho de dados destinado a executar instrues em um ciclo.

Unidades Essenciais

O Banco de Registradores
Cada registrador construdo a partir de flip-flops D (reveja o funcionamento desses dispositivos). O banco como um todo prov funcionalidades de acesso.

Implementao Simples

Implementao Simples
Note a presena do PC, cujo contedo atual passado memria de instrues (para que a instruo atual seja buscada). Note ainda que existe um caminho para incremento normal (por um valor fixo em 4) do PC, o que produz o endereo seguinte casa no haja um salto. Note que a instruo lida da primeira memria contm informaes sobre os registradores usados e tambm sobre endereos. Se nos recordarmos dos formatos de instruo vistos anteriormente, ficar claro por que isso ocorre.

Instrues tipo R
Os campos apropriados (operandos e destino) so passados ao banco de registradores. Os operandos so acessados e passados ALU (note que h duas sadas para dados no banco). O resultado da operao passa entrada de dados do banco de registradores. Na prxima transio de clock, o resultado gravado no registrador de destino (note que existe um sinal de controle EscreveReg).

Instrues lw e sw
Ambas indicam um registrador para dados (origem ou destino), um registrador-base e um offset de endereo. Os campos da instruo que indicam os registradores so passados ao banco (a escolha das entradas leitura ou escrita depende de a instruo ser um load ou um store). Note que os 16 bits de offset sofrem extenso de sinal (para atingir um formato de 32 bits) e so somados ao contedo da sada Dados da leitura 1. Com isso, o contedo do registrador-base somado ao offset, e o endereo de memria adequado gerado. De posse do endereo, preciso determinar se o contedo do registrador de destino ser armazenado na memria de dados (instruo store) ou se o contedo da memria de dados ser armazenado no registrador de destino (instruo load). Ambos os passos s podem ser dados na transio seguinte do clock, com a ajuda de sinais de controle de escrita (EscreveMem e EscreveReg).

Instrues beq e jump


Os ndices dos dois registradores cujo contedo deve ser comparado so encaminhados ao banco de registradores. O offset de 16 bits sofre extenso de sinal e um deslocamento de 2 bits esquerda (por qu?). Os valores dos dois registradores so enviados ALU para comparao. Caso eles sejam iguais, o bit Zero da ALU setado. Essa condio decisiva para que haja um desvio. O offset, por sua vez, j estendido e deslocado, somado a (PC) + 4. Com isso, gera-se o endereo que deve ser passado ao contador de programa em caso de desvio. Obs.: Para prover um jump, basta criar mais um caminho para acessar os 26 bits do endereo, ampli-lo para 28 bits com a adio de dois zeros direita (por qu?) e concatenar esses 28 bits com os 4 bits mais significativos de (PC)+4 para gerar o endereo da prxima instruo.

Implementao do Controle
J temos os recursos necessrios para executar as instrues mencionadas. No entanto, preciso comandar o caminho de dados para que ele cumpra a tarefa desejada a cada ciclo de clock. Esse papel cabe unidade de controle. Essa unidade precisa ler certos valores e, a partir deles, gerar sinais para controlar a escrita em elementos seqenciais, os multiplexadores e a ALU.

Controle da ALU
Vimos anteriormente como construir uma ALU simples e como gerar sua tabela de controle. Para gerar a combinao apropriada de 4 bits, precisaremos usar a informao contida no opcode e no campo funct (bits F5 a F0) de cada instruo. Num primeiro momento, no entanto, geramos os dois bits OpALU1 e OpALU0. Esses dois bits, juntamente com os bits F5 a F0, so passados a um circuito que implementa a seguinte tabela do canto inferior direito. Desse circuito surge os 4 bits que efetivamente controlam a ALU.

Controle Principal
Precisamos agora controlar os demais aspectos do funcionamento do caminho de dados. Para isso, algumas informaes so relevantes:
O opcode, encontrado nos bits 31:26 da instruo. Os dois registradores a serem lidos esto sempre nos campos rs e rt (bits 25:21 e 20:16). Isso vale para instrues tipo R, beq e store. O registrador de base para as instrues lw e sw corresponde a rs (bits 25:21). O offset para beq, lw e sw est sempre nos bits 15:0. O registrador de destino pode estar em dois lugares. Para instrues tipo R, ele corresponde ao campo rd (bits 15:11) e, para um lw, ele est no campo rt (bits 20:16). Isso indica que ser preciso lanar mo de um multiplexador para controlar o valor passado ao banco de registradores.

Caminho de Dados e Controle

Sinais
RegDst: Quando inativo, faz com que o ndice do registrador de destino venha do campo rt (bits 20:16). Quando ativo, faz com que venha do campo rd (bits 15:11). EscreveReg: No tem efeito quando inativo. Quando ativo, permite que haja escrita no banco de registradores. OrigALU: Quando inativo, faz com que o segundo operando da ALU venha da sada do banco de registradores. Quando ativo, faz com o segundo operando seja determinado pela extenso de sinal dos 16 bits menos significativos da instruo. OrigPC: Quando inativo, faz com que o valor do PC seja substitudo por (PC)+4. Quando ativo, permite que o valor associado a um desvio seja carregado no PC. A lgica de sua gerao (que no feita diretamente pela unidade de controle) envolve o sinal Branch e o sinal Zero da ALU. LeMem: Quando inativo, no tem efeito. Quando ativo, permite que o contedo da memria de dados indicado pela entrada de endereo seja passado sada Dados da leitura. EscreveMem: Quando inativo, no tem efeito. Quando ativo, carrega o valor da entrada Dados para escrita no endereo indicado na entrada da memria de dados. Memparareg: Quando inativo, faz com que o valor enviado entrada Dados para escrita do banco de registradores venha da ALU. Quando ativo, faz com que o valor enviado a tal entrada venha da memria de dados.

Operao do Caminho de Dados Instruo tipo R


Suponhamos que desejemos executar a instruo add $t1, $t2, $t3. Os passos essenciais sero (mais ou menos na ordem do diagrama apresentado):
A instruo buscada e o valor PC+4 calculado. Dois registradores, $t2 e $t3, so lidos e os sinais de controle so calculados. A ALU opera sobre os dados contidos nos registradores de acordo com a natureza da instruo que se deseja executar. O resultado da ALU escrito no banco de registradores (na posio correspondente a $t1).

Operao do Caminho de Dados Load


Vejamos agora como seria executada a instruo lw $t1, offset($t2).
A instruo buscada e o valor PC+4 calculado. O valor do registrador $t2 lido do banco. A ALU calcula o endereo com a ajuda desse valor e do offset com sinal estendido. O endereo calculado usado para acessar a memria de dados. Os dados so escritos no banco de registradores (mais especificamente, em $t1).

Operao do Caminho de Dados Beq


beq $t1, $t2, offset A instruo buscada e o valor PC+4 calculado. Dois registradores, $t1 e $t2 so lidos. A ALU compara os dois valores e o bit Zero calculado. O valor PC + 4 somado ao valor do offset com extenso de sinal e deslocamento de 2 bits para gerar o endereo de destino. O bit Zero usado para definir se o salto ser efetivamente realizado. Isso define o valor a ser armazenado no PC.

Mais Detalhes - Controle


Nesse caso, o controle produzido por circuitos combinacionais que recebem as informaes relevantes da instruo (opcode, funct) e geram os diversos sinais. De novo, importante tomar cuidado com o momento de ler e escrever dados, e no podemos nos esquecer de que o perodo de clock precisa ser determinado a partir das caractersticas de fluxo da informao no caminho de dados. Poderamos pensar em usar perodos de clock diferentes para instrues distintas, mas isso seria deveras complexo. O remdio passa a ser adotar um perodo de clock que acomode o maior tempo de propagao possvel. Nesse caso, acabamos engessados, e se torna impossvel pensar, por exemplo, em princpios como torne o caso comum mais eficiente.

Um Exemplo
Um exemplo pode tornar as coisas mais claras. Suponhamos que seja necessrio levar em conta os seguintes tempos de operao:
Unidades de memria: 200 ps ALU e somadores: 100 ps Banco de registradores (leitura e escrita): 50 ps Multiplexadores, Controle, PC, Extenso de Sinal e Fios: sem atraso.

Um Exemplo
Comparemos duas implementaes: a implementao monociclo que vimos e uma implementao que use um perodo de clock diferente para cada instruo. Os tempos exigidos por cada classe so: Tipo R: 200 + 50 + 100 + 50 = 400 ps Load: 200 + 50 + 100 + 200 + 50 = 600 ps Store: 200 + 50 + 100 + 200 = 550 ps Branch: 200 + 50 + 100 = 350 ps Jump: 200 ps O mix de instrues formado por 25% de loads, 10% de stores, 45% de operaes da ALU, 15 % de desvios e 5% de jumps.

Um Exemplo
Para a mquina de clock nico, o perodo do ciclo ter de ser igual a 600 ps (pior caso instruo lw). Para a mquina com diferentes perodos de clock, teremos o seguinte valor mdio para o perodo do ciclo: 600 x 0,25 + 550 x 0,1 + 400 x 0,45 + 350 x 0,15 + 200 x 0,05 = 447,5 ps. Isso mostra que o desempenho da CPU com clock varivel 1,34 vezes o desempenho associado implementao que tem por base o maior tempo de execuo. Est ilustrada a principal dificuldade associada ao uso de uma implementao monociclo. Essa dificuldade seria ainda mais decisiva caso considerssemos instrues mais complexas.