exp Generator
The exp generator uses a Taylor series approximation to calculate the fixed point value of the natural
exponential function e^x. The Maclaurin series
for the function can be written as:
e^x = 1 + x + x^2/2! + x^3/3! + ... + x^n/n!
where n is the nth degree or order of the polynomial.
For signed values, we can take the reciprocal value:
e^(-x) = 1/e^x
The fp_pow_full component can calculate the value of b^x where b and x are
any fixed point numbers. This can be calculated by first observing:
b^x = e^(ln(b^x)) = e^(x*ln(b))
Therefore, we just calculate x*ln(b), and then we can feed the result into the exp
component to get our answer.
To calculate ln(p) for fixed point values p, we use the second order Padé Approximant of ln(p). We calculated the approximant
using Wolfram Alpha.
The gen_exp.py file can generate an entire Calyx program for testing purposes.
gen_exp.py can generate two different types of designs, depending on the
base_is_e flag: if base_is_e is true, then the design can only caclulate
values for e^x. The main component contains memories x (for the input) and ret for the result of e^x.
If base_is_e is false, then the design can calculate values for b^x for any base
e. Therefore, the main component contains memories x (the exponent input), b (the base intput),
and ret for the result of b^x.
In order to generate an example program (that can only calculate exponent values with base
e), with degree 4, bit width 32, integer bit width 16, and x interpreted as a signed value:
./calyx-py/calyx/gen_exp.py -d 4 -w 32 -i 16 -s true -e true
Similarly, it provides a function to produce only the necessary components to be dropped into other Calyx programs.
Installation
Install the calyx-py library.
Command Line Options
The command line options configure the degree (or order) of the taylor series, bit width, integer bit width, and sign.
--degree: The degree of the Taylor polynomial.--width: The bit width of the valuex.--int_width: The integer bit width of the valuex. The fractional bit width is then inferred aswidth - int_width.--is_signed: The signed interpretation of the valuex. Ifxis a signed value, this should betrueand otherwise,false.--base_is_e: A boolean that determines whether or not to generate components needed to just calculatee^x, or to generate components needed to calculateb^xfor any baseb.