Problema al simular un contador de 12 bits utilizando contadores 3x 4bit 74163

3

He conectado un circuito que incluye tres contadores que son el IC 74163. Este IC específico es un contador de 4 bits. Quiero hacer un contador más grande que pueda contar 752 pasos con una frecuencia de entrada de 20 MHz. El hecho es que mi contador no funciona en absoluto y me gustaría saber en qué me equivoco. ¿Hay algo que no veo? En este caso, el valor predeterminado es 4095 - 1 - 752 (pasos) = 110100001110. Desafortunadamente, el sistema no cuenta correctamente y estoy seguro de que mi diseño tiene algún problema. ¿Podría alguien darme consejos?

La señal de entrada es de 26.6 kHz y la frecuencia del sistema es de 20 MHz. También la razón para hacer algo así es porque estoy tratando de usar un PLL externo en cooperación con mi diseño de FPGA y el circuito a continuación se usa para hacer la división que se necesita fout = N * fin y, en teoría, quiero hacer una división de 752 por lo que necesito 752 pasos. El sistema no funciona bien pero con otro valor preestablecido funcionó. A pesar de que obtengo los 20 MHz que necesito digitalmente, quiero entender completamente por qué el contador que he diseñado no funciona correctamente.

El motivo por el cual no obtengo un contador más grande es que tengo que simular el sistema utilizando partes disponibles de la biblioteca de software de mi FPGA. ¿Existe la posibilidad de desbordamiento o algo así, que no puedo ver?

    
pregunta George.K

2 respuestas

2

Doh! Tiempo de facepalm. Me perdí por completo el hecho de que su circuito es un FPGA, por lo que TODOS o mi análisis de sincronización fueron incorrectos. Bien ok. Rasca el tiempo. Lo que queda es correcto, por lo que aquí está la versión nueva, mejorada y tal vez al punto.

La respuesta más simple es que esto no va a funcionar como piensas. El primer problema es que tu preset está equivocado. En lugar de calcular 4095 - 1 - 752, debería haber calculado 4095 + 1 - 752. Tuvo la idea correcta (reconociendo esencialmente que 0 es un estado), pero tiene el signo incorrecto. Es decir, estabas tratando de calcular 4095 - (752 - 1).

Otro problema es que está utilizando el último arrastre de rizado para restablecer sus contadores. Esto está mal en 2 cargos. Primero, lo que quieres hacer es cargar los ajustes preestablecidos que calculaste. En segundo lugar, el contador se reiniciará de todos modos, ya que la siguiente cuenta después de FFF es 000. La forma más elegante de cargar su preset es cambiar su preset a 1000 1000 1011, y usar la salida de control de calidad para impulsar sus pines preestablecidos. Esencialmente, usted está prefijando su contador a una cuenta más que antes, y luego deja que la transferencia de FFF a 000 proporcione la señal baja activa que necesita para preajustar los contadores. Esto elimina el inversor que usaste.

En ausencia de actividad en las líneas de carga, lo que sucederá con este circuito es que producirá en fase_tres un pulso de 50 nseg a una frecuencia de 4.88 KHz (20 MHz / 4096). Parece que este no es el caso, ya que dice que está obteniendo buenos resultados para una precarga diferente, parece claro. Si no está enviando pulsos en la línea de precarga, no tengo ni idea de por qué la configuración de precarga haría una diferencia.

Además, tenga en cuenta que los RCO no están limpios. Mostrarán picos en cuentas intermedias. Esto es cierto para la lógica discreta y, en algunos aspectos, aún más para la lógica FPGA.

Finalmente, una nota de precaución, si va a usar una precarga externa como se muestra, ocasionalmente obtendrá resultados extraños. Esto se debe a que el preajuste se libera demasiado cerca del borde ascendente del reloj, por lo que algunos contadores responderán (de manera ocasional) de una manera flaca. El término para esto es metastabilidad, y si vas a sincronizar cualquier tipo de lógica sincronizada con eventos externos, debes estudiar un poco.

    
respondido por el WhatRoughBeast
0

Dado que los contadores desean estar PREAJUSTADOS a d0fH antes del inicio de un recuento, sus BORRADORES deben estar todos cableados en alto y no invocados por 1111 del MSD hexadecimal.

Además, dado que el recuento comienza en 3343 y finaliza 752 relojes más tarde con todos los contadores en 1111, es cuando todos los RCO se calientan, por lo que deben NANDarse y usarse para inhibir el primer contador tirando ENT y ENP bajo , que detendrá todos los contadores hasta que sus CARGAS se agoten y luego se les permita volver a subir, iniciando un nuevo ciclo

Esto parece funcionar:

    
respondido por el EM Fields

Lea otras preguntas en las etiquetas