OpenCores
URL https://opencores.org/ocsvn/yac/yac/trunk

Subversion Repositories yac

[/] [yac/] [trunk/] [c_octave/] [cordic_iterative_test.m] - Diff between revs 7 and 13

Show entire file | Details | Blame | View Log

Rev 7 Rev 13
Line 18... Line 18...
%%%%        and to generate stimulus data for RTL simulation.           %%%%
%%%%        and to generate stimulus data for RTL simulation.           %%%%
%%%%        This created data is used to ensure, that the C             %%%%
%%%%        This created data is used to ensure, that the C             %%%%
%%%%        implementation behaves the same than the VHDL               %%%%
%%%%        implementation behaves the same than the VHDL               %%%%
%%%%        implementation.                                             %%%%
%%%%        implementation.                                             %%%%
%%%%                                                                    %%%%
%%%%                                                                    %%%%
<<<<<<< HEAD
 
<<<<<<< HEAD
 
=======
 
>>>>>>> Updated C and RTL model as well as the documentation
 
%%%%        Three tests are implemented:                                %%%%
%%%%        Three tests are implemented:                                %%%%
%%%%          - Random test values                                      %%%%
%%%%          - Random test values                                      %%%%
%%%%          - Linear increasing values                                %%%%
%%%%          - Linear increasing values                                %%%%
%%%%          - Limit values                                            %%%%
%%%%          - Limit values                                            %%%%
%%%%                                                                    %%%%
%%%%                                                                    %%%%
%%%%                                                                    %%%%
%%%%                                                                    %%%%
%%%%        Please do  'mex cordic_iterative.c' to create               %%%%
%%%%        Please do  'mex cordic_iterative.c' to create               %%%%
%%%%        the cordic_iterative.mex.                                   %%%%
%%%%        the cordic_iterative.mex.                                   %%%%
<<<<<<< HEAD
 
=======
 
>>>>>>> initial commit
 
=======
 
>>>>>>> Updated C and RTL model as well as the documentation
 
%%%%                                                                    %%%%
%%%%                                                                    %%%%
%%%%%                                                                  %%%%%
%%%%%                                                                  %%%%%
%%%%                                                                    %%%%
%%%%                                                                    %%%%
%%%%  TODO                                                              %%%%
%%%%  TODO                                                              %%%%
<<<<<<< HEAD
 
<<<<<<< HEAD
 
%%%%        The linear test is not complete                             %%%%
%%%%        The linear test is not complete                             %%%%
=======
 
%%%%        Some documentation and function description                 %%%%
 
>>>>>>> initial commit
 
=======
 
%%%%        The linear test is not complete                             %%%%
 
>>>>>>> Updated C and RTL model as well as the documentation
 
%%%%                                                                    %%%%
%%%%                                                                    %%%%
%%%%                                                                    %%%%
%%%%                                                                    %%%%
%%%%                                                                    %%%%
%%%%                                                                    %%%%
%%%%                                                                    %%%%
%%%%                                                                    %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Line 74... Line 57...
%%%% You should have received a copy of the GNU Lesser General Public   %%%%
%%%% You should have received a copy of the GNU Lesser General Public   %%%%
%%%% License along with this library. If not, download it from          %%%%
%%%% License along with this library. If not, download it from          %%%%
%%%% http://www.gnu.org/licenses/lgpl                                   %%%%
%%%% http://www.gnu.org/licenses/lgpl                                   %%%%
%%%%                                                                    %%%%
%%%%                                                                    %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
<<<<<<< HEAD
 
<<<<<<< HEAD
 
function cordic_iterative_test( )
function cordic_iterative_test( )
 
 
 
 
 
 
=======
 
 
 
 
 
 
 
=======
 
>>>>>>> Updated C and RTL model as well as the documentation
 
function cordic_iterative_test( )
 
 
 
 
 
 
 
>>>>>>> initial commit
 
% global flags/values, they are static
% global flags/values, they are static
% through the whole script and defined below
% through the whole script and defined below
global C_FLAG_VEC_ROT C_FLAG_ATAN_3 C_MODE_CIRC C_MODE_LIN C_MODE_HYP
global C_FLAG_VEC_ROT C_FLAG_ATAN_3 C_MODE_CIRC C_MODE_LIN C_MODE_HYP
global XY_WIDTH ANGLEWIDTH GUARDBITS RM_GAIN
global XY_WIDTH ANGLEWIDTH GUARDBITS RM_GAIN
 
 
Line 105... Line 75...
tb_fid = fopen( TB_FILE, 'w' );
tb_fid = fopen( TB_FILE, 'w' );
 
 
% Number of tests, which are run
% Number of tests, which are run
N_TESTS    = 10000;
N_TESTS    = 10000;
 
 
<<<<<<< HEAD
 
% open test file
 
tb_fid = fopen( './tb_data.txt', 'w' );
 
<<<<<<< HEAD
 
<<<<<<< HEAD
 
%tb_fid = 0;
 
 
 
 
 
 
 
 
 
 
 
%
%
% run test, which uses random values
% run test, which uses random values
run_random_test( N_TESTS, tb_fid );
run_random_test( N_TESTS, tb_fid );
%
%
Line 172... Line 132...
                                            [ data_b, data_b, data_b], ...
                                            [ data_b, data_b, data_b], ...
                                              data_c, tb_fid );
                                              data_c, tb_fid );
[ ~, div_err, it_4 ]                = cdiv( data_a_div, data_b_div, tb_fid );
[ ~, div_err, it_4 ]                = cdiv( data_a_div, data_b_div, tb_fid );
[ ~, mul_err, it_5 ]                = cmul( data_a, data_b, tb_fid  );
[ ~, mul_err, it_5 ]                = cmul( data_a, data_b, tb_fid  );
 
 
print_result_info(    ...
 
    atan_err,   it_1, ...
 
    abs_err,    it_1, ...
 
    sin_err,    it_2, ...
 
    cos_err,    it_2, ...
 
    x_err,      it_3, ...
 
    y_err,      it_3, ...
 
    div_err,    it_4, ...
 
    mul_err,    it_5, ...
 
    0,  0, ...
 
    0,  0, ...
 
    0,  0, ...
 
    0,  0, ...
 
    'Limit Value Test' );
 
=======
 
=======
 
%tb_fid = 0;
 
 
 
>>>>>>> Updated C and RTL model as well as the documentation
 
 
 
 
 
 
 
=======
 
>>>>>>> Removed some bugs regarding pre-rotation and negative numbers in the wb wrapper
 
 
 
%
 
% run test, which uses random values
 
run_random_test( N_TESTS, tb_fid );
 
%
 
% run tests, which test limits
 
run_limit_test( tb_fid );
 
%
 
% run linear value test
 
run_linear_test( 1000, tb_fid );
 
 
 
% close file
 
if tb_fid > 0
 
    fclose( tb_fid );
 
end
 
 
 
end
 
 
 
 
 
 
 
 
 
function run_limit_test( tb_fid )
 
%RUN_LIMIT_TEST Test the range limit
 
%
 
% run_limit_test( fid )
 
%
 
% This function is used to generate a test pattern
 
% with values, which are at the range limit.
 
% This values are then processed by the fixed-point YAC
 
% implementation. All input and outputs are logged into
 
% a testbench pattern file.
 
%
 
% The argument fid is the file-descriptor of the testbench pattern
 
% file.
 
%
 
 
 
 
 
<<<<<<< HEAD
 
>>>>>>> initial commit
 
 
 
end
 
 
 
 
 
 
 
<<<<<<< HEAD
 
function run_linear_test( N_TESTS, tb_fid )
 
%RUN_LINEAR_TEST Generates a linear test pattern
 
%
 
% run_linear_test( N, fid )
 
%
 
% This function is used to generate linear increasing test
 
% values.
 
% These values are then processed by the fixed-point YAC
 
% implementation. All input and outputs are logged into
 
% a testbench pattern file. In addition, the result is plotted.
 
%
 
% NOTE: only the hyperbolic functions are processed at the moment.
 
% This function needs to be extended in future.
 
%
 
%
 
% The argument fid is the file-descriptor of the testbench pattern
 
% file. The argument N defines the number of values, which are processed.
 
%
 
%
 
 
 
data_a_h = ones( 1, N_TESTS );
 
data_b_h = linspace( -1, 1, N_TESTS ) * 0.78;
 
data_c_h = linspace( -1, 1, N_TESTS );
 
[ atanh_res, sqrt_res, atanh_err, sqrt_err, it_6 ] = catanh( data_a_h, data_b_h, tb_fid );
 
[ sinh_res, cosh_res, sinh_err, cosh_err, it_7 ]   = csinhcosh( data_c_h, tb_fid );
 
 
 
=======
 
data_a = [ 0 1 0 1 -1  0 -1  1 -1 ];
 
data_b = [ 0 0 1 1  0 -1 -1 -1  1 ];
 
 
 
data_c = [ 0 0 0 0  0  0  0  0  0 ...
 
           1 1 1 1  1  1  1  1  1 ...
 
           -1 -1 -1 -1 -1 -1 -1 -1 -1 ];
 
 
 
data_d = data_a * pi;
 
 
 
data_a_div = [ 0.5 ,1 -0.5, -1, -0.5, -1 ];
 
data_b_div = [ 1   ,1,  1,   1,   -1, -1 ];
 
 
 
[ ~, ~, atan_err, abs_err, it_1 ]   = ccart2pol( data_a, data_b, tb_fid );
 
[ ~, ~, sin_err,  cos_err, it_2 ]   = cpol2cart( data_d, data_b, tb_fid );
 
[ ~, ~, x_err, y_err, it_3 ]        = crot( [ data_a, data_a, data_a], ...
 
                                            [ data_b, data_b, data_b], ...
 
                                              data_c, tb_fid );
 
[ ~, div_err, it_4 ]                = cdiv( data_a_div, data_b_div, tb_fid );
 
[ ~, mul_err, it_5 ]                = cmul( data_a, data_b, tb_fid  );
 
 
 
print_result(    ...
print_result(    ...
    atan_err,   it_1, ...
    atan_err,   it_1, ...
    abs_err,    it_1, ...
    abs_err,    it_1, ...
    sin_err,    it_2, ...
    sin_err,    it_2, ...
    cos_err,    it_2, ...
    cos_err,    it_2, ...
Line 302... Line 146...
    0,  0, ...
    0,  0, ...
    0,  0, ...
    0,  0, ...
    0,  0, ...
    0,  0, ...
    0,  0, ...
    0,  0, ...
    'Limit Value Test' );
    'Limit Value Test' );
>>>>>>> Updated C and RTL model as well as the documentation
 
 
 
figure; plot( data_b_h, atanh_res ); title( 'atanh' );
 
figure; plot( data_b_h, atanh_err ); title( 'atanh-error' );
 
figure; plot( data_c_h, sinh_res, data_c_h, cosh_res ); title( 'sinh and cosh' );
 
figure; plot( data_c_h, sinh_err, data_c_h, cosh_err ); title( 'sinh and cosh errors' );
 
end
end
 
 
 
 
 
 
<<<<<<< HEAD
 
function run_random_test( N_TESTS, tb_fid )
 
%RUN_RANDOM_TEST Generates a random test pattern
 
%
 
% run_random_test( N, fid )
 
%
 
% This function is used to generate random test
 
% values (uniform distributed).
 
% These values are then processed by the fixed-point YAC
 
% implementation. All input and outputs are logged into
 
% a testbench pattern file.
 
=======
 
function run_linear_test( N_TESTS, tb_fid )
function run_linear_test( N_TESTS, tb_fid )
%RUN_LINEAR_TEST Generates a linear test pattern
%RUN_LINEAR_TEST Generates a linear test pattern
%
%
% run_linear_test( N, fid )
% run_linear_test( N, fid )
%
%
Line 337... Line 164...
% implementation. All input and outputs are logged into
% implementation. All input and outputs are logged into
% a testbench pattern file. In addition, the result is plotted.
% a testbench pattern file. In addition, the result is plotted.
%
%
% NOTE: only the hyperbolic functions are processed at the moment.
% NOTE: only the hyperbolic functions are processed at the moment.
% This function needs to be extended in future.
% This function needs to be extended in future.
>>>>>>> Updated C and RTL model as well as the documentation
 
%
%
%
%
% The argument fid is the file-descriptor of the testbench pattern
% The argument fid is the file-descriptor of the testbench pattern
% file. The argument N defines the number of values, which are processed.
% file. The argument N defines the number of values, which are processed.
%
%
%
%
<<<<<<< HEAD
 
data_a = -1 + 2 .* rand( 1, N_TESTS );
 
data_b = -1 + 2 .* rand( 1, N_TESTS );
 
data_c = -1 + 2 .* rand( 1, N_TESTS );
 
data_d = -pi + 2*pi .* rand( 1, N_TESTS );
 
=======
 
function run_random_test( N_TESTS, tb_fid )
 
=======
 
 
 
data_a_h = ones( 1, N_TESTS );
data_a_h = ones( 1, N_TESTS );
data_b_h = linspace( -1, 1, N_TESTS ) * 0.78;
data_b_h = linspace( -1, 1, N_TESTS ) * 0.78;
data_c_h = linspace( -1, 1, N_TESTS );
data_c_h = linspace( -1, 1, N_TESTS );
[ atanh_res, sqrt_res, atanh_err, sqrt_err, it_6 ] = catanh( data_a_h, data_b_h, tb_fid );
[ atanh_res, sqrt_res, atanh_err, sqrt_err, it_6 ] = catanh( data_a_h, data_b_h, tb_fid );
Line 369... Line 187...
 
 
 
 
end
end
 
 
 
 
>>>>>>> Updated C and RTL model as well as the documentation
 
 
 
function run_random_test( N_TESTS, tb_fid )
function run_random_test( N_TESTS, tb_fid )
%RUN_RANDOM_TEST Generates a random test pattern
%RUN_RANDOM_TEST Generates a random test pattern
%
%
% run_random_test( N, fid )
% run_random_test( N, fid )
Line 389... Line 206...
% file. The argument N defines the number of values, which are processed.
% file. The argument N defines the number of values, which are processed.
%
%
%
%
data_a = -1 + 2 .* rand( 1, N_TESTS );
data_a = -1 + 2 .* rand( 1, N_TESTS );
data_b = -1 + 2 .* rand( 1, N_TESTS );
data_b = -1 + 2 .* rand( 1, N_TESTS );
<<<<<<< HEAD
 
 
 
>>>>>>> initial commit
 
=======
 
data_c = -1 + 2 .* rand( 1, N_TESTS );
data_c = -1 + 2 .* rand( 1, N_TESTS );
data_d = -pi + 2*pi .* rand( 1, N_TESTS );
data_d = -pi + 2*pi .* rand( 1, N_TESTS );
>>>>>>> Updated C and RTL model as well as the documentation
 
% adapat data for division
% adapat data for division
data_a_div = data_a;
data_a_div = data_a;
data_b_div = data_b;
data_b_div = data_b;
swap_div   = ( data_b ./ data_a ) >= 2 | ( data_b ./ data_a ) < -2 ;
swap_div   = ( data_b ./ data_a ) >= 2 | ( data_b ./ data_a ) < -2 ;
data_a_div( swap_div ) = data_b( swap_div );
data_a_div( swap_div ) = data_b( swap_div );
data_b_div( swap_div ) = data_a( swap_div );
data_b_div( swap_div ) = data_a( swap_div );
 
 
data_a_h   = ones( size( data_a ) );
data_a_h   = ones( size( data_a ) );
<<<<<<< HEAD
 
<<<<<<< HEAD
 
data_b_h   = data_b .* 0.80694; %0.78;
data_b_h   = data_b .* 0.80694; %0.78;
=======
 
data_b_h   = data_b .* 0.78;
 
>>>>>>> initial commit
 
=======
 
data_b_h   = data_b .* 0.80694; %0.78;
 
>>>>>>> Updated C and RTL model as well as the documentation
 
 
 
 
 
 
 
[ ~, ~, atan_err, abs_err, it_1 ]   = ccart2pol( data_a, data_b, tb_fid );
[ ~, ~, atan_err, abs_err, it_1 ]   = ccart2pol( data_a, data_b, tb_fid );
<<<<<<< HEAD
 
<<<<<<< HEAD
 
=======
 
>>>>>>> Updated C and RTL model as well as the documentation
 
[ ~, ~, sin_err,  cos_err, it_2 ]   = cpol2cart( data_d, data_b, tb_fid );
[ ~, ~, sin_err,  cos_err, it_2 ]   = cpol2cart( data_d, data_b, tb_fid );
[ ~, ~, x_err, y_err, it_3 ]        = crot( data_a, data_b, data_c, tb_fid );
[ ~, ~, x_err, y_err, it_3 ]        = crot( data_a, data_b, data_c, tb_fid );
[ ~, div_err, it_4 ]                = cdiv( data_a_div, data_b_div, tb_fid );
[ ~, div_err, it_4 ]                = cdiv( data_a_div, data_b_div, tb_fid );
[ ~, mul_err, it_5 ]                = cmul( data_a, data_b, tb_fid  );
[ ~, mul_err, it_5 ]                = cmul( data_a, data_b, tb_fid  );
[ ~, ~, atanh_err, sqrt_err, it_6 ] = catanh( data_a_h, data_b_h, tb_fid );
[ ~, ~, atanh_err, sqrt_err, it_6 ] = catanh( data_a_h, data_b_h, tb_fid );
Line 482... Line 282...
    atanh_err,  atanh_it,   ...
    atanh_err,  atanh_it,   ...
    sqrt_err,   sqrt_it,    ...
    sqrt_err,   sqrt_it,    ...
    sinh_err,   sinh_it,    ...
    sinh_err,   sinh_it,    ...
    cosh_err,   cosh_it,    ...
    cosh_err,   cosh_it,    ...
    title )
    title )
<<<<<<< HEAD
 
 
 
fprintf( ' ___________________________________________________________________\n' );
fprintf( ' ___________________________________________________________________\n' );
fprintf( '                  %s\n', title);
fprintf( '                  %s\n', title);
fprintf( ' -----+-------------------+--------------------+-------------------\n'   );
fprintf( ' -----+-------------------+--------------------+-------------------\n'   );
fprintf( '      |     max error     |   mean error       |  max iterations  \n'   );
fprintf( '      |     max error     |   mean error       |  max iterations  \n'   );
Line 502... Line 301...
fprintf( ' sqrt | % .14f | % .14f  | %.5f \n', max( sqrt_err  ), mean( sqrt_err  ), max( sqrt_it   ) );
fprintf( ' sqrt | % .14f | % .14f  | %.5f \n', max( sqrt_err  ), mean( sqrt_err  ), max( sqrt_it   ) );
fprintf( ' sinh | % .14f | % .14f  | %.5f \n', max( sinh_err  ), mean( sinh_err  ), max( sinh_it   ) );
fprintf( ' sinh | % .14f | % .14f  | %.5f \n', max( sinh_err  ), mean( sinh_err  ), max( sinh_it   ) );
fprintf( ' cosh | % .14f | % .14f  | %.5f \n', max( cosh_err  ), mean( cosh_err  ), max( cosh_it   ) );
fprintf( ' cosh | % .14f | % .14f  | %.5f \n', max( cosh_err  ), mean( cosh_err  ), max( cosh_it   ) );
 
 
 
 
=======
 
[ ~, ~, sin_err,  cos_err, it_2 ]   = cpol2cart( data_a, data_b, tb_fid );
 
[ ~, div_err, it_3 ]                = cdiv( data_a_div, data_b_div, tb_fid );
 
[ ~, mul_err, it_4 ]                = cmul( data_a, data_b, tb_fid  );
 
[ ~, ~, atanh_err, sqrt_err, it_5 ] = catanh( data_a_h, data_b_h, tb_fid );
 
[ ~, ~, sinh_err, cosh_err, it_6 ]  = csinhcosh( data_a, tb_fid );
 
=======
 
>>>>>>> Updated C and RTL model as well as the documentation
 
 
 
fprintf( ' ___________________________________________________________________\n' );
 
fprintf( '                  %s\n', title);
 
fprintf( ' -----+-------------------+--------------------+-------------------\n'   );
 
fprintf( '      |     max error     |   mean error       |  max iterations  \n'   );
 
fprintf( ' atan | % .14f | % .14f  | %.5f \n', max( atan_err  ), mean( atan_err  ), max( atan_it   ) );
 
fprintf( ' abs  | % .14f | % .14f  | %.5f \n', max( abs_err   ), mean( abs_err   ), max( abs_it    ) );
 
fprintf( ' sin  | % .14f | % .14f  | %.5f \n', max( sin_err   ), mean( sin_err   ), max( sin_it    ) );
 
fprintf( ' cos  | % .14f | % .14f  | %.5f \n', max( cos_err   ), mean( cos_err   ), max( cos_it    ) );
 
fprintf( ' x    | % .14f | % .14f  | %.5f \n', max( x_err     ), mean( x_err     ), max( x_it      ) );
 
fprintf( ' y    | % .14f | % .14f  | %.5f \n', max( y_err     ), mean( y_err     ), max( y_it      ) );
 
fprintf( ' div  | % .14f | % .14f  | %.5f \n', max( div_err   ), mean( div_err   ), max( div_it    ) );
 
fprintf( ' mul  | % .14f | % .14f  | %.5f \n', max( mul_err   ), mean( mul_err   ), max( mul_it    ) );
 
fprintf( ' atanh| % .14f | % .14f  | %.5f \n', max( atanh_err ), mean( atanh_err ), max( atanh_it  ) );
 
fprintf( ' sqrt | % .14f | % .14f  | %.5f \n', max( sqrt_err  ), mean( sqrt_err  ), max( sqrt_it   ) );
 
fprintf( ' sinh | % .14f | % .14f  | %.5f \n', max( sinh_err  ), mean( sinh_err  ), max( sinh_it   ) );
 
fprintf( ' cosh | % .14f | % .14f  | %.5f \n', max( cosh_err  ), mean( cosh_err  ), max( cosh_it   ) );
 
 
 
end
 
>>>>>>> initial commit
 
 
 
 
 
end
end
 
 
 
 
 
 
Line 696... Line 466...
write_tb( fid, xi, yi, ai, rx, ry, rdiv, mode )
write_tb( fid, xi, yi, ai, rx, ry, rdiv, mode )
 
 
end
end
 
 
 
 
<<<<<<< HEAD
 
<<<<<<< HEAD
 
=======
 
>>>>>>> Updated C and RTL model as well as the documentation
 
function [x_res, y_res, x_err, y_err, it ] = crot( x, y, th, fid )
function [x_res, y_res, x_err, y_err, it ] = crot( x, y, th, fid )
%
%
% does a multiplication with exp( th * i )
% does a multiplication with exp( th * i )
% and therefore, a rotation of the complex input value x + yi where th
% and therefore, a rotation of the complex input value x + yi where th
% defines the rotation angle
% defines the rotation angle
Line 745... Line 511...
function [sin_res, cos_res, sin_err, cos_err, it ]= cpol2cart( th, r, fid )
function [sin_res, cos_res, sin_err, cos_err, it ]= cpol2cart( th, r, fid )
%
%
% does the Matlab equivalent pol2cart
% does the Matlab equivalent pol2cart
%
%
 
 
<<<<<<< HEAD
 
=======
 
 
 
 
 
 
 
function [sin_res, cos_res, sin_err, cos_err, it ]= cpol2cart( th, r, fid )
 
>>>>>>> initial commit
 
=======
 
>>>>>>> Updated C and RTL model as well as the documentation
 
global C_FLAG_VEC_ROT C_FLAG_ATAN_3 C_MODE_CIRC C_MODE_LIN C_MODE_HYP
global C_FLAG_VEC_ROT C_FLAG_ATAN_3 C_MODE_CIRC C_MODE_LIN C_MODE_HYP
global XY_WIDTH ANGLEWIDTH GUARDBITS RM_GAIN
global XY_WIDTH ANGLEWIDTH GUARDBITS RM_GAIN
 
 
xi = r .* (2^(XY_WIDTH-1)-1);
xi = r .* (2^(XY_WIDTH-1)-1);
yi = zeros( 1, length( th ) );
yi = zeros( 1, length( th ) );
ai = round( th .* (2^(ANGLEWIDTH-1)-1) );
ai = round( th .* (2^(ANGLEWIDTH-1)-1) );
 
 
<<<<<<< HEAD
 
<<<<<<< HEAD
 
mode = C_MODE_CIRC;
mode = C_MODE_CIRC;
 
 
=======
 
 
 
 
 
mode = C_MODE_CIRC;
 
 
 
 
 
% cordic version
 
>>>>>>> initial commit
 
=======
 
mode = C_MODE_CIRC;
 
 
 
>>>>>>> Updated C and RTL model as well as the documentation
 
[ rcos rsin ra, it ] = cordic_iterative( ...
[ rcos rsin ra, it ] = cordic_iterative( ...
                                  xi,          ...
                                  xi,          ...
                                  yi,          ...
                                  yi,          ...
                                  ai,          ...
                                  ai,          ...
                                  mode,        ...
                                  mode,        ...
Line 804... Line 547...
end
end
 
 
 
 
 
 
 
 
<<<<<<< HEAD
 
<<<<<<< HEAD
 
 
 
=======
 
>>>>>>> initial commit
 
=======
 
 
 
>>>>>>> Updated C and RTL model as well as the documentation
 
function [atan_res, abs_res, atan_err, abs_err, it ]  = ccart2pol( x, y, fid )
function [atan_res, abs_res, atan_err, abs_err, it ]  = ccart2pol( x, y, fid )
 
 
global C_FLAG_VEC_ROT C_FLAG_ATAN_3 C_MODE_CIRC C_MODE_LIN C_MODE_HYP
global C_FLAG_VEC_ROT C_FLAG_ATAN_3 C_MODE_CIRC C_MODE_LIN C_MODE_HYP
global XY_WIDTH ANGLEWIDTH GUARDBITS RM_GAIN
global XY_WIDTH ANGLEWIDTH GUARDBITS RM_GAIN
 
 
Line 836... Line 572...
                                  mode,        ...
                                  mode,        ...
                                  XY_WIDTH,    ...
                                  XY_WIDTH,    ...
                                  ANGLEWIDTH,  ...
                                  ANGLEWIDTH,  ...
                                  GUARDBITS,   ...
                                  GUARDBITS,   ...
                                  RM_GAIN );
                                  RM_GAIN );
<<<<<<< HEAD
 
<<<<<<< HEAD
 
=======
 
>>>>>>> Updated C and RTL model as well as the documentation
 
% matlab version:
% matlab version:
m_th = atan2( y,  x );
m_th = atan2( y,  x );
m_r  = sqrt( x.^2 + y.^2 );
m_r  = sqrt( x.^2 + y.^2 );
 
 
<<<<<<< HEAD
 
=======
 
% matlab version
 
[m_th, m_r ] = cart2pol( x, y );
 
>>>>>>> initial commit
 
=======
 
>>>>>>> Updated C and RTL model as well as the documentation
 
 
 
% comparison
% comparison
atan_res = ra ./ 2^( (ANGLEWIDTH)-1);
atan_res = ra ./ 2^( (ANGLEWIDTH)-1);
abs_res  = rx ./ ( 2^(XY_WIDTH-1) -1 );
abs_res  = rx ./ ( 2^(XY_WIDTH-1) -1 );
atan_err = abs( m_th - atan_res );
atan_err = abs( m_th - atan_res );
abs_err  = abs( m_r  -  abs_res );
abs_err  = abs( m_r  -  abs_res );
 
 
<<<<<<< HEAD
 
<<<<<<< HEAD
 
% TODO: ATAN oder ATAN2  atan( 0 / x ) != atan2( 0, x )!!!!
 
 
 
=======
 
>>>>>>> initial commit
 
=======
 
% TODO: ATAN oder ATAN2  atan( 0 / x ) != atan2( 0, x )!!!!
% TODO: ATAN oder ATAN2  atan( 0 / x ) != atan2( 0, x )!!!!
 
 
>>>>>>> Updated C and RTL model as well as the documentation
 
% write TB data
% write TB data
write_tb( fid, xi, yi, ai, rx, ry, ra, mode )
write_tb( fid, xi, yi, ai, rx, ry, ra, mode )
 
 
end
end
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.