Reducing absolute value of signed number in VHDL
The reason your unsigned() cast doesn't work is because the result takes the exact bits in the input and just 'calls it unsigned'.  ie, 0xFFFC signed is -4, but when cast to unsigned, it's 65532.

Instead, since your incoming signal is always 16 bit signed, just check to see if it is negative (as simple as checking the leading bit).  Then, instead of casting to unsigned, negate it (which will have the desired effect) and then multiply by your scale factor, negating again afterwards.  I can't think at the moment how to do this in a single step, but this should work for you if you can spare two extra multiplies.