VHDL: ¿Cómo reducir las dependencias de la señal y optimizar la velocidad?

2

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?

    

1 respuesta

4

En general, la respuesta habitual a este tipo de problema es la canalización. Podría considerar agregar registros de tubería inmediatamente después de los comparadores de 10 bits, antes de la lógica que los combina en la señal de habilitación para la siguiente etapa. Para mantener la señal de habilitación resultante alineada con los datos correctos en la ruta de datos, es probable que también necesite un registro de canalización para los datos, también.

Pero sí, también puede utilizar la técnica descrita en la otra pregunta. Para su ejemplo específico de contador de 10 bits, en lugar de contar de 0 a 1003 y usar un comparador para identificar el estado 999 para desactivar la señal de habilitación, puede convertirlo en un contador de 11 bits que cuente de -1000 a 3. El MSB de este contador es su señal de habilitación, y cuando el recuento llega a 3 [1] , vuelve a cargar el contador con -1000 ... y también carga un contador auxiliar de cuenta regresiva de 9 bits con el valor 249. Cada vez que este contador auxiliar llega a -1 (conjunto de MSB) es el inicio de otra subtrama (además de la que comienza al principio del fotograma principal).

[1] Tenga en cuenta que detectar "3" es una función de solo 3 bits: el MSB y los dos LSB, no una función de 11 bits.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas