URL
https://opencores.org/ocsvn/yac/yac/trunk
Subversion Repositories yac
Compare Revisions
- This comparison shows the changes necessary to convert path
/yac/trunk
- from Rev 2 to Rev 3
- ↔ Reverse comparison
Rev 2 → Rev 3
/rtl/vhdl/cordic_iterative_pkg.vhd
61,8 → 61,13
|
|
|
<<<<<<< HEAD |
constant I_FLAG_VEC_ROT : natural := 3; -- bit index |
constant I_FLAG_ATAN_3 : natural := 2; -- bit index (for future usage) |
======= |
constant FLAG_VEC_ROT : natural := 3; -- bit index |
constant FLAG_ATAN_3 : natural := 2; -- bit index |
>>>>>>> initial commit |
constant VAL_MODE_CIR : std_logic_vector( 1 downto 0 ) := "00"; -- value |
constant VAL_MODE_LIN : std_logic_vector( 1 downto 0 ) := "01"; -- value |
constant VAL_MODE_HYP : std_logic_vector( 1 downto 0 ) := "10"; -- value |
/rtl/vhdl/cordic_iterative_tb.vhd
251,6 → 251,7
y_ex /= y_o or |
a_ex /= a_o then |
assert x_ex = x_o report |
<<<<<<< HEAD |
integer'image( stim_cnt ) & ": Serial Cordic Failed: expected x result:" |
& integer'image( tmp_value(5) ) & ", but got:" |
& integer'image( to_integer( signed( x_ex ) ) ); |
260,6 → 261,17
& integer'image( to_integer( signed( y_ex ) ) ); |
assert a_ex = a_o report |
integer'image( stim_cnt ) & ": Serial Cordic Failed: expected a result:" |
======= |
" Serial Cordic Failed: expected x result:" |
& integer'image( tmp_value(5) ) & ", but got:" |
& integer'image( to_integer( signed( x_ex ) ) ); |
assert y_ex = y_o report |
" Serial Cordic Failed: expected y result:" |
& integer'image( tmp_value(6) ) & ", but got:" |
& integer'image( to_integer( signed( y_ex ) ) ); |
assert a_ex = a_o report |
" Serial Cordic Failed: expected a result:" |
>>>>>>> initial commit |
& integer'image( tmp_value(7) ) & ", but got:" |
& integer'image( to_integer( signed( a_ex ) ) ); |
err_cnt := err_cnt + 1; |
/rtl/vhdl/cordic_iterative_int.vhd
92,6 → 92,7
|
-- Internal angle width |
constant A_WIDTH_I : natural := A_WIDTH+2; |
<<<<<<< HEAD |
|
|
constant SQRT2_REAL : real := 1.4142135623730951454746218587388284504413604; |
101,6 → 102,12
constant SQRT2 : integer := natural( SQRT2_REAL * real( 2**( XY_WIDTH-1 ) ) + 0.5 ); |
constant XY_MAX : integer := natural( 2**( XY_WIDTH-1)-1); |
|
======= |
|
constant PI_REAL : real := 3.1415926535897931159979634685441851615905762; |
constant PI : integer := natural( PI_REAL * real( 2**( A_WIDTH-1 ) ) + 0.5 ); |
constant PI_H : integer := natural( PI_REAL * real( 2**( A_WIDTH-2 ) ) + 0.5 ); |
>>>>>>> initial commit |
|
constant XY_WIDTH_G : natural := XY_WIDTH + GUARD_BITS; |
|
224,6 → 231,7
state.a <= resize( signed( a_i ), state.a'length ); |
state.i <= ( others => '0' ); |
|
<<<<<<< HEAD |
elsif state.st = ST_INIT then |
-- |
-- initialization state |
231,12 → 239,25
-- -> check special situations / miss-configurations (TODO) |
-- |
|
======= |
-- |
-- initialization state |
-- -> do initial rotation (alignment) |
-- -> check special situations / miss-configurations (TODO) |
-- |
elsif state.st = ST_INIT then |
>>>>>>> initial commit |
state.st <= ST_ROTATE; |
state.do_shift <= '1'; |
|
|
<<<<<<< HEAD |
if state.mode( 1 downto 0 ) = VAL_MODE_HYP then |
-- if we do a hyperbolic rotation, we start with 1 |
======= |
-- if we do a hyperbolic rotation, we start with 1 |
if state.mode( 1 downto 0 ) = VAL_MODE_HYP then |
>>>>>>> initial commit |
state.i(0) <= '1'; |
end if; |
|
243,6 → 264,7
|
|
|
<<<<<<< HEAD |
if state.mode( I_FLAG_VEC_ROT ) = '0' |
and state.mode( 1 downto 0 ) = VAL_MODE_CIR then |
-- circular vector mode |
254,11 → 276,25
state.y <= - state.y; |
elsif state.a > PI_H then |
-- move from second quadrant to fourth |
======= |
-- circular vector mode |
if state.mode( FLAG_VEC_ROT ) = '0' |
and state.mode( 1 downto 0 ) = VAL_MODE_CIR then |
|
-- move from third quadrant to first |
if state.a < - PI_H then |
state.a <= state.a + PI; |
state.x <= - state.x; |
state.y <= - state.y; |
-- move from second quadrant to fourth |
elsif state.a > PI_H then |
>>>>>>> initial commit |
state.a <= state.a - PI; |
state.x <= - state.x; |
state.y <= - state.y; |
end if; |
|
<<<<<<< HEAD |
elsif state.mode( I_FLAG_VEC_ROT ) = '1' |
and state.mode( 1 downto 0 ) = VAL_MODE_CIR then |
-- circular rotation mode |
328,7 → 364,39
state.y <= - state.y; |
end if; |
state.a <= to_signed( 0, state.a'length ); |
======= |
-- circular rotation mode |
elsif state.mode( FLAG_VEC_ROT ) = '1' |
and state.mode( 1 downto 0 ) = VAL_MODE_CIR then |
|
-- move from second quadrant to fourth |
if state.x < 0 and state.y > 0 then |
state.x <= - state.x; |
state.y <= - state.y; |
state.a <= to_signed( PI, state.a'length ); |
-- move from third quadrant to first |
elsif state.x < 0 and state.y < 0 then |
state.x <= - state.x; |
state.y <= - state.y; |
state.a <= to_signed( -PI, state.a'length ); |
-- y=0 condition |
elsif state.x < 0 and state.y = 0 then |
state.a <= to_signed( PI, state.a'length ); |
state.st<= ST_DONE; |
else |
state.a <= ( others => '0' ); |
end if; |
-- linear rotation mode |
elsif state.mode( FLAG_VEC_ROT ) = '1' |
and state.mode( 1 downto 0 ) = VAL_MODE_LIN then |
|
if state.x < 0 then |
state.x <= - state.x; |
state.y <= - state.y; |
end if; |
state.a <= to_signed( 0, state.a'length ); |
>>>>>>> initial commit |
|
end if; |
|
|
348,7 → 416,11
elsif state.st = ST_ROTATE then |
|
-- get the sign |
<<<<<<< HEAD |
if state.mode( I_FLAG_VEC_ROT ) = '0' then |
======= |
if state.mode( FLAG_VEC_ROT ) = '0' then |
>>>>>>> initial commit |
if state.a < 0 then |
sign := '0'; |
else |
417,6 → 489,7
state.do_shift <= '0'; |
|
-- abort condition |
<<<<<<< HEAD |
if( state.mode( I_FLAG_VEC_ROT ) = '0' and |
state.a = 0 ) then |
state.st <= ST_RM_GAIN; |
430,6 → 503,21
state.st <= ST_RM_GAIN; |
state.i <= ( others => '0' ); |
elsif( state.mode( I_FLAG_VEC_ROT ) = '1' and |
======= |
if( state.mode( FLAG_VEC_ROT ) = '0' and |
( state.a = 0 or state.a = -1 ) ) then |
state.st <= ST_RM_GAIN; |
state.i <= ( others => '0' ); |
elsif( state.mode( FLAG_VEC_ROT ) = '0' and |
( state.a = state.alst ) ) then |
state.st <= ST_RM_GAIN; |
state.i <= ( others => '0' ); |
elsif( state.mode( FLAG_VEC_ROT ) = '1' and |
( state.y = 0 or state.y = -1 ) ) then |
state.st <= ST_RM_GAIN; |
state.i <= ( others => '0' ); |
elsif( state.mode( FLAG_VEC_ROT ) = '1' and |
>>>>>>> initial commit |
( state.y = state.ylst ) ) then |
state.st <= ST_RM_GAIN; |
state.i <= ( others => '0' ); |
/c_octave/cordic_iterative.c
59,7 → 59,11
#include "mex.h" |
|
/* enable debug output */ |
<<<<<<< HEAD |
#define PRINT_DEBUG 0 |
======= |
#define PRINT_DEBUG 0 |
>>>>>>> initial commit |
|
|
/* #define CORDIC_ROUNDING 0.5 */ |
80,6 → 84,24
|
|
|
<<<<<<< HEAD |
======= |
|
long long int ov_check( long long int * value, long long int length ) |
{ |
long long int mask = (1<<length)-1; |
long long int result = 0; |
long long int min = -((long long int)1<<length); |
long long int max = ((long long int)1<<length); |
if( *value > max || *value < min ) |
result = *value; |
/* *value &= mask; */ |
return result; |
} |
|
|
|
>>>>>>> initial commit |
void cordic_int( long long int x_i, |
long long int y_i, |
long long int a_i, |
102,8 → 124,12
long long int *y, |
long long int *a, |
int mode, |
<<<<<<< HEAD |
int A_WIDTH, |
int XY_WIDTH ); |
======= |
int A_WIDTH ); |
>>>>>>> initial commit |
void cordic_int_rm_gain( long long int *x, |
long long int *y, |
int mode, |
232,7 → 258,11
long long int a; |
long long int s; |
int ov; |
<<<<<<< HEAD |
int it = 0; |
======= |
int it; |
>>>>>>> initial commit |
|
|
|
242,6 → 272,7
|
cordic_int_dbg( x_i, y_i, a_i, mode, 0, "input" ); |
|
<<<<<<< HEAD |
if( !cordic_int_init( &x_i, &y_i, &a_i, mode, A_WIDTH, XY_WIDTH ) ) |
{ |
|
249,7 → 280,15
|
cordic_int_rm_gain( &x_i, &y_i, mode, RM_GAIN ); |
} |
======= |
cordic_int_init( &x_i, &y_i, &a_i, mode, A_WIDTH ); |
|
it = cordic_int_rotate( &x_i, &y_i, &a_i, mode, A_WIDTH ); |
|
cordic_int_rm_gain( &x_i, &y_i, mode, RM_GAIN ); |
|
>>>>>>> initial commit |
|
*x_o = x_i; |
*y_o = y_i; |
*a_o = a_i; |
267,8 → 306,12
long long int *y, |
long long int *a, |
int mode, |
<<<<<<< HEAD |
int A_WIDTH, |
int XY_WIDTH ) |
======= |
int A_WIDTH ) |
>>>>>>> initial commit |
{ |
int already_done = 0; |
|
275,6 → 318,7
|
long long int PI = ( long long int )( M_PI * pow( 2, A_WIDTH-1 ) + 0.5 ); |
long long int PI_H = (long long int)( M_PI * pow( 2, A_WIDTH-2 ) + 0.5 ); |
<<<<<<< HEAD |
|
long long int XY_MAX = pow( 2, XY_WIDTH-1 )-1; |
|
281,6 → 325,11
cordic_int_dbg( *x, *y, *a, mode, 0, "before init" ); |
|
|
======= |
|
|
cordic_int_dbg( *x, *y, *a, mode, 0, "before init" ); |
>>>>>>> initial commit |
/* Circular rotation mode */ |
if( 0 == ( mode & C_FLAG_VEC_ROT ) && |
C_MODE_CIR == ( mode & C_MODE_MSK ) ) |
315,6 → 364,7
else if ( 0 != ( mode & C_FLAG_VEC_ROT ) && |
C_MODE_CIR == ( mode & C_MODE_MSK ) ) |
{ |
<<<<<<< HEAD |
|
if( *x == 0 && *y == 0 ) |
{ |
384,23 → 434,44
#endif |
} |
else if( *x < 0 && *y >= 0 ) |
======= |
if( *x < 0 && *y > 0 ) |
>>>>>>> initial commit |
{ |
*x = -*x; |
*y = -*y; |
*a = PI; |
#if PRINT_DEBUG > 0 |
<<<<<<< HEAD |
PRINT("pre-rotation from second to the fourth quadrant\n" ); |
#endif |
} |
else if( *x < 0 && *y < 0 ) |
======= |
PRINT("align from second quadrand\n" ); |
#endif |
} |
else if( *x < 0 && *y < 0 ) |
>>>>>>> initial commit |
{ |
*x = -*x; |
*y = -*y; |
*a = -PI; |
#if PRINT_DEBUG > 0 |
<<<<<<< HEAD |
PRINT("pre-rotation from third to first quadrand\n" ); |
#endif |
} |
======= |
PRINT("align from third quadrand\n" ); |
#endif |
} |
else if( *x < 0 && *y == 0 ) |
{ |
*a = PI; |
already_done = 1; |
} |
>>>>>>> initial commit |
else |
*a = 0; |
} |
417,7 → 488,11
} |
|
cordic_int_dbg( *x, *y, *a, mode, 0, "after init" ); |
<<<<<<< HEAD |
return already_done; |
======= |
|
>>>>>>> initial commit |
} |
|
|
534,7 → 609,11
|
/* abort condition */ |
if( ( mode & C_FLAG_VEC_ROT ) == 0 && |
<<<<<<< HEAD |
( *a == 0 /* || *a == -1 */ ) ) |
======= |
( *a == 0 || *a == -1 ) ) |
>>>>>>> initial commit |
break; |
if( ( mode & C_FLAG_VEC_ROT ) == 0 && |
( *a == alst ) ) |
541,7 → 620,11
break; |
|
if( ( mode & C_FLAG_VEC_ROT ) != 0 && |
<<<<<<< HEAD |
( *y == 0 /*|| *y == -1 */ ) ) |
======= |
( *y == 0 || *y == -1 ) ) |
>>>>>>> initial commit |
break; |
if( ( mode & C_FLAG_VEC_ROT ) != 0 && |
( *y == ylst ) ) |
/c_octave/cordic_iterative_code.m
68,8 → 68,11
% TODO: calculate these values |
K0 = 0.607252935009; |
K1 = 0.207497067763; |
<<<<<<< HEAD |
%prod( sqrt( 1-2.^(-2 .* [ 1 : 100000 ] ) ) ) |
|
======= |
>>>>>>> initial commit |
|
signs = get_rm_gain_shifts( K0, 30 ); |
print_rm_gain_code( fid, signs, K0, 1, 1, 0 ); |
84,7 → 87,11
print_rm_gain_code( fid, signs, K1, 1, 0, 1 ); |
|
MAX_A_WIDTH = 32; |
<<<<<<< HEAD |
print_angular_lut( fid, MAX_A_WIDTH ); |
======= |
print_angular_lut( fid, MAX_A_WIDTH ) |
>>>>>>> initial commit |
|
|
fclose( fid ); |
195,7 → 202,11
end |
|
for y = 1 : length( tmp2 ) |
<<<<<<< HEAD |
fprintf( fid, '%c ( x >> %d ) ', tmp2{ y }, index( y ) ); |
======= |
fprintf( fid, '%c ( x >> %d ) ', tmp2{ y }, index( y ) ) |
>>>>>>> initial commit |
end |
fprintf( fid, '; break; /* error: %.10f */ \n', err ); |
else |
/c_octave/cordic_iterative_test.m
20,6 → 20,7
%%%% implementation behaves the same than the VHDL %%%% |
%%%% implementation. %%%% |
%%%% %%%% |
<<<<<<< HEAD |
%%%% Three tests are implemented: %%%% |
%%%% - Random test values %%%% |
%%%% - Linear increasing values %%%% |
28,11 → 29,17
%%%% %%%% |
%%%% Please do 'mex cordic_iterative.c' to create %%%% |
%%%% the cordic_iterative.mex. %%%% |
======= |
>>>>>>> initial commit |
%%%% %%%% |
%%%%% %%%%% |
%%%% %%%% |
%%%% TODO %%%% |
<<<<<<< HEAD |
%%%% The linear test is not complete %%%% |
======= |
%%%% Some documentation and function description %%%% |
>>>>>>> initial commit |
%%%% %%%% |
%%%% %%%% |
%%%% %%%% |
59,10 → 66,27
%%%% http://www.gnu.org/licenses/lgpl %%%% |
%%%% %%%% |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
<<<<<<< HEAD |
function cordic_iterative_test( ) |
|
|
|
======= |
|
|
|
function cordic_iterative_test( ) |
% |
% |
% Please do 'mex cordic_iterative.c' to create |
% the cordic_iterative.mex |
% |
% |
% |
% |
|
|
>>>>>>> initial commit |
% global flags/values, they are static |
% 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 |
95,6 → 119,7
|
% open test file |
tb_fid = fopen( './tb_data.txt', 'w' ); |
<<<<<<< HEAD |
%tb_fid = 0; |
|
|
171,11 → 196,21
0, 0, ... |
0, 0, ... |
'Limit Value Test' ); |
======= |
|
% run test, which uses random values |
run_random_test( N_TESTS, tb_fid ); |
|
% close file |
fclose( tb_fid ); |
|
>>>>>>> initial commit |
|
end |
|
|
|
<<<<<<< HEAD |
function run_linear_test( N_TESTS, tb_fid ) |
%RUN_LINEAR_TEST Generates a linear test pattern |
% |
231,6 → 266,13
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 = -1 + 2 .* rand( 1, N_TESTS ); |
data_b = -1 + 2 .* rand( 1, N_TESTS ); |
|
>>>>>>> initial commit |
% adapat data for division |
data_a_div = data_a; |
data_b_div = data_b; |
239,11 → 281,16
data_b_div( swap_div ) = data_a( swap_div ); |
|
data_a_h = ones( size( data_a ) ); |
<<<<<<< HEAD |
data_b_h = data_b .* 0.80694; %0.78; |
======= |
data_b_h = data_b .* 0.78; |
>>>>>>> initial commit |
|
|
|
[ ~, ~, atan_err, abs_err, it_1 ] = ccart2pol( data_a, data_b, tb_fid ); |
<<<<<<< HEAD |
[ ~, ~, 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 ); |
[ ~, div_err, it_4 ] = cdiv( data_a_div, data_b_div, tb_fid ); |
303,10 → 350,34
|
end |
|
======= |
[ ~, ~, 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 ); |
|
fprintf( ' ___________________________________________________________________\n' ); |
fprintf( ' Random Value Test \n' ); |
fprintf( ' -----+-------------------+--------------------+-------------------\n' ); |
fprintf( ' | max error | mean error | max iterations \n' ); |
fprintf( ' atan | % .14f | % .14f | %.5f \n', max( atan_err ), mean( atan_err ), max( it_1 ) ); |
fprintf( ' abs | % .14f | % .14f | %.5f \n', max( abs_err ), mean( abs_err ), max( it_1 ) ); |
fprintf( ' sin | % .14f | % .14f | %.5f \n', max( sin_err ), mean( sin_err ), max( it_2 ) ); |
fprintf( ' cos | % .14f | % .14f | %.5f \n', max( cos_err ), mean( cos_err ), max( it_2 ) ); |
fprintf( ' div | % .14f | % .14f | %.5f \n', max( div_err ), mean( div_err ), max( it_3 ) ); |
fprintf( ' mul | % .14f | % .14f | %.5f \n', max( mul_err ), mean( mul_err ), mean( it_4 ) ); |
fprintf( ' atanh| % .14f | % .14f | %.5f \n', max( atanh_err), mean( atanh_err ), mean( it_5 ) ); |
fprintf( ' sinh | % .14f | % .14f | %.5f \n', max( sinh_err ), mean( sinh_err ), mean( it_6 ) ); |
fprintf( ' cosh | % .14f | % .14f | %.5f \n', max( cosh_err ), mean( cosh_err ), mean( it_6 ) ); |
|
|
end |
>>>>>>> initial commit |
|
|
|
|
function [sinh_res, cosh_res, sinh_err, cosh_err, it ]= csinhcosh( th, fid ) |
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 |
467,6 → 538,7
end |
|
|
<<<<<<< HEAD |
function [x_res, y_res, x_err, y_err, it ] = crot( x, y, th, fid ) |
% |
% does a multiplication with exp( th * i ) |
512,6 → 584,12
% does the Matlab equivalent pol2cart |
% |
|
======= |
|
|
|
function [sin_res, cos_res, sin_err, cos_err, it ]= cpol2cart( th, r, fid ) |
>>>>>>> initial commit |
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 |
|
519,8 → 597,17
yi = zeros( 1, length( th ) ); |
ai = round( th .* (2^(ANGLEWIDTH-1)-1) ); |
|
<<<<<<< HEAD |
mode = C_MODE_CIRC; |
|
======= |
|
|
mode = C_MODE_CIRC; |
|
|
% cordic version |
>>>>>>> initial commit |
[ rcos rsin ra, it ] = cordic_iterative( ... |
xi, ... |
yi, ... |
548,7 → 635,10
|
|
|
<<<<<<< HEAD |
|
======= |
>>>>>>> initial commit |
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 |
574,10 → 664,15
ANGLEWIDTH, ... |
GUARDBITS, ... |
RM_GAIN ); |
<<<<<<< HEAD |
% matlab version: |
m_th = atan2( y, x ); |
m_r = sqrt( x.^2 + y.^2 ); |
|
======= |
% matlab version |
[m_th, m_r ] = cart2pol( x, y ); |
>>>>>>> initial commit |
|
% comparison |
atan_res = ra ./ 2^( (ANGLEWIDTH)-1); |
585,8 → 680,11
atan_err = abs( m_th - atan_res ); |
abs_err = abs( m_r - abs_res ); |
|
<<<<<<< HEAD |
% TODO: ATAN oder ATAN2 atan( 0 / x ) != atan2( 0, x )!!!! |
|
======= |
>>>>>>> initial commit |
% write TB data |
write_tb( fid, xi, yi, ai, rx, ry, ra, mode ) |
|
/lgpl-3.0.txt
0,0 → 1,165
GNU LESSER GENERAL PUBLIC LICENSE |
Version 3, 29 June 2007 |
|
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> |
Everyone is permitted to copy and distribute verbatim copies |
of this license document, but changing it is not allowed. |
|
|
This version of the GNU Lesser General Public License incorporates |
the terms and conditions of version 3 of the GNU General Public |
License, supplemented by the additional permissions listed below. |
|
0. Additional Definitions. |
|
As used herein, "this License" refers to version 3 of the GNU Lesser |
General Public License, and the "GNU GPL" refers to version 3 of the GNU |
General Public License. |
|
"The Library" refers to a covered work governed by this License, |
other than an Application or a Combined Work as defined below. |
|
An "Application" is any work that makes use of an interface provided |
by the Library, but which is not otherwise based on the Library. |
Defining a subclass of a class defined by the Library is deemed a mode |
of using an interface provided by the Library. |
|
A "Combined Work" is a work produced by combining or linking an |
Application with the Library. The particular version of the Library |
with which the Combined Work was made is also called the "Linked |
Version". |
|
The "Minimal Corresponding Source" for a Combined Work means the |
Corresponding Source for the Combined Work, excluding any source code |
for portions of the Combined Work that, considered in isolation, are |
based on the Application, and not on the Linked Version. |
|
The "Corresponding Application Code" for a Combined Work means the |
object code and/or source code for the Application, including any data |
and utility programs needed for reproducing the Combined Work from the |
Application, but excluding the System Libraries of the Combined Work. |
|
1. Exception to Section 3 of the GNU GPL. |
|
You may convey a covered work under sections 3 and 4 of this License |
without being bound by section 3 of the GNU GPL. |
|
2. Conveying Modified Versions. |
|
If you modify a copy of the Library, and, in your modifications, a |
facility refers to a function or data to be supplied by an Application |
that uses the facility (other than as an argument passed when the |
facility is invoked), then you may convey a copy of the modified |
version: |
|
a) under this License, provided that you make a good faith effort to |
ensure that, in the event an Application does not supply the |
function or data, the facility still operates, and performs |
whatever part of its purpose remains meaningful, or |
|
b) under the GNU GPL, with none of the additional permissions of |
this License applicable to that copy. |
|
3. Object Code Incorporating Material from Library Header Files. |
|
The object code form of an Application may incorporate material from |
a header file that is part of the Library. You may convey such object |
code under terms of your choice, provided that, if the incorporated |
material is not limited to numerical parameters, data structure |
layouts and accessors, or small macros, inline functions and templates |
(ten or fewer lines in length), you do both of the following: |
|
a) Give prominent notice with each copy of the object code that the |
Library is used in it and that the Library and its use are |
covered by this License. |
|
b) Accompany the object code with a copy of the GNU GPL and this license |
document. |
|
4. Combined Works. |
|
You may convey a Combined Work under terms of your choice that, |
taken together, effectively do not restrict modification of the |
portions of the Library contained in the Combined Work and reverse |
engineering for debugging such modifications, if you also do each of |
the following: |
|
a) Give prominent notice with each copy of the Combined Work that |
the Library is used in it and that the Library and its use are |
covered by this License. |
|
b) Accompany the Combined Work with a copy of the GNU GPL and this license |
document. |
|
c) For a Combined Work that displays copyright notices during |
execution, include the copyright notice for the Library among |
these notices, as well as a reference directing the user to the |
copies of the GNU GPL and this license document. |
|
d) Do one of the following: |
|
0) Convey the Minimal Corresponding Source under the terms of this |
License, and the Corresponding Application Code in a form |
suitable for, and under terms that permit, the user to |
recombine or relink the Application with a modified version of |
the Linked Version to produce a modified Combined Work, in the |
manner specified by section 6 of the GNU GPL for conveying |
Corresponding Source. |
|
1) Use a suitable shared library mechanism for linking with the |
Library. A suitable mechanism is one that (a) uses at run time |
a copy of the Library already present on the user's computer |
system, and (b) will operate properly with a modified version |
of the Library that is interface-compatible with the Linked |
Version. |
|
e) Provide Installation Information, but only if you would otherwise |
be required to provide such information under section 6 of the |
GNU GPL, and only to the extent that such information is |
necessary to install and execute a modified version of the |
Combined Work produced by recombining or relinking the |
Application with a modified version of the Linked Version. (If |
you use option 4d0, the Installation Information must accompany |
the Minimal Corresponding Source and Corresponding Application |
Code. If you use option 4d1, you must provide the Installation |
Information in the manner specified by section 6 of the GNU GPL |
for conveying Corresponding Source.) |
|
5. Combined Libraries. |
|
You may place library facilities that are a work based on the |
Library side by side in a single library together with other library |
facilities that are not Applications and are not covered by this |
License, and convey such a combined library under terms of your |
choice, if you do both of the following: |
|
a) Accompany the combined library with a copy of the same work based |
on the Library, uncombined with any other library facilities, |
conveyed under the terms of this License. |
|
b) Give prominent notice with the combined library that part of it |
is a work based on the Library, and explaining where to find the |
accompanying uncombined form of the same work. |
|
6. Revised Versions of the GNU Lesser General Public License. |
|
The Free Software Foundation may publish revised and/or new versions |
of the GNU Lesser General Public License from time to time. Such new |
versions will be similar in spirit to the present version, but may |
differ in detail to address new problems or concerns. |
|
Each version is given a distinguishing version number. If the |
Library as you received it specifies that a certain numbered version |
of the GNU Lesser General Public License "or any later version" |
applies to it, you have the option of following the terms and |
conditions either of that published version or of any later version |
published by the Free Software Foundation. If the Library as you |
received it does not specify a version number of the GNU Lesser |
General Public License, you may choose any version of the GNU Lesser |
General Public License ever published by the Free Software Foundation. |
|
If the Library as you received it specifies that a proxy can decide |
whether future versions of the GNU Lesser General Public License shall |
apply, that proxy's public statement of acceptance of any version is |
permanent authorization for you to choose that version for the |
Library. |
/README.txt
23,6 → 23,7
|
|
|
<<<<<<< HEAD |
Author(s): Christian Haettich |
Email feddischson@opencores.org |
|
90,6 → 91,8
|
|
|
======= |
>>>>>>> initial commit |
|
Files and folders: |
------------------ |
108,6 → 111,7
|
|
|
<<<<<<< HEAD |
|
|
[1] Andraka, Ray; A survey of CORDIC algorithms for FPGA based computers, 1989 |
118,3 → 122,5
http://www.eecs.berkeley.edu/newton/Classes/EE290sp99/lectures/ee290aSp996_1/cordic_chap24.pdf |
|
|
======= |
>>>>>>> initial commit |