Ir ao conteúdo

Instrução JUMP


esmeco

Posts recomendados

Postado

Boa tarde!

Eu preciso de desenhar o meu processador de 16 bits de modo a suportar a instrução jump.Sei que no jump tenho,no meu caso,5 bits para o opcode,logo restam 11 bits para o jump address.

Eu já tenho feito um shift left de 1(só que o número de bits de entrada é de 16 e de saída 16 também,ou seja é maior que os 11 bits de entrada e 12 bits de saída que quero...Que faço?) e sei que o tenho de usar aqui,mas eu preciso de adicionar um bit(em vez de 11 fica 12) e acho que o shift left de 1 mantem o mesmo número de bits mas desloca-os todos para a esquerda e coloca 0 no LSB,ele não acrescenta nenhum bit...acho.E esse bit que entra,que valor vai tomar?Como poderei fazer para adicionar suporte à instrução jump?

  • Membro VIP
Postado

Você não precisa mandar para o seu shift barrel, é só uma questão de acertar as ligações, o bit 10 do opcode vai pro 11 do REL, o 9 do opcode vai pro 10 do REL, ..., o 0 do opcode vai pro 1 do REL e entra um 0 no bit 0 do REL.

Ah sim, o REL é um endereço relativo, para obter o IP final você precisa somar o REL ao IP inicial, na hora de mandar os dois para o ADDER os bits 12 ao 15 do REL vão como 0.

Postado

Ok,estou a perceber...O problema é que ao somar esses 12 bits do REL mais 4bits e tendo eu um adder de 16 bits,que valores é que eu irei por nos restantes bits 4 bits do REL e 12 bits do ip inicial?

Para determinar o endereço da instrução que vai ser executada a seguir vai-se somar +2 ou +4?Eu acho que é mais 2,pois como cada instrução é a 16 bits,ou seja,2 bytes...Certo?

  • Membro VIP
Postado
Ok,estou a perceber...O problema é que ao somar esses 12 bits do REL mais 4bits e tendo eu um adder de 16 bits,que valores é que eu irei por nos restantes bits 4 bits do REL e 12 bits do ip inicial?

Corrigindo o post anterior... Você replica o bit mais significativo do REL para as entradas 15:11

Para determinar o endereço da instrução que vai ser executada a seguir vai-se somar +2 ou +4?Eu acho que é mais 2,pois como cada instrução é a 16 bits,ou seja,2 bytes...Certo?

Isso mesmo.

Postado

Aqui está o que eu tenho..:Espero que dê para perceber...O adder que aí está vem do Program counter e já tem a soma do pc +2!Está correcto o desenho?

jumpmr0.th.jpg

Postado

Eu estou a construir o meu processador seguindo esta imagem(só que no caso detsa imagem é um processador a 32 bits e eu adapto para o meu de 16 bits) e nesta imagem o Adder que soma o PC+4 está antes do shift.E o que eu fiz foi juntar o resultado de PC+4(os tais 4 bits) com o shift left de 11 para 12,colocando os bits do PC+4 nas posições mais significativas.Não está correcto o que eu tenho de acordo com esta imagem?Senão estiver,então como seria'

datapthom2.th.jpg

  • Membro VIP
Postado

O shift esta antes...

Na imagem foi feito de duas maneiras diferentes, no caso dos branchs foi feito o shift e depois somado, no caso do jump foi feito o shift e concatenado com os bits mais signifcativos do PC+4.

Postado

Aqui está o meu caminho de dados actual para se voce quiser desenhar por cima ou explicar através dele que será melhor...

datapathghli1.th.jpg

  • Membro VIP
Postado

Não vou fazer um desenho porque tudo que tenho aqui é o paint e esse desenho vai me tomar um bom tempo, mas vou tentar comentar.

O shift saindo do Adder no canto superior esquerdo não deveria existir, parte da lógica de branches e jumps ja esta implementada nos Signext*, shiftleft1 e Adder no canto superior direito, o que ta faltando é no MUX do canto superior direito ligar o select dele a alguma lógica para determinar se houve desvio ou não, para jumps sempre tem, para demais instruções exeto branches e jumps nunca tem e para branches vai depender do resultado da comparação.

*Pode ser que para esse aqui seja preciso criar mais de um baseado na instrução, branches possuem menos bits destinados ao offset do que jumps.

Postado

Não percebo porque não deveria existir...Se na imagem do datapath aparecem dois shift left 2 em que um aumenta o numero de bits de 26 para 28 e o outro que vais somar na ALU,e se esse de 26 para 28 está associado ao jump,porque não deve este shift existir?Eu tenho de me guiar pela imagem para construir o meu processador,por isso naõ deveria construir os 2 shifts que lá aparecem?

  • Membro VIP
Postado

Na imagem de referência aparecem dois shift left porque jumps e branches recebem tratamentos diferentes, nos jumps é feito o shift e os bits 27:0 são concatenados com os bits 31:28 do PC enquanto que nos branches é feito o SIGNEXT, o shift e depois eles são somados ao PC, fazendo a sua modificação no MIPS você tem liberdade de escolher como cada um deles vai ficar e mesmo se vão seguir um caminho parecido.

Postado

Ok,então um branch segue o caminho do sign extend e depois um shift left de 1 que soma ao valor do pc,para indicar o endereço do branch,certo?Eu isso já tenho representado no meu desenho do processador.Mas e quanto ao jump?Se,segundo o que disse, a ligação que sai do adder depois de ter somado o pc+2(o shift) não deveria estar lá no meu processador,como eu faria para o meu processador suportar a instrução jump?É que eu coloquei lá esse shift porque na referência também lá está um shift para suportar o endereço para onde vai haver o "jump"!

E o que eu tentei fazer foi isso mesmo que voce disse: " ...jumps é feito o shift e os bits 27:0 são concatenados com os bits 31:28 do PC enquanto que nos branches é feito o SIGNEXT, o shift e depois eles são somados ao PC..".

Só que no meu caso são os bits 11:0 concatenados com os bits 15:12 do PC(e é por isso que eu tenho essas ligações lá em cima no canto superior esquerdo,que corresponderiam ao outro shift left 1) e o sign extend,o shift left 1 e depois a soma dos dois.

Por isto tudo,não percebo muito bem o que está errado no meu processador?

  • Membro VIP
Postado

Ah ok, entendi... A imagem ta em baixa resolução, dava a entender que o shift era feito com a saida do Adder...

Mas ok, é isso ai, agora é só ligar a saida do shift-concat em um MUX no final que nem na referência...

Postado

Desculpe pela baixa resolução!O que eu tinha a saír do Adder era na verdade uma ligação que contém o PC+2(15:12 ligações "OUTPT") que vão concatenar aos MSB do "SHIFTIN" junto com os 11 bits(10:0) do jump e depois esse "SHIFTIN" vai ligar a um MUX.É isto, certo?

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...