Вы находитесь на странице: 1из 254

Arquitetura

s de
Computado
res
Uma abordagem informal
1

O que um computador?
Computadores so ferramentas
Servem para resolver problemas

Qualquer sistema computacional


possui 3 caractersticas em geral
Processamento
Memria (armazenamento)
Comunicao

Um celular, por exemplo, um


sistema computacional que possui como
principal caracterstica a comunicao
3

Curiosidades
No Brasil, segundo o censo de 2010, h
190 milhes de habitantes
Segundo o Portal Teleco, site de
informaes sobre telecomunicaes,
dados de julho de 2011 mostram que h
220 milhes de celulares no pas
Pois , h mais celulares do que
pessoas no Brasil. O mercado para
profissionais de computao imenso!
4

Uma ferramenta deve possuir


objetividade (realizar sem restries a
tarefa para a qual ela foi criada)
Alm disso, h 3 aspectos
importantes que definem sua
qualidade:
Desempenho (tempo de processamento)
Custo-benefcio
Facilidade de uso

Voc pode optar por uma memria de


2 GB a R$ 93,00 ou por uma de 4 GB a
R$ 180,00. Qual a melhor opo?

2 GB
4 GB
6

A resposta : depende
Se a sua aplicao no necessitar de mais de 2
GB de memria, voc estar gastando R$ 100,00
a mais que o necessrio

Isto faz parte da questo do custobenefcio


No caso de carros e TVs, produtos novos e
melhores so lanados a preos mais caros
que os anteriores
J produtos da indstria computacional
tem preos iguais ou menores que os
anteriores, e ainda assim so geralmente
melhores (mais geis)
7

Como funciona um
computador?
Algoritmos implementados por um
programa
escrito
em uma
linguagem de

sequncias
de instrues

programao

Programadores se comunicam com

Para haver comunicao, necessrio


que haja uma linguagem em comum...

...ou um tradutor

Linguagens em geral...

Mais
Mais
complexa
simples

chins

portugus,
ingls etc

(computador
(usurio entende)
entende)

necessria uma espcie de traduo das


linguagens comuns para a linguagem binria,
que o que o computador entende de fato
Veremos a seguir que, na verdade, traduo
apenas parte do processo
10

A nvel de
software, temos:

Ling. de Prog.
Alto Nvel

N5

Compila
o
L o cdigo e,
usando as
informaes nele
contidas, manipula
a memria.

Montagem

N4

T
R
A
D
U

Montado
r
Sistema
N3
Operacional
Interpreta
o Parcial
Macroprograma
o

N2

Interpretao

11

A nvel de hardware,
temos:
Aqui, h um nmero muito
maior de instrues do que
havia no incio. Com isso,
mais circuitos devem ser
criados, aumentando o custo.
Portanto, linguagem simples
necessria.

Interpreta
o
Microprograma
o

N1

S agora so
executadas as
instrues
Circuitos
Digitais

N0

12

Linguagem de Maquina, tambm conhecida como assembly( a


forma que uma CPU ou um microcontrolador utiliza para se
comunicar com seus perifericos).
Onde linguagem o binrio e maquina a CPU propriamente dita.
Microprograma ou Microcdigo
O microcodigo uma camada de hardware em nvel de
instrues, envolvidos na implementacao da linguagem de
maquina dos processadores. Reside em memria especial, de alta
velocidade e traduz instrues de maquina em seqnciais de
operaes a nvel de circuitos.
Microcodigo muitas vezes chamado de microprogramacao .
obs.: ASSEMBLY diferente de ASSEMBLER, que o compilador
que converte a
linguagem programacao assembly para codigo de maquina
(linguagem da maquina).
13

MICROPROGRAMAO

14

15

16

Traduo X Interpretao
O esquema das etapas de execuo de
um programa apresentado
anteriormente no uma generalizao
Isto porque existem linguagens
compiladas (utilizam traduo) e outras,
interpretadas
A traduo feita uma vez apenas. J a
interpretao realizada cada vez que o
programa executado
17

Traduo:
_________
_________
_________
_________
_________
_________
L2

________
________
________
________
________
________
________
________
________
________
________

Interpretao:
_________
_________
_________
_________
_________
_________
L2

Tempo de execuo

Execuo

.
.
.

L1

.
.
.

L1

18

Mas afinal, para que tantas etapas


na execuo de um programa?
O esquema abaixo mostra um dos
problemas que ocorreriam caso as
instrues das linguagens em alto
nvel fossem executadas sem todas
essas etapas

Pascal

Cobol

C++

.....

Pentiu
m4

I7

Xeon

AMD

.....
19

Note que, para cada linguagem


diferente, seria necessria uma
maneira diferente de fazer suas
instrues serem executadas. Isso para
cada processador
Para cada nova linguagem ou novo
processador, j haveria uma nova
necessidade para que o programa
fosse executado
No total, teramos m*n
necessidades diferentes!
20

Todas aquelas etapas servem ento


para que, utilizando o conceito de
diviso e conquista, os processadores
no precisem se preocupar com
linguagens, e vice-versa
As instrues complexas so
reduzidas a instrues em uma
linguagem
simples,
entendida
por
C
Pascal
Cobol
C++
mtodos os processadores
.....

Pentiu
m4

I7

Xeon

AMD

.....
21

Agora, so apenas m+n maneiras


diferentes de execuo de programas
Intuitivamente, temos um custo maior por
ter tantas etapas... mas no bem assim.
Dos nveis N5 at N3, o custo muitas vezes
nem chega ao usurio, pois o software
compilado antes de chegar at ele
importante ressaltar que uma instruo
em L2 no pode nunca ser diretamente
executada no nvel N0.
Depois de N2, no ocorre mais traduo,
apenas interpretao
22

Na interpretao, as instrues so apenas


convertidas nas ordens em que sero
executadas, o que acontece de N1 para N0
no esquema apresentado anteriormente
Relembrando:
Macroprogramao

L2
Interpretao

Microprogramao

L1

Execuo
Circuitos digitais

Instrues

A seguir, uma melhor representao das


etapas de um programa at que ele esteja
em L2

23

L5

_____________
_____________
_____________
_____________

.......
+

_______
_______
_______

O programa em L3
tem tambm os
endereos de
memria envolvidos
no processo

Compila
o
_______
_______
_______

Montage
m
010010101
101001010
101010101
011100110
...
101101010
101010100
101101...

_______
_______
_______

+ ....
...

L4

L3 -> L2 + L1

L2
24

Curiosidades
Em Delphi, possvel manipular o
programa no nvel de montagem. Com
isso, pode-se ter uma noo maior de
quanto tempo levar sua execuo
Atualmente, no caso de dispositivos
mveis, por exemplo, programa-se em
alto nvel e depois acessa-se o programa
em nvel de montagem, para que sejam
reprogramadas apenas as partes ruins
25

Com o conceito de linguagens (L1, L2,


L3 etc) apresentado, temos tambm o
conceito de mquinas virtuais. Por
exemplo:
Macroprogramao
L2
Microprogramao

Mquina
virtual L3
Mquina virtual L2

L1
Mquina fsica
Circuitos digitais
Instrues
26

Generalizando para o topo, temos:


Linguagem de
programao de alto
nvel
L
Compilao 5

.
.
.
.
.
.
.
.
.
.

Mquina
virtual
vista do
usurio

27

Abstrao
Considere o seguinte esquema:
Pasc
al

C
Compilador B

Compilador C

Compilador D

Compilador A

Windo
ws

Processad
or 1

Java

Linux

Processad
or 2

Poltica de
compatibilidade da
Intel: todas as
instrues entendidas
por um Pentium 4 so
entendidas tambm 28

Vimos anteriormente que os compiladores


A, B, C e D no so necessariamente
diferentes, assim como os processadores
Porm, com processadores que no sejam
da Intel, possvel que sejam necessrios
diferentes compiladores para cada
situao
A linguagem Java, teoricamente, no
possui restries de plataforma
Veremos a seguir que ela utiliza
uma espcie de disfarce...
29

Atravs da abstrao, a JVM (Java Virtual


Machine) esconde as complexidades
que envolvem as plataformas
______________
______________
______________

Java

Int

ta
e
pr
er

_________________
_________________
_________________
_________________
Java ByteCode

JVM
Mquina Virtual Java

30

Hardware X Software
Considere o esquema abaixo:

COMPLEXIDADE

are
w
t
f
o
s

are
w
d
r
a
h

N5

N4

N3

N2

N1

N0

31

Mas, complexidade de...?


Funcionalidade
Cabe ao arquiteto do sistema saber
onde cada funo deve ser
implementada
Adio e multiplicao so sempre
feitas em hardware, pois o
desempenho muito melhor. Mas
ento, por que no implementar tudo
em hardware?
Custo a resposta. Operaes mais
sofisticadas, se implementadas todas

32

No so poucos os circuitos necessrios


para implementar operaes de soma e
multiplicao em hardware. Agora imagine
implementar um programa complexo
inteiro usando apenas esses circuitos
digitais!
Por outro lado, imagine tambm o gasto
de tempo desnecessrio que haveria se,
para cada vez que precisssemos
somar ou multiplicar, fosse necessrio traduzir as instrues em
software para hardware!
33

Outra desvantagem de hardware :


se ocorrer algum problema fsico com
as peas, como reparar?

Softwares so mais baratos e, caso


haja algum erro, muito mais fcil
localizar e consert-lo. Porm, como j
foi citado, o desempenho menor.
34

Computadores:
Viso geral
endereos

Memri
a RAM

dados
leitura / escrita

C
A
C
H
E

Hard Disk
(HD)

Placa
me
C
A
Processador
C
/ CPU
H
E
Central
Processing Unit

Disquete / Bluray

Rede Wi-Fi
USB

Graphics
Processing Unit

GPU
Fonte

.
35

Vamos comear falando superficialmente sobre o


processador
Sua funo executar programas armazenados na
memria principal, buscando instrues, identificando
e executando as mesmas uma aps a outra
Unidade de controle (UC):
responsvel pela busca das instrues na memria
principal e pelas suas identificaes
Unidade Lgica Aritmtica (ULA):
responsvel pela realizao de operaes como adio,
AND booleano, entre outras, necessrias para a execuo
das instrues
Registradores:
Juntos, formam uma pequena memria de alta velocidade,
que armazena resultados temporrios e certas informaes
de controle. Cada registrador possui uma determinada
funo. Os dois mais importantes so o contador de
programa, PC (responsvel por apontar a prxima instruo
a ser executada), e o registrador de instrues, IR
(responsvel por armazenar a instruo que ser executada)
36

O processador executa as instrues


atravs de uma pequena sequncia de
passos conhecida como o ciclo buscadecodifica-executa
Este ciclo o centro da operao de
todos os computadores
Veremos mais tarde por que o ciclo
to determinante na execuo das
instrues de um programa

37

A memria a parte do computador onde


programas e dados so armazenados
Sem ela, os processadores no poderiam
escrever informaes, ento no existiria
nenhuma maneira de um computador
armazenar um programa e dificilmente
poderia executar algum
Em um computador, geralmente existe
memria primria e memria secundria
38

Memrias primrias:
memrias que o processador pode
enderear diretamente
elas geralmente fornecem uma ponte para
as memrias secundrias, mas sua funo
principal conter a informao necessria
para o processador num determinado
momento por exemplo, dados dos
programas em execuo
Exemplo: a memria principal, sobre a qual
falaremos mais detalhadamente ao analisar
o Modelo de Von Neumann
39

Memrias secundrias:
no podem ser endereadas diretamente; a
informao precisa ser carregada em
memria primria antes de poder ser tratada
pelo processador
no so fundamentais para a parte
operacional do computador. Computadores
feitos exclusivamente para efetuar clculos
matemticos complexos, por exemplo, no
precisam tanto desse tipo de memria
so geralmente no-volteis, permitindo
guardar os dados permanentemente
Exemplos: HD, CDs e DVDs
40

RAM x CACHE
Memria RAM: a memria principal da
mquina, onde todos os processos necessrios
para a inicializao e execuo de programas
armazenados em uma memria
secundria so carregados
Memria Cache: uma
memria com maior velocidade de acesso para o processador que a RAM. localizada embutida no
processador justamente para aumentar a
velocidade de acesso. Entretanto, seus dados
so temporrios
41

Pode-se dizer que o mundo do computador se


resume a (esquema do Modelo de Von Neumann):
az
m
Ar

Pr
oc
es
sa

a
en

Busca
Processad
or

Memria

Sequncia de bits

0 ou 1
.
.
.
.
.

BUSCA prxima instruo L2


IDENTIFICA (decodifica e entende)
EXECUTA cada instruo L1
42

Curiosidades
1 byte equivale a 8 bits
1 kilobyte (KB) equivale a 1.000 bytes, 1
megabyte (MB) equivale a 1.000.000
bytes, 1 gigabyte (GB) equivale a
1.000.000.000 bytes, e assim por diante...
...ou no?

43

Curiosidades
A memria contada em potncia de 2.
Quando dizemos 1 GB de memria RAM,
estamos usando a sigla incorreta para
gibibytes (GiB)
Portanto, 1 GB coloquialmente
representa 1 GiB, que equivale a 2 bytes
(1.073.741.824 bytes); quase 7,4% mais
do que 1.000.000.000 bytes
Mas voc provavelmente
44

A seguir, ser descrita mais


detalhadamente a arquitetura
interna de um processador
Mas antes, vamos resolver uma
espcie de enigma, apresentado em
uma aula de Arquiteturas
de
processador
Computadores,
pelo professor Vinod
memria
endereos
dados
controle (r/w)

.
.
.

.
.
.

.
.
.

45

Dado o esquema do slide anterior,


deseja-se que os dados lidos da
memria passem por todos os nove
pontos do processador, utilizando o
mnimo possvel de fios
Os fios so todos retos, ou seja, a
soluo para o problema ser o
mnimo de linhas retas que passem
. .
por todos os pontos.
Uma
configurao
bvia seria:

.
.

.
.

.
.
46

Com essa soluo, temos 5 retas


Ser que 5 realmente o nmero
mnimo de retas?
Pense mais um pouco e clique para
ver a resposta...

.
.
.

.
.
.

.
.
.

Comeando de uma forma diferente


Seguindo por mais 2 pontos...
Podemos usar apenas mais 2
retas!
Por que no fazer isso...
...para depois fazer isso?
E finalmente isso. 4 retas!

47

Curiosidades
Por que esta ltima soluo no to bvia
quanto a primeira, se no havia nenhuma
restrio de que as retas no podiam
ultrapassar a caixa?
No estamos acostumados a pensar alm do
que temos de concreto. Em pases como os
EUA, por exemplo, os alunos so estimulados
desde o primrio a pensar fora da caixa
No toa que a maioria das descobertas e
invenes vem de pases desenvolvidos
Ento, lembre-se: Think outside the box 48

Processadores e
Microprogramao
Vamos agora analisar mais a fundo o
Modelo de Von Neumann
Vamos definir conceitos como
registradores, barramentos, Unidade
Lgica Aritmtica (ULA), entre outros
Em seguida, construiremos nosso
processador utilizando todas as
componentes apresentadas
49

Registradores
Locais onde so armazenadas informaes
A diferena dos registradores para as
clulas da memria principal que os
primeiros esto localizados dentro do
processador. Isso faz com que informaes
contidas nos registradores sejam buscadas
bem mais rapidamente para
processamento
Representao*:
Registrador

*ATENO: tanto esta como as outras representaes feitas


aqui no fazem parte de nenhum tipo de conveno so
meras ilustraes!

50

Barramentos
Conjuntos de fios por onde passam bits
de dados ou de controle
Em outras palavras, artifcios utilizados
para transmitir sinais de um dispositivo
para outro
Representao:
ou
n

Onde n o nmero de
fios do barramento,
lembrando que por
cada fio passa um bit
por vez

51

Multiplexadores (MUX)
Circuitos que recebem entradas,
selecionam uma delas atravs de sinais
de controle e as liberam como sada
Representao:

MUX

52

Unidade Lgica Aritmtica (ULA)


Dispositivo que recebe dois dados de
entrada A e B, opera-os sobre uma
funo pr-determinada e libera um
dado de sada
Recebe bits de controle que
especificam a operao a ser realizada
A ULA poder fazer 4 operaes em
nossa abordagem, portanto so
necessrios 2 bits de controle (00, 01,
10 e 11 = 4 possibilidades)
Por ora, a nica operao relevante a
A
B
soma (00)
ULA
Representao:
53

Deslocador
Dispositivo que recebe um nmero
binrio e multiplica ou divide por 2, se
desejado for, atravs do deslocamento
direita ou esquerda
Deslocar direita significa apagar o
bit mais direita e adicionar um 0
esquerda, e o procedimento
exatamente o oposto no deslocamento
esquerda
Exemplo: 0010 (=2)
Deslocando direita (diviso): 0001 (=1)
Deslocando esquerda (multiplicao):
DES
0100 (=4)

Representao:

54

Vamos falar mais detalhadamente sobre


registradores
Sabemos que registradores contm dados
que tanto podem ser lidos quanto sobrescritos
Por isso, cada registrador precisa receber um
bit que controla sua entrada, que
chamaremos de HE, e outro que controla sua
sada, HS
Registradores possuem na sua estrutura
interna um circuito flip-flop para cada bit que
armazena, cada um deles conectado a um fio
tanto do barramento de entrada como do
barramento de sada
55

Abaixo, esquematizada a estrutura


interna de um registrador de 8 bits:
E
N
T
R
A
D
A

HE
(habilita
entrada)

S
A

D
A

HS
(habilita
sada)

Tri-state buffer

56

Tri-state buffers so circuitos que


evitam conflitos entre as sadas para o
barramento, fazendo um tipo de
desconexo virtual entre
registradores e barramentos
Esses conflitos seriam possveis
porque vrias sadas de registradores
estaro conectadas a um mesmo
barramento
Nossa arquitetura ter 16
registradores para armazenar dados,
dentre os quais alguns tem funes
57

O Program Counter contm o endereo da


prxima instruo a ser buscada na memria
principal
O Instruction Register armazena a instruo
buscada na memria. Ou seja, IR = MP[pc],
sendo IR o contedo do registrador e pc um
endereo da memria principal MP
Accumulator um registrador que armazena
valores intermedirios, que no seriam teis
ao final da operao
Haver em nossa arquitetura, alm dos 16,
outros registradores espalhados no
processador: dois latches, A e B, o Memory
Adress Register (MAR) e o Memory Buffer
58
Register (MBR)

Os latches servem para segurar dados


no barramento e evitar que sejam
sobrescritos
Precisamos sempre lembrar que os fios do
barramento apenas conduzem eletricidade,
que j instvel por si mesma
Latches sero importantes ento para
captar dados do barramento que esto
prontos para serem processados, isto ,
esto estveis
como tirar uma foto:
necessrio esperar at que
todos estejam parados
59

O MAR ligado ao barramento de


endereos, que controla exclusivamente o
fluxo de endereos que o processador
envia para serem consultados na memria
O MBR ligado ao barramento de dados
do sistema, e guarda os dados buscados
na memria que sero processados na
CPU ou os dados resultantes de algum
processamento e que sero escritos na
memria, ou at mesmo processados
novamente
60

Podemos agora comear a montar o


nosso processador
J foi dito que, para comear, vamos
pensar apenas em somar dados. Para
isso, precisamos simplesmente ler dois
deles e som-los
Dois registradores e uma ULA so
Escolheremos
necessrios
PC
ento, dentre nossos
IR
AC
16 registradores, um
R1
R2
registrador R1 e
ULA
.
outro R2 para ler e
.
.
somar seus dados
.
61

Intuitivamente, ligamos tudo atravs


de barramentos
Vamos guardar o resultado da soma no
registrador R3
PC
IR
AC
R1
R2
R3
.
.
.

Barramento B
Barramento A

ULA

Barramento C
62

Ainda no o caso, mas se


quisssemos multiplicar ou dividir um
nmero por 2, precisaramos adicionar
um deslocador
Posicionando os 2 dispositivos
separadamente, teramos a vantagem
de fazer operaes simultneas.
Colocando ambos juntos, podemos uslos consecutivamente, isto ,
multiplicar ou dividir direto o resultado
de uma soma, sem precisar armazen63

Mesmo que ainda no seja necessrio,


vamos adiantar um deslocador para a
nossa mquina, colocando o mesmo logo
aps a ULA:PC
IR
AC
R1
R2
R3
.
.
.

Barramento B
Barramento A

ULA

DES

Barramento C

64

Agora, precisamos pensar fisicamente


Imagine se nossa soma fosse R1 R1
+ R2, isto , o registrador R1 receberia
o resultado da soma de seu valor atual
com o valor de R2
Enquanto a ULA processa os primeiros
bits de cada dado, o barramento de
sada est sendo modificado e,
portanto, os novos valores j esto
sendo salvos em R1, o que poderia
causar um erro na soma
Uma das solues para esse impasse
65

PC
IR
AC
R1
R2
R3
.
.
.

Barramento B
Barramento A

LA

LB

ULA

DES

Barramento C
66

Ok, mas temos que pensar tambm na


interao processador-memria
preciso adicionar, ento, MAR e MBR.
O MAR controla apenas informaes
(endereos) que vo do processador
para a memria, mas o MBR controla o
fluxo de dados de toda a interao,
incluindo os dados de sada do
deslocador, dados de entrada para a
ULA e dados que sero lidos ou escritos
na memria
MAR

MBR

67

Em nossa arquitetura, o MAR poder ser


carregado a partir do latch B
interessante possibilitar o processamento
de dados direto do MBR para a ULA,
poupando assim o tempo de selecionar o
registrador (entre 16 deles!) desejado para
armazenar o resultado da operao, e
depois selecionar o mesmo novamente para
buscar os bits e process-los

68

Porm, repare que o MBR estar


conectado ULA, junto com o latch A. H
um conflito visvel nessa configurao
Latch A

MBR

Lembre-se de que aULAULA apenas um


circuito combinatrio. Os bits de controle
que recebe so apenas para especificar a
operao a ser feita, o que significa que
est sempre recebendo dados
69

PC
IR
AC
R1
R2
R3
Barramento C

.
.
.

Barramento B
Barramento A

LA

LB

fl
con

MAR

ULA
Sem pnico!

MBR
DES
A soluo simples!

70

ito

Basta adicionar um multiplexador, que


chamaremos de AMUX (multiplexador A):
PC
IR
AC
R1
R2
R3
Barramento C

.
.
.

Barramento B
Barramento A

LA

LB

AMU
X

MAR
ULA
MBR
DES
71

O multiplexador controlar qual dos


dados deve ser enviado para a ULA
Mas e se a instruo a ser executada
fosse
R1 R1 + R2 + R3 +
R4 ?
Intuitivamente, a soluo seria uma
ULA com 4 entradas, com a vantagem
de resolver essa soma sem precisar
guardar nenhum resultado
A
B
C
D
intermedirio
ULA
72

Sendo assim, uma ULA com 4 entradas


mais vantajosa para os casos de soma com
4 parcelas.
O problema que isto no ser econmico se
essa soma no ocorrer com frequncia

E pensando bem, de fato ela no to


comum quanto uma soma com apenas 2
operandos, para a qual basta uma ULA com
2 entradas
Unindo o til ao agradvel, por que no
pensar em uma soluo alternativa para
realizar esta soma, ainda sem precisar
salvar valores intermedirios?
73

Eis a soluo:
A

ULA 1

ULA 2

ULA 3

ULA 4

74

Curiosidades
Fabricar 3 ULAs com 2 entradas ainda
mais econmico do que projetar uma
nica ULA com 4
Alm disso, outra vantagem em reduzir
o tamanho das ULAs pode ser explicada
fazendo uma analogia com a forma como
so fabricados os prprios processadores
75

Curiosidades
Processadores so obtidos atravs de
fatias redondas de silcio, que podem ser
divididas em partes pequenas ou nem
tanto:

76

Curiosidades
Podemos pensar em cada um desses
pedaos como uma componente do
processador
As fatias, porm, sempre tem impurezas
Imagine, por exemplo, a fatia abaixo,
onde as manchas vermelhas so suas
impurezas
77

Curiosidades
Cada parte atingida por uma impureza
est inutilizada
Pensando nas partes como
componentes, aquelas que foram
atingidas no iro funcionar
Na partio em componentes menores,
repare que bem mais delas saram ilesas
O que restou:
78

Recapitulando, temos ento um


processador que realiza a soma que
queramos
Fora do
Processador
(memria)

Dentro do
Processador

Barramento C

PC
IR
AC
R1
R2
R3
.
.
.

Barramento B
Barramento A

LA

LB

AMU
X

MA
R

ULA
MB
R

DE
S
79

importante ressaltar que as linhas


que ilustram os barramentos esto
sendo mostradas apenas nos caminhos
que queramos para a soma
Na verdade, todos os registradores
esto conectados aos barramentos A, B
e C, e uma estrutura de controle que
determina de onde so lidos os dados e
onde eles so gravados
Falando em controle, j vimos que no
so s os registradores que precisam
de bits de controle para que o
processador possa funcionar
80

Temos 16 registradores para leitura e


escrita
A inteno ler sempre 2 dados (um
vai para o barramento A e o outro para o
barramento B), realizar uma operao
na ULA e/ou no deslocador e, quando
necessrio, armazenar o resultado em
outro registrador
Isso faz com que precisemos de 16 bits
de controle para cada uma dessas
operaes. Entenderemos o motivo logo
81

A posio do registrador-alvo seria dada


pela posio do bit 1 em meio aos 16
bits de controle
Por
na operao de leitura
000exemplo,
0000000001000
cujo controle : 0000000000001000
PC
seria lido o dado do quarto0 registrador
0
0
1
0
0

IR
AC
R1
R2
R3
.
.
.

R13
82

Mas no por mgica que a informao do


registrador lida quando ele recebe o bit 1
Na estrutura interna dos registradores, vimos
que eles recebem um bit HE para habilitar sua
entrada e outro, HS, para habilitar sua sada
No exemplo anterior, a operao a ser feita
era de leitura. Ento, a sada do registrador
que precisa ser habilitada, para que a
informao seja jogada em um dos dois
barramentos (A ou B)
Bits de controle especificam qual dos dois
barramentos ser o destino dos dados, mas
isso por ora no tem importncia
83

Caso a operao fosse de escrita no


registrador, o bit que iria para cada
registrador corresponderia ao HE, e
aquele que recebesse 1 seria sobrescrito
Mas, e se quisermos simplesmente
gravar o resultado no MBR, e no gravar
em nenhum registrador?
Para isso, precisamos de um 17
bit de controle (EnC, Enable C),
ao barramento C, que impea
escrita em qualquer um dos 16
registradores caso isso no seja
desejado
84

Os outros registradores (latches A e B, MAR


e MBR) recebem, separadamente, tambm 2
bits de controle (HE e HS), exceto pelo MBR
que recebe 4
Os outros 2 bits do MBR so comandos de
leitura e escrita na memria (chamaremos
RD, leitura, e WR, escrita)
Nossa ULA recebe 2 bits de controle para as
4 operaes que pode executar a partir de
dados de entrada A e B: 00 para A + B, 01
para a operao lgica A AND B, 10 para
simplesmente retornar A, e 11 para retornar o
inverso de A
85

O deslocador tambm precisa receber 2 bits


de controle (00 para no deslocar, 01 para
deslocar esquerda, 10 para deslocar direita
e 11 nada faz)
Finalmente, o multiplexador recebe apenas
um bit para controlar qual dos dois dados que
ele recebe deve seguir (0 para seguir o valor de
latch A e 1 para seguir o valor que veio de MBR)
Na ordem, temos ento 16 + 16 + 17 + 2 + 2
+2 + 4 + 2 + 2 + 1 = 64
primeira vista, precisamos apenas de um
registrador especial para controle, de 64 bits,
com um bit para cada sinal
Mas sero todos esses 64 bits realmente
necessrios?
86

A verdade que muito


desses bits podem ser
dispensados

Fazendo uma anlise mais cuidadosa dos


controles de cada componente, veremos
por que muitos desses sinais so
desnecessrios
Mas, antes disso, vamos introduzir uma
nova componente que ser necessria
para nos livrarmos de alguns bits
87

Decodificador
Dispositivo que, para a nossa
abordagem, receber um nmero binrio
de 4 bits e, com ele, liberar 16 bits
onde o bit na posio i ser 1 e os
outros, 0
OBS: i o valor na base 10 do binrio
original. Note que i est entre 0 e 15
Exemplo: se o decodificador recebe o
3 2 1 0
binrio 0011 (=3), a sada ser
0000000000001000
Representao:
DEC
88

Afinal, qual a grande utilidade do


decodificador?
Pense: se com apenas 4 bits, podemos
representar at o nmero 15, ento
possvel especificar em 4 bits qual o
registrador a ser selecionado
Adicionando decodificadores para A, B e
C, passamos a conta de 16 + 16 + 17 bits
para 4 + 4 + 5, j que o bit EnC
permanece
Pois , j economizamos 36 bits
de controle
89

Os latches A e B so registradores que no


precisam de controle na sada. Precisam apenas
controlar os dados que entram, que vo
sobrescrever as informaes que eles
guardavam at ento
A sada dos latches pode ficar sempre liberada,
j que a funo deles simplesmente salvar
valores e no deixar que outras informaes de
um barramento passem por cima deles
HE

HS

90

Para a nossa abordagem, o MAR tambm


precisa de controle apenas na entrada, para
controlar os endereos que nele entram e
que sero ento enviados para a memria
automaticamente
O mesmo serve para o MBR. Apenas um bit
de controle necessrio, que enviado para
a sada do MBR, controlando se a informao
nele contida ir ou no para a memria
As operaes de leitura e escrita na
memria continuam sendo comandadas
pelos bits RD e WR descritos anteriormente
91

timo, precisvamos de um registrador


de 64 bits para controle, e agora
conseguimos reduzir este tamanho para
24
Superficialmente, o que ns temos at
Processado
Memria :
ento
r
principal

endereos

dados
control
e
(leit/esc
)

N2

MAR

Controle
(24 bits)

MBR

N1

N0
92

Podemos imaginar N0 como um pobre


estagirio, que trabalha e executa ordens
O controle, N1, seria o chefe, quem d as
ordens, atravs da busca das instrues e
dos recursos presentes na memria
principal
Aos poucos, iremos desvendar
o que est por trs da nuvem
no slide anterior
93

E nosso processador ficou assim:

16

Controle

4
4

16

bits

4
C

17

0
1
2
3
4
.
.
.
.
.
.
.
.
.
.

Barramento B

Barramento C

16
registradore
s

Barramento A

LA

1
1

LB
1

AMU
X

MAR
ULA
1

MBR

2
3

DES
2

RD/WR

94

Vamos dessa vez utilizar como exemplo


a instruo R1 R1 + R2, para ilustrar
como ficam os bits de controle durante o
processo
A B C

En
C

AMU
X

UL
A

R
D

W
R

MA
R

MB
R

DE
S

L L
A B

95

Chamaremos o momento inicial de t


Os registradores R1 e R2 ficam nas
posies 3 e 4, respectivamente,
lembrando que o primeiro registrador, PC,
fica na posio 0. O valor em R1 ser
jogado no barramento A, e o valor de R2 no
barramento B; logo, A = 0011 e B = 0100
O resultado ser armazenado em R1,
ento o controle do barramento C deve
tambm ser 0011
96

Obviamente, no incio do processo ainda


no podemos gravar nada no destino,
ento EnC tem de estar desativado
Neste momento, no h problemas em
especificar qual dos 2 dados (vindos do
MBR ou do latch A) o AMUX ir direcionar
para a ULA. Sabemos que sero dados
vindos de latch A, ento o bit de controle
para AMUX ser 0
J vimos que a combinao do controle
para que a ULA opere uma soma 00
97

Nada est sendo lido ou escrito na memria


(RD = 0 e WR = 0)
MAR no receber nenhum endereo de
memria
MBR tambm no est realizando nenhuma
atividade em t
Tambm j vimos que a combinao que faz
com que o deslocador retorne a prpria
entrada 00
As entradas dos latches A e B devem estar
desabilitadas, pois as informaes ainda no
foram transferidas para os barramentos A e
B
98

Temos ento, no momento t:

A B C

En
C

AMU
X

UL
A

R
D

W
R

MA
R

MB
R

DE
S

L L
A B

001 010 001


1
0
1

00

000

00

99

Aps um tempo para busca dos dados,


t, os nicos controles que se modificam
so aqueles dos latches
Isso porque, agora que os dados j
foram jogados aos barramentos, os
latches precisam receb-los, quando
estveis, para que sejam transferidos
ULA
Vamos considerar t = t + t
100

Temos ento, no momento t :


A B C

En
C

AMU
X

UL
A

R
D

W
R

MA
R

MB
R

DE
S

L L
A B

001 010 001


1
0
1

00

000

00

001 010 001


1
0
1

00

000

00

101

Aps um tempo de execuo, t, os


latches precisam voltar a ser 0, para
que nada presente nos barramentos A e
B sobrescreva os dados armazenados
nos latches, j que no sabemos se eles
viro a ser ainda necessrios para a ULA
futuramente
Alm disso, se queremos gravar o
resultado de volta em R1, EnC precisa
agora passar a ser 1
O resto permanece inalterado
Agora consideremos t = t + t + t
102

Temos ento, no momento t :


A B C

En
C

AMU
X

UL
A

R
D

W
R

MA
R

MB
R

DE
S

L L
A B

001 010 001


1
0
1

00

000

00

001 010 001


1
0
1

00

000

00

001 010 001


1
0
1

00

000

00

103

Mas ento, necessrio ler toda a


sequncia de bits de controle 3 vezes
para uma simples operao de soma?
Vimos pela tabela que pouca coisa se
altera durante o tempo que decorre
desde a leitura dos dados nos
registradores at o armazenamento do
resultado em um deles
Ento, deve haver uma maneira mais
inteligente e menos custosa de
executar instrues. Afinal,
tempo sempre precioso
104

Relgio (clock)
Este outro dispositivo importante, que
emite uma sequncia de pulsos
peridicos que controlam alguns
circuitos da mquina
Se os pulsos so peridicos, quer dizer
que possuem uma determinada
frequncia
O perodo de cada pulsao define o
ciclo da mquina
A mquina realiza um conjunto de
s
Pulso
atividades durante um ciclo
Representao:
Marcador de
frequncia

Ciclo

105

Agora, podemos conservar todos os bits que se


mantiveram inalterados na tabela, deixando por
conta do relgio as alteraes necessrias
Por exemplo, sabemos que o bit EnC est
diretamente relacionado ao bit HE dos
registradores
Os pulsos enviados pelo clock definem ento o
momento exato em que a entrada do
registrador deve ser habilitada, caso se deseje
armazenar o resultado de algum clculo em um
registrador
Isto pode ser feito atravs de um circuito
bastante simples:
CK
HE
EnC

106

Com isso, j temos tudo de que precisamos


para comear a ver o que est por dentro
da nuvem que havia em N1
Em outras palavras, vamos agora entender
como funciona toda a mquina de controle
do processador e como ela executa o
microprograma
Microprogramas so sequncias de
instrues (em binrio, evidentemente) que
controlam o funcionamento de cada
componente em N0
Cada instruo de um microprograma
executada em um ciclo
107

O processamento de uma
microinstruo se resume a:
Busca da instruo
Identificao da instruo
Execuo, entre aspas porque engloba
na verdade:
Busca dos operandos
Operao
Armazenamento do resultado

Temos ento 5 atividades que so


realizadas pelo processador durante um
ciclo
108

Dentre as 5 atividades listadas, o tempo


necessrio para a segunda (identificao de
uma instruo) ser quase nulo na nossa
abordagem
Isto porque teremos na nossa arquitetura
de controle (N1) um registrador especial
chamado MIR (MicroInstruction Register),
para onde cada microinstruo ser
carregada
O MIR j entende o significado dos bits de
uma instruo de acordo com a posio de
cada um
MIR
109

Visto isso, o relgio que utilizaremos poder


ser dividido em 4 subciclos:

Atras
o
Atraso
Atraso

1 ciclo
O relgio ter 4 sadas, das
quais 3 possuem
atrasos. Isso faz com que sejam gerados
pulsos em momentos diferentes para cada
sada
Cada uma dessas sadas consiste em um
subciclo, como vemos na representao
110
acima
1 subciclo

Teremos tambm em N1 uma memria,


chamada memria de controle, onde
so armazenadas e de onde sero lidas
as microinstrues
Nossa memria de controle poder
armazenar, no mximo, 256 instrues,
cada uma com 32 bits
Se no MIR onde cada instruo ser
carregada, conclumos que a largura do
MIR ser de 32 bits
Memria de Controle

Carrega instruo

MIR
111

Toda memria precisa estar ligada a um


MAR e um MBR, e com a memria de
controle no diferente
Portanto, vamos adicionar um
registrador MAR, que chamaremos de
MPC (MicroProgram Counter), cuja
funo encontrar a prxima instruo
do microprograma a ir para o MIR
Recebe endereo da prxima instruo

MPC
Envia endereo da prxima instruo

Memria de Controle

MIR

112

O MBR da memria de controle


j est em N1...
... o prprio MIR!

Mas precisamos voltar a falar do MPC. De


onde ele recebe a prxima microinstruo?
Podemos supor que as instrues so
executadas sequencialmente. Neste caso,
basta incrementar o endereo atual, e teremos
o endereo da prxima
Precisamos ento de uma componente
simples, mas que ainda no tnhamos visto113

Incrementador
Circuito relativamente simples de
poucas portas lgicas que, como o nome
j diz, recebe um nmero binrio como
entrada e retorna o seu sucessor
O nmero binrio de entrada, no
incrementador que usaremos no nosso
exemplo, ser composto por 8 bits
Representao:
IN
C

114

Temos at agora:
IN
C

MPC

Memria de Controle

MIR

HOUSTON,
WE HAVE A PROBLE

Visivelmente, temos um problema


MPC precisa ser controlado para
no ficar o tempo todo selecionando endereos na memria!

115

Vamos inserir agora o relgio, que ser


uma componente fundamental para
todo o processador, tanto em N0 quanto
em N1
Por enquanto, no falaremos da
atuao do relgio em N0, e j podemos
lig-lo a duas das componentes de N1
que temos at agora: I
1

Atras
o
Atraso
Atraso

N
C

MPC

Memria de
Controle

MIR
116

Fazendo isso, permitimos que uma instruo


seja carregada da memria para o MIR apenas
no incio do ciclo (subciclo 1), que quando a
instruo comear a ser processada
Alm disso, permitimos que a prxima
instruo seja selecionada na memria pelo
MPC apenas ao final de um ciclo (subciclo 4),
para que seja recebida pelo MIR no incio do
ciclo seguinte
Note que o MIR estar desabilitado e no ir
mudar durante os subciclos 2, 3 e 4. O mesmo
vale para o MPC durante os subciclos 1, 2 e 3
117

Nosso nvel N1 est quase concludo,


mas precisamos estudar o interior do
MIR antes de continuar
Voc certamente achou estranho
quando dissemos que o MIR entende a
funo de cada bit de uma instruo
apenas pela posio. Observe:

MIR

A
M
U
X

U
L
A

D
E
S

M
B
R

M
A
R

R
D

W
R

E
n
C

118

No MIR, os bits da instruo que ele recebe se


encaixam em cada uma das partes da figura
Cada diviso do MIR serve para especificar o
destino em N0 de cada bit. Por exemplo: o bit mais
esquerda ser o controle de AMUX; do bloco DES
saem os dois bits de controle para o deslocador; e
assim por diante
No so mais necessrios bits de controle para os
latches. J que eles possuem um momento certo
para serem ativados e este o mesmo em todos
os ciclos, podemos deixar os latches por conta do
relgio
Para continuar a montagem do interpretador de
microinstrues, precisamos primeiramente do
que est por trs de
119

Alguns slides atrs, fizemos uma suposio de


que as instrues do microprograma seriam
processadas sequencialmente. Porm, nem
sempre isso acontece
comum que ocorram desvios de endereos
durante o processamento, e por isso precisamos
reservar bits em uma instruo que especifiquem
o endereo da prxima, para quando for
necessrio que esse desvio ocorra
J podemos substituir
por ADDR, conjunto
de bits que representam cada endereo da
memria de controle
Se nossa memria de controle armazena at 256
instrues (= 2), ADDR deve ser composto por 8
bits para poder representar todos os endereos
120

Atras
o
Atraso
Atraso

I
N
C

MPC

Memria de
Controle

.
.

A
D
D
R

Ops, o problema do conflito de novo


Ainda se lembra da soluo?
121

MMU
X

Atras
o
Atraso
Atraso

I
N
C

MPC

Memria de
Controle

.
.

A
D
D
R

Basta adicionar um multiplexador


Chamaremos este de MMUX
122

bastante comum que esses desvios de


endereos sejam condicionais
Por exemplo, voltar ao primeiro endereo da
memria de controle se uma condio X for
satisfeita. Seno, selecionar o endereo
seguinte
Isto nos leva a revelar o que h por trs de
no nosso MIR: um par de bits, o qual
chamaremos de COND, que determina se
ocorrer desvio ou se o endereo da prxima
instruo ser simplesmente o endereo atual +
1
Se voc entendeu isso, ento voc pode
concluir que COND ser o controle de MMUX. Ou
pelo menos parte dele, como veremos mais
123
adiante

Lgica de microssequenciamento
Diferente de todos os circuitos que
apresentamos at aqui, este foi projetado
para uma nica situao, bem especfica
Ele recebe da ULA informaes sobre o
resultado de uma operao: um sinal N que
diz se foi negativo e um sinal Z que diz se foi
igual a 0
Recebe tambm o par de bits COND do MIR
Enfim, sabendo se o resultado da operao
foi positivo, nulo ou negativo e sabendo a
condio de desvio da microinstruo atual,
podemos indicar se o endereo da prxima
microinstruo ser simplesmente o atual +
124
1 ou algum outro

Lgica de microssequenciamento
Talvez seja uma explicao confusa. Podemos
clare-la com um exemplo prtico:
x = 5;
if (x > 0)
return x;

Por que o trecho de programa acima vlido?


Temos todas as informaes necessrias para
decidir se x ser ou no retornado: sabemos
qual a condio para retornar x, e sabemos se
x satisfaz a condio (se x 5, ento x
maior que 0)
A sada ser o bit de controle para o nosso
MMUX
Representao: LMS
125

e
Co
nt
ro
l

Temos enfim:

I
N
C

Atras
o

MUX

MPC

Memria de
Controle

Atraso

A
M
U
X

Atraso

C
O
N
D

U
L
A

. . . .
.

A
D
D
R

LM
S

N1
N0

ULA

le
tro
n
Co

Z N

126

Agora, convencionando os significados dos


bits COND:
00 = no desviar; a prxima instruo estar no
endereo seguinte na sequncia de instrues
01 = desviar para o endereo em ADDR se N = 1,
isto , se o resultado da operao realizada pela
ULA for negativo
10 = desviar para o endereo em ADDR se Z = 1,
isto , se o resultado for 0
11 = desviar independente do resultado da ULA

O sinal de controle de MMUX resultado de


R.N + L.Z + L.R (L o bit esquerda, e
R o bit direita no par COND)
Relembrando: + o operador lgico OR e
127
. AND

Nosso processador completo, incluindo N0 e N1, fica assim:

Figura retirada e adaptada do livro Organizao


Estruturada de Computadores, de Andrew S.

128

Para concluir, falta apenas falar sobre as


ligaes do relgio com as componentes de N0,
que ainda no havamos visto
Para isto, vamos supor um microprograma
qualquer que interpreta a soma de x + y, que foi
executada com x recebendo o valor 3 e y
recebendo o valor 5
Para simplificar o exemplo, escolheremos o ciclo
em que a soma ser efetuada. Isto significa que
as constantes 3 e 5 j foram buscadas na
memria e armazenadas nos registradores
(suponhamos R1 e R2), e est pr-determinado
que o resultado ser armazenado em R3
Assim, a microinstruo deste ciclo ser r3 := r1
+ r2 (o smbolo := denota atribuio)
129

Para conseguir passar esta


microinstruo para sua forma real
(binria), vamos relembrar as divises
do
Depois,
MIR: vamos analisar quais os bits de
controle necessrios para cada um desses
campos e, dessa forma, teremos nossa
instruo em bits

A
M
U
X

C
O
N
D

U
L
A

D
E
S

M
B
R

M
A
R

R
D

W
R

E
n
C

A
D
D
R

130

Sabemos que ambos os operandos viro dos


latches, j que no buscamos nada do MBR.
Para que AMUX direcione ULA a informao
contida no latch A, o controle deve ser 0
No h desvios nesta instruo, ento COND = 00

A operao de soma. Esta operao realizada


pela ULA quando o controle igual a 00

A
M
U
X

C
O
N
D

U
L
A

00

00

D
E
S

M
B
R

M
A
R

R
D

W
R

E
n
C

A
D
D
R

131

Nada ser feito alm da soma, ento o


controle do deslocador precisa ser 00
para que sua sada seja igual entrada
Nada sair de MBR para a memria ou vice-versa

O campo MAR tambm ser 0 j que no enviar


nenhum endereo para a memria principal

A
M
U
X

C
O
N
D

U
L
A

D
E
S

M
B
R

M
A
R

00

00

00

R
D

W
R

E
n
C

A
D
D
R

132

Nada ser lido da memria neste ciclo (RD = 0)...

...nem escrito (WR = 0)


O bit EnC deve ser 1 porque neste ciclo
haver armazenamento de um valor (o
resultado da soma est sendo atribudo a R3
na microinstruo). Evidentemente, o relgio
ir ditar o momento certo do armazenamento

A
M
U
X

C
O
N
D

U
L
A

D
E
S

M
B
R

M
A
R

R
D

W
R

E
n
C

00

00

00

A
D
D
R

133

PC
IR
AC
.
R1
.
R2
.
R3
.
.
.
.

Lembra-se dos nossos registradores?


Comeando da posio 0, R1, que
contm o primeiro operando, est na
posio 3. Logo, A = 0011 (3 na base 2)
R2, que contm o segundo operando,
est na posio 4. Logo, B = 0100
Enfim, R3, destino do resultado, est na
posio 5. Logo, C = 0101
A
M
U
X

C
O
N
D

U
L
A

D
E
S

M
B
R

M
A
R

R
D

W
R

E
n
C

00

00

00

1 0101 0100 0011

1
2
3
4
5

A
D
D
R

134

Agora s nos resta o campo ADDR.


Nossa microinstruo contm uma
simples soma, sem desvio de endereos.
Ento, podemos atribuir qualquer valor
para ADDR, j que ele ser ignorado.
Sendo assim, vamos optar por todos os
bits
Enfim,
nossa0microinstruo na forma binria
sendo
: 00000000000101010100001100000000
A
D
D
R

A
M
U
X

C
O
N
D

U
L
A

D
E
S

M
B
R

M
A
R

R
D

W
R

E
n
C

00

00

00

1 0101 0100 0011 00000000

135

Agora, podemos comear a processar a


instruo
No subciclo 1, o relgio ativa apenas o
MIR, porque estamos ainda na etapa da
busca da instruo
Vimos que a instruo
automaticamente identificada no MIR e
no leva praticamente tempo algum.
Memria de Control
Consideramos ento que a identificao
0 00 00 00 0 0 0 0 1 0101 0100 0011 00000000
tambm ocorre no subciclo 1
.
.
.
.
.

136

MIR

No subciclo 2, os bits dos campos A e B


do MIR sero enviados aos
decodificadores, para habilitar as sadas
dos registradores R1 e R2
Com isso, os valores 3 e 5 so jogados
aos barramentos A e B, respectivamente
Neste subciclo, o relgio ativa os latches,
para que possam receber esses valores
Retomaremos a figura do livro
Organizao Estruturada de
Computadores para mostrar o caminho
dos dados durante este subciclo
137

138

O subciclo 3 o intervalo em que ULA e


deslocador iro operar sobre os dados
recebidos
Aqui seria tambm o momento certo para que
o MAR fosse carregado, se fosse necessrio.
Mas a microinstruo deste ciclo no envolve
essa necessidade, e por isso tivemos o bit 0 na
parte do MIR destinada ao MAR

5+
3 8
--8

00 (soma)

00 (sada = entrada)

139

E finalmente, no subciclo 4 em que ocorre o


armazenamento do resultado em um dos nossos 16
registradores, quando a instruo assim determina
Nossa microinstruo r3 := r1 + r2 atribui o
resultado da soma a R3, o que significa que temos,
sim, que armazenar dados em um dos 16 durante
este ciclo
O valor 8, neste instante, est no barramento C
J vimos que EnC 1 durante todo o ciclo, pois
um dos sinais de controle fornecidos pelo MIR. Cabe
ao relgio habilitar a entrada de R3 no momento
certo, que o subciclo 4 para qualquer
microinstruo
Agora que 8 est em R3, podemos comear um
novo ciclo com uma nova microinstruo, caso ela
exista
140

Podemos dividir o nosso MIR em 2 conceitos:


A
M
U
X

C
O
N
D

U
L
A

D
E
S

M M
B A
R R

E
R W
n
D R
C

OPCODE
(determina a operao da microinstruo)

A
D
D
R

Operandos

ADDR formado por 8 bits, e A, B e C por


mais 4 cada. Ou seja, 20 bits compem os
operandos
Os outros 12 do MIR compem ento o
cdigo da operao. Isto quer dizer que
temos 2 (= 4096) possveis instrues
diferentes
141

Porm, queremos economizar


novamente. Ser que possvel?
Com uma anlise mais cuidadosa,
veremos que podemos reduzir de
4096 para 2048 possibilidades
Para iniciar nossa economia, precisamos ter
em mente que alguns
pares de bits do MIR
no admitem todas as 4
combinaes (00, 01,
10 e 11)
142

Mais especificamente, o par de bits RD e


WR no admite a combinao 11, j que
impossvel que aconteam
simultaneamente operaes de leitura e
escrita na memria
Vamos raciocinar: tnhamos 2
2
2
2
2
2
2
2
2
2
2
2
2
possibilidades
2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 x 22
0 ou 1

Quantas possibilidades teramos se o


par RD/WR apenas admitisse a
2
2
2
2
2
2
2
2
2
1
1
2
combinao
RD
fosse
2
2=
x 2 x 2 x 2 x 2 x 211,
x 2 x isto
2 x 2 x ,
1 x 1se
x
2
=
sempre 1 e WR fosse sempre 1?

143

Da, temos que o nosso total de


possibilidades agora 2 - 2, isto , 4096 1024 = 3072
Podemos usar um raciocnio anlogo para o
deslocador, que nunca receber a
combinao 11
Teremos 3072 - 1024 = 2048
microinstrues
Assim, j reduzimos as possibilidades de
instrues pela metade. Poderamos levar em
conta outras restries, mas chega de ser
po duro e vamos voltar ao que interessa
144

Pilhas
Voc j deve saber que uma pilha
uma estrutura de dados que
consiste em um amontoado de valores (empilhados, da o nome)
Pilhas sero importantes na execuo
de programas. Veremos a seguir como
elas so utilizadas

145

Toda pilha possui duas operaes bsicas: PUSH,


que consiste em adicionar um valor
na pilha; e POP, que retira da pilha o
valor presente no topo
Para a nossa arquitetura, pilhas sero
blocos contguos presentes na memria principal que contero dados a serem
processados, com um ponteiro SP (Stack Pointer)
que indicar o endereo onde est o topo da pilha
medida que descemos pela memria, os
endereos aumentam. Ou seja, sempre que
adicionarmos um valor na pilha (PUSH), o ponteiro
SP apontar para o endereo atual 1, um
endereo acima
O contrrio acontece para a operao POP
146

A pilha do exemplo a seguir comea no


endereo 1000 da memria, e seu topo
est em 996 .
.
.
.
.
.
996

997

998

999

1000

SP

.
.
.
.
.
147

Fazendo PUSH 3, o valor 3 ser


acrescentado na pilha, e o topo ser o
endereo 996 . 1 = 995
.
.
.
.
.
995

996

997

998

999

1000

SP

.
.
.
.
.
148

Por outro lado, se tivssemos feito POP,


sairia o valor 9 que est no topo da pilha e o
novo topo estaria em 996 + 1 = 997
.
.
.
.
.
.

996

997

998

999

1000

SP

.
.
.
.
.
149

Algumas linguagens de programao


so organizadas em blocos (escopos)
Em Java, por exemplo, o escopo de uma
classe so todos os procedimentos
existentes naquela classe, e no escopo
de cada procedimento existem todas as
operaes realizadas por ele, inclusive
eventuais chamadas a outros
procedimentos

150

Para essas linguagens, interessante utilizar


pilhas durante a execuo de um programa
para liberar o espao ocupado pelas variveis
locais de um procedimento, quando ele
finalizado
Variveis locais so variveis utilizadas e
conhecidas exclusivamente nos procedimentos
onde foram inicializadas, e no nvel de
macroprogramao so geralmente
carregadas nas pilhas
J as variveis globais so variveis
conhecidas em todo o programa e a princpio
esto presentes em endereos da memria
que no fazem parte da pilha de um
procedimento em particular
151

Alm das operaes PUSH e POP, outra


operao til para pilhas mover
arbitrariamente o ponteiro SP, sem inserir
dados inicialmente
Isto til para quando a execuo entrar em
um procedimento que utilizar variveis locais,
de maneira que SP ser decrementado (topo
subir) para reservar espao para essas
variveis
Em Pascal, isso fica fcil de ser visto, j que as
variveis locais so inicializadas antes da
palavra begin, que indica o comeo do
procedimento
O exemplo a seguir mostra o comeo do
152
mtodo de ordenao BubbleSort, em Pascal

procedure BubbleSort(var A: ArrayType);


var i, j: integer;
begin
.
.
.

Repare que as variveis i e j so


inicializadas. Em seguida, a palavra begin
indica o comeo das operaes do
procedimento neste ponto onde SP
decrementado em 2
A pilha agora ocupa mais 2 espaos: os
espaos de i e j, que eventualmente
recebero valores durante a execuo do
procedimento
E se o topo da pilha atingir endereos que j
153

Familiar?

Agora vamos supor uma funo, tambm


em Pascal, que recebe duas entradas e
retorna como resultado o produto entre elas
Perceba como fica sua pilha de execuo
154

function produto(a, b: integer): integer;


var p, j: integer;
begin
if (a = 0) or (b = 0) then
produto := 0
else
begin
p := 0;
for j := 1 to a do
p := p + b;
produto := p;
end
end;

SP

j
p
end. ret.
b
a

Quando
a funo
termina,
espaos das
Ao final
desta
linha,osprecisamos
variveis
locais sopara
liberados.
Em outras a e
de 2 espaos
as variveis
palavras,
incrementado
em 2, voltando

J
aoSPfinal
desta linha,
b,
mais
um
espao
para
o endereo
a ser o endereo de retorno. Este endereo
precisamos
de modo
mais 2que
para
as
deonde
retorno,
de
a funo
dir
a execuo
estava quando
155
variveis
locais
p eretornar
je ela continuar
chamou
a funo
produto,
a
saber
para
onde
quando

Com apenas estas descries, fica a


impresso de que a funo foi intil,
j que a pilha guardou apenas seus
valores de entrada e manipulou as
variveis locais

Mas bvio que isto no verdade. De que


maneira ento foram usadas as variveis
a e b para chegar at o resultado final,
e onde ele foi parar?
Todos os resultados de operaes
intermedirias foram sendo armazenados no
nosso registrador AC (Accumulator). O mesmo
vale para o resultado final da funo, que pode
ser apenas um valor intermedirio para o resto
156
do programa

O endereo de retorno est relacionado


a outro registrador, o Program Counter
Quando a funo produto termina, o
endereo de retorno desempilhado e
salvo em PC
Caso voc no se lembre, AC e PC so
dois dos nossos 16 registradores
conectados aos barramentos A, B e C em
N0
Isso nos d bagagem suficiente para
falar sobre o nvel de macroprogramao
157

Macroprogramao
Vimos que existem milhares de
possibilidades de microinstrues
diferentes
Surge a necessidade de haver
instrues em um nvel mais alto, para
consequentemente reduzir o conjunto
de instrues de forma significativa
Veremos no slide seguinte uma tabela,
mais uma vez do livro Organizao
Estruturada de Computadores, com
todas as macroinstrues da nossa
158

159

Antes de entender melhor a tabela,


importante ressaltar que seus bits no
devem nunca ser confundidos com os bits
das microinstrues! At porque
microinstrues so formadas por 32 bits,
enquanto as macro possuem 16 apenas
Dito isto, perceba que da 1 at a 15
instruo, nunca se repete uma combinao
para os 4 primeiros bits. Isto quer dizer que
possvel identificar instrues que no
comecem por 1111 apenas pelos 4
primeiros bits
Porm, quando a instruo comea por
160
1111, necessrio analisar os bits seguintes

Diferentemente das microinstrues,


que tinham um nmero fixo para
OPCODE e outro para os operandos, a
parte de OPCODE varia nas macro
A instruo LODD, por exemplo, possui
4 bits de operao, 0000, enquanto
todos os outros representam seu
operando. J as instrues que
comeam por 1111 precisam de mais
bits OPCODE para que possam ser
diferenciadas entre si
161

Para ilustrar como feita a identificao


das macroinstrues, precisamos primeiro
tornar aqueles nossos 16 registradores um
pouco mais complexos
Alm de PC, IR e AC, precisamos de mais
registradores com funes especiais para
que seja possvel implementar um
microprograma que interprete nossas
macroinstrues corretamente
Mais uma vez, trabalharemos em cima de
uma figura do livro Organizaes
Estruturadas de Computadores, que mostra
os registradores adequadamente nomeados
162

O registrador SP armazena o
endereo do topo da pilha
TIR armazena uma cpia temporria
da macroinstruo que est sendo
executada, ou seja, uma cpia de IR.
usado para decodificar o OPCODE
Os 3 registradores que seguem
contm as constantes 0, +1 e -1
AMASK contm a chamada mscara
de endereos e usado para
separar bits OPCODE dos bits de
endereo, atravs da operao AND
do seu contedo com a
macroinstruo da qual se quer
separar os bits
SMASK til nas instrues INSP e
DESP, que contm 8 bits de
operandos, pois a operao AND de
seu contedo com a macroinstruo
163
isolar esses 8 bits

preciso convencionar os nomes de algumas


operaes feitas em microinstrues
Para as operaes da ULA, utilizaremos a + b
para soma, band(a, b) para AND, a para
retornar a prpria entrada e inv(a) para
retornar o inverso do primeiro operando
Para operaes do deslocador: lshift(a)
desloca a entrada 1 bit para a esquerda, e
rshift(a) faz o oposto
Desvios condicionais sero representados por
if b then goto addr, que significa: se o bit b
for 1, v para o endereo addr
No nosso microprograma, b ser N ou Z, os
dois bits da ULA que indicam se o resultado
164
foi menor que 0 ou igual a 0, respectivamente

Veja a seguir quais valores cada conjunto


de bits assume no MIR para os seguintes
exemplos de microinstrues, em uma nova
tabela do livro:

Dito tudo isso, podemos ver um


microprograma que interpreta
macroinstrues

165

166

O microprograma comea com um loop principal,


que s termina quando acabar o macroprograma,
isto , quando no mais houver macroinstrues a
serem interpretadas
Na linha 0, o MAR recebe o contedo de PC, que
o endereo da macroinstruo a ser
interpretada. Tambm nesta linha, RD ativado,
para que a macroinstruo desejada comece a ser
lida na memria a partir do endereo do MAR
Na linha 1, o microprograma aproveita para
incrementar o contedo de PC, j que isso alguma
hora teria que acontecer. Se isto no fosse feito, a
linha 1 seria desperdiada, porque a
macroinstruo ainda no chegou at o MBR. Pelo
mesmo motivo, RD continua ativado, pois ainda
estamos lendo a macroinstruo na memria 167

Na linha 2, a macroinstruo em MBR


salva em IR. Aqui ainda h tempo para
testar o primeiro bit da instruo, da
esquerda para a direita: se este no for
0, j sabemos que a macroinstruo no
nenhuma das 8 primeiras da nossa
tabela, ento podemos ir para a linha 28
e testar o segundo bit

168

Tanto na linha 28 quanto na linha 3, repare que o


teste do desvio condicional exatamente o
mesmo: tir := lshift(ir + ir);
No uma percepo trivial primeira vista,
mas o que acontece nesse teste o
deslocamento de dois bits esquerda do
contedo de IR
Recordando, deslocar um bit esquerda em um
nmero binrio o mesmo que multiplicar o seu
valor por 2. Fazer ir + ir equivalente a fazer 2 *
ir, ou seja, deslocar um bit esquerda de ir. Fazer
lshift(2 * ir) ento o mesmo que deslocar 2 bits
Porm, lembre-se de que os testes so feitos
sempre em funo dos bits N e Z liberados pela
ULA
169

Vamos voltar a focar nas primeiras linhas


do microprograma. Na linha 3 (tir := lshift(ir
+ ir); if n then goto 19;), a interpretao
ir para a linha 19 caso o bit N da sada da
ULA seja 1
Isto quer dizer que o teste feito em cima
da instruo vinda de IR deslocada um bit
esquerda, pois o segundo deslocamento
esquerda (feito por lshift) feito somente
no deslocador, e no mais na ULA
Caso N tenha sido 0, passamos linha 4
(tir := lshift(tir); if n then goto 11;).
Aqui, o registrador TIR receber seu prprio
contedo deslocado em um bit esquerda
170

S que este deslocamento novamente feito


por lshift, e opera em cima do prprio contedo
de TIR. Isso significa que a ULA receber tir
como um dos operandos e retornar ele mesmo
lembrando que tir j o contedo de IR
deslocado 2 bits esquerda, por causa do que
aconteceu na linha 3
Ento, se na linha 3 testamos o segundo bit da
instruo, na linha 4 testa-se o terceiro, e s
depois desse teste o contedo de tir
novamente deslocado (lshift(tir))
Na linha 5 (alu := tir; if n then goto 9;), alu
uma pseudovarivel que representa que o
contedo de TIR apenas passar pela ULA para
que seja testado seu primeiro bit (4 da
171
instruo original)

Na linha 5, se o bit testado for 1, significa


que o OPCODE da instruo 0001, e STOD
a nica macroinstruo cujo incio 0001.
Por isso desviamos para a linha 9, linha
onde STOD executada em microinstrues
Se o bit testado for 0, o OPCODE 0000,
ento basta prosseguir para a linha
seguinte, que onde LODD executada
Esse processo teste-desvio-execuo a
base do microprograma que interpreta
macroinstrues
Acompanhe a seguir um trecho, bastante
simples, de um programa qualquer
172

se (i j) faa

// i e j so variveis quaisquer

m = a[i*2] // a um vetor e m uma varivel


// qualquer
fim se

Vamos expressar este algoritmo em


nvel de
macroprogramao, e depois em
microinstrues, para enfim nos
despedirmos
da nossa mquina-exemplo

173

Sero realizadas 4 operaes nesse


Macroprograma
algoritmo:
LODD j
i j?
SUBD i
i*2
JNEG saida
buscar valor em a[i * 2]
m := a[i * 2]
Testar se i j o mesmo que testar se

i - Com
j 0 a instruo LODD passando j

(entenda
asivariveis
Ateno:
e j so passadas
variveis no
globais
macroprograma como o endereo onde
essas variveis esto, e no seus
saida (continuao
respectivos valores), armazenamos no
do programa)
registrador AC o valor contido no
.

Precisamos
agora
subtrair
do
valor
endereo passado
.
.
de i. Com a instruo SUBD, o
.
resultado j ser armazenado em AC
Hora de implementar o desvio
condicional: caso o contedo de AC
seja negativo (j > i), desviamos para o
174
final do se do algoritmo. Para isso,

Agora, carregamos o endereo do


primeiro elemento do vetor a no
registrador AC. Se fizssemos LODD a,
teramos o valor de a[0] no

acumulador,
no o que
Quisemos oe endereo
de queremos
a[0] porque
assim podemos encontrar a[i * 2]. J
que i * 2 = i + i, fazemos 0 + i...
...+ i, e temos em AC o endereo
correto do (i * 2)-simo elemento do
vetor

Aquia vem o problema: queremos


fazer
ac := m[ac], mas no temos uma
instruo que o faa. Temos como
fazer, porm, m[sp] := m[ac], isto ,

...e depois
armazenar
este valor
em
colocar
na pilha
de execuo
o valor
AC
(acendereo
:= m[sp])presente em AC
contido no
Finalmente, armazenar o valor de AC
no endereo da memria onde est a
varivel m

Macroprograma
LODD
SUBD
JNEG
LOCO
ADDD
ADDD
PSHI
POP
STOD

j
i
saida
a
i
i
m

saida (continuao

do programa)
.
.
.
.
.
.

175

Com o macroprograma e com o que vimos


at aqui sobre microinstrues, fica fcil
entender como o nosso algoritmo em
microprograma
Antes, precisamos apenas esclarecer como
funciona a subtrao
O oposto de um nmero x -x, e a
codificao do oposto de um nmero binrio
o seu inverso + 1
Formalizando: x - y = x + (-y) = x + (y + 1)
Lembre-se tambm: usaremos &v quando
quisermos o endereo de uma varivel v
176

mar := &i; rd;


varivel i
rd;
at MBR
b := mbr;
sem funo definida
mar := &j; rd;
ac := b + 1; rd;
Falta somar com j
a := inv(mbr);
recebe o inverso
ac := ac + a; if n goto faa;
algoritmo
alu := ac; if z goto faa;
tambm no saia
goto saida;
faa b := lshift(b);
de B
ac := &a;
ac := ac + b;

//MAR recebe o endereo da


//esperando o valor de i chegar
//B um dos resgistradores

//armazenando i + 1 em AC.
//valor de j chegou ao MBR. A
//se i + j + 1 < 0, no saia do
//se essa soma for igual a 0,

//multiplicando por 2 o contedo


//AC recebe o endereo de a[0]
177
//AC recebe o endereo de a[i*2]

H apenas uma ltima observao. Analise


estas ltimas linhas do microprograma anterior:
mar := ac; rd;
rd;
mar := &m; wr;
wr;

Implicitamente, o que temos :


mar := ac; rd;
rd;
ac := mbr;
mar := &m; wr;
mbr := ac; wr;

O acumulador recebe o que foi lido da memria


(valor em a[i*2]). Em seguida, indicamos que
estamos visando o endereo da varivel m para
escrita, fazemos o MBR receber o valor em AC e
escrevemos esse valor no endereo onde est
m
178

Princpios da Microprogramao

Horizontal X Vertical

Passaremos agora a discutir sobre dois


conceitos relacionados
microprogramao
Na micrprogramao horizontal, a
preocupao exclusivamente com as
portas lgicas
Nada de sinais codificados para
economia de bits: cada conjunto de
sinais que sai do MIR controla de forma
direta sua respectiva componente
179

Isto significa que as microinstrues em


uma arquitetura assim teriam largura
equivalente ao total de sinais de
controle recebidos pelas componentes
...mas claro que esta
explicao no deixou
nada muito claro

180

Usaremos um exemplo da mquina que


projetamos anteriormente. Lembra-se
do nosso MIR?
A
M
U
X

C
O
N
D

U
L
A

D
E
S

M M
B A
R R

E
R W
n
D R
C

A
D
D
R

Os campos A, B e C possuam 4 bits cada,


que passavam por decodificadores onde
eram transformados em 16
Se tivssemos usado, exclusivamente,
microprogramao horizontal na
arquitetura, cada um desses campos teria
16 bits. Isto aumentaria drasticamente a
largura do MIR
181

Os campos ULA e DES tambm ficariam


maiores. Os pares 00, 01, 10 e 11 tambm
so codificaes, as quais geram um
conjunto de 4 bits que identifica qual a
operao a ser realizada pela ULA ou pelo
deslocador
No caso do deslocador, pode ser gerado um
conjunto de 3 bits, j que o deslocador
possui apenas 3 funes e o par 11 nunca
ocorre
Assim, conclumos que o campo ULA
passaria a ter 4 bits e o campo DES, 3 bits
182

fcil perceber que seguir risca


o conceito de microprogramao
horizontal no teria sido a opo
mais inteligente para a nossa mquina,
j que sempre optamos por tentar baratear o
custo da mesma
Mas se quisssemos ser ainda mais
econmicos na largura das microinstrues
(e do MIR, consequentemente) da arquitetura
que projetamos, poderamos aplicar o
conceito de microprogramao vertical
183

A microprogramao vertical carrega uma


ideia rigorosamente oposta horizontal:
encurtar ao mximo a largura das
microinstrues, criando o mximo possvel de
codificaes nos sinais
Diminuir o nmero de bits das microinstrues
sempre uma ideia interessante. Vamos
mostrar como ficaria nossa mquina se
segussemos este princpio exclusivamente
Nosso MIR, que antes tinha 32 bits de largura,
pode passar a ter apenas 12, como veremos a
seguir
184

Com apenas 4 bits para OPCODE e 8 para


operandos (4 para cada), possvel
escrever um microprograma equivalente ao
que vimos
anteriormente
4 bits
4 bits
4 bits
OPERANDO 1

OPERANDO 2

OPCODE
ADDR (endereo)

claro que as restries aumentam com


esses cortes
Agora, s temos 2 operandos. Como saber
onde o resultado ser gravado?
A soluo guardar o resultado sempre no
mesmo registrador de um dos operandos
185

Antes, podamos fazer R3 <- R1 + R2.


Agora, se queremos de fato guardar em R3
o resultado da soma dos valores de R1 e
R2, precisamos fazer
R1 <- R1 + R2; e depois R3 <- R1
Por este exemplo j foi possvel perceber
que o microprograma ficaria mais extenso
do que aquele que fizemos anteriormente,
mas isso assunto para mais tarde
A seguir, ser apresentada como ficaria
nossa mquina em microprogramao
vertical. Repare na presena de 3 novos
elementos: OP, AND e NZ
186

187

Recordando: os dados de entrada so


sempre carregados dos registradores no
subciclo 2, e o resultado salvo em um deles
no subciclo 4
J que agora temos 2 operandos apenas e
um deles ser ao mesmo tempo um dado de
entrada e o destino do resultado, o bloco
AND se faz necessrio para ativar cada
barramento na etapa correta
Pelo esquema apresentado alguns slides
atrs, vimos que os 2 operandos da
microinstruo pode tambm ser usado como
um endereo. Isto significa que no podemos
ter endereo e operandos em uma mesma
188
microinstruo

Para comeo de conversa, j podemos com


isso adiantar que no possvel testar se o
resultado de uma operao da ULA maior,
igual ou menor que 0, em apenas uma
microinstruo
Precisamos portanto armazenar os bits N e
Z liberados pela ULA, para que eles possam
ser avaliados no ciclo seguinte. a que
entra NZ, que nada mais do que um
registrador que armazena estes dois bits
Resta falar sobre OP, a mais importante das
3 inditas componentes em nossa nova
mquina
189

Para cada combinao de OPCODE (16


possveis, j que so 4 bits), so gerados 13
bits que controlam a lgica de
microssequenciamento bloco usado na
avaliao dos bits N e Z , a ULA, o
deslocador, o registrador NZ, o AMUX, os
registradores MBR e MAR, e os sinais RD e
WR; 2 bits para os 3 primeiros e um bit para
os outros
O problema que quem est projetando a
mquina precisa construir todo um circuito
que gere os bits de controle corretos para
cada OPCODE
190

Exemplificando: suponha que as combinaes


OPCODE para as instrues que iniciam as
operaes de leitura e escrita (portanto,
envolvem a ativao do MAR) sejam 1000 e
1001
Tudo o que sabemos :
A combinao de OPCODE 1000 gera o bit 1 para
MAR
A combinao de OPCODE 1001 gera o bit 1 para
MAR
As demais combinaes geram o bit 0 para MAR

Temos ento uma tabela que contm os bits de


entrada e tambm os bits de sada
191

A, B, C e D seguem
a ordem do bit mais
significativo para o
menos significativo, e
S a sada
A partir da, basta
utilizar os
conhecimentos da
disciplina de Circuitos
Digitais para montar
um circuito
apropriado
192

Da tabela, obtemos (A.B.C.D) + (A.B.C.D),


que pode ser simplificado em A.B.C
Com isso, j temos projetado o circuito
que, recebendo os bits de OPCODE, gera o
bit de controle apropriado para MAR. Os
circuitos que vo gerar os outros 12 bits de
controle so construdos utilizando o
mesmo raciocnio deste exemplo
Enfim, o bloco OP nada mais do que o
conjunto de todos estes circuitos. Como
chegar em cada um deles no relevante
para os nossos estudos
193

Para efeitos de comparao, vamos


supor que fosse ser executado em nossa
mquina original um microprograma de
80 instrues, lembrando que na
mquina original uma microinstruo
tinha 32 bits de largura, enquanto na
que acabamos de projetar, uma
microinstruo possui 12 bits
Muito provavelmente,
mais de 80 instrues
80 instrues
194

Como j foi dito, as restries causadas pela


fixao da largura de OPCODE em 4 fazem
com que uma funo desempenhada por uma
microinstruo em nossa primeira mquina
necessite de mais de uma microinstruo na
nova arquitetura (operar na ULA e depois
avaliar o resultado, por exemplo)
Assim, podemos saber qual das duas
mquinas ser mais econmica atravs de
um clculo bastante simples
O microprograma que ocupar menos
volume na memria de controle
determinar a resposta
195

Por volume, entende-se a largura de


cada microinstruo multiplicada pelo total
de microinstrues
Na mquina original, ocupou-se um
volume de 80 x 32 = 2560 bits. Se
fizermos:
80 x 32 > n x 12
teremos n < 213, isto , a mquina que
acabamos de projetar ser mais econmica
caso o microprograma equivalente quele
de 80 instrues tenha menos de 213
E a tendncia que realmente tenha bem
menos que 213 microinstrues
196

Ento, toda mquina deve ser projetada


seguindo risca o princpio da
microprogramao vertical?
Certamente no. Lembre-se de que cada
microinstruo , independente de sua
largura, executada no tempo de um ciclo,
que fixo
Quanto mais microinstrues necessrias
para executar uma determinada funo,
mais lenta a execuo. Concluso: a
nossa primeira mquina mais cara e
mais rpida, enquanto a ltima mais
lenta, porm mais barata
197

Nanoprogramao

Falando em economia, existe ainda


outra forma de ocupar menos memria
no armazenamento dos
microprogramas, que deve ser discutida
Vimos que programas so sequncias
de instrues. possvel dividi-los em
sequncias e instrues
Vamos a seguir entender melhor esta
jogada
198

Memria de
Controle

Consideremos um microprograma que


ocupa completamente esta memria de
controle, isto , possui h instrues de
largura w
Podemos dividi-lo em duas partes:
199

1
3
2
0
1
2
5
.
.
.

sequncia na
qual
ocorre cada
instruo,
identificada
apenas
por um
nmero

cada instruo
individualmen
te, todas
distintas entre
si
(n instrues
no
total)

A
B
C
.
.
.

esquerda, temos uma memria que


armazena nmeros binrios que identificam
cada instruo
As instrues completas so armazenadas na
memria direita, com a vantagem de cada
uma aparecer apenas uma vez
200

Novamente, a melhor maneira de


clarear tudo ilustrando com um
pequeno exemplo
Imagine
o seguinte microprograma:
A
B
A
A
A
C
D
D
B
D
C
A
A
C
D
B

A equivale a
01100101100101101001
B equivale a
10110110001000011011
C equivale a
11101000110100110000
D equivale a
00010110100101110010
201

Neste exemplo, w = 20 e h = 16, isto ,


um total de 16 microinstrues onde a
largura de cada uma de 20 bits,
totalizando 320 bits
Vamos agora dividir o microprograma. A
parte esquerda o microprograma de
fato, e direita temos o nanoprograma,
que guarda cada microinstruo diferente
Cada linha do microprograma passa a
conter apenas o endereo da nanomemria
no qual est a instruo que deveria estar
naquele local do microprograma
202

memria de controle

A
B
A
A
A
C
D
D
B
D
C
A
A
C
D
B

h = 16

00
01
00
00
00
10
11
11
01
11
10
00
00
10
11
01

endereos
nanomemria
00 01100101100101101001
01 10110110001000011011
10 11101000110100110000
11 00010110100101110010
w = 20

203

Vimos que cada linha da memria de


controle passou a ter 2 bits apenas. Isto
porque o microprograma tem, no total, 4
instrues diferentes, fazendo necessrios
log4 = 2 bits para represent-las. A
quantidade de linhas a mesma do
microprograma original: 16
Portanto, a memria de controle passou a
ter 16 x 2 = 32 bits ocupados
J a nanomemria possui o total de
instrues multiplicado pela largura das
mesmas, o que totaliza 80 bits (4 x 20)
Dos 320 bits originais, o microprograma
passou a ocupar apenas 32 + 80 = 112 bits!
204

De uma forma geral, temos:


o microprograma original ocupa h.w bits
a memria de controle aps a diviso passa
de h.w para h.logn bits ocupados, onde n o
total de instrues diferentes do
microprograma
a nanomemria introduzida tem n.w bits
ocupados

Em outras palavras, a nanoprogramao


ser econmica sempre que a seguinte
inequao for satisfeita:
h.w > h.logn + n.w
205

Observe que n aparece nos dois produtos


direita, sendo determinante na economia
dos bits
Isso faz sentido porque, se houver muitas
instrues diferentes em relao ao
nmero de linhas no microprograma
original, recorrer nanoprogramao no
ser eficiente. A nanomemria ter um
tamanho prximo ao tamanho que tinha a
memria de controle antes da diviso
Tudo o que teramos ento seria uma
memria parecida com a anterior, e mais
uma outra contendo apenas referncias
para a nova memria
206

Pipeline
At agora, nos
prendemos muito em
economizar espao
na memria e
baratear o custo de
uma mquina
Mas, e quando
quisermos uma
mquina mais veloz,
isto , com melhor
desempenho?
207

At aqui, sempre assumimos que o


tempo de um ciclo era fixo e prdefinido. E por causa disso, o nmero
de microinstrues a serem executadas
definia o tempo gasto na execuo do
programa
Esquecendo um pouco a memria,
vamos focar agora em como
reduzir o tempo gasto na execuo das microinstrues
A seguir, veremos o uso do
pipeline
208

At aqui, seguindo o modelo de Von


Neumann, vimos que as etapas de
execuo de uma instruo seguem
uma ordem: busca da instruo,
identificao, busca dos operandos,
execuo da operao e
armazenamento do resultado
Podemos representar desta forma,
onde cada quadrado representa um
subciclo:
I
B

AR

BO

209

Vimos tambm que, por este modelo,


uma nova microinstruo s pode ser
executada aps o trmino da anterior,
mesmo que no haja interdependncia
entre elas
Esquematizando, teramos:

1
2

I
BO

AR

I
BO

AR

...

tempo

Como otimizar este processo?

210

Curiosidades
Henry Ford (1863 1947)
nasceu nos EUA, fundou
a Ford fbrica de automveis e defendia fortemente o consumismo
Mas nada disso nos
interessa
211

Curiosidades
Ford utilizava a chamada linha
de montagem, que consistia em
especializar seus empregados em
funes definidas
O mesmo empregado passava todo o
tempo realizando uma nica tarefa, mais
especfica possvel e repetidas vezes, de
forma a diminuir a chance de erros e fazer
com que levasse menos tempo para concluir
212
a tarefa

Aplicaremos o fordismo aos nossos


estudos: em vez de uma via de dados
onde todas as atividades so
realizadas, teremos uma via de dados
especializada para cada operao
O ganho no desempenho bastante
I
B
E
AR
1 significativo
BO

2
3

I
BO

AR

...I

tempo
213

Dessa forma, assim que a busca de


uma instruo for concluda, pode ser
iniciada a busca da prxima, j que a
via especializada nesta tarefa estar
livre. E o mesmo serve para
identificao, busca de operandos etc
Podemos chamar cada um dos
quadrados de um estgio do pipeline
Antes, o tempo total era dado pelo
tempo de uma instruo multiplicado
pelo total de instrues:
t = n.tinst
214

No pipeline, o tempo de uma instruo


dado pelo nmero de estgios multiplicado
pelo tempo de um estgio:
tinst = ne.te
E, se analisarmos o esquema de execuo
das instrues no pipeline feito h pouco,
teremos o tempo total de execuo no
pipeline:
tpipe = tinst + (n 1).te
= (ne + n 1).te
Com isso, podemos conhecer o speedup, ou
seja, o quanto mais rpido a execuo por
pipeline em relao ao modelo de Von
215
Neumann

O clculo se d dividindo o tempo total


t do modelo de Von Neumann pelo
tempo gasto no pipeline, o que nos d:

O nmero de estgios vai ser sempre


muito inferior ao nmero de instrues,
portanto podemos ignorar os valores ne
e -1 no denominador. No numerador,
isso no possvel por ser uma
multiplicao, e no uma soma
Passamos a ter ento:
216

Com o resultado, inferimos que a


execuo de um programa ,
idealmente, ne vezes mais rpida no
pipeline
Note que na rea entre
fcil visualizar isso:
os pontilhados, 4 tarefas
esto sendo executadas
ao mesmo tempo,
enquanto apenas uma
estaria sendo no modelo
antigo. Isto porque so 4
estgios

217

Lembre-se de que, em uma aplicao real,


o esquema anterior teria centenas de
microinstrues. Isto , a rea entre as
linhas pontilhadas sempre vai ser a imensa
maioria
Mas, como sempre, existem problemas

E deles que vamos falar a partir de


agora

218

Dependncia de dados
Quando h dependncia de dados entre
instrues, algumas componentes
precisam se manter ociosas durante alguns
ciclos
a Isto
desperdcio de tempo
= b +caracteriza
c
d = a + h
B

BO

BO

GR
E

GR

Agora, aparece o problema. Neste ciclo,


Vamos
No
primeiro
ciclo,
a instruo
a sucesso
da
buscada.
dos
buscamos
os
operandos
a eahinstruo
Aqui,
aacompanhar
mquina
identifica
a
ciclos
Ou
seja,
seu
final,
oavalor
que
mquina
apenas
instruo
2,entender
que
a acontece
odos
resultado
=b
+para
caoe
jsendo
busca
o
tem
a instruo
nem
sequerciclo,
saberjo
da
instruo
Esem
este
resultado
ainda
operandos
b1.
e c.
Neste
mesmo
que
significa,
poisjainda
no
foih
no
foi gravado,
que
ter sido
buscada
a instruo
d isto
=
a s
+

219

Dependncia de dados
Quando h dependncia de dados entre
instrues, algumas componentes
precisam se manter ociosas durante alguns
ciclos
a Isto
desperdcio de tempo
= b +caracteriza
c
d = a + h
B

BO

-BO

GR
E-

GR

Portanto, faz-se necessrio esperar at


que o valor de a esteja corretamente
gravado em algum registrador
220

Note que, sem esse problema, levaramos


5 ciclos para executar as 2 instrues.
Com o impasse, levamos 2 ciclos a mais
Se a dependncia de dados ocorresse
seguidamente em 500 instrues,
levaramos 2 ciclos a mais para cada
dependncia
De pouco mais de 500 ciclos, a sequncia
passaria a levar cerca de 1500 ciclos para
ser executada
H ainda outro problema, muito mais
comum do que a dependncia de dados
221

Dependncia de controle
Vimos que o endereo da instruo a ser
buscada na memria se encontra no
registrador PC
Sabemos tambm que, se no h desvios,
a prxima instruo a ser buscada est no
endereo dado por pc (contedo de PC) +
1
No pipeline, busca-se uma instruo em
um estgio, e j no prximo busca-se a
instruo seguinte, no endereo pc + 1

222

Controle

Convm uma pequena


reviso. Lembra-se deste
esquema?
sobre como so feitos os
desvios de instrues

MUX
I
N
C

MPC
Memria de
Controle
A
M
U
X

C
O
N
D

U
L
A

. . . .
.

A
D
D
R

LM
S

N1
N0

ULA

le
tro
n
Co

Z N

223

Na verdade, no necessrio relembrar o


que acontece em cada parte no desenho
Tudo o que precisamos ter em mente
que os desvios condicionais so realizados
aps alguma operao na ULA, a qual
libera os sinais N e Z que contm
informaes sobre a sada da ULA. Esta
sada , ento, avaliada de acordo com a
condio do desvio
Dito isso, conclui-se ento que s
sabemos se ocorrer desvio no terceiro
estgio
B

BO

GR
224

Isso significa que teremos problemas no


pipeline se tivermos uma instruo parecida
com:
se a = 0 ento goto 8

Suponha que a instruo acima esteja no


endereo 1 da memria principal
B

BO

BO

GR
E

GR

Porm, chegamos agora ao ciclo onde a


Neste
estaremos
buscando
primeira
instruo
executada.
AaULAe
Agora,ciclo,
identificamos
nossa
instruo
nossa
instruo.
Se
PC a.
contm
seu
dar
como
o prprio
operando
a,
buscamos
osada
operando
Vamos
supor
endereo,
ento
o na
contedo
demesmo
PC 1
que ser
avaliado
lgica
de
este seja
igual
a 0.
Neste
microssequenciamento
e, como
igual
a
ciclo, buscamos a prxima
instruo,
por
0,
a execuo
do programa
ser
default,
no endereo
pc + 1.teria
Estde
sendo

225

Isso significa que teremos problemas no


pipeline se tivermos uma instruo parecida
com:
se a = 0 ento goto 8

Suponha que a instruo acima esteja no


endereo 1 da memria principal
B

BO

B
-

-BO

GR
E

GR

E agora? Constatamos anteriormente que


Mais
uma vez,
necessrio
a instruo
no endereo
2 jesperar
foi buscada,
alguns
ciclos aat
quealtura
tenhamos
a
e a mquina
essa
j identificou
e
confirmao
de que haver
para
buscou os operandos
dessa desvio,
instruo
que
s
buscar a prxima instruo
nodepois
nos interessa
226

Ns, como projetistas da mquina,


precisamos sempre buscar formas de passar
por todos os obstculos existentes em uma
implementao

A sada geralmente pensar em


otimizaes que diminuam o prejuzo
causado por possveis problemas de uma
implementao
227

A primeira otimizao, que qualquer bom


compilador deve ser capaz de fazer, uma
arrumao na sequncia de instrues a fim
de diminuir ao mximo o nmero de
ocorrncias de dependncia de dados em um
programa
Vimos que a sequncia
a = b + c
d = a + h
causaria um desperdcio de 2 ciclos na
mquina
Entretanto, o compilador pode procurar
outras instrues que nada tenham a ver com
estas e execut-las neste espao
228

Por exemplo, se houver no programa


outras duas instrues de soma, a
ordem de execuo pode ser:
a
x
m
d

=
=
=
=

b
y
n
a

+
+
+
+

c
z
p
h

Desta forma, no haver perda de


O processador acaba de
tempo
gravar o resultado em

a = b + c

x = y + z

BO

m = n + p

GR
E

BO

d = a + h

algum registrador
GR
E

BO

BO

GR
E

GR

Inicia-se a busca dos


operandos. Quando o
registrador onde est
a for consultado, l j
estar o valor correto
229
de a

Outra otimizao possvel conhecida


como Data Forwarding
Consiste em buscar os operandos sem
esperar que o resultado da instruo
anterior seja gravado em um
registrador, mesmo que um desses
operandos seja esse resultado
Registrador
es

ULA
230

Na sequncia:
a = b + c
d = a + h
sabemos que a segunda instruo tambm
pode ser escrita como d = b + c + h
Desta forma, no precisamos esperar at
que o registrador da varivel a seja
atualizado para buscar os operandos da
segunda instruo
Em outras palavras, no necessrio
esperar chegarmos ao final do estgio onde
o resultado gravado (GR) para
conhecermos um dos operandos da
231
segunda instruo

Agora, podemos reaproveitar


Antes, precisvamos do
este valor logo aps o trmino
valor gravado em um
da execuo da operao na
registrador
ULA
B

BO

GR

BO

GR

Esta seria uma opo


bastante til para um caso
do tipo:
a
d
f
h
j
x

=
=
=
=
=
=

b
a
d
f
h
j

+
+
+
+
+
+

c
e
g
i
k
h

232

Processadores como o da Intel possuem


uma srie de outras otimizaes na
implementao do pipeline
Prejuzos causados por dependncia de
controle so diminudos com maneiras de
prever se a instruo atual causar desvio
na execuo da sequncia de instrues,
com probabilidades altas de acerto
Outra otimizao possvel armazenar
certas informaes quando houver desvios
na instruo, para serem usadas quando
esta instruo aparecer novamente. Por
exemplo, em um loop onde so feitas 10
iteraes, ocorrem 9 desvios para a mesma
233
instruo (a primeira)

Acompanhe:
i <- 1;
para i = 1 at 10 faa
instruo 1;
instruo 2;
instruo 3;
i <- i + 1;
fim do loop

i=1
A condio
analisada
e no
...desviamos
de volta
ocorre
para a desvio:
primeira
entramos
no loop
loop
instruo no

Neste
momento,
Hora de
analisar i =
2,
ento para
novamente
seiniciar
i
a
segunda
iterao...
menor
ou igual
a 10

234

H ainda uma ltima forma de otimizao


que melhora o desempenho da nossa
mquina, conhecida como superpipelining
Vimos que a implementao do pipeline
agiliza, idealmente, ne vezes a execuo das
instrues em relao nossa mquina
antiga
Ora, por que ento usar apenas 4 estgios?
Um dos processadores da Intel possui
pipeline de 20 estgios. Apenas para dar uma
ideia, os primeiros 4 estgios so usados para
operaes de busca de instrues
B1B2B3B4

. . .
. . .

235

Esta configurao caracteriza exatamente um


superpipeline
Ok, 20 estgios j est melhor que 4. Mas por
que no usar, talvez, 1000 estgios?
Para executar vrias operaes do mesmo tipo
ao mesmo tempo, precisaramos aumentar o
nmero de componentes. No caso de 4
operaes de busca, por exemplo, o
processador precisa ter 4 PCs para armazenar o
endereo dessas instrues, 4 IRs para
armazenar as instrues propriamente ditas,
etc
Aumentar o nmero de componentes encarece
a mquina, o que tornaria um desastre elevar
demais o nmero de estgios do pipeline 236

Muito bem, falamos bastante sobre como


amenizar os revs do pipeline, mas no
podemos esquecer que estes no so os
nicos que afetam o desempenho da
mquina
At agora, economizamos alguns ciclos aqui,
outros l, j executamos vrias instrues ao
mesmo tempo e por a vai
Mas no nos aprofundamos ainda em um
outro problema que aumenta
consideravelmente o tempo gasto pela
mquina na execuo de problemas: leitura
e escrita na memria principal
Estas operaes levam aproximadamente
237
100 ciclos para serem realizadas!

Memria Principal x Cache


Uma das solues possveis para
diminuir a perda de tempo envolvida
em operaes de leitura e escrita na
memria principal so as memrias
cache
Este um tipo de memria rpida, isto
, acessos a ela levam muito menos
tempo, porm com a desvantagem de
serem surrealmente caras
Recordando, de forma
simplificada,
o
Memri
Processad
or
a
modelo de Von Neumann:
238

Temos as seguintes opes:


A que usvamos antes, memria principal,
lenta, mas com um tamanho maior sem um
custo alto demais
Memri
a
Principal

Processad
or

Uma memria cache, carssima e,


portanto, de tamanho bem limitado, mas
Processad
Cach
muito mais rpida
e
or
239

Podemos sonhar que


somos infinitamente
ricos e simplesmente
aumentar a cache at o
tamanho que queremos
Ou podemos voltar realidade...

240

Agora, vem a pergunta manjada: ser que


possvel ter o benefcio da rapidez da
memria cache sem ter que aument-la a
ponto de deixar a mquina cara demais, e
ao mesmo tempo ter o tamanho de uma
memria principal razovel?
Podemos comear com uma constatao
bsica: utilizando uma memria
convencional, gastaremos 100 ciclos (tempo
de leitura na memria, como j vimos) pelo
menos uma vez por instruo, pois
precisamos buscar cada uma delas na
memria
Ento, j seria um bom comeo no precisar
buscar uma mesma instruo duas vezes241

Podemos arrumar nossa mquina da


seguinte forma:
Memri
a
Principal

reo
ende

reos
e
d
n
e

Processad
or

Cach
e

dados

dados

J que a cache tem um tamanho bastante


limitado, podemos us-la pelo menos para
armazenar instrues que j tenham sido
buscadas. Assim, quando o processador
precisar de alguma instruo pela
segunda vez, ela ser carregada da
cache, o que levar muito menos tempo
do que carreg-la da memria principal
novamente
242

Vamos agora supor uma instruo que


executada k vezes ao longo de um
programa
Na arquitetura em que s havia
processador e memria principal, o tempo
mdio para buscar essa instruo seria,
naturalmente, o tempo gasto em uma
operao de busca na memria
J na arquitetura proposta no slide
anterior, sabemos que a instruo s ser
buscada na memria principal na primeira
vez. Nas outras (k - 1) vezes, ela ser
carregada da cache. Logo, o tempo mdio
para buscar essa instruo ser:
243

Para k muito grande, temos k >> tmem,


e k k - 1. Da:

Ou seja, o tempo mdio de busca dessa


instruo ser o tempo de busc-la na
cache, que era o que queramos antes
E nem precisamos gastar uma senhora
grana com uma cache do tamanho da
memria principal; bastou usar uma
menor com alguma inteligncia
244

Existe um tipo especial de cache, chamado


cache associativa, que recebe da
memria principal um conjunto de
instrues, em vez de apenas uma por vez.
Estes conjuntos so os blocos
Blocos de instrues so divises feitas
tanto na memria principal quanto na
cache, de tamanho fixo e pr-determinado
Por exemplo, podemos dividir a memria
principal em blocos de tamanho 4 (cada um
bloco 1
contm 4 palavras):
bloco 2
bloco 3
bloco 4
bloco 5
.
.
.

245

Sempre que o processador pedir uma


instruo, a cache armazenar todo o
bloco de onde essa instruo faz parte:
Vamos dar um zoom em parte da
memria do slide anterior. Suponha que
o processador precisa da palavra no
0
endereo
6:
1
2
3
4
5
6
7
8
9
10
11

As palavras nos
endereos 4, 5 e 7
tambm so
carregadas para a
cache

Cache

246

Se as palavras nos endereos 4, 5, 6 e 7


forem todas instrues e estas forem
executadas sequencialmente, apenas uma
consulta na memria principal ser
necessria, em vez de 4
Considerando que, em aplicaes reais, o
tamanho dos blocos tende a ser muito
maior que 4, pode-se dizer que
conseguimos uma grande vantagem
Analisaremos mais a fundo a cache
associativa para entender melhor suas
vantagens
247

Cache associativa para blocos de


tamanho
validade n do 4:
bloco
(0 ou 1) bloco

(Pn a n-sima palavra do bloco)

P0

P1

P2

P3

P0

P1

P2

P3

P0

P1

P2

P3

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

e
(o ntra
u
l i n d as
ha
s)

248

Validade o bit que diz se aquele bloco est


sendo usado ou lixo. 1 significa que o bloco
est sendo usado, enquanto 0 quer dizer que
aquela linha pode ser sobrescrita
Nmero do bloco o nmero (evidentemente
binrio) que representa onde aquele bloco
estava na memria principal. Se o bloco
armazena as palavras vindas dos endereos 0,
1, 2 e 3 da memria, ento seu nmero 0; se
armazena as palavras dos endereos 4, 5, 6 e 7,
ento seu nmero 1; etc
Quando o processador pede alguma palavra da
memria, todas as linhas de validade 1 so
verificadas, e a palavra buscada na memria
principal apenas se no existir na cache
249
Mas como essa checagem feita?

Antes, precisamos entender


uma certa mgica
Seja a memria dividida em
blocos de tamanho n
Cortando os logn bits menos
significativos do endereo de uma
palavra, obtemos exatamente o bloco
onde ela est
Por exemplo, vimos que, dividindo em
blocos de tamanho 4, a instruo no
endereo 7 est no bloco 100000111
log4 = 2; ento, tirando os 2 bits
7 na base 2, em
bits, obtemos
igual oa:
menos8
significativos,
valor 1, que o nmero do bloco da

250

Na verdade, no algo to difcil de


aceitar se pensarmos em uma
generalizao
Vamos pensar na base 10: considere
uma memria dividida em blocos de
tamanho 100
Os endereos 0 at 99 esto no bloco 0,
do 100 at 199, esto no bloco 1, e por a
vai
Para obter o bloco da palavra no
endereo 374, precisamos tirar os
log100 = 2, ento tiramos
log100 bits menos
significativos
2 algarismos menos
374 os
significativos. A palavra
(mudamos para a base
10, ento a base
est no bloco 3
251

Voltando ao que interessa, vamos supor


que o valor 00001001 chegue ao MAR no
processador. Isto significa que o
processador est pedindo a palavra que
est no endereo 9
Os 2 bits menos significativos so
ignorados, e o valor 000010 comparado,
na cache, a todos os nmeros de bloco
pertencentes a linhas de validade 1
Mas como uma consulta na cache pode ser
to rpida, se ainda precisamos fazer uma
busca sequencial para saber se o bloco 2 j
est de fato armazenado na cache?
252

po
l rta
gi s
ca
s

Na verdade, a busca no sequencial


Em cada uma das linhas da cache,
existem portas lgicas que comparam
simultaneamente o nmero do bloco
nela presente ao valor recebido
os valores so diferentes
000010

os valores so iguais

P0

P1

P2

P3

P0

P1

P2

P3

P0

P1

P2

P3

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

253

O bloco ento est na cache. Mas como


encontrar a palavra certa (a do endereo 9)
em meio s 4 palavras do bloco, que contm
as palavras dos endereos 8, 9, 10 e 11?
Recordando: a palavra pedida a do
endereo 00001001, e para obter o bloco
ignoramos os 2 bits mais esquerda, 01
E estes dois bits so exatamente os bits que
informam qual a palavra certa a ser buscada
no bloco!
Ento, a palavra do endereo 9 a P do
bloco 2
Dessa forma, carregamos a palavra direto da
cache, sem consulta memria principal
254