Debes pensar en el hardware.
Cuando escribe un < = b/c, está diciendo a la herramienta de síntesis "Quiero un divisor que pueda proporcionar un resultado en cada ciclo de reloj y no tenga registros intermedios de pipline".
Si resuelve el circuito lógico requerido para crearlo, es muy complejo, especialmente para conteos de bits más altos. En general, los FPGA no tendrán bloques de hardware especializados para la división, por lo que deberían implementarse a partir de recursos de lógica genérica. Es probable que sea a la vez grande (mucho luts) y lenta (fmax baja).
Algunos sintetizadores pueden implementarlo de todos modos (a partir de una búsqueda rápida parece que Quartus lo hará), otros no se molestarán porque no creen que sea muy útil en la práctica.
Si se divide por una constante y puede vivir con un resultado aproximado, entonces puede hacer trucos con multiplicadores. Tome el recíproco de lo que quería dividir, multiplíquelo por una potencia de dos y redondee al número entero más cercano.
Luego en su verilog puede implementar su división aproximada por multiplicación (que no es demasiado cara en FPGAS moderno) seguida de desplazamiento (el desplazamiento por un número fijo de bits es esencialmente gratuito en hardware). Asegúrese de permitir suficientes bits para el resultado intermedio.
Si necesita una respuesta exacta o si necesita dividir por algo que no es una constante predefinida, tendrá que decidir qué tipo de divisor desea. Si su rendimiento es bajo, entonces puede usar un enfoque basado en la máquina de estado que hace una división cada n ciclos de reloj. Si su producción es alta y puede permitirse el área del dispositivo, entonces puede ser más apropiado un enfoque en línea que haga una división por ciclo de reloj (pero requiere múltiples ciclos para que el resultado fluya).
A menudo, los vendedores de herramientas proporcionarán bloques prefabricados (altera les llama megafunciones) para este tipo de cosas. La ventaja de esto es que el proveedor de la herramienta probablemente los habrá optimizado cuidadosamente para el dispositivo. La desventaja es que pueden traer bloqueo de proveedor, si desea cambiarse a un proveedor de dispositivo diferente, lo más probable es que tenga que cambiar el bloque y el bloque con el que lo intercambie puede tener diferentes características.
Para un RTL eficiente si el denominador es fijo, solo use 1/denominador, en lugar de a/3 use un * 0.33. para a/2 use a >> 1. La longitud de palabra del punto fijo determinará la precisión de los coeficientes y las respuestas. – Morgan
Las herramientas de síntesis son bastante buenas en estos días y, a menudo, el múltiplo de un solo coeficiente será tan pequeño como una operación artesanal. En igualdad de condiciones, elegiría la versión más fácil de leer, para una mejor calidad de código. – Morgan