Necesito que se realice una operación de desplazamiento a la izquierda en VHDL. La entrada es de 24 bits y la cantidad de desplazamiento es de 16 bits como máximo.
Las operaciones de desplazamiento a la izquierda de n son sinónimos de multiplicación con 2 ^ n, lo que quiere decir que:
x < < n = x * 2 ^ n.
Normalmente, la implementación de una operación de desplazamiento a la izquierda en VHDL con una cantidad de desplazamiento variable implementará un multiplexor, por ejemplo, la implementación de un desplazador de 16 bits en una entrada de 24 bits creará un multiplexor de 16 a 1. La cantidad de desplazamiento n seleccionará una de las 16 salidas posibles de 24 bits. Este enfoque puede crear multiplexores masivos que luego limitarán Fmax en el diseño.
He encontrado que la alternativa a esto es usar un multiplicador para la operación de cambio. El uso de un multiplicador duro en lugar de un mux creado a partir de recursos lógicos FPGA llevará a una mejor Fmax en el diseño. En este caso, la entrada de 24 bits será un operando y un 2 ^ n donde n tiene un valor máximo de 16 será el otro operando. Aquí también, n es una entrada para controlar la cantidad de cambio.
Tengo una confusión aquí; al usar un multiplicador tendremos que generar la cantidad 2 ^ n a partir de la cantidad de turno n. Esto requerirá una tabla de consulta. En este caso, se convertirá en un multiplicador de 16 a 1 donde n selecciona la salida mux de 16 bits. Ya que en este caso también terminamos con un multiplexor grande, ¿no se anula el propósito de usar un multiplicador?