Aula 14: Decomposição de Instruções do Tipo B (SB)

Objetivos


Contextualização

As instruções do tipo B:

A instrução desse tipo, para a nossa implementação básica, é:

O formato das instruções do tipo B são uma variação do formato das instruções do tipo S, por isso, também é chamado de SB.


Desvia Se Igual (branch equal: beq)

Compara o conteúdo de dois registradores definidos na instrução (Rs1 e Rs2). Se forem iguais, desvia para o endereço definido por PC+extSinal(imediato). Caso contrário, continua na próxima instrução.

O imediato é um inteiro com sinal. Como ele sofre um deslocamento para a esquerda, significa que o valor indica, em número de pares de bytes, o total de desvio que ocorrerá. Isso implica que a distância de desvio será de 4 KBytes para a frente ou para trás.

Estrutura dos Campos da Instrução
imediato[12|10:5] Rs2 Rs1 funct3 imediato[4:1|11] opcode
7 bits 5 bits 5 bits 3 bits 5 bits 7 bits
MSB (b31) LSB (b0)

Para formar o valor de 32 bits que será somado ao PC, o imediato tem seu sinal extendido e é deslocado um bit para esquerda, conforme mostrado abaixo:

O imediato deve ser montado a partir dos bits distribuidos nos campos do imediato de 7 bits e imediato de 5 bits. Note que a sequência dos bits não está em ordem, permitindo economizar MUXes em implementações mais simples.

A reordenação do imediato deve ser feita no componente de Geração do Imediato.

O significado dos nomes dos campos:


Exemplo de BEQ

Sintaxe:

    beq r7, r8, 0x0A0 (imediato = 0b0000 1010 0000)

Sua operação:


O modo de endereçamento dessa classe de instruções é o Relativo ao PC.

Para a instrução:


INICIO:         # A posição de memória de INICIO está 5 instruções antes do BEQ.
  ...
  ...
  ...
  ...
  ...
  beq r7, r8, INICIO;

Qual seria a sua codificação?

Imediato[12|10:5] Rs2 Rs1 funct3 Imediato[4:1|11] opcode
7 bits 5 bits 5 bits 3 bits 5 bits 7 bits
31~25 24~20 19~15 14~12 11~7 6~0

A instrução em assembly define o endereço de destino como sendo 5 instruções antes, ou seja, 20 bytes. Para voltar devemos somar o valor -20 ao PC. Esse valor, em complemento de dois, é:

Em binário, com 32 bits: 1111 1111 1111 1111 1111 1111 1110 1100 (0xFFFFFFEC)

Precisamos calcular o imediato que, após convertido, resulte em 0xFFFFFFEC.

O primeiro passo é transformar esse valor para 13 bits. Teremos:

O segundo passo é desfazer o deslocamento para a esquerda. Isso é feito através de um deslocamento para a direita. Assim, teremos o valor de 12 bits do imediato:

Imediato, com 12 bits = 1111 1111 0110

Consultando o greencard:

Utilizando o valor do imediato obtido, vamos fazer a reordenação dos bits:

Imediado(11:5) Rs2 Rs1 funct3 Imediato[4:1|11] opcode
7 bits 5 bits 5 bits 3 bits 5 bits 7 bits
1111111 01000 00111 000 01101 1100111
31~25 24~20 19~15 14~12 11~7 6~0

Atividade

Faça a análise da instrução beq:

Com o caminho de dados pronto, passe para a implementação em VHDL e testes.

Quando estiver funcional:

Para iniciar, use o fluxo de dados das instruções anteriores como referência.

Fluxo de Dados das Instruções R, I, S e B
Fluxo de Dados das Instruções R, I, S e B

Esta atividade será parte da entrega intermediária.

A ULA pode ser a mesma do fluxo de dados para as intruções do tipo R (soma e subtração).

Teste

Para o teste, temos que criar um pequeno programa que utilize as instruções do tipo B.

Procedimento:

Usando os botões, será possível executar o programa uma instrução por vez e reiniciar a execução.



Esta Atividade é a consolidação das Instruções do tipo R, I, S e B. Ela deverá ser entregue através do Blackboard!