Hi Mesbah,
you are causing fatal distortion to your nice sine waves by offsetting the negative halves up as this implies high frequencies due to sudden changes. Remember time domain and freq domain are related: sudden changes of amplitude or phase in time domain imply high frequencies, and high freq imply sudden changes in time domain...
your ifft expects signed input, so I am told.
The vhdl people allow you
+ representation. std_logic is read according to the way you decide(or ifft decides). If you want to store your sine data in lut then use mif and it accepts signed values. if you want to store 64 data on wires(as constants) then and to avoid the hassle of conversions use type "signed" then convert as required.
Here is my adjustment of your code:
clear;
N = 64;
Fs = 64;
INVERSE = 0;
y = round((2^15-1)*sin(2*pi*5*[0:63]/Fs));
Matlab_fft = fft(y);
%[Y, exp_out] = fft_1_model(y,N,INVERSE);
%Altera_fft = Y.*2.^(-exp_out);
power_fft1 = abs(Matlab_fft);
%power_fft2 = abs(Altera_fft);
plot(power_fft1);hold
%plot(power_fft2,'r')
*************
if for any other reason you want to get rid of negative sine data then offset all values up, you will then get your frequency and some dc:
y2 = y + abs(min(y));
figure;hold
plot(y);
plot(y2,'r')