A questão é como a máquina lê as instruções? Por exemplo: se for um tipo R, a máquina primeiro lê o opcode para saber o tipo de instrução e, com base no tipo, lê a instrução da direita para a esquerda para saber o rd e, em seguida, lê a função3, depois rs1, rs2 e, por último, a função7. Está correto?
Se você estivesse escrevendo um emulador de software para RISC V, você poderia ter as seguintes etapas:
Assumindo byte *pc;
Aqui você pode especificar que extrair o
rd
campo é condicional, e feito somente com base no opcode sendo reg/reg. E você pode dizer que ord
campo é extraído primeiro, seguido pelofunc3
campo.Contudo, o seguinte seria igualmente válido:
Então, em software, expressaríamos uma ordem de passos para decodificar, mas a ordem é um tanto arbitrária. O mais importante é extrair os campos sob a condição de saber que o formato da instrução é reg/reg.
No entanto, o hardware fará mais como isto:
É difícil expressar um conceito de ordenação para o hardware — o que ele fará passo a passo, do primeiro ao último.
Para o hardware, é melhor falar sobre as condições e dependências.
Por exemplo, como uma dependência, não podemos obter
s1
sem primeiro obterrs1
, já ques1 = reg[rs1]
.Como condição, ele deve aceitar
answer1
quando souber o suficiente sobreopcode
,func3
efunc7
.No entanto, isso não impede o processador de computar outras coisas em paralelo caso o valor correto seja
answer2
. Então, para o processador, trata-se de fazer o máximo que puder em paralelo, excluindo informações irrelevantes quando uma determinação completa for feita em relação às condições e dependências.Na emulação de software, não nos incomodaríamos em extrair campos imediatos para o formato de instrução reg/reg. No entanto, o hardware estaria extraindo o imediato em paralelo e, mais tarde, desconsiderando os dados do campo imediato, uma vez que se saiba que o formato da instrução é reg/reg.