2008-04-30 06:34:35 +02:00
|
|
|
|
|
|
|
|
The following is from the README.va_math that was included with the
|
|
|
|
|
initial contribution of the va_math module. I've removed the parts
|
|
|
|
|
that are obviously not applicable, i.e. how to compile the library, to
|
|
|
|
|
this bundled version of the library.
|
|
|
|
|
|
|
|
|
|
--------
|
|
|
|
|
License.
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
|
|
Verilog-A math library built for Icarus Verilog
|
|
|
|
|
http://www.icarus.com/eda/verilog/
|
|
|
|
|
|
2009-03-26 21:41:33 +01:00
|
|
|
Copyright (C) 2007-2009 Cary R. (cygcary@yahoo.com)
|
2008-04-30 06:34:35 +02:00
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
|
|
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
|
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
------------------------------------------
|
|
|
|
|
Standard Verilog-A Mathematical Functions.
|
|
|
|
|
------------------------------------------
|
|
|
|
|
|
|
|
|
|
The va_math VPI module implements all the standard math functions provided
|
|
|
|
|
by Verilog-A as Verilog-D system functions. The names are the same except
|
|
|
|
|
like all Verilog-D system functions the name must be prefixed with a '$'.
|
|
|
|
|
For reference the functions are:
|
|
|
|
|
|
|
|
|
|
$ln(x) -- Natural logarithm
|
2009-03-26 21:41:33 +01:00
|
|
|
$log10(x) -- Decimal logarithm // $log is being deprecated!
|
2008-04-30 06:34:35 +02:00
|
|
|
$exp(x) -- Exponential
|
|
|
|
|
$sqrt(x) -- Square root
|
|
|
|
|
$min(x,y) -- Minimum
|
|
|
|
|
$max(x,y) -- Maximum
|
|
|
|
|
$abs(x) -- Absolute value
|
|
|
|
|
$floor(x) -- Floor
|
|
|
|
|
$ceil(x) -- Ceiling
|
|
|
|
|
$pow(x,y) -- Power (x**y)
|
|
|
|
|
$sin(x) -- Sine
|
|
|
|
|
$cos(x) -- Cosine
|
|
|
|
|
$tan(x) -- Tangent
|
|
|
|
|
$asin(x) -- Arc-sine
|
|
|
|
|
$acos(x) -- Arc-cosine
|
|
|
|
|
$atan(x) -- Arc-tangent
|
|
|
|
|
$atan2(y,x) -- Arc-tangent of y/x
|
|
|
|
|
$hypot(x,y) -- Hypotenuse (sqrt(x**2 + y**2))
|
|
|
|
|
$sinh(x) -- Hyperbolic sine
|
|
|
|
|
$cosh(x) -- Hyperbolic cosine
|
|
|
|
|
$tanh(x) -- Hyperbolic tangent
|
|
|
|
|
$asinh(x) -- Arc-hyperbolic sine
|
|
|
|
|
$acosh(x) -- Arc-hyperbolic cosine
|
|
|
|
|
$atanh(x) -- Arc-hyperbolic tangent
|
|
|
|
|
|
|
|
|
|
The only limit placed on the x and y arguments by the library is that they
|
|
|
|
|
must be numbers (not constant strings). The underlying C library controls
|
|
|
|
|
any other limits placed on the arguments. Most libraries return +-Inf or
|
|
|
|
|
NaN for results that cannot be represented with real numbers. All functions
|
|
|
|
|
return a real result.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
------------------------------------------
|
|
|
|
|
Standard Verilog-A Mathematical Constants.
|
|
|
|
|
------------------------------------------
|
|
|
|
|
|
|
|
|
|
The Verilog-A mathematical constants can be accessed by including the
|
|
|
|
|
"constants.vams" header file. It is located in the standard include
|
|
|
|
|
directory. Recent version of Icarus Verilog (0.9.devel) automatically
|
|
|
|
|
add this directory to the end of the list used to find include files.
|
|
|
|
|
For reference the mathematical constants are:
|
|
|
|
|
|
|
|
|
|
`M_PI -- Pi
|
|
|
|
|
`M_TWO_PI -- 2*Pi
|
|
|
|
|
`M_PI_2 -- Pi/2
|
|
|
|
|
`M_PI_4 -- Pi/4
|
|
|
|
|
`M_1_PI -- 1/Pi
|
|
|
|
|
`M_2_PI -- 2/Pi
|
|
|
|
|
`M_2_SQRTPI -- 2/sqrt(Pi)
|
|
|
|
|
`M_E -- e
|
|
|
|
|
`M_LOG2E -- log base 2 of e
|
|
|
|
|
`M_LOG10E -- log base 10 of e
|
|
|
|
|
`M_LN2 -- log base e of 2
|
|
|
|
|
`M_LN10 -- log base e of 10
|
|
|
|
|
`M_SQRT2 -- sqrt(2)
|
|
|
|
|
`M_SQRT1_2 -- 1/sqrt(2)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
------------------
|
|
|
|
|
Using the Library.
|
|
|
|
|
------------------
|
|
|
|
|
|
|
|
|
|
Just add "-m va_math" to your iverilog command line/command file and
|
|
|
|
|
`include the "constants.vams" file as needed.
|
|
|
|
|
|
|
|
|
|
------
|
|
|
|
|
Thanks
|
|
|
|
|
------
|
|
|
|
|
|
|
|
|
|
I would like to thank Larry Doolittle for his suggestions and
|
|
|
|
|
Stephen Williams for developing Icarus Verilog.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------
|
|
|
|
|
The End.
|
|
|
|
|
--------
|