Right, there are going to be many problems here:
1. your "My_signed_multiplier" delay is 2 clocks. So using in1 directly to each multiplier stage is going to mean x3 is going to be x2 multiplied by the value of in1 2 clocks after the value of in1 to create x2. So you need to create pipelined versions of the input to allign it properly.
2. You cannot clear x2-7 and xN_d in the other process - they are assigned from the components. This will cause multiple driver errors
3. You've got the magnitude problem I mentioned in my previous post when doing the sum. What you're doing is like this:
lets imagin we have X^3 + X^2 + X + 7, and say X is 25. THe answer should be 16282.
SO, according to your code:
X^3 = 15625, lets lose the 2 LSBs (as we're doing 2 mults), we get 156.
X^2 = 625, lets lose the LSB, we get 62
so 156 + 62 + 25 + 7 = 250. Nothing like the actual answer, even if we dropped the 2 LSBs from the correct answer.
You need to pay attention to bit allignment when you do the multiplies and adds. Otherwise you end up adding values together that are orders of magnitude apart.
4. Other coding stype point: Please use named association in entity instantiation rather than positional
(plus if you want to, ditch the component declarations all together and go with direct instantiation):
eg:
my_ent_inst : entity work.my_ent
generic map (
some_generic => 1,
--etc
)
port map (
portA => input1,
portB => input2,
--etc
)
It is less prone to the annoying errors you get with positional.
(And for direct instantiation, the compiler checks the entity matches the instantiation, rather than the component declaration, so you get an instant error if there is a missmatch, rather than waiting for the error to pop out during elaboration which can be several minutes later).