Question

Il y avait ce problème qui a été interrogé sur la mise en œuvre d'un octet de charge en un seul cycle datapath sans avoir à changer la mémoire de données, et la solution était quelque chose ci-dessous.

texte alt http://img214.imageshack.us/img214/7107/99897101. jpg

  

Il est en fait assez réaliste   question; la plupart des systèmes de mémoire sont   entièrement basée sur les mots, et individuel   octets sont généralement uniquement traitées   à l'intérieur du processeur. Quand vous voyez un   « Erreur de bus » sur de nombreux ordinateurs, ce   signifie souvent que le processeur a tenté   pour accéder à une adresse mémoire qui était   pas correctement aligné mot, et   Système de mémoire a provoqué une exception.   Quoi qu'il en soit, car les adresses d'octets pourrait   ne pas être un multiple de 4, nous ne pouvons pas passer   les à la mémoire directement. Toutefois, nous   peut encore obtenir à tout octet, parce que   chaque octet peut être trouvé dans certains   mot, et toutes les adresses mot sont   multiples de 4. La première chose que nous   faire est de nous assurer d'obtenir le droit   mot. Si l'on prend les 30 bits de poids fort   l'adresse (à savoir, ALUresult [31-2])   et les combiner avec deux bits à 0   le bas (ce qui est ce que la « gauche   Shift 2” unité fait vraiment), nous   ont l'adresse octet du mot   contient l'octet souhaité. C'est   juste adresse de l'octet, arrondi   vers le bas à un multiple de 4. Ce changement   signifie que pv va maintenant aussi rond   adresses vers le bas à des multiples de 4, mais   c'est OK car les adresses non-alignés   ne fonctionnerait pas pour pv de toute façon avec ce   Unité de mémoire. OK, maintenant, nous obtenons les données   mot de retour de la mémoire. Comment pouvons-nous   l'octet que nous voulons en sortir? Bien,   noter que l'octet de décalage octet   dans le mot est juste donné par le   d'ordre inférieur 2 bits de l'octet de   adresse. Donc, nous utilisons simplement les 2   des bits pour sélectionner l'octet approprié   hors du mot à l'aide d'un MUX. Noter la   l'utilisation de la numérotation des octets big-endian, comme   est approprié pour MIPS. Ensuite nous   avoir à zéro étendre l'octet à 32   bits (à savoir, il suffit de le combiner avec 24   zéros à son extrémité haute), parce que le   problème précise de le faire. Réellement,   ce fut une petite erreur dans la   question: en réalité, la LBU   instruction zéro étend l'octet, mais   lb-signe prolonge. Tant pis.   Enfin, nous devons étendre la   MUX-contrôle MemtoReg d'accepter un   nouvelle entrée: l'octet zéro étendu pour   le cas lb. Le contrôle MemtoReg   signal doit être élargie à 2 bits. le   d'origine 0 et 1 cas de changement 00   et 01, respectivement, et nous ajoutons une nouvelle   boîtier 10 qui est utilisé uniquement dans le cas   de livres.

Je ne comprends pas tout à fait en réalité sur la façon dont cela fonctionne même après avoir lu l'explication, en particulier sur le changement de gauche le résultat ALU par 2 donnerait l'adresse d'octet ... Comment est-ce possible ?? donc si je voudrais charger un demi-mot alors je ferais un quart de travail à gauche et je recevrais l'adresse du demi-mot ?? ce serait une meilleure façon de faire l'octet de charge, charge demi-mot en modifiant la mémoire de données? (La question met au-dessus des contraintes que nous ne pouvons pas modifier la mémoire de données)

Était-ce utile?

La solution

L'auteur original semble être simplement l'ajout d'un multiplexeur d'octet des données de 32 bits en cours de lecture de la mémoire. Cette mémoire permet à un 32 bits pleine charge naturellement aligné (instruction lw) et le multiplexeur d'octet supplémentaire et zéro extension permet pour des instructions d'octets de charge et (instruction LBU).

Le décalage à gauche du résultat ALU donne une adresse de mot, pas une adresse d'octet, et représente le décalage vers la droite implicite par deux dans le routage du signal. Le résultat final est tout simplement les deux bits inférieurs du résultat ALU étant masquées (mise à zéro) avant d'être envoyé à la mémoire. Les deux bits de poids faible de la valeur ALU sont alimentés en aval de la mémoire au multiplexeur d'octet, permettant à la mémoire de mots pour lire des octets arbitraires.

Il n'y a pas de soutien direct dans la logique montré pour le chargement des demi-mots (16 bits), octets juste et mots entiers 32 bits. Vous pouvez toutefois modifier facilement l'octet d'adressage logique pour soutenir des mots au lieu d'octets (ou même les deux) en utilisant une approche similaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top