TE 11008 – Arquitetura e
Organização de Computadores
Nível da Microarquitetura
Ronaldo de Freitas Zampolo LaPS/ENGCOMP/ITEC/UFPA
Tópicos
Introdução
Exemplo de microarquitetura Exemplo de nível ISA
Exemplo de uma implementação Melhora de performance
Introdução
Objetivo: implementar o nível ISA (instruction set architecture) situado imediatamente acima
Elementos a considerar no projeto do nível de microarquitetura:
Nível ISA
Custo × desempenho do computador a ser
Exemplo de microarquitetura
ISA a ser implementada: IJVM (subconjunto da JVM) Objetivo do estudo: análise dos sinais de controle e do seqüenciamento da execução das instruções
Microprograma em memória ROM: busca, decodificação e execução de instruções ISA
Estado: conjunto de variáveis do microprograma que podem ser acessadas por todas as funções chamadas (funções ISA). Cada funçõo muda, pelo menos uma variável de estado. Ex.: PC
Instruções IJVM: simples, com 1 ou dois campos: (a) opcode (código de operação); e (b) operando
E
x
e
m
p
lo
d
e
m
ic
ro
a
rq
u
it
e
tu
ra
C a m in h o d e d a d o s : c o n tr o la d o p o r m ic ro in s tr u ç õ e s H Shifter control Shifter ALU 2 N A B B bus C bus 6 ALU control Control signals Memory control registersEnable onto B bus
Write C bus to register To and from main memory Z SP LV CPP TOS OPC PC MDR MAR MBR T E 1 1 0 0 8 A rq u ite tu ra e O rg a n iz a c¸ ˜ao d e C o m p u ta d o re s – M
Exemplo de microarquitetura
Caminho de dados
Conjunto de registradores de 32 bits UAL
Controle de função: F0 e F1
Controle de habilitação: ENA, ENB Complemento de A: INVA
Incremento: INC
3 barramentos: A, B e C Deslocador
SLL8 (shift left logical - 8 bits)
SRA1 (shift right arithmetic - 1 bit direita com preservação de sinal MSB)
Exemplo de microarquitetura
Caminho de dados
F0 F1 ENA ENB INVA INC Função
0 1 1 0 0 0 A 0 1 0 1 0 0 B 0 1 1 0 1 0 A¯ 1 0 1 1 0 0 B¯ 1 1 1 1 0 0 A + B 1 1 1 1 0 1 A + B + 1 1 1 1 0 0 1 A + 1
Exemplo de microarquitetura
Caminho de dados
É possível escrever em um mesmo registrador no mesmo ciclo de clock: leitura e escrita são feitas em momentos diferentes em um mesmo ciclo
A saída da UAL pode ser armazenada em mais de um registrador. Contudo, no barramento B apenas o contedo de um dos registradores pode ser
Caminho de dados
Temporização Cycle 1 starts here Shifter output stable Registers loaded instantaneously from C bus and memory on rising edge of clockSet up signals to drive data path ALU and shifter Drive H and B bus Propagation from shifter to registers ∆w ∆x ∆y ∆z
Clock cycle 1 Clock cycle 2
MPC available here
New MPC used to load MIR with next microinstruction here
Caminho de dados
Operao da memória Acesso memória
Porta de 32 bits (palavra):
MAR (memory address register) MDR (memory data register)
Porta de 8 bits (byte): PC (program counter)
MBR (memory buffer register) MAR: guarda o endereço da palavra PC: orientado a byte
Caminho de dados
Operação da memória
Ex.: Operação de leitura
PC=2: leitura do byte 2, armazenamento nos oito bits menos significativos de MBR
MAR=2: leitura dos bytes 8 a 11, armazenamento em MDR
PC/MBR: programas do nível ISA MAR/MDR: dados do nível ISA
Caminho de dados
Operação da memória
MAR: Implementação
Memórias: dispositivos orientados a byte MAR: orientado a palavra
Em 4 GB (232 endereços de 1 byte), existem 230
palavras 4 bytes Discarded
32-Bit MAR (counts in words)
32-Bit address bus (counts in bytes)
Caminho de dados
Operação da memória MAR (cont): palavra 0 → byte 0 palavra 1 → byte 4 palavra 2 → byte 8 palavra 3 → byte 12 MBR:Com sinal: 25 bits mais significativos (-128 a 127) Sem sinal: MBR passa os oito bits menos
significativos para o barramento B, os outros bits são iguais a zero
Microinstruções
De acordo com a figura do caminho de dados, são necessários 29 sinais para controle:
9 sinais para controlar escrita no barramento B 9 sinais para controlar escrita nos registradores a partir do barramento C
8 sinais para controlar UAL e deslocador
2 sinais para leitura e escrita em memória (MAR / MDR)
1 sinal para busca em memória via PC /MBR
Os valores dos 29 sinais definem as operações a serem executadas durante um ciclo do caminho de dados
Microinstruções
Observação quanto ao acesso à memória:
Cycle 1 starts here Shifter output stable Registers loaded instantaneously from C bus and memory on rising edge of clock
Set up signals to drive data path ALU and shifter Drive H and B bus Propagation from shifter to registers ∆w ∆x ∆y ∆z
Clock cycle 1 Clock cycle 2
MPC available here
New MPC used to load MIR with next microinstruction here
Microinstruções
Observação quanto ao acesso à memória:
Uma solicitação de acesso ao conteúdo da memória é feita no ciclo 1
a informação solicitada só estará disponível no ciclo 3 ! (pelo menos)
Redução do número de sinais de controle:
9 sinais para controlar escrita em B → 4 sinais,
usando decodificador (não faz sentido o acesso a B por mais de um registrador simultaneamente)
Microinstruções
Formato possível de microinstrução
Bits 9 3 8 9 3 4
NEXT_ADDRESS
Addr JAM ALU C Mem B
R E A D F E T C H J A M N J M P C J A M Z S L L 8 S R A 1 F0F1 E N A E N B I N V A I N C H O P C T O S C P P L V S P P C M D R M A R W R I T E B bus B bus registers 0 = MDR 1 = PC 2 = MBR 3 = MBRU 4 = SP 5 = LV 6 = CPP 7 = TOS 8 = OPC 9 -15 none
Microinstruções
Endereço: contém o endereço da próxima microinstrução potencial
Desvio: determina a próxima microinstrução a ser executada
UAL: especifica as funções da UAL e do deslocador Barramento C: seleciona quais registradores
armazenarão a informação no barramento C
Memória: especifica operação com a memória no ciclo Barramento B: seleciona o registrador-entrada do
Controle microprogramado
H Shifter ALU 2 N B bus 6 ALU control Control signals Memory control signals (rd, wr, fetch)Enable onto B bus Write Z C bus SP LV CPP TOS OPC PC MDR MAR MBR 9 O 512 × 36-Bit control store for holding the microprogram 3 8 4-to-16 Decoder 2 9 4 MPC MIR Addr J ALU C M B 1-bit flip–flop High bit JMPC JAMN/JAMZ
Controle microprogramado
O MIC-1: elementos Seqüenciador
Realiza todos os passos necessários para execução de uma instrução ISA
A cada ciclo: estado de cada sinal de controle; e o endereço da próxima microinstrução
Memória de controle: armazena o microprograma completo
MPC (MicroProgram Counter): endereço da próxima microinstrução
MIR (Micro Instruction Register): armazena microinstrução corrente
Controle microprogramado
Campo JAM
000: nada a fazer
JAMN == 1: O valor de N deve ser submetido a um OR com bit de maior ordem do MPC
JAMZ == 1: O valor de Z deve ser submetido a um OR com bit de maior ordem do MPC
F=(JAMN AND N) OR (JAMZ AND Z) OR NEXT_ADDRESS[8]
Só há duas possibilidades para o conteúdo de MPC: NEXT_ADDRESS
Controle microprogramado
Exemplo:
…
…
Address Addr Data path control bits
One of these will follow 0x75 depending on Z JAM
JAMZ bit set 0x75 0x92
0x92
0x192
001
JMPC:
1: MPC=(8 bits de MBR) OR (8 bits menos significativos do NEXT_ADDRESS)
JMPC=1: NEXT_ADDRESS = 0x000 ou 0x100 Em geral, MBR contém um código de operação (opcode) ISA
Um exemplo de nível ISA: a IJVM
Pilhas:
Armazenamento de variáveis locais
SP LV a3 a1 (a) 108 100 a2 104 SP LV a3 a1 (b) a2 b3 b4 b1 b2 a3 a1 (c) a2 b3 b4 LV c1 SP c2 b1 b2 LV a3 a1 (d) a2 d3 d4 SP d5 d1 d2
Auxílio em operações aritméticas (Ex.: a1 = a2 + a3)
LV a3 SP a2 a1 (a) a2 LV a3 a2 SP a3 a1 (b) a2 LV a3 SP a2 + a3 a1 (c) a2 LV SP a3 a2 + a3 (d) a2
Um exemplo de nível ISA: a IJVM
Modelo de memória da IJVM
Duas opções de visualização:
Vetor de 232 bytes = 4 GB
Vetor de 230 palavras (cada palavra = 4 bytes)
As instruções da IJVM só podem ter acesso à memória indexando-a com ponteiros
1. Pool de Constantes
Programas IJVM não podem escrever nessa área que armazena constantes, strings e ponteiros
para outras áreas da memória
Um exemplo de nível ISA: a IJVM
Modelo de memória da IJVM 1. Quadro de Variáveis Locais
Armazena variáveis locais (procedimentos) LV aponta para a base do quadro de variáveis locais corrente
2. Pilha de Operandos
Localiza-se imediatamente acima do quadro de variáveis locais
SP aponta para o endereço de mais alta ordem 3. Área de Procedimento
Armazena o programa
Um exemplo de nível ISA: a IJVM
Modelo de memória da IJVM
SP LV PC CPP Constant Pool Current Operand Stack 3 Current Local Variable Frame 3 Local Variable Frame 2 Local Variable Frame 1 Method Area
Área de Procedimento: vetor de bytes Pool de Constantes: vetor de palavras Pilha de Operandos: vetor de palavras
Um exemplo de nível ISA: a IJVM
Conjunto de instruções da IJVM Manipulação de pilha
BIPUSH byte (0x10): coloca byte na pilha DUP (0x59): copia topo e coloca no topo
ILOAD varnum (0x15): coloca uma variável local no topo da pilha
ISTORE varnum(0x36): retira palavra do topo e armazena numa variável local
LDC_W ndice(0x13): coloca no topo uma constante vinda do Pool de Constantes
POP (0x57): retira da pilha a palavra do topo
SWAP (0x5F): troca de posição as duas palavras do topo da pilha
Um exemplo de nível ISA: a IJVM
Conjunto de instruções da IJVM Operações aritméticas
IADD (0x60): retira as duas palavras do topo, soma-as e armazena o resultado no topo
ISUB (0x64): retira as duas palavras do topo, subtrai-as e armazena o resultado no topo Operações lógicas
IAND (0x7E): retira as duas palavras do topo,
realiza um AND e armazena o resultado no topo IOR (0x80): retira as duas palavras do topo,
Um exemplo de nível ISA: a IJVM
Conjunto de instruções da IJVM Desvios
GOTO desl (0xA7): desvio incondicional
IFEQ desl (0x99): retira o topo e desvia se for igual a zero
IFLT desl (0x9B): retira o topo e desvia se for menor que zero
IF_ICMPEQ desl (0x9F): retira as duas palavras do topo e desvia se forem iguais
Chamadas a procedimentos
INVOKEVIRTUAL desl (0xB6): chama um procedimento
Compilação de JAVA para IJVM
Java Assembly ISA
i=j+k; ILOAD J 0x15 0x02 if (i==3) ILOAD K 0x15 0x03 k=0; IADD 0x60 else ISTORE I 0x36 0x01 j=j-1; ILOAD I 0x15 0x01 BIPUSH 3 0x10 0x03 IF_ICMPEQ L1 0x9F 0x00 0x0D ILOAD J 0x15 0x02 BIPUSH 1 0x10 0x01 ISUB 0x64 ISTORE J 0x36 0x02 GOTO L2 0xA7 0x00 0x07 L1: BIPUSH 0 0x10 0x00 ISTORE K 0x36 0x03 L2:
Implementação da IJVM
Main 1 ⇒ PC=PC+1; fetch; goto(MBR)
nop1 ⇒ goto Main 1
iadd1⇒ MAR=SP=SP-1; rd
iadd2⇒ H=TOS
iadd3⇒ MDR=TOS=MDR+H; wr; goto Main 1
isub1 ⇒ MAR=SP=SP-1; rd
isub2 ⇒ H=TOS
isub3 ⇒ MDR=TOS=MDR-H; wr; goto Main 1
dup1 ⇒ MAR=SP=SP+1
Implementação da IJVM
bipush1 ⇒ SP=MAR=SP+1
bipush2 ⇒ PC=PC+1; fetch
bipush3 ⇒ MDR=TOS=MBR; wr; goto Main 1
iload1 ⇒ H=LV
iload2 ⇒ MAR=MBRU+H; rd
iload3 ⇒ MAR=SP=SP+1
iload4 ⇒ PC=PC+1; fetch; wr
Pipeline
1
Instr
uction
Cycle 1 Cycle 2 Cycle 3 Cycle 4 IFU ALU Reg Shifter A C B IFU ALU Reg Shifter A C B IFU ALU Reg Shifter A C B IFU ALU Reg Shifter A C B IFU ALU Reg Shifter A C B IFU ALU Reg Shifter A C B IFU ALU Reg Shifter A C B IFU ALU Reg Shifter A C B IFU ALU Reg Shifter A C B IFU ALU Reg Shifter A C B 2 IFU ALU Reg Shifter A C B IFU ALU Reg Shifter A C B IFU ALU Reg Shifter A C B 3 IFU ALU Reg Shifter A C B IFU ALU Reg Shifter A C B 4 IFU ALU Reg Shifter A C B
Pipeline
swap1 swap2 swap3 swap4 swap5 swap6
ciclo MAR=SP-1; rd MAR=SP H=MDR; wr MDR=TOS MAR=SP-1; wr TOS=H; goto Main1
1 B=SP 2 C=B-1 B=SP 3 MAR=C; rd C=B 4 MDR=mem MAR=C 5 B=MDR 6 C=B B=TOS 7 H=C; wr C=B B=SP 8 mem=MDR MDR=C C=B-1 B=H 9 MAR=C; wr C=B 10 mem=MDR TOS=C 11 goto(MBR)
Velocidade x Custo
Metodologias para aumentar a velocidade de execução Reduzir o número de ciclos necessários à execução de instruções
Simplificar a organização da máquina, de modo a reduzir o período de clock
Redução do caminho de execução
União do loop de interpretação com microcódigo
pop1 MAR=SP=SP-1; rd pop1 MAR=SP=SP-1; rd
pop2 Main1.pop PC=PC+1; fetch
pop3 TOS=MDR; goto Main1 pop3 TOS=MDR; goto(MBR)
Redução do caminho de execução
Arquitetura com três barramentos: inclusão de um barramento A para a entrada esquerda da UAL
Unidade de busca de instruções: busca de instruções a cargo de uma unidade independente; UAL restrita
Redução do caminho de execução
H A latch C latch B latch ALU N B bus C bus 6 ALU control Control signals Memory control registersEnable onto B bus
Write C bus to register To and from main memory Z MBR2 SP LV CPP TOS PC MDR MAR MBR1 OPC Instruction fetch unit (IFU) A bus