Pregunta

Publiqué este diagrama lógico digital como responda a otra pregunta de stackoverflow . Describe un sistema lógico que se codificará en Verilog o VHDL y finalmente se implementará en un FPGA.

alt text http://img145.imageshack.us/img145/5125/bitshifterlogicdiagramkn7 .jpg

Los cuadros numerados en el diagrama representan bits en un campo. Cada campo tiene K bits, y los bits para actual y máscara serán proporcionados por un sistema informático (utilizando un registro bloqueado o equivalente). Los bits en siguiente se volverán a leer en el mismo sistema informático.

La solución que publiqué funciona siempre y cuando haya al menos un bit establecido en el campo máscara , y haya exactamente un bit establecido en el campo actual . La idea es que el campo de bits siguiente se convierta en el campo de bits actual después de que el sistema informático haya realizado alguna tarea (una operación de programación, en la pregunta original).

Entonces, mi pregunta es esta: ¿Cómo modificaría este sistema para que maneje adecuadamente el caso especial en el que el campo de bits actual es todo cero (sin bits establecidos)? Tal como está, si todos los bits están en actual son cero, la salida también será cero, sin importar los bits en máscara .

Idealmente, si actual es todo ceros, el bit más bajo establecido en máscara debería establecerse en siguiente . El sistema también debería seguir siendo escalable a cualquier número de bits (K) sin tener que agregar exponencialmente más puertas lógicas. El espíritu de la pregunta original era encontrar una solución que fuera fácil de implementar para cualquier número de bits.

Consulte también: esta pregunta de stackoverflow

¿Fue útil?

Solución

Para mí, le diría al usuario de la FPGA que deben tener uno de los bits establecidos en 1 en la entrada.

Sin embargo, si esa no es su solución preferida, lo que está mal con la idea de prealimentar todas las entradas actuales inicialmente en una gran puerta NOR (de modo que la salida sea verdadera solo cuando todas las entradas sean falsas). Todas las líneas actuales también continúan hasta sus compuertas AND con la excepción de que Current [1] tiene OR con la salida de nuestra compuerta NOR antes de ingresar a su compuerta AND

De esa forma, la Corriente [1] sería verdadera al ingresar a la puerta AND, si todas las Corrientes son falsas.

Tenga en cuenta que entiendo el álgebra booleana, pero nunca he trabajado en hardware en bruto. Supongo que necesitará almacenar todas las señales de entrada en las puertas AND para garantizar la sincronización correcta, pero sospecho que sabrá que mejor que yo

El siguiente diagrama se deja en caso de que SO corrija su código / prebloques: la última actualización de SO parece haberlos rellenado (dejándolos proporcionales, no de ancho fijo, fuente). De todos modos, el diagrama gráfico de eJames es mejor.

Aquí está mi diagrama, un poco menos elegante que el tuyo :-):

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top