Você está na página 1de 32

Arquitetura de Computadores

COMPUTADOR SEQUENCIAL

O computador conhecido como do tipo von Neumann, ou máquina IAS, foi


projetado e construído no Instituto de Estudos Avançados de Princeton (Princeton
Institute for Advanced Studies). Essa máquina, que foi completada em 1952, é o
modelo de todos os computadores subsequentes de propósito geral. A estrutura dessa
máquina foi delineada por von Neumann da seguinte forma:
1) Se a máquina é um computador, ela deve realizar operações aritméticas básicas
mais frequentes, que são adição, subtração, multiplicação e divisão. É portanto
razoável que contenha unidades especializadas para essas operações. Essa parte
constitui a primeira parte específica: CA;
2) O controle lógico do dispositivo, que é a própria sequenciação das operações,
pode ser realizado mais eficientemente por uma unidade de controle centralizada:
CC;
3) Qualquer máquina que deve realizar uma sequência complexa e longa de
operações deve ter uma memória considerável. Essa memória constitui a terceira
parte específica: M;
As três partes específicas CA, CC e M, correspondem aos neurônios associativos do
sistema nervoso humano. Falta ainda discutir os equivalentes aos neurônios
sensoriais ou aferentes e aos neurônios motores ou eferentes. São as unidades de
entrada (sensorial) e saída (motora) do dispositivo, chamadas de meio de registro
externo: R;
4) A máquina deve ter unidades para transferir informações de R para as partes
específicas CA, CC e M, que formam a entrada, a quarta parte específica: I; e
5) A máquina deve ter unidades para transferir de suas partes específicas CA, CC e
M para R. Essas unidades formam a saída, a quinta parte específica: O.

Com raras excessões, os computadores atuais tem essa estrutura e


função geral e então são referidos como máquinas do tipo von Neumann.
Essencialmente, o que caracteriza essas máquinas é o programa armazenado
na memória, junto com os dados. O programa é constituído por um conjunto
de instruções, e essas instruções são armazenadas em endereços
subsequentes, ou sequenciais, na memória. Isso significa que as instruções
são executadas na sequência de armazenamento na memória, com excessão
dos casos de imposição de quebra dessa sequência, através de instruções de
salto, ou interrupção. Essa memória em que as instruções e os dados são
armazenados é denominada memória principal.

MEMORIA

PRINCIPAL

Endereco
Instrucoes
e
dados

UNIDADE DE
UNIDADE DE
CONTROLE FLUXO DE
DADOS MBR MAR

PC
IR

Circuitos de
Aritmetica e
Linhas Logica
de
controle
Endereco

Circuitos
Dispositivos
de MQ
AC
de
Controle
Sinais

Entrada/Saida
Dados

Oscilador Timing

Figura 1. Diagrama simplificado do computador IAS.

A seguir será apresentado o computador IAS, com pequenas alterações,


reduzindo o tamanho da palavra de memória de 40 para 20 bits, e adotando o sistema
binário. Isso significa que uma palavra de 40 bits contendo duas instruções, do IAS,
foi simplificado para uma palavra de 20 bits contendo apenas uma instrução. As
instruções de salto que faz referência a uma das duas instruções no IAS também
foram excluídas.
A Fig. 1 mostra um diagrama simplificado do computador, com a Unidade de
Fluxo de Dados, Unidade de Controle , Dispositivos de Entrada/Saída e Memória
Principal. Nele são notados os seguintes registradores:

a) MBR (Memory Buffer Register): contem uma palavra que deve ser escrita na
memória ou uma palavra lida da memória;
b) MAR (Memory Address Register): especifica o endereço de memória para a
leitura ou escrita de uma palavra contida no MBR;
c) IR (Instruction Register): Contem o opcode de 8 bits de uma instrução que está
sendo executada;
d) PC (Program Counter): Contem o endereço da instrução a ser lida da memória; e
e) AC (Acumulador) e MQ(Multiplicador-Quociente): Empregados para manter
temporariamente os operandos e resultados de operações realizadas pela ULA.
Por exemplo, o resultado de uma multiplicação de dois números de 20 bits é um
número de 40 bits; os 20 bits mais significativos são armazenados no AC e os
bits menos significativos no MQ.

O computador IAS é constituído de uma memória de 4096 endereços de


armazenamento, chamados de palavras, de 20 dígitos binários cada. Cada número é
representado por um bit de sinal e 19 bits de valor (Fig.2).

0 1 19

Figura 2. Representação numérica.

0 7 8 19

Figura 3. Formato de uma palavra de memória contendo uma instrução.

Uma palavra pode também conter uma instrução de 20 bits, com um formato
consistindo de um código de operação de 8 bits (opcode) especificando a operação a
ser realizada e um endereço de 12 bits designando uma das palavras da memória
(numeradas de 0 a 4095), Fig. 3.
A unidade de controle opera o computador sequencial fazendo as buscas de
instruções da memória e as execuções, uma por vez. Um computador sequencial
opera realizando repetitivamente os ciclos de instrução. Cada ciclo de instrução
consiste de dois outros ciclos: de busca da instrução (instruction fetch) e execução
(instruction execution). Durante o ciclo de busca, o opcode da próxima instrução é
carregada no IR e a parte referente ao endereço é carregada no MAR. Essa instrução
é obtida da memória carregando a palavra no MBR, e então, para IR e MAR.
Uma vez que o opcode se encontra no IR, o ciclo de execução é realizado. O
circuito de controle decodifica o opcode e executa a instrução enviando os sinais de
controle apropriados para fazer com que os dados sejam movidos e a operação seja
realizada pela ULA.
A Tabela 1 mostra um conjunto de instruções do IAS agrupadas em:
a) Transferência de dados: move os dados entre a memória e os registradores da
ULA; ou entre dois registradores das ULA;
b) Salto incondicional: normalmente, a unidade de controle executa instruções em
sequência de armazenamento na memória. Essa sequência pode ser alterada por
uma instrução de salto. Essa instrução facilita operações de repetição;
c) Salto condicional: o salto pode ser dependente de uma condição, permitindo a
existência de pontos de decisão;
d) Aritmética: operações realizadas pela ULA; e
e) Modificação de endereço: permite que os endereços sejam computados pela ULA
e então inseridos em instruções armazenados na memória. Isso permite que um
programa tenha uma considerável flexibilidade de endereçamento.
As instruções são mostradas em código binário do opcode, e em forma
simbólica, também conhecida como mnemônico. Junto ao mnemônico é especificado
também o operando, que corresponde ao campo de 12 bits. A parte referente ao
opcode (8bits) especifica qual das instruções deve ser executada. A parte referente ao
endereço (12 bits), M(X) especifica qual dos 4096 endereços de memória é
envolvido na execução da instrução, ou MQ representa o uso do registrador MQ .

Tabela 1. Conjunto de Instruções do IAS


Tipo de Instrução Opcode Representação Simbólica Descrição
Transferência de Dados 00001010 LOAD MQ Tranfere o conteúdo do registrador MQ
para o acumulador AC

00001001 LOAD MQ,M(X) Transfere o conteúdo da posição de


memória X ao MQ

00100001 STOR M(X) Transfere o conteúdo do acumulador para a


posição de memória X
00000001 LOAD M(X) Transfere M(X) para o acumulador

00000010 LOAD –M(X) Transfere –M(X) para o acumulador

00000011 LOAD | M(X) | Transfere o valor absoluto de M(X) para o


acumulador

00000100 LOAD - | M(X) | Transfere - | M(X) | para o acumulador

Salto Incondicional 00001101 JUMP M[X] Toma a próxima instrução do endereço


M[X]

Salto Condicional 00001111 JPOS M(X) Se o número contido no acumulador é


positivo, tomar a próxima instrução de
M(X)

Aritmética 00000101 ADD M(X) Somar M(X) ao AC; colocar o resultado


em AC

00000111 ADD | M(X) | Somar | M(X) | ao AC; colocar o resultado


em AC

00000110 SUB M(X) Subtrair M(X) de AC; colocar o resultado


em AC

00001000 SUB | M(X) | Subtrair | M(X) | de AC; colocar o


resultado em AC

00001011 MUL M(X) Multiplicar M(X) por MQ; colocar os bits


mais significativos em AC e os bits menos
significativos em MQ

00001100 DIV M(X) Dividir AC por M(X); colocar o quociente


em MQ e o resto em AC

00010100 LSH Multiplicar o acumulador por 2, isto é,


deslocar uma posição à esquerda

Dividir o acumulador por 2, isto é, deslocar


00010101 RSH uma posição à direita
Modificação de 00010010 STOR M(X,8:19) Substituir o campo de endereço de M(X)
Endereço pelos 12 bits mais à direita de AC

CICLO DE INSTRUÇÕES

Um computador interpreta as instruções, num período denominado


ciclo de interpretação de instrução, ou ciclo de instrução, que corresponde a
uma sequência de pequenos passos discriminados a seguir:
1) busca de instrução da memória para o registrador de instrução;
2) atualização do contador de programa para que o mesmo aponte
para a próxima instrução na memória;
3) determinação do tipo de instrução;
4) busca do operando, se houver, carregando um dos registradores;
5) execucão da operação (soma, subtração, etc.);
6) armazenamento do resultado; e
7) volta para o passo 1 para iniciar a interpretação da instrução seguinte.

Nota-se que cada tipo de instrução apresenta diferenças nos passos de 4 a 6;


sendo porém, coincidentes nos demais passos.
O primeiro passo corresponde à operação de busca da instrução na memória
apontada pelo contador de programa. Nota-se que no início da interpretação de uma
instrução, o contador de programa deve conter o endereço da instrução na memória.
A instrução lida da memória é carregada no registrador de instrução, IR.
O passo seguinte corresponde à atualização do contador de programa,
PC, para que o mesmo aponte para a próxima instrução da memória. Esse
passo tem o conceito de computador sequencial implicitamente embutido,
pois o que é feito normalmente é incrementar o contador de programa, ou
somar um ao conteúdo anterior, para que o conteúdo do mesmo seja o
anterior acrescido de um, apontando, portanto, para a próxima palavra
contígua na memória principal.
O terceiro passo corresponde à análise do campo de código de operação (opcode)
da instrução. Essa análise pode ser feita num decodificador, quando se usa uma
unidade de controle fixo (hardwired), ou através de microinstruções, quando se usa
uma unidade de controle microprogramada.
Os passos 4,5 e 6, são diferentes para cada tipo de instrução, sendo portanto
necessária uma descrição do conjunto de instruções do computador.
O último passo é a volta para o início do ciclo de interpretação de instruções.
A Fig. 4 mostra alguns exemplos de execução de instrução. Nota-se que cada
operação requer vários passos. A operação de multiplicação requer 19 suboperações,
uma para cada posição de bit, exceto o bit de sinal.
INICIO

MAR <-- PC
CICLO DE BUSCA DE INSTRUCAO

MBR <-- M[MAR]

IR <-- MBR(0,7)
MAR <-- MBR(8,19)

PC <-- PC + 1

DECODIFICACAO DO OPCODE

<-------- Salta SE AC>0 SOMA


Demais salta
instrucoes
CICLO DE EXECUCAO

MBR <-- M[MAR]


Sim
AC > 0

Nao AC <--MBR
PC <-- MAR

----
<

Figura 4. Diagrama de Fluxo de Interpretação Parcial de Instruções do IAS.

Para elucidar graficamente o fluxograma de interpretação de


instruções do IAS, apresenta-se na Fig.5 um diagrama alternativo do
computador IAS.
MEMORIA

Endereco
PRINCIPAL

MAR
Instrucoes
e
dados

UNIDADE DE UNIDADE DE
CONTROLE MBR FLUXO DE
DADOS

Endereco
IR PC

Dispositivos
Decodificador
Linhas de
de
controle Entrada/
AC MQ Saida

Dados
Circuitos

de
Circuitos de
Controle Aritmetica e
Sinais

Logica

Oscilador Timing

Figura 5. Diagrama alternativo do computador IAS.

No diagrama da Fig.5 nota-se a inclusão dos multiplexadores


descrevendo com mais detalhes o fluxo de dados, em relação a Fig. 1. Na
Unidade de Controle foi acrescentado o decodificador que recebe como
entrada o opcode da instrução, e cada opcode indica uma saída distinta para
o ciclo de execução. Além disso foi acrescentado o oscilador e o circuito de
timing, que é comum a todos os sistemas digitais síncronos.

EXEMPLO DE INTERPRETAÇÃO DA INSTRUÇÃO DE SOMA

Para facilitar a compreensão do fluxo de informações para a busca da


instrução, mostra-se na Fig.6 os elementos envolvidos. A Tab. 2 mostra o
conteúdo dos registradores durante o ciclo de busca, para o caso em que o
valor do contador de programa é igual a 20; a instrução contida no endereço
correspondente é ADD M(X) onde o endereço do operando é igual a 40. O
opcode da instrução em binário é então 00000101, que corresponde a 5 em
decimal.

Endereco

MAR
Instrucao

MBR

IR PC

Figura 6. Elementos do computador envolvidos na busca da instrução.

Tabela 2. Valores dos registradores durante o ciclo de busca de instrução. Os


valores dos registradores estão em ordem cronológica crescente.
operações PC MAR MBR MBR IR
(0,7) (8,19)
Fim do ciclo anterior 20 XX XX XX XX
MAR ß PC 20 20 XX XX XX
PC ß PC + 1; 21 20 XX XX XX
MBR ß M[MAR] 21 20 5 40 XX
IR ß MBR(0,7); MAR ß MBR (8,19) 21 40 5 40 5

A instrução de soma consiste em realizar a adição do conteúdo do


acumulador com um conteúdo de memória. O resultado é carregado no
acumulador.
Nota-se que nessa instrução existem dois operandos, sendo que um
deles é o conteúdo do acumulador. Esse operando já está pronto para ser
usado, no início da interpretação da instrução, e se chama operando
implícito. O segundo operando deve ser lido na memória, cujo endereço é
fornecido pelo campo de operando da instrução. Após a busca do operando
na memória, o mesmo fica carregado no registrador MBR. Nesse momento é
possível iniciar o subciclo correspondente à execução da operação soma.

Endereco

MAR
Instrucoes
e
dados

MBR

IR

AC

Circuitos de
Aritmetica e
Logica

Figura 7. Elementos envolvidos na execução da instrução soma.

A Fig. 7 mostra os elementos envolvidos na execução da instrução soma.


Para a ilustração dessa execução apresenta-se na Tab.3 os valores dos
registradores nesse ciclo. É considerado que o valor inicialmente contido no
acumulador é igual a 80 , e o valor contido na memória, M(X), é igual a 50.

Tabela 3. Valores dos registradores durante o ciclo de execução de soma, em


ordem cronológica crescente.
Operações IR MAR MBR AC
Fim do ciclo de busca de instrução 5 40 5-40 80
MBR ß M[MAR] 5 40 50 80
AC ß AC + MBR 5 40 50 130
MICROOPERAÇÕES

Uma operação mínima de transferência entre registradores no computador é


denominada microoperação. Uma microoperação é realizada num período
de relógio do computador, e e´portanto indivisível em suboperações. Um
exemplo de microoperação é a transferência de um dado do MBR para o AC:
AC ß MBR.

NOTAÇÃO RTN (REGISTER TRANSFER NOTATION)

Para facilitar a descrição da seqüência de microoperações no


computador, usamos uma notação denominada Register Transfer Notation, ou
simplesmente RTN, que consiste numa notação do tipo:
condição : ação 1; ação 2 …; ação n.

A condição explicita o instante em que as ações são tomadas e as


ações são as microoperações, ou outros sinais de controle disparados naquele
instante. Exemplo: E.ADD.T1: MBR ß M[MAR].
No exemplo acima, a carga do MBR com o conteúdo de memória é
executada no subciclo T1, do ciclo de execução E, da instrução ADD (soma ).
Além de uma microoperação, uma ação pode ser o acionamento de
um sinal de controle, como iniciaWR, para ativar o sinal de escrita na
memória, fimWR para desativar o sinal de escrita, Fig. 8, e recicla, para
reiniciar o ciclo de interpretação de instrução. Como exemplo, no subciclo T2
da instrução ADD, tem-se as seguintes operações em RTN:
E.ADD.T2: AC ß AC + MBR; recicla.
MEMORIA
PRINCIPAL
IniciaWR
J Q

Ende reco
Clock
K Q’ READ/WRITE’
FimWR

Instrucoes
e
dados

IniciaWR FimWR

Figura 8. Controle de escrita da memória.

PROJETO DA UNIDADE DE CONTROLE HARDWIRED

O computador a ser projetado tem uma unidade de controle fixa


(hardwired), constituída de um decodificador e um circuito combinatório que gera os
sinais de controle. Esses sinais de controle devem ser interligados aos pontos de
controle cuja maioria se encontram numa outra unidade denominada fluxo de dados.
A unidade de controle recebe como entrada o opcode, e os sinais de sincronismo,
gerados pelo circuito de temporização (timing ), além das sinalizações provenientes
das unidades controladas, que são a memória, a entrada e saída, e o fluxo de dados.

PROJETO DA UNIDADE DE FLUXO DE DADOS

A unidade de fluxo de dados consiste dos blocos funcionais (registradores,


somador, multiplexadores) e das interligações entre os blocos funcionais. Uma
interligação direta entre dois blocos funcionais, ou seja caminho direto, depende do
compromisso custo/benefício. Por outro lado, a existência de duas entradas num
mesmo registrador implica na existência de um multiplexador, aumentando a
complexidade da implementação.
A Fig. 9a mostra o caso em que os registradores MBR, PC e MAR estão
com conexões diretas dois a dois, permitindo que as transferências de MBR a PC,
PC a MAR e MAR a MBR possam ser executadas diretamente, através das
microoperações PC ß MBR, MAR ß PC e MBR ß MAR, respectivamente. Porém,
a transferência de PC a MBR, só é possível indiretamente, através das
microoperações MAR ß PC e MBR ß MAR.
O diagrama da Fig. 9b mostra a inclusão do caminho direto de PC a MBR,
para melhorar o desempenho do computador. Nesse caso é agora possível uma
transferência direta de PC a MBR através da microoperação MBR ß PC, porém
houve um aumento na complexidade do circuito acrescentando a interconexão e o
multiplexador.
Nota-se, também, que quanto maior o número de entradas num mesmo
registrador, maior é a complexidade do multiplexador.

MBR
MBR

PC

( a)
MBR

MUX

MBR

PC

( b)

Figura 9. (a) Registradores MBR, PC e MAR interligados dois a dois; e (b)


Acréscimo da interconexão de PC a MBR com a inclusão de um
multiplexador.
O projeto deve adotar, portanto, a estratégia de minimização do número de
caminhos sem prejudicar o desempenho do fluxo de dados. Normalmente o resultado
é obtido após algumas tentativas.
O projeto deve iniciar-se com a escolha de algumas instruções típicas
(carga, armazenamento, soma, salto a subrotina) e a determinação de caminhos de
dados implicados; seguidas de uma tentativa de projeto do fluxo de dados sujeito a
algumas restrições; determinação do ciclo de fluxo de dados típico, que corresponde
à menor operação de fluxo de dados do computador; e do ciclo de estado de controle
principal, que corresponde a um conjunto de ciclos de fluxo de dados para a
realização de uma operação considerada básica ao nível do computador.

CIRCUITO DE TEMPO (TIMING)

O computador executa as instruções em pequenos passos que denominamos


aqui de subciclos. Para o exemplo usamos as notações T0, T1, T2 e T3, para os
subciclos utilizados. Esses subciclos correspondem a uma operação de menor
duração dentro do computador, como de transferência direta de dados entre
registradores. Correspondem também a um período do relógio geral (clock) que
fornece a base de tempo para toda a máquina. Como os subciclos são usados para
uma operação mínima de fluxo de dados, eles também são chamados de ciclos de
fluxo de dados.
Um ciclo de busca de instrução, ou um ciclo de execução da instrução, é
constituído de um conjunto desses subciclos. O ciclo de busca (fetch) de instrução é
constituído de quatro subciclos no nosso caso, e contém uma operação de leitura de
memória.
Como o computador do tipo IAS é baseado em referência à memória, os
ciclos de estado de controle principal como o ciclo de busca de instrução tem uma
duração correspondente a um acesso à memória. Os ciclos de estado de controle
principal, ou ciclo principal, são também conhecidos como ciclos de máquina, e
correspondem a uma operação básica ao nível da máquina.
Um ciclo de interpretação de instrução é constituído de pelo menos dois
ciclos de máquina. O primeiro ciclo é comum para todas as instruções e corresponde
ao ciclo de busca (fetch) de instrução. O ciclo de execução da operação, é diferente
para cada instrução, podendo ter um tempo diferente para a sua conclusão.
Os processadores complexos podem ter ciclos de fetch de instrução com
mais de um ciclo de máquina, o mesmo acontecendo com os ciclos de execução.

EXEMPLO DE CIRCUITO DE TIMING

Fig.10. Circuito de timing de um computador simples para a geração de ciclos


principais I e E, e subciclos T0, T1, T2 e T3.

O circuito mostrado na Fig.10 corresponde ao circuito de timing de um


computador para a geração de sinais de sincronismo para os ciclos de estado
principais, I e E, e subciclos T0, T1, T2 e T3. O circuito é sincronizado por um sinal
periódico denominado relógio (clock). Os sinais gerados pelo circuito são mostrados
na Fig. 11.
A parte superior da Fig.10 corresponde a um contador em anel, que gera os
subciclos. Nota-se que um sinal recicla é responsável pelo reinício do contador (T0
= 1, T1 = 0, T2 = 0 e T3 = 0). Além do recicla, quando os três primeiros flip-flops do
contador estiverem em zero (T0 = 0, T1 = 0 e T2 = 0), o contador reinicia. Quando o
circuito de reinício estiver em zero, o contador desloca um bit à direita na borda de
subida do sinal de relógio, introduzindo um zero no primeiro flip-flop (T0 = 0).
Quando o circuito de reinício estiver em um, o contador desloca um bit à direita na
borda de subida do sinal de relógio, introduzindo o valor um no primeiro flip-flop
(T0 = 1).
A parte inferior da Fig.10 corresponde a um outro contador em anel,
mas de ciclos principais: ciclo I (busca de instrução) e ciclo E (execução da
operação). Esses ciclos se alteram a cada reinício do contador de subciclos,
sincronizados com a borda de subida do relógio. O reinício do contador de
ciclos principais, no entanto, é diferente do reinício do contador de subciclos.
O reinício do contador de ciclos principais é acionado por um circuito de reinício do
computador denotado POR (Power-On-Reset). Esse circuito gera um pulso negativo,
quando o fornecimento de energia é acionado (quando liga a máquina, power on), ou
quando a energia já estiver acionada e o operador aperta o botão de reset. O pulso
negativo é usado para introduzir os valores iniciais (I = 1 e E = 0) no contador em
anel, de ciclos principais.

Figura 11. Diagrama de tempo do circuito de timing.

Nota-se através do circuito da Fig. 10 que o contador de subciclos pode ser


reiniciado a qualquer momento, desde que o sinal de recicla seja acionado. O
controle sobre o sinal de recicla será visto posteriormente, quando serão analisadas
as interpretações das as instruções. O recicla é acionado no final da operação no
ciclo de execução (E), para finalizar o ciclo principal, mesmo que não tenha ocorrido
todos os quatro subciclos, eliminando portanto a ociosidade da máquina. O ciclo de
busca de instrução (I) ocupa todos os quatros subciclos, e sendo comum para todas
as instruções, não necessita ser finalizado antes de terminar todos os subciclos.

ATUAÇÃO DAS LINHAS DE CONTROLE NOS ELEMENTOS

A partir da notação RTN é possível projetar o circuito de controle fixo do


computador. No exemplo a condição E.ADD.T0, deve acionar a carga do MBR, ou
seja, a microoperação:
MBR ß M[MAR].
Isso implica em implementar um circuito que dada a condição necessária,
E.ADD.T0, gera um sinal de controle para o acionamento desejado, Fig. 12.
A entrada E indica que o ciclo de estado de controle principal corresponde à
execução. A entrada ADD é o sinal que indica qual instrução está sendo executada e
corresponde à saída de um circuito decodificador de opcode. Finalmente, a entrada
T0 indica o subciclo em que a microoperação deve ocorrer.

Endereco

MAR

E
Instrucoes
ADD e
dados

E
ADD MBR
T0

IR PC

CLOCK

Figura 12. Diagrama que relaciona a linha de controle e o acionamento.


Ainda na Fig. 12 nota-se a seleção do multiplexador, na condição E.ADD,
implicando que o multiplexador está selecionado para a entrada da memória durante
toda execução da instrução ADD.
CIRCUITO DE CONTROLE

É fácil notar que a Unidade de Controle deve conter um circuito de tempo,


ou timing, que indica o subciclo (T0,.., T3), o ciclo de estado de controle principal
de busca de Instrução (I ) ou Execução (E)), sendo que a cada final da interpretação
de uma instrução, é iniciado um novo ciclo de busca de instrução, I. O circuito de
sequenciação recebe um trem de pulsos, que serve como base para a geração dos
sinais de subciclos, provindo do circuito oscilador, denominado relógio.

IR

DECODIFICADOR
STOR

ADD
JUMP

....
E
E.ADD
ADD

E
E.ADD.T0
ADD
T0

T0 T1 T2 T3 I E
RELOGIO TIMING

CLOCK

Figura 13. Delineamento da Unidade de Controle Fixo (Hardwired).

Além disso, deve existir um circuito de decodificação do campo do código


de operação, opcode, da instrução. A Fig. 13 mostra um diagrama delineando a
Unidade de Controle, com as partes envolvidas.

Além do sinal de controle, o registrador MBR recebe como entrada, o


sinal de relógio, para sincronizar a entrada de dados com os outros
registradores.
MEMORIA

Endereco
PRINCIPAL

MAR
Instrucoes
e

MAMUX
dados

MBMUX
MBR

PC
IR

ACMUX

AC MQ

Circuitos de
Aritmetica e
Logica

Figura 14. Diagrama do fluxo de dados simplificado do IAS.

MICROOPERAÇÕES EM RTN PARA O CICLO DE BUSCA DE INSTRUÇÃO

Como o ciclo de busca de instrução é igual para todas as instruções,


iniciamos o projeto com a representação RTN das etapas desse ciclo.
I.T0 : MAR ß PC; { inicio da leitura }
I.T1 : espera a leitura; PC ß PC + 1;
I.T2 : MBR ß M[MAR]; e
I.T3 : IR ß MBR(0,7); MAR ß MBR (8,19).

Observamos que uma condição previamente imposta neste projeto é de que


a memória leva dois subciclos para o seu acesso para leitura ou escrita. Durante o
subciclo T1 a memória está sendo lida.
O incremento do contador de programa pode ocorrer em qualquer subciclo
após a carga do conteúdo atual para o MAR que ocorre no subciclo T0. No exemplo,
fazemos esse incremento no subciclo T1.
Após o tempo de espera de leitura de memória o conteúdo lido pode
ser carregado no MBR, que ocorre em T2. Em seguida, o campo de opcode da
instrução lida é carregado para o IR, e o campo de endereço é carregado no
MAR. A carga do MAR serve para iniciar a leitura do operando, embora a
leitura do operando seja necessária somente para algumas instruções (por
exemplo: ADD e LOAD), a memória fica em repouso na condição de leitura.
Portanto, o endereçamento antecipado da memória com o campo de
operando X, não afeta as instruções que não fazem uso de referência à
memória, e adianta a leitura para outras instruções.
O opcode carregado em IR é usado para a decodificação da instrução, que é
realizado por um circuito decodificador. Essa decodificação é realizada num tempo
muito rápido, de tal forma que no próximo subciclo, que corresponde a um ciclo
principal de execução de instrução, ciclo E, o computador já deve ter disponível qual
a operação a ser realizada.

SUBCONJUNTO DE INSTRUÇÕES DO COMPUTADOR IAS A SEREM


IMPLEMENTADAS NO EXEMPLO

A Tab.4 mostra as instruções típicas de um computador seqüencial, a serem


implementadas a seguir.
TABELA 4. Instruções típicas a serem implementadas.
Opcode Binário Mnemô- Instrução
nico
00000001 LOAD M[X] Carga
00100001 STOR M[X] Armazenamento
00000101 ADD M[X] Soma
00001111 JPOS M[X] Desvia se positivo
00001101 JUMP M[X] Desvio
incondicional

Para as descrições seguintes sobre os ciclos de execução será usada uma


configuração de caminhos existentes no computador simplificado conforme mostrado
no diagrama da Fig.14, que é uma alteração da Fig.5, incluindo a denominação dos
multiplexadores, mostrando a parte referente ao fluxo de dados. A configuração foi
definida para satisfazer o projeto de uma parte das instruções do computador IAS,
como mostradas na Tab.4.

MICROOPERAÇÕES PARA EXECUÇÃO DA INSTRUÇÃO ADD

Apresentamos a seguir os subciclos correspondentes a instrução ADD:

E.T0.ADD : {espera a leitura}


E.T1.ADD : MBR ß M[MAR}; e
E.T2.ADD : AC ß AC + MBR; recicla.

Nota-se que após o sinal de controle recicla o circuito de timing volta para o
subciclo T0 de busca de instrução.
Caso a carga de MAR com o endereço do operando não tivesse sido
incorporado no subciclo anterior I.T3, essa operação deveria ser feita em
E.T0.ADD, e o último subciclo seria em E.T3.ADD. A carga antecipada de
MAR antecipa a finalização da interpretação da instrução ADD, tornando o
computador mais rápido.
Nota-se também que a representação RTN acima leva em conta que o fluxo
de dados contem os caminhos diretos interligando os blocos funcionais como
somador, acumulador, registrador de dados de memória. Além disso a parte relativa
ao endereçamento de memória contem os caminhos diretos interligando MBR com
MAR e PC com MAR, usando um multiplexador na entrada de MAR.

MICROOPERAÇÕES PARA A EXECUÇÃO DA INSTRUÇÃO LOAD

A instrução LOAD faz a carga do acumulador com um conteúdo de


memória.
As microoperações para a instrução LOAD são as seguintes:
E.T0.LOAD : {espera a leitura}
E.T1.LOAD : MBR ß M[MAR}; e
E.T2.LOAD : AC ß MBR; recicla.
A descrição acima implica na existência de um caminho direto entre o MBR
e AC, para a microoperação AC ß MBR. Caso não exista esse caminho direto, uma
alternativa de projeto é usar o caminho que passa pelo somador, fazendo com que a
soma não seja realizada, de alguma forma, como por exemplo, zerando o conteúdo
do acumulador, antes da operação.

MICROOPERAÇÕES PARA A EXECUÇÃO DA INSTRUÇÃO STOR

A instrução STOR realiza a escrita na memória com o conteúdo do


acumulador. As microoperações para a execução de STOR podem ser as seguintes:
E.T0.STOR : MBR ß AC; inicioWR
E.T1.STOR : {espera de escrita} e
E.T2.STOR : fimWR; recicla.

MICROOPERAÇÕES PARA A EXECUÇÃO DA INSTRUÇÃO JUMP

A instrução JUMP realiza um salto incondicional. Como o salto é feito


alterando o conteúdo de PC, a única microoperação executada é uma transferência do
campo de operando contido no MAR para o PC. Isso implica na existência de um
caminho direto entre MAR e PC. A expressão RTN para a instrução JUMP é a
seguinte:

E.T0.JUMP : PC ß MAR; recicla.

MICROOPERAÇÕES PARA A EXECUÇÃO DA INSTRUÇÃO JPOS

A instrução JPOS realiza um salto condicional, quando o conteúdo do


acumulador for positivo AC(0) = 0. A diferença entre a instrução JUMP e JPOS é
que o salto só é executado se o primeiro bit do acumulador for igual a zero,
indicando que o valor é positivo. Nesse caso tem-se duas expressões RTN, seguintes:

E.T0.JPOS : recicla; e
E.T0.JPOS. AC(0)’ : PC ß MAR.
CIRCUITO COMBINATÓRIO DOS SINAIS DE CONTROLE

O projeto da unidade de controle deve iniciar-se pela identificação dos


pontos de controle do computador. Na Tab. 5 podemos verificar os pontos de
controle identificados, separados em ativação de registradores, seleção de
multiplexadores, e flip-flops de controle.

Tabela 5. Pontos de Controle

Ativação dos Controle dos Controle


registradores Multiplexadores De Memória

HMBR ACMUX InícioWR


HPC MAMUX FimWR
HAC MBMUX
HMAR
INCRPC
HIR

Uma tabela de microoperações que implicam em ativação dos pontos de


controle facilita a identificação detalhada das implicações para os pontos de controle.
Para a construção dessa tabela, é interessante desenvolver uma tabela auxiliar
mostrando todas as expressões RTN, usadas para as diversas instruções (Tab. 6).

A Tab. 7 mostra as microoperações e os pontos de controle ativados.

Tabela 6. Tabela completa de expressões RTN


Ciclo de busca:
I.T0 : MAR ß PC; { inicio da leitura }
I.T1 : espera a leitura; PC ß PC+1;
I.T2 : MBR ß M[MAR]; e
I.T3 : IR ß MBR(0,7); MAR ß MBR(8,19).

Execução: ADD
E.T0.ADD : {espera a leitura}
E.T1.ADD : MBR ß M[MAR}; e
E.T2.ADD : AC ß AC + MBR; recicla.
Execução: LOAD
E.T0.LOAD : {espera a leitura}
E.T1.LOAD : MBR ß M[MAR}; e
E.T2.LOAD : AC ß MBR; recicla.

Execução: STOR
E.T0.STOR : MBR ß AC; inicioWR
E.T1.STOR : {espera de escrita} e
E.T2.STOR : fimWR; recicla.

Execução: JUMP
E.T0.JUMP : PC ß MAR; recicla.

Execução: JPOS
E.T0.JPOS : recicla; e
E.T0.JPOS. AC(0)’ : PC ß MAR.

Tabela 7. Microoperações e os pontos de controle

Destinação Microoperação Pontos de


controle ativos

AC AC ß MBR HAC ACMUX


AC ß AC + MBR HAC ACMUX

MAR MAR ß MBR(8,19) HMAR MAMUX


MAR ß PC HMAR MAMUX

MBR MBR ß M [MAR] HMBR MBMUX


MBR ß AC HMBR MBMUX

IR IR ß MBR (0,7) HIR

PC PC ß PC + 1 INCRPC
PC ß MBR(8,19) HPC
AGRUPAMENTO DAS IMPLICAÇÕES PARA OS PONTOS DE CONTROLE
DOS REGISTRADORES

O projeto prossegue agrupando para os pontos de controle os implicantes.


Como exemplo, nota-se pela Tab. 7 que o ponto de controle HAC é ativo para duas
microoperações. Para o agrupamento dos implicantes, é necessário verificar no
conjunto de microoperações, nas expressões RTN as condições correspondentes.
Para o exemplo do HAC tem-se:

HAC = E.T2.ADD + E.T2.LOAD

Os implicantes para os demais pontos de controle de registradores podem


ser obtidos analogamente:

HMAR = I.T3
HMBR = I.T2 + E.T1.ADD + E.T1.LOAD + E.T0.STOR
HIR = I.T3
HPC = E.T0.JUMP + E.T0.JPOS.AC(0)’
INCRPC = I.T1

AGRUPAMENTO DAS IMPLICAÇÕES PARA OS PONTOS DE CONTROLE


DOS MULTIPLEXADORES

Para o controle de seleção dos multiplexadores é necessário verificar qual a


seleção necessária para as microoperações. Para isso convem desenvolver uma
extensão da Tab.7, para os multiplexadores, conforme a Tab. 8.

Tabela 8. Seleção dos multiplexadores.


Destinação Microoperação Pontos de Seleção dos
Controle ativos Multiplexadores
ACMUX
AC AC ß MBR HAC ACMUX 0
AC ß AC + MBR HAC ACMUX 1
MAMUX
MAR MAR ß HMAR MAMUX 0
MBR(8,19) HMAR MAMUX 1
MAR ß PC

MBMUX
MBR MBR ß AC HMBR MBMUX 0
MBR ß M [MAR] HMBR MBMUX 1

O projeto dos implicantes significa verificar para a coluna de seleção dos


multiplexadores da Tab. 8, quais as condições em que os pontos de controle devem
ter o valor um, e determinar os implicantes usando a tabela de microoperações.
Por exemplo, o projeto de ACMUX consiste nos implicantes em que:
AC ß AC + MBR

Portanto,

ACMUX = E.T2.ADD.

Após a determinação das equações booleanas para os pontos de controle, a


próxima tarefa é a minimização do circuito combinatório resultante.
O projeto apresentado constitui essencialmente de uma unidade de controle
fixo, ou hardwired. Nota-se que uma vez feita a minimização do circuito é difícil
alterar uma instrução sem refazer totalmente o projeto do circuito combinatório.

INSTRUÇÕES DE SALTO E RETORNO DA SUBROTINA

No computador IAS não consta a instrução de salto a subrotina SBR, nem a


instrução de retorno ao programa principal RET, após a execução da subrotina.
Apresentamos a seguir essas duas instruções para facilitar o entendimento dos
mecanismos de salto e retorno de subrotinas, nos computadores modernos.
A instrução SBR que será apresentada a seguir é usada para que a seqüência
de execução das instruções seja alterada para uma outra posição da memória
principal, onde se encontra a subrotina. Na primeira posição da subrotina, porém,
deve ser armazenado o endereço de retorno. A subrotina se inicia, portanto, na
segunda posição.
A seguir será apresentada a execução da instrução SBR M(X), em RTN:
E.T0.SBR : MBR(0,7) ß 00000000; MBR(8,19) ß PC;
PC ß MBR(8,19); inicioWR;
E.T1.SBR : {espera de escrita}; e
E.T2.SBR : fimWR; PC ß PC + 1; recicla.

Pela descrição RTN, durante o subciclo T0, o valor correspondente ao


endereço de retorno, que seria a próxima instrução caso não houvesse o salto, é
carregado do PC ao MBR; além disso, o valor contido no MBR(8,19) que
corresponde ao endereço da primeira posição da subrotina é transferido para o PC.
No subciclo T2 é finalizado o processo de escrita do endereço de retorno na primeira
posição da subrotina M(X), e o conteúdo do contador de programa é incrementado de
um para que a próxima instrução a ser executada seja lida na segunda posição da
subrotina.
A instrução RET é usada para o retorno ao programa principal, após a
execução da subrotina. Como o endereço de retorno é armazenado na primeira
posição da subrotina pela instrução SBR, esse endereço deve ser lido para ser usado
como o endereço da próxima instrução, alterando o conteúdo de PC. A seguir é
mostrada a representação em RTN da instrução RET M(X):
E.T1.RET : MBR ß M[MAR]; e
E.T2.RET : PC ß MBR(8,19); recicla.

INSTRUÇÕES DE ENTRADA E SAÍDA

No computador IAS, também não consta a instrução de entrada, bem como


instrução de saída. A entrada e saída no IAS era feita através de instruções de
referência a memória, em endereços específicos, previamente destinados para essa
finalidade. Essa forma de entrada e saída é denominada de entrada/saída mapeada em
memória (memory mapped I/O).
As instruções de entrada e saída apresentadas a seguir são específicas para a
finalidade de troca de informações com o uso do acumulador, AC; e são comuns na
maioria dos computadores modernos.
A instrução de entrada, INP, é usada para a leitura de um dado contido
num dispositivo de entrada. Após a execução dessa instrução o dado é disponível no
AC. Como existem vários dispositivos de entrada, um duto de dados é usado em
comum por todos os dispositivos, porém, um único dispositivo deve ser selecionado
durante uma instrução de entrada. A instrução INP D(X) deve portanto indicar qual
dispositivo a ser ativado para a entrada, através do valor contido em D(X). Como o
campo de endereço é carregado em MAR durante o ciclo de busca de instrução, o
circuito de endereçamento dos dispositivos de entrada deve estar conectado às linhas
de saída do MAR.
A representação RTN abaixo mostra a execução da instrução de entrada:
E.T0.INP : iniciaINP;
E.T2.INP : AC ß dadoEntrada; e
E.T3.INP : fimINP.
O sinal de controle iniciaINP é usado para ativar um flip-flop de controle de entrada,
cuja saída deve ser conectada aos dispositivos de entrada para sinalizar o momento
em que o dado deve ser disponibilizado no duto de dados de entrada. O sinal fimINP
serve para sinalizar o fim da entrada de dados. Durante o subciclo T2 o dado é
carregado no AC.
A instrução de saída, OUT, é usada para que um dado contido no AC seja
lido por um dispositivo de saída. A forma de endereçamento do dispositivo de saída
é idêntica à instrução de entrada. Durante a execução da instrução OUT D(X) é
gerado num flip-flop de controle de saída, um pulso indicando a disponibilização do
dado no duto de dados de saída. Assim são usados os sinais de controle inicioOUT e
fimOUT, para essa finalidade, conforme a descrição seguinte:
E.T0.OUT : iniciaOUT; e
E.T3.OUT : fimOUT.

CONTROLE DE INTERRUPÇÃO

Uma interrupção durante a execução de um programa no


computador implica em parar temporariamente a execução do programa e
executar uma subrotina de atendimento ao dispositivo que solicitou a
interrupção.
As interrupções em geral podem ser gerados pelo próprio computador, ou
por algum dispositivo de entrada ou de saída. As interrupções geradas pelo próprio
computador, são causadas por alguma operação imprópria, como por exemplo,
divisão por zero, estouro da unidade aritmética, etc. Uma interrupção causada por
dispositivos externos, corresponde a alguma solicitação de entrada ou de saída de
dados. Como o dispositivo externo é assíncrono em relação ao computador, a
interrupção é uma forma eficiente para a entrada ou saída de dados.
Um outro método de entrada e saída, menos eficiente é chamado polling, e
nesse caso o computador fica executando um laço até que o dispositivo externo fique
pronto. Como um dispositivo externo é assíncrono em relação ao computador, o
tempo gasto pelo computador executando o laço é imprevisível.
Um dispositivo externo que interrompe o computador é o teclado, em que o
operador digita caracteres durante um processamento de texto. Se for utilizado o
método de polling para a entrada pelo teclado, o computador ficaria a maioria do
tempo em laço, esperando o operador.
Um exemplo de implementação é mostrado na Fig. 15.

Figura 15. Diagrama do circuito de interrupção.

A interrupção é habilitada por um flip-flop IEN (Interrupt ENable). Esse


flip-flop quando é ligado permite que um dispositivo externo interrompa a execução
normal do computador no próximo ciclo de busca I. A interrupção é solicitada pelo
dispositivo externo através da linha INT’, ativa em zero. Após a linha INT’ ser
ativada, o computador entra no estado de interrupção no próximo ciclo de instrução
se o IEN estiver ativo. Se IEN não estiver ativo, o computador fica no estado de
execução normal do programa principal, até que IEN seja ativado por uma instrução
“OUTP 0”.
O circuito mostra a ativação do flip-flop IEN e do flip-flop RUPT, que
indica o estado de interrupção. O sinal gerado por esse flip-flop é usado pela unidade
de controle para introduzir no MBR uma instrução de chamada de subrotina no
endereço zero, “SBR 0”. Como o momento da interrupção é imprevisível é óbvio que
essa instrução não provem da memória principal. Uma forma de implementação do
mecanismo é a introdução da instrução no multiplexador do MBR, conforme mostra
o diagrama da Fig. 16.
Ao executar a instrução SBR 0, o computador faz um salto à subrotina no
endereço zero, portanto a rotina de tratamento do dispositivo de interrupção deve
estar nesse endereço. A última instrução da subrotina sendo RETN, a sua execução
faz com que o computador passe a executar de volta o programa principal, após o
atendimento à interrupção.

MEMORIA

Endereco
PRINCIPAL

MAR
Instrucoes
e

MAMUX
dados

SBR 0

MBMUX
MBR

Endereco
PC
IR

Dispositivos
ACMUX de

Entrada/
AC MQ Saida
Dados

Circuitos de
Aritmetica e
Logica

Figura 16. Alteração do MBMUX para a inclusão da instrução “SBR 0”.

O diagrama de tempo da Fig. 17 mostra uma sequência de instruções


durante duas solicitações de interrupção. Nota-se da esquerda para a direita que o
flip-flop RUPT torna-se ativo, pela primeira solicitação de interrupção, quando IEN
é ativo. Logo em seguida IEN fica inativo pelo circuito da Fig. 15, de solicitação de
interrupção. Para uma outra interrupção ser habilitada uma instrução de “OUTP 0”
deve ser executada. Nota-se no diagrama de tempo que embora uma segunda
interrupção seja solicitada, ela só pode ser atendida após a ativação de IEN. A última
instrução da subrotina RETN é executada antes de entrar no segundo estado de
interrupção.

‘SBR 0’ ‘SBR 0’

Figura 17. Diagrama de tempo do circuito de interrupção.

INSTRUÇÃO DE MULTIPLICAÇÃO

No projeto computador IAS, está inclusa uma instrução de multiplicação, que


executa uma multiplicação de dois números inteiros de 20 bits, gerando um produto
de 40 bits. Para essa implementação é possível adotar o algoritmo A1 apresentado a
seguir, baseado no diagrama da Fig.18.

MULTIPLICANDO

SOMADOR

0 19 20 39

MULTIPLICADOR

PRODUTO

Figura 18. Diagrama dos elementos funcionais para a multiplicação.


Algoritmo A1. Multiplicação serial de dois números inteiros de 20 bits.

INICIO

TESTA = 0
PRODUTO

= 1

Somar o multiplicando `a metade esquerda do


do produto e colocar o resultado na mesma
posicao.

Deslocar o produto `a direita

NAO

ULTIMA
CASA

SIM

FIM

Como a execução do algoritmo A1 exige um número de ciclos


correspondente ao número de bits do multiplicador, a implementação da instrução de
multiplicação exige uma alteração do circuito de timing apresentado na Fig.10 para
que durante essa instrução a execução seja constituída por um número de ciclos de
estado principal correspondente ao número de bits do multiplicador. Além disso,
deve ser acrescido um circuito contador para que após completar o número
necessário de ciclos o computador gere o sinal de recicla, para iniciar a busca da
próxima instrução.