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
|
|
|