No ha mencionado la frecuencia de reloj ni el rendimiento, pero estos son los determinantes más críticos del método de uso correcto, junto con el uso de recursos.
No hay una sola respuesta; por lo general, exploraría diferentes compromisos y seleccionaría el mejor ajuste entre ellos.
Por lo general, si comienza con una solución puramente combinacional, terminará con un circuito bastante grande, que opera de manera bastante lenta, lo que proporciona una salida en un solo ciclo de reloj con un período de tiempo bastante largo. La ruta combinacional más larga (normalmente la cadena de puertas más larga) determina la velocidad del reloj.
Normalmente, agregaría registros a sus entradas y / o salidas, para sincronizar todas las señales entrantes y salientes a un reloj común (evitando problemas de condiciones de carrera y riesgos de tiempo)
Ahora si cumple con sus objetivos de tamaño y velocidad: trabajo hecho.
Si no es así, explore las ventajas y desventajas para mejorar los aspectos que fallan.
Reducir el uso de recursos
Si el uso del recurso es demasiado alto, identifique suboperaciones repetitivas y serialícelas, por ejemplo. agregando un bit a la vez en un solo sumador de bits. Ahora necesita n ciclos de reloj (más algunos gastos generales) para lograr un resultado de n bits. Sin embargo, el cálculo no es n veces más lento. En la medida en que haya acortado la ruta de combinación, puede aumentar la velocidad del reloj para recuperar parte del tiempo perdido.
La lógica combinacional ocupa 1 / n del área. Sin embargo, debe transmitir un bit por ciclo a través de él, es decir, almacenar sus datos en registros de desplazamiento y desplazar un bit a un tiempo fuera de ellos. Esto agrega recursos.
Sin embargo, hágalo bien, y los resultados intermedios solo necesitarán un poco de almacenamiento, ya que se transmiten a otros elementos serie. Los registros de entrada y salida fueron recomendados de todos modos; pueden ser registros de desplazamiento con capacidad de carga paralela, lo que agrega muy poco al tamaño del diseño.
Esta puede ser la implementación más pequeña de todas.
Se pueden encontrar buenos ejemplos de esta arquitectura en las arquitecturas de válvulas (tubos de vacío) de aproximadamente 1950, donde todas las puertas Era grande, hambriento de poder y caro. Es completamente posible recrear diseños similares en FPGA y son absurdamente pequeños por su rendimiento.
Aumentar el rendimiento
Si el diseño es demasiado lento, generalmente es posible romper las rutas combinacionales insertando registros de tuberías. Esto agrega área en forma de registros adicionales, pero (al acortar la longitud de la ruta combinatoria) le permite aumentar la velocidad del reloj.
Agregue (por ejemplo) tres registros de canalización, dividiendo la ruta en 4 rutas iguales, y puede aumentar la velocidad del reloj en 4. Cualquier resultado particular tardará al menos tanto tiempo en generarse, pero hay 4 resultados "en el tubería "se calcula en paralelo - por la misma cantidad de lógica combinacional! Un ejemplo clásico de este enfoque es el Pentium 4
En algunas arquitecturas FPGA, obtiene un registro por grupo de puertas "gratis", por lo que si la versión combinada usa muchas puertas y no registros, la versión canalizada puede ser (en este ejemplo) 4 * tan rápida para no área adicional.
Tenga en cuenta que si tiene que canalizar un brazo de una declaración "Si" para el rendimiento, tendría que agregar un registro de tubería al otro brazo, para "equilibrar" la tubería (obtener resultados en el mismo ciclo de reloj) , independientemente de la condición "si".
Esta es solo la introducción más breve a las opciones a las que te enfrentas, pero con suerte te dará algunas ideas.