The functions below provide ways of combining, slicing, and extending
:class:`WireVectors<.WireVector>` in ways that are often useful in hardware
design. The functions below extend those member functions of the
:class:`.WireVector` class itself (which provides support for the Python
builtin :func:`len`, slicing e.g. wire[3:6],
:meth:`~.WireVector.zero_extended`, :meth:`~.WireVector.sign_extended`, and
many operators such as addition and multiplication).
.. autofunction:: pyrtl.concat
.. autofunction:: pyrtl.concat_list
.. autofunction:: pyrtl.match_bitwidth
.. autofunction:: pyrtl.truncate
.. autofunction:: pyrtl.chop
.. autofunction:: pyrtl.wire_struct
.. autofunction:: pyrtl.wire_matrix
:func:`.as_wires` coerces values to :class:`WireVectors<.WireVector>`. Most PyRTL helper functions and classes call :func:`.as_wires` on their inputs, to manage the mixture of constants and :class:`WireVectors<.WireVector>` that naturally occur in hardware development.
See :ref:`wirevector_coercion` for examples and more details.
.. autofunction:: pyrtl.as_wires
.. autofunction:: pyrtl.mux
.. autofunction:: pyrtl.select
.. autofunction:: pyrtl.enum_mux
.. autoclass:: pyrtl.helperfuncs.MatchedFields
:members:
:undoc-members:
.. autofunction:: pyrtl.match_bitpattern
.. autofunction:: pyrtl.bitfield_update
.. autofunction:: pyrtl.bitfield_update_set
Under the hood, every single value a PyRTL design operates on is a bit vector (which is, in turn, simply an integer of bounded power-of-two size. Interpreting these bit vectors as humans, and turning human understandable values into their corresponding bit vectors, can both be a bit of a pain. The functions below do not create any hardware but rather help in the process of reasoning about bit vector representations of human understandable values.
.. autofunction:: pyrtl.val_to_signed_integer
.. autoclass:: pyrtl.helperfuncs.ValueBitwidthTuple :members: value, bitwidth
.. autofunction:: pyrtl.infer_val_and_bitwidth
.. autofunction:: pyrtl.val_to_formatted_str
.. autofunction:: pyrtl.formatted_str_to_val
.. autofunction:: pyrtl.log2
.. autofunction:: pyrtl.set_debug_mode
.. autofunction:: pyrtl.probe
.. autofunction:: pyrtl.rtl_assert
.. autofunction:: pyrtl.and_all_bits
.. autofunction:: pyrtl.or_all_bits
.. autofunction:: pyrtl.xor_all_bits
.. autofunction:: pyrtl.parity
.. autofunction:: pyrtl.rtl_any
.. autofunction:: pyrtl.rtl_all
The functions below provide ways of comparing and arithmetically combining :class:`WireVectors<.WireVector>` in ways that are often useful in hardware design. The functions below extend those member functions of the :class:`.WireVector` class itself (which provides support for unsigned addition, subtraction, multiplication, comparison, and many others).
.. autofunction:: pyrtl.signed_add
.. autofunction:: pyrtl.signed_sub
.. autofunction:: pyrtl.signed_mult
.. autofunction:: pyrtl.signed_lt
.. autofunction:: pyrtl.signed_le
.. autofunction:: pyrtl.signed_gt
.. autofunction:: pyrtl.signed_ge
.. autofunction:: pyrtl.shift_left_logical
.. autofunction:: pyrtl.shift_left_arithmetic
.. autofunction:: pyrtl.shift_right_logical
.. autofunction:: pyrtl.shift_right_arithmetic
.. autofunction:: pyrtl.one_hot_to_binary
.. autofunction:: pyrtl.binary_to_one_hot