Buscar

Topico_08 (Microarquitetura Multicycle)

Prévia do material em texto

Tópico 8: Microarquitetura (Multicycle)
Prof. Jhonattan Cordoba Ramirez
Escola de Engenharia
Universidade Federal de Minas Gerais (UFMG)
ELT123 - Arquitetura e Organização de Computadores
Introdução
• Desvantagens dos processadores de ciclo único:
• Em primeiro lugar, requer um ciclo de relógio longo o suficiente para suportar a
instrução mais lenta (lw), embora a maioria das instruções sejam mais rápidos.
• Exige três somadores (um na ALU e dois na lógica de PC); os somadores são
circuitos relativamente caros, especialmente se eles devem ser rápidos.
• Tem memórias de instrução e de dados separadas, o que pode não ser realista. A
maioria dos computadores tem uma única memória grande que mantém as
instruções e os dados e que podem ser lidas e escritas.
Introdução
• Solução por parte do processador multi-ciclo:
• Distribuir uma instrução em vários passos mais curtos. Em cada passo, o
processador pode ler ou escrever na memoria de dados ou no registro, após o uso
da ALU.
• O Processador requer:
• Um somador reutilizável.
• Memoria de instrução e memoria de dados juntas.
Processo do projeto
Caminho de dados
Controle
Memoria de dados
Registros
Unidade Lógica e Aritméticas (ALU)
Multiplexadores
MIPS – 32 bits
Caminho de 
dados – 32 bits
A unidade de controle recebe a instrução atual a partir do caminho de dados
e informa ao caminho de dados como executar essa instrução.
Especificamente, a unidade de controle produz os sinais de seleção do
multiplexador, enable dos registros, e escrita da memória para controlar o
funcionamento do caminho de dados.
Elementos de estado
Estado arquitetural (Contador de programa e registro)
Memorias
Memoria de instrução / 
Memoria de dados RegistroPC
Microarquitetura multi-ciclo
Instrução de memoria é lida e armazenada em um novo registrador de instrução não arquitetural. 
IRWrite, controla procedimentos para atualização do registro atual.
Microarquitetura multi-ciclo
Microarquitetura multi-ciclo
Microarquitetura multi-ciclo
Adicionamos um multiplexador em frente da memória para escolher o endereço de memória, seja a partir
do PC ou do ALUOut. O sinal de seleção do multiplexador é chamado IorD, para indicar se o parâmetro
de entrada é um endereço de instrução ou um endereço de dados. Os dados lidos a partir da memória
são armazenados em outro registro não arquitetural, chamado Data.
Microarquitetura multi-ciclo
• Armazenamento dos dados carregados da memoria no registrador sinalizado.
• Na instrução lw, registro rt, é registrador destino.
Microarquitetura multi-ciclo
Incremento no contador do programa, poupando a adição de um somador dentro do caminho de dados.
Microarquitetura multi-ciclo
• Na implementação do sw, o caminho de dados sofre algumas alterações.
• Registro rt, é lido pelo sw como registrador de origem.
Microarquitetura multi-ciclo
• Instruções tipo R: Leitura de dois registros, executa operação da ALU e o resultado é armazenado em 
um outro registrador.
Microarquitetura multi-ciclo
• Branch beq: Offset indica numero de instruções para o branch passar. PCBranch = PC+4+(SignImm*4) 
Microarquitetura multi-ciclo
Microarquitetura multi-ciclo
Controle multi-ciclo
Determina os sinais de controle com base nos campos opcode e funct.
Decodificador 
principal
opcode31:26
MemtoReg
IorD
PCSrc
ALUSrcB1:0
ALUSrcA
RegDst
Decodificador
do ALU
funct05:00
ALUop01:00
ALUControl02:00
MemtoWrite
RegWrite
Branch
IRWrite
PCWrite
Controle do registro
Seleção dos multiplexers
Controle multi-ciclo (lw e sw)
IorD = 0
AluSrcA = 0
ALUSrcB = 01
ALUOp = 00
PCSrc = 0
IRWrite
PCWrite
Reset
S0: Buscar
IorD = 0
AluSrcA = 0
ALUSrcB = 01
ALUOp = 00
PCSrc = 0
IRWrite
PCWrite
Reset
S0: Buscar S1: DecodificarS1: Decodificar
ALUSrcA = 1
ALUSrcB = 10
ALUOp = 00
S2: Endereço
de Memória
ALUSrcA = 1
ALUSrcB = 10
ALUOp = 00
S2: Endereço
de Memória
Op = lw ou Op = 
sw
Op = lw ou Op = 
sw
IorD = 1
S3: Leitura na 
Memoria
Op = 
lw
IorD = 1
S3: Leitura na 
Memoria
Op = 
lw
RegDst = 0
MemtoReg = 1
RegWrite
S4: Escrita no 
Registrador
RegDst = 0
MemtoReg = 1
RegWrite
S4: Escrita no 
Registrador
IorD = 1
MemtoWrite
S5: Escrita na 
Memória
IorD = 1
MemtoWrite
S5: Escrita na 
Memória
Op = 
sw
Op = 
sw
IorD = 0
AluSrcA = 0
ALUSrcB = 01
ALUOp = 00
PCSrc = 0
IRWrite
PCWrite
Reset
S0: Buscar S1: Decodificar
ALUSrcA = 1
ALUSrcB = 10
ALUOp = 00
S2: Endereço
de Memória
RegDst = 0
MemtoReg = 1
RegWrite
S4: Escrita no 
Registrador
IorD = 1
MemtoWrite
S5: Escrita na 
Memória
IorD = 1
S3: Leitura na 
Memoria
Controle multi-ciclo (Tipo R)
ALUSrcA = 1
ALUSrcB = 00
ALUOp = 10
S6: Executar
Op = Tipo 
R
ALUSrcA = 1
ALUSrcB = 00
ALUOp = 10
S6: Executar
Op = Tipo 
R
RegDst = 1
MemtoReg = 0
RegWrite
S7: Escrita no 
Registrador
RegDst = 1
MemtoReg = 0
RegWrite
S7: Escrita no 
Registrador
ALUSrcA = 1
ALUSrcB = 00
ALUOp = 01
PCSrc = 1
Branch
S8: Branch
Op = beq
ALUSrcA = 1
ALUSrcB = 00
ALUOp = 01
PCSrc = 1
Branch
S8: Branch
Op = beq
Controle multi-ciclo (beq)
IorD = 0
AluSrcA = 0
ALUSrcB = 01
ALUOp = 00
PCSrc = 0
IRWrite
PCWrite
Reset
S0: Buscar S1: Decodificar
ALUSrcA = 1
ALUSrcB = 10
ALUOp = 00
S2: Endereço
de Memória
RegDst = 0
MemtoReg = 1
RegWrite
S4: Escrita no 
Registrador
IorD = 1
MemtoWrite
S5: Escrita na 
Memória
IorD = 1
S3: Leitura na 
Memoria
RegDst = 1
MemtoReg = 0
RegWrite
S7: Escrita no 
Registrador
ALUSrcA = 1
ALUSrcB = 00
ALUOp = 10
S6: Executar
Op = Tipo 
R
ALUSrcA = 0
ALUSrcB = 11
ALUOp = 00
IorD = 0
AluSrcA = 0
ALUSrcB = 01
ALUOp = 00
PCSrc = 0
IRWrite
PCWrite
Reset
S0: Buscar S1: Decodificar
ALUSrcA = 1
ALUSrcB = 10
ALUOp = 00
S2: Endereço
de Memória
RegDst = 0
MemtoReg = 1
RegWrite
S4: Escrita no 
Registrador
IorD = 1
MemtoWrite
S5: Escrita na 
Memória
IorD = 1
S3: Leitura na 
Memoria
RegDst = 1
MemtoReg = 0
RegWrite
S7: Escrita no 
Registrador
ALUSrcA = 1
ALUSrcB = 00
ALUOp = 10
S6: Executar
Op = Tipo 
R
ALUSrcA = 0
ALUSrcB = 11
ALUOp = 00
ALUSrcA = 1
ALUSrcB = 00
ALUOp = 01
PCSrc = 1
Branch
S8: Branch
Op = beq
Controle multi-ciclo (addi)
RegDst = 0
MemtoReg = 0
RegWrite
S10: Escrita no 
Registrador
ALUSrcA = 1
ALUSrcB = 10
ALUOp = 00
S9: Executar
addi
Op = addi
ALUSrcA = 1
ALUSrcB = 10
ALUOp = 00
S9: Executar
addi
Op = addi
RegDst = 0
MemtoReg = 0
RegWrite
S10: Escrita no 
Registrador
Controle multi-ciclo (Tipo j)
Controle multi-ciclo (Tipo j)
IorD = 0
AluSrcA = 0
ALUSrcB = 01
ALUOp = 00
PCSrc = 00
IRWrite
PCWrite
Reset
S0: Buscar S1: Decodificar
ALUSrcA = 1
ALUSrcB = 10
ALUOp = 00
S2: Endereço
de Memória
RegDst = 0
MemtoReg = 1
RegWrite
S4: Escrita no 
Registrador
IorD = 1
MemtoWrite
S5: Escrita na 
Memória
IorD = 1
S3: Leitura na 
Memoria
RegDst = 1
MemtoReg = 0
RegWrite
S7: Escrita no 
Registrador
ALUSrcA = 1
ALUSrcB = 00
ALUOp = 10
S6: Executar
Op = Tipo 
R
ALUSrcA = 0
ALUSrcB = 11
ALUOp = 00
ALUSrcA = 1
ALUSrcB = 00
ALUOp = 01
PCSrc = 01
Branch
S8: Branch
Op = beq
RegDst = 0
MemtoReg = 0
RegWrite
S10: Escrita no 
Registrador
ALUSrcA = 1
ALUSrcB = 10
ALUOp = 00
S9: Executar
addi
Op = addi
PCSrc = 10
PCWrite
S11: Jump
Op = j
Microarquitetura multi-ciclo
EXEMPLO: O benchmark SPECint2000 consiste em aproximadamente 25% cargas, 10% armazenamentos,
11% branchs, 2% jumps, e 52% de instruções do tipo-R. Determine o CPI médio para este benchmark.
𝐶𝐶𝐶𝐶𝐶𝐶
= �
�
0,11 + 0,02 3
+ 0,52 + 0,10 4 + 0,25 5
IorD = 0
AluSrcA = 0
ALUSrcB = 01
ALUOp = 00
PCSrc = 00
IRWrite
PCWrite
Rese
t
S0: Buscar S1: Decodificar
ALUSrcA = 1
ALUSrcB = 10
ALUOp = 00
S2: Endereço de 
Memória
RegDst = 0
MemtoReg = 1
RegWrite
S4: Escrita no 
Registrador
IorD = 1
MemtoWrite
S5: Escrita na 
Memória
IorD = 1
S3: Leitura na 
Memoria
RegDst = 1
MemtoReg = 0
RegWrite
S7: Escrita no 
Registrador
ALUSrcA = 1
ALUSrcB = 00
ALUOp = 10
S6: Executar
Op = Tipo 
R
ALUSrcA = 0
ALUSrcB = 11
ALUOp = 00
ALUSrcA = 1
ALUSrcB = 00
ALUOp = 01
PCSrc = 01
BranchS8: Branch
Op = beq
RegDst = 0
MemtoReg = 0
RegWrite
S10: Escrita no 
Registrador
ALUSrcA = 1
ALUSrcB = 10
ALUOp = 00
S9: Executar
addi
Op = addi
PCSrc = 10
PCWrite
S11: Jump
Op = j
Tc = tpcq + tmux …
max tmem, tmux + tRFread , tmux + tALU , tmem + tRFsetup
𝐓𝐓𝐜𝐜 = 𝟑𝟑𝟑𝟑 + 𝟐𝟐𝟐𝟐 + 𝟐𝟐𝟐𝟐𝟑𝟑 + 𝟐𝟐𝟑𝟑 = 𝟑𝟑𝟐𝟐𝟐𝟐𝟑𝟑𝟑𝟑
Microarquitetura multi-ciclo
EXEMPLO: Ben Bitdiddle está se perguntando se seria melhor ele construir o processador multi-ciclo em vez 
do processador de ciclo-único. Para ambos os projetos, ele planeja usar um processo de fabricação CMOS 65 
nm com os atrasos apresentados na tabela do exercício anterior. Ajude a comparar o tempo de execução de 
cada processador para 100 bilhões de instruções da referência SPECint2000 
Elemento Parâmetro Atraso (ps)
Reg clk to Q tpcqpc 30
Multiplexer tmux 25
ALU tALU 200
Mem. read tmem 250
Reg. file read tRFread 150
Reg. file setup tRFsetup 20
EXEMPLO: Ben Bitdiddle está se perguntando se seria melhor ele construir o processador multi-ciclo em vez 
do processador de ciclo-único. Para ambos os projetos, ele planeja usar um processo de fabricação CMOS 65 
nm com os atrasos apresentados na tabela do exercício anterior. Ajude a comparar o tempo de execução de 
cada processador para 100 bilhões de instruções da referência SPECint2000 
Microarquitetura multi-ciclo
Tempo de ciclo = 325 ps
Texc = 100 × 109 𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖
4,12 𝑐𝑐𝑖𝑖𝑐𝑐𝑐𝑐𝑐𝑐
𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑖𝑐𝑐
…
325 × 10−12𝑖𝑖𝑖𝑖𝑠𝑠
Tempo de execução = 133,9 seg
	Tópico 8: Microarquitetura (Multicycle)
	Slide Number 2
	Slide Number 3
	Slide Number 4
	Slide Number 5
	Slide Number 6
	Slide Number 7
	Slide Number 8
	Slide Number 9
	Slide Number 10
	Slide Number 11
	Slide Number 12
	Slide Number 13
	Slide Number 14
	Slide Number 15
	Slide Number 16
	Slide Number 17
	Slide Number 18
	Slide Number 19
	Slide Number 20
	Slide Number 21
	Slide Number 22
	Slide Number 23
	Slide Number 24
	Slide Number 25
	Slide Number 26

Continue navegando