He leído (y me han dicho) varias veces que para un registro de desplazamiento, el reloj debería funcionar de manera inversa a los datos (por ejemplo, enlace ).
Pregunta principal: ¿Esto también es cierto para los contadores de anillo (o LSFR)?
Estoy construyendo un bloque como este, donde la salida se conecta nuevamente a la entrada ("contador de anillo"):
CadacuadradoconsisteenunflipflopDyunMUX2-1queinicializaelregistrodesdeDcuandoLOADesalto.Esteessolounpequeñoejemplo,enrealidadestaráentre20y30registros.
Ahoraestoyenfrentandoproblemasinesperadosquecreoquesedebenaviolacionesdetiempo.Resolvíunproblemaalinicializarelregistrocon"11000 ... 1". En el primer ciclo, todos los datos son consistentes. Sin embargo, en el segundo ciclo, el contenido es "01100 .... 0" en lugar de "111000 ... 0". El reloj del último registro es el más rápido, por lo que primero cambia de 1 a cero (que es la salida y también la entrada al primer registro). Sin embargo, el reloj del primer registro está muy retrasado y, por lo tanto, almacena el nuevo valor 0 en lugar del antiguo, 1.
Entonces, dudo que esta regla se aplique a los contadores de anillo / LFSR. Si este es el caso, ¿cuál es la forma correcta de implementar un contador de timbre para minimizar los problemas de violación de tiempo de espera?