Question

J'ai posté ce diagramme logique numérique en tant que répondez à une autre question de stackoverflow . Il décrit un système logique qui sera codé en Verilog ou en VHDL et éventuellement mis en oeuvre dans un FPGA.

texte altimétrique http://img145.imageshack.us/img145/5125/bitshifterlogicdiagramkn7 .jpg

Les zones numérotées dans le diagramme représentent des bits dans un champ. Chaque champ contient K bits et les bits pour actuel et masque seront fournis par un système informatique (utilisant un registre à verrouillage ou un équivalent). Les bits de next seront lus dans ce même système informatique.

La solution que j'ai publiée fonctionne tant qu'il y a au moins un bit défini dans le champ masque et qu'il y a exactement un bit défini dans le champ binaire actuel . . L'idée est que le champ de bits suivant deviendra le champ de bits actuel après que le système informatique aura exécuté une tâche (une opération de planification, dans la question d'origine).

Donc, ma question est la suivante: Comment modifieriez-vous ce système pour qu'il gère correctement le cas particulier dans lequel le champ de bits actuel est à zéro (pas de bits définis)? En l'état, si tous les bits sont dans actuel sont à zéro, la sortie sera également égale à zéro, quels que soient les bits du masque sont définis sur.

Idéalement, si actuel est égal à zéro, le bit le plus bas défini dans masque doit être défini dans suivant . Le système doit également rester extensible à un nombre quelconque de bits (K) sans avoir à ajouter de manière exponentielle plus de portes logiques. L’esprit de la question initiale était de trouver une solution facile à mettre en œuvre pour n’importe quel nombre de bits.

Voir aussi: cette question de stackoverflow

Était-ce utile?

La solution

Pour ma part, je dirais à l'utilisateur du FPGA qu'il doit avoir l'un des bits défini sur 1 lors de la saisie.

Cependant, si ce n'est pas votre solution préférée, qu'est-ce qui ne va pas avec l'idée de pré-alimenter toutes les entrées de courant initialement dans une grande porte NOR (de sorte que la sortie ne soit vraie que lorsque toutes les entrées sont fausses). Toutes les lignes actuelles continuent également jusqu’à leurs portes AND, à l’exception que Current [1] est OU avec la sortie de notre porte NOR avant d’entrer dans sa porte AND

De cette façon, Current [1] serait vrai en entrant dans la porte ET, si tous les courants sont faux.

N'oubliez pas que je comprends l'algèbre booléenne, mais que je n'ai jamais travaillé sur du matériel brut. J'imagine que vous aurez besoin de mettre tous les signaux d'entrée en mémoire tampon dans les portes AND pour garantir un timing correct, mais je suppose que vous saurez que mieux que moi.

Le diagramme suivant est laissé au cas où SO résoudrait ses blocs de code / pré - la dernière mise à jour de SO semble les avoir gavés (en les laissant proportionnels, sans police à largeur fixe). Quoi qu’il en soit, le diagramme graphique d’eJames est meilleur.

Voici mon schéma, légèrement moins élégant que le vôtre: -):

               +-------------------+
               |                   |
               |     +----         |
Current[1]-----+------\   \        |
                       |NOR|o--+   |
Current[2-k]---+------/   /    |   |
               |     +----     |   |
               |              +\   /+
               |              | \_/ |
             +---+            |  OR |
              \ /Buffer        \   /
               +                ---
               |                 |
             +---+             +---+
             |2-k|             | 1 |    <- These signals feed 
             +---+             +---+       into your AND gates.

scroll top