Lógica para disminuir en uno

2

Estoy buscando alguna manera de usar la lógica discreta (TTL) para disminuir un valor de 8 bits en uno.

Básicamente, quiero presentarlo con un bus de 8 bits con un número binario, y hacer que dé una salida de la entrada menos uno en su salida:

por ejemplo:

...I3 I2 I1 I0 | ...Q3 Q2 Q1 Q0
   0  0  0  0  |    1  1  1  1
   0  0  0  1  |    0  0  0  0
   0  0  1  0  |    0  0  0  1
   0  0  1  1  |    0  0  1  0
....
   1  1  1  1  |    1  1  1  0

He estado buscando en Google y puse un espacio en blanco para un chip que puede hacerlo, y he estado atormentando mi cerebro de la mejor manera de hacerlo utilizando las puertas normales.

¿Alguien sabe de un chip para esto, o tiene alguna idea sobre cómo podría construirlo a partir de puertas discretas?

    
pregunta Majenko

4 respuestas

11

¿Has considerado sumadores? Puedes restar con un sumador.

Solo necesita agregar -1 al valor de entrada. Un par de 7483 sumadores completos de 4 bits debe manejar su entrada de 8 bits. Aplique la entrada X a las entradas 'A', y aplique la representación binaria de -1 a las entradas 'B'. Afortunadamente, la representación complementaria de 2 de -1 es todas unas; esto significa que si simplemente vincula las entradas 'B' todas altas, habrá terminado. Lo que sale debería ser X-1.

    
respondido por el JustJeff
3

No es imposible hacerlo utilizando puertas discretas , pero tampoco es trivial. Siempre puedes hacer trampa y extender en el esquema del 74HC83 :-)

Otra solución es utilizar un CPLD . Necesitará saber algo de HDL (lenguaje de descripción de hardware), como VHDL. En VHDL decrementar es algo como

  

salida = entrada - 1

y si lo desea, puede definir la entrada y la salida como valores de 32 bits, o incluso de 128 bits. El sintetizador VHDL lo traducirá a la lógica correcta.

Otra forma de hacerlo es mediante una EEPROM de búsqueda paralela (o EPROM, lo que sea). Solo necesita una parte de 256 bytes, así que solo cualquier dispositivo existente funcionará. Rellene los 256 bytes con una tabla de valores de 8 bits, comenzando con -1 (0b11111111), luego 0, 1 y así sucesivamente. Si proporciona un valor de 8 bits a las entradas de dirección, obtiene ese valor: 1 en las salidas de datos.

    
respondido por el stevenvh
3

¿Lo harán 255 IDs? Podría implementar una secuencia de 255 pasos como un registro de desplazamiento de retroalimentación lineal utilizando solo el cableado y un XOR IC como 7486.

Considere que su bus de 8 hilos es el estado actual del LFSR. Desplace cada cable individual en un paso y produzca la nueva broca utilizando las puertas XOR o XNOR para producir el bus de salida para su próximo módulo. Cada módulo tiene un número diferente en la secuencia.

I.e .:

Taps:   * *
ID1:  0 0 1
       \ \   0^1=1
ID2:  1 0 0
       \ \   0^0=0
ID3:  0 1 0
       \ \   1^0=1
ID4:  1 0 1
       \ \   0^1=1
ID5:  1 1 0
       \ \   1^0=1
ID6:  1 1 1
       \ \   1^1=0
ID7:  0 1 1

Las barras invertidas representan cables simples, y cada ID es generada por un nuevo módulo.

Un enfoque completamente diferente es equipar cada módulo con un simple contador y un solo registro de 1 bit. Conecte la salida del registro tanto a la habilitación para el contador como a la entrada de registro del siguiente módulo. El reloj será común a los registros y contadores. Luego borre todos los registros y contadores, y comience a cronometrar en el estado opuesto a través de los registros; a medida que cambia cada registro, los contadores se detendrán (o comenzarán), dando una dirección única a cada módulo. Esto solo requiere tres cables y tantos tics de reloj como módulos.

No sé si alguno de estos se ajusta a tu problema; ¿Para qué estás usando estas ID?

    
respondido por el Yann Vernier
0

Podrías encadenar dos 74LS191 o '193 juntos. Utilice la entrada de reloj del "contador descendente".

O un solo 74LS469 hará lo que quieras, si puedes encontrar uno.

    
respondido por el markrages

Lea otras preguntas en las etiquetas