Me pregunto cómo optimizar la comparación de un valor de contador amplio con pocos valores definidos. Tal vez sea más fácil si lo muestro en el ejemplo; digamos que hay un receptor que obtiene datos en un formato bien definido: 1004, los símbolos de 8 bits se agrupan en un cuadro. En cada ciclo CLK, aparece un símbolo de 8 bits en la entrada del receptor. Los últimos cuatro símbolos en el cuadro son el número de secuencia, que ayuda al receptor a encontrar los límites de los cuadros. Entonces, los datos útiles que deben enviarse al siguiente módulo son 1000 símbolos. Pero, estos símbolos también se agrupan en 4 subtítulos más pequeños, 250 símbolos cada uno. Los subtítulos se alinean con el límite del marco más grande: el primer símbolo del marco más grande también es el primer símbolo del primer subtrama. Me gustaría filtrar los símbolos de secuencia en un fotograma grande, enviar datos encapsulados al siguiente módulo y establecer una señal de salida adicional que muestre los inicios de los subtramas.
Mi primera idea fue construir una máquina de estado que mire dónde se encuentran los límites de los marcos grandes. Si detecta la secuencia de sincronización varias veces, pasa al estado de sincronización. Luego usa un contador de 10 bits que cuenta todos los símbolos. En los valores de contador 0, 250, 500, 750 serían los primeros símbolos de los subtramas (que puedo señalar al siguiente módulo mediante una señal de salida adicional, llámela StartOut), y en los valores de contador 1000-1003, el siguiente módulo debe desactivarse, para omitir secuencia de sincronización. Desafortunadamente, esta solución no es tan buena - las señales de salida Enable y StartOut son funciones de 10 bits. Hay cierta lógica (incluidos los comparadores de 10 bits) que ralentiza la velocidad máxima de las señales de salida. Se vuelve más limitado si aumenta el tamaño del marco grande y se necesita un contador de 16 bits.
Buscando StackExchange encontré esta pregunta: optimización de síntesis vhdl: contadores en statemachines . Se muestra una idea de cómo reducir la dependencia de la señal de salida y hacer que sea una función de solo una señal de 1 bit. Pero funciona más bien con contar a un valor. Aquí hay un problema de un contador y algunos valores que deben compararse con él.
¿Tiene alguna idea de cómo mejorar la velocidad en comparación con pocos valores constantes?