Si los bitshifter y el sumador ya están provistos para usted, parece que todo lo que le queda por hacer es conectarlos juntos. Construya un módulo que dirija las entradas apropiadas dada una señal de control. Si tiene seis operaciones posibles, necesitará al menos tres bits para una señal de control, ¿verdad? Es posible que desee elegir las distintas operaciones para tener un bit similar en común, y puede usar ese bit para mezclar las salidas de cada bloque de componentes a la salida del bloque que está creando. Usaré un pseudo código porque, primero, esta es tu tarea y, segundo, no he escrito VHDL en años.
case control_signal is
when 1 => -- Control=1 means add inputs
adder_input_A <= top_level_input_A; -- Move inputs of top lever to the adder
adder_input_B <= top_level_input_B;
when 2 => -- Control=2 means shift the bits left
bit_shift_input <= top_level_input_A; -- Move input to bitshift block
bit_shift_value <= top_level_shift; -- This one can more likely be always connected
when 3 =>
do another one, like shift right
when others =>
null;
end case;
Entonces, básicamente estás creando un mux que cambia las entradas dependiendo de la operación que se está realizando. Obviamente, no tengo idea de cómo se ven sus bloques actuales y cómo se implementan, pero creo que el concepto general todavía debería aplicarse.