diff options
Diffstat (limited to 'libraries')
-rw-r--r-- | libraries/ieee/math_real-body.vhdl | 34 | ||||
-rw-r--r-- | libraries/ieee/math_real.vhdl | 36 |
2 files changed, 58 insertions, 12 deletions
diff --git a/libraries/ieee/math_real-body.vhdl b/libraries/ieee/math_real-body.vhdl index 1473f6787..41e6a084d 100644 --- a/libraries/ieee/math_real-body.vhdl +++ b/libraries/ieee/math_real-body.vhdl @@ -43,6 +43,8 @@ -- -- GHDL history -- 2005-04-07 Initial version. +-- 2005-12-23 I. Curtis : overhaul of log functions to bring in line +-- with ieee standard ------------------------------------------------------------- Library IEEE; @@ -246,19 +248,31 @@ Package body MATH_REAL is return c_log(x); end LOG; - function LOG (BASE: positive; X : real) return real is - -- returns logarithm base BASE of X; X > 0 + function LOG (X : in real; BASE: in real) return real is + -- returns logarithm base BASE of X; X > 0 begin - -- check validity of argument - if ( BASE <= 0 ) or ( x <= 0.0 ) then - assert false report "BASE <= 0 or X <= 0.0 in LOG(BASE, X)" - severity ERROR; - return(REAL'LOW); - end if; - -- compute the value - return (LOG(X)/LOG(REAL(BASE))); + -- check validity of argument + if ( BASE <= 0.0 ) or ( x <= 0.0 ) then + assert false report "BASE <= 0.0 or X <= 0.0 in LOG(BASE, X)" + severity ERROR; + return(REAL'LOW); + end if; + -- compute the value + return (LOG(X)/LOG(BASE)); end LOG; + function LOG2 (X : in real) return real is + -- returns logarithm BASE 2 of X; X > 0 + begin + return LOG(X) / MATH_LOG_OF_2; + end LOG2; + + function LOG10 (X : in real) return real is + -- returns logarithm BASE 10 of X; X > 0 + begin + return LOG(X) / MATH_LOG_OF_10; + end LOG10; + function SIN (X : real ) return real is begin assert false severity failure; diff --git a/libraries/ieee/math_real.vhdl b/libraries/ieee/math_real.vhdl index c70d2160b..b2c818a4b 100644 --- a/libraries/ieee/math_real.vhdl +++ b/libraries/ieee/math_real.vhdl @@ -43,11 +43,17 @@ -- GHDL history -- 2005-04-07 Initial version. -- 2005-09-01 Some PI constants added. +-- 2005-12-20 I. Curtis : significant overhaul to bring closer in line +-- with ieee standard + ------------------------------------------------------------- Library IEEE; Package MATH_REAL is - + -- IAC: should have a string with copyright notice + -- constant CopyRightNotice: STRING + -- := "GPL"; + -- -- commonly used constants -- @@ -95,6 +101,10 @@ Package MATH_REAL is attribute foreign of round : function is "VHPIDIRECT round"; -- returns integer FLOOR(X + 0.5) if X > 0; -- return integer CEIL(X - 0.5) if X < 0 + + -- IAC: we are missing the function TRUNC + -- IAC: we are missing the function MOD + -- IAC: functions FMAX and FMIN should be renamed REALMAX and REALMIN function FMAX (X, Y : real ) return real; attribute foreign of fmax : function is "VHPIDIRECT fmax"; @@ -118,6 +128,8 @@ Package MATH_REAL is -- initialize their values (INIT_SEED) will be provided, and the UNIFORM -- procedure call will be modified accordingly. + -- IAC: functions SRAND, RAND and GET_RAND_MAX should not be visible + function SRAND (seed: in integer ) return integer; attribute foreign of srand : function is "VHPIDIRECT srand"; -- @@ -169,9 +181,15 @@ Package MATH_REAL is function LOG (X : real ) return real; -- returns natural logarithm of X; X > 0 - function LOG (BASE: positive; X : real) return real; + function LOG (X: in real; BASE: in real) return real; -- returns logarithm base BASE of X; X > 0 + function LOG2 (X : in real ) return real; + -- returns logarithm base 2 of X; X > 0 + + function LOG10 (X : in real ) return real; + -- returns logarithm base 10 of X; X > 0 + function SIN (X : real ) return real; attribute foreign of sin : function is "VHPIDIRECT sin"; -- returns sin X; X in radians @@ -185,16 +203,24 @@ Package MATH_REAL is -- returns tan X; X in radians -- X /= ((2k+1) * PI/2), where k is an integer + -- IAC: function should be called ARCSIN + function ASIN (X : real ) return real; -- returns -PI/2 < asin X < PI/2; | X | <= 1 + -- IAC: function should be called ARCCOS + function ACOS (X : real ) return real; -- returns 0 < acos X < PI; | X | <= 1 + + -- IAC: function should be called ARCTAN + function ATAN (X : real) return real; attribute foreign of atan : function is "VHPIDIRECT atan"; -- returns -PI/2 < atan X < PI/2 + -- IAC: function ATAN2 should not exist function ATAN2 (X : real; Y : real) return real; -- returns atan (X/Y); -PI < atan2(X,Y) < PI; Y /= 0.0 @@ -209,14 +235,20 @@ Package MATH_REAL is function TANH (X : real) return real; attribute foreign of tanh : function is "VHPIDIRECT tanh"; -- hyperbolic tangent; -- returns (e**X - e**(-X))/(e**X + e**(-X)) + + -- IAC: function should be called ARCSINH function ASINH (X : real) return real; attribute foreign of asinh : function is "VHPIDIRECT asinh"; -- returns ln( X + sqrt( X**2 + 1)) + -- IAC: function should be called ARCCOSH + function ACOSH (X : real) return real; -- returns ln( X + sqrt( X**2 - 1)); X >= 1 + -- IAC: function should be called ARCTANH + function ATANH (X : real) return real; -- returns (ln( (1 + X)/(1 - X)))/2 ; | X | < 1 |