1
0
mirror of https://github.com/myhdl/myhdl.git synced 2025-01-24 21:52:56 +08:00
2015-06-27 08:36:23 -04:00

96 lines
2.9 KiB
ReStructuredText

.. currentmodule:: myhdl
.. _new09:
***********************
What's new in MyHDL 0.9
***********************
Python 3 Support
================
Experimental Python 3 support has been added to MyHDL 0.9
See :doc:`/python3` for more info.
Interfaces (Conversion of attribute accesses)
=============================================
Rationale
---------
Complex designs often have many signals (ports) that are passed to
different levels of hierarchy. Typically, many of the signals can
logically be grouped together. Grouping the signals into an
*interface* simplifies the code, improves efficiency, and reduces
errors.
An *interface* is a collection of signals (:class:`Signal`) embedded
in an class/object as attributes. This provides a natural method
to group related signals and provides intuitive access through
attributes. Multiple level of objects and attributes provides a
hierarchy of signal structure if desired.
The following is an example of an *interface* definition::
class Complex:
def __init__(self, min=-2, max=2):
self.real = Signal(intbv(0, min=min, max=max))
self.imag = Signal(intbv(0, min=min, max=max))
Although previous versions supported *interfaces* for modeling,
`MyHDL generator`_\s which directly referenced attributes were not
convertible.
MyHDL now supports conversion of designs which contain attribute accesses.
The following
is an example using the above ``Complex`` interface definition::
a,b = Complex(-8,8), Complex(-8,8)
c = Complex(-128,128)
def complex_multiply(clock, reset, a, b, c):
@always_seq(clock.posedge, reset=reset)
def cmult():
c.real.next = (a.real*b.real) - (a.imag*b.imag)
c.imag.next = (a.real*b.imag) + (a.imag*b.real)
return cmult
Solution
--------
The proposed solution is to create unique names for attributes which
are used by `MyHDL generator`_\s. The converter will create a unique
name by using the name of the parent
and the name of the attribute along with the name of the MyHDL module
instance (if required for uniqueness). The converter will essentially
replace the "." with an "_" for each *interface* element.
Even though the target HDLs do not support *interfaces*, MyHDL is
able to add high-level features that compile during conversion to the
target HDL (Verilog and VHDL).
Conversion
----------
.. add details of the conversion, what policies are used to name
.. extend the Signals. Any useful information about the approach
.. or structure in the converter used.
Limitations
-----------
Currently, MyHDL only converts interfaces in the form of attribute accesses.
Dictionaries are not yet supported.
See also
--------
For additional information see the original proposal `mep-107`_.
.. _mep-107: http://dev.myhdl.org/meps/mep-107.html
.. _MyHDL generator: http://docs.myhdl.org/en/latest/manual/reference.html#myhdl-generators-and-trigger-objects