problem is that the process sensitivity is only on a and b. when a,b changes one time, only C1 changes but temp is loaded by last value of temp that is zero. and also y gives temp last value that is zero.
I suggest you one of these:
1) use a clock or
2) add other signals to process sensitivity list.
like :
Code:
process(a,b,a1,b1,c1,temp,y)
3) Do not use process. like this
Code:
begin
a1<= conv_integer(a);
b1<= conv_integer(b);
c1<= a1 mod b1;
temp <= conv_std_logic_vector(c1,16);
y<= temp;