# Overview

Atlassian Sourcetree is a free Git and Mercurial client for Windows.

Atlassian Sourcetree is a free Git and Mercurial client for Mac.

# MyHDL Fixed-Point Package

This package is a work in progress and has **not** reach a stable
release point, use at your own risk.

This package adds fixed-point support to MyHDL. The package intent is to provide a flexible approach to modeling and converting fixed-point data types.

I provide a brief introduction to fixed-point in this blog post.

The fixed_point package provides two different fixed-point types,
*fixed* and *fixbv*. The *fixed* type is a higher level type
and useful for modeling only. The *fixed* object will automatically
grow and align as needed. The *fixed* can be resized by simply
creating a new *fixed* (see example below).

There are two methods for creating a fixed-point (fixed,fixbv) by specifing the minimum, maximum, and resolution properities or by defining the format. The fixed-point parameters are:

- min : minimum value
- max : the maximum value
- res : minimum fractional step
- format : The
Wformat W(width, integer-width, fractional-width)

The min,max,res or the format is specified **not** both.

## Examples of Usage

Example using the *fixed* type.

>>> x1 = fixed(0, min=-1, max=1, res=2**-3) >>> x2 = fixed(0, min=-1, max=1, res=2**-3) >>> x3 = x1 + x2 # resize x2 to W(4,0,3) >>> x3 = fixed(x3, min=-1, max=1, res=2**-3, round_mode='fix') # or x3 = fixed(x3, format=W(4,0,3), round_mode='fix')

The following is an illustration how to plot the quantization for a W(4,0,3) format:

>>> import numpy as np >>> import matplotlib.pyplot as plt >>> >>> from fixed_point import fixed >>> from fixed_point import ROUND_MODES >>> >>> >>> for rm in ROUND_MODES: >>> xf = np.arange(-1200,1200)/1000. >>> xq,xe = ([],[]) >>> for ff in xf: >>> fx = float(fixed(ff, format=(4,0,3), round_mode=rm)) >>> xq.append(fx) # back to float for plotting, preserves value >>> xe.append(ff-fx) # also plot error

Example using the *fixbv* type.

>>> x = fixbv(0, min=-1, max=1, res=2**-15) >>> print(x, hex(x), repr(x)) 0.000000e+00 0x0 <0 (0.000000) W16.0>>>> x = fixbv(2.5, min=-8, max=8, res=1/32.) >>> print(x, hex(x), repr(x)) 2.500000e+00 0x50 <80 (2.500000) W13.9>>>> x = fixbv(0.0333, min=-1, max=1, res=0.0001) >>> print( x, hex(x), repr(x)) 3.332520e-02 0x222 <546 (0.033325) W15.0>

The /fixbv/ type does not automatically align or resize. The
*resize* funcition is used ot resize and align fixed-point
types. The *resize* function has not been implemented in the
package yet (WIP).