Você está na página 1de 59

O caminho de dados

Um esquema de implementação
simples
INTRODUÇÃO
Introdução
• O desempenho de um programa depende:
– Número de instruções (depende do conjunto de instruções)
– Velocidade de clock (depende da implementação)
– CPI - Número de ciclos gastos por instrução (depende da implementação do ISA)
• Implementação do MIPS simplificada:
– Instruções de referência à memória (lw e sw)
– Instruções lógicas e aritméticas (add, sub, and, or, slt)
– Instruções de controle de fluxo (saltos) beq e j
Introdução
• Todas as instruções do conjunto de instruções têm os dois primeiros
passos idênticos:
– Enviar o valor armazenado no PC para a memória de programa e buscar a
instrução dessa memória
– Ler um ou dois registradores, usando os campos de instrução para selecionar
os registradores a serem lidos.
• Para a instrução load word, precisamos ler apenas um registrador, mas a
maioria das outras instruções exige a leitura de dois registradores
• Mesmo entre diferentes classes de instruções, há algumas semelhanças:
– Todas as classes utilizam a UAL após a leitura dos registradores:
• Instruções de referência à memória: efetuar o cálculo do endereço
• Instruções aritméticas e lógicas: efetuar a operação
• Desvios condicionais: efetuar comparação (subtração)
• Após usar a UAL, as ações necessárias diferem
– Referência a memória: escreve dado na memória
– Instrução aritmética: escreve dado no registrador
• Uma visão abstrata da implementação do subconjunto MIPS mostrando
as unidades funcionais principais e as conexões principais
• A implementação básica do subconjunto MIPS incluindo
as linhas de controle e os multiplexadores necessários
• Métodos de temporização
– Clocking
• Define quando os sinais podem ser lidos e quando podem ser escritos
• Evita circunstâncias onde um sinal é lido ao mesmo tempo que o
mesmo sinal foi escrito; a leitura pode retornar o valor antigo, o valor
recente ou uma combinação entre os dois
– Sincronização acionada por transição
• Significa que quaisquer valores armazenados em um elemento lógico
sequencial são atualizados apenas em uma transição de clock
– Como apenas os elementos de estado podem armazenar valores
de dados, qualquer coleção de lógica combinatória precisa ter
suas entradas vindo de um conjunto de elementos de estado e
suas saídas escritas em um conjunto de elementos de estado.
Introdução
• Em um sistema digital síncrono, o clock determina quando os
elementos de estado escreverão valores no armazenamento
interno. Todos os elementos que apresentam um estado, como a
memória, são considerados acionados por transição

• O método acionado por transição permite que um elemento de


estado seja lido e escrito no mesmo ciclo de clock sem criar uma
disputa que poderia levar a valores de dados indeterminados. O
período de clock necessita ser longo o suficiente para que os
valores de saída estabilizem
Introdução
• Sinal de escrita explícito é necessário:
– O elemento de estado só é alterado quando o
sinal de controle de escrita está ativo e ocorre
uma transição de clock.
CONSTRUINDO O CAMINHO DE
DADOS
Introdução
• Elementos principais do caminho de dados
– PC, memória de instruções e somador
Introdução
• Banco de registradores
– Devido às instruções de formato R terem três operandos de registrador,
precisamos ler duas words de dados do banco de registradores e escrever
uma word de dados no banco de registradores.
– 3 entradas de 5 bits (32 registradores):
• 2 entradas com endereço dos registradores lidos
• 1 entrada com endereço do registrador escrito
– 2 saídas de 32 bits: operandos p/ a UAL
– 1 entrada de 32 bits: escrita do resultado
• As escritas são controladas pelo sinal de controle de escrita, que precisa estar ativo para
que um escrita ocorra na transição do clock
• Instruções do formato R
– Executa a operação (op and funct) utilizando como operandos os
valores em rs e rt
– Armazenam o resultado no banco de registradores (no endereço rd)
– Todas as instruções do tipo R precisam
• Ler dois registradores
• Realizar uma operação na UAL com os conteúdos dos registradores
• Escrever o resultado em um registrador
– Instruções aritméticas lógicas: ADD, SUB, AND, OR
• Ex: add $t1, $t2, $t3

31 - 26 25 - 19 20 -16 15 - 11 10 - 6 5-0
Tipo - R OP RS RT RD SHAMT FUNCT
• • Instruções de load/store
– lw $t1, offset($t2) e sw $t1, offset($t2)
– Calculam um endereço de memória somando o registrador base ($t2
no exemplo) com o campo offset de 16 bits sem sinal estendido
– Para sw, o valor a ser armazenado na memória de dados é lido do
registrador; para lw: o valor é lido da memória de dados e escrito no
registrador
– É necessária uma unidade para estender o sinal de 16 para 32 bits e
uma memória para ler e escrever os dados no banco de registradores
Introdução
• • A instrução beq
– Tem três operandos
• Dois registradores utilizados para a comparação
• Offset indicando o endereço de memória para o deslocamento (PC + offset)
– Instruções de desvio
• O conjunto de instruções especifica que a base para o cálculo do endereço de desvio é o
endereço da instrução seguinte ao desvio. Como calculamos PC + 4 no caminho de dados
para a busca de instruções, é fácil usar esse valor como a base para calcular o endereço
de destino do desvio.
• A arquitetura é especificada de forma que o campo offset é deslocado 2 bits para a
esquerda de modo que seja uma offset de uma word; essa forma de cálculo aumenta a
amplitude do salto por um fator igual a 4
– Além de calcular o endereço do desvio, é necessário verificar se o desvio deve
ser executado ou não, de acordo com a comparação entre os dois
registradores
– Assim, o caminho de dados do desvio precisa de duas operações:
• Calcular o endereço de destino do desvio
• Comparar o conteúdo do registrador (sinal zero da UAL)
Introdução
• A instrução BEQ
Introdução
• Operações lógicas e de acesso à memória
– Semelhantes, com as diferenças principais:
• As instruções lógicas e aritméticas usam a ALU com as entradas vindas de dois
registradores; as instruções de acesso à memória também podem usar a ALU
para fazer o cálculo do endereço, embora a segunda entrada seja o campo
offset de 16 bits com o sinal estendido da instrução
• O valor armazenado em um registrador de destino vem da ALU (para um
instrução do tipo R) ou da memória (para um load)
• Integrando os caminhos de dados
– Os caminhos de dados são unidos e linhas de controle são
adicionadas, assim como os multiplexadores necessários
MIPS MONOCICLO
MIPS Monociclo
• Projeto de ciclo único: a busca, decodificação e execução
das instruções ocorre em um único ciclo de clock
– Nenhum recurso do caminho de dados pode ser usados mais de
uma vez por instrução, de forma que aqueles que necessitam
ser utilizados mais de uma vez devem ser replicados (p.e.
memória de instruções e de dados separados, mais de um
somador)
– multiplexadores não necessários na entrada dos componentes
compartilhados para realizar a seleção
– Sinais de escrita para controlar a gravação no banco de
registradores e na memória de dados
• O tempo de ciclo é determinado pelo tamanho do caminho
mais longo (caminho com maior tempo de execução)
MIPS Monociclo
• Acrescentando o controle
• O controle de ALU
– Dependendo da instrução, uma das operações abaixo deverá ser
executada
– Aritméticas e lógicas (and, or, sub, add, slt)
– Load/store (add para cálculo do endereço)
– BEQ (subtração)

Entrada de controle Função


da ULA
0000 AND
0001 OR
0010 Soma
0110 Subtração
0111 Set less than
MIPS Monociclo
• Acrescentando o controle
– O controle da ALU
– Podemos gerar a entrada do controle da ALU de 4 bits
usando uma pequena unidade de controle que tenha
como entradas o campo funct da instrução e um
campo controle de 2 bits, que chamamos de OpALU.
– OpALU indica:
• 00 : add para load/stores
• 01: sub para beq
• 10: determinada pela operação do campo funct
MIPS Monociclo
• Controle da ALU
– Criar 2 bits de controle, que juntamente com o campo funct, definem
a função.
– Entradas UALOp1 e UALOp2:
• 00: loads e stores (soma endereços)
• 01: beq
• 10: a função é determinada pelo campo de função
Código de ULAOp Operação da Campo funct Ação da ULA Entrada de
operação da instrução controle da
instrução ULA
lw 00 load word soma 0010

sw 00 store word soma 0010

beq 01 branch equal subtração 0110

tipo R 10 add 100000 soma 0010


tipo R 10 substract 100010 subtração 0110
tipo R 10 AND 100100 and 0000
tipo R 10 OR 100101 or 0001
tipo R 10 set less than 101010 set less than 0111
• Projetando a unidade de controle principal
– Formatos de instrução considerados
• Campo de opcode (bits 31-26 → 6bits)
• Os dois registradores a serem lidos (rs e rt): posições 25-21 e 20-16 (tipo R, BEQ e
store word) → 5 bits cada
• Registrador-base para instruções de load e store: está na posição 25-21 (rs) → 5 bits
• 16 bits de deslocamento do BEQ, lw e sw: 15-0 → 16 bits
• Registrador destino:
– Para lw: 20-16 (rt)
– Tipo R: 15-12 (rd)
– É necessário um multiplexador antes do banco de registradores

op rs rt rd shamt funct
31-26 25-21 20-16 15-11 10-6 5-0
op rs rt endereço
31-26 25-21 20-16 15-0
op endereço
31-26 15-0
• O caminho de dados com todos os multiplexadores
necessários e todas as linhas de controle identificadas
OriPC

EscreveReg

EscreveMem

OriALU
MemparaReg

RegDst

Controle
Da
LerMem
ALU

OpAlu
MIPS Monociclo
• Descrição dos sinais da unidade de controle
Nome do Efeito quando inativo Efeito quando ativo
sinal
RegDst O número do registrador destino para a entrada O número do registrador destino para a entrada Registrador para escrita
Registrador para escrita vem do campo rt (bits 20:16) vem do campo rd (bits 15:11)

EscreveReg Nenhum O registrador na entrada Registrador para escrita é escrito como o valor da
entrada Dados para escrita.
escrita
OrigALU O segundo operando da ULA vem da segunda saída do O segundo operando da ULA consiste nos 16 bits mais baixos da instrução
banco de registradores com sinal estendido.

OrigPC O PC é substituido pela saída do somador que calcula o O PC é substituído pela saída do somador que calcula o destino do desvio
valor de PC + 4
LerMem Nenhum O conteúdo da memória de dados designado pela entrada Endereço é
colocado na saída Dados da leitura.
EscreveMem Nenhum O conteúdo da memória de dados designado pela entrada Endereço é
substituído pelo valor da entrada Dados para escrita.

MemParaReg O valor enviado para a entrada Dados para escrita do O valor enviado para a entrada Dados para escrita do banco de
banco de registradores vem da ULA registradores vem da memória de dados
MIPS Monociclo
• Unidade de controle principal
– Os sinais podem ser definidos com base no campo
opcode, com exceção da linha de controle OrigPC
– Essa linha de controle dever ser ativada se a instrução
for beq e a ALU produzir o sinal Zero, usado para
comparação de igualdade
Instrução RegDst OrigULA MemparaReg EscreveReg LeMem EscreveMem Branch ULAOp1 ULAOp0

Formato R 1 0 0 1 0 0 0 1 0

Lw 0 1 1 1 1 0 0 0 0

Sw X 1 X 0 0 1 0 0 0

beq X 0 X 0 0 0 1 0 1
MIPS Monociclo
• Unidade de controle principal
– Passos para a execução de instruções R: add $t2, $t0,
$t1
• 1. Busca da instrução na memória de instruções e
incremento do PC
• 2. Dois registradores, $t0 e $t1, são lidos do banco de
registradores. A unidade de controle coloca valores nas
linhas de controle
• 3. A UAL opera sobre os dados lidos do banco de
registradores, usando o código da função (bits 5-0) para
gerar a função da UAL
• 4. O resultado da UAL é escrito no banco de registradores
usando-se os bits 15-11 da instrução para selecionar o
registrador-destino ($t2)
• Exemplo 1: Add $t2, $t0, $t1
MIPS Monociclo
• Unidade de controle principal
– Passos para a execução de instruções LW/SW ( lw $t1, offset
($t2))
• 1. Busca da instrução na memória de instruções e incremento do
PC
• 2. Leitura do conteúdo de um registrador ($t2) do banco de
registradores
• 3. Cálculo da soma do valor lido do banco de registradores com o
resultado da extensão do sinal de 16 bits menos significativos da
instrução (deslocamento)
• 4. O resultado da soma é usado para endereçar a memória de
dados
• 5. O dado vindo da unidade de memória é escrito no banco de
registradores; o número do registrador-destino é dado pelos bits
20-16 da instrução ($t1)
• Exemplo 2: lw $t1, offset ($t2)
MIPS Monociclo
• Unidade de controle principal
– Passos para execução de instruções BEQ
• 1. Busca da instrução na memória de instruções e
incremento do PC
• 2. Leitura do conteúdo dos registradores $t1 e $t2
• 3. Realização de uma subtração pela ALU sobre os dois
valores lidos do bando de registradores. O valor de PC+4 é
somado ao resultado da extensão do sinal dos 16 bits menos
significativos da instrução (deslocamento) deslocado de dois
bits à esquerda. O resultado dessa soma é o endereço de
destino do desvio
• 4. A saída, Zero da ALU é usada para decidir se o PC deve ser
atualizado com o valor de PC+4 ou com o valor do endereço
de destino do desvio condicional
• Exemplo 3: beq $t1, $t2, offset
MIPS Monociclo
• Implementando jumps
– A instrução jump se parece um pouco com uma
instrução branch, mas calcula o PC de destino de
maneira diferente e não é condicional
– Como um branch, os 2 bits menos significativos são
sempre 00; os próximos 26 bits mais significativos
vem do campo de 26 bits imediato da instrução
– Assim, pode-se implementar um jump armazenando
no PC a concatenação dos
• 4 bits superiores do PC atual + 4 (esses são bits 31:28 do
endereço da instrução imediatamente seguinte)
• O campo de 26 bits imediato da instrução jump
• Os bits 00
• Implementando jumps
MIPS Monociclo
• Implementação de ciclo único
– O projeto de ciclo único é ineficiente
– O clock precisa ter a mesma duração para cada instrução nesse
projeto e o CPI será sempre 1
– O tempo de ciclo é determinado pelo caminho mais longo; esse
caminho, certamente, é uma instrução lw, que usa cinco unidades
funcionais em série:
• Memória de instruções
• Banco de registradores
• ALU
• Memória de dados
• Banco de registradores
– Embora o CPI seja 1, o desempenho geral de uma implementação de
ciclo único provavelmente não será bom, já que outras instruções
poderiam ficar em um ciclo de clock mais simples
MIPS Monociclo
• Suponha os seguintes tempos de operação
– Unidade de memória: 200 ps
– ALU e somadores: 100 ps
– Banco de registradores: 50 ps
– Considerando que os multiplexadores, a unidade de
controle, os acessos do PC, a unidade de extensão do sinal
e os fios não possuem atraso, qual das seguintes
implementações seria mais rápida e por quanto?
• Uma implementação em que toda instrução opera em 1 ciclo de
clock de uma duração fixa
• Uma implementação em que toda instrução é executada em 1
ciclo de clock usando um ciclo de clock com duração variável, que
para cada instrução, tem apenas a duração necessária (método
não prático)
MIPS Monociclo
• Solução
– Considerando o mix: 25% loads, 10% stores, 45% ALU, 15% desvios, 5% jumps
– Tempo de execução = Contagem instruções x CPI x Tempo de ciclo
– Tempo de execução = Contagem instruções x 1 x Tempo de ciclo
– Tempo de execução = Contagem instruções x Tempo de ciclo
• Caminhos críticos
Classe de Unidades funcionais usadas pela classe de instrução
instrução
Tipo R Busca de instrução Acesso a registrador ULA Acesso a registrador

Load word Busca de instrução Acesso a registrador ULA Acesso a memória Acesso a registrador

Store word Busca de instrução Acesso a registrador ULA Acesso a memória

Branch Busca de instrução Acesso a registrador ULA

Jump Busca de instrução


MIPS Monociclo
• Tempo exigido para cada classe de instruções

Classe de Memória de Leitura de Operação Memória de Leitura de Total (ps)


instrução instrução registrador ULA Dados registrador
Tipo R 200 50 100 0 50 400
Load word 200 50 100 200 50 600
Store word 200 50 100 200 550

Branch 200 50 100 0 350

Jump 200 200


MIPS Monociclo
• Ciclo de clock
– determinado pela instrução mais longa, que leva
600ps para ser executada:
MIPS Monociclo
• Ciclo único
– Como precisamos considerar que o ciclo de clock é igual ao
atraso de pior caso para todas instruções, não podemos
usar técnicas de implementação que reduzem o atraso do
caso comum: violação dos princípios de projeto
– Na implementação de ciclo único, cada unidade funcional
precisa ser duplicada, o que eleva o custo de
implementação: o projeto de ciclo único é ineficiente no
desempenho e no custo
– Solução: utilizar uma implementação multiciclo, de forma
que as instruções possam utilizar mais de um ciclo de clock
para serem executadas, dependendo de sua
complexidade.
MIPS MULTICICLO
MIPS multiciclo
• Problema da máquina de ciclo único

• Na implementação multiciclo:
– Cada fase de execução da instrução em um ciclo
– Unidades funcionais podem ser compartilhadas, isto é, usadas mais de
uma vez por instrução
– Redução da quantidade de hardware necessário
• Principais vantagens do multiciclo:
– Instruções são executadas em quantidades diferentes de períodos de
clock (caso comum pode ser melhorado)
– Capacidade de compartilhar unidades funcionais (redução de custo)
MIPS multiciclo
• A visão de alto nível do caminho de dados multiciclo
– Memória e ALU únicas
– Registradores IR e MDR (os dois valores são necessários no mesmo
ciclo de clock)
– Registradores A e B para armazenar os valores lidos no banco de
registradores (assim mais de uma leitura é possível por execução de
instrução)
– O registrador SaidaALU armazena a saída da ALU
MIPS multiciclo
• A visão de alto nível do caminho de dados multiciclo
– Como várias unidades funcionais são compartilhadas para
diferentes finalidades, multiplexadores adicionais devem ser
incluídos e os multiplexadores existentes devem ser expandidos
– A substituição das três ALUs do caminho de dados de ciclo único
por uma única ALU significa que esta precisa acomodar todas as
entradas que, antes, iam para as três ALUs diferentes:
• Um multiplexador adicional é incluído para a primeira entrada da ALU,
para escolher entre os registrador A e o PC
• O multiplexador na segunda entrada da ALU muda de duas para
quatro entradas: as duas entradas adicionais para o multiplexador são
a constante 4 (usada para incrementar o PC) e o campo offset com
sinal estendido e deslocado (usado no cálculo do endereço do desvio)
• O caminho de dados multiciclo para o MIPS
manipular instruções básicas
MIPS multiciclo
• Unidade de controle principal
– Implementação multiciclo exige um conjunto diferente de sinais de controle:
• PC, a memória, os registradores e o IR: sinal de escrita
• Memória: sinal de leitura
• UAL: mesmo controle da implementação monociclo
• Multiplexador de 4 entradas: 2 linhas de controle
• Todos os demais multiplexadores: uma linha de controle
– Para instruções jump e branch equal existem três fontes possíveis para o PC:
• PC+4
• SaidaALU (desvio condicional)
• 26 últimos bits do IR acrescido de 2 zeros à direita, e concatenados com os 4 MSB’s do
PC
• Controle de escrita do PC:
– No incremento normal, e em um deslocamento incondicional, o PC é escrito
incondicionalmente
– Se for um desvio condicional, passa o valor de UALSaída, somente se os
registradores forem iguais
– Dois sinais de escrita: PCEsc e PCEscCond
• O caminho de dados multiciclo com as linhas de
controle indicadas
MIPS multiciclo
• Unidade de controle principal
– Ações dos sinais de controle de 1 bit:
– RegDst
• Inativo → O número do registrador-destino no banco de registradores vem do campo rt
• Ativo → O número do registrador-destino no banco de registradores vem do campo rd
– EscreveReg
• Inativo → Nenhum
• Ativo → O registrador de propósito geral selecionado pelo número do registrador de escrita é
atualizado com o valor da entrada Dado de Escrita
– OrigAALU
• Inativo → O primeiro operando da UAL é o PC
• Ativo → O primeiro operando da UAL vem do registrador A
– LerMem
• Inativo → Nenhum
• Ativo → O conteúdo da memória no endereço especificado na entrada Endereço é colocado na saída
Dado de saída
– EscreveMem
• Inativo → Nenhum
• Ativo → O conteúdo da memória no endereço especificado na entrada Endereço é substituído pelo
valor na entrada Dado a ser Escrito
MIPS multiciclo
• Unidade de controle principal
– Ações dos sinais de controle de 1 bit:
– MemParaReg
• Inativo → O valor colocado na entrada Dado a ser Escrito do banco de registradores vem
de SaidaALU
• Ativo → O valor na entrada Dado a ser Escrito do banco de registradores do MDR
– louD
• Inativo → O PC é usado para fornecer o endereço da unidade de memória
• Ativo → SaidaALU é usada para fornecer o endereço para a unidade de memória
– IRWrite
• Inativo → Nenhum
• Ativo → A saída da unidade de memória é escrita no IR
– EscrevePC
• Inativo → Nenhum
• Ativo → O PC é atualizado. A fonte é controlada pelo sinal OrigPC
– EscrevePCCond
• Inativo → Nenhum
• Ativo → O PC é atualizado se a saída Zero da ALU também estiver ativa
MIPS multiciclo
• • Unidade de controle principal
– – Ações dos sinais de controle de 2 bits:
– – OpALU
• • 00 – A UAL efetua uma operação de soma
• • 01 – A UAL efetua uma operação de subtração
• • 10 – O campo função da instrução determina a operação da UAL
• – OrigBALU
• • 00 – A segunda entrada da UAL vem do registrador B
• • 01 – A segunda entrada da UAL é a constante 4
• • 10 – A segunda entrada da UAL é a extensão de sinal dos 16 bits menos significativos do
IR
• • 11 – A segunda entrada da UAL é a extensão de sinal dos 16 bits menos significativos do
IR deslocados 2 bits à esquerda
• – OrigPC
• • 00 – A saída da UAL (PC+4) é enviada ao PC para atualizar seu valor
• • 01 – O conteúdo do UALSaída (o endereço-alvo do desvio condicional) é enviado ao PC
para atualizar seu valor
• • 10 – O endereço-alvo do desvio incondicional (IR[25-0]), deslocado 2 bits à esquerda e
concatenado com PC+4[31-28] é enviado ao PC para atualizar seu valor
• • Caminho de dados completo para a implementação multiciclo
juntamente com as linhas de controle necessárias
MIPS multiciclo
• Dividindo a execução da instrução em ciclos de clock
– Ao organizar a execução em mais de um ciclo de clock
pode-se balancear a quantidade de trabalho realizada em
cada ciclo
– A organização da execução de cada instrução segue um
número de etapas, que depende do tipo da instrução
• As etapas devem ser realizadas de forma que cada passo contenha
apenas uma operação de ALU, um acesso à memória ou um
acesso ao banco de registradores
• Com essa restrição, o ciclo de clock pode ser tão curto quanto a
mais longa dessas operações
• Os registradores (ex.: A, B, MDR, SaidaALU)
armazenam dados para os próximos ciclos da mesma
instrução
MIPS multiciclo
• Dividindo a execução da instrução em ciclos
de clock
– 1. Busca da instrução
– 2. Decodificação da instrução e busca dos
registradores
– 3. Execução, cálculo do endereço de memória ou
conclusão do desvio
– 4. Acesso à memória ou conclusão de instrução
tipo R
– 5. Conclusão de leitura de memória
MIPS multiciclo
• Dividindo a execução da instrução em ciclos de clock
– 1. Busca da instrução
• IR=Memória[PC]
• PC=PC+4
– Envio do PC para a memória como endereço, realização da leitura e escrita da
instrução no registrador de instruções.
– 2. Decodificação e busca dos registradores
• Operações que podem depois ser descartadas após a decodificação da instrução
(ainda não se sabe qual instrução está no IR)
• São executadas para evitar a perda de tempo durante a execução (por exemplo ler
rs e rt)
• Carga dos registradores de entrada da ALU e do endereço de desvio condicional
(salvo em SaidaALU)
• A = Reg[IR[25-21]];
• B = Reg[IR[20-16]];
• SaidaALU = PC + extensão de sinal (IR[15-0] << 2);
• Após este ciclo de clock, determinar a ação a ser tomada pode depender do
conteúdo da instrução
MIPS multiciclo
• Dividindo a execução da instrução em ciclos de
clock
– 3. Execução, cálculo do endereço de memória ou
conclusão do desvio
• a) Referência à memória
– SaidaALU = A + extensão de sinal IR[15-0]
• b) Instrução aritmética ou lógica (tipo R)
– SaidaALU = A op B
• c) Desvio condicional
– Se (A == B) PC = SaidaALU
• d) Desvio incondicional
– PC = PC [31-28] || (IR[25-0]<<2
MIPS multiciclo
• Dividindo a execução da instrução em ciclos de
clock
– 4. Etapa de acesso à memória ou conclusão de
instrução tipo R
• a) Referência à memória
– MDR = Memória [SaidaALU];
– ou
– Memória [SaidaALU] = B;
• b) Instruções aritméticas ou lógicas (tipo R)
– Reg[IR[15-11]] = UALSaída;
– 5. Etapa de conclusão de acesso à memória (lw)
• Reg[IR[20-16]] = MDR
MIPS multiciclo
Etapa Ação para instruções tipo R Ação para instruções de acesso à Ação para desvios Ação para jumps
memória

Busca de instrução IR <= Memória[PC]


PC <= PC + 4

Decodificação da instrução e A <= Reg[ IR[ 25:21 ] ]


busca dos registradores B <= Reg[ IR[ 20:16 ] ]
SaídaULA <= PC + (estende-sinal (IR[ 15:0 ]) << 2)

Execução, cálculo do SaídaULA <= A op B Saída <= A + estende-sinal If (A == B) PC <= {PC [31:28],
endereço ou conclusão do (IR[15:0]) PC <= SaídaULA (IR[25:0], 2'b00)}
desvio/jump

Acesso à memória ou Reg[IR[15:11]] <= Load: MDR <=


conclusão de instrução do SaídaULA Memória[SaídaULA]
tipo R ou
Store: Memória[SaídaULA] <= B

Conclusão da leitura da Load: Reg[IR[20:16]] <= MDR


memória

Você também pode gostar