Pergunta

Houve esse problema que foi questionado sobre a implementação de um byte de carga em um único datapath de ciclo sem precisar alterar a memória de dados, e a solução foi algo abaixo.

TEXTO DE ALT HTTP://IMG214.IMAGESHACH.US/IMG214/7107/99897101.JPG

Esta é realmente uma pergunta bastante realista; A maioria dos sistemas de memória é totalmente baseada em palavras e os bytes individuais geralmente são tratados apenas dentro do processador. Quando você vê um "erro de barramento" em muitos computadores, isso geralmente significa que o processador tentou acessar um endereço de memória que não era adequadamente alinhado com as palavras e o sistema de memória aumentou uma exceção. De qualquer forma, porque os endereços de byte podem não ser um múltiplo de 4, não podemos transmiti -los diretamente à memória. No entanto, ainda podemos chegar a qualquer byte, porque todo byte pode ser encontrado em alguma palavra, e todos os endereços de palavras são múltiplos de 4. Portanto, a primeira coisa que fazemos é garantir que obtenhamos a palavra certa. Se pegarmos os 30 bits altos do endereço (ou seja, Aluresult [31-2]) e combiná-los com dois 0 bits na extremidade mais baixa (é isso que a unidade “Esquerda 2” está realmente fazendo), temos o Endereço de byte da palavra que contém o byte desejado. Este é apenas o endereço do próprio byte, arredondado para um múltiplo de 4. Essa alteração significa que o LW agora também arredondará endereços para múltiplos de 4, mas tudo bem, já que os endereços não alinhados não funcionariam para LW de qualquer maneira com esta memória unidade. OK, agora recebemos a palavra de dados de volta da memória. Como conseguimos o byte que queremos disso? Bem, observe que o deslocamento de byte do byte dentro da palavra é dado apenas pelos 2 bits de ordem baixa do endereço do byte. Então, simplesmente usamos esses 2 bits para selecionar o byte apropriado para fora da palavra usando um MUX. Observe o uso de numeração de bytes big-endian, conforme apropriado para MIPs. Em seguida, temos que estender o byte a 32 bits (ou seja, combiná-lo com 24 zeros na sua extremidade alta), porque o problema especifica para fazê-lo. Na verdade, esse foi um pequeno erro na pergunta: na realidade, a instrução LBU zero se estende pelo byte, mas o LB se destaca. Ah bem. Finalmente, temos que estender o MUX controlado por Memtoreg para aceitar uma nova entrada: o byte estendido zero para o caso LB. O sinal de controle de MemtoreG deve ser ampliado para 2 bits. Os casos 0 e 1 originais mudam para 00 e 01, respectivamente, e adicionamos um novo caso 10, que é usado apenas no caso de lb.

Na verdade, eu não entendo como isso funciona mesmo depois de ler a explicação, especialmente sobre a mudança esquerda, o resultado da ALU por 2 daria o endereço de byte ... como isso é possível? Então, se eu gostaria de carregar meia palavra, faria um turno à esquerda e receberia o endereço da meia palavra? Qual seria a melhor maneira de fazer carregar byte, carregar meia palavra modificando a memória de dados? (A pergunta acima coloca as restrições de que não podemos modificar a memória de dados)

Foi útil?

Solução

O autor original simplesmente parece estar adicionando um multiplexador de bytes aos dados de 32 bits que estão sendo lidos na memória. Essa memória permite uma carga completa de 32 bits alinhados naturalmente (instrução LW) e o multiplexador de bytes adicional e a extensão zero também permitem instruções de byte de carga (instrução LBU).

O turno esquerdo do resultado ALU produz um endereço de palavra, NÃO um endereço de byte e explica a mudança direta implícita por dois no roteamento do sinal. O resultado final é simplesmente os dois bits inferiores do resultado ALU sendo mascarado (zero) antes de serem enviados para a memória. Os dois LSBs do valor ALU são alimentados por baixo da memória para o multiplexador de bytes, permitindo que a palavra memória leia bytes arbitrários.

Não há suporte direto na lógica mostrada para carregar meia palavra (16 bits), apenas bytes e palavras completas de 32 bits. Você pode, no entanto, modificar facilmente a lógica de abordagem de bytes para suportar palavras em vez de bytes (ou mesmo ambos) usando uma abordagem semelhante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top