Introdução à arquitetura
do hardware
• Descodificação de endereços
• Núcleo do processador
Espaço de endereçamento
0000H
Espaço
de e
nd
ereçam
ento
(co
m
16
bits)
Memória 1
Periférico 1
Periférico 2
Periférico 3
Memória 2
Processador Unidade de controlo Unidadede dados Bus de endereços Bus de dados Bus de controloDiagrama de blocos
Processador
Memória
Periférico
Descodificador
de endereços
Bus de dados
CS1
CS2
Bus de endereços
RD
WR
Ciclo de bus com chip select
• Os chip selects
são normalmente
ativos a zero
• Os flancos
ascendentes dos
sinais de RD e
WR devem
ocorrer “dentro”
do período ativo
do chip select.
Relógio
Bus de
RD
WR
dados
endereços
Bus de
dados
endereço
select
Chip
Descodificação de endereços
• Cada dispositivo liga aos bits de menor peso do bus de
endereços
• O descodificador de endereços liga aos bits de maior
peso do bus de endereços.
Processador
Memória
Periférico
Descodificador
de endereços
Bus de dados
CS1
CS2
Bus de endereços
RD
WR
• Supondo um processador de 8 bits
com este mapa de endereços:
Mapa de endereços
ROM
Periféricos
RAM 1
RAM 0
000000
0FFFFF
100000
1FFFFF
FFFFFF
800000
500000
500FFF
– Quantos bits deve ter no mínimo
o bus de endereços?
– Qual o espaço de endereçamento
deste mapa de endereços?
– Qual a capacidade da RAM?
– Qual a capacidade da ROM?
– Qual o espaço reservado para
periféricos?
– Qual o espaço livre?
– Quantos bits de endereço devem
ligar a cada módulo de RAM?
– E à ROM?
24
16 MB
2 MB
8 MB
4 KB
6 MB – 4 KB
20
23
Geração dos chip selects
A23
A22
A21
A20
ROM
Periféricos
RAM 1
RAM 0
000000
0FFFFF
100000
1FFFFF
FFFFFF
800000
500000
500FFF
Decoder
1 para 8
A12..A19
A23
A22
A21
A20
ROM
Periféricos
RAM 1
RAM 0
000000
0FFFFF
100000
1FFFFF
FFFFFF
800000
500000
500FFF
Decoder
1 para 8
A12..A19
Geração dos chip selects
• A geração do chip select
dos “GRANDES”
dispositivos é geralmente
simples e feita à medida.
• A geração do chip select dos “pequenos” dispositivos é
geralmente feita por discriminação de um bocado médio (com
gates ou com outros descodificadores).
• A geração do chip select
dos dispositivos “médios”
é geralmente feita com
descodificadores que
dividem o mapa de
endereços em bocados
iguais.
Descodificação com PROM
Neste caso é possível
programar os endereços
em módulos de 4K.
ROM
Periféricos
RAM 1
RAM 0
000000
0FFFFF
100000
1FFFFF
FFFFFF
800000
500000
500FFF
A23
.
.
.
A12
PROM
(Programmable
ROM)
Em cada palavra da
PROM, só um bit pode
estar a 0.
Descodificação com PROM
• A PROM permite gerar
tantos chip selects
quantos os bits da sua
largura.
• Em cada palavra, só pode
haver um bit a 0.
• Os bits de endereço da PROM ligam aos
bits de maior peso do bus de endereços.
• São precisos tantos bits quantos os requeridos pelo
dispositivo de endereçamento mais fino (que ocupará apenas
uma palavra da PROM).
• Os dispositivos “maiores” (RAM, por exemplo) ocuparão
várias palavras da PROM com o bit da saída respetiva a 0.
• Zonas do espaço de endereçamento sem dispositivo têm a
palavra respetiva com os bits todos a 1.
ROM
PeriféricosRAM 1
RAM 0
000000
0FFFFF
100000
1FFFFF
FFFFFF
800000
500000
500FFF
A23
.
.
.
A12
PROM
(
ProgrammableROM)
Descodificação com PROM
• Neste exemplo, cada
palavra da PROM
corresponde a 4 K
endereços do processador
(para bater certo com o
requerido pelos periféricos).
• Quantas palavras deve ter a PROM?
• Mudar o mapa de
endereços implica
apenas substituir ou
reprogramar a PROM
(que deve ser
EPROM, EEPROM,
FLASH, etc).
4 K
• Qual o conteúdo da PROM?
800 a FFF
501 a 7FF
500
200 a 4FF
100 a 1FF
000 a 0FF
1111 0111
1111 1111
1111 1011
1111 1111
1111 1101
1111 1110
ROM
vazio
periféricos
vazio
RAM 1
RAM 0
ROM
PeriféricosRAM 1
RAM 0
000000
0FFFFF
100000
1FFFFF
FFFFFF
800000
500000
500FFF
A23
.
.
.
A12
PROM
(
ProgrammableROM)
Descodificação mista
Isto permite que a PROM seja
8 vezes mais pequena, com
menos palavras repetidas.
ROM
Periféricos
RAM 1
RAM 0
000000
0FFFFF
100000
1FFFFF
FFFFFF
800000
500000
500FFF
Decoder
1 para 8
A23
.
.
.
A15
PROM
(Programmable
ROM)
A12
A14
A13
Endereçamento de
byte e de palavra
• A memória é vista como um vetor
linear :
– de bytes (8 bits), ou
– de palavras do processador (N bits)
• Endereçamento de byte:
– Permite acesso direto a um byte
– Complica interface de memória (acesso
aos bytes que não sejam o de menor
peso de cada palavra)
– Espaço de endereçamento é menor
– PC e SP têm de variar de 2 em 2
(processador de 16 bits) ou de 4 em 4
(processador de 32 bits)
Endereçamento
de byte (
P de 32 bits)
0CH
08H
04H
00H
10H
Endereçamento
de palavra
03H
02H
01H
00H
04H
“Big-endian” vs “little-endian”
• Em ambos os casos, os inteiros representam-se com os
bits de maior peso à esquerda.
• A diferença está na ordem pela qual os bytes
aparecem.
Big-endian
0CH
08H
04H
00H
10H
8 9 A B
4 5 6 7
0 1 2 3
Little-endian
0CH
08H
04H
00H
10H
B
A
9
8
7
6
5
4
3
2
1
0
Exemplo
03 0F 0A 07 H
03 0F 0A 07 H
“Big-endian” vs “little-endian”
• No big-endian, o byte de maior peso está no byte com
menor endereço (isto é, aparece primeiro quando se vai
incrementando os endereços).
• No little-endian, é o byte de menor peso que aparece
primeiro.
Big-endian
0CH
08H
04H
00H
10H
8 9 A B
4 5 6 7
0 1 2 3
Little-endian
0CH
08H
04H
00H
10H
B
A
9
8
7
6
5
4
3
2
1
0
Exemplo
03 0F 0A 07 H
03 0F 0A 07 H
“Big-endian” vs “little-endian”
• Esta distinção só é importante:
– Ao aceder aos bytes individuais de uma palavra;
– Ao trocar dados entre computadores.
Big-endian
0CH
08H
04H
00H
10H
8 9 A B
4 5 6 7
0 1 2 3
Little-endian
0CH
08H
04H
00H
10H
B
A
9
8
7
6
5
4
3
2
1
0
Exemplo
03 0F 0A 07 H
03 0F 0A 07 H
Acessos à memória flexíveis
• Alguns processadores suportam:
– Acessos a bytes e a palavras de 16 bits e 32 bits (potências de
8 bits até à largura da palavra do processador). Cada instrução
tem de indicar o tipo de acesso;
– Acessos desalinhados a palavras, em qualquer endereço, o que
pode implicar dois acessos e corte e costura...).
10
0CH
08H
04H
00H
10H
11 12 13
C D E F
8 9 A B
4 5 6 7
0 1 2 3
Acessos
alinhados em 8, 16
e 32 bits
Acesso desalinhado
(32 bits, endereço
01H)
Bits de menor peso
• As memórias são geralmente feitas
com chips (circuitos integrados) com
largura de 8 bits, por isso são
precisos:
– 2 em paralelo para fazer 16 bits.
– 4 em paralelo para fazer 32 bits.
• Os vários chips em paralelo podem
ser acedidos simultaneamente em
cada acesso, e é o processador que
depois individualiza os bytes, se
necessário.
• No endereçamento de byte, os bits de
menor peso do bus de endereço não
ligam à memória:
– num processador de 16 bits, A0
– num processador de 32 bits, A1 e A0
Endereçamento
de byte (
P de 32 bits)
0CH
08H
04H
00H
10H
Endereçamento
de palavra
03H
02H
01H
00H
04H
Ligação de RAMs em paralelo
RAM
(8 bits)
Descodificador
de endereços
31..24
CS-RAM
RD
WR
RAM
(8 bits)
RAM
(8 bits)
RAM
(8 bits)
23..16
15..8
7..0
Bus de endereços
An..A2
An..A2
An..A2
An..A2
Bus de dados
Processador
(32 bits)
BS3
BS0
Voltemos ao PEPE-8
• Objetivo: somar um número com todos os inteiros
positivos menores que ele.
soma = N + (N-1) + (N-2) + . . . + 2 + 1
1. soma 0
(inicializa soma com zero)
2. temp N
(inicializa temp com N)
3. Se (temp < 0) salta para 8
(se temp for negativo, salta para o fim)
4. Se (temp = 0) salta para 8
(se temp for zero, salta para o fim)
5. soma soma + temp
(adiciona temp a soma)
6. temp temp – 1
(decrementa temp)
7.
Salta para 4
(salta para o passo 4)
8. Salta para 8
(fim do programa)
Só uma constante por instrução
•
Decompôr instruções com várias constantes em instruções mais
simples, cada uma só com uma constante.
•
Já não há endereços e valores numéricos na mesma instrução).
•
Usa-se um registo auxiliar (A) para guardar valores entre instruções.
0 M[soma] 0
0
1
A 0
M[soma] A
1 M[temp] N
2
3
A N
M[temp] A
2 Se (M[temp] < 0) PC 7
4
(A < 0) : PC 12
3 Se (M[temp] = 0) PC 7
5
(A = 0) : PC 12
4 M[soma] M[soma] + M[temp]
6
7
A A + M[soma]
M[soma] A
5 M[temp] M[temp] – 1
8
9
A M[temp]
A A – 1
10 M[temp] A
6 PC 3
11 PC 5
Que operações são necessárias?
• Para correr o programa anterior, o hardware tem de suportar
as seguintes operações:
Operação
Exemplo
Escrever uma constante no registo A
A 0
Armazenar o registo A na memória
M[soma] A
Ler uma célula de memória e escrever no
registo A
A M[temp]
Operação com o registo A e uma célula
de memória como operandos
A A + M[soma]
Operação com o registo A e uma
constante como operandos
A A – 1
Salto incondicional
PC 7
Arquitetura de base
Registo A
MUX
ALU
Memória
de dados
WR
endereço de dados
resultado da operação
1.º operando 2.º operando
SEL_A
ESCR_A
Memória de
instruções
SEL_ALU
PC
endereço de
instruções
A M[endereço]
Registo A
MUX
ALU
Memória
de dados
WR
endereço de dados
resultado da operação
1.º operando 2.º operando
SEL_A
ESCR_A
Memória de
instruções
SEL_ALU
PC
endereço de
instruções
M[endereço] A
Registo A
MUX
ALU
Memória
de dados
WR
endereço de dados
resultado da operação
1.º operando 2.º operando
SEL_A
ESCR_A
Memória de
instruções
SEL_ALU
PC
endereço de
instruções
A A + M[endereço]
Registo A
MUX
ALU
Memória
de dados
WR
endereço de dados
resultado da operação
2.º operando
SEL_A
ESCR_A
Memória de
instruções
SEL_ALU
PC
endereço de
instruções
A 0 ???
Registo A
MUX
ALU
Memória
de dados
WR
endereço de dados
resultado da operação
1.º operando 2.º operando
SEL_A
ESCR_A
Memória de
instruções
SEL_ALU
PC
endereço de
instruções
A constante
constante
Registo A
MUX_A
ALU
Memória
de dados
WR
resultado da operação
1.º operando
2.º operando
SEL_A
ESCR_A
SEL_ALU
PC
endereço de
instruções
MUX_B
Memória de
instruções
SEL_B
A A + constante
Registo A
MUX_A
ALU
Memória
de dados
WR
constante
resultado da operação
2.º operando
SEL_A
ESCR_A
SEL_ALU
PC
endereço de
instruções
MUX_B
Memória de
instruções
SEL_B
constante
1.º operando
Salto (PC 7) ???
Registo A
MUX_A
ALU
Memória
de dados
WR
constante
resultado da operação
1.º operando
2.º operando
SEL_A
ESCR_A
SEL_ALU
PC
endereço de
instruções
MUX_B
Memória de
instruções
SEL_B
PC constante
Registo A
MUX_A
ALU
Memória
de dados
WR
constante
resultado da operação
1.º operando
2.º operando
SEL_A
ESCR_A
SEL_ALU
PC
endereço de
instruções
MUX_B
Memória de
instruções
SEL_B
ESCR_PC
(A = 0) : PC constante
• SEL_PC (2 bits): não salta, salto incondicional, salto
condicional (se A = 0 e se A < 0)
Registo A MUX_A ALU Memória de dados WR constante resultado da operação 1.º operando 2.º operando SEL_A ESCR_A SEL_ALU PC endereço de instruções MUX_B Memória de instruções SEL_B ESCR_PC SEL_PCbit de maior peso
0 1 MUX_PC
. . .
8 8 1 1PEPE-8: instruções com todos os
sinais de controlo
Processador (PEPE-8), versão preliminar
Unidade de Controlo
Unidade de Dados
Registo A
MUX_A
ALU
Memória
de dados
WR
constante
resultado da operação
1.º operando
2.º operando
SEL_A
ESCR_A
SEL_ALU
PC
endereço de
instruções
MUX_B
Memória de
instruções
SEL_B
ESCR_PC
SEL_PC
bit de maior peso
0 1
MUX_PC
8. . .
8 1 1PEPE-8: instruções com opcodes
Processador (PEPE-8)
Unidade de Controlo Unidade de Dados Registo A MUX_A ALU Memória de dados WR constante resultado da operação 1.º operando 2.º operando SEL_A ESCR_A SEL_ALU PC endereço de instruções constante MUX_B Memória de instruções SEL_B ESCR_PC SEL_PC
bit de maior peso
0 1 MUX_PC ROM de descodificação opcode
. . .
8 1 1 8Linguagem assembly
Categoria
Instrução
assembly
Significado
Opcode
Descrição em RTL
Transferência de
dados
LD
valor
Load (imediato)
00H
A valor
LD [endereço]
Load (memória)
01H
A M[endereço]
ST [endereço]
Store (memória)
02H
M[endereço] A
Operações
aritméticas
ADD
valor
Add (imediato)
03H
A A + valor
ADD [endereço]
Add (memória)
04H
A A + M[endereço]
SUB
valor
Subtract (imediato)
05H
A A – valor
SUB [endereço]
Subtract (memória)
06H
A A – M[endereço]
Operações
lógicas
AND
valor
AND (imediato)
07H
A A
valor
AND [endereço]
AND (memória)
08H
A A
M[endereço]
OR
valor
OR (imediato)
09H
A A
valor
OR [
endereço
]
OR
(memória)
0AH
A A
M[
endereço
]
Saltos
JMP
endereço
Jump
0BH
PC endereço
JZ
endereço
Jump if zero
0CH
(A=0) : PC endereço
JN
endereço
Jump if negative
0DH
(A<0) : PC endereço
Diversos
NOP
No operation
0EH
Instrução LD [endereço]
Processador (PEPE-8)
Unidade de Controlo Unidade de Dados Registo A MUX_A ALU Memória de dados WR resultado da operação 1.º operando 2.º operando SEL_A ESCR_A SEL_ALU PC endereço de instruções constante MUX_B Memória de instruções SEL_B ESCR_PC SEL_PC
bit de maior peso
0 1 MUX_PC ROM de descodificação opcode
. . .
8 1 1 8 constanteInstrução ADD valor
Processador (PEPE-8)
Unidade de Controlo Unidade de Dados Registo A MUX_A ALU Memória de dados WR constante resultado da operação 2.º operando SEL_A ESCR_A SEL_ALU PC endereço de instruções constante MUX_B Memória de instruções SEL_B ESCR_PC SEL_PC
bit de maior peso
0 1 MUX_PC ROM de descodificação opcode
. . .
8 1 1 8 constante 1.º operandoProgramação em assembly
Programa em RTL
Programa em
assembly
0 A 0
1 M[soma] A
2 A N
3 M[temp] A
4 (A < 0) : PC 12
5 (A = 0) : PC 12
6 A A + M[soma]
7 M[soma] A
8 A M[temp]
9 A A – 1
10 M[temp] A
11 PC 5
12 PC 12
00H
01H
02H
03H
04H
05H
06H
07H
08H
09H
0AH
0BH
0CH
início: LD
0
ST
[soma]
LD
N
ST
[temp]
JN
fim
teste: JZ
fim
ADD [soma]
ST
[soma]
LD
[temp]
SUB 1
ST
[temp]
JMP teste
fim:
JMP fim
Agora um processador de 16 bits
Processador
Núcleo do
processador
Cache de
instruções
Cache de
dados
Interface
de
memória
Memória
principal
(dados e
instruções)
instruções
dados
dados
endereços
dados/instruções
endereços
de instruções
endereços
de dados
WR
RD
• Já não faz uma instrução por ciclo de relógio
• Tem um ciclo de ações elementares por cada
Controlo
Unidade de
controlo
CLK
Unidade
aritmética e
lógica (ALU)
A
B
Unidade de
processamento
de dados
Banco de
registos
MPX
MPX
PC
Registo de
instrução
flags
endereços
dados
dados/instr.
Bus dados
In
te
rf
ace
de m
em
ór
ia
Bus end.
Bus contr.
F
Ciclo do processador
Descodifica
Registo de
instrução
Controlo
flags
Executa
Banco de
registos
MPX
Unidade
aritmética e
lógica (ALU)
Escreve resultado
Banco de
registos
Unidade
aritmética e
lógica (ALU)
MPX
Busca instrução
Registo de
instrução
PC
MPX
In
te
rf
ace
de m
em
ór
ia
MPX
Busca operandos
(registos)
Banco de
registos
Busca operandos
(memória)
Banco de
registos
MPX
In
terf
ace
d
e
m
em
ó
ria
MPX
Controlo
Unidade de
controlo
CLK
Unidade
aritmética e
lógica (ALU)
A
B
Unidade de
processamento
de dados
Banco de
registos
MPX
MPX
PC
Registo de
instrução
flags
endereços
dados
dados/instr.
Bus dados
In
te
rf
ace
de m
em
ór
ia
Bus end.
Bus contr.
F
Exemplo
MOV R2, [R3]
ADD R1, R2
MOV [R3], R1
MOV R2, [R3]
RI
M[PC]
PC
PC + 2
R2
M[R3]
ADD R1, R2
RI
M[PC]
PC
PC + 2
R1
R1 + R2
MOV [R3], R1
RI
M[PC]
PC
PC + 2
M[R3]
R1
PC
PC
PC
RI
M[PC]
PC
PC + 2
R2
M[R3]
RI
M[PC]
PC
PC + 2
R2
M[R3]
RI
M[PC]
PC
PC + 2
R2
M[R3]
RI
M[PC]
PC
PC + 2
R1
R1 + R2
RI
M[PC]
PC
PC + 2
R1
R1 + R2
RI
M[PC]
PC
PC + 2
R1
R1 + R2
RI
M[PC]
PC
PC + 2
M[R3]
R1
RI
M[PC]
PC
PC + 2
M[R3]
R1
RI
M[PC]
PC
PC + 2
M[R3]
R1
Estrutura do processador
Gerador de constantes Banco de registos Unidade de Controlo I-Cache Interface de memória D-Cache Unidade de exceções ALU MUX REM MUX MUX Portas tristate Barramento de dados D15..D0 Barramento de endereços A15..A0 W R R D B R Q B G T W A IT IN T 3 IN T 2 IN T 1 IN T 0 R E S E T B A N Ú C L E O A C E S S O À M E M Ó R IA PC Registo de instruçõesNúcleo do processador
I_OK_M PC +2 Cache de dados D_BARR_END D_ENTR D_ESCR D_LE Banco de Registos Gerador de constantes M U X M U X M U X M U X ALU REG_A 4 4 4 REG_C SEL_C 4 16 SEL_RE 3 1 IND_A IND_B SEL_RE SAIDA_RE ENTR_RE BARR_B BARR_A BARR_A BARR_B 5 OP_ALU SAIDA_ALU 4 4 4 3 .. 0 7 .. 4 1 1 .. 8 1 5 .. 1 2 SEL_CONST 3 ESCR_C SAZ, SAN, SAC, SAV Registo de instruções M U X R E M D_SAIDA D_LE D_ESCR SEL_A PA_C PA_A PA_A LE_USP ESCR_USP LE_USP ESCR_USP 16 OP_ALU C_RE ESCR_C IND_C BARR_C Sinais de controlo PA_C D_BA D_BA EXC DIV0 EXCESSO Para a Unidade de Exceções Para a Unidade de Exceções MUX 0 1 Condições de salto (Z, NZ, N, NN, C, GT, LE, etc) SEL_SALTO 4 SALTA_PC Relógio D_OK Cache de instruções I_BARR_END I_SAIDA I_OK Exceções de busca Unidade de Exceções EXC_FIM Fontes de exceções NUM_EXC Para a Unidade de Exceções M U X MAP Unidade de Controlo ESCR_RI ESCR_RI SEL_OP_B SEL_BARR_C ESCR_REM SEL_OP_AControlo microprogramado
Entradas da unidade
de controlo
Registo de endereço
de controlo
Gerador do próximo
endereço
Próximo
endereço
Saídas para unidade
de controlo
Saídas para unidade de
processamento de dados
relógio
Bits de estado (flags)
microinstrução
ROM com
micro-
programa
Endereço da
microinstrução
Controlo e circuito controlado
MPC
ROM de
micro-código
+1
MICRO_SALTO
M
U
X
1
MUX2
2
SEL_MICRO_SALTO
0
1
Z
nZ
RA
RB
X
ESCR_RA
SHR_RA
ESCR_RB
DEC_RB
N
Z
ESCR_RA
SHR_RA
ESCR_RB
DEC_RB
nZ
Deslocar o registo X
de N bits
Micro-programa
MPC ROM de micro-código +1 MICRO_SALTO M U X 1 MUX2 2 SEL_MICRO_SALTO 0 1 Z nZ RA RB X ESCR_RA SHR_RA ESCR_RB DEC_RB N Z ESCR_RA SHR_RA ESCR_RB DEC_RB nZDescodificação da instrução
Entradas da unidade de controlo Registo de endereço de controlo Gerador do próximo endereço Próximo endereçoSaídas para unidade de controlo
Saídas para unidade de processamento de dados relógio
Bits de estado (flags)
microinstrução ROM com micro- programa Endereço da microinstrução