I do not see any reason at all to use a loop case construction with
conditional behaviour like this since there are no divergent cases but
all of the statements will have to be synthesized to make the circiut
operating.
More over it was wrong to have any condional branches in pipelines
regarding the space axis. Conditional synthesis makes sence for those
applications only when pipeline lengths and micro cycles have to be
dynamically tuned (conditional time axis), which is rarely required.
Furthermore I would recommend not to use those *temp" naming since there
is nothing temporary about them- neither during synthesis nor during
operation but they are solid and ever ready calculation results: present
in any case.
The different "times" which are generated by such a pipeline construct
within a rising_edge part, should better be named like *_d1, *_d2 and
so on to clarify their time relation to each other. Structures invented
in later times in the pipeline should be named appropriately.
Taking into account that you apply all the incoming vectors
synchronously, Im afraid, your construct above might be wrong. "b" and
"c" for example will have to be applied at a later point of time in the
pipeline, so you will need copies of those values like this here:
b_d1 <= b
c_d1 <= c
c_d2 <= c_d1
and finally apply "b_d1" for the second, and "c_d2" for the final
multiplication.