mirror of
https://github.com/myhdl/myhdl.git
synced 2025-01-24 21:52:56 +08:00
96 lines
2.9 KiB
ReStructuredText
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
|