50 lines
1.4 KiB
Matlab
50 lines
1.4 KiB
Matlab
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% Author - Imants Pulkstenis
|
|
% Date - 29.03.2020
|
|
% Project name - PS04
|
|
% Module name - DDS (direct digital synthesis)
|
|
%
|
|
% Detailed module description:
|
|
% This file generates lock up table with SIN values
|
|
%
|
|
% Revision:
|
|
% A - initial design
|
|
% B -
|
|
% C -
|
|
%
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
word_lenght = 8;
|
|
table_size = 4; % 2^n
|
|
x = linspace(0, (2*pi - 2*pi/2^table_size) , 2^table_size);
|
|
sin_x = sin(x);
|
|
sin_x = round(sin_x * 2^word_lenght) / 2^word_lenght;
|
|
|
|
%% Print values in hex
|
|
hex = [];
|
|
for i=1:2^table_size
|
|
a = sfi(sin_x(i),word_lenght,word_lenght-2);
|
|
hex = [hex; a.bin];
|
|
end
|
|
hex,
|
|
|
|
fid = fopen('lookuptable.v', 'wt');
|
|
fprintf(fid, 'module lookuptable(\n');
|
|
fprintf(fid, '\tinput [%d :0] in,\n',word_lenght-1);
|
|
fprintf(fid, '\toutput reg [%d :0] out);\n',word_lenght-1);
|
|
|
|
fprintf(fid, 'reg [%d :0] out = %d''h0; \n', word_lenght-1,word_lenght);
|
|
fprintf(fid, 'always@* begin\n');
|
|
fprintf(fid, 'case (in)\n');
|
|
|
|
for i=1:length(hex)
|
|
temp = hex(i,1:word_lenght);
|
|
fprintf(fid, '\t%d''d%d : out <= %d''b%s;\n',word_lenght, i-1 ,word_lenght, hex(i,1:word_lenght) );
|
|
end
|
|
fprintf(fid, '\tdefault : out <= %d''b%s;\n ',word_lenght, hex(1,1:word_lenght) );
|
|
fprintf(fid, 'endcase\n');
|
|
fprintf(fid, 'end\n');
|
|
fprintf(fid, 'endmodule');
|
|
|
|
disp('Text files write done');disp(' ');
|
|
fclose(fid); |