Академический Документы
Профессиональный Документы
Культура Документы
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?).
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.
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).
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.
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.
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.