Veréis... tengo un lio bastante gordo con un problema de diseño de sistemas digitales.
Estoy usando un SR Latch, que tiene 2 entradas y 1 salida. Las entradas son S (set) y R (reset). La salida es Q.
Según la ayuda me dice lo siguiente:
------------------------------------------------------------
------------------------------------------------------------
Quad /SR Latch
Default Signal Levels: GND--all input pins
AHDL Function Prototype (port name and order also apply to Verilog HDL):
FUNCTION 74279 (s11n, s12n, r1n, s2n, r2n, s31n, s32n, r3n, s4n, r4n)
RETURNS (q[4..1]);
Inputs | Output
SN* RN | Q
H H | Qo
L H | H
H L | L
L L | H**
* For latches with double S inputs:
H = both SN inputs high.
L = one or both SN inputs low.
** This configuration is nonstable; that is, it may not persist when the SN and RN inputs return to their inactive (high) level.
------------------------------------------------------------
------------------------------------------------------------
Inicialmente tengo 5 bits de entrada:
- 4 para codificar un número de 4 bits, que iran a S
- 1 para permitir que todo funcione si se da una condición, que ira a R
Para aclarar un poco:
Mirando este Latch en concretro, vemos que tiene 6 bits para el set, y otros 4 bits para el reset. Entonces lo que hago para el set es lo siguiente:
- El bit 1 de entrada lo meto tanto por s11n como por s12n
- El bit 2 de entrada lo meto directa por S2n
- El bit 3 de entrada lo meto tanto por s31n como por 32n
- El bit 4 de entrada lo meto directa por s4n
Mientras que para el reset meto el bit que tengo por r1n, r2n, r3n y r4n por igual.
Bien pues, una parte de lo que yo quiero es que si le meto un número de 4 bits por el set (S), me lo saque por la salida (Q) si se da una condición concreta (reset (R) =0).
Esto lo consigo (me faltaría negar las salidas Q), y me da el siguiente cronograma:
Aqui se puede ver q si le meto un 1011, me sale un 1011 (ojo q aun está sin negar y realmente sale un 0100). Si justo después le meto un 1111, me sale un 1111, etc....
Como veis todo esto lo hago en modo funcional (sin tener en cuenta retrasos)
El problema es que quiero que si por la entrada S le meto un 1111, en la salida Q me salga el valor que tenía antes.
En el siguiente cronograma se ve lo q quiero q salga (rectficando en rojo los resultados del cronograma anterior):
Como veis, le meto un 1011 y me sale un 1011. Acto seguido le meto un 1111 y quiero q me salga un 1011. Luego le meto un 1101 y me sale un 1101. Por último si le meto un 1111 quiero q me salga un 1101.
¿Como puedo conseguir esto?
Pensando, creo q mi error puede estar en alguno (o varios) de estos puntos:
- En duplicar la entrada 1 y 3 del set (a s11n,s12n y s31n,s32n)
- En meter tan a saco el bit de reset por las 4 entradas de reset del latch.
- Quizás necesitaría alguna puerta o algo para "capar" desde fuera la señal si viene un 1111 por el set.
He hecho mil pruebas distintas y no consigo nada. Creo que algo se me escapa...
Por cierto, uso el software Quartus II 5.1 sp1 de Altera
Enga, un saludo!