What is the correct way to implement left shift operations using multipliers?
If your input shift is 4 bits wide, you need 16 LUTs for the 16 inputs of the multiplier, and generate 00001, 00010, 00100 ... 

A&lt;=INPUT;
OUTPUT &lt;= A  * B;
B(0)&lt;='1' WHEN SHIFT="0000" ELSE '0';
B(1)&lt;='1' WHEN SHIFT="0001" ELSE '0';
B(2)&lt;='1' WHEN SHIFT="0010" ELSE '0';
*etc...*


With "free" multipliers, it can be smaller than a barrel shifter.

Usually barrel shifters are made with cascaded multiplexers. 
Something like that :

X0 &lt;= INPUT &amp; '0' WHEN SHIFT(0)='1' ELSE '0' &amp; INPUT;
X1 &lt;= X0 &amp; "00" WHEN SHIFT(1)='1' ELSE "00" &amp; X0;
X2 &lt;= X1 &amp; "0000" WHEN SHIFT(2)='1' ELSE "0000" &amp; X1;
OUTPUT &lt;= X2 &amp; "00000000" WHEN SHIFT(3)='1' ELSE "00000000" &amp; X2;


You can also use VHDL standard libraries and let the synthesiser decide which implementation is the best :

OUTPUT &lt;= ieee.numeric_std.shift_left(INPUT,to_integer(SHIFT));