diff --git a/docs/amaranth/latest/.buildinfo b/docs/amaranth/latest/.buildinfo index 6c09b019..38b2e5f0 100644 --- a/docs/amaranth/latest/.buildinfo +++ b/docs/amaranth/latest/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 0a5f5fadae23a153c33d7e8b888496d0 +config: 36de01cd0578672b5c2c68cc1b6fb29b tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/amaranth/latest/.doctrees/environment.pickle b/docs/amaranth/latest/.doctrees/environment.pickle index 13d9c118..ec564def 100644 Binary files a/docs/amaranth/latest/.doctrees/environment.pickle and b/docs/amaranth/latest/.doctrees/environment.pickle differ diff --git a/docs/amaranth/latest/.doctrees/lang.doctree b/docs/amaranth/latest/.doctrees/lang.doctree index f7c054dd..40e49655 100644 Binary files a/docs/amaranth/latest/.doctrees/lang.doctree and b/docs/amaranth/latest/.doctrees/lang.doctree differ diff --git a/docs/amaranth/latest/_sources/lang.rst.txt b/docs/amaranth/latest/_sources/lang.rst.txt index 5884a653..81b9e575 100644 --- a/docs/amaranth/latest/_sources/lang.rst.txt +++ b/docs/amaranth/latest/_sources/lang.rst.txt @@ -432,20 +432,12 @@ Signals assigned in a :ref:`combinatorial ` domain are not affected b True -.. _lang-data: - -Data structures -=============== - -Amaranth provides aggregate data structures in the standard library module :mod:`amaranth.lib.data`. - - .. _lang-operators: Operators ========= -To describe computations, Amaranth values can be combined with each other or with :ref:`value-like ` objects using a rich array of arithmetic, bitwise, logical, bit sequence, and other *operators* to form *expressions*, which are themselves values. +To describe computations, Amaranth values can be combined with each other or with :ref:`value-like ` objects using a rich set of arithmetic, bitwise, logical, bit sequence, and other *operators* to form *expressions*, which are themselves values. .. _lang-abstractexpr: @@ -795,15 +787,56 @@ Choice operator The ``Mux(sel, val1, val0)`` choice expression (similar to the :ref:`conditional expression ` in Python) is equal to the operand ``val1`` if ``sel`` is non-zero, and to the other operand ``val0`` otherwise. If any of ``val1`` or ``val0`` are signed, the expression itself is signed as well. +.. _lang-array: + +Arrays +====== + +An *array* is a mutable collection that can be indexed not only with an :class:`int` or with a :ref:`value-like ` object. When indexed with an :class:`int`, it behaves like a :class:`list`. When indexed with a value-like object, it returns a proxy object containing the elements of the array that has three useful properties: + +* The result of accessing an attribute of the proxy object or indexing it is another proxy object that contains the elements transformed in the same way. +* When the proxy object is :ref:`cast to a value `, all of its elements are also cast to a value, and an element is selected using the index originally used with the array. +* The proxy object can be used both in an expression and :ref:`as the target of an assignment `. + +Crucially, this means that any Python object can be added to an array; the only requirement is that the final result of any computation involving it is a value-like object. For example: + +.. testcode:: + + pixels = Array([ + {"r": 180, "g": 92, "b": 230}, + {"r": 74, "g": 130, "b": 128}, + {"r": 115, "g": 58, "b": 31}, + ]) + +.. doctest:: + + >>> index = Signal(range(len(pixels))) + >>> pixels[index]["r"] + (proxy (array [180, 74, 115]) (sig index)) + +.. note:: + + An array becomes immutable after it is indexed for the first time. The elements of the array do not themselves become immutable, but it is not recommended to mutate them as the behavior can become unpredictable. + +.. important:: + + Each time an array proxy object with ``n`` elements is used in an expression, it generates a multiplexer with ``n`` branches. However, using ``k`` of such array proxy objects in an expression generates a multiplexer with ``n**k`` branches. This can generate extremely large circuits that may quickly exhaust the resources of the synthesis target or even the available RAM. + + +.. _lang-data: + +Data structures +=============== + +Amaranth provides aggregate data structures in the standard library module :mod:`amaranth.lib.data`. + + .. _lang-modules: Modules ======= -A *module* is a unit of the Amaranth design hierarchy: the smallest collection of logic that can be independently simulated, synthesized, or otherwise processed. Modules associate signals with :ref:`control domains `, provide :ref:`control flow syntax `, manage clock domains, and aggregate submodules. - -.. TODO: link to clock domains -.. TODO: link to submodules +A *module* is a unit of the Amaranth design hierarchy: the smallest collection of logic that can be independently simulated, synthesized, or otherwise processed. Modules associate signals with :ref:`control domains `, provide :ref:`control flow syntax `, manage :ref:`clock domains `, and aggregate :ref:`submodules `. Every Amaranth design starts with a fresh module: @@ -825,8 +858,6 @@ A design can also have any amount of user-defined *synchronous domains*, also ca The behavior of assignments differs for signals in :ref:`combinatorial ` and :ref:`synchronous ` domains. Collectively, signals in synchronous domains contain the state of a design, whereas signals in the combinatorial domain cannot form feedback loops or hold state. -.. TODO: link to clock domains - .. _lang-assigns: @@ -849,9 +880,7 @@ Similar to :ref:`how Amaranth operators work `, an Amaranth a Assignment targets ------------------ -The target of an assignment can be more complex than a single signal. It is possible to assign to any combination of signals, :ref:`bit slices `, :ref:`concatenations `, and :ref:`part selects ` as long as it includes no other values: - -.. TODO: mention arrays, records, user values +The target of an assignment can be more complex than a single signal. It is possible to assign to any combination of signals, :ref:`bit slices `, :ref:`concatenations `, :ref:`part selects `, and :ref:`array proxy objects ` as long as it includes no other values: .. doctest:: @@ -1385,7 +1414,7 @@ Elaboration Amaranth designs are built from a hierarchy of smaller subdivisions, which are called *elaboratables*. The process of creating a data structure representing the behavior of a complete design by composing such subdivisions together is called *elaboration*. -An elaboratable is any Python object that inherits from the :class:`Elaboratable` base class and implements the ``elaborate`` method: +An elaboratable is any Python object that inherits from the :class:`Elaboratable` base class and implements the :meth:`~Elaboratable.elaborate` method: .. testcode:: @@ -1397,19 +1426,19 @@ An elaboratable is any Python object that inherits from the :class:`Elaboratable return m -The ``elaborate`` method must either return an instance of :class:`Module` to describe the behavior of the elaboratable, or delegate it by returning another elaboratable object. +The :meth:`~Elaboratable.elaborate` method must either return an instance of :class:`Module` or :class:`Instance` to describe the behavior of the elaboratable, or delegate it by returning another elaboratable object. .. note:: - Instances of :class:`Module` also implement the ``elaborate`` method, which returns a special object that represents a fragment of a netlist. Such an object cannot be constructed without using :class:`Module`. + Instances of :class:`Module` also implement the :meth:`~Elaboratable.elaborate` method, which returns a special object that represents a fragment of a netlist. Such an object cannot be constructed without using :class:`Module`. -The :pc:`platform` argument received by the ``elaborate`` method can be :pc:`None`, an instance of :ref:`a built-in platform `, or a custom object. It is used for `dependency injection `_ and to contain the state of a design while it is being elaborated. +The :pc:`platform` argument received by the :meth:`~Elaboratable.elaborate` method can be :pc:`None`, an instance of :ref:`a built-in platform `, or a custom object. It is used for `dependency injection `_ and to contain the state of a design while it is being elaborated. .. important:: - The ``elaborate`` method should not modify the ``self`` object it receives other than for debugging and experimentation. Elaborating the same design twice with two identical platform objects should produce two identical netlists. If the design needs to be modified after construction, this should happen before elaboration. + The :meth:`~Elaboratable.elaborate` method should not modify the ``self`` object it receives other than for debugging and experimentation. Elaborating the same design twice with two identical platform objects should produce two identical netlists. If the design needs to be modified after construction, this should happen before elaboration. - It is not possible to ensure that a design which modifies itself during elaboration is correctly converted to a netlist because the relative order in which the ``elaborate`` methods are called within a single design is not guaranteed. + It is not possible to ensure that a design which modifies itself during elaboration is correctly converted to a netlist because the relative order in which the :meth:`~Elaboratable.elaborate` methods are called within a single design is not guaranteed. The Amaranth standard library provides *components*: elaboratable objects that also include a description of their interface. Unless otherwise necessary, an elaboratable should inherit from :class:`amaranth.lib.wiring.Component` rather than plain :class:`Elaboratable`. See the :ref:`introduction to interfaces and components ` for details. @@ -1419,7 +1448,7 @@ The Amaranth standard library provides *components*: elaboratable objects that a Submodules ---------- -An elaboratable can be included within another elaboratable by adding it as a submodule: +An elaboratable can be included within another elaboratable, which is called its *containing elaboratable*, by adding it as a submodule: .. testcode:: @@ -1443,6 +1472,8 @@ A submodule can also be added without specifying a name: If a name is not explicitly specified for a submodule, one will be generated and assigned automatically. Designs with many autogenerated names can be difficult to debug, so a name should usually be supplied. +A non-Amaranth design unit can be added as a submodule using an :ref:`instance `. + .. _lang-controlinserter: @@ -1520,7 +1551,58 @@ The application of control flow modifiers in it causes the behavior of the final Renaming domains ---------------- -.. todo:: Write this section about :class:`DomainRenamer` +A reusable :ref:`elaboratable ` usually specifies the use of one or more :ref:`clock domains ` while leaving the details of clocking and initialization to a later phase in the design process. :class:`DomainRenamer` can be used to alter a reusable elaboratable for integration in a specific design. Most elaboratables use a single clock domain named ``sync``, and :class:`DomainRenamer` makes it easy to place such elaboratables in any clock domain of a design. + +Clock domains can be renamed using the syntax :pc:`DomainRenamer(domains)(elaboratable)`, where :pc:`domains` is a mapping from clock domain names to clock domain names and :pc:`elaboratable` is any :ref:`elaboratable ` object. The keys of :pc:`domains` correspond to existing clock domain names specified by :pc:`elaboratable`, and the values of :pc:`domains` correspond to the clock domain names from the containing elaboratable that will be used instead. When only the ``sync`` domain is being renamed, instead of writing :pc:`DomainRenamer({"sync": name})(elaboratable)`, the equivalent but shorter :pc:`DomainRenamer(name)(elaboratable)` syntax can be used. + +The result of renaming clock domains in an elaboratable is, itself, an elaboratable object. A common way to rename domains is to apply :class:`DomainRenamer` to another elaboratable while adding it as a submodule: + +.. testcode:: + :hide: + + m = Module() + +.. testcode:: + + m.submodules.counter = counter = DomainRenamer("video")(counter) + +Renaming a clock domain affects all logic within a given elaboratable and clock domain, which includes the submodules of that elaboratable. It does not affect any logic outside of that elaboratable. + +.. note:: + + Renaming domains in an elaboratable does not mutate it; a new proxy object is returned that forwards attribute accesses and method calls to the original elaboratable. Whenever this proxy object is elaborated, it manipulates the circuit defined by the original elaboratable to use the requested clock domain. + +.. note:: + + It is possible to rename domains in an elaboratable and also apply :ref:`control flow modifiers `. + +Consider the following code: + +.. testcode:: + :hide: + + count = Signal(8) + zero = Signal() + +.. testcode:: + + m = Module() + m.d.sync += count.eq(count + 1) + m.d.comb += zero.eq(count == 0) + + m = DomainRenamer({"sync": "video"})(m) + +The renaming of the ``sync`` clock domain in it causes the behavior of the final :pc:`m` to be identical to that of this module: + +.. testcode:: + + m = Module() + m.d.video += count.eq(count + 1) + m.d.comb += zero.eq(count == 0) + +.. tip:: + + A combinatorial signal can change synchronously to a clock domain, as in the example above, in which case it may only be sampled from the same clock domain unless explicitly synchronized. Renaming a clock domain must be assumed to potentially affect any output of an elaboratable. .. _lang-memory: @@ -1531,7 +1613,97 @@ Memories .. todo:: Write this section. +.. _lang-instance: + Instances ========= -.. todo:: Write this section. +.. attributes are not documented because they can be easily used to break soundness and we don't document them for signals either; they are rarely necessary for interoperability + +A submodule written in a non-Amaranth language is called an *instance*. An instance can be written in any language supported by the synthesis toolchain; usually, that is (System)Verilog, VHDL, or a language that is translated to one of those two. Adding an instance as a submodule corresponds to "module instantiation" in (System)Verilog and "component instantiation" in VHDL, and is done by specifying the following: + +* The *type* of an instance is the name of a (System)Verilog module, VHDL entity or component, or another HDL design unit that is being instantiated. +* The *name* of an instance is the name of the submodule within the containing elaboratable. +* The *attributes* of an instance correspond to attributes of a (System)Verilog module instance, or a custom attribute of a VHDL entity or component instance. Attributes applied to instances are interpreted by the synthesis toolchain rather than the HDL. +* The *parameters* of an instance correspond to parameters of a (System)Verilog module instance, or a generic constant of a VHDL entity or component instance. Not all HDLs allow their design units to be parameterized during instantiation. +* The *inputs* and *outputs* of an instance correspond to inputs and outputs of the external design unit. + +An instance can be added as a submodule using the :pc:`m.submodules.name = Instance("type", ...)` syntax, where :pc:`"type"` is the type of the instance as a string (which is passed to the synthesis toolchain uninterpreted), and :pc:`...` is a list of parameters, inputs, and outputs. Depending on whether the name of an attribute, parameter, input, or output can be written as a part of a Python identifier or not, one of two possible syntaxes is used to specify them: + +* An attribute is specified using the :pc:`a_ANAME=attr` or :pc:`("a", "ANAME", attr)` syntaxes. The :pc:`attr` must be an :class:`int`, a :class:`str`, or a :class:`Const`. +* A parameter is specified using the :pc:`p_PNAME=param` or :pc:`("p", "PNAME", param)` syntaxes. The :pc:`param` must be an :class:`int`, a :class:`str`, or a :class:`Const`. +* An input is specified using the :pc:`i_INAME=in_val` or :pc:`("i", "INAME", in_val)` syntaxes. The :pc:`in_val` must be a :ref:`value-like ` object. +* An output is specified using the :pc:`o_ONAME=out_val` or :pc:`("o", "ONAME", out_val)` syntaxes. The :pc:`out_val` must be a :ref:`value-like ` object that casts to a :class:`Signal`. + +The two following examples use both syntaxes to add the same instance of type ``external`` as a submodule named ``processor``: + +.. testcode:: + :hide: + + i_data = Signal(8) + o_data = Signal(8) + m = Module() + +.. testcode:: + + m.submodules.processor = Instance("external", + p_width=8, + i_clk=ClockSignal(), + i_rst=ResetSignal(), + i_en=1, + i_mode=Const(3, unsigned(4)), + i_data_in=i_data, + o_data_out=o_data, + ) + +.. testcode:: + :hide: + + m = Module() + +.. testcode:: + + m.submodules.processor = Instance("external", + ("p", "width", 8), + ("i", "clk", ClockSignal()), + ("i", "rst", ResetSignal()), + ("i", "en", 1), + ("i", "mode", Const(3, unsigned(4))), + ("i", "data_in", i_data), + ("o", "data_out", o_data), + ) + +Like a regular submodule, an instance can also be added without specifying a name: + +.. testcode:: + + m.submodules += Instance("external", + # ... + ) + +.. tip:: + + If a name is not explicitly specified for a submodule, one will be generated and assigned automatically. Designs with many autogenerated names can be difficult to debug, so a name should usually be supplied. + +Although an :class:`Instance` is not an elaboratable, as a special case, it can be returned from the :pc:`elaborate()` method. This is conveinent for implementing an elaboratable that adorns an instance with an Amaranth interface: + +.. testcode:: + + from amaranth import vendor + + + class FlipFlop(Elaboratable): + def __init__(self): + self.d = Signal() + self.q = Signal() + + def elaborate(self, platform): + # Decide on the instance to use based on the platform we are elaborating for. + if isinstance(platform, vendor.LatticeICE40Platform): + return Instance("SB_DFF", + i_C=ClockSignal(), + i_D=self.d, + o_Q=self.q + ) + else: + raise NotImplementedError \ No newline at end of file diff --git a/docs/amaranth/latest/_static/documentation_options.js b/docs/amaranth/latest/_static/documentation_options.js index 42f0df79..4cc9e7d5 100644 --- a/docs/amaranth/latest/_static/documentation_options.js +++ b/docs/amaranth/latest/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.4.1.dev41', + VERSION: '0.4.1.dev45', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/amaranth/latest/changes.html b/docs/amaranth/latest/changes.html index edb2b09c..80160ded 100644 --- a/docs/amaranth/latest/changes.html +++ b/docs/amaranth/latest/changes.html @@ -4,7 +4,7 @@ - Changelog — Amaranth language & toolchain 0.4.1.dev41 documentation + Changelog — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
- 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
diff --git a/docs/amaranth/latest/contrib.html b/docs/amaranth/latest/contrib.html index a4ff0333..12992931 100644 --- a/docs/amaranth/latest/contrib.html +++ b/docs/amaranth/latest/contrib.html @@ -4,7 +4,7 @@ - Contributing — Amaranth language & toolchain 0.4.1.dev41 documentation + Contributing — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -38,7 +38,7 @@
- 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
diff --git a/docs/amaranth/latest/cover.html b/docs/amaranth/latest/cover.html index af6b57ec..53d07a7e 100644 --- a/docs/amaranth/latest/cover.html +++ b/docs/amaranth/latest/cover.html @@ -4,7 +4,7 @@ - Amaranth project documentation — Amaranth language & toolchain 0.4.1.dev41 documentation + Amaranth project documentation — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -38,7 +38,7 @@
- 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
diff --git a/docs/amaranth/latest/genindex.html b/docs/amaranth/latest/genindex.html index bd3f8373..34d58010 100644 --- a/docs/amaranth/latest/genindex.html +++ b/docs/amaranth/latest/genindex.html @@ -3,7 +3,7 @@ - Index — Amaranth language & toolchain 0.4.1.dev41 documentation + Index — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -14,7 +14,7 @@ - + @@ -36,7 +36,7 @@
- 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
diff --git a/docs/amaranth/latest/index.html b/docs/amaranth/latest/index.html index 15c8f29e..271665c1 100644 --- a/docs/amaranth/latest/index.html +++ b/docs/amaranth/latest/index.html @@ -4,7 +4,7 @@ - Language & toolchain — Amaranth language & toolchain 0.4.1.dev41 documentation + Language & toolchain — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
- 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
@@ -127,8 +127,9 @@

Language & toolchainValue casting
  • Constant casting
  • Signals
  • -
  • Data structures
  • Operators
  • +
  • Arrays
  • +
  • Data structures
  • Modules
  • Control domains
  • Control flow
  • diff --git a/docs/amaranth/latest/install.html b/docs/amaranth/latest/install.html index 81923e9d..1210b41b 100644 --- a/docs/amaranth/latest/install.html +++ b/docs/amaranth/latest/install.html @@ -4,7 +4,7 @@ - Installation — Amaranth language & toolchain 0.4.1.dev41 documentation + Installation — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
    - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
    diff --git a/docs/amaranth/latest/intro.html b/docs/amaranth/latest/intro.html index f8089e9b..dd5ff8d2 100644 --- a/docs/amaranth/latest/intro.html +++ b/docs/amaranth/latest/intro.html @@ -4,7 +4,7 @@ - Introduction — Amaranth language & toolchain 0.4.1.dev41 documentation + Introduction — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
    - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
    diff --git a/docs/amaranth/latest/lang.html b/docs/amaranth/latest/lang.html index 9fe4f7b1..d3aa8820 100644 --- a/docs/amaranth/latest/lang.html +++ b/docs/amaranth/latest/lang.html @@ -4,7 +4,7 @@ - Language guide — Amaranth language & toolchain 0.4.1.dev41 documentation + Language guide — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
    - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
    @@ -82,7 +82,6 @@
  • Reset-less signals
  • -
  • Data structures
  • Operators
  • +
  • Arrays
  • +
  • Data structures
  • Modules
  • Control domains
    • Assigning to signals
    • @@ -453,13 +454,9 @@

      Signal shapes -

      Data structures

      -

      Amaranth provides aggregate data structures in the standard library module amaranth.lib.data.

      -

      Operators

      -

      To describe computations, Amaranth values can be combined with each other or with value-like objects using a rich array of arithmetic, bitwise, logical, bit sequence, and other operators to form expressions, which are themselves values.

      +

      To describe computations, Amaranth values can be combined with each other or with value-like objects using a rich set of arithmetic, bitwise, logical, bit sequence, and other operators to form expressions, which are themselves values.

      Performing or describing computations?

      Code written in the Python language performs computations on concrete objects, like integers, with the goal of calculating a concrete result:

      @@ -886,9 +883,43 @@

      Signal shapesMux(sel, val1, val0) choice expression (similar to the conditional expression in Python) is equal to the operand val1 if sel is non-zero, and to the other operand val0 otherwise. If any of val1 or val0 are signed, the expression itself is signed as well.

      +
      +

      Arrays

      +

      An array is a mutable collection that can be indexed not only with an int or with a value-like object. When indexed with an int, it behaves like a list. When indexed with a value-like object, it returns a proxy object containing the elements of the array that has three useful properties:

      +
        +
      • The result of accessing an attribute of the proxy object or indexing it is another proxy object that contains the elements transformed in the same way.

      • +
      • When the proxy object is cast to a value, all of its elements are also cast to a value, and an element is selected using the index originally used with the array.

      • +
      • The proxy object can be used both in an expression and as the target of an assignment.

      • +
      +

      Crucially, this means that any Python object can be added to an array; the only requirement is that the final result of any computation involving it is a value-like object. For example:

      +
      pixels = Array([
      +    {"r": 180, "g": 92, "b": 230},
      +    {"r": 74, "g": 130, "b": 128},
      +    {"r": 115, "g": 58, "b": 31},
      +])
      +
      +
      +
      >>> index = Signal(range(len(pixels)))
      +>>> pixels[index]["r"]
      +(proxy (array [180, 74, 115]) (sig index))
      +
      +
      +
      +

      Note

      +

      An array becomes immutable after it is indexed for the first time. The elements of the array do not themselves become immutable, but it is not recommended to mutate them as the behavior can become unpredictable.

      +
      +
      +

      Important

      +

      Each time an array proxy object with n elements is used in an expression, it generates a multiplexer with n branches. However, using k of such array proxy objects in an expression generates a multiplexer with n**k branches. This can generate extremely large circuits that may quickly exhaust the resources of the synthesis target or even the available RAM.

      +
      +
      +
      +

      Data structures

      +

      Amaranth provides aggregate data structures in the standard library module amaranth.lib.data.

      +

      Modules

      -

      A module is a unit of the Amaranth design hierarchy: the smallest collection of logic that can be independently simulated, synthesized, or otherwise processed. Modules associate signals with control domains, provide control flow syntax, manage clock domains, and aggregate submodules.

      +

      A module is a unit of the Amaranth design hierarchy: the smallest collection of logic that can be independently simulated, synthesized, or otherwise processed. Modules associate signals with control domains, provide control flow syntax, manage clock domains, and aggregate submodules.

      Every Amaranth design starts with a fresh module:

      >>> m = Module()
       
      @@ -912,7 +943,7 @@

      Signal shapes

      Assignment targets

      -

      The target of an assignment can be more complex than a single signal. It is possible to assign to any combination of signals, bit slices, concatenations, and part selects as long as it includes no other values:

      +

      The target of an assignment can be more complex than a single signal. It is possible to assign to any combination of signals, bit slices, concatenations, part selects, and array proxy objects as long as it includes no other values:

      >>> a = Signal(8)
       >>> b = Signal(4)
       >>> Cat(a, b).eq(0)
      @@ -1268,7 +1299,7 @@ 

      Signal shapes

      Elaboration

      Amaranth designs are built from a hierarchy of smaller subdivisions, which are called elaboratables. The process of creating a data structure representing the behavior of a complete design by composing such subdivisions together is called elaboration.

      -

      An elaboratable is any Python object that inherits from the Elaboratable base class and implements the elaborate method:

      +

      An elaboratable is any Python object that inherits from the Elaboratable base class and implements the elaborate() method:

      class Counter(Elaboratable):
           def elaborate(self, platform):
               m = Module()
      @@ -1278,21 +1309,21 @@ 

      Signal shapesreturn m

      -

      The elaborate method must either return an instance of Module to describe the behavior of the elaboratable, or delegate it by returning another elaboratable object.

      +

      The elaborate() method must either return an instance of Module or Instance to describe the behavior of the elaboratable, or delegate it by returning another elaboratable object.

      Note

      -

      Instances of Module also implement the elaborate method, which returns a special object that represents a fragment of a netlist. Such an object cannot be constructed without using Module.

      +

      Instances of Module also implement the elaborate() method, which returns a special object that represents a fragment of a netlist. Such an object cannot be constructed without using Module.

      -

      The platform argument received by the elaborate method can be None, an instance of a built-in platform, or a custom object. It is used for dependency injection and to contain the state of a design while it is being elaborated.

      +

      The platform argument received by the elaborate() method can be None, an instance of a built-in platform, or a custom object. It is used for dependency injection and to contain the state of a design while it is being elaborated.

      Important

      -

      The elaborate method should not modify the self object it receives other than for debugging and experimentation. Elaborating the same design twice with two identical platform objects should produce two identical netlists. If the design needs to be modified after construction, this should happen before elaboration.

      -

      It is not possible to ensure that a design which modifies itself during elaboration is correctly converted to a netlist because the relative order in which the elaborate methods are called within a single design is not guaranteed.

      +

      The elaborate() method should not modify the self object it receives other than for debugging and experimentation. Elaborating the same design twice with two identical platform objects should produce two identical netlists. If the design needs to be modified after construction, this should happen before elaboration.

      +

      It is not possible to ensure that a design which modifies itself during elaboration is correctly converted to a netlist because the relative order in which the elaborate() methods are called within a single design is not guaranteed.

      The Amaranth standard library provides components: elaboratable objects that also include a description of their interface. Unless otherwise necessary, an elaboratable should inherit from amaranth.lib.wiring.Component rather than plain Elaboratable. See the introduction to interfaces and components for details.

      Submodules

      -

      An elaboratable can be included within another elaboratable by adding it as a submodule:

      +

      An elaboratable can be included within another elaboratable, which is called its containing elaboratable, by adding it as a submodule:

      m.submodules.counter = counter = Counter()
       
      @@ -1310,6 +1341,7 @@

      Signal shapesTip

      If a name is not explicitly specified for a submodule, one will be generated and assigned automatically. Designs with many autogenerated names can be difficult to debug, so a name should usually be supplied.

      +

      A non-Amaranth design unit can be added as a submodule using an instance.

      Modifying control flow

      @@ -1358,24 +1390,118 @@

      Signal shapes

      Renaming domains

      -
      -

      Todo

      -

      Write this section about DomainRenamer

      +

      A reusable elaboratable usually specifies the use of one or more clock domains while leaving the details of clocking and initialization to a later phase in the design process. DomainRenamer can be used to alter a reusable elaboratable for integration in a specific design. Most elaboratables use a single clock domain named sync, and DomainRenamer makes it easy to place such elaboratables in any clock domain of a design.

      +

      Clock domains can be renamed using the syntax DomainRenamer(domains)(elaboratable), where domains is a mapping from clock domain names to clock domain names and elaboratable is any elaboratable object. The keys of domains correspond to existing clock domain names specified by elaboratable, and the values of domains correspond to the clock domain names from the containing elaboratable that will be used instead. When only the sync domain is being renamed, instead of writing DomainRenamer({"sync": name})(elaboratable), the equivalent but shorter DomainRenamer(name)(elaboratable) syntax can be used.

      +

      The result of renaming clock domains in an elaboratable is, itself, an elaboratable object. A common way to rename domains is to apply DomainRenamer to another elaboratable while adding it as a submodule:

      +
      m.submodules.counter = counter = DomainRenamer("video")(counter)
      +
      +
      +

      Renaming a clock domain affects all logic within a given elaboratable and clock domain, which includes the submodules of that elaboratable. It does not affect any logic outside of that elaboratable.

      +
      +

      Note

      +

      Renaming domains in an elaboratable does not mutate it; a new proxy object is returned that forwards attribute accesses and method calls to the original elaboratable. Whenever this proxy object is elaborated, it manipulates the circuit defined by the original elaboratable to use the requested clock domain.

      +
      +
      +

      Note

      +

      It is possible to rename domains in an elaboratable and also apply control flow modifiers.

      +
      +

      Consider the following code:

      +
      m = Module()
      +m.d.sync += count.eq(count + 1)
      +m.d.comb += zero.eq(count == 0)
      +
      +m = DomainRenamer({"sync": "video"})(m)
      +
      +
      +

      The renaming of the sync clock domain in it causes the behavior of the final m to be identical to that of this module:

      +
      m = Module()
      +m.d.video += count.eq(count + 1)
      +m.d.comb += zero.eq(count == 0)
      +
      +
      +
      +

      Tip

      +

      A combinatorial signal can change synchronously to a clock domain, as in the example above, in which case it may only be sampled from the same clock domain unless explicitly synchronized. Renaming a clock domain must be assumed to potentially affect any output of an elaboratable.

      Memories

      -
      +

      Todo

      Write this section.

      -

      Instances

      -
      -

      Todo

      -

      Write this section.

      +

      Instances

      +

      A submodule written in a non-Amaranth language is called an instance. An instance can be written in any language supported by the synthesis toolchain; usually, that is (System)Verilog, VHDL, or a language that is translated to one of those two. Adding an instance as a submodule corresponds to “module instantiation” in (System)Verilog and “component instantiation” in VHDL, and is done by specifying the following:

      +
        +
      • The type of an instance is the name of a (System)Verilog module, VHDL entity or component, or another HDL design unit that is being instantiated.

      • +
      • The name of an instance is the name of the submodule within the containing elaboratable.

      • +
      • The attributes of an instance correspond to attributes of a (System)Verilog module instance, or a custom attribute of a VHDL entity or component instance. Attributes applied to instances are interpreted by the synthesis toolchain rather than the HDL.

      • +
      • The parameters of an instance correspond to parameters of a (System)Verilog module instance, or a generic constant of a VHDL entity or component instance. Not all HDLs allow their design units to be parameterized during instantiation.

      • +
      • The inputs and outputs of an instance correspond to inputs and outputs of the external design unit.

      • +
      +

      An instance can be added as a submodule using the m.submodules.name = Instance("type", ...) syntax, where "type" is the type of the instance as a string (which is passed to the synthesis toolchain uninterpreted), and ... is a list of parameters, inputs, and outputs. Depending on whether the name of an attribute, parameter, input, or output can be written as a part of a Python identifier or not, one of two possible syntaxes is used to specify them:

      +
        +
      • An attribute is specified using the a_ANAME=attr or ("a", "ANAME", attr) syntaxes. The attr must be an int, a str, or a Const.

      • +
      • A parameter is specified using the p_PNAME=param or ("p", "PNAME", param) syntaxes. The param must be an int, a str, or a Const.

      • +
      • An input is specified using the i_INAME=in_val or ("i", "INAME", in_val) syntaxes. The in_val must be a value-like object.

      • +
      • An output is specified using the o_ONAME=out_val or ("o", "ONAME", out_val) syntaxes. The out_val must be a value-like object that casts to a Signal.

      • +
      +

      The two following examples use both syntaxes to add the same instance of type external as a submodule named processor:

      +
      m.submodules.processor = Instance("external",
      +    p_width=8,
      +    i_clk=ClockSignal(),
      +    i_rst=ResetSignal(),
      +    i_en=1,
      +    i_mode=Const(3, unsigned(4)),
      +    i_data_in=i_data,
      +    o_data_out=o_data,
      +)
      +
      +
      +
      m.submodules.processor = Instance("external",
      +    ("p", "width", 8),
      +    ("i", "clk", ClockSignal()),
      +    ("i", "rst", ResetSignal()),
      +    ("i", "en", 1),
      +    ("i", "mode", Const(3, unsigned(4))),
      +    ("i", "data_in", i_data),
      +    ("o", "data_out", o_data),
      +)
      +
      +
      +

      Like a regular submodule, an instance can also be added without specifying a name:

      +
      m.submodules += Instance("external",
      +    # ...
      +)
      +
      +
      +
      +

      Tip

      +

      If a name is not explicitly specified for a submodule, one will be generated and assigned automatically. Designs with many autogenerated names can be difficult to debug, so a name should usually be supplied.

      +
      +

      Although an Instance is not an elaboratable, as a special case, it can be returned from the elaborate() method. This is conveinent for implementing an elaboratable that adorns an instance with an Amaranth interface:

      +
      from amaranth import vendor
      +
      +
      +class FlipFlop(Elaboratable):
      +    def __init__(self):
      +        self.d = Signal()
      +        self.q = Signal()
      +
      +    def elaborate(self, platform):
      +        # Decide on the instance to use based on the platform we are elaborating for.
      +        if isinstance(platform, vendor.LatticeICE40Platform):
      +            return Instance("SB_DFF",
      +                i_C=ClockSignal(),
      +                i_D=self.d,
      +                o_Q=self.q
      +            )
      +        else:
      +            raise NotImplementedError
      +
      diff --git a/docs/amaranth/latest/lang.rst b/docs/amaranth/latest/lang.rst index 5884a653..81b9e575 100644 --- a/docs/amaranth/latest/lang.rst +++ b/docs/amaranth/latest/lang.rst @@ -432,20 +432,12 @@ Signals assigned in a :ref:`combinatorial ` domain are not affected b True -.. _lang-data: - -Data structures -=============== - -Amaranth provides aggregate data structures in the standard library module :mod:`amaranth.lib.data`. - - .. _lang-operators: Operators ========= -To describe computations, Amaranth values can be combined with each other or with :ref:`value-like ` objects using a rich array of arithmetic, bitwise, logical, bit sequence, and other *operators* to form *expressions*, which are themselves values. +To describe computations, Amaranth values can be combined with each other or with :ref:`value-like ` objects using a rich set of arithmetic, bitwise, logical, bit sequence, and other *operators* to form *expressions*, which are themselves values. .. _lang-abstractexpr: @@ -795,15 +787,56 @@ Choice operator The ``Mux(sel, val1, val0)`` choice expression (similar to the :ref:`conditional expression ` in Python) is equal to the operand ``val1`` if ``sel`` is non-zero, and to the other operand ``val0`` otherwise. If any of ``val1`` or ``val0`` are signed, the expression itself is signed as well. +.. _lang-array: + +Arrays +====== + +An *array* is a mutable collection that can be indexed not only with an :class:`int` or with a :ref:`value-like ` object. When indexed with an :class:`int`, it behaves like a :class:`list`. When indexed with a value-like object, it returns a proxy object containing the elements of the array that has three useful properties: + +* The result of accessing an attribute of the proxy object or indexing it is another proxy object that contains the elements transformed in the same way. +* When the proxy object is :ref:`cast to a value `, all of its elements are also cast to a value, and an element is selected using the index originally used with the array. +* The proxy object can be used both in an expression and :ref:`as the target of an assignment `. + +Crucially, this means that any Python object can be added to an array; the only requirement is that the final result of any computation involving it is a value-like object. For example: + +.. testcode:: + + pixels = Array([ + {"r": 180, "g": 92, "b": 230}, + {"r": 74, "g": 130, "b": 128}, + {"r": 115, "g": 58, "b": 31}, + ]) + +.. doctest:: + + >>> index = Signal(range(len(pixels))) + >>> pixels[index]["r"] + (proxy (array [180, 74, 115]) (sig index)) + +.. note:: + + An array becomes immutable after it is indexed for the first time. The elements of the array do not themselves become immutable, but it is not recommended to mutate them as the behavior can become unpredictable. + +.. important:: + + Each time an array proxy object with ``n`` elements is used in an expression, it generates a multiplexer with ``n`` branches. However, using ``k`` of such array proxy objects in an expression generates a multiplexer with ``n**k`` branches. This can generate extremely large circuits that may quickly exhaust the resources of the synthesis target or even the available RAM. + + +.. _lang-data: + +Data structures +=============== + +Amaranth provides aggregate data structures in the standard library module :mod:`amaranth.lib.data`. + + .. _lang-modules: Modules ======= -A *module* is a unit of the Amaranth design hierarchy: the smallest collection of logic that can be independently simulated, synthesized, or otherwise processed. Modules associate signals with :ref:`control domains `, provide :ref:`control flow syntax `, manage clock domains, and aggregate submodules. - -.. TODO: link to clock domains -.. TODO: link to submodules +A *module* is a unit of the Amaranth design hierarchy: the smallest collection of logic that can be independently simulated, synthesized, or otherwise processed. Modules associate signals with :ref:`control domains `, provide :ref:`control flow syntax `, manage :ref:`clock domains `, and aggregate :ref:`submodules `. Every Amaranth design starts with a fresh module: @@ -825,8 +858,6 @@ A design can also have any amount of user-defined *synchronous domains*, also ca The behavior of assignments differs for signals in :ref:`combinatorial ` and :ref:`synchronous ` domains. Collectively, signals in synchronous domains contain the state of a design, whereas signals in the combinatorial domain cannot form feedback loops or hold state. -.. TODO: link to clock domains - .. _lang-assigns: @@ -849,9 +880,7 @@ Similar to :ref:`how Amaranth operators work `, an Amaranth a Assignment targets ------------------ -The target of an assignment can be more complex than a single signal. It is possible to assign to any combination of signals, :ref:`bit slices `, :ref:`concatenations `, and :ref:`part selects ` as long as it includes no other values: - -.. TODO: mention arrays, records, user values +The target of an assignment can be more complex than a single signal. It is possible to assign to any combination of signals, :ref:`bit slices `, :ref:`concatenations `, :ref:`part selects `, and :ref:`array proxy objects ` as long as it includes no other values: .. doctest:: @@ -1385,7 +1414,7 @@ Elaboration Amaranth designs are built from a hierarchy of smaller subdivisions, which are called *elaboratables*. The process of creating a data structure representing the behavior of a complete design by composing such subdivisions together is called *elaboration*. -An elaboratable is any Python object that inherits from the :class:`Elaboratable` base class and implements the ``elaborate`` method: +An elaboratable is any Python object that inherits from the :class:`Elaboratable` base class and implements the :meth:`~Elaboratable.elaborate` method: .. testcode:: @@ -1397,19 +1426,19 @@ An elaboratable is any Python object that inherits from the :class:`Elaboratable return m -The ``elaborate`` method must either return an instance of :class:`Module` to describe the behavior of the elaboratable, or delegate it by returning another elaboratable object. +The :meth:`~Elaboratable.elaborate` method must either return an instance of :class:`Module` or :class:`Instance` to describe the behavior of the elaboratable, or delegate it by returning another elaboratable object. .. note:: - Instances of :class:`Module` also implement the ``elaborate`` method, which returns a special object that represents a fragment of a netlist. Such an object cannot be constructed without using :class:`Module`. + Instances of :class:`Module` also implement the :meth:`~Elaboratable.elaborate` method, which returns a special object that represents a fragment of a netlist. Such an object cannot be constructed without using :class:`Module`. -The :pc:`platform` argument received by the ``elaborate`` method can be :pc:`None`, an instance of :ref:`a built-in platform `, or a custom object. It is used for `dependency injection `_ and to contain the state of a design while it is being elaborated. +The :pc:`platform` argument received by the :meth:`~Elaboratable.elaborate` method can be :pc:`None`, an instance of :ref:`a built-in platform `, or a custom object. It is used for `dependency injection `_ and to contain the state of a design while it is being elaborated. .. important:: - The ``elaborate`` method should not modify the ``self`` object it receives other than for debugging and experimentation. Elaborating the same design twice with two identical platform objects should produce two identical netlists. If the design needs to be modified after construction, this should happen before elaboration. + The :meth:`~Elaboratable.elaborate` method should not modify the ``self`` object it receives other than for debugging and experimentation. Elaborating the same design twice with two identical platform objects should produce two identical netlists. If the design needs to be modified after construction, this should happen before elaboration. - It is not possible to ensure that a design which modifies itself during elaboration is correctly converted to a netlist because the relative order in which the ``elaborate`` methods are called within a single design is not guaranteed. + It is not possible to ensure that a design which modifies itself during elaboration is correctly converted to a netlist because the relative order in which the :meth:`~Elaboratable.elaborate` methods are called within a single design is not guaranteed. The Amaranth standard library provides *components*: elaboratable objects that also include a description of their interface. Unless otherwise necessary, an elaboratable should inherit from :class:`amaranth.lib.wiring.Component` rather than plain :class:`Elaboratable`. See the :ref:`introduction to interfaces and components ` for details. @@ -1419,7 +1448,7 @@ The Amaranth standard library provides *components*: elaboratable objects that a Submodules ---------- -An elaboratable can be included within another elaboratable by adding it as a submodule: +An elaboratable can be included within another elaboratable, which is called its *containing elaboratable*, by adding it as a submodule: .. testcode:: @@ -1443,6 +1472,8 @@ A submodule can also be added without specifying a name: If a name is not explicitly specified for a submodule, one will be generated and assigned automatically. Designs with many autogenerated names can be difficult to debug, so a name should usually be supplied. +A non-Amaranth design unit can be added as a submodule using an :ref:`instance `. + .. _lang-controlinserter: @@ -1520,7 +1551,58 @@ The application of control flow modifiers in it causes the behavior of the final Renaming domains ---------------- -.. todo:: Write this section about :class:`DomainRenamer` +A reusable :ref:`elaboratable ` usually specifies the use of one or more :ref:`clock domains ` while leaving the details of clocking and initialization to a later phase in the design process. :class:`DomainRenamer` can be used to alter a reusable elaboratable for integration in a specific design. Most elaboratables use a single clock domain named ``sync``, and :class:`DomainRenamer` makes it easy to place such elaboratables in any clock domain of a design. + +Clock domains can be renamed using the syntax :pc:`DomainRenamer(domains)(elaboratable)`, where :pc:`domains` is a mapping from clock domain names to clock domain names and :pc:`elaboratable` is any :ref:`elaboratable ` object. The keys of :pc:`domains` correspond to existing clock domain names specified by :pc:`elaboratable`, and the values of :pc:`domains` correspond to the clock domain names from the containing elaboratable that will be used instead. When only the ``sync`` domain is being renamed, instead of writing :pc:`DomainRenamer({"sync": name})(elaboratable)`, the equivalent but shorter :pc:`DomainRenamer(name)(elaboratable)` syntax can be used. + +The result of renaming clock domains in an elaboratable is, itself, an elaboratable object. A common way to rename domains is to apply :class:`DomainRenamer` to another elaboratable while adding it as a submodule: + +.. testcode:: + :hide: + + m = Module() + +.. testcode:: + + m.submodules.counter = counter = DomainRenamer("video")(counter) + +Renaming a clock domain affects all logic within a given elaboratable and clock domain, which includes the submodules of that elaboratable. It does not affect any logic outside of that elaboratable. + +.. note:: + + Renaming domains in an elaboratable does not mutate it; a new proxy object is returned that forwards attribute accesses and method calls to the original elaboratable. Whenever this proxy object is elaborated, it manipulates the circuit defined by the original elaboratable to use the requested clock domain. + +.. note:: + + It is possible to rename domains in an elaboratable and also apply :ref:`control flow modifiers `. + +Consider the following code: + +.. testcode:: + :hide: + + count = Signal(8) + zero = Signal() + +.. testcode:: + + m = Module() + m.d.sync += count.eq(count + 1) + m.d.comb += zero.eq(count == 0) + + m = DomainRenamer({"sync": "video"})(m) + +The renaming of the ``sync`` clock domain in it causes the behavior of the final :pc:`m` to be identical to that of this module: + +.. testcode:: + + m = Module() + m.d.video += count.eq(count + 1) + m.d.comb += zero.eq(count == 0) + +.. tip:: + + A combinatorial signal can change synchronously to a clock domain, as in the example above, in which case it may only be sampled from the same clock domain unless explicitly synchronized. Renaming a clock domain must be assumed to potentially affect any output of an elaboratable. .. _lang-memory: @@ -1531,7 +1613,97 @@ Memories .. todo:: Write this section. +.. _lang-instance: + Instances ========= -.. todo:: Write this section. +.. attributes are not documented because they can be easily used to break soundness and we don't document them for signals either; they are rarely necessary for interoperability + +A submodule written in a non-Amaranth language is called an *instance*. An instance can be written in any language supported by the synthesis toolchain; usually, that is (System)Verilog, VHDL, or a language that is translated to one of those two. Adding an instance as a submodule corresponds to "module instantiation" in (System)Verilog and "component instantiation" in VHDL, and is done by specifying the following: + +* The *type* of an instance is the name of a (System)Verilog module, VHDL entity or component, or another HDL design unit that is being instantiated. +* The *name* of an instance is the name of the submodule within the containing elaboratable. +* The *attributes* of an instance correspond to attributes of a (System)Verilog module instance, or a custom attribute of a VHDL entity or component instance. Attributes applied to instances are interpreted by the synthesis toolchain rather than the HDL. +* The *parameters* of an instance correspond to parameters of a (System)Verilog module instance, or a generic constant of a VHDL entity or component instance. Not all HDLs allow their design units to be parameterized during instantiation. +* The *inputs* and *outputs* of an instance correspond to inputs and outputs of the external design unit. + +An instance can be added as a submodule using the :pc:`m.submodules.name = Instance("type", ...)` syntax, where :pc:`"type"` is the type of the instance as a string (which is passed to the synthesis toolchain uninterpreted), and :pc:`...` is a list of parameters, inputs, and outputs. Depending on whether the name of an attribute, parameter, input, or output can be written as a part of a Python identifier or not, one of two possible syntaxes is used to specify them: + +* An attribute is specified using the :pc:`a_ANAME=attr` or :pc:`("a", "ANAME", attr)` syntaxes. The :pc:`attr` must be an :class:`int`, a :class:`str`, or a :class:`Const`. +* A parameter is specified using the :pc:`p_PNAME=param` or :pc:`("p", "PNAME", param)` syntaxes. The :pc:`param` must be an :class:`int`, a :class:`str`, or a :class:`Const`. +* An input is specified using the :pc:`i_INAME=in_val` or :pc:`("i", "INAME", in_val)` syntaxes. The :pc:`in_val` must be a :ref:`value-like ` object. +* An output is specified using the :pc:`o_ONAME=out_val` or :pc:`("o", "ONAME", out_val)` syntaxes. The :pc:`out_val` must be a :ref:`value-like ` object that casts to a :class:`Signal`. + +The two following examples use both syntaxes to add the same instance of type ``external`` as a submodule named ``processor``: + +.. testcode:: + :hide: + + i_data = Signal(8) + o_data = Signal(8) + m = Module() + +.. testcode:: + + m.submodules.processor = Instance("external", + p_width=8, + i_clk=ClockSignal(), + i_rst=ResetSignal(), + i_en=1, + i_mode=Const(3, unsigned(4)), + i_data_in=i_data, + o_data_out=o_data, + ) + +.. testcode:: + :hide: + + m = Module() + +.. testcode:: + + m.submodules.processor = Instance("external", + ("p", "width", 8), + ("i", "clk", ClockSignal()), + ("i", "rst", ResetSignal()), + ("i", "en", 1), + ("i", "mode", Const(3, unsigned(4))), + ("i", "data_in", i_data), + ("o", "data_out", o_data), + ) + +Like a regular submodule, an instance can also be added without specifying a name: + +.. testcode:: + + m.submodules += Instance("external", + # ... + ) + +.. tip:: + + If a name is not explicitly specified for a submodule, one will be generated and assigned automatically. Designs with many autogenerated names can be difficult to debug, so a name should usually be supplied. + +Although an :class:`Instance` is not an elaboratable, as a special case, it can be returned from the :pc:`elaborate()` method. This is conveinent for implementing an elaboratable that adorns an instance with an Amaranth interface: + +.. testcode:: + + from amaranth import vendor + + + class FlipFlop(Elaboratable): + def __init__(self): + self.d = Signal() + self.q = Signal() + + def elaborate(self, platform): + # Decide on the instance to use based on the platform we are elaborating for. + if isinstance(platform, vendor.LatticeICE40Platform): + return Instance("SB_DFF", + i_C=ClockSignal(), + i_D=self.d, + o_Q=self.q + ) + else: + raise NotImplementedError \ No newline at end of file diff --git a/docs/amaranth/latest/objects.inv b/docs/amaranth/latest/objects.inv index 6f04bcc2..146143eb 100644 Binary files a/docs/amaranth/latest/objects.inv and b/docs/amaranth/latest/objects.inv differ diff --git a/docs/amaranth/latest/platform.html b/docs/amaranth/latest/platform.html index dc161d3e..e8ea5116 100644 --- a/docs/amaranth/latest/platform.html +++ b/docs/amaranth/latest/platform.html @@ -4,7 +4,7 @@ - Platform integration — Amaranth language & toolchain 0.4.1.dev41 documentation + Platform integration — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/platform/gowin.html b/docs/amaranth/latest/platform/gowin.html index 7dcd3178..f80f7874 100644 --- a/docs/amaranth/latest/platform/gowin.html +++ b/docs/amaranth/latest/platform/gowin.html @@ -4,7 +4,7 @@ - Gowin — Amaranth language & toolchain 0.4.1.dev41 documentation + Gowin — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/platform/intel.html b/docs/amaranth/latest/platform/intel.html index c061a03f..6434bad6 100644 --- a/docs/amaranth/latest/platform/intel.html +++ b/docs/amaranth/latest/platform/intel.html @@ -4,7 +4,7 @@ - Intel — Amaranth language & toolchain 0.4.1.dev41 documentation + Intel — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/platform/lattice-ecp5.html b/docs/amaranth/latest/platform/lattice-ecp5.html index bd31dddf..88107841 100644 --- a/docs/amaranth/latest/platform/lattice-ecp5.html +++ b/docs/amaranth/latest/platform/lattice-ecp5.html @@ -4,7 +4,7 @@ - Lattice ECP5 — Amaranth language & toolchain 0.4.1.dev41 documentation + Lattice ECP5 — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/platform/lattice-ice40.html b/docs/amaranth/latest/platform/lattice-ice40.html index f677e513..75c1525d 100644 --- a/docs/amaranth/latest/platform/lattice-ice40.html +++ b/docs/amaranth/latest/platform/lattice-ice40.html @@ -4,7 +4,7 @@ - Lattice iCE40 — Amaranth language & toolchain 0.4.1.dev41 documentation + Lattice iCE40 — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/platform/lattice-machxo-2-3l.html b/docs/amaranth/latest/platform/lattice-machxo-2-3l.html index 59a7fac8..f82ccfb9 100644 --- a/docs/amaranth/latest/platform/lattice-machxo-2-3l.html +++ b/docs/amaranth/latest/platform/lattice-machxo-2-3l.html @@ -4,7 +4,7 @@ - Lattice MachXO2 and MachXO3L — Amaranth language & toolchain 0.4.1.dev41 documentation + Lattice MachXO2 and MachXO3L — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/platform/quicklogic.html b/docs/amaranth/latest/platform/quicklogic.html index 8f70b70a..f7b843fa 100644 --- a/docs/amaranth/latest/platform/quicklogic.html +++ b/docs/amaranth/latest/platform/quicklogic.html @@ -4,7 +4,7 @@ - Quicklogic — Amaranth language & toolchain 0.4.1.dev41 documentation + Quicklogic — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/platform/xilinx.html b/docs/amaranth/latest/platform/xilinx.html index 64a2b449..95a26fef 100644 --- a/docs/amaranth/latest/platform/xilinx.html +++ b/docs/amaranth/latest/platform/xilinx.html @@ -4,7 +4,7 @@ - Xilinx — Amaranth language & toolchain 0.4.1.dev41 documentation + Xilinx — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/py-modindex.html b/docs/amaranth/latest/py-modindex.html index 31f5aafe..00544348 100644 --- a/docs/amaranth/latest/py-modindex.html +++ b/docs/amaranth/latest/py-modindex.html @@ -3,7 +3,7 @@ - Python Module Index — Amaranth language & toolchain 0.4.1.dev41 documentation + Python Module Index — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -14,7 +14,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/search.html b/docs/amaranth/latest/search.html index a2a89b2f..1fca4bea 100644 --- a/docs/amaranth/latest/search.html +++ b/docs/amaranth/latest/search.html @@ -3,7 +3,7 @@ - Search — Amaranth language & toolchain 0.4.1.dev41 documentation + Search — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/searchindex.js b/docs/amaranth/latest/searchindex.js index 1413406a..d3114d4f 100644 --- a/docs/amaranth/latest/searchindex.js +++ b/docs/amaranth/latest/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["changes", "contrib", "cover", "index", "install", "intro", "lang", "platform", "platform/gowin", "platform/intel", "platform/lattice-ecp5", "platform/lattice-ice40", "platform/lattice-machxo-2-3l", "platform/quicklogic", "platform/xilinx", "start", "stdlib", "stdlib/cdc", "stdlib/coding", "stdlib/crc", "stdlib/crc/catalog", "stdlib/data", "stdlib/enum", "stdlib/fifo", "stdlib/wiring", "tutorial"], "filenames": ["changes.rst", "contrib.rst", "cover.rst", "index.rst", "install.rst", "intro.rst", "lang.rst", "platform.rst", "platform/gowin.rst", "platform/intel.rst", "platform/lattice-ecp5.rst", "platform/lattice-ice40.rst", "platform/lattice-machxo-2-3l.rst", "platform/quicklogic.rst", "platform/xilinx.rst", "start.rst", "stdlib.rst", "stdlib/cdc.rst", "stdlib/coding.rst", "stdlib/crc.rst", "stdlib/crc/catalog.rst", "stdlib/data.rst", "stdlib/enum.rst", "stdlib/fifo.rst", "stdlib/wiring.rst", "tutorial.rst"], "titles": ["Changelog", "Contributing", "Amaranth project documentation", "Language & toolchain", "Installation", "Introduction", "Language guide", "Platform integration", "Gowin", "Intel", "Lattice ECP5", "Lattice iCE40", "Lattice MachXO2 and MachXO3L", "Quicklogic", "Xilinx", "Getting started", "Standard library", "Clock domain crossing", "Code conversion", "Cyclic redundancy checks", "Predefined CRC Algorithms", "Data structures", "Enumerations", "First-in first-out queues", "Interfaces and connections", "Tutorial"], "terms": {"thi": [0, 1, 3, 5, 6, 7, 11, 15, 16, 17, 19, 20, 21, 22, 23, 24], "document": [0, 5, 6, 15, 19, 24], "describ": [0, 1, 15, 21, 24], "public": [0, 1, 24], "interfac": [0, 3, 5, 6, 15, 16, 21, 23], "amaranth": [0, 1, 3, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "It": [0, 1, 5, 6, 15, 19, 21, 22, 24], "doe": [0, 4, 5, 6, 17, 21, 23, 24], "includ": [0, 1, 4, 5, 6, 15, 16, 19, 22, 24], "most": [0, 4, 5, 6, 15, 17, 19, 21, 22, 24], "bug": [0, 1, 4, 5, 6], "fix": [0, 3, 4, 6, 15, 19, 24], "The": [0, 1, 3, 4, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25], "migen": 0, "compat": [0, 4], "layer": 0, "ha": [0, 1, 5, 6, 15, 19, 21, 22, 23, 24], "been": [0, 4, 16, 19, 23], "remov": [0, 1, 6, 19, 24], "appli": [0, 6, 19, 21, 22], "follow": [0, 1, 4, 5, 6, 10, 12, 15, 17, 19, 21, 24, 25], "code": [0, 1, 3, 4, 5, 6, 15, 16, 21, 24], "written": [0, 5, 6, 15, 23, 24, 25], "against": [0, 6], "replac": [0, 22, 24], "us": [0, 1, 4, 5, 6, 9, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25], "m": [0, 6, 15, 19, 20, 21, 24], "case": [0, 15, 19, 21, 23, 24], "pattern": [0, 6], "default": [0, 6, 14, 15, 17, 19, 20, 24], "valu": [0, 3, 15, 17, 19, 21, 22, 24], "match": [0, 5, 24], "const": [0, 6, 21, 22, 24], "updat": [0, 1, 4, 6, 15, 19, 24], "util": [0, 16, 19], "log2_int": 0, "need_pow2": 0, "fals": [0, 6, 17, 19, 20, 23, 24], "ceil_log2": 0, "true": [0, 6, 15, 17, 19, 20, 24], "exact_log2": 0, "17": [0, 1, 20, 22], "39": 0, "semant": [0, 5, 6, 24], "argument": [0, 6, 22, 24], "ad": [0, 4, 5, 6, 15, 21, 24], "ast": [0, 22], "slice": [0, 6, 21], "object": [0, 6, 9, 19, 21, 24], "have": [0, 1, 4, 6, 16, 21, 24], "made": [0, 4, 6, 24], "castabl": [0, 6, 21, 22, 24], "i": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25], "never": [0, 6, 21, 22, 24], "activ": [0, 5], "instead": [0, 6, 21, 24], "alwai": [0, 5, 6, 15, 17, 19, 24], "deprec": 0, "normal": [0, 24], "sampl": [0, 6, 24], "past": [0, 6], "stabl": [0, 6], "rose": 0, "fell": 0, "lib": [0, 6, 16, 17, 18, 19, 20, 21, 22, 23, 24], "schedul": 0, "19": 0, "fifo": [0, 5, 16, 23], "fifointerfac": [0, 16, 23], "fwft": 0, "20": 0, "syncfifo": [0, 16, 23], "buildplan": 0, "execute_local_dock": 0, "extract": [0, 24], "build": [0, 3, 4, 6, 8, 9, 10, 11, 12, 14, 15, 17, 18, 23, 24], "sh": 0, "begin": [0, 6, 15, 21, 24], "bin": [0, 10, 11, 12, 14], "run_script": 0, "execute_loc": 0, "vendor": [0, 5, 8, 9, 10, 11, 12, 13, 14, 15], "intel": [0, 3, 7], "lattice_ecp5": 0, "lattice_ice40": 0, "lattice_machxo2_3l": 0, "quicklog": [0, 3, 7], "xilinx": [0, 3, 7], "18": 0, "support": [0, 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 21, 23], "new": [0, 3, 4, 5, 6, 19, 21, 23, 24], "improv": [0, 1, 21, 23, 24], "wai": [0, 1, 6, 21, 22, 24], "defin": [0, 5, 6, 15, 17, 19, 22, 24], "data": [0, 3, 16, 17, 19, 23, 24], "structur": [0, 1, 3, 15, 16, 24], "compon": [0, 2, 5, 6, 16, 21], "wire": [0, 6, 15, 16, 24], "record": [0, 1, 15], "In": [0, 6, 21, 22, 23, 24], "departur": 0, "usual": [0, 1, 5, 6, 17, 21, 24], "polici": 0, "give": [0, 6, 21], "design": [0, 1, 4, 5, 6, 14, 15, 16, 17, 19, 21, 24, 25], "addit": [0, 1, 4, 5, 6, 21, 22, 23, 24], "time": [0, 1, 4, 5, 6, 11, 15, 17, 21, 23, 24], "6": [0, 6, 15, 20, 21], "one": [0, 1, 6, 15, 16, 17, 18, 19, 21, 23, 24, 25], "releas": [0, 17], "later": [0, 1], "than": [0, 4, 5, 6, 17, 21, 22, 24], "enumer": [0, 3, 16, 21, 24], "extend": [0, 5, 6, 22, 24], "A": [0, 1, 3, 4, 5, 6, 17, 19, 21, 22, 24, 25], "shape": [0, 3, 21, 22, 24], "member": [0, 21, 22, 24], "can": [0, 1, 4, 5, 6, 15, 19, 21, 22, 23, 24], "provid": [0, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24], "an": [0, 1, 4, 5, 6, 15, 17, 19, 20, 21, 22, 23, 24], "class": [0, 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 23, 24], "sever": [0, 1, 6, 24], "extens": [0, 15], "point": [0, 11, 21], "base": [0, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 19, 21, 24], "outsid": [0, 6, 24], "core": [0, 5, 9, 24], "particular": [0, 5, 6, 21, 24], "signal": [0, 3, 5, 15, 17, 18, 19, 21, 22, 23, 24], "mai": [0, 1, 4, 6, 17, 19, 21, 22, 24], "now": [0, 24], "return": [0, 6, 15, 19, 21, 22, 24], "wrap": [0, 21, 22, 24], "anoth": [0, 6, 21, 22, 24], "call": [0, 6, 19, 20, 21, 22, 24], "protocol": [0, 22], "15": [0, 15, 20], "issu": [0, 1, 5, 6], "infer": [0, 5, 6, 21], "resolv": [0, 24], "notabl": [0, 4], "b": [0, 6, 19, 22, 24], "where": [0, 1, 6, 17, 19, 21, 24], "both": [0, 1, 5, 6, 19, 21, 24], "ar": [0, 1, 5, 6, 8, 9, 10, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], "unsign": [0, 6, 21, 22, 24], "sign": [0, 1, 6, 21], "python": [0, 1, 4, 5, 6, 11, 15, 21, 22, 24], "7": [0, 4, 5, 6, 20, 21], "11": [0, 20, 21], "12": [0, 6, 20], "featur": [0, 3, 17, 24], "nmigen": [0, 25], "namespac": [0, 6], "annot": [0, 21, 24], "recogn": 0, "nmigen_": 0, "envron": 0, "variabl": [0, 6, 8, 9, 10, 11, 12, 13, 14, 18, 19, 21, 23, 24], "remain": [0, 23, 24], "had": [0, 21, 24], "sinc": [0, 4, 6, 15, 19, 21, 24], "shell": 0, "environ": [0, 5, 8, 9, 10, 11, 12, 13, 14], "amaranth_": 0, "amaranth_env_": 0, "all": [0, 1, 5, 6, 9, 15, 16, 19, 20, 21, 22, 24], "uppercas": 0, "name": [0, 5, 8, 9, 10, 11, 12, 14, 17, 21, 24], "nmigen_env_": 0, "mix": [0, 6], "import": [0, 1, 6, 15, 19, 21, 22, 24], "form": [0, 6, 19, 24], "some_vendor": 0, "somevendorplatform": 0, "reduc": [0, 5, 6, 17, 21, 24], "futur": [0, 5, 6, 24], "churn": 0, "repl": 0, "count": [0, 6, 15, 24], "replic": [0, 6], "appropri": [0, 24], "depend": [0, 1, 4, 5, 6, 21, 23, 24], "If": [0, 1, 4, 15, 17, 18, 19, 21, 22, 23, 24], "wa": [0, 19, 21, 24], "being": [0, 1, 6, 21, 23, 24, 25], "storag": 0, "access": [0, 6, 20, 23, 24], "bit": [0, 4, 10, 12, 14, 15, 18, 19, 21, 22, 23], "level": [0, 5, 6, 15, 21, 23, 24], "represent": [0, 6, 24], "connect": [0, 3, 15, 16, 17], "togeth": [0, 1, 6, 24], "manual": [0, 1, 3, 4, 19, 21, 24], "instanti": [0, 5, 6, 15, 17, 21], "regist": [0, 5, 6, 19, 23, 24], "e": [0, 1, 6, 17, 23, 24], "g": [0, 6, 14, 17, 24], "past_x": 0, "like": [0, 1, 4, 5, 6, 17, 21, 22, 24], "x": [0, 6, 19, 24], "d": [0, 6, 15, 19, 21, 24], "sync": [0, 6, 15, 21, 24], "eq": [0, 6, 15, 21, 22, 24], "nativ": [0, 5], "syntax": [0, 6, 15, 21, 24], "ensur": [0, 6, 22, 24], "pin": [0, 5], "instanc": [0, 3, 10, 12, 19, 21, 22, 24], "request": [0, 1, 6, 15, 18, 24], "cast": [0, 3, 21, 22, 24], "directli": [0, 5, 6, 17, 19, 21, 23, 24], "its": [0, 1, 6, 15, 17, 19, 21, 22, 24], "field": [0, 21], "led": [0, 3], "cat": [0, 6, 22], "n": [0, 6, 17, 18, 21], "rang": [0, 15, 18, 21, 23, 24], "o": [0, 2, 5, 14, 17, 18], "note": [0, 6, 17, 19, 21, 22], "roundrobin": 0, "inlin": 0, "copi": [0, 1, 24], "convert": [0, 5, 6, 21, 24], "those": [0, 24], "while": [0, 1, 5, 6, 19, 21, 24], "list": [0, 1, 6, 19, 24], "below": [0, 6, 15, 17, 24], "work": [0, 3, 4, 5, 6, 10, 12, 15, 21, 24], "thei": [0, 1, 6, 15, 19, 21, 24], "next": [0, 4, 6, 15, 23, 24], "aggreg": [0, 6, 21], "definit": [0, 3, 6, 15, 24], "constant": [0, 3, 21, 22], "express": [0, 6, 21, 22, 24], "crc": [0, 16, 19], "gener": [0, 5, 6, 15, 19, 24], "8": [0, 4, 6, 19, 20, 21, 24], "9": [0, 6], "initi": [0, 17, 19, 21, 24], "10": [0, 6, 20, 21, 24], "move": 0, "reorgan": 0, "lift": [0, 24], "non": [0, 5, 6, 17, 24], "22": 0, "valuecast": [0, 21], "28": 0, "allow": [0, 5, 6, 17, 22, 24], "overrid": [0, 9, 10, 11, 12, 13, 14, 17, 21, 24], "oper": [0, 3, 5, 21, 22, 24], "31": [0, 20, 21], "type": [0, 6, 19, 21, 22, 23, 24], "safeti": [0, 22], "34": 0, "renam": 0, "pureinterfac": [0, 24], "35": [0, 4, 15], "add": [0, 1, 5, 6, 9, 10, 11, 14, 19, 21, 22, 24], "shapelik": 0, "valuelik": 0, "37": [0, 15], "make": [0, 1, 4, 5, 6, 16, 22, 23], "signatur": [0, 16], "immut": [0, 21, 24], "38": [0, 15], "shapecast": [0, 21, 22], "similar": [0, 1, 6, 15, 19, 21, 24], "as_sign": [0, 6], "as_unsign": [0, 6], "left": [0, 6, 19], "hand": 0, "side": [0, 6], "assign": [0, 15, 21, 22, 24], "differ": [0, 1, 5, 6, 16, 17, 18, 21, 23, 24], "behavior": [0, 1, 5, 6, 15, 21, 24], "reset": [0, 5, 15, 17, 19, 21, 23, 24], "accept": [0, 1, 6, 21, 22, 24], "ani": [0, 1, 4, 6, 15, 17, 18, 19, 21, 22, 23, 24], "supersed": 0, "memori": [0, 3, 5, 15, 23, 24], "transpar": [0, 6], "read": [0, 6, 21, 23, 24], "port": [0, 15, 24], "enabl": [0, 5, 6, 9, 10, 11, 15, 21, 24], "creat": [0, 1, 6, 19, 20, 22, 24], "__call__": [0, 19, 21, 22, 24], "method": [0, 1, 6, 15, 17, 19, 21, 22, 24], "recurs": [0, 21, 24], "treat": [0, 6, 19, 24], "deriv": [0, 5, 6, 15, 21, 24], "enum": [0, 6, 16, 21, 22, 24], "int": [0, 6, 15, 17, 18, 19, 21, 23, 24], "intenum": [0, 6, 22], "rather": [0, 6, 21, 24], "integ": [0, 19, 21, 22, 24], "empti": [0, 6, 23], "warn": 0, "without": [0, 1, 5, 6, 19, 21, 24], "explicitli": [0, 6, 15, 19, 21, 22, 24], "specifi": [0, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 19, 21, 22, 23, 24], "longer": 0, "construct": [0, 5, 6, 15, 19, 21, 22, 23, 24], "were": [0, 6], "__abs__": 0, "predat": 0, "process": [0, 1, 5, 6, 19, 21, 24], "width": [0, 18, 19, 21, 23, 24], "tupl": [0, 6, 24], "uservalu": 0, "linter": 0, "instruct": [0, 15], "file": [0, 3, 5, 6, 9, 10, 11, 12, 13, 14, 15, 21, 22, 24], "text": 0, "lf": 0, "line": [0, 15, 22, 24], "end": [0, 5, 6, 9, 10, 11, 12, 15], "window": [0, 4, 5, 10, 12], "other": [0, 1, 4, 5, 6, 15, 17, 19, 21, 22, 24], "debug_verilog": 0, "templatedplatform": 0, "env": 0, "run": [0, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15], "add_fil": [0, 11], "reject": [0, 6], "absolut": [0, 6], "path": [0, 10, 12], "nmigen_env_diamond": 0, "amaranth_env_diamond": [0, 10, 12], "upper": 0, "sim": [0, 15], "simul": [0, 3, 4, 6, 15], "step": [0, 1, 4, 5, 6, 15], "back": [0, 15, 21, 24], "pysim": 0, "invok": [0, 6, 24], "rtlil": 0, "verilog": [0, 5, 6, 15], "explicit": [0, 5, 6, 19], "test": [0, 1, 5, 23], "icepack_opt": 0, "latticeice40platform": [0, 7, 11], "osch": 0, "default_clk": 0, "clock": [0, 3, 5, 15, 16, 19, 23], "sourc": [0, 1, 4, 5, 6, 15, 21, 24], "latticemachxo2platform": [0, 7, 12], "latticemachxo3lplatform": [0, 7, 12], "xrai": [0, 14], "xilinxplatform": [0, 7, 14], "artix": 0, "ultrascal": 0, "part": [0, 1, 6, 15, 21, 24], "gowinplatform": [0, 7, 8], "lattice_machxo2": 0, "lattice_machxo_2_3l": 0, "latticemachxo2or3lplatform": [0, 7, 12], "svf": [0, 10, 12], "program": [0, 1, 5, 6, 10, 12, 15], "vector": [0, 10, 12], "xilinx_spartan_3_6": 0, "xilinxspartan3aplatform": 0, "xilinxspartan6platform": 0, "xilinx_7seri": 0, "xilinx7seriesplatform": 0, "xilinx_ultrascal": 0, "xilinxultrascaleplatform": 0, "project": [0, 1, 5, 22], "nm": 0, "prelud": [0, 3], "am": [0, 6], "adjust": 0, "nmigen_board": 0, "amaranth_board": [0, 15], "board": [0, 3, 15], "switch": [0, 21], "hdl": [0, 4, 5, 6, 15, 22, 25], "inherit": [0, 6, 21, 23, 24], "miss": [0, 1], "fhdltestcas": 0, "assertform": 0, "necessari": [0, 1, 5, 6, 11, 15, 16, 21, 24], "ab": [0, 6], "rotate_left": [0, 6], "rotate_right": [0, 6], "shift_left": [0, 6], "shift_right": [0, 6], "divis": [0, 6], "modulo": [0, 6], "neg": [0, 6, 17], "divisor": [0, 15], "cdc": [0, 5, 6, 16, 17], "pulsesynchron": [0, 16, 17], "asyncffsynchron": [0, 16, 17], "asyncfifo": [0, 16, 23], "when": [0, 1, 5, 6, 15, 17, 19, 21, 22, 23, 24], "write": [0, 6, 7, 15, 23, 24], "domain": [0, 3, 5, 15, 16, 23, 24], "r_rst": [0, 23], "assert": [0, 6, 15, 17, 18, 19, 23, 24], "r_level": [0, 23], "w_level": [0, 23], "backend": [0, 6, 15], "larger": [0, 6, 19], "65536": 0, "emit": [0, 6, 24], "yosi": [0, 1, 4, 5, 8, 9, 10, 11, 14], "attribut": [0, 5, 6, 15, 21, 24], "instal": [0, 1, 3, 11, 15], "fall": [0, 16], "pypi": [0, 4, 5], "packag": [0, 1, 4], "builtin": [0, 4], "avail": [0, 4, 9, 10, 11, 12, 13, 14, 15, 19, 23, 24], "cxxrtl": 0, "multipl": [0, 5, 6, 18, 24], "fragment": [0, 6], "add_process": 0, "advanc": [0, 5, 15, 24], "execute_remote_ssh": 0, "vcd": [0, 15], "output": [0, 1, 6, 11, 15, 17, 18, 19, 23, 24], "top": [0, 6, 15], "bench": [0, 5, 15], "modul": [0, 3, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], "contain": [0, 1, 5, 6, 15, 19, 20, 21, 24], "testbench": 0, "onli": [0, 4, 5, 6, 15, 17, 18, 19, 21, 22, 23, 24], "sb_lfosc": 0, "sb_hfosc": 0, "binari": [0, 4, 6, 8, 9, 10, 11, 12, 14, 18], "bitstream": [0, 8, 9, 10, 11, 12, 14, 15], "grade": [0, 25], "famili": [0, 4, 5, 21], "temperatur": 0, "speed": [0, 5], "symbiflow": [0, 13, 14], "separ": [0, 16], "flash": [0, 5, 12, 15], "sram": [0, 9, 12], "_flash": [0, 12], "_sram": [0, 12], "quicklogicplatform": [0, 7, 13], "cyclonev_oscil": 0, "intelplatform": [0, 7, 9], "add_set": [0, 9], "add_constraint": [0, 9, 10, 11, 12, 13, 14], "mistral": [0, 9], "synth_design_opt": [0, 14], "No": [0, 21, 24], "publish": 0, "under": [0, 6, 21, 24], "collect": [1, 5, 6, 24], "mani": [1, 5, 6, 15, 19, 24], "peopl": 1, "collabor": 1, "over": [1, 19, 21], "year": 1, "would": [1, 6, 19, 21, 24], "same": [1, 5, 6, 15, 19, 21, 22, 23, 24], "everyon": 1, "": [1, 4, 5, 6, 15, 17, 19, 21, 23, 24, 25], "uniqu": [1, 6], "perspect": 1, "we": 1, "re": [1, 19, 22], "glad": 1, "you": [1, 4, 6, 17, 19], "consid": [1, 5, 6, 15, 17, 21, 24, 25], "join": 1, "u": 1, "page": 1, "guid": [1, 3, 15, 19, 24], "through": [1, 5, 6, 21, 24], "some": [1, 5, 6, 15, 24], "best": 1, "tool": [1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 24], "hear": 1, "about": [1, 6, 24], "encount": 1, "crucial": 1, "do": [1, 6, 15, 21, 24], "care": [1, 6], "lot": 1, "correct": [1, 6, 16, 24], "result": [1, 6, 15, 21, 22, 24], "experi": [1, 6], "just": [1, 6, 21, 22], "much": 1, "meant": [1, 24], "comfort": 1, "fewer": [1, 6], "sharp": 1, "edg": [1, 6, 15, 17], "matter": [1, 21], "how": [1, 4, 6, 19, 21, 24], "technolog": 1, "appeal": 1, "might": 1, "more": [1, 5, 6, 15, 21, 24], "guardrail": 1, "pleas": 1, "To": [1, 4, 5, 6, 15, 19, 20, 21, 24], "go": [1, 5, 24], "beyond": [1, 6, 24], "see": [1, 6, 15, 17, 24], "error": [1, 5, 6, 9, 10, 11, 19, 21, 24], "messag": [1, 6, 9, 10, 11, 15, 24], "hard": [1, 5, 21], "understand": [1, 6, 24], "mislead": 1, "even": [1, 6, 17, 24], "especi": [1, 5, 6], "think": 1, "did": [1, 4], "someth": 1, "wrong": [1, 6, 24], "inform": [1, 9, 10, 11, 15, 21, 24], "exact": [1, 21], "version": [1, 3, 4, 6], "which": [1, 5, 6, 11, 15, 17, 19, 20, 21, 22, 23, 24], "find": 1, "c": [1, 6, 10, 12, 22, 24], "print": [1, 6, 24], "__version__": 1, "complet": [1, 6, 19], "self": [1, 5, 6, 15, 21, 22, 24], "minim": [1, 15], "demonstr": [1, 15, 24], "feasibl": 1, "sequenc": [1, 17, 21], "reproduc": [1, 5], "what": [1, 6, 19, 24], "expect": [1, 21, 24], "happen": [1, 6], "actual": [1, 22, 24], "possibl": [1, 5, 6, 22, 24], "verbatim": 1, "log": [1, 9, 10, 11, 12, 14], "termin": 1, "For": [1, 4, 6, 19, 20, 21, 22, 24], "usabl": [1, 5, 24], "reason": [1, 6, 24], "why": [1, 24], "There": [1, 6, 24], "person": 1, "who": 1, "should": [1, 4, 6, 15, 17, 21, 23, 24], "submit": [1, 21], "valuabl": 1, "own": [1, 6, 21], "right": [1, 6, 21], "appreci": 1, "open": [1, 5, 6, 15], "commun": [1, 5, 21, 24, 25], "tend": 1, "opportun": 1, "enjoi": 1, "pull": [1, 4], "howev": [1, 4, 6, 17, 21, 24], "unless": [1, 6, 23, 24], "ve": 1, "few": [1, 6, 15, 21, 24], "befor": [1, 4, 6, 10, 12, 14, 24], "truli": 1, "trivial": 1, "discuss": [1, 24], "maintain": [1, 5, 17], "first": [1, 3, 4, 5, 6, 15, 16, 17, 19, 21, 24], "doesn": 1, "t": [1, 6, 21], "take": [1, 5, 6, 19, 24], "sometim": [1, 5, 6, 24], "save": [1, 10, 12], "unnecessari": 1, "frustrat": 1, "languag": [1, 2, 15, 16, 24], "toolchain": [1, 2, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15], "from": [1, 4, 5, 15, 16, 17, 19, 20, 21, 22, 23, 24], "kind": [1, 6, 21, 24], "everi": [1, 5, 6, 15, 17, 19, 21, 24], "unavoid": 1, "tightli": [1, 6, 24], "coupl": 1, "seemingli": 1, "obviou": 1, "appar": 1, "minor": 1, "decis": [1, 6], "dramat": 1, "consequ": [1, 5], "sure": [1, 4], "undergo": 1, "scrutini": 1, "commit": [1, 4], "impact": 1, "chanc": 1, "voic": 1, "heard": 1, "substanti": 1, "must": [1, 6, 11, 17, 21, 24], "formal": [1, 25], "comment": 1, "well": [1, 4, 5, 6, 15, 21, 24], "here": [1, 21], "typic": [1, 5], "after": [1, 4, 6, 9, 10, 11, 12, 14, 17, 19, 23, 24], "round": [1, 23], "review": 1, "achiev": [1, 5], "unanim": 1, "consensu": 1, "pdm": 1, "manag": [1, 6, 21], "develop": [1, 15, 21], "workflow": [1, 4, 5, 15], "download": [1, 4, 5, 15, 19], "latest": 1, "onc": [1, 6, 15, 17, 21, 24], "done": [1, 6, 21], "so": [1, 5, 6, 15, 17, 19, 21, 24], "dev": 1, "command": [1, 4, 5, 9, 10, 11, 12, 13, 14, 15, 21], "virtual": [1, 24], "locat": [1, 4, 15, 24], "venv": 1, "runtim": 1, "itself": [1, 6, 10, 12, 15, 19, 21, 22, 24], "edit": [1, 15], "mode": 1, "mean": [1, 6, 19, 24], "immedi": [1, 4, 6, 17], "reflect": [1, 19], "pick": 1, "up": [1, 6, 15, 21, 23, 24, 25], "good": [1, 6, 10, 12], "habit": 1, "each": [1, 5, 6, 19, 21, 24], "tree": [1, 5, 6], "frontend": 1, "yices2": 1, "smt": 1, "solver": 1, "These": [1, 5, 21, 24], "distribut": [1, 4], "oss": 1, "cad": 1, "suit": 1, "reli": [1, 5, 6, 24], "verif": [1, 5, 24, 25], "skip": 1, "index": [1, 6, 21, 24], "doc": 1, "_build": 1, "html": 1, "involv": [1, 6], "small": [1, 6, 15], "iter": [1, 6, 19, 21, 24], "labor": [1, 5, 21], "rebuild": 1, "start": [1, 3, 5, 6, 19, 21, 24], "automat": [1, 6, 15, 22], "live": 1, "brows": 1, "http": [1, 4, 19], "127": [1, 6], "0": [1, 3, 4, 6, 15, 18, 19, 21, 22, 24], "1": [1, 3, 6, 15, 17, 19, 21, 22, 23, 24], "8000": 1, "browser": 1, "short": [1, 6, 24], "delai": [1, 17, 23], "keep": [1, 24], "ey": 1, "syntact": 1, "refer": [1, 6, 19, 24], "occasion": [1, 6], "builder": 1, "persist": [1, 6], "render": 1, "incorrect": 1, "outdat": 1, "content": 1, "our": 1, "style": [1, 5], "guidelin": 1, "evolv": 1, "eventu": 1, "them": [1, 6, 15, 19, 21, 24], "At": [1, 5, 6], "moment": [1, 5, 6, 15], "ask": 1, "effort": [1, 5, 15], "modifi": [1, 24], "spirit": 1, "surround": 1, "dure": [1, 5, 6, 17, 21], "doubt": 1, "mondai": 1, "00": 1, "utc": 1, "irc": 1, "channel": [1, 21], "lang": [1, 4], "libera": 1, "chat": 1, "matrix": 1, "org": 1, "bridg": 1, "appear": [1, 6, 21, 23, 24], "user": [1, 4, 6, 15, 21, 22], "contributor": 1, "newli": [1, 24], "warrant": 1, "broad": [1, 16], "attent": 1, "primari": 1, "avenu": 1, "want": [1, 19, 25], "interest": 1, "evolut": 1, "simpli": 1, "view": [1, 6, 16], "feel": 1, "free": 1, "attend": 1, "abl": [1, 6], "publicli": 1, "summari": 1, "post": 1, "relev": [1, 24], "github": [1, 4], "thread": 1, "standard": [2, 3, 6, 9, 10, 11, 15, 19, 22, 24], "system": [2, 3, 15, 24], "chip": [2, 24], "toolkit": 2, "progress": [3, 6], "serious": [3, 6], "incomplet": [3, 6], "introduct": [3, 6, 15, 16], "librari": [3, 6, 17], "requir": [3, 5, 6, 8, 9, 10, 11, 12, 13, 14, 19, 21, 24], "prerequisit": 3, "get": [3, 4, 5, 6, 21], "counter": [3, 6, 24], "blink": 3, "tutori": [3, 6, 15], "control": [3, 5, 15, 24], "flow": [3, 5, 24], "combinatori": [3, 15, 24], "evalu": [3, 15], "synchron": [3, 5, 15, 17, 23], "elabor": [3, 15, 17, 24], "cross": [3, 5, 16], "convers": [3, 5, 16, 24], "out": [3, 4, 5, 15, 16, 17, 18, 19, 24], "queue": [3, 16], "cyclic": [3, 16], "redund": [3, 16, 24], "check": [3, 15, 16, 24], "platform": [3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 24], "integr": [3, 15, 25], "gowin": [3, 7], "lattic": [3, 7, 15], "ecp5": [3, 7], "ice40": [3, 7, 15], "machxo2": [3, 7], "machxo3l": [3, 7], "changelog": 3, "5": [3, 6, 15, 20, 21, 22], "unreleas": 3, "4": [3, 6, 15, 20, 21, 22], "3": [3, 4, 6, 15, 20, 21, 24], "2": [3, 6, 15, 17, 22, 23, 24], "contribut": 3, "problem": [3, 6, 24], "report": [3, 5, 9, 11, 14, 24], "propos": 3, "codebas": 3, "your": [3, 4, 6, 17, 24], "chang": [3, 4, 5, 6, 21, 24], "weekli": 3, "meet": 3, "newer": 4, "cpython": 4, "faster": [4, 17], "pypy3": 4, "pip": 4, "23": [4, 21], "via": [4, 5, 6, 21, 24], "popular": 4, "softwar": [4, 19], "waveform": [4, 6, 15], "viewer": [4, 6], "gtkwave": 4, "invalu": 4, "debug": [4, 5, 6, 15], "synthes": [4, 5, 6, 10, 11, 14, 15], "place": [4, 5, 6, 14, 15, 22, 24], "rout": [4, 5, 6, 14, 15], "fpga": [4, 6, 15, 17, 23, 25], "specif": [4, 5, 6, 17, 21, 24], "x86_64": 4, "aarch64": 4, "continu": [4, 25], "either": [4, 6, 17, 18, 21, 22, 24], "store": [4, 6, 21], "full": [4, 6, 19, 24], "64": [4, 20], "win32": 4, "win64": 4, "need": [4, 5, 6, 17, 21, 23, 24], "unpack": 4, "conveni": [4, 6, 21, 24], "upgrad": 4, "maco": 4, "homebrew": 4, "Then": 4, "brew": 4, "debian": 4, "sudo": 4, "apt": 4, "python3": [4, 15], "On": [4, 10, 12, 17], "architectur": [4, 19], "pip3": 4, "arch": 4, "linux": [4, 10, 12], "pacman": 4, "repositori": [4, 5], "applic": [4, 5, 6, 15, 21, 24], "main": 4, "branch": [4, 6], "similarli": [4, 6, 24], "reliabl": [4, 5, 24], "experiment": [4, 6], "api": 4, "flux": 4, "until": [4, 6, 17, 21, 25], "With": [4, 6, 15, 19], "mind": 4, "try": [4, 6], "function": [4, 5, 6, 15, 16, 19, 21, 24], "avoid": [4, 5, 6], "last": [4, 6, 21, 22, 24], "previou": [4, 19, 21], "git": 4, "com": 4, "directori": 4, "affect": [4, 6, 24], "otherwis": [4, 6, 15, 17, 18, 21, 24], "crash": 4, "becaus": [4, 6, 21, 24], "mismatch": [4, 6], "clone": 4, "cd": [4, 6], "ff": 4, "origin": [4, 6, 24], "omit": [4, 6], "explain": [4, 6], "hardwar": [5, 6, 16, 19], "digit": [5, 6, 16], "logic": [5, 15, 23], "aim": 5, "easi": [5, 6], "learn": [5, 25], "elimin": [5, 6, 17], "common": [5, 6, 15, 16], "mistak": 5, "simplifi": [5, 6], "complex": [5, 6, 21, 24], "reusabl": [5, 15], "consist": [5, 17, 24], "cover": [5, 6, 24], "restrict": [5, 21, 22, 24], "choic": 5, "exist": [5, 6, 19, 23, 24], "industri": 5, "vhdl": 5, "descript": [5, 6, 19, 21, 24], "transfer": [5, 17, 24], "model": [5, 16, 19], "ordinari": [5, 6], "netlist": [5, 6, 11, 14], "circuit": [5, 6], "human": [5, 24], "readabl": [5, 6, 24], "By": [5, 6], "flexibl": [5, 21], "rich": [5, 6], "widespread": 5, "adopt": 5, "focus": 5, "singl": [5, 6, 15, 21, 22, 24], "task": [5, 6], "block": [5, 15, 17, 18, 23, 24], "finit": [5, 6], "state": [5, 15, 17], "machin": [5, 6], "simpl": [5, 6, 15, 21, 24], "rule": [5, 21], "arithmet": 5, "close": 5, "loop": [5, 6], "condit": [5, 6, 15, 23], "organ": 5, "seamlessli": 5, "principl": [5, 24], "also": [5, 6, 15, 16, 19, 21, 22, 23, 24], "accident": 5, "misus": [5, 6], "unexpect": [5, 6], "undesir": [5, 6], "synthesi": [5, 6, 11, 14], "often": [5, 6, 21, 24], "expens": 5, "signific": [5, 6, 18, 19, 21], "safe": [5, 6, 17, 22], "third": [5, 16, 21], "parti": [5, 16], "lint": 5, "lack": [5, 6], "synthesiz": [5, 15], "prone": [5, 21, 24], "favor": 5, "diagnost": [5, 6, 15, 24], "regularli": 5, "ones": [5, 21, 24], "highlight": 5, "potenti": [5, 6, 24], "importantli": 5, "come": [5, 11], "essenti": [5, 6, 16, 24], "primit": [5, 6], "asynchron": [5, 6, 17, 23], "buffer": [5, 23], "box": [5, 15], "focu": 5, "subtl": [5, 6], "between": [5, 6, 16, 17, 18, 21, 23, 24], "special": [5, 6, 24], "treatment": 5, "devic": [5, 6, 10, 11, 12], "overridden": [5, 21, 24], "recommend": 5, "high": [5, 6, 18, 21], "gear": 5, "peripher": [5, 24], "implement": [5, 6, 16, 17, 19, 21, 22, 23, 24], "least": [5, 6, 18, 19, 21, 23, 24], "amount": [5, 6, 15, 21], "migrat": 5, "option": [5, 6, 9, 10, 11, 14, 15, 17, 20, 22, 24], "limit": [5, 6, 15, 24], "Of": 5, "cours": 5, "known": [5, 6, 10, 12, 16, 19, 21], "icaru": 5, "veril": 5, "event": 5, "driven": [5, 6, 17], "although": [5, 6, 15, 24], "slower": 5, "compil": 5, "ahead": 5, "remark": 5, "perform": [5, 19, 21, 22, 24], "pure": [5, 24], "co": [5, 15], "major": [5, 24], "commerci": 5, "easili": 5, "constraint": [5, 14, 15, 17], "power": [5, 6, 17, 23], "final": [5, 6, 24], "script": [5, 8, 9, 10, 11, 12, 13, 14], "placement": 5, "analysi": 5, "custom": [5, 6, 15, 19, 22, 23], "insert": [5, 9, 10, 11, 12, 13, 14, 24], "produc": [5, 6, 15, 17, 24], "portabl": 5, "present": [5, 6, 8, 9, 10, 11, 12, 13, 14, 24], "easier": [5, 6], "remot": 5, "nix": 5, "configur": [5, 6, 15, 17, 19, 24], "suppli": [5, 6], "everyth": [5, 16, 21, 22, 24], "direct": [5, 6, 21, 24], "connector": 5, "pinout": [5, 15], "built": [5, 6, 15, 21], "probe": 5, "invoc": [5, 6, 15], "show": 5, "whether": [5, 6, 15, 19, 24], "programm": 5, "correctli": [5, 6, 15, 23, 24], "establish": 5, "convent": [5, 6], "segment": 5, "displai": 5, "spi": 5, "sdram": 5, "reus": [5, 24], "unmodifi": 5, "further": [5, 6, 17], "polar": 5, "unifi": 5, "invers": 5, "trace": 5, "low": [5, 18, 21], "invert": [5, 22], "introduc": [6, 24], "depth": [6, 23], "assum": 6, "familiar": 6, "prior": 6, "regular": 6, "root": [6, 11, 15], "carefulli": 6, "curat": 6, "export": [6, 10, 12, 22], "nearli": 6, "dedic": 6, "practic": [6, 24], "glob": 6, "frown": 6, "upon": 6, "alia": [6, 12], "exampl": [6, 15, 19, 20, 21, 24], "two": [6, 11, 19, 21, 24], "signed": [6, 21, 24], "alias": 6, "v": [6, 15], "retriev": [6, 21, 24], "len": [6, 21], "basic": [6, 15], "term": [6, 19], "number": [6, 9, 17, 18, 21, 23, 24], "anywher": [6, 21], "repres": 6, "interpret": [6, 24], "complement": 6, "simplest": 6, "ten": 6, "minus_two": 6, "abov": [6, 15, 24], "posit": [6, 19, 21, 24], "smallest": 6, "As": [6, 15, 21], "truncat": 6, "fit": 6, "rare": [6, 21, 24], "permit": 6, "360": 6, "104": 6, "129": 6, "indirectli": 6, "implicit": [6, 19], "shorthand": 6, "r": 6, "larg": [6, 21, 23], "enough": [6, 21], "min": 6, "max": 6, "whose": [6, 16, 21, 24], "set": [6, 9, 10, 11, 12, 14, 17, 19, 23, 24, 25], "100": [6, 17], "item": [6, 19, 24], "exclus": 6, "half": 6, "stop": 6, "element": [6, 21, 23, 24], "wide": 6, "fencepost": 6, "256": [6, 21], "syntaxwarn": 6, "equal": [6, 19, 21, 22, 24], "inclus": 6, "off": [6, 10, 12], "detect": [6, 19, 24], "bound": 6, "subclass": [6, 21, 22, 24], "multiplex": 6, "distinct": 6, "bottom": 6, "funct4": 6, "sub": [6, 22], "mul": [6, 22], "prevent": 6, "unwant": 6, "equival": [6, 21, 22, 24], "d5": 6, "d1": [6, 24], "subset": [6, 21], "operand": [6, 22], "numer": 6, "d26": 6, "funct": [6, 22], "op": [6, 22], "reg": [6, 15, 22], "imm": [6, 22], "instr": [6, 22], "addi": [6, 22], "expand": 6, "vari": 6, "respect": [6, 24], "cannot": [6, 21, 23, 24], "uniniti": 6, "undefin": 6, "foo": [6, 22, 24], "bar": [6, 22], "paramet": [6, 15, 16, 17, 18, 19, 21, 23, 24], "foo2": 6, "second_foo": 6, "prepar": 6, "ambigu": 6, "zero": [6, 21, 23], "none": [6, 14, 15, 17, 18, 24], "resett": [6, 17], "reset_less": [6, 17], "resetinsert": 6, "combin": [6, 21, 24], "arrai": [6, 21, 24], "themselv": 6, "concret": [6, 21], "goal": [6, 24], "calcul": 6, "contrast": 6, "abstract": [6, 16, 21], "sig": [6, 15, 21, 22, 24], "rememb": 6, "higher": [6, 17], "traceback": [6, 21, 22, 24], "recent": [6, 19, 21, 22, 24], "typeerror": [6, 21, 22, 24], "attempt": 6, "boolean": 6, "therefor": [6, 19], "statement": [6, 22, 24], "execut": 6, "decid": 6, "bodi": [6, 24], "fact": 6, "long": [6, 19], "finish": [6, 15], "solv": 6, "manipul": [6, 21, 24], "OR": [6, 22], "select": 6, "regardless": 6, "too": 6, "unlimit": 6, "precis": [6, 21], "overflow": [6, 15, 24], "suffici": [6, 21, 24], "128": 6, "382": 6, "tabl": 6, "negat": [6, 22], "subtract": 6, "floor": 6, "due": [6, 24], "chain": [6, 17], "inequ": 6, "greater": 6, "effici": 6, "NOT": 6, "AND": [6, 22], "xor": [6, 19, 22], "impli": 6, "revers": [6, 19, 24], "exponenti": 6, "wider": 6, "intermedi": 6, "stress": 6, "32": [6, 20, 21, 24], "4294967296": 6, "break": 6, "veri": [6, 21, 24], "sidewai": 6, "pair": [6, 24], "unari": 6, "sole": [6, 24], "odd": 6, "bool": [6, 17, 19, 24], "conceptu": 6, "unlik": 6, "clariti": [6, 15, 24], "p": 6, "q": 6, "preced": 6, "wherea": [6, 24], "parenthes": 6, "around": [6, 24], "en": [6, 15, 24], "addr": [6, 21, 24], "d0": [6, 21, 22], "stb": 6, "use_stb": 6, "msb": 6, "sd": 6, "detail": [6, 15, 17, 19, 24], "apart": 6, "act": [6, 22, 23, 24], "concaten": [6, 24], "clash": 6, "except": [6, 21, 24], "subscript": 6, "offset": [6, 21], "notat": 6, "length": [6, 21], "j": 6, "k": 6, "bit_select": 6, "w": [6, 15], "overlap": [6, 21], "word_select": 6, "word": [6, 19, 24], "talk": 6, "convention": 6, "variat": 6, "occupi": 6, "0th": 6, "expon": [6, 21], "caus": [6, 17], "confus": [6, 24], "0b1001": 6, "0b1010": 6, "0b1010_1001": 6, "val": [6, 15], "Such": [6, 24], "seem": 6, "natur": [6, 18], "alon": 6, "could": [6, 16, 17, 21, 24], "ye": 6, "deliber": 6, "examin": [6, 24], "str": [6, 17, 21, 23, 24], "mask": 6, "don": 6, "whitespac": 6, "charact": 6, "compar": [6, 21, 22, 23, 24], "succe": 6, "correspondingli": [6, 24], "asid": [6, 24], "space": [6, 23], "tab": 6, "ignor": [6, 24], "given": [6, 19, 21, 22, 24], "01": 6, "0b0110_0000": 6, "0b0100_0000": 6, "opposit": 6, "liter": 6, "reinterpret": 6, "pc": 6, "mux": 6, "sel": 6, "val1": 6, "val0": 6, "unit": 6, "hierarchi": [6, 21], "independ": 6, "associ": [6, 21, 24], "fresh": 6, "group": [6, 21], "ident": [6, 18, 19, 23, 24], "predefin": [6, 16, 19], "comb": [6, 15, 21, 24], "reserv": [6, 21], "occur": 6, "feedback": [6, 24], "hold": [6, 15], "effect": [6, 24], "0b11": 6, "d3": 6, "entir": [6, 15, 19], "upfront": 6, "def": [6, 15, 21, 22, 24], "add_toggl": 6, "num": 6, "f": [6, 8, 15, 24], "sync_": 6, "becom": [6, 19, 23], "undriven": 6, "exactli": [6, 21, 22, 24], "dsl": 6, "syntaxerror": 6, "driver": 6, "conflict": [6, 24], "drive": [6, 15, 24], "alreadi": [6, 15, 24], "clearli": 6, "meaning": [6, 24], "inher": 6, "answer": [6, 24], "greatli": 6, "analyz": 6, "snippet": 6, "determin": [6, 24], "tailor": 6, "context": [6, 24], "timer": [6, 15], "superfici": 6, "imper": 6, "insid": [6, 24], "observ": 6, "satisfi": [6, 24], "uncondition": 6, "account": [6, 24], "cond1": 6, "cond2": 6, "parallel": [6, 19], "x_coord": 6, "is_bporch": 6, "364": 6, "is_act": 6, "374": 6, "is_fporch": 6, "within": [6, 24], "whole": 6, "is_even": 6, "is_odd": 6, "too_big": 6, "whichev": 6, "earlier": 6, "programmat": 6, "particularli": 6, "squar": 6, "choos": [6, 15], "enter": 6, "cycl": [6, 15, 17, 19, 23], "bu": [6, 24], "transact": 6, "bus_addr": 6, "16": [6, 15, 19, 20, 21, 24], "r_data": [6, 23, 24], "r_en": [6, 23], "latch": [6, 23], "address": [6, 21, 24], "0x1234": 6, "strobe": [6, 23], "again": 6, "section": [6, 7, 15, 21, 24], "belong": 6, "dom": 6, "current": [6, 19, 24], "captur": [6, 24], "ongo": 6, "whenev": [6, 19, 24], "correspond": [6, 15, 19, 21, 22, 24], "y": [6, 24], "typo": 6, "unreach": 6, "hazard": 6, "string": [6, 21, 24], "lead": [6, 19], "surpris": 6, "nest": [6, 24], "innermost": 6, "outer": [6, 24], "inner": [6, 24], "shorten": 6, "unstabl": 6, "ring": 6, "oscil": [6, 15], "prohibit": 6, "assumpt": [6, 24], "aren": 6, "silent": 6, "miscompil": 6, "though": [6, 24], "exceedingli": 6, "desir": 6, "technologi": 6, "lut": 6, "transit": 6, "down": 6, "increment": [6, 15], "decrement": 6, "retain": [6, 15], "clockdomain": 6, "video": 6, "cd_video": 6, "local": 6, "concis": [6, 21, 24], "add_video_domain": 6, "video_": 6, "domain_nam": 6, "clk": [6, 15], "jtag": [6, 10, 12], "clk_edg": 6, "rst": [6, 15], "still": [6, 15, 17, 24, 25], "nevertheless": [6, 24], "startup": 6, "keyword": [6, 22, 24], "subject": [6, 22], "intention": 6, "undocu": 6, "enableinsert": 6, "frequenc": [6, 15, 17], "phase": 6, "properti": [6, 19, 21, 24], "clocksign": 6, "resetsign": 6, "bus_clk": 6, "bus_rstn": 6, "found": 6, "cd_sync": 6, "Be": 6, "unpredict": 6, "consult": 6, "facil": [6, 21, 24], "disabl": [6, 15], "divid": 6, "smaller": 6, "subdivis": 6, "elaborat": [6, 15, 24], "compos": [6, 24], "deleg": 6, "receiv": [6, 19, 24], "inject": 6, "twice": [6, 24], "rel": 6, "guarante": [6, 17], "plain": [6, 21, 22], "counter_": 6, "autogener": 6, "difficult": 6, "alter": 6, "input": [6, 15, 17, 18, 19, 23], "map": [6, 14, 21, 24], "shorter": 6, "mutat": [6, 24], "proxi": [6, 21, 24], "forward": 6, "held": 6, "z": 6, "resetsynchron": [6, 16, 17], "domainrenam": 6, "latticeecp5platform": [7, 10], "apicula": 8, "nextpnr": [8, 9, 10, 11, 14], "gowin_pack": 8, "popul": [8, 9, 10, 11, 12, 13, 14, 21, 24], "amaranth_env_apicula": 8, "product": [8, 9, 10, 11, 12, 14], "gw_sh": 8, "amaranth_env_gowin": 8, "quartu": 9, "quartus_map": 9, "quartus_fit": 9, "quartus_asm": 9, "quartus_sta": 9, "amaranth_env_quartu": 9, "qsf": 9, "sdc": [9, 11], "nproc": 9, "quartus_map_opt": 9, "extra": [9, 10, 11, 14], "quartus_fit_opt": 9, "quartus_asm_opt": 9, "quartus_sta_opt": 9, "rpt": [9, 10, 11, 14], "sof": 9, "rbf": 9, "raw": [9, 14], "amaranth_env_mistr": 9, "verbos": [9, 10, 11, 15], "read_verilog_opt": [9, 10, 11], "read_verilog": [9, 10, 11], "synth_opt": [9, 10, 11], "synth_intel_alm": 9, "script_after_read": [9, 10, 11, 14], "read_ilang": [9, 10, 11], "script_after_synth": [9, 10, 11, 14], "yosys_opt": [9, 10, 11], "nextpnr_opt": [9, 10, 11], "trelli": 10, "diamond": [10, 12], "ecppack": 10, "amaranth_env_trelli": 10, "synth_ecp5": 10, "ecppack_opt": 10, "add_prefer": [10, 12], "lpf": [10, 12], "json": [10, 11], "rtl": [10, 11, 14], "tim": [10, 11], "config": 10, "ascii": [10, 11], "pnmainc": [10, 12], "ddtcmd": [10, 12], "diamond_env": [10, 12], "candid": [10, 12], "bat": [10, 12], "echo": [10, 12], "lscc": [10, 12], "diamond_vers": [10, 12], "nt64": [10, 12], "script_project": [10, 12], "prj_project": [10, 12], "tcl": [10, 11, 12, 14], "script_after_export": [10, 12], "prj_run": [10, 12], "xdc": [10, 12, 13, 14], "_impl": [10, 12], "htm": [10, 11, 12], "consolid": [10, 12], "icestorm": 11, "icecube2": 11, "icepack": 11, "amaranth_env_icestorm": 11, "synth_ice40": 11, "add_pre_pack": 11, "pre": [11, 19], "pack": 11, "pcf": [11, 14], "asc": 11, "variant": 11, "lse": 11, "synplifi": 11, "tclsh": 11, "amaranth_env_icecube2": 11, "lse_opt": 11, "script_after_add": 11, "script_after_opt": 11, "set_opt": 11, "script_after_flow": 11, "run_sbt_backend_auto": 11, "sbt": 11, "_lse": 11, "_design": 11, "router": 11, "_time": [11, 14], "edf": 11, "edif": 11, "_lattice_machxo_2_3l": 12, "jed": 12, "jedec": 12, "fuse": 12, "symbiflow_synth": [13, 14], "symbiflow_pack": [13, 14], "symbiflow_plac": [13, 14], "symbiflow_rout": [13, 14], "symbiflow_write_fasm": [13, 14], "symbiflow_write_bitstream": [13, 14], "amaranth_env_qlsymbiflow": 13, "ISE": 14, "vivado": 14, "amaranth_env_vivado": 14, "read_xdc": 14, "synth_design": 14, "script_after_plac": 14, "place_design": 14, "script_after_rout": 14, "route_design": 14, "script_before_bitstream": 14, "write_bitstream": 14, "script_after_bitstream": 14, "vivado_opt": 14, "_timing_synth": 14, "_utilization_hierarchical_synth": 14, "_utilization_synth": 14, "_utilization_hierarchical_plac": 14, "_utilization_plac": 14, "_io": 14, "_control_set": 14, "_clock_util": 14, "_route_statu": 14, "_drc": 14, "_methodologi": 14, "_power": 14, "_rout": 14, "dcp": 14, "checkpoint": 14, "metadata": 14, "xst": 14, "ngdbuild": 14, "par": 14, "bitgen": 14, "amaranth_env_is": 14, "script_after_run": 14, "ucf": 14, "xst_opt": 14, "ngdbuild_opt": 14, "map_opt": 14, "par_opt": 14, "bitgen_opt": 14, "compress": 14, "srp": 14, "ngc": 14, "bld": 14, "ngd": 14, "databas": 14, "_map": 14, "mrp": 14, "ncd": 14, "physic": 14, "_par": 14, "_par_pad": 14, "txt": [14, 19], "usag": 14, "drc": 14, "bgn": 14, "amaranth_env_symbiflow": 14, "fasm2fram": 14, "xc7frames2bit": 14, "amaranth_env_xrai": 14, "cursori": 15, "overview": 15, "explan": [15, 24], "shown": [15, 24], "up_count": 15, "py": 15, "upcount": 15, "ovf": 15, "reach": [15, 21, 24], "__init__": [15, 21, 22, 24], "els": [15, 17, 24], "helper": [15, 24], "elif": 15, "black": [15, 21], "verifi": [15, 24], "dut": 15, "25": [15, 20], "yield": [15, 21, 24], "_": [15, 24], "30": [15, 20], "clear": [15, 24], "add_clock": 15, "1e": 15, "mhz": 15, "add_sync_process": 15, "write_vcd": 15, "inspect": 15, "successfulli": 15, "de": 15, "facto": 15, "interoper": [15, 16], "rise": 15, "lightli": 15, "src": 15, "ir": 15, "526": 15, "26": 15, "27": 15, "h0000": 15, "41": 15, "h19": 15, "h1": 15, "posedg": 15, "casez": 15, "40": [15, 20], "endcas": 15, "xfrm": 15, "518": 15, "endmodul": 15, "aid": 15, "unfortun": 15, "standalon": [15, 24], "adapt": 15, "hz": 15, "ledblink": 15, "half_freq": 15, "default_clk_frequ": 15, "icestick": 15, "link": [15, 24], "foss": 15, "probabl": 15, "icestickplatform": 15, "do_program": 15, "benefit": 15, "turnkei": 15, "abil": [15, 22], "three": 16, "categori": 16, "idiomat": [16, 24], "metaclass": [16, 24], "layout": 16, "ffsynchron": [16, 17], "One": [16, 21], "hot": 16, "prioriti": 16, "grai": 16, "syncfifobuff": [16, 23], "asyncfifobuff": [16, 23], "algorithm": [16, 19], "processor": [16, 19], "resynchronis": 17, "flip": [17, 24], "flop": 17, "metast": 17, "synchronis": 17, "o_domain": 17, "unaffect": 17, "stage": 17, "lowest": 17, "mtbf": 17, "cost": 17, "increas": [17, 23], "latenc": [17, 19, 23], "max_input_delai": 17, "float": [17, 21], "maximum": 17, "second": [17, 21], "fail": [17, 24], "safest": 17, "load": 17, "valid": [17, 19, 21, 23, 24], "target": [17, 21, 22, 24], "asic": 17, "arbitrari": [17, 21], "warm": 17, "insuffici": 17, "deassert": 17, "get_ff_sync": 17, "cell": 17, "primarili": [17, 24], "async_edg": 17, "po": 17, "get_async_ff_sync": 17, "gate": 17, "yet": 17, "promptli": 17, "arst": 17, "get_reset_sync": 17, "puls": 17, "duti": 17, "ratio": 17, "drop": [17, 22], "i_domain": 17, "encod": 18, "indic": [18, 19, 21, 24], "invalid": [18, 24], "decod": [18, 24], "th": 18, "priorityencod": 18, "prioritydecod": 18, "grayencod": 18, "graydecod": 18, "comput": [19, 24], "polynomi": [19, 20], "commonli": 19, "catalog": [19, 20], "accommod": [19, 21], "data_width": [19, 20, 24], "obtain": 19, "fulli": 19, "crc16": 19, "ccitt": 19, "byte": [19, 21], "crc16_ccitt": [19, 20], "submodul": [19, 20, 24], "algo": 19, "crc_width": [19, 20], "0x1021": [19, 20], "initial_crc": [19, 20], "0xffff": [19, 20], "reflect_input": [19, 20], "reflect_output": [19, 20], "xor_output": [19, 20], "0x0000": [19, 20], "123456789": 19, "0x29b1": 19, "exclud": 19, "william": 19, "painless": 19, "www": 19, "ross": 19, "net": 19, "crc_v3": 19, "reveng": [19, 20], "catalogu": 19, "parameteris": 19, "crcmod": 19, "polynomin": 19, "init": [19, 21], "zoo": 19, "entri": [19, 20, 23], "highest": 19, "order": [19, 21, 24], "transmiss": 19, "littl": 19, "endian": 19, "multi": 19, "0x4e4c": 19, "transmit": 19, "octet": 19, "0x4c": 19, "0x4e": 19, "addition": 19, "residu": 19, "codeword": 19, "bitwidth": 19, "arg": [19, 22, 24], "src_loc_at": [19, 24], "kwarg": [19, 22, 24], "stream": [19, 24], "handl": [19, 23], "subsequ": 19, "throughput": 19, "per": 19, "classic": 19, "serial": 19, "galoi": 19, "shift": 19, "match_detect": 19, "trail": 19, "initialis": 19, "simultan": 19, "crc3_gsm": [19, 20], "crc3_rohc": [19, 20], "crc4_g_704": [19, 20], "crc4_itu": [19, 20], "crc4_interlaken": [19, 20], "crc5_epc_c1g2": [19, 20], "crc5_epc": [19, 20], "crc5_g_704": [19, 20], "crc5_itu": [19, 20], "crc5_usb": [19, 20], "crc6_cdma2000_a": [19, 20], "crc6_cdma2000_b": [19, 20], "crc6_darc": [19, 20], "crc6_g_704": [19, 20], "crc6_itu": [19, 20], "crc6_gsm": [19, 20], "crc7_mmc": [19, 20], "crc7_rohc": [19, 20], "crc7_umt": [19, 20], "crc8_autosar": [19, 20], "crc8_bluetooth": [19, 20], "crc8_cdma2000": [19, 20], "crc8_darc": [19, 20], "crc8_dvb_s2": [19, 20], "crc8_gsm_a": [19, 20], "crc8_gsm_b": [19, 20], "crc8_hitag": [19, 20], "crc8_i_432_1": [19, 20], "crc8_itu": [19, 20], "crc8_i_cod": [19, 20], "crc8_lte": [19, 20], "crc8_maxim_dow": [19, 20], "crc8_maxim": [19, 20], "crc8_mifare_mad": [19, 20], "crc8_nrsc_5": [19, 20], "crc8_opensafeti": [19, 20], "crc8_rohc": [19, 20], "crc8_sae_j1850": [19, 20], "crc8_smbu": [19, 20], "crc8_tech_3250": [19, 20], "crc8_ae": [19, 20], "crc8_etu": [19, 20], "crc8_wcdma": [19, 20], "crc10_atm": [19, 20], "crc10_i_610": [19, 20], "crc10_cdma2000": [19, 20], "crc10_gsm": [19, 20], "crc11_flexrai": [19, 20], "crc11_umt": [19, 20], "crc12_cdma2000": [19, 20], "crc12_dect": [19, 20], "crc12_gsm": [19, 20], "crc12_umt": [19, 20], "crc12_3gpp": [19, 20], "crc13_bbc": [19, 20], "crc14_darc": [19, 20], "crc14_gsm": [19, 20], "crc15_can": [19, 20], "crc15_mpt1327": [19, 20], "crc16_arc": [19, 20], "crc16_ibm": [19, 20], "crc16_cdma2000": [19, 20], "crc16_cm": [19, 20], "crc16_dds_110": [19, 20], "crc16_dect_r": [19, 20], "crc16_dect_x": [19, 20], "crc16_dnp": [19, 20], "crc16_en_13757": [19, 20], "crc16_genibu": [19, 20], "crc16_darc": [19, 20], "crc16_epc": [19, 20], "crc16_epc_c1g2": [19, 20], "crc16_i_cod": [19, 20], "crc16_gsm": [19, 20], "crc16_ibm_3740": [19, 20], "crc16_autosar": [19, 20], "crc16_ccitt_fals": [19, 20], "crc16_ibm_sdlc": [19, 20], "crc16_iso_hdlc": [19, 20], "crc16_iso_iec_14443_3_b": [19, 20], "crc16_x25": [19, 20], "crc16_iso_iec_14443_3_a": [19, 20], "crc16_kermit": [19, 20], "crc16_bluetooth": [19, 20], "crc16_ccitt_tru": [19, 20], "crc16_v_41_lsb": [19, 20], "crc16_lj1200": [19, 20], "crc16_m17": [19, 20], "crc16_maxim_dow": [19, 20], "crc16_maxim": [19, 20], "crc16_mcrf4xx": [19, 20], "crc16_modbu": [19, 20], "crc16_nrsc_5": [19, 20], "crc16_opensafety_a": [19, 20], "crc16_opensafety_b": [19, 20], "crc16_profibu": [19, 20], "crc16_iec_61158_2": [19, 20], "crc16_riello": [19, 20], "crc16_spi_fujitsu": [19, 20], "crc16_aug_ccitt": [19, 20], "crc16_t10_dif": [19, 20], "crc16_teledisk": [19, 20], "crc16_tms37157": [19, 20], "crc16_umt": [19, 20], "crc16_buypass": [19, 20], "crc16_verifon": [19, 20], "crc16_usb": [19, 20], "crc16_xmodem": [19, 20], "crc16_acorn": [19, 20], "crc16_lte": [19, 20], "crc16_v_41_msb": [19, 20], "crc16_zmodem": [19, 20], "crc17_can_fd": [19, 20], "crc21_can_fd": [19, 20], "crc24_ble": [19, 20], "crc24_flexray_a": [19, 20], "crc24_flexray_b": [19, 20], "crc24_interlaken": [19, 20], "crc24_lte_a": [19, 20], "crc24_lte_b": [19, 20], "crc24_openpgp": [19, 20], "crc24_os_9": [19, 20], "crc30_cdma": [19, 20], "crc31_philip": [19, 20], "crc32_aixm": [19, 20], "crc32_autosar": [19, 20], "crc32_base91_d": [19, 20], "crc32_bzip2": [19, 20], "crc32_aal5": [19, 20], "crc32_dect_b": [19, 20], "crc32_cd_rom_edc": [19, 20], "crc32_cksum": [19, 20], "crc32_posix": [19, 20], "crc32_iscsi": [19, 20], "crc32_base91_c": [19, 20], "crc32_castagnoli": [19, 20], "crc32_interlaken": [19, 20], "crc32_iso_hdlc": [19, 20], "crc32_adccp": [19, 20], "crc32_v_42": [19, 20], "crc32_xz": [19, 20], "crc32_pkzip": [19, 20], "crc32_ethernet": [19, 20], "crc32_jamcrc": [19, 20], "crc32_mef": [19, 20], "crc32_mpeg_2": [19, 20], "crc32_xfer": [19, 20], "crc40_gsm": [19, 20], "crc64_ecma_182": [19, 20], "crc64_go_iso": [19, 20], "crc64_m": [19, 20], "crc64_redi": [19, 20], "crc64_we": [19, 20], "crc64_xz": [19, 20], "crc64_ecma": [19, 20], "crc82_darc": [19, 20], "2023": 20, "05": 20, "crc8": 20, "0x3": 20, "0x0": [20, 21], "0x7": 20, "0xf": 20, "0x9": 20, "0x15": 20, "0x5": 20, "0x1f": 20, "0x27": 20, "0x3f": 20, "0x19": 20, "0x2f": 20, "0x4f": 20, "0x7f": [20, 21], "0x45": 20, "0xff": 20, "0xa7": 20, "0x00": 20, "0x9b": 20, "0x39": 20, "0xd5": 20, "0x1d": 20, "0x49": 20, "0x07": 20, "0x55": 20, "0xfd": 20, "0x31": 20, "0xc7": 20, "0x233": 20, "0x3d9": 20, "0x3ff": 20, "0x175": 20, "0x385": 20, "0x1a": 20, "0x307": 20, "0xf13": 20, "0xfff": 20, "0x000": 20, "0x80f": 20, "0xd31": 20, "13": 20, "0x1cf5": 20, "14": [20, 21], "0x805": 20, "0x202d": 20, "0x3fff": 20, "0x4599": 20, "0x6815": 20, "0x001": 20, "0x8005": 20, "0xc867": 20, "0x800d": 20, "0x0589": 20, "0x0001": 20, "0x3d65": 20, "0xc6c6": 20, "0x6f63": 20, "0x5935": 20, "0x080b": 20, "0x755b": 20, "0x1dcf": 20, "0xb2aa": 20, "0x1d0f": 20, "0x8bb7": 20, "0xa097": 20, "0x89ec": 20, "0x1685b": 20, "21": 20, "0x102899": 20, "0x00000": 20, "24": [20, 21, 24], "0x00065b": 20, "0x555555": 20, "0x000000": 20, "0x5d6dcb": 20, "0xfedcba": 20, "0xabcdef": 20, "0x328b63": 20, "0xffffff": 20, "0x864cfb": 20, "0x800063": 20, "0xb704ce": 20, "0x2030b9c7": 20, "0x3fffffff": 20, "0x4c11db7": 20, "0x7fffffff": 20, "0x814141ab": 20, "0x00000000": 20, "0xf4acfb13": 20, "0xffffffff": 20, "0xa833982b": 20, "0x04c11db7": 20, "0x8001801b": 20, "0x1edc6f41": 20, "0x741b8cd7": 20, "0x000000af": 20, "0x0004820009": 20, "0x0000000000": 20, "0xffffffffff": 20, "0x42f0e1eba9ea3693": 20, "0x0000000000000000": 20, "0x000000000000001b": 20, "0xffffffffffffffff": 20, "0x259c84cba6426349": 20, "0xad93d23594c935a9": 20, "82": 20, "0x308c0111011401440411": 20, "0x00000000000000000000": 20, "bitwis": [21, 22], "four": [21, 24], "relat": [21, 24], "foundat": 21, "introspect": [21, 24], "structlayout": 21, "unionlayout": 21, "arraylayout": 21, "flexiblelayout": 21, "struct": 21, "fundament": 21, "intern": [21, 24], "pixel": 21, "rgb": 21, "grayscal": 21, "color": 21, "format": 21, "rgb565": 21, "fast": 21, "approxim": 21, "i_color": 21, "o_grai": 21, "repetit": [21, 24], "referenc": 21, "rgb565_layout": 21, "red": 21, "green": 21, "blue": 21, "accumul": 21, "averag": 21, "intens": 21, "input_layout": 21, "i_stream": 21, "r_accum": 21, "sum": 21, "interchang": 21, "rgb_layout": 21, "r_bit": 21, "g_bit": 21, "b_bit": 21, "rgb24_layout": 21, "transform": 21, "rgblayout": 21, "super": [21, 24], "rgbview": 21, "bright": 21, "as_valu": [21, 22], "static": [21, 24], "boilerpl": [21, 24], "ieee754singl": 21, "fraction": 21, "is_subnorm": 21, "set_addr": 21, "send_data": 21, "param": 21, "biggest": 21, "cmd": 21, "0x00001234": 21, "react": 21, "__eq__": [21, 22, 24], "kei": [21, 24], "identifi": 21, "span": 21, "preserv": 21, "invari": 21, "obj": [21, 24], "as_shap": [21, 22], "rais": [21, 22, 24], "recursionerror": 21, "__iter__": [21, 24], "__getitem__": [21, 24], "keyerror": 21, "size": 21, "underli": [21, 22], "gap": 21, "pad": 21, "altern": 21, "_1": 21, "_2": 21, "won": 21, "dictionari": [21, 24], "plu": [21, 23], "largest": 21, "elem_shap": 21, "multipli": 21, "individu": 21, "contigu": 21, "boundari": [21, 24], "arbitrarili": 21, "extern": [21, 24], "stride": 21, "truth": [21, 24], "chosen": 21, "dynam": 21, "leav": [21, 24], "rest": [21, 24], "look": 21, "repeatedli": 21, "latter": 21, "unspecifi": 21, "inout": 21, "__getattr__": [21, 24], "attributeerror": [21, 24], "underscor": [21, 24], "kept": 21, "ieee": 21, "754": 21, "flt": 21, "hex": 21, "0x3f800000": 21, "0xbf800000": 21, "share": 21, "haschecksum": 21, "checksum": 21, "barehead": 21, "headerwithparam": 21, "bare": 21, "varint": 21, "int8": 21, "int16": 21, "0x100": 21, "flag": [22, 24], "intflag": 22, "subi": 22, "behav": 22, "likewis": 22, "normalenum": 22, "spam": 22, "ham": 22, "enumview": [22, 24], "flagview": 22, "wrapper": [22, 24], "stdin": 22, "loos": 22, "transparentenum": 22, "instrview": 22, "has_immedi": 22, "view_class": 22, "d16": 22, "d17": 22, "enummeta": 22, "pass": [22, 24], "neither": [22, 24], "nor": [22, 24], "comparison": 22, "among": 22, "__invert__": 22, "__and__": 22, "__or__": 22, "__xor__": 22, "__rand__": 22, "__ror__": 22, "__rxor__": 22, "w_data": [23, 24], "w_rdy": 23, "w_en": 23, "r_rdy": 23, "noth": [23, 24], "unread": 23, "substitut": 23, "incompat": [23, 24], "ram": 23, "exchang": 23, "r_domain": 23, "w_domain": 23, "exact_depth": 23, "declar": 24, "signaturememb": 24, "flippedsignatur": 24, "flippedinterfac": 24, "flippedsignaturememb": 24, "vice": 24, "versa": 24, "interact": 24, "concept": 24, "basiccount": 24, "solut": 24, "rewritten": 24, "componentcount": 24, "constructor": 24, "gone": 24, "unchang": 24, "unambigu": 24, "question": 24, "previous": 24, "intend": 24, "genericcount": 24, "compliant": 24, "is_compli": 24, "direction": 24, "readi": [24, 25], "sink": 24, "consum": 24, "dataproduc": 24, "dataconsum": 24, "elsewher": 24, "simplestreamsignatur": 24, "data_shap": 24, "intact": 24, "intf": 24, "metaprogram": 24, "streamproduc": 24, "streamconsum": 24, "complementari": 24, "ubiquit": 24, "streamconsumerusingin": 24, "deep": 24, "in1": 24, "in2": 24, "auxiliari": 24, "robust": 24, "proportion": 24, "pronounc": 24, "refactor": 24, "conclud": 24, "knowledg": 24, "expos": 24, "dataprocessorimplement": 24, "dataprocessorwrapp": 24, "impl": 24, "dataforward": 24, "conform": 24, "producerrequiringreadi": 24, "consumeralwaysreadi": 24, "consumerpossiblyunreadi": 24, "connectionerror": 24, "arg0": 24, "prolifer": 24, "subtli": 24, "presenc": 24, "absenc": 24, "statu": 24, "legacyaxidataproduc": 24, "adata": 24, "avalid": 24, "areadi": 24, "moderndataconsum": 24, "data_produc": 24, "data_consum": 24, "adapted_data_sourc": 24, "encourag": 24, "creation": 24, "illustr": 24, "capabl": 24, "usefulli": 24, "transfertyp": 24, "simplebussignatur": 24, "addr_width": 24, "_addr_width": 24, "rw": 24, "isinst": 24, "__repr__": 24, "simplebusinterfac": 24, "is_read_xf": 24, "is_write_xf": 24, "mutabl": 24, "frozen": 24, "freez": 24, "almost": 24, "anonym": 24, "sig32": 24, "sig24": 24, "bus__en": 24, "bus__rw": 24, "bus__addr": 24, "bus__r_data": 24, "bus__w_data": 24, "unusu": 24, "__add__": 24, "ever": 24, "denot": 24, "buse": 24, "cyc": 24, "outgo": 24, "carri": 24, "respond": 24, "That": 24, "incom": 24, "shortcut": 24, "discrimin": 24, "union": 24, "taken": 24, "rgbpixel": 24, "dimens": 24, "prepend": 24, "dimension": 24, "is_port": 24, "is_signatur": 24, "signatureerror": 24, "nameerror": 24, "abc": 24, "manner": 24, "disallow": 24, "superscript": 24, "opreat": 24, "__contains__": 24, "__setitem__": 24, "stub": 24, "forbid": 24, "__delitem__": 24, "flatten": 24, "disregard": 24, "doubl": 24, "__": 24, "dict": 24, "unflip": 24, "flipped_memb": 24, "ing": 24, "influenc": 24, "obj__items__0": 24, "obj__items__1": 24, "prescrib": 24, "aspect": 24, "complianc": 24, "less": 24, "fill": 24, "help": 24, "repeat": 24, "serv": 24, "hoc": 24, "customsignatur": 24, "custominterfac": 24, "my_properti": 24, "accur": 24, "unavail": 24, "flipped_sig": 24, "attr": 24, "distinguish": 24, "signatureknowswhenflip": 24, "is_flip": 24, "getattr": 24, "getter": 24, "cl": 24, "__setattr__": 24, "setattr": 24, "setter": 24, "__delattr__": 24, "delattr": 24, "delet": 24, "signaturemeta": 24, "subtyp": 24, "relationship": 24, "issubclass": 24, "__subclasscheck__": 24, "__instancecheck__": 24, "overhead": 24, "__dict__": 24, "approach": 24, "id": 24, "checker": 24, "track": 24, "burdensom": 24, "flipped_intf": 24, "interfaceknowswhenflip": 24, "other_unflip": 24, "caveat": 24, "imposs": 24, "meaningless": 24, "forbidden": 24, "obj1": 24, "obj2": 24, "obj3": 24, "besid": 24, "out1": 24, "arbit": 24, "purpos": 24, "clarifi": 24, "fixedcompon": 24, "superclass": 24, "parametriccompon": 24, "rai": 24, "offici": 25, "vivonomicon": 25, "kbob": 25, "robert": 25, "baruch": 25, "exercis": 25, "my": 25, "journei": 25, "david": 25, "sporn": 25, "focuss": 25, "workstat": 25}, "objects": {"amaranth.lib": [[17, 0, 0, "-", "cdc"], [18, 0, 0, "-", "coding"], [19, 0, 0, "-", "crc"], [21, 0, 0, "-", "data"], [22, 0, 0, "-", "enum"], [23, 0, 0, "-", "fifo"], [24, 0, 0, "-", "wiring"]], "amaranth.lib.cdc": [[17, 1, 1, "", "AsyncFFSynchronizer"], [17, 1, 1, "", "FFSynchronizer"], [17, 1, 1, "", "PulseSynchronizer"], [17, 1, 1, "", "ResetSynchronizer"]], "amaranth.lib.coding": [[18, 1, 1, "", "Decoder"], [18, 1, 1, "", "Encoder"], [18, 1, 1, "", "GrayDecoder"], [18, 1, 1, "", "GrayEncoder"], [18, 1, 1, "", "PriorityDecoder"], [18, 1, 1, "", "PriorityEncoder"]], "amaranth.lib.crc": [[19, 1, 1, "", "Algorithm"], [19, 1, 1, "", "Parameters"], [19, 1, 1, "", "Processor"], [20, 0, 0, "-", "catalog"]], "amaranth.lib.crc.Algorithm": [[19, 2, 1, "", "__call__"]], "amaranth.lib.crc.Parameters": [[19, 3, 1, "", "algorithm"], [19, 2, 1, "", "compute"], [19, 2, 1, "", "create"], [19, 2, 1, "", "residue"]], "amaranth.lib.crc.catalog": [[20, 4, 1, "", "CRC10_ATM"], [20, 4, 1, "", "CRC10_CDMA2000"], [20, 4, 1, "", "CRC10_GSM"], [20, 4, 1, "", "CRC10_I_610"], [20, 4, 1, "", "CRC11_FLEXRAY"], [20, 4, 1, "", "CRC11_UMTS"], [20, 4, 1, "", "CRC12_3GPP"], [20, 4, 1, "", "CRC12_CDMA2000"], [20, 4, 1, "", "CRC12_DECT"], [20, 4, 1, "", "CRC12_GSM"], [20, 4, 1, "", "CRC12_UMTS"], [20, 4, 1, "", "CRC13_BBC"], [20, 4, 1, "", "CRC14_DARC"], [20, 4, 1, "", "CRC14_GSM"], [20, 4, 1, "", "CRC15_CAN"], [20, 4, 1, "", "CRC15_MPT1327"], [20, 4, 1, "", "CRC16_ACORN"], [20, 4, 1, "", "CRC16_ARC"], [20, 4, 1, "", "CRC16_AUG_CCITT"], [20, 4, 1, "", "CRC16_AUTOSAR"], [20, 4, 1, "", "CRC16_BLUETOOTH"], [20, 4, 1, "", "CRC16_BUYPASS"], [20, 4, 1, "", "CRC16_CCITT"], [20, 4, 1, "", "CRC16_CCITT_FALSE"], [20, 4, 1, "", "CRC16_CCITT_TRUE"], [20, 4, 1, "", "CRC16_CDMA2000"], [20, 4, 1, "", "CRC16_CMS"], [20, 4, 1, "", "CRC16_DARC"], [20, 4, 1, "", "CRC16_DDS_110"], [20, 4, 1, "", "CRC16_DECT_R"], [20, 4, 1, "", "CRC16_DECT_X"], [20, 4, 1, "", "CRC16_DNP"], [20, 4, 1, "", "CRC16_EN_13757"], [20, 4, 1, "", "CRC16_EPC"], [20, 4, 1, "", "CRC16_EPC_C1G2"], [20, 4, 1, "", "CRC16_GENIBUS"], [20, 4, 1, "", "CRC16_GSM"], [20, 4, 1, "", "CRC16_IBM"], [20, 4, 1, "", "CRC16_IBM_3740"], [20, 4, 1, "", "CRC16_IBM_SDLC"], [20, 4, 1, "", "CRC16_IEC_61158_2"], [20, 4, 1, "", "CRC16_ISO_HDLC"], [20, 4, 1, "", "CRC16_ISO_IEC_14443_3_A"], [20, 4, 1, "", "CRC16_ISO_IEC_14443_3_B"], [20, 4, 1, "", "CRC16_I_CODE"], [20, 4, 1, "", "CRC16_KERMIT"], [20, 4, 1, "", "CRC16_LJ1200"], [20, 4, 1, "", "CRC16_LTE"], [20, 4, 1, "", "CRC16_M17"], [20, 4, 1, "", "CRC16_MAXIM"], [20, 4, 1, "", "CRC16_MAXIM_DOW"], [20, 4, 1, "", "CRC16_MCRF4XX"], [20, 4, 1, "", "CRC16_MODBUS"], [20, 4, 1, "", "CRC16_NRSC_5"], [20, 4, 1, "", "CRC16_OPENSAFETY_A"], [20, 4, 1, "", "CRC16_OPENSAFETY_B"], [20, 4, 1, "", "CRC16_PROFIBUS"], [20, 4, 1, "", "CRC16_RIELLO"], [20, 4, 1, "", "CRC16_SPI_FUJITSU"], [20, 4, 1, "", "CRC16_T10_DIF"], [20, 4, 1, "", "CRC16_TELEDISK"], [20, 4, 1, "", "CRC16_TMS37157"], [20, 4, 1, "", "CRC16_UMTS"], [20, 4, 1, "", "CRC16_USB"], [20, 4, 1, "", "CRC16_VERIFONE"], [20, 4, 1, "", "CRC16_V_41_LSB"], [20, 4, 1, "", "CRC16_V_41_MSB"], [20, 4, 1, "", "CRC16_X25"], [20, 4, 1, "", "CRC16_XMODEM"], [20, 4, 1, "", "CRC16_ZMODEM"], [20, 4, 1, "", "CRC17_CAN_FD"], [20, 4, 1, "", "CRC21_CAN_FD"], [20, 4, 1, "", "CRC24_BLE"], [20, 4, 1, "", "CRC24_FLEXRAY_A"], [20, 4, 1, "", "CRC24_FLEXRAY_B"], [20, 4, 1, "", "CRC24_INTERLAKEN"], [20, 4, 1, "", "CRC24_LTE_A"], [20, 4, 1, "", "CRC24_LTE_B"], [20, 4, 1, "", "CRC24_OPENPGP"], [20, 4, 1, "", "CRC24_OS_9"], [20, 4, 1, "", "CRC30_CDMA"], [20, 4, 1, "", "CRC31_PHILIPS"], [20, 4, 1, "", "CRC32_AAL5"], [20, 4, 1, "", "CRC32_ADCCP"], [20, 4, 1, "", "CRC32_AIXM"], [20, 4, 1, "", "CRC32_AUTOSAR"], [20, 4, 1, "", "CRC32_BASE91_C"], [20, 4, 1, "", "CRC32_BASE91_D"], [20, 4, 1, "", "CRC32_BZIP2"], [20, 4, 1, "", "CRC32_CASTAGNOLI"], [20, 4, 1, "", "CRC32_CD_ROM_EDC"], [20, 4, 1, "", "CRC32_CKSUM"], [20, 4, 1, "", "CRC32_DECT_B"], [20, 4, 1, "", "CRC32_ETHERNET"], [20, 4, 1, "", "CRC32_INTERLAKEN"], [20, 4, 1, "", "CRC32_ISCSI"], [20, 4, 1, "", "CRC32_ISO_HDLC"], [20, 4, 1, "", "CRC32_JAMCRC"], [20, 4, 1, "", "CRC32_MEF"], [20, 4, 1, "", "CRC32_MPEG_2"], [20, 4, 1, "", "CRC32_PKZIP"], [20, 4, 1, "", "CRC32_POSIX"], [20, 4, 1, "", "CRC32_V_42"], [20, 4, 1, "", "CRC32_XFER"], [20, 4, 1, "", "CRC32_XZ"], [20, 4, 1, "", "CRC3_GSM"], [20, 4, 1, "", "CRC3_ROHC"], [20, 4, 1, "", "CRC40_GSM"], [20, 4, 1, "", "CRC4_G_704"], [20, 4, 1, "", "CRC4_INTERLAKEN"], [20, 4, 1, "", "CRC4_ITU"], [20, 4, 1, "", "CRC5_EPC"], [20, 4, 1, "", "CRC5_EPC_C1G2"], [20, 4, 1, "", "CRC5_G_704"], [20, 4, 1, "", "CRC5_ITU"], [20, 4, 1, "", "CRC5_USB"], [20, 4, 1, "", "CRC64_ECMA"], [20, 4, 1, "", "CRC64_ECMA_182"], [20, 4, 1, "", "CRC64_GO_ISO"], [20, 4, 1, "", "CRC64_MS"], [20, 4, 1, "", "CRC64_REDIS"], [20, 4, 1, "", "CRC64_WE"], [20, 4, 1, "", "CRC64_XZ"], [20, 4, 1, "", "CRC6_CDMA2000_A"], [20, 4, 1, "", "CRC6_CDMA2000_B"], [20, 4, 1, "", "CRC6_DARC"], [20, 4, 1, "", "CRC6_GSM"], [20, 4, 1, "", "CRC6_G_704"], [20, 4, 1, "", "CRC6_ITU"], [20, 4, 1, "", "CRC7_MMC"], [20, 4, 1, "", "CRC7_ROHC"], [20, 4, 1, "", "CRC7_UMTS"], [20, 4, 1, "", "CRC82_DARC"], [20, 4, 1, "", "CRC8_AES"], [20, 4, 1, "", "CRC8_AUTOSAR"], [20, 4, 1, "", "CRC8_BLUETOOTH"], [20, 4, 1, "", "CRC8_CDMA2000"], [20, 4, 1, "", "CRC8_DARC"], [20, 4, 1, "", "CRC8_DVB_S2"], [20, 4, 1, "", "CRC8_ETU"], [20, 4, 1, "", "CRC8_GSM_A"], [20, 4, 1, "", "CRC8_GSM_B"], [20, 4, 1, "", "CRC8_HITAG"], [20, 4, 1, "", "CRC8_ITU"], [20, 4, 1, "", "CRC8_I_432_1"], [20, 4, 1, "", "CRC8_I_CODE"], [20, 4, 1, "", "CRC8_LTE"], [20, 4, 1, "", "CRC8_MAXIM"], [20, 4, 1, "", "CRC8_MAXIM_DOW"], [20, 4, 1, "", "CRC8_MIFARE_MAD"], [20, 4, 1, "", "CRC8_NRSC_5"], [20, 4, 1, "", "CRC8_OPENSAFETY"], [20, 4, 1, "", "CRC8_ROHC"], [20, 4, 1, "", "CRC8_SAE_J1850"], [20, 4, 1, "", "CRC8_SMBUS"], [20, 4, 1, "", "CRC8_TECH_3250"], [20, 4, 1, "", "CRC8_WCDMA"]], "amaranth.lib.data": [[21, 1, 1, "", "ArrayLayout"], [21, 1, 1, "", "Field"], [21, 1, 1, "", "FlexibleLayout"], [21, 1, 1, "", "Layout"], [21, 1, 1, "", "Struct"], [21, 1, 1, "", "StructLayout"], [21, 1, 1, "", "Union"], [21, 1, 1, "", "UnionLayout"], [21, 1, 1, "", "View"]], "amaranth.lib.data.ArrayLayout": [[21, 3, 1, "", "size"]], "amaranth.lib.data.Field": [[21, 2, 1, "", "__eq__"], [21, 3, 1, "", "width"]], "amaranth.lib.data.Layout": [[21, 2, 1, "", "__call__"], [21, 2, 1, "", "__eq__"], [21, 2, 1, "", "__getitem__"], [21, 2, 1, "", "__iter__"], [21, 2, 1, "", "as_shape"], [21, 2, 1, "", "cast"], [21, 2, 1, "", "const"], [21, 3, 1, "", "size"]], "amaranth.lib.data.StructLayout": [[21, 3, 1, "", "size"]], "amaranth.lib.data.UnionLayout": [[21, 2, 1, "", "const"], [21, 3, 1, "", "size"]], "amaranth.lib.data.View": [[21, 2, 1, "", "__getattr__"], [21, 2, 1, "", "__getitem__"], [21, 2, 1, "", "as_value"], [21, 2, 1, "", "eq"], [21, 2, 1, "", "shape"]], "amaranth.lib.enum": [[22, 1, 1, "", "Enum"], [22, 1, 1, "", "EnumMeta"], [22, 1, 1, "", "EnumView"], [22, 1, 1, "", "Flag"], [22, 1, 1, "", "FlagView"], [22, 1, 1, "", "IntEnum"], [22, 1, 1, "", "IntFlag"]], "amaranth.lib.enum.EnumMeta": [[22, 2, 1, "", "__call__"], [22, 2, 1, "", "as_shape"]], "amaranth.lib.enum.EnumView": [[22, 2, 1, "", "__eq__"], [22, 2, 1, "", "__init__"], [22, 2, 1, "", "as_value"], [22, 2, 1, "", "eq"], [22, 2, 1, "", "shape"]], "amaranth.lib.enum.FlagView": [[22, 2, 1, "", "__and__"], [22, 2, 1, "", "__invert__"], [22, 2, 1, "", "__or__"], [22, 2, 1, "", "__rand__"], [22, 2, 1, "", "__ror__"], [22, 2, 1, "", "__rxor__"], [22, 2, 1, "", "__xor__"]], "amaranth.lib.fifo": [[23, 1, 1, "", "AsyncFIFO"], [23, 1, 1, "", "AsyncFIFOBuffered"], [23, 1, 1, "", "FIFOInterface"], [23, 1, 1, "", "SyncFIFO"], [23, 1, 1, "", "SyncFIFOBuffered"]], "amaranth.lib.wiring": [[24, 1, 1, "", "Component"], [24, 5, 1, "", "ConnectionError"], [24, 1, 1, "", "FlippedInterface"], [24, 1, 1, "", "FlippedSignature"], [24, 1, 1, "", "FlippedSignatureMembers"], [24, 1, 1, "", "Flow"], [24, 4, 1, "", "In"], [24, 1, 1, "", "Member"], [24, 4, 1, "", "Out"], [24, 1, 1, "", "PureInterface"], [24, 1, 1, "", "Signature"], [24, 5, 1, "", "SignatureError"], [24, 1, 1, "", "SignatureMembers"], [24, 1, 1, "", "SignatureMeta"], [24, 7, 1, "", "connect"], [24, 7, 1, "", "flipped"]], "amaranth.lib.wiring.Component": [[24, 3, 1, "", "signature"]], "amaranth.lib.wiring.FlippedInterface": [[24, 2, 1, "", "__delattr__"], [24, 2, 1, "", "__eq__"], [24, 2, 1, "", "__getattr__"], [24, 2, 1, "", "__setattr__"], [24, 3, 1, "", "signature"]], "amaranth.lib.wiring.FlippedSignature": [[24, 2, 1, "", "__delattr__"], [24, 2, 1, "", "__getattr__"], [24, 2, 1, "", "__setattr__"], [24, 2, 1, "", "flip"]], "amaranth.lib.wiring.FlippedSignatureMembers": [[24, 2, 1, "", "flip"]], "amaranth.lib.wiring.Flow": [[24, 6, 1, "", "In"], [24, 6, 1, "", "Out"], [24, 2, 1, "", "__call__"], [24, 2, 1, "", "flip"]], "amaranth.lib.wiring.Member": [[24, 2, 1, "", "array"], [24, 3, 1, "", "dimensions"], [24, 2, 1, "", "flip"], [24, 3, 1, "", "flow"], [24, 3, 1, "", "is_port"], [24, 3, 1, "", "is_signature"], [24, 3, 1, "", "reset"], [24, 3, 1, "", "shape"], [24, 3, 1, "", "signature"]], "amaranth.lib.wiring.PureInterface": [[24, 2, 1, "", "__init__"]], "amaranth.lib.wiring.Signature": [[24, 2, 1, "", "__eq__"], [24, 2, 1, "", "create"], [24, 2, 1, "", "flatten"], [24, 2, 1, "", "flip"], [24, 2, 1, "", "is_compliant"], [24, 3, 1, "", "members"]], "amaranth.lib.wiring.SignatureMembers": [[24, 2, 1, "", "__contains__"], [24, 2, 1, "", "__delitem__"], [24, 2, 1, "", "__eq__"], [24, 2, 1, "", "__getitem__"], [24, 2, 1, "", "__iter__"], [24, 2, 1, "", "__setitem__"], [24, 2, 1, "", "create"], [24, 2, 1, "", "flatten"], [24, 2, 1, "", "flip"]], "amaranth.lib.wiring.SignatureMeta": [[24, 2, 1, "", "__instancecheck__"], [24, 2, 1, "", "__subclasscheck__"]], "amaranth.vendor": [[8, 1, 1, "", "GowinPlatform"], [9, 1, 1, "", "IntelPlatform"], [10, 1, 1, "", "LatticeECP5Platform"], [11, 1, 1, "", "LatticeICE40Platform"], [12, 6, 1, "", "LatticeMachXO2Platform"], [12, 6, 1, "", "LatticeMachXO3LPlatform"], [13, 1, 1, "", "QuicklogicPlatform"], [14, 1, 1, "", "XilinxPlatform"]], "amaranth.vendor._lattice_machxo_2_3l": [[12, 1, 1, "", "LatticeMachXO2Or3LPlatform"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:property", "4": "py:data", "5": "py:exception", "6": "py:attribute", "7": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "property", "Python property"], "4": ["py", "data", "Python data"], "5": ["py", "exception", "Python exception"], "6": ["py", "attribute", "Python attribute"], "7": ["py", "function", "Python function"]}, "titleterms": {"changelog": 0, "version": 0, "0": 0, "5": 0, "unreleas": 0, "migrat": 0, "from": [0, 6], "4": 0, "implement": [0, 15], "rfc": 0, "languag": [0, 3, 5, 6], "chang": [0, 1], "standard": [0, 5, 16], "librari": [0, 5, 16], "platform": [0, 7], "integr": [0, 5, 7], "3": 0, "toolchain": [0, 3, 5], "2": 0, "1": 0, "contribut": 1, "file": 1, "problem": 1, "report": 1, "fix": 1, "propos": 1, "new": 1, "featur": 1, "work": 1, "codebas": 1, "prepar": 1, "environ": 1, "run": 1, "testsuit": 1, "build": [1, 5], "document": [1, 2], "your": 1, "weekli": 1, "meet": 1, "amaranth": [2, 4, 5], "project": 2, "instal": 4, "system": [4, 5], "requir": 4, "prerequisit": 4, "latest": 4, "releas": 4, "develop": [4, 5], "snapshot": 4, "edit": 4, "board": [4, 5], "definit": [4, 5], "todo": [4, 6, 7, 15, 25], "introduct": [5, 21, 24], "The": [5, 6], "simul": 5, "fpga": 5, "guid": 6, "prelud": 6, "shape": 6, "valu": 6, "constant": [6, 24], "cast": 6, "integ": 6, "rang": 6, "enumer": [6, 22], "member": 6, "signal": 6, "name": 6, "initi": 6, "reset": 6, "less": 6, "data": [6, 21], "structur": [6, 21], "oper": 6, "perform": 6, "describ": 6, "comput": 6, "width": 6, "extens": 6, "arithmet": 6, "comparison": 6, "bitwis": 6, "shift": 6, "rotat": 6, "reduct": 6, "logic": 6, "bit": 6, "sequenc": 6, "match": 6, "convers": [6, 18], "choic": 6, "modul": 6, "control": 6, "domain": [6, 17], "assign": 6, "target": 6, "order": 6, "flow": 6, "activ": 6, "inact": 6, "If": 6, "elif": 6, "els": 6, "block": 6, "switch": 6, "case": 6, "fsm": 6, "state": 6, "combinatori": 6, "evalu": 6, "synchron": 6, "clock": [6, 17], "late": 6, "bind": 6, "elabor": 6, "submodul": 6, "modifi": 6, "renam": 6, "memori": 6, "instanc": 6, "gowin": 8, "intel": 9, "lattic": [10, 11, 12], "ecp5": 10, "ice40": 11, "machxo2": 12, "machxo3l": 12, "quicklog": 13, "xilinx": 14, "get": 15, "start": 15, "A": 15, "counter": 15, "test": 15, "convert": 15, "blink": 15, "led": 15, "cross": 17, "code": 18, "One": 18, "hot": 18, "prioriti": 18, "grai": 18, "cyclic": 19, "redund": 19, "check": 19, "predefin": 20, "crc": 20, "algorithm": 20, "overview": [21, 24], "motiv": [21, 24], "compos": 21, "layout": 21, "defin": 21, "discrimin": 21, "union": 21, "model": 21, "common": 21, "view": [21, 22], "creat": 21, "access": 21, "custom": [21, 24], "class": [21, 22], "metaclass": 22, "base": 22, "first": 23, "out": 23, "queue": 23, "interfac": 24, "connect": 24, "reusabl": 24, "forward": 24, "interior": 24, "input": 24, "adapt": 24, "signatur": 24, "path": 24, "make": 24, "compon": 24, "tutori": 25}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx": 58}, "alltitles": {"Changelog": [[0, "changelog"]], "Version 0.5 (unreleased)": [[0, "version-0-5-unreleased"]], "Migrating from version 0.4": [[0, "migrating-from-version-0-4"]], "Implemented RFCs": [[0, "implemented-rfcs"], [0, "id1"]], "Language changes": [[0, "language-changes"], [0, "id2"], [0, "id5"]], "Standard library changes": [[0, "standard-library-changes"], [0, "id3"], [0, "id6"]], "Platform integration changes": [[0, "platform-integration-changes"], [0, "id4"], [0, "id8"]], "Version 0.4": [[0, "version-0-4"]], "Migrating from version 0.3": [[0, "migrating-from-version-0-3"]], "Toolchain changes": [[0, "toolchain-changes"], [0, "id7"]], "Version 0.3": [[0, "version-0-3"]], "Migrating from version 0.2": [[0, "migrating-from-version-0-2"]], "Versions 0.1, 0.2": [[0, "versions-0-1-0-2"]], "Contributing": [[1, "contributing"]], "Filing problem reports": [[1, "filing-problem-reports"]], "Fixing problems": [[1, "fixing-problems"]], "Proposing new features": [[1, "proposing-new-features"]], "Working with the codebase": [[1, "working-with-the-codebase"]], "Preparing the environment": [[1, "preparing-the-environment"]], "Running the testsuite": [[1, "running-the-testsuite"]], "Building the documentation": [[1, "building-the-documentation"]], "Contributing your changes": [[1, "contributing-your-changes"]], "Weekly meetings": [[1, "weekly-meetings"]], "Amaranth project documentation": [[2, "amaranth-project-documentation"]], "Language & toolchain": [[3, "language-toolchain"]], "Installation": [[4, "installation"]], "System requirements": [[4, "system-requirements"]], "Installing prerequisites": [[4, "installing-prerequisites"]], "Installing Amaranth": [[4, "installing-amaranth"]], "Latest release": [[4, "latest-release"]], "Development snapshot": [[4, "development-snapshot"]], "Editable development snapshot": [[4, "editable-development-snapshot"]], "Installing board definitions": [[4, "installing-board-definitions"]], "Todo": [[4, "id1"], [6, "id14"], [6, "id15"], [6, "id16"], [7, "id1"], [15, "id1"], [25, "id1"]], "Introduction": [[5, "introduction"], [21, "introduction"], [24, "introduction"]], "The Amaranth language": [[5, "the-amaranth-language"]], "The Amaranth standard library": [[5, "the-amaranth-standard-library"]], "The Amaranth simulator": [[5, "the-amaranth-simulator"]], "The Amaranth build system": [[5, "the-amaranth-build-system"]], "FPGA toolchain integration": [[5, "fpga-toolchain-integration"]], "Development board definitions": [[5, "development-board-definitions"]], "Language guide": [[6, "language-guide"]], "The prelude": [[6, "the-prelude"]], "Shapes": [[6, "shapes"]], "Shapes of values": [[6, "shapes-of-values"]], "Values": [[6, "values"]], "Constants": [[6, "constants"]], "Shape casting": [[6, "shape-casting"]], "Shapes from integers": [[6, "shapes-from-integers"]], "Shapes from ranges": [[6, "shapes-from-ranges"]], "Shapes from enumerations": [[6, "shapes-from-enumerations"]], "Value casting": [[6, "value-casting"]], "Values from integers": [[6, "values-from-integers"]], "Values from enumeration members": [[6, "values-from-enumeration-members"]], "Constant casting": [[6, "constant-casting"]], "Signals": [[6, "signals"]], "Signal shapes": [[6, "signal-shapes"]], "Signal names": [[6, "signal-names"]], "Initial signal values": [[6, "initial-signal-values"]], "Reset-less signals": [[6, "reset-less-signals"]], "Data structures": [[6, "data-structures"], [21, "module-amaranth.lib.data"]], "Operators": [[6, "operators"]], "Performing or describing computations?": [[6, "performing-or-describing-computations"]], "Width extension": [[6, "width-extension"]], "Arithmetic operators": [[6, "arithmetic-operators"]], "Comparison operators": [[6, "comparison-operators"]], "Bitwise, shift, and rotate operators": [[6, "bitwise-shift-and-rotate-operators"]], "Reduction operators": [[6, "reduction-operators"]], "Logical operators": [[6, "logical-operators"]], "Bit sequence operators": [[6, "bit-sequence-operators"]], "Match operator": [[6, "match-operator"]], "Conversion operators": [[6, "conversion-operators"]], "Choice operator": [[6, "choice-operator"]], "Modules": [[6, "modules"]], "Control domains": [[6, "control-domains"]], "Assigning to signals": [[6, "assigning-to-signals"]], "Assignment targets": [[6, "assignment-targets"]], "Assignment domains": [[6, "assignment-domains"]], "Assignment order": [[6, "assignment-order"]], "Control flow": [[6, "control-flow"]], "Active and inactive assignments": [[6, "active-and-inactive-assignments"]], "If/Elif/Else control blocks": [[6, "if-elif-else-control-blocks"]], "Switch/Case control blocks": [[6, "switch-case-control-blocks"]], "FSM/State control blocks": [[6, "fsm-state-control-blocks"]], "Combinatorial evaluation": [[6, "combinatorial-evaluation"]], "Synchronous evaluation": [[6, "synchronous-evaluation"]], "Clock domains": [[6, "clock-domains"]], "Late binding of clock and reset signals": [[6, "late-binding-of-clock-and-reset-signals"]], "Elaboration": [[6, "elaboration"]], "Submodules": [[6, "submodules"]], "Modifying control flow": [[6, "modifying-control-flow"]], "Renaming domains": [[6, "renaming-domains"]], "Memories": [[6, "memories"]], "Instances": [[6, "instances"]], "Platform integration": [[7, "platform-integration"]], "Gowin": [[8, "gowin"]], "Intel": [[9, "intel"]], "Lattice ECP5": [[10, "lattice-ecp5"]], "Lattice iCE40": [[11, "lattice-ice40"]], "Lattice MachXO2 and MachXO3L": [[12, "lattice-machxo2-and-machxo3l"]], "Quicklogic": [[13, "quicklogic"]], "Xilinx": [[14, "xilinx"]], "Getting started": [[15, "getting-started"]], "A counter": [[15, "a-counter"]], "Implementing a counter": [[15, "implementing-a-counter"]], "Testing a counter": [[15, "testing-a-counter"]], "Converting a counter": [[15, "converting-a-counter"]], "A blinking LED": [[15, "a-blinking-led"]], "Standard library": [[16, "standard-library"]], "Clock domain crossing": [[17, "module-amaranth.lib.cdc"]], "Code conversion": [[18, "module-amaranth.lib.coding"]], "One-hot coding": [[18, "one-hot-coding"]], "Priority coding": [[18, "priority-coding"]], "Gray coding": [[18, "gray-coding"]], "Cyclic redundancy checks": [[19, "module-amaranth.lib.crc"]], "Predefined CRC Algorithms": [[20, "module-amaranth.lib.crc.catalog"]], "Overview": [[21, "overview"], [24, "overview"]], "Motivation": [[21, "motivation"], [24, "motivation"]], "Composing layouts": [[21, "composing-layouts"]], "Defining layouts": [[21, "defining-layouts"]], "Discriminated unions": [[21, "discriminated-unions"]], "Modeling structured data": [[21, "modeling-structured-data"]], "Common data layouts": [[21, "common-data-layouts"]], "Data views": [[21, "data-views"]], "Creating a view": [[21, "creating-a-view"]], "Accessing a view": [[21, "accessing-a-view"]], "Custom view classes": [[21, "custom-view-classes"]], "Data classes": [[21, "data-classes"]], "Enumerations": [[22, "module-amaranth.lib.enum"]], "Metaclass": [[22, "metaclass"]], "Base classes": [[22, "base-classes"]], "View classes": [[22, "view-classes"]], "First-in first-out queues": [[23, "module-amaranth.lib.fifo"]], "Interfaces and connections": [[24, "module-amaranth.lib.wiring"]], "Reusable interfaces": [[24, "reusable-interfaces"]], "Forwarding interior interfaces": [[24, "forwarding-interior-interfaces"]], "Constant inputs": [[24, "constant-inputs"]], "Adapting interfaces": [[24, "adapting-interfaces"]], "Customizing signatures and interfaces": [[24, "customizing-signatures-and-interfaces"]], "Paths": [[24, "paths"]], "Signatures": [[24, "signatures"]], "Interfaces": [[24, "interfaces"]], "Making connections": [[24, "making-connections"]], "Components": [[24, "components"]], "Tutorial": [[25, "tutorial"]]}, "indexentries": {"gowinplatform (class in amaranth.vendor)": [[8, "amaranth.vendor.GowinPlatform"]], "intelplatform (class in amaranth.vendor)": [[9, "amaranth.vendor.IntelPlatform"]], "latticeecp5platform (class in amaranth.vendor)": [[10, "amaranth.vendor.LatticeECP5Platform"]], "latticeice40platform (class in amaranth.vendor)": [[11, "amaranth.vendor.LatticeICE40Platform"]], "latticemachxo2or3lplatform (class in amaranth.vendor._lattice_machxo_2_3l)": [[12, "amaranth.vendor._lattice_machxo_2_3l.LatticeMachXO2Or3LPlatform"]], "latticemachxo2platform (in module amaranth.vendor)": [[12, "amaranth.vendor.LatticeMachXO2Platform"]], "latticemachxo3lplatform (in module amaranth.vendor)": [[12, "amaranth.vendor.LatticeMachXO3LPlatform"]], "quicklogicplatform (class in amaranth.vendor)": [[13, "amaranth.vendor.QuicklogicPlatform"]], "xilinxplatform (class in amaranth.vendor)": [[14, "amaranth.vendor.XilinxPlatform"]], "asyncffsynchronizer (class in amaranth.lib.cdc)": [[17, "amaranth.lib.cdc.AsyncFFSynchronizer"]], "ffsynchronizer (class in amaranth.lib.cdc)": [[17, "amaranth.lib.cdc.FFSynchronizer"]], "pulsesynchronizer (class in amaranth.lib.cdc)": [[17, "amaranth.lib.cdc.PulseSynchronizer"]], "resetsynchronizer (class in amaranth.lib.cdc)": [[17, "amaranth.lib.cdc.ResetSynchronizer"]], "amaranth.lib.cdc": [[17, "module-amaranth.lib.cdc"]], "module": [[17, "module-amaranth.lib.cdc"], [18, "module-amaranth.lib.coding"], [19, "module-amaranth.lib.crc"], [20, "module-amaranth.lib.crc.catalog"], [21, "module-amaranth.lib.data"], [22, "module-amaranth.lib.enum"], [23, "module-amaranth.lib.fifo"], [24, "module-amaranth.lib.wiring"]], "decoder (class in amaranth.lib.coding)": [[18, "amaranth.lib.coding.Decoder"]], "encoder (class in amaranth.lib.coding)": [[18, "amaranth.lib.coding.Encoder"]], "graydecoder (class in amaranth.lib.coding)": [[18, "amaranth.lib.coding.GrayDecoder"]], "grayencoder (class in amaranth.lib.coding)": [[18, "amaranth.lib.coding.GrayEncoder"]], "prioritydecoder (class in amaranth.lib.coding)": [[18, "amaranth.lib.coding.PriorityDecoder"]], "priorityencoder (class in amaranth.lib.coding)": [[18, "amaranth.lib.coding.PriorityEncoder"]], "amaranth.lib.coding": [[18, "module-amaranth.lib.coding"]], "algorithm (class in amaranth.lib.crc)": [[19, "amaranth.lib.crc.Algorithm"]], "parameters (class in amaranth.lib.crc)": [[19, "amaranth.lib.crc.Parameters"]], "processor (class in amaranth.lib.crc)": [[19, "amaranth.lib.crc.Processor"]], "__call__() (amaranth.lib.crc.algorithm method)": [[19, "amaranth.lib.crc.Algorithm.__call__"]], "algorithm (amaranth.lib.crc.parameters property)": [[19, "amaranth.lib.crc.Parameters.algorithm"]], "amaranth.lib.crc": [[19, "module-amaranth.lib.crc"]], "compute() (amaranth.lib.crc.parameters method)": [[19, "amaranth.lib.crc.Parameters.compute"]], "create() (amaranth.lib.crc.parameters method)": [[19, "amaranth.lib.crc.Parameters.create"]], "residue() (amaranth.lib.crc.parameters method)": [[19, "amaranth.lib.crc.Parameters.residue"]], "crc10_atm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC10_ATM"]], "crc10_cdma2000 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC10_CDMA2000"]], "crc10_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC10_GSM"]], "crc10_i_610 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC10_I_610"]], "crc11_flexray (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC11_FLEXRAY"]], "crc11_umts (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC11_UMTS"]], "crc12_3gpp (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC12_3GPP"]], "crc12_cdma2000 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC12_CDMA2000"]], "crc12_dect (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC12_DECT"]], "crc12_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC12_GSM"]], "crc12_umts (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC12_UMTS"]], "crc13_bbc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC13_BBC"]], "crc14_darc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC14_DARC"]], "crc14_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC14_GSM"]], "crc15_can (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC15_CAN"]], "crc15_mpt1327 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC15_MPT1327"]], "crc16_acorn (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ACORN"]], "crc16_arc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ARC"]], "crc16_aug_ccitt (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_AUG_CCITT"]], "crc16_autosar (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_AUTOSAR"]], "crc16_bluetooth (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_BLUETOOTH"]], "crc16_buypass (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_BUYPASS"]], "crc16_ccitt (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_CCITT"]], "crc16_ccitt_false (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_CCITT_FALSE"]], "crc16_ccitt_true (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_CCITT_TRUE"]], "crc16_cdma2000 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_CDMA2000"]], "crc16_cms (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_CMS"]], "crc16_darc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_DARC"]], "crc16_dds_110 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_DDS_110"]], "crc16_dect_r (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_DECT_R"]], "crc16_dect_x (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_DECT_X"]], "crc16_dnp (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_DNP"]], "crc16_en_13757 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_EN_13757"]], "crc16_epc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_EPC"]], "crc16_epc_c1g2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_EPC_C1G2"]], "crc16_genibus (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_GENIBUS"]], "crc16_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_GSM"]], "crc16_ibm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_IBM"]], "crc16_ibm_3740 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_IBM_3740"]], "crc16_ibm_sdlc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_IBM_SDLC"]], "crc16_iec_61158_2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_IEC_61158_2"]], "crc16_iso_hdlc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ISO_HDLC"]], "crc16_iso_iec_14443_3_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ISO_IEC_14443_3_A"]], "crc16_iso_iec_14443_3_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ISO_IEC_14443_3_B"]], "crc16_i_code (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_I_CODE"]], "crc16_kermit (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_KERMIT"]], "crc16_lj1200 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_LJ1200"]], "crc16_lte (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_LTE"]], "crc16_m17 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_M17"]], "crc16_maxim (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_MAXIM"]], "crc16_maxim_dow (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_MAXIM_DOW"]], "crc16_mcrf4xx (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_MCRF4XX"]], "crc16_modbus (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_MODBUS"]], "crc16_nrsc_5 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_NRSC_5"]], "crc16_opensafety_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_OPENSAFETY_A"]], "crc16_opensafety_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_OPENSAFETY_B"]], "crc16_profibus (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_PROFIBUS"]], "crc16_riello (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_RIELLO"]], "crc16_spi_fujitsu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_SPI_FUJITSU"]], "crc16_t10_dif (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_T10_DIF"]], "crc16_teledisk (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_TELEDISK"]], "crc16_tms37157 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_TMS37157"]], "crc16_umts (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_UMTS"]], "crc16_usb (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_USB"]], "crc16_verifone (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_VERIFONE"]], "crc16_v_41_lsb (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_V_41_LSB"]], "crc16_v_41_msb (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_V_41_MSB"]], "crc16_x25 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_X25"]], "crc16_xmodem (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_XMODEM"]], "crc16_zmodem (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ZMODEM"]], "crc17_can_fd (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC17_CAN_FD"]], "crc21_can_fd (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC21_CAN_FD"]], "crc24_ble (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_BLE"]], "crc24_flexray_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_FLEXRAY_A"]], "crc24_flexray_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_FLEXRAY_B"]], "crc24_interlaken (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_INTERLAKEN"]], "crc24_lte_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_LTE_A"]], "crc24_lte_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_LTE_B"]], "crc24_openpgp (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_OPENPGP"]], "crc24_os_9 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_OS_9"]], "crc30_cdma (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC30_CDMA"]], "crc31_philips (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC31_PHILIPS"]], "crc32_aal5 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_AAL5"]], "crc32_adccp (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_ADCCP"]], "crc32_aixm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_AIXM"]], "crc32_autosar (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_AUTOSAR"]], "crc32_base91_c (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_BASE91_C"]], "crc32_base91_d (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_BASE91_D"]], "crc32_bzip2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_BZIP2"]], "crc32_castagnoli (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_CASTAGNOLI"]], "crc32_cd_rom_edc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_CD_ROM_EDC"]], "crc32_cksum (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_CKSUM"]], "crc32_dect_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_DECT_B"]], "crc32_ethernet (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_ETHERNET"]], "crc32_interlaken (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_INTERLAKEN"]], "crc32_iscsi (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_ISCSI"]], "crc32_iso_hdlc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_ISO_HDLC"]], "crc32_jamcrc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_JAMCRC"]], "crc32_mef (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_MEF"]], "crc32_mpeg_2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_MPEG_2"]], "crc32_pkzip (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_PKZIP"]], "crc32_posix (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_POSIX"]], "crc32_v_42 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_V_42"]], "crc32_xfer (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_XFER"]], "crc32_xz (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_XZ"]], "crc3_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC3_GSM"]], "crc3_rohc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC3_ROHC"]], "crc40_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC40_GSM"]], "crc4_g_704 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC4_G_704"]], "crc4_interlaken (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC4_INTERLAKEN"]], "crc4_itu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC4_ITU"]], "crc5_epc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC5_EPC"]], "crc5_epc_c1g2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC5_EPC_C1G2"]], "crc5_g_704 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC5_G_704"]], "crc5_itu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC5_ITU"]], "crc5_usb (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC5_USB"]], "crc64_ecma (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_ECMA"]], "crc64_ecma_182 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_ECMA_182"]], "crc64_go_iso (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_GO_ISO"]], "crc64_ms (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_MS"]], "crc64_redis (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_REDIS"]], "crc64_we (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_WE"]], "crc64_xz (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_XZ"]], "crc6_cdma2000_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_CDMA2000_A"]], "crc6_cdma2000_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_CDMA2000_B"]], "crc6_darc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_DARC"]], "crc6_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_GSM"]], "crc6_g_704 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_G_704"]], "crc6_itu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_ITU"]], "crc7_mmc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC7_MMC"]], "crc7_rohc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC7_ROHC"]], "crc7_umts (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC7_UMTS"]], "crc82_darc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC82_DARC"]], "crc8_aes (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_AES"]], "crc8_autosar (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_AUTOSAR"]], "crc8_bluetooth (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_BLUETOOTH"]], "crc8_cdma2000 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_CDMA2000"]], "crc8_darc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_DARC"]], "crc8_dvb_s2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_DVB_S2"]], "crc8_etu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_ETU"]], "crc8_gsm_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_GSM_A"]], "crc8_gsm_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_GSM_B"]], "crc8_hitag (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_HITAG"]], "crc8_itu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_ITU"]], "crc8_i_432_1 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_I_432_1"]], "crc8_i_code (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_I_CODE"]], "crc8_lte (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_LTE"]], "crc8_maxim (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_MAXIM"]], "crc8_maxim_dow (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_MAXIM_DOW"]], "crc8_mifare_mad (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_MIFARE_MAD"]], "crc8_nrsc_5 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_NRSC_5"]], "crc8_opensafety (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_OPENSAFETY"]], "crc8_rohc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_ROHC"]], "crc8_sae_j1850 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_SAE_J1850"]], "crc8_smbus (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_SMBUS"]], "crc8_tech_3250 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_TECH_3250"]], "crc8_wcdma (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_WCDMA"]], "amaranth.lib.crc.catalog": [[20, "module-amaranth.lib.crc.catalog"]], "arraylayout (class in amaranth.lib.data)": [[21, "amaranth.lib.data.ArrayLayout"]], "field (class in amaranth.lib.data)": [[21, "amaranth.lib.data.Field"]], "flexiblelayout (class in amaranth.lib.data)": [[21, "amaranth.lib.data.FlexibleLayout"]], "layout (class in amaranth.lib.data)": [[21, "amaranth.lib.data.Layout"]], "struct (class in amaranth.lib.data)": [[21, "amaranth.lib.data.Struct"]], "structlayout (class in amaranth.lib.data)": [[21, "amaranth.lib.data.StructLayout"]], "union (class in amaranth.lib.data)": [[21, "amaranth.lib.data.Union"]], "unionlayout (class in amaranth.lib.data)": [[21, "amaranth.lib.data.UnionLayout"]], "view (class in amaranth.lib.data)": [[21, "amaranth.lib.data.View"]], "__call__() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.__call__"]], "__eq__() (amaranth.lib.data.field method)": [[21, "amaranth.lib.data.Field.__eq__"]], "__eq__() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.__eq__"]], "__getattr__() (amaranth.lib.data.view method)": [[21, "amaranth.lib.data.View.__getattr__"]], "__getitem__() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.__getitem__"]], "__getitem__() (amaranth.lib.data.view method)": [[21, "amaranth.lib.data.View.__getitem__"]], "__iter__() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.__iter__"]], "amaranth.lib.data": [[21, "module-amaranth.lib.data"]], "as_shape() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.as_shape"]], "as_value() (amaranth.lib.data.view method)": [[21, "amaranth.lib.data.View.as_value"]], "cast() (amaranth.lib.data.layout static method)": [[21, "amaranth.lib.data.Layout.cast"]], "const() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.const"]], "const() (amaranth.lib.data.unionlayout method)": [[21, "amaranth.lib.data.UnionLayout.const"]], "eq() (amaranth.lib.data.view method)": [[21, "amaranth.lib.data.View.eq"]], "shape() (amaranth.lib.data.view method)": [[21, "amaranth.lib.data.View.shape"]], "size (amaranth.lib.data.arraylayout property)": [[21, "amaranth.lib.data.ArrayLayout.size"]], "size (amaranth.lib.data.layout property)": [[21, "amaranth.lib.data.Layout.size"]], "size (amaranth.lib.data.structlayout property)": [[21, "amaranth.lib.data.StructLayout.size"]], "size (amaranth.lib.data.unionlayout property)": [[21, "amaranth.lib.data.UnionLayout.size"]], "width (amaranth.lib.data.field property)": [[21, "amaranth.lib.data.Field.width"]], "enum (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.Enum"]], "enummeta (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.EnumMeta"]], "enumview (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.EnumView"]], "flag (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.Flag"]], "flagview (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.FlagView"]], "intenum (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.IntEnum"]], "intflag (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.IntFlag"]], "__and__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__and__"]], "__call__() (amaranth.lib.enum.enummeta method)": [[22, "amaranth.lib.enum.EnumMeta.__call__"]], "__eq__() (amaranth.lib.enum.enumview method)": [[22, "amaranth.lib.enum.EnumView.__eq__"]], "__init__() (amaranth.lib.enum.enumview method)": [[22, "amaranth.lib.enum.EnumView.__init__"]], "__invert__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__invert__"]], "__or__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__or__"]], "__rand__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__rand__"]], "__ror__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__ror__"]], "__rxor__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__rxor__"]], "__xor__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__xor__"]], "amaranth.lib.enum": [[22, "module-amaranth.lib.enum"]], "as_shape() (amaranth.lib.enum.enummeta method)": [[22, "amaranth.lib.enum.EnumMeta.as_shape"]], "as_value() (amaranth.lib.enum.enumview method)": [[22, "amaranth.lib.enum.EnumView.as_value"]], "eq() (amaranth.lib.enum.enumview method)": [[22, "amaranth.lib.enum.EnumView.eq"]], "shape() (amaranth.lib.enum.enumview method)": [[22, "amaranth.lib.enum.EnumView.shape"]], "asyncfifo (class in amaranth.lib.fifo)": [[23, "amaranth.lib.fifo.AsyncFIFO"]], "asyncfifobuffered (class in amaranth.lib.fifo)": [[23, "amaranth.lib.fifo.AsyncFIFOBuffered"]], "fifointerface (class in amaranth.lib.fifo)": [[23, "amaranth.lib.fifo.FIFOInterface"]], "syncfifo (class in amaranth.lib.fifo)": [[23, "amaranth.lib.fifo.SyncFIFO"]], "syncfifobuffered (class in amaranth.lib.fifo)": [[23, "amaranth.lib.fifo.SyncFIFOBuffered"]], "amaranth.lib.fifo": [[23, "module-amaranth.lib.fifo"]], "component (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.Component"]], "connectionerror": [[24, "amaranth.lib.wiring.ConnectionError"]], "flippedinterface (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.FlippedInterface"]], "flippedsignature (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.FlippedSignature"]], "flippedsignaturemembers (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.FlippedSignatureMembers"]], "flow (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.Flow"]], "in (amaranth.lib.wiring.flow attribute)": [[24, "amaranth.lib.wiring.Flow.In"]], "in (in module amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.In"]], "member (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.Member"]], "out (amaranth.lib.wiring.flow attribute)": [[24, "amaranth.lib.wiring.Flow.Out"]], "out (in module amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.Out"]], "pureinterface (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.PureInterface"]], "signature (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.Signature"]], "signatureerror": [[24, "amaranth.lib.wiring.SignatureError"]], "signaturemembers (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.SignatureMembers"]], "signaturemeta (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.SignatureMeta"]], "__call__() (amaranth.lib.wiring.flow method)": [[24, "amaranth.lib.wiring.Flow.__call__"]], "__contains__() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.__contains__"]], "__delattr__() (amaranth.lib.wiring.flippedinterface method)": [[24, "amaranth.lib.wiring.FlippedInterface.__delattr__"]], "__delattr__() (amaranth.lib.wiring.flippedsignature method)": [[24, "amaranth.lib.wiring.FlippedSignature.__delattr__"]], "__delitem__() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.__delitem__"]], "__eq__() (amaranth.lib.wiring.flippedinterface method)": [[24, "amaranth.lib.wiring.FlippedInterface.__eq__"]], "__eq__() (amaranth.lib.wiring.signature method)": [[24, "amaranth.lib.wiring.Signature.__eq__"]], "__eq__() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.__eq__"]], "__getattr__() (amaranth.lib.wiring.flippedinterface method)": [[24, "amaranth.lib.wiring.FlippedInterface.__getattr__"]], "__getattr__() (amaranth.lib.wiring.flippedsignature method)": [[24, "amaranth.lib.wiring.FlippedSignature.__getattr__"]], "__getitem__() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.__getitem__"]], "__init__() (amaranth.lib.wiring.pureinterface method)": [[24, "amaranth.lib.wiring.PureInterface.__init__"]], "__instancecheck__() (amaranth.lib.wiring.signaturemeta method)": [[24, "amaranth.lib.wiring.SignatureMeta.__instancecheck__"]], "__iter__() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.__iter__"]], "__setattr__() (amaranth.lib.wiring.flippedinterface method)": [[24, "amaranth.lib.wiring.FlippedInterface.__setattr__"]], "__setattr__() (amaranth.lib.wiring.flippedsignature method)": [[24, "amaranth.lib.wiring.FlippedSignature.__setattr__"]], "__setitem__() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.__setitem__"]], "__subclasscheck__() (amaranth.lib.wiring.signaturemeta method)": [[24, "amaranth.lib.wiring.SignatureMeta.__subclasscheck__"]], "amaranth.lib.wiring": [[24, "module-amaranth.lib.wiring"]], "array() (amaranth.lib.wiring.member method)": [[24, "amaranth.lib.wiring.Member.array"]], "connect() (in module amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.connect"]], "create() (amaranth.lib.wiring.signature method)": [[24, "amaranth.lib.wiring.Signature.create"]], "create() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.create"]], "dimensions (amaranth.lib.wiring.member property)": [[24, "amaranth.lib.wiring.Member.dimensions"]], "flatten() (amaranth.lib.wiring.signature method)": [[24, "amaranth.lib.wiring.Signature.flatten"]], "flatten() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.flatten"]], "flip() (amaranth.lib.wiring.flippedsignature method)": [[24, "amaranth.lib.wiring.FlippedSignature.flip"]], "flip() (amaranth.lib.wiring.flippedsignaturemembers method)": [[24, "amaranth.lib.wiring.FlippedSignatureMembers.flip"]], "flip() (amaranth.lib.wiring.flow method)": [[24, "amaranth.lib.wiring.Flow.flip"]], "flip() (amaranth.lib.wiring.member method)": [[24, "amaranth.lib.wiring.Member.flip"]], "flip() (amaranth.lib.wiring.signature method)": [[24, "amaranth.lib.wiring.Signature.flip"]], "flip() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.flip"]], "flipped() (in module amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.flipped"]], "flow (amaranth.lib.wiring.member property)": [[24, "amaranth.lib.wiring.Member.flow"]], "is_compliant() (amaranth.lib.wiring.signature method)": [[24, "amaranth.lib.wiring.Signature.is_compliant"]], "is_port (amaranth.lib.wiring.member property)": [[24, "amaranth.lib.wiring.Member.is_port"]], "is_signature (amaranth.lib.wiring.member property)": [[24, "amaranth.lib.wiring.Member.is_signature"]], "members (amaranth.lib.wiring.signature property)": [[24, "amaranth.lib.wiring.Signature.members"]], "reset (amaranth.lib.wiring.member property)": [[24, "amaranth.lib.wiring.Member.reset"]], "shape (amaranth.lib.wiring.member property)": [[24, "amaranth.lib.wiring.Member.shape"]], "signature (amaranth.lib.wiring.component property)": [[24, "amaranth.lib.wiring.Component.signature"]], "signature (amaranth.lib.wiring.flippedinterface property)": [[24, "amaranth.lib.wiring.FlippedInterface.signature"]], "signature (amaranth.lib.wiring.member property)": [[24, "amaranth.lib.wiring.Member.signature"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["changes", "contrib", "cover", "index", "install", "intro", "lang", "platform", "platform/gowin", "platform/intel", "platform/lattice-ecp5", "platform/lattice-ice40", "platform/lattice-machxo-2-3l", "platform/quicklogic", "platform/xilinx", "start", "stdlib", "stdlib/cdc", "stdlib/coding", "stdlib/crc", "stdlib/crc/catalog", "stdlib/data", "stdlib/enum", "stdlib/fifo", "stdlib/wiring", "tutorial"], "filenames": ["changes.rst", "contrib.rst", "cover.rst", "index.rst", "install.rst", "intro.rst", "lang.rst", "platform.rst", "platform/gowin.rst", "platform/intel.rst", "platform/lattice-ecp5.rst", "platform/lattice-ice40.rst", "platform/lattice-machxo-2-3l.rst", "platform/quicklogic.rst", "platform/xilinx.rst", "start.rst", "stdlib.rst", "stdlib/cdc.rst", "stdlib/coding.rst", "stdlib/crc.rst", "stdlib/crc/catalog.rst", "stdlib/data.rst", "stdlib/enum.rst", "stdlib/fifo.rst", "stdlib/wiring.rst", "tutorial.rst"], "titles": ["Changelog", "Contributing", "Amaranth project documentation", "Language & toolchain", "Installation", "Introduction", "Language guide", "Platform integration", "Gowin", "Intel", "Lattice ECP5", "Lattice iCE40", "Lattice MachXO2 and MachXO3L", "Quicklogic", "Xilinx", "Getting started", "Standard library", "Clock domain crossing", "Code conversion", "Cyclic redundancy checks", "Predefined CRC Algorithms", "Data structures", "Enumerations", "First-in first-out queues", "Interfaces and connections", "Tutorial"], "terms": {"thi": [0, 1, 3, 5, 6, 7, 11, 15, 16, 17, 19, 20, 21, 22, 23, 24], "document": [0, 5, 6, 15, 19, 24], "describ": [0, 1, 15, 21, 24], "public": [0, 1, 24], "interfac": [0, 3, 5, 6, 15, 16, 21, 23], "amaranth": [0, 1, 3, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25], "It": [0, 1, 5, 6, 15, 19, 21, 22, 24], "doe": [0, 4, 5, 6, 17, 21, 23, 24], "includ": [0, 1, 4, 5, 6, 15, 16, 19, 22, 24], "most": [0, 4, 5, 6, 15, 17, 19, 21, 22, 24], "bug": [0, 1, 4, 5, 6], "fix": [0, 3, 4, 6, 15, 19, 24], "The": [0, 1, 3, 4, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25], "migen": 0, "compat": [0, 4], "layer": 0, "ha": [0, 1, 5, 6, 15, 19, 21, 22, 23, 24], "been": [0, 4, 16, 19, 23], "remov": [0, 1, 6, 19, 24], "appli": [0, 6, 19, 21, 22], "follow": [0, 1, 4, 5, 6, 10, 12, 15, 17, 19, 21, 24, 25], "code": [0, 1, 3, 4, 5, 6, 15, 16, 21, 24], "written": [0, 5, 6, 15, 23, 24, 25], "against": [0, 6], "replac": [0, 22, 24], "us": [0, 1, 4, 5, 6, 9, 15, 16, 17, 19, 20, 21, 22, 23, 24, 25], "m": [0, 6, 15, 19, 20, 21, 24], "case": [0, 15, 19, 21, 23, 24], "pattern": [0, 6], "default": [0, 6, 14, 15, 17, 19, 20, 24], "valu": [0, 3, 15, 17, 19, 21, 22, 24], "match": [0, 5, 24], "const": [0, 6, 21, 22, 24], "updat": [0, 1, 4, 6, 15, 19, 24], "util": [0, 16, 19], "log2_int": 0, "need_pow2": 0, "fals": [0, 6, 17, 19, 20, 23, 24], "ceil_log2": 0, "true": [0, 6, 15, 17, 19, 20, 24], "exact_log2": 0, "17": [0, 1, 20, 22], "39": 0, "semant": [0, 5, 6, 24], "argument": [0, 6, 22, 24], "ad": [0, 4, 5, 6, 15, 21, 24], "ast": [0, 22], "slice": [0, 6, 21], "object": [0, 6, 9, 19, 21, 24], "have": [0, 1, 4, 6, 16, 21, 24], "made": [0, 4, 6, 24], "castabl": [0, 6, 21, 22, 24], "i": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25], "never": [0, 6, 21, 22, 24], "activ": [0, 5], "instead": [0, 6, 21, 24], "alwai": [0, 5, 6, 15, 17, 19, 24], "deprec": 0, "normal": [0, 24], "sampl": [0, 6, 24], "past": [0, 6], "stabl": [0, 6], "rose": 0, "fell": 0, "lib": [0, 6, 16, 17, 18, 19, 20, 21, 22, 23, 24], "schedul": 0, "19": 0, "fifo": [0, 5, 16, 23], "fifointerfac": [0, 16, 23], "fwft": 0, "20": 0, "syncfifo": [0, 16, 23], "buildplan": 0, "execute_local_dock": 0, "extract": [0, 24], "build": [0, 3, 4, 6, 8, 9, 10, 11, 12, 14, 15, 17, 18, 23, 24], "sh": 0, "begin": [0, 6, 15, 21, 24], "bin": [0, 10, 11, 12, 14], "run_script": 0, "execute_loc": 0, "vendor": [0, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15], "intel": [0, 3, 7], "lattice_ecp5": 0, "lattice_ice40": 0, "lattice_machxo2_3l": 0, "quicklog": [0, 3, 7], "xilinx": [0, 3, 7], "18": 0, "support": [0, 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 21, 23], "new": [0, 3, 4, 5, 6, 19, 21, 23, 24], "improv": [0, 1, 21, 23, 24], "wai": [0, 1, 6, 21, 22, 24], "defin": [0, 5, 6, 15, 17, 19, 22, 24], "data": [0, 3, 16, 17, 19, 23, 24], "structur": [0, 1, 3, 15, 16, 24], "compon": [0, 2, 5, 6, 16, 21], "wire": [0, 6, 15, 16, 24], "record": [0, 1, 15], "In": [0, 6, 21, 22, 23, 24], "departur": 0, "usual": [0, 1, 5, 6, 17, 21, 24], "polici": 0, "give": [0, 6, 21], "design": [0, 1, 4, 5, 6, 14, 15, 16, 17, 19, 21, 24, 25], "addit": [0, 1, 4, 5, 6, 21, 22, 23, 24], "time": [0, 1, 4, 5, 6, 11, 15, 17, 21, 23, 24], "6": [0, 6, 15, 20, 21], "one": [0, 1, 6, 15, 16, 17, 18, 19, 21, 23, 24, 25], "releas": [0, 17], "later": [0, 1, 6], "than": [0, 4, 5, 6, 17, 21, 22, 24], "enumer": [0, 3, 16, 21, 24], "extend": [0, 5, 6, 22, 24], "A": [0, 1, 3, 4, 5, 6, 17, 19, 21, 22, 24, 25], "shape": [0, 3, 21, 22, 24], "member": [0, 21, 22, 24], "can": [0, 1, 4, 5, 6, 15, 19, 21, 22, 23, 24], "provid": [0, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24], "an": [0, 1, 4, 5, 6, 15, 17, 19, 20, 21, 22, 23, 24], "class": [0, 1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 23, 24], "sever": [0, 1, 6, 24], "extens": [0, 15], "point": [0, 11, 21], "base": [0, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 19, 21, 24], "outsid": [0, 6, 24], "core": [0, 5, 9, 24], "particular": [0, 5, 6, 21, 24], "signal": [0, 3, 5, 15, 17, 18, 19, 21, 22, 23, 24], "mai": [0, 1, 4, 6, 17, 19, 21, 22, 24], "now": [0, 24], "return": [0, 6, 15, 19, 21, 22, 24], "wrap": [0, 21, 22, 24], "anoth": [0, 6, 21, 22, 24], "call": [0, 6, 19, 20, 21, 22, 24], "protocol": [0, 22], "15": [0, 15, 20], "issu": [0, 1, 5, 6], "infer": [0, 5, 6, 21], "resolv": [0, 24], "notabl": [0, 4], "b": [0, 6, 19, 22, 24], "where": [0, 1, 6, 17, 19, 21, 24], "both": [0, 1, 5, 6, 19, 21, 24], "ar": [0, 1, 5, 6, 8, 9, 10, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], "unsign": [0, 6, 21, 22, 24], "sign": [0, 1, 6, 21], "python": [0, 1, 4, 5, 6, 11, 15, 21, 22, 24], "7": [0, 4, 5, 6, 20, 21], "11": [0, 20, 21], "12": [0, 6, 20], "featur": [0, 3, 17, 24], "nmigen": [0, 25], "namespac": [0, 6], "annot": [0, 21, 24], "recogn": 0, "nmigen_": 0, "envron": 0, "variabl": [0, 6, 8, 9, 10, 11, 12, 13, 14, 18, 19, 21, 23, 24], "remain": [0, 23, 24], "had": [0, 21, 24], "sinc": [0, 4, 6, 15, 19, 21, 24], "shell": 0, "environ": [0, 5, 8, 9, 10, 11, 12, 13, 14], "amaranth_": 0, "amaranth_env_": 0, "all": [0, 1, 5, 6, 9, 15, 16, 19, 20, 21, 22, 24], "uppercas": 0, "name": [0, 5, 8, 9, 10, 11, 12, 14, 17, 21, 24], "nmigen_env_": 0, "mix": [0, 6], "import": [0, 1, 6, 15, 19, 21, 22, 24], "form": [0, 6, 19, 24], "some_vendor": 0, "somevendorplatform": 0, "reduc": [0, 5, 6, 17, 21, 24], "futur": [0, 5, 6, 24], "churn": 0, "repl": 0, "count": [0, 6, 15, 24], "replic": [0, 6], "appropri": [0, 24], "depend": [0, 1, 4, 5, 6, 21, 23, 24], "If": [0, 1, 4, 15, 17, 18, 19, 21, 22, 23, 24], "wa": [0, 19, 21, 24], "being": [0, 1, 6, 21, 23, 24, 25], "storag": 0, "access": [0, 6, 20, 23, 24], "bit": [0, 4, 10, 12, 14, 15, 18, 19, 21, 22, 23], "level": [0, 5, 6, 15, 21, 23, 24], "represent": [0, 6, 24], "connect": [0, 3, 15, 16, 17], "togeth": [0, 1, 6, 24], "manual": [0, 1, 3, 4, 19, 21, 24], "instanti": [0, 5, 6, 15, 17, 21], "regist": [0, 5, 6, 19, 23, 24], "e": [0, 1, 6, 17, 23, 24], "g": [0, 6, 14, 17, 24], "past_x": 0, "like": [0, 1, 4, 5, 6, 17, 21, 22, 24], "x": [0, 6, 19, 24], "d": [0, 6, 15, 19, 21, 24], "sync": [0, 6, 15, 21, 24], "eq": [0, 6, 15, 21, 22, 24], "nativ": [0, 5], "syntax": [0, 6, 15, 21, 24], "ensur": [0, 6, 22, 24], "pin": [0, 5], "instanc": [0, 3, 10, 12, 19, 21, 22, 24], "request": [0, 1, 6, 15, 18, 24], "cast": [0, 3, 21, 22, 24], "directli": [0, 5, 6, 17, 19, 21, 23, 24], "its": [0, 1, 6, 15, 17, 19, 21, 22, 24], "field": [0, 21], "led": [0, 3], "cat": [0, 6, 22], "n": [0, 6, 17, 18, 21], "rang": [0, 15, 18, 21, 23, 24], "o": [0, 2, 5, 6, 14, 17, 18], "note": [0, 6, 17, 19, 21, 22], "roundrobin": 0, "inlin": 0, "copi": [0, 1, 24], "convert": [0, 5, 6, 21, 24], "those": [0, 6, 24], "while": [0, 1, 5, 6, 19, 21, 24], "list": [0, 1, 6, 19, 24], "below": [0, 6, 15, 17, 24], "work": [0, 3, 4, 5, 6, 10, 12, 15, 21, 24], "thei": [0, 1, 6, 15, 19, 21, 24], "next": [0, 4, 6, 15, 23, 24], "aggreg": [0, 6, 21], "definit": [0, 3, 6, 15, 24], "constant": [0, 3, 21, 22], "express": [0, 6, 21, 22, 24], "crc": [0, 16, 19], "gener": [0, 5, 6, 15, 19, 24], "8": [0, 4, 6, 19, 20, 21, 24], "9": [0, 6], "initi": [0, 17, 19, 21, 24], "10": [0, 6, 20, 21, 24], "move": 0, "reorgan": 0, "lift": [0, 24], "non": [0, 5, 6, 17, 24], "22": 0, "valuecast": [0, 21], "28": 0, "allow": [0, 5, 6, 17, 22, 24], "overrid": [0, 9, 10, 11, 12, 13, 14, 17, 21, 24], "oper": [0, 3, 5, 21, 22, 24], "31": [0, 6, 20, 21], "type": [0, 6, 19, 21, 22, 23, 24], "safeti": [0, 22], "34": 0, "renam": 0, "pureinterfac": [0, 24], "35": [0, 4, 15], "add": [0, 1, 5, 6, 9, 10, 11, 14, 19, 21, 22, 24], "shapelik": 0, "valuelik": 0, "37": [0, 15], "make": [0, 1, 4, 5, 6, 16, 22, 23], "signatur": [0, 16], "immut": [0, 6, 21, 24], "38": [0, 15], "shapecast": [0, 21, 22], "similar": [0, 1, 6, 15, 19, 21, 24], "as_sign": [0, 6], "as_unsign": [0, 6], "left": [0, 6, 19], "hand": 0, "side": [0, 6], "assign": [0, 15, 21, 22, 24], "differ": [0, 1, 5, 6, 16, 17, 18, 21, 23, 24], "behavior": [0, 1, 5, 6, 15, 21, 24], "reset": [0, 5, 15, 17, 19, 21, 23, 24], "accept": [0, 1, 6, 21, 22, 24], "ani": [0, 1, 4, 6, 15, 17, 18, 19, 21, 22, 23, 24], "supersed": 0, "memori": [0, 3, 5, 15, 23, 24], "transpar": [0, 6], "read": [0, 6, 21, 23, 24], "port": [0, 15, 24], "enabl": [0, 5, 6, 9, 10, 11, 15, 21, 24], "creat": [0, 1, 6, 19, 20, 22, 24], "__call__": [0, 19, 21, 22, 24], "method": [0, 1, 6, 15, 17, 19, 21, 22, 24], "recurs": [0, 21, 24], "treat": [0, 6, 19, 24], "deriv": [0, 5, 6, 15, 21, 24], "enum": [0, 6, 16, 21, 22, 24], "int": [0, 6, 15, 17, 18, 19, 21, 23, 24], "intenum": [0, 6, 22], "rather": [0, 6, 21, 24], "integ": [0, 19, 21, 22, 24], "empti": [0, 6, 23], "warn": 0, "without": [0, 1, 5, 6, 19, 21, 24], "explicitli": [0, 6, 15, 19, 21, 22, 24], "specifi": [0, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 19, 21, 22, 23, 24], "longer": 0, "construct": [0, 5, 6, 15, 19, 21, 22, 23, 24], "were": [0, 6], "__abs__": 0, "predat": 0, "process": [0, 1, 5, 6, 19, 21, 24], "width": [0, 18, 19, 21, 23, 24], "tupl": [0, 6, 24], "uservalu": 0, "linter": 0, "instruct": [0, 15], "file": [0, 3, 5, 6, 9, 10, 11, 12, 13, 14, 15, 21, 22, 24], "text": 0, "lf": 0, "line": [0, 15, 22, 24], "end": [0, 5, 6, 9, 10, 11, 12, 15], "window": [0, 4, 5, 10, 12], "other": [0, 1, 4, 5, 6, 15, 17, 19, 21, 22, 24], "debug_verilog": 0, "templatedplatform": 0, "env": 0, "run": [0, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15], "add_fil": [0, 11], "reject": [0, 6], "absolut": [0, 6], "path": [0, 10, 12], "nmigen_env_diamond": 0, "amaranth_env_diamond": [0, 10, 12], "upper": 0, "sim": [0, 15], "simul": [0, 3, 4, 6, 15], "step": [0, 1, 4, 5, 6, 15], "back": [0, 15, 21, 24], "pysim": 0, "invok": [0, 6, 24], "rtlil": 0, "verilog": [0, 5, 6, 15], "explicit": [0, 5, 6, 19], "test": [0, 1, 5, 23], "icepack_opt": 0, "latticeice40platform": [0, 6, 7, 11], "osch": 0, "default_clk": 0, "clock": [0, 3, 5, 15, 16, 19, 23], "sourc": [0, 1, 4, 5, 6, 15, 21, 24], "latticemachxo2platform": [0, 7, 12], "latticemachxo3lplatform": [0, 7, 12], "xrai": [0, 14], "xilinxplatform": [0, 7, 14], "artix": 0, "ultrascal": 0, "part": [0, 1, 6, 15, 21, 24], "gowinplatform": [0, 7, 8], "lattice_machxo2": 0, "lattice_machxo_2_3l": 0, "latticemachxo2or3lplatform": [0, 7, 12], "svf": [0, 10, 12], "program": [0, 1, 5, 6, 10, 12, 15], "vector": [0, 10, 12], "xilinx_spartan_3_6": 0, "xilinxspartan3aplatform": 0, "xilinxspartan6platform": 0, "xilinx_7seri": 0, "xilinx7seriesplatform": 0, "xilinx_ultrascal": 0, "xilinxultrascaleplatform": 0, "project": [0, 1, 5, 22], "nm": 0, "prelud": [0, 3], "am": [0, 6], "adjust": 0, "nmigen_board": 0, "amaranth_board": [0, 15], "board": [0, 3, 15], "switch": [0, 21], "hdl": [0, 4, 5, 6, 15, 22, 25], "inherit": [0, 6, 21, 23, 24], "miss": [0, 1], "fhdltestcas": 0, "assertform": 0, "necessari": [0, 1, 5, 6, 11, 15, 16, 21, 24], "ab": [0, 6], "rotate_left": [0, 6], "rotate_right": [0, 6], "shift_left": [0, 6], "shift_right": [0, 6], "divis": [0, 6], "modulo": [0, 6], "neg": [0, 6, 17], "divisor": [0, 15], "cdc": [0, 5, 6, 16, 17], "pulsesynchron": [0, 16, 17], "asyncffsynchron": [0, 16, 17], "asyncfifo": [0, 16, 23], "when": [0, 1, 5, 6, 15, 17, 19, 21, 22, 23, 24], "write": [0, 6, 7, 15, 23, 24], "domain": [0, 3, 5, 15, 16, 23, 24], "r_rst": [0, 23], "assert": [0, 6, 15, 17, 18, 19, 23, 24], "r_level": [0, 23], "w_level": [0, 23], "backend": [0, 6, 15], "larger": [0, 6, 19], "65536": 0, "emit": [0, 6, 24], "yosi": [0, 1, 4, 5, 8, 9, 10, 11, 14], "attribut": [0, 5, 6, 15, 21, 24], "instal": [0, 1, 3, 11, 15], "fall": [0, 16], "pypi": [0, 4, 5], "packag": [0, 1, 4], "builtin": [0, 4], "avail": [0, 4, 6, 9, 10, 11, 12, 13, 14, 15, 19, 23, 24], "cxxrtl": 0, "multipl": [0, 5, 6, 18, 24], "fragment": [0, 6], "add_process": 0, "advanc": [0, 5, 15, 24], "execute_remote_ssh": 0, "vcd": [0, 15], "output": [0, 1, 6, 11, 15, 17, 18, 19, 23, 24], "top": [0, 6, 15], "bench": [0, 5, 15], "modul": [0, 3, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24], "contain": [0, 1, 5, 6, 15, 19, 20, 21, 24], "testbench": 0, "onli": [0, 4, 5, 6, 15, 17, 18, 19, 21, 22, 23, 24], "sb_lfosc": 0, "sb_hfosc": 0, "binari": [0, 4, 6, 8, 9, 10, 11, 12, 14, 18], "bitstream": [0, 8, 9, 10, 11, 12, 14, 15], "grade": [0, 25], "famili": [0, 4, 5, 21], "temperatur": 0, "speed": [0, 5], "symbiflow": [0, 13, 14], "separ": [0, 16], "flash": [0, 5, 12, 15], "sram": [0, 9, 12], "_flash": [0, 12], "_sram": [0, 12], "quicklogicplatform": [0, 7, 13], "cyclonev_oscil": 0, "intelplatform": [0, 7, 9], "add_set": [0, 9], "add_constraint": [0, 9, 10, 11, 12, 13, 14], "mistral": [0, 9], "synth_design_opt": [0, 14], "No": [0, 21, 24], "publish": 0, "under": [0, 6, 21, 24], "collect": [1, 5, 6, 24], "mani": [1, 5, 6, 15, 19, 24], "peopl": 1, "collabor": 1, "over": [1, 19, 21], "year": 1, "would": [1, 6, 19, 21, 24], "same": [1, 5, 6, 15, 19, 21, 22, 23, 24], "everyon": 1, "": [1, 4, 5, 6, 15, 17, 19, 21, 23, 24, 25], "uniqu": [1, 6], "perspect": 1, "we": [1, 6], "re": [1, 19, 22], "glad": 1, "you": [1, 4, 6, 17, 19], "consid": [1, 5, 6, 15, 17, 21, 24, 25], "join": 1, "u": 1, "page": 1, "guid": [1, 3, 15, 19, 24], "through": [1, 5, 6, 21, 24], "some": [1, 5, 6, 15, 24], "best": 1, "tool": [1, 5, 6, 8, 9, 10, 11, 12, 13, 14, 24], "hear": 1, "about": [1, 6, 24], "encount": 1, "crucial": [1, 6], "do": [1, 6, 15, 21, 24], "care": [1, 6], "lot": 1, "correct": [1, 6, 16, 24], "result": [1, 6, 15, 21, 22, 24], "experi": [1, 6], "just": [1, 6, 21, 22], "much": 1, "meant": [1, 24], "comfort": 1, "fewer": [1, 6], "sharp": 1, "edg": [1, 6, 15, 17], "matter": [1, 21], "how": [1, 4, 6, 19, 21, 24], "technolog": 1, "appeal": 1, "might": 1, "more": [1, 5, 6, 15, 21, 24], "guardrail": 1, "pleas": 1, "To": [1, 4, 5, 6, 15, 19, 20, 21, 24], "go": [1, 5, 24], "beyond": [1, 6, 24], "see": [1, 6, 15, 17, 24], "error": [1, 5, 6, 9, 10, 11, 19, 21, 24], "messag": [1, 6, 9, 10, 11, 15, 24], "hard": [1, 5, 21], "understand": [1, 6, 24], "mislead": 1, "even": [1, 6, 17, 24], "especi": [1, 5, 6], "think": 1, "did": [1, 4], "someth": 1, "wrong": [1, 6, 24], "inform": [1, 9, 10, 11, 15, 21, 24], "exact": [1, 21], "version": [1, 3, 4, 6], "which": [1, 5, 6, 11, 15, 17, 19, 20, 21, 22, 23, 24], "find": 1, "c": [1, 6, 10, 12, 22, 24], "print": [1, 6, 24], "__version__": 1, "complet": [1, 6, 19], "self": [1, 5, 6, 15, 21, 22, 24], "minim": [1, 15], "demonstr": [1, 15, 24], "feasibl": 1, "sequenc": [1, 17, 21], "reproduc": [1, 5], "what": [1, 6, 19, 24], "expect": [1, 21, 24], "happen": [1, 6], "actual": [1, 22, 24], "possibl": [1, 5, 6, 22, 24], "verbatim": 1, "log": [1, 9, 10, 11, 12, 14], "termin": 1, "For": [1, 4, 6, 19, 20, 21, 22, 24], "usabl": [1, 5, 24], "reason": [1, 6, 24], "why": [1, 24], "There": [1, 6, 24], "person": 1, "who": 1, "should": [1, 4, 6, 15, 17, 21, 23, 24], "submit": [1, 21], "valuabl": 1, "own": [1, 6, 21], "right": [1, 6, 21], "appreci": 1, "open": [1, 5, 6, 15], "commun": [1, 5, 21, 24, 25], "tend": 1, "opportun": 1, "enjoi": 1, "pull": [1, 4], "howev": [1, 4, 6, 17, 21, 24], "unless": [1, 6, 23, 24], "ve": 1, "few": [1, 6, 15, 21, 24], "befor": [1, 4, 6, 10, 12, 14, 24], "truli": 1, "trivial": 1, "discuss": [1, 24], "maintain": [1, 5, 17], "first": [1, 3, 4, 5, 6, 15, 16, 17, 19, 21, 24], "doesn": 1, "t": [1, 6, 21], "take": [1, 5, 6, 19, 24], "sometim": [1, 5, 6, 24], "save": [1, 10, 12], "unnecessari": 1, "frustrat": 1, "languag": [1, 2, 15, 16, 24], "toolchain": [1, 2, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15], "from": [1, 4, 5, 15, 16, 17, 19, 20, 21, 22, 23, 24], "kind": [1, 6, 21, 24], "everi": [1, 5, 6, 15, 17, 19, 21, 24], "unavoid": 1, "tightli": [1, 6, 24], "coupl": 1, "seemingli": 1, "obviou": 1, "appar": 1, "minor": 1, "decis": [1, 6], "dramat": 1, "consequ": [1, 5], "sure": [1, 4], "undergo": 1, "scrutini": 1, "commit": [1, 4], "impact": 1, "chanc": 1, "voic": 1, "heard": 1, "substanti": 1, "must": [1, 6, 11, 17, 21, 24], "formal": [1, 25], "comment": 1, "well": [1, 4, 5, 6, 15, 21, 24], "here": [1, 21], "typic": [1, 5], "after": [1, 4, 6, 9, 10, 11, 12, 14, 17, 19, 23, 24], "round": [1, 23], "review": 1, "achiev": [1, 5], "unanim": 1, "consensu": 1, "pdm": 1, "manag": [1, 6, 21], "develop": [1, 15, 21], "workflow": [1, 4, 5, 15], "download": [1, 4, 5, 15, 19], "latest": 1, "onc": [1, 6, 15, 17, 21, 24], "done": [1, 6, 21], "so": [1, 5, 6, 15, 17, 19, 21, 24], "dev": 1, "command": [1, 4, 5, 9, 10, 11, 12, 13, 14, 15, 21], "virtual": [1, 24], "locat": [1, 4, 15, 24], "venv": 1, "runtim": 1, "itself": [1, 6, 10, 12, 15, 19, 21, 22, 24], "edit": [1, 15], "mode": [1, 6], "mean": [1, 6, 19, 24], "immedi": [1, 4, 6, 17], "reflect": [1, 19], "pick": 1, "up": [1, 6, 15, 21, 23, 24, 25], "good": [1, 6, 10, 12], "habit": 1, "each": [1, 5, 6, 19, 21, 24], "tree": [1, 5, 6], "frontend": 1, "yices2": 1, "smt": 1, "solver": 1, "These": [1, 5, 21, 24], "distribut": [1, 4], "oss": 1, "cad": 1, "suit": 1, "reli": [1, 5, 6, 24], "verif": [1, 5, 24, 25], "skip": 1, "index": [1, 6, 21, 24], "doc": 1, "_build": 1, "html": 1, "involv": [1, 6], "small": [1, 6, 15], "iter": [1, 6, 19, 21, 24], "labor": [1, 5, 21], "rebuild": 1, "start": [1, 3, 5, 6, 19, 21, 24], "automat": [1, 6, 15, 22], "live": 1, "brows": 1, "http": [1, 4, 19], "127": [1, 6], "0": [1, 3, 4, 6, 15, 18, 19, 21, 22, 24], "1": [1, 3, 6, 15, 17, 19, 21, 22, 23, 24], "8000": 1, "browser": 1, "short": [1, 6, 24], "delai": [1, 17, 23], "keep": [1, 24], "ey": 1, "syntact": 1, "refer": [1, 6, 19, 24], "occasion": [1, 6], "builder": 1, "persist": [1, 6], "render": 1, "incorrect": 1, "outdat": 1, "content": 1, "our": 1, "style": [1, 5], "guidelin": 1, "evolv": 1, "eventu": 1, "them": [1, 6, 15, 19, 21, 24], "At": [1, 5, 6], "moment": [1, 5, 6, 15], "ask": 1, "effort": [1, 5, 15], "modifi": [1, 24], "spirit": 1, "surround": 1, "dure": [1, 5, 6, 17, 21], "doubt": 1, "mondai": 1, "00": 1, "utc": 1, "irc": 1, "channel": [1, 21], "lang": [1, 4], "libera": 1, "chat": 1, "matrix": 1, "org": 1, "bridg": 1, "appear": [1, 6, 21, 23, 24], "user": [1, 4, 6, 15, 21, 22], "contributor": 1, "newli": [1, 24], "warrant": 1, "broad": [1, 16], "attent": 1, "primari": 1, "avenu": 1, "want": [1, 19, 25], "interest": 1, "evolut": 1, "simpli": 1, "view": [1, 6, 16], "feel": 1, "free": 1, "attend": 1, "abl": [1, 6], "publicli": 1, "summari": 1, "post": 1, "relev": [1, 24], "github": [1, 4], "thread": 1, "standard": [2, 3, 6, 9, 10, 11, 15, 19, 22, 24], "system": [2, 3, 6, 15, 24], "chip": [2, 24], "toolkit": 2, "progress": [3, 6], "serious": [3, 6], "incomplet": [3, 6], "introduct": [3, 6, 15, 16], "librari": [3, 6, 17], "requir": [3, 5, 6, 8, 9, 10, 11, 12, 13, 14, 19, 21, 24], "prerequisit": 3, "get": [3, 4, 5, 6, 21], "counter": [3, 6, 24], "blink": 3, "tutori": [3, 6, 15], "arrai": [3, 21, 24], "control": [3, 5, 15, 24], "flow": [3, 5, 24], "combinatori": [3, 15, 24], "evalu": [3, 15], "synchron": [3, 5, 15, 17, 23], "elabor": [3, 15, 17, 24], "cross": [3, 5, 16], "convers": [3, 5, 16, 24], "out": [3, 4, 5, 15, 16, 17, 18, 19, 24], "queue": [3, 16], "cyclic": [3, 16], "redund": [3, 16, 24], "check": [3, 15, 16, 24], "platform": [3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 24], "integr": [3, 6, 15, 25], "gowin": [3, 7], "lattic": [3, 7, 15], "ecp5": [3, 7], "ice40": [3, 7, 15], "machxo2": [3, 7], "machxo3l": [3, 7], "changelog": 3, "5": [3, 6, 15, 20, 21, 22], "unreleas": 3, "4": [3, 6, 15, 20, 21, 22], "3": [3, 4, 6, 15, 20, 21, 24], "2": [3, 6, 15, 17, 22, 23, 24], "contribut": 3, "problem": [3, 6, 24], "report": [3, 5, 9, 11, 14, 24], "propos": 3, "codebas": 3, "your": [3, 4, 6, 17, 24], "chang": [3, 4, 5, 6, 21, 24], "weekli": 3, "meet": 3, "newer": 4, "cpython": 4, "faster": [4, 17], "pypy3": 4, "pip": 4, "23": [4, 21], "via": [4, 5, 6, 21, 24], "popular": 4, "softwar": [4, 19], "waveform": [4, 6, 15], "viewer": [4, 6], "gtkwave": 4, "invalu": 4, "debug": [4, 5, 6, 15], "synthes": [4, 5, 6, 10, 11, 14, 15], "place": [4, 5, 6, 14, 15, 22, 24], "rout": [4, 5, 6, 14, 15], "fpga": [4, 6, 15, 17, 23, 25], "specif": [4, 5, 6, 17, 21, 24], "x86_64": 4, "aarch64": 4, "continu": [4, 25], "either": [4, 6, 17, 18, 21, 22, 24], "store": [4, 6, 21], "full": [4, 6, 19, 24], "64": [4, 20], "win32": 4, "win64": 4, "need": [4, 5, 6, 17, 21, 23, 24], "unpack": 4, "conveni": [4, 6, 21, 24], "upgrad": 4, "maco": 4, "homebrew": 4, "Then": 4, "brew": 4, "debian": 4, "sudo": 4, "apt": 4, "python3": [4, 15], "On": [4, 10, 12, 17], "architectur": [4, 19], "pip3": 4, "arch": 4, "linux": [4, 10, 12], "pacman": 4, "repositori": [4, 5], "applic": [4, 5, 6, 15, 21, 24], "main": 4, "branch": [4, 6], "similarli": [4, 6, 24], "reliabl": [4, 5, 24], "experiment": [4, 6], "api": 4, "flux": 4, "until": [4, 6, 17, 21, 25], "With": [4, 6, 15, 19], "mind": 4, "try": [4, 6], "function": [4, 5, 6, 15, 16, 19, 21, 24], "avoid": [4, 5, 6], "last": [4, 6, 21, 22, 24], "previou": [4, 19, 21], "git": 4, "com": 4, "directori": 4, "affect": [4, 6, 24], "otherwis": [4, 6, 15, 17, 18, 21, 24], "crash": 4, "becaus": [4, 6, 21, 24], "mismatch": [4, 6], "clone": 4, "cd": [4, 6], "ff": 4, "origin": [4, 6, 24], "omit": [4, 6], "explain": [4, 6], "hardwar": [5, 6, 16, 19], "digit": [5, 6, 16], "logic": [5, 15, 23], "aim": 5, "easi": [5, 6], "learn": [5, 25], "elimin": [5, 6, 17], "common": [5, 6, 15, 16], "mistak": 5, "simplifi": [5, 6], "complex": [5, 6, 21, 24], "reusabl": [5, 6, 15], "consist": [5, 17, 24], "cover": [5, 6, 24], "restrict": [5, 21, 22, 24], "choic": 5, "exist": [5, 6, 19, 23, 24], "industri": 5, "vhdl": [5, 6], "descript": [5, 6, 19, 21, 24], "transfer": [5, 17, 24], "model": [5, 16, 19], "ordinari": [5, 6], "netlist": [5, 6, 11, 14], "circuit": [5, 6], "human": [5, 24], "readabl": [5, 6, 24], "By": [5, 6], "flexibl": [5, 21], "rich": [5, 6], "widespread": 5, "adopt": 5, "focus": 5, "singl": [5, 6, 15, 21, 22, 24], "task": [5, 6], "block": [5, 15, 17, 18, 23, 24], "finit": [5, 6], "state": [5, 15, 17], "machin": [5, 6], "simpl": [5, 6, 15, 21, 24], "rule": [5, 21], "arithmet": 5, "close": 5, "loop": [5, 6], "condit": [5, 6, 15, 23], "organ": 5, "seamlessli": 5, "principl": [5, 24], "also": [5, 6, 15, 16, 19, 21, 22, 23, 24], "accident": 5, "misus": [5, 6], "unexpect": [5, 6], "undesir": [5, 6], "synthesi": [5, 6, 11, 14], "often": [5, 6, 21, 24], "expens": 5, "signific": [5, 6, 18, 19, 21], "safe": [5, 6, 17, 22], "third": [5, 16, 21], "parti": [5, 16], "lint": 5, "lack": [5, 6], "synthesiz": [5, 15], "prone": [5, 21, 24], "favor": 5, "diagnost": [5, 6, 15, 24], "regularli": 5, "ones": [5, 21, 24], "highlight": 5, "potenti": [5, 6, 24], "importantli": 5, "come": [5, 11], "essenti": [5, 6, 16, 24], "primit": [5, 6], "asynchron": [5, 6, 17, 23], "buffer": [5, 23], "box": [5, 15], "focu": 5, "subtl": [5, 6], "between": [5, 6, 16, 17, 18, 21, 23, 24], "special": [5, 6, 24], "treatment": 5, "devic": [5, 6, 10, 11, 12], "overridden": [5, 21, 24], "recommend": [5, 6], "high": [5, 6, 18, 21], "gear": 5, "peripher": [5, 24], "implement": [5, 6, 16, 17, 19, 21, 22, 23, 24], "least": [5, 6, 18, 19, 21, 23, 24], "amount": [5, 6, 15, 21], "migrat": 5, "option": [5, 6, 9, 10, 11, 14, 15, 17, 20, 22, 24], "limit": [5, 6, 15, 24], "Of": 5, "cours": 5, "known": [5, 6, 10, 12, 16, 19, 21], "icaru": 5, "veril": 5, "event": 5, "driven": [5, 6, 17], "although": [5, 6, 15, 24], "slower": 5, "compil": 5, "ahead": 5, "remark": 5, "perform": [5, 19, 21, 22, 24], "pure": [5, 24], "co": [5, 15], "major": [5, 24], "commerci": 5, "easili": 5, "constraint": [5, 14, 15, 17], "power": [5, 6, 17, 23], "final": [5, 6, 24], "script": [5, 8, 9, 10, 11, 12, 13, 14], "placement": 5, "analysi": 5, "custom": [5, 6, 15, 19, 22, 23], "insert": [5, 9, 10, 11, 12, 13, 14, 24], "produc": [5, 6, 15, 17, 24], "portabl": 5, "present": [5, 6, 8, 9, 10, 11, 12, 13, 14, 24], "easier": [5, 6], "remot": 5, "nix": 5, "configur": [5, 6, 15, 17, 19, 24], "suppli": [5, 6], "everyth": [5, 16, 21, 22, 24], "direct": [5, 6, 21, 24], "connector": 5, "pinout": [5, 15], "built": [5, 6, 15, 21], "probe": 5, "invoc": [5, 6, 15], "show": 5, "whether": [5, 6, 15, 19, 24], "programm": 5, "correctli": [5, 6, 15, 23, 24], "establish": 5, "convent": [5, 6], "segment": 5, "displai": 5, "spi": 5, "sdram": 5, "reus": [5, 24], "unmodifi": 5, "further": [5, 6, 17], "polar": 5, "unifi": 5, "invers": 5, "trace": 5, "low": [5, 18, 21], "invert": [5, 22], "introduc": [6, 24], "depth": [6, 23], "assum": 6, "familiar": 6, "prior": 6, "regular": 6, "root": [6, 11, 15], "carefulli": 6, "curat": 6, "export": [6, 10, 12, 22], "nearli": 6, "dedic": 6, "practic": [6, 24], "glob": 6, "frown": 6, "upon": 6, "alia": [6, 12], "exampl": [6, 15, 19, 20, 21, 24], "two": [6, 11, 19, 21, 24], "signed": [6, 21, 24], "alias": 6, "v": [6, 15], "retriev": [6, 21, 24], "len": [6, 21], "basic": [6, 15], "term": [6, 19], "number": [6, 9, 17, 18, 21, 23, 24], "anywher": [6, 21], "repres": 6, "interpret": [6, 24], "complement": 6, "simplest": 6, "ten": 6, "minus_two": 6, "abov": [6, 15, 24], "posit": [6, 19, 21, 24], "smallest": 6, "As": [6, 15, 21], "truncat": 6, "fit": 6, "rare": [6, 21, 24], "permit": 6, "360": 6, "104": 6, "129": 6, "indirectli": 6, "implicit": [6, 19], "shorthand": 6, "r": 6, "larg": [6, 21, 23], "enough": [6, 21], "min": 6, "max": 6, "whose": [6, 16, 21, 24], "set": [6, 9, 10, 11, 12, 14, 17, 19, 23, 24, 25], "100": [6, 17], "item": [6, 19, 24], "exclus": 6, "half": 6, "stop": 6, "element": [6, 21, 23, 24], "wide": 6, "fencepost": 6, "256": [6, 21], "syntaxwarn": 6, "equal": [6, 19, 21, 22, 24], "inclus": 6, "off": [6, 10, 12], "detect": [6, 19, 24], "bound": 6, "subclass": [6, 21, 22, 24], "multiplex": 6, "distinct": 6, "bottom": 6, "funct4": 6, "sub": [6, 22], "mul": [6, 22], "prevent": 6, "unwant": 6, "equival": [6, 21, 22, 24], "d5": 6, "d1": [6, 24], "subset": [6, 21], "operand": [6, 22], "numer": 6, "d26": 6, "funct": [6, 22], "op": [6, 22], "reg": [6, 15, 22], "imm": [6, 22], "instr": [6, 22], "addi": [6, 22], "expand": 6, "vari": 6, "respect": [6, 24], "cannot": [6, 21, 23, 24], "uniniti": 6, "undefin": 6, "foo": [6, 22, 24], "bar": [6, 22], "paramet": [6, 15, 16, 17, 18, 19, 21, 23, 24], "foo2": 6, "second_foo": 6, "prepar": 6, "ambigu": 6, "zero": [6, 21, 23], "none": [6, 14, 15, 17, 18, 24], "resett": [6, 17], "reset_less": [6, 17], "resetinsert": 6, "combin": [6, 21, 24], "themselv": 6, "concret": [6, 21], "goal": [6, 24], "calcul": 6, "contrast": 6, "abstract": [6, 16, 21], "sig": [6, 15, 21, 22, 24], "rememb": 6, "higher": [6, 17], "traceback": [6, 21, 22, 24], "recent": [6, 19, 21, 22, 24], "typeerror": [6, 21, 22, 24], "attempt": 6, "boolean": 6, "therefor": [6, 19], "statement": [6, 22, 24], "execut": 6, "decid": 6, "bodi": [6, 24], "fact": 6, "long": [6, 19], "finish": [6, 15], "solv": 6, "manipul": [6, 21, 24], "OR": [6, 22], "select": 6, "regardless": 6, "too": 6, "unlimit": 6, "precis": [6, 21], "overflow": [6, 15, 24], "suffici": [6, 21, 24], "128": 6, "382": 6, "tabl": 6, "negat": [6, 22], "subtract": 6, "floor": 6, "due": [6, 24], "chain": [6, 17], "inequ": 6, "greater": 6, "effici": 6, "NOT": 6, "AND": [6, 22], "xor": [6, 19, 22], "impli": 6, "revers": [6, 19, 24], "exponenti": 6, "wider": 6, "intermedi": 6, "stress": 6, "32": [6, 20, 21, 24], "4294967296": 6, "break": 6, "veri": [6, 21, 24], "sidewai": 6, "pair": [6, 24], "unari": 6, "sole": [6, 24], "odd": 6, "bool": [6, 17, 19, 24], "conceptu": 6, "unlik": 6, "clariti": [6, 15, 24], "p": 6, "q": 6, "preced": 6, "wherea": [6, 24], "parenthes": 6, "around": [6, 24], "en": [6, 15, 24], "addr": [6, 21, 24], "d0": [6, 21, 22], "stb": 6, "use_stb": 6, "msb": 6, "sd": 6, "detail": [6, 15, 17, 19, 24], "apart": 6, "act": [6, 22, 23, 24], "concaten": [6, 24], "clash": 6, "except": [6, 21, 24], "subscript": 6, "offset": [6, 21], "notat": 6, "length": [6, 21], "j": 6, "k": 6, "bit_select": 6, "w": [6, 15], "overlap": [6, 21], "word_select": 6, "word": [6, 19, 24], "talk": 6, "convention": 6, "variat": 6, "occupi": 6, "0th": 6, "expon": [6, 21], "caus": [6, 17], "confus": [6, 24], "0b1001": 6, "0b1010": 6, "0b1010_1001": 6, "val": [6, 15], "Such": [6, 24], "seem": 6, "natur": [6, 18], "alon": 6, "could": [6, 16, 17, 21, 24], "ye": 6, "deliber": 6, "examin": [6, 24], "str": [6, 17, 21, 23, 24], "mask": 6, "don": 6, "whitespac": 6, "charact": 6, "compar": [6, 21, 22, 23, 24], "succe": 6, "correspondingli": [6, 24], "asid": [6, 24], "space": [6, 23], "tab": 6, "ignor": [6, 24], "given": [6, 19, 21, 22, 24], "01": 6, "0b0110_0000": 6, "0b0100_0000": 6, "opposit": 6, "liter": 6, "reinterpret": 6, "pc": 6, "mux": 6, "sel": 6, "val1": 6, "val0": 6, "mutabl": [6, 24], "behav": [6, 22], "proxi": [6, 21, 24], "three": [6, 16], "properti": [6, 19, 21, 24], "transform": [6, 21], "pixel": [6, 21], "180": 6, "92": 6, "230": 6, "74": 6, "130": 6, "115": 6, "58": 6, "becom": [6, 19, 23], "mutat": [6, 24], "unpredict": 6, "extrem": 6, "quickli": 6, "exhaust": 6, "resourc": 6, "ram": [6, 23], "unit": 6, "hierarchi": [6, 21], "independ": 6, "associ": [6, 21, 24], "fresh": 6, "group": [6, 21], "ident": [6, 18, 19, 23, 24], "predefin": [6, 16, 19], "comb": [6, 15, 21, 24], "reserv": [6, 21], "occur": 6, "feedback": [6, 24], "hold": [6, 15], "effect": [6, 24], "0b11": 6, "d3": 6, "entir": [6, 15, 19], "upfront": 6, "def": [6, 15, 21, 22, 24], "add_toggl": 6, "num": 6, "f": [6, 8, 15, 24], "sync_": 6, "undriven": 6, "exactli": [6, 21, 22, 24], "dsl": 6, "syntaxerror": 6, "driver": 6, "conflict": [6, 24], "drive": [6, 15, 24], "alreadi": [6, 15, 24], "clearli": 6, "meaning": [6, 24], "inher": 6, "answer": [6, 24], "greatli": 6, "analyz": 6, "snippet": 6, "determin": [6, 24], "tailor": 6, "context": [6, 24], "timer": [6, 15], "superfici": 6, "imper": 6, "insid": [6, 24], "observ": 6, "satisfi": [6, 24], "uncondition": 6, "account": [6, 24], "cond1": 6, "cond2": 6, "parallel": [6, 19], "x_coord": 6, "is_bporch": 6, "364": 6, "is_act": 6, "374": 6, "is_fporch": 6, "within": [6, 24], "whole": 6, "is_even": 6, "is_odd": 6, "too_big": 6, "whichev": 6, "earlier": 6, "programmat": 6, "particularli": 6, "squar": 6, "choos": [6, 15], "enter": 6, "cycl": [6, 15, 17, 19, 23], "bu": [6, 24], "transact": 6, "bus_addr": 6, "16": [6, 15, 19, 20, 21, 24], "r_data": [6, 23, 24], "r_en": [6, 23], "latch": [6, 23], "address": [6, 21, 24], "0x1234": 6, "strobe": [6, 23], "again": 6, "section": [6, 7, 15, 21, 24], "belong": 6, "dom": 6, "current": [6, 19, 24], "captur": [6, 24], "ongo": 6, "whenev": [6, 19, 24], "correspond": [6, 15, 19, 21, 22, 24], "y": [6, 24], "typo": 6, "unreach": 6, "hazard": 6, "string": [6, 21, 24], "lead": [6, 19], "surpris": 6, "nest": [6, 24], "innermost": 6, "outer": [6, 24], "inner": [6, 24], "shorten": 6, "unstabl": 6, "ring": 6, "oscil": [6, 15], "prohibit": 6, "assumpt": [6, 24], "aren": 6, "silent": 6, "miscompil": 6, "though": [6, 24], "exceedingli": 6, "desir": 6, "technologi": 6, "lut": 6, "transit": 6, "down": 6, "increment": [6, 15], "decrement": 6, "retain": [6, 15], "clockdomain": 6, "video": 6, "cd_video": 6, "local": 6, "concis": [6, 21, 24], "add_video_domain": 6, "video_": 6, "domain_nam": 6, "clk": [6, 15], "jtag": [6, 10, 12], "clk_edg": 6, "rst": [6, 15], "still": [6, 15, 17, 24, 25], "nevertheless": [6, 24], "startup": 6, "keyword": [6, 22, 24], "subject": [6, 22], "intention": 6, "undocu": 6, "enableinsert": 6, "frequenc": [6, 15, 17], "phase": 6, "clocksign": 6, "resetsign": 6, "bus_clk": 6, "bus_rstn": 6, "found": 6, "cd_sync": 6, "Be": 6, "consult": 6, "facil": [6, 21, 24], "disabl": [6, 15], "divid": 6, "smaller": 6, "subdivis": 6, "elaborat": [6, 15, 24], "compos": [6, 24], "deleg": 6, "receiv": [6, 19, 24], "inject": 6, "twice": [6, 24], "rel": 6, "guarante": [6, 17], "plain": [6, 21, 22], "counter_": 6, "autogener": 6, "difficult": 6, "alter": 6, "input": [6, 15, 17, 18, 19, 23], "map": [6, 14, 21, 24], "shorter": 6, "forward": 6, "held": 6, "z": 6, "resetsynchron": [6, 16, 17], "leav": [6, 21, 24], "domainrenam": 6, "kei": [6, 21, 24], "translat": 6, "entiti": 6, "Not": 6, "parameter": 6, "extern": [6, 21, 24], "pass": [6, 22, 24], "uninterpret": 6, "identifi": [6, 21], "a_anam": 6, "attr": [6, 24], "anam": 6, "p_pname": 6, "param": [6, 21], "pname": 6, "i_inam": 6, "in_val": 6, "inam": 6, "o_onam": 6, "out_val": 6, "onam": 6, "processor": [6, 16, 19], "p_width": 6, "i_clk": 6, "i_rst": 6, "i_en": 6, "i_mod": 6, "i_data_in": 6, "i_data": 6, "o_data_out": 6, "o_data": 6, "data_in": 6, "data_out": 6, "convein": 6, "adorn": 6, "flipflop": 6, "__init__": [6, 15, 21, 22, 24], "isinst": [6, 24], "sb_dff": 6, "i_c": 6, "i_d": 6, "o_q": 6, "rais": [6, 21, 22, 24], "notimplementederror": 6, "latticeecp5platform": [7, 10], "apicula": 8, "nextpnr": [8, 9, 10, 11, 14], "gowin_pack": 8, "popul": [8, 9, 10, 11, 12, 13, 14, 21, 24], "amaranth_env_apicula": 8, "product": [8, 9, 10, 11, 12, 14], "gw_sh": 8, "amaranth_env_gowin": 8, "quartu": 9, "quartus_map": 9, "quartus_fit": 9, "quartus_asm": 9, "quartus_sta": 9, "amaranth_env_quartu": 9, "qsf": 9, "sdc": [9, 11], "nproc": 9, "quartus_map_opt": 9, "extra": [9, 10, 11, 14], "quartus_fit_opt": 9, "quartus_asm_opt": 9, "quartus_sta_opt": 9, "rpt": [9, 10, 11, 14], "sof": 9, "rbf": 9, "raw": [9, 14], "amaranth_env_mistr": 9, "verbos": [9, 10, 11, 15], "read_verilog_opt": [9, 10, 11], "read_verilog": [9, 10, 11], "synth_opt": [9, 10, 11], "synth_intel_alm": 9, "script_after_read": [9, 10, 11, 14], "read_ilang": [9, 10, 11], "script_after_synth": [9, 10, 11, 14], "yosys_opt": [9, 10, 11], "nextpnr_opt": [9, 10, 11], "trelli": 10, "diamond": [10, 12], "ecppack": 10, "amaranth_env_trelli": 10, "synth_ecp5": 10, "ecppack_opt": 10, "add_prefer": [10, 12], "lpf": [10, 12], "json": [10, 11], "rtl": [10, 11, 14], "tim": [10, 11], "config": 10, "ascii": [10, 11], "pnmainc": [10, 12], "ddtcmd": [10, 12], "diamond_env": [10, 12], "candid": [10, 12], "bat": [10, 12], "echo": [10, 12], "lscc": [10, 12], "diamond_vers": [10, 12], "nt64": [10, 12], "script_project": [10, 12], "prj_project": [10, 12], "tcl": [10, 11, 12, 14], "script_after_export": [10, 12], "prj_run": [10, 12], "xdc": [10, 12, 13, 14], "_impl": [10, 12], "htm": [10, 11, 12], "consolid": [10, 12], "icestorm": 11, "icecube2": 11, "icepack": 11, "amaranth_env_icestorm": 11, "synth_ice40": 11, "add_pre_pack": 11, "pre": [11, 19], "pack": 11, "pcf": [11, 14], "asc": 11, "variant": 11, "lse": 11, "synplifi": 11, "tclsh": 11, "amaranth_env_icecube2": 11, "lse_opt": 11, "script_after_add": 11, "script_after_opt": 11, "set_opt": 11, "script_after_flow": 11, "run_sbt_backend_auto": 11, "sbt": 11, "_lse": 11, "_design": 11, "router": 11, "_time": [11, 14], "edf": 11, "edif": 11, "_lattice_machxo_2_3l": 12, "jed": 12, "jedec": 12, "fuse": 12, "symbiflow_synth": [13, 14], "symbiflow_pack": [13, 14], "symbiflow_plac": [13, 14], "symbiflow_rout": [13, 14], "symbiflow_write_fasm": [13, 14], "symbiflow_write_bitstream": [13, 14], "amaranth_env_qlsymbiflow": 13, "ISE": 14, "vivado": 14, "amaranth_env_vivado": 14, "read_xdc": 14, "synth_design": 14, "script_after_plac": 14, "place_design": 14, "script_after_rout": 14, "route_design": 14, "script_before_bitstream": 14, "write_bitstream": 14, "script_after_bitstream": 14, "vivado_opt": 14, "_timing_synth": 14, "_utilization_hierarchical_synth": 14, "_utilization_synth": 14, "_utilization_hierarchical_plac": 14, "_utilization_plac": 14, "_io": 14, "_control_set": 14, "_clock_util": 14, "_route_statu": 14, "_drc": 14, "_methodologi": 14, "_power": 14, "_rout": 14, "dcp": 14, "checkpoint": 14, "metadata": 14, "xst": 14, "ngdbuild": 14, "par": 14, "bitgen": 14, "amaranth_env_is": 14, "script_after_run": 14, "ucf": 14, "xst_opt": 14, "ngdbuild_opt": 14, "map_opt": 14, "par_opt": 14, "bitgen_opt": 14, "compress": 14, "srp": 14, "ngc": 14, "bld": 14, "ngd": 14, "databas": 14, "_map": 14, "mrp": 14, "ncd": 14, "physic": 14, "_par": 14, "_par_pad": 14, "txt": [14, 19], "usag": 14, "drc": 14, "bgn": 14, "amaranth_env_symbiflow": 14, "fasm2fram": 14, "xc7frames2bit": 14, "amaranth_env_xrai": 14, "cursori": 15, "overview": 15, "explan": [15, 24], "shown": [15, 24], "up_count": 15, "py": 15, "upcount": 15, "ovf": 15, "reach": [15, 21, 24], "els": [15, 17, 24], "helper": [15, 24], "elif": 15, "black": [15, 21], "verifi": [15, 24], "dut": 15, "25": [15, 20], "yield": [15, 21, 24], "_": [15, 24], "30": [15, 20], "clear": [15, 24], "add_clock": 15, "1e": 15, "mhz": 15, "add_sync_process": 15, "write_vcd": 15, "inspect": 15, "successfulli": 15, "de": 15, "facto": 15, "interoper": [15, 16], "rise": 15, "lightli": 15, "src": 15, "ir": 15, "526": 15, "26": 15, "27": 15, "h0000": 15, "41": 15, "h19": 15, "h1": 15, "posedg": 15, "casez": 15, "40": [15, 20], "endcas": 15, "xfrm": 15, "518": 15, "endmodul": 15, "aid": 15, "unfortun": 15, "standalon": [15, 24], "adapt": 15, "hz": 15, "ledblink": 15, "half_freq": 15, "default_clk_frequ": 15, "icestick": 15, "link": [15, 24], "foss": 15, "probabl": 15, "icestickplatform": 15, "do_program": 15, "benefit": 15, "turnkei": 15, "abil": [15, 22], "categori": 16, "idiomat": [16, 24], "metaclass": [16, 24], "layout": 16, "ffsynchron": [16, 17], "One": [16, 21], "hot": 16, "prioriti": 16, "grai": 16, "syncfifobuff": [16, 23], "asyncfifobuff": [16, 23], "algorithm": [16, 19], "resynchronis": 17, "flip": [17, 24], "flop": 17, "metast": 17, "synchronis": 17, "o_domain": 17, "unaffect": 17, "stage": 17, "lowest": 17, "mtbf": 17, "cost": 17, "increas": [17, 23], "latenc": [17, 19, 23], "max_input_delai": 17, "float": [17, 21], "maximum": 17, "second": [17, 21], "fail": [17, 24], "safest": 17, "load": 17, "valid": [17, 19, 21, 23, 24], "target": [17, 21, 22, 24], "asic": 17, "arbitrari": [17, 21], "warm": 17, "insuffici": 17, "deassert": 17, "get_ff_sync": 17, "cell": 17, "primarili": [17, 24], "async_edg": 17, "po": 17, "get_async_ff_sync": 17, "gate": 17, "yet": 17, "promptli": 17, "arst": 17, "get_reset_sync": 17, "puls": 17, "duti": 17, "ratio": 17, "drop": [17, 22], "i_domain": 17, "encod": 18, "indic": [18, 19, 21, 24], "invalid": [18, 24], "decod": [18, 24], "th": 18, "priorityencod": 18, "prioritydecod": 18, "grayencod": 18, "graydecod": 18, "comput": [19, 24], "polynomi": [19, 20], "commonli": 19, "catalog": [19, 20], "accommod": [19, 21], "data_width": [19, 20, 24], "obtain": 19, "fulli": 19, "crc16": 19, "ccitt": 19, "byte": [19, 21], "crc16_ccitt": [19, 20], "submodul": [19, 20, 24], "algo": 19, "crc_width": [19, 20], "0x1021": [19, 20], "initial_crc": [19, 20], "0xffff": [19, 20], "reflect_input": [19, 20], "reflect_output": [19, 20], "xor_output": [19, 20], "0x0000": [19, 20], "123456789": 19, "0x29b1": 19, "exclud": 19, "william": 19, "painless": 19, "www": 19, "ross": 19, "net": 19, "crc_v3": 19, "reveng": [19, 20], "catalogu": 19, "parameteris": 19, "crcmod": 19, "polynomin": 19, "init": [19, 21], "zoo": 19, "entri": [19, 20, 23], "highest": 19, "order": [19, 21, 24], "transmiss": 19, "littl": 19, "endian": 19, "multi": 19, "0x4e4c": 19, "transmit": 19, "octet": 19, "0x4c": 19, "0x4e": 19, "addition": 19, "residu": 19, "codeword": 19, "bitwidth": 19, "arg": [19, 22, 24], "src_loc_at": [19, 24], "kwarg": [19, 22, 24], "stream": [19, 24], "handl": [19, 23], "subsequ": 19, "throughput": 19, "per": 19, "classic": 19, "serial": 19, "galoi": 19, "shift": 19, "match_detect": 19, "trail": 19, "initialis": 19, "simultan": 19, "crc3_gsm": [19, 20], "crc3_rohc": [19, 20], "crc4_g_704": [19, 20], "crc4_itu": [19, 20], "crc4_interlaken": [19, 20], "crc5_epc_c1g2": [19, 20], "crc5_epc": [19, 20], "crc5_g_704": [19, 20], "crc5_itu": [19, 20], "crc5_usb": [19, 20], "crc6_cdma2000_a": [19, 20], "crc6_cdma2000_b": [19, 20], "crc6_darc": [19, 20], "crc6_g_704": [19, 20], "crc6_itu": [19, 20], "crc6_gsm": [19, 20], "crc7_mmc": [19, 20], "crc7_rohc": [19, 20], "crc7_umt": [19, 20], "crc8_autosar": [19, 20], "crc8_bluetooth": [19, 20], "crc8_cdma2000": [19, 20], "crc8_darc": [19, 20], "crc8_dvb_s2": [19, 20], "crc8_gsm_a": [19, 20], "crc8_gsm_b": [19, 20], "crc8_hitag": [19, 20], "crc8_i_432_1": [19, 20], "crc8_itu": [19, 20], "crc8_i_cod": [19, 20], "crc8_lte": [19, 20], "crc8_maxim_dow": [19, 20], "crc8_maxim": [19, 20], "crc8_mifare_mad": [19, 20], "crc8_nrsc_5": [19, 20], "crc8_opensafeti": [19, 20], "crc8_rohc": [19, 20], "crc8_sae_j1850": [19, 20], "crc8_smbu": [19, 20], "crc8_tech_3250": [19, 20], "crc8_ae": [19, 20], "crc8_etu": [19, 20], "crc8_wcdma": [19, 20], "crc10_atm": [19, 20], "crc10_i_610": [19, 20], "crc10_cdma2000": [19, 20], "crc10_gsm": [19, 20], "crc11_flexrai": [19, 20], "crc11_umt": [19, 20], "crc12_cdma2000": [19, 20], "crc12_dect": [19, 20], "crc12_gsm": [19, 20], "crc12_umt": [19, 20], "crc12_3gpp": [19, 20], "crc13_bbc": [19, 20], "crc14_darc": [19, 20], "crc14_gsm": [19, 20], "crc15_can": [19, 20], "crc15_mpt1327": [19, 20], "crc16_arc": [19, 20], "crc16_ibm": [19, 20], "crc16_cdma2000": [19, 20], "crc16_cm": [19, 20], "crc16_dds_110": [19, 20], "crc16_dect_r": [19, 20], "crc16_dect_x": [19, 20], "crc16_dnp": [19, 20], "crc16_en_13757": [19, 20], "crc16_genibu": [19, 20], "crc16_darc": [19, 20], "crc16_epc": [19, 20], "crc16_epc_c1g2": [19, 20], "crc16_i_cod": [19, 20], "crc16_gsm": [19, 20], "crc16_ibm_3740": [19, 20], "crc16_autosar": [19, 20], "crc16_ccitt_fals": [19, 20], "crc16_ibm_sdlc": [19, 20], "crc16_iso_hdlc": [19, 20], "crc16_iso_iec_14443_3_b": [19, 20], "crc16_x25": [19, 20], "crc16_iso_iec_14443_3_a": [19, 20], "crc16_kermit": [19, 20], "crc16_bluetooth": [19, 20], "crc16_ccitt_tru": [19, 20], "crc16_v_41_lsb": [19, 20], "crc16_lj1200": [19, 20], "crc16_m17": [19, 20], "crc16_maxim_dow": [19, 20], "crc16_maxim": [19, 20], "crc16_mcrf4xx": [19, 20], "crc16_modbu": [19, 20], "crc16_nrsc_5": [19, 20], "crc16_opensafety_a": [19, 20], "crc16_opensafety_b": [19, 20], "crc16_profibu": [19, 20], "crc16_iec_61158_2": [19, 20], "crc16_riello": [19, 20], "crc16_spi_fujitsu": [19, 20], "crc16_aug_ccitt": [19, 20], "crc16_t10_dif": [19, 20], "crc16_teledisk": [19, 20], "crc16_tms37157": [19, 20], "crc16_umt": [19, 20], "crc16_buypass": [19, 20], "crc16_verifon": [19, 20], "crc16_usb": [19, 20], "crc16_xmodem": [19, 20], "crc16_acorn": [19, 20], "crc16_lte": [19, 20], "crc16_v_41_msb": [19, 20], "crc16_zmodem": [19, 20], "crc17_can_fd": [19, 20], "crc21_can_fd": [19, 20], "crc24_ble": [19, 20], "crc24_flexray_a": [19, 20], "crc24_flexray_b": [19, 20], "crc24_interlaken": [19, 20], "crc24_lte_a": [19, 20], "crc24_lte_b": [19, 20], "crc24_openpgp": [19, 20], "crc24_os_9": [19, 20], "crc30_cdma": [19, 20], "crc31_philip": [19, 20], "crc32_aixm": [19, 20], "crc32_autosar": [19, 20], "crc32_base91_d": [19, 20], "crc32_bzip2": [19, 20], "crc32_aal5": [19, 20], "crc32_dect_b": [19, 20], "crc32_cd_rom_edc": [19, 20], "crc32_cksum": [19, 20], "crc32_posix": [19, 20], "crc32_iscsi": [19, 20], "crc32_base91_c": [19, 20], "crc32_castagnoli": [19, 20], "crc32_interlaken": [19, 20], "crc32_iso_hdlc": [19, 20], "crc32_adccp": [19, 20], "crc32_v_42": [19, 20], "crc32_xz": [19, 20], "crc32_pkzip": [19, 20], "crc32_ethernet": [19, 20], "crc32_jamcrc": [19, 20], "crc32_mef": [19, 20], "crc32_mpeg_2": [19, 20], "crc32_xfer": [19, 20], "crc40_gsm": [19, 20], "crc64_ecma_182": [19, 20], "crc64_go_iso": [19, 20], "crc64_m": [19, 20], "crc64_redi": [19, 20], "crc64_we": [19, 20], "crc64_xz": [19, 20], "crc64_ecma": [19, 20], "crc82_darc": [19, 20], "2023": 20, "05": 20, "crc8": 20, "0x3": 20, "0x0": [20, 21], "0x7": 20, "0xf": 20, "0x9": 20, "0x15": 20, "0x5": 20, "0x1f": 20, "0x27": 20, "0x3f": 20, "0x19": 20, "0x2f": 20, "0x4f": 20, "0x7f": [20, 21], "0x45": 20, "0xff": 20, "0xa7": 20, "0x00": 20, "0x9b": 20, "0x39": 20, "0xd5": 20, "0x1d": 20, "0x49": 20, "0x07": 20, "0x55": 20, "0xfd": 20, "0x31": 20, "0xc7": 20, "0x233": 20, "0x3d9": 20, "0x3ff": 20, "0x175": 20, "0x385": 20, "0x1a": 20, "0x307": 20, "0xf13": 20, "0xfff": 20, "0x000": 20, "0x80f": 20, "0xd31": 20, "13": 20, "0x1cf5": 20, "14": [20, 21], "0x805": 20, "0x202d": 20, "0x3fff": 20, "0x4599": 20, "0x6815": 20, "0x001": 20, "0x8005": 20, "0xc867": 20, "0x800d": 20, "0x0589": 20, "0x0001": 20, "0x3d65": 20, "0xc6c6": 20, "0x6f63": 20, "0x5935": 20, "0x080b": 20, "0x755b": 20, "0x1dcf": 20, "0xb2aa": 20, "0x1d0f": 20, "0x8bb7": 20, "0xa097": 20, "0x89ec": 20, "0x1685b": 20, "21": 20, "0x102899": 20, "0x00000": 20, "24": [20, 21, 24], "0x00065b": 20, "0x555555": 20, "0x000000": 20, "0x5d6dcb": 20, "0xfedcba": 20, "0xabcdef": 20, "0x328b63": 20, "0xffffff": 20, "0x864cfb": 20, "0x800063": 20, "0xb704ce": 20, "0x2030b9c7": 20, "0x3fffffff": 20, "0x4c11db7": 20, "0x7fffffff": 20, "0x814141ab": 20, "0x00000000": 20, "0xf4acfb13": 20, "0xffffffff": 20, "0xa833982b": 20, "0x04c11db7": 20, "0x8001801b": 20, "0x1edc6f41": 20, "0x741b8cd7": 20, "0x000000af": 20, "0x0004820009": 20, "0x0000000000": 20, "0xffffffffff": 20, "0x42f0e1eba9ea3693": 20, "0x0000000000000000": 20, "0x000000000000001b": 20, "0xffffffffffffffff": 20, "0x259c84cba6426349": 20, "0xad93d23594c935a9": 20, "82": 20, "0x308c0111011401440411": 20, "0x00000000000000000000": 20, "bitwis": [21, 22], "four": [21, 24], "relat": [21, 24], "foundat": 21, "introspect": [21, 24], "structlayout": 21, "unionlayout": 21, "arraylayout": 21, "flexiblelayout": 21, "struct": 21, "fundament": 21, "intern": [21, 24], "rgb": 21, "grayscal": 21, "color": 21, "format": 21, "rgb565": 21, "fast": 21, "approxim": 21, "i_color": 21, "o_grai": 21, "repetit": [21, 24], "referenc": 21, "rgb565_layout": 21, "red": 21, "green": 21, "blue": 21, "accumul": 21, "averag": 21, "intens": 21, "input_layout": 21, "i_stream": 21, "r_accum": 21, "sum": 21, "interchang": 21, "rgb_layout": 21, "r_bit": 21, "g_bit": 21, "b_bit": 21, "rgb24_layout": 21, "rgblayout": 21, "super": [21, 24], "rgbview": 21, "bright": 21, "as_valu": [21, 22], "static": [21, 24], "boilerpl": [21, 24], "ieee754singl": 21, "fraction": 21, "is_subnorm": 21, "set_addr": 21, "send_data": 21, "biggest": 21, "cmd": 21, "0x00001234": 21, "react": 21, "__eq__": [21, 22, 24], "span": 21, "preserv": 21, "invari": 21, "obj": [21, 24], "as_shap": [21, 22], "recursionerror": 21, "__iter__": [21, 24], "__getitem__": [21, 24], "keyerror": 21, "size": 21, "underli": [21, 22], "gap": 21, "pad": 21, "altern": 21, "_1": 21, "_2": 21, "won": 21, "dictionari": [21, 24], "plu": [21, 23], "largest": 21, "elem_shap": 21, "multipli": 21, "individu": 21, "contigu": 21, "boundari": [21, 24], "arbitrarili": 21, "stride": 21, "truth": [21, 24], "chosen": 21, "dynam": 21, "rest": [21, 24], "look": 21, "repeatedli": 21, "latter": 21, "unspecifi": 21, "inout": 21, "__getattr__": [21, 24], "attributeerror": [21, 24], "underscor": [21, 24], "kept": 21, "ieee": 21, "754": 21, "flt": 21, "hex": 21, "0x3f800000": 21, "0xbf800000": 21, "share": 21, "haschecksum": 21, "checksum": 21, "barehead": 21, "headerwithparam": 21, "bare": 21, "varint": 21, "int8": 21, "int16": 21, "0x100": 21, "flag": [22, 24], "intflag": 22, "subi": 22, "likewis": 22, "normalenum": 22, "spam": 22, "ham": 22, "enumview": [22, 24], "flagview": 22, "wrapper": [22, 24], "stdin": 22, "loos": 22, "transparentenum": 22, "instrview": 22, "has_immedi": 22, "view_class": 22, "d16": 22, "d17": 22, "enummeta": 22, "neither": [22, 24], "nor": [22, 24], "comparison": 22, "among": 22, "__invert__": 22, "__and__": 22, "__or__": 22, "__xor__": 22, "__rand__": 22, "__ror__": 22, "__rxor__": 22, "w_data": [23, 24], "w_rdy": 23, "w_en": 23, "r_rdy": 23, "noth": [23, 24], "unread": 23, "substitut": 23, "incompat": [23, 24], "exchang": 23, "r_domain": 23, "w_domain": 23, "exact_depth": 23, "declar": 24, "signaturememb": 24, "flippedsignatur": 24, "flippedinterfac": 24, "flippedsignaturememb": 24, "vice": 24, "versa": 24, "interact": 24, "concept": 24, "basiccount": 24, "solut": 24, "rewritten": 24, "componentcount": 24, "constructor": 24, "gone": 24, "unchang": 24, "unambigu": 24, "question": 24, "previous": 24, "intend": 24, "genericcount": 24, "compliant": 24, "is_compli": 24, "direction": 24, "readi": [24, 25], "sink": 24, "consum": 24, "dataproduc": 24, "dataconsum": 24, "elsewher": 24, "simplestreamsignatur": 24, "data_shap": 24, "intact": 24, "intf": 24, "metaprogram": 24, "streamproduc": 24, "streamconsum": 24, "complementari": 24, "ubiquit": 24, "streamconsumerusingin": 24, "deep": 24, "in1": 24, "in2": 24, "auxiliari": 24, "robust": 24, "proportion": 24, "pronounc": 24, "refactor": 24, "conclud": 24, "knowledg": 24, "expos": 24, "dataprocessorimplement": 24, "dataprocessorwrapp": 24, "impl": 24, "dataforward": 24, "conform": 24, "producerrequiringreadi": 24, "consumeralwaysreadi": 24, "consumerpossiblyunreadi": 24, "connectionerror": 24, "arg0": 24, "prolifer": 24, "subtli": 24, "presenc": 24, "absenc": 24, "statu": 24, "legacyaxidataproduc": 24, "adata": 24, "avalid": 24, "areadi": 24, "moderndataconsum": 24, "data_produc": 24, "data_consum": 24, "adapted_data_sourc": 24, "encourag": 24, "creation": 24, "illustr": 24, "capabl": 24, "usefulli": 24, "transfertyp": 24, "simplebussignatur": 24, "addr_width": 24, "_addr_width": 24, "rw": 24, "__repr__": 24, "simplebusinterfac": 24, "is_read_xf": 24, "is_write_xf": 24, "frozen": 24, "freez": 24, "almost": 24, "anonym": 24, "sig32": 24, "sig24": 24, "bus__en": 24, "bus__rw": 24, "bus__addr": 24, "bus__r_data": 24, "bus__w_data": 24, "unusu": 24, "__add__": 24, "ever": 24, "denot": 24, "buse": 24, "cyc": 24, "outgo": 24, "carri": 24, "respond": 24, "That": 24, "incom": 24, "shortcut": 24, "discrimin": 24, "union": 24, "taken": 24, "rgbpixel": 24, "dimens": 24, "prepend": 24, "dimension": 24, "is_port": 24, "is_signatur": 24, "signatureerror": 24, "nameerror": 24, "abc": 24, "manner": 24, "disallow": 24, "superscript": 24, "opreat": 24, "__contains__": 24, "__setitem__": 24, "stub": 24, "forbid": 24, "__delitem__": 24, "flatten": 24, "disregard": 24, "doubl": 24, "__": 24, "dict": 24, "unflip": 24, "flipped_memb": 24, "ing": 24, "influenc": 24, "obj__items__0": 24, "obj__items__1": 24, "prescrib": 24, "aspect": 24, "complianc": 24, "less": 24, "fill": 24, "help": 24, "repeat": 24, "serv": 24, "hoc": 24, "customsignatur": 24, "custominterfac": 24, "my_properti": 24, "accur": 24, "unavail": 24, "flipped_sig": 24, "distinguish": 24, "signatureknowswhenflip": 24, "is_flip": 24, "getattr": 24, "getter": 24, "cl": 24, "__setattr__": 24, "setattr": 24, "setter": 24, "__delattr__": 24, "delattr": 24, "delet": 24, "signaturemeta": 24, "subtyp": 24, "relationship": 24, "issubclass": 24, "__subclasscheck__": 24, "__instancecheck__": 24, "overhead": 24, "__dict__": 24, "approach": 24, "id": 24, "checker": 24, "track": 24, "burdensom": 24, "flipped_intf": 24, "interfaceknowswhenflip": 24, "other_unflip": 24, "caveat": 24, "imposs": 24, "meaningless": 24, "forbidden": 24, "obj1": 24, "obj2": 24, "obj3": 24, "besid": 24, "out1": 24, "arbit": 24, "purpos": 24, "clarifi": 24, "fixedcompon": 24, "superclass": 24, "parametriccompon": 24, "rai": 24, "offici": 25, "vivonomicon": 25, "kbob": 25, "robert": 25, "baruch": 25, "exercis": 25, "my": 25, "journei": 25, "david": 25, "sporn": 25, "focuss": 25, "workstat": 25}, "objects": {"amaranth.lib": [[17, 0, 0, "-", "cdc"], [18, 0, 0, "-", "coding"], [19, 0, 0, "-", "crc"], [21, 0, 0, "-", "data"], [22, 0, 0, "-", "enum"], [23, 0, 0, "-", "fifo"], [24, 0, 0, "-", "wiring"]], "amaranth.lib.cdc": [[17, 1, 1, "", "AsyncFFSynchronizer"], [17, 1, 1, "", "FFSynchronizer"], [17, 1, 1, "", "PulseSynchronizer"], [17, 1, 1, "", "ResetSynchronizer"]], "amaranth.lib.coding": [[18, 1, 1, "", "Decoder"], [18, 1, 1, "", "Encoder"], [18, 1, 1, "", "GrayDecoder"], [18, 1, 1, "", "GrayEncoder"], [18, 1, 1, "", "PriorityDecoder"], [18, 1, 1, "", "PriorityEncoder"]], "amaranth.lib.crc": [[19, 1, 1, "", "Algorithm"], [19, 1, 1, "", "Parameters"], [19, 1, 1, "", "Processor"], [20, 0, 0, "-", "catalog"]], "amaranth.lib.crc.Algorithm": [[19, 2, 1, "", "__call__"]], "amaranth.lib.crc.Parameters": [[19, 3, 1, "", "algorithm"], [19, 2, 1, "", "compute"], [19, 2, 1, "", "create"], [19, 2, 1, "", "residue"]], "amaranth.lib.crc.catalog": [[20, 4, 1, "", "CRC10_ATM"], [20, 4, 1, "", "CRC10_CDMA2000"], [20, 4, 1, "", "CRC10_GSM"], [20, 4, 1, "", "CRC10_I_610"], [20, 4, 1, "", "CRC11_FLEXRAY"], [20, 4, 1, "", "CRC11_UMTS"], [20, 4, 1, "", "CRC12_3GPP"], [20, 4, 1, "", "CRC12_CDMA2000"], [20, 4, 1, "", "CRC12_DECT"], [20, 4, 1, "", "CRC12_GSM"], [20, 4, 1, "", "CRC12_UMTS"], [20, 4, 1, "", "CRC13_BBC"], [20, 4, 1, "", "CRC14_DARC"], [20, 4, 1, "", "CRC14_GSM"], [20, 4, 1, "", "CRC15_CAN"], [20, 4, 1, "", "CRC15_MPT1327"], [20, 4, 1, "", "CRC16_ACORN"], [20, 4, 1, "", "CRC16_ARC"], [20, 4, 1, "", "CRC16_AUG_CCITT"], [20, 4, 1, "", "CRC16_AUTOSAR"], [20, 4, 1, "", "CRC16_BLUETOOTH"], [20, 4, 1, "", "CRC16_BUYPASS"], [20, 4, 1, "", "CRC16_CCITT"], [20, 4, 1, "", "CRC16_CCITT_FALSE"], [20, 4, 1, "", "CRC16_CCITT_TRUE"], [20, 4, 1, "", "CRC16_CDMA2000"], [20, 4, 1, "", "CRC16_CMS"], [20, 4, 1, "", "CRC16_DARC"], [20, 4, 1, "", "CRC16_DDS_110"], [20, 4, 1, "", "CRC16_DECT_R"], [20, 4, 1, "", "CRC16_DECT_X"], [20, 4, 1, "", "CRC16_DNP"], [20, 4, 1, "", "CRC16_EN_13757"], [20, 4, 1, "", "CRC16_EPC"], [20, 4, 1, "", "CRC16_EPC_C1G2"], [20, 4, 1, "", "CRC16_GENIBUS"], [20, 4, 1, "", "CRC16_GSM"], [20, 4, 1, "", "CRC16_IBM"], [20, 4, 1, "", "CRC16_IBM_3740"], [20, 4, 1, "", "CRC16_IBM_SDLC"], [20, 4, 1, "", "CRC16_IEC_61158_2"], [20, 4, 1, "", "CRC16_ISO_HDLC"], [20, 4, 1, "", "CRC16_ISO_IEC_14443_3_A"], [20, 4, 1, "", "CRC16_ISO_IEC_14443_3_B"], [20, 4, 1, "", "CRC16_I_CODE"], [20, 4, 1, "", "CRC16_KERMIT"], [20, 4, 1, "", "CRC16_LJ1200"], [20, 4, 1, "", "CRC16_LTE"], [20, 4, 1, "", "CRC16_M17"], [20, 4, 1, "", "CRC16_MAXIM"], [20, 4, 1, "", "CRC16_MAXIM_DOW"], [20, 4, 1, "", "CRC16_MCRF4XX"], [20, 4, 1, "", "CRC16_MODBUS"], [20, 4, 1, "", "CRC16_NRSC_5"], [20, 4, 1, "", "CRC16_OPENSAFETY_A"], [20, 4, 1, "", "CRC16_OPENSAFETY_B"], [20, 4, 1, "", "CRC16_PROFIBUS"], [20, 4, 1, "", "CRC16_RIELLO"], [20, 4, 1, "", "CRC16_SPI_FUJITSU"], [20, 4, 1, "", "CRC16_T10_DIF"], [20, 4, 1, "", "CRC16_TELEDISK"], [20, 4, 1, "", "CRC16_TMS37157"], [20, 4, 1, "", "CRC16_UMTS"], [20, 4, 1, "", "CRC16_USB"], [20, 4, 1, "", "CRC16_VERIFONE"], [20, 4, 1, "", "CRC16_V_41_LSB"], [20, 4, 1, "", "CRC16_V_41_MSB"], [20, 4, 1, "", "CRC16_X25"], [20, 4, 1, "", "CRC16_XMODEM"], [20, 4, 1, "", "CRC16_ZMODEM"], [20, 4, 1, "", "CRC17_CAN_FD"], [20, 4, 1, "", "CRC21_CAN_FD"], [20, 4, 1, "", "CRC24_BLE"], [20, 4, 1, "", "CRC24_FLEXRAY_A"], [20, 4, 1, "", "CRC24_FLEXRAY_B"], [20, 4, 1, "", "CRC24_INTERLAKEN"], [20, 4, 1, "", "CRC24_LTE_A"], [20, 4, 1, "", "CRC24_LTE_B"], [20, 4, 1, "", "CRC24_OPENPGP"], [20, 4, 1, "", "CRC24_OS_9"], [20, 4, 1, "", "CRC30_CDMA"], [20, 4, 1, "", "CRC31_PHILIPS"], [20, 4, 1, "", "CRC32_AAL5"], [20, 4, 1, "", "CRC32_ADCCP"], [20, 4, 1, "", "CRC32_AIXM"], [20, 4, 1, "", "CRC32_AUTOSAR"], [20, 4, 1, "", "CRC32_BASE91_C"], [20, 4, 1, "", "CRC32_BASE91_D"], [20, 4, 1, "", "CRC32_BZIP2"], [20, 4, 1, "", "CRC32_CASTAGNOLI"], [20, 4, 1, "", "CRC32_CD_ROM_EDC"], [20, 4, 1, "", "CRC32_CKSUM"], [20, 4, 1, "", "CRC32_DECT_B"], [20, 4, 1, "", "CRC32_ETHERNET"], [20, 4, 1, "", "CRC32_INTERLAKEN"], [20, 4, 1, "", "CRC32_ISCSI"], [20, 4, 1, "", "CRC32_ISO_HDLC"], [20, 4, 1, "", "CRC32_JAMCRC"], [20, 4, 1, "", "CRC32_MEF"], [20, 4, 1, "", "CRC32_MPEG_2"], [20, 4, 1, "", "CRC32_PKZIP"], [20, 4, 1, "", "CRC32_POSIX"], [20, 4, 1, "", "CRC32_V_42"], [20, 4, 1, "", "CRC32_XFER"], [20, 4, 1, "", "CRC32_XZ"], [20, 4, 1, "", "CRC3_GSM"], [20, 4, 1, "", "CRC3_ROHC"], [20, 4, 1, "", "CRC40_GSM"], [20, 4, 1, "", "CRC4_G_704"], [20, 4, 1, "", "CRC4_INTERLAKEN"], [20, 4, 1, "", "CRC4_ITU"], [20, 4, 1, "", "CRC5_EPC"], [20, 4, 1, "", "CRC5_EPC_C1G2"], [20, 4, 1, "", "CRC5_G_704"], [20, 4, 1, "", "CRC5_ITU"], [20, 4, 1, "", "CRC5_USB"], [20, 4, 1, "", "CRC64_ECMA"], [20, 4, 1, "", "CRC64_ECMA_182"], [20, 4, 1, "", "CRC64_GO_ISO"], [20, 4, 1, "", "CRC64_MS"], [20, 4, 1, "", "CRC64_REDIS"], [20, 4, 1, "", "CRC64_WE"], [20, 4, 1, "", "CRC64_XZ"], [20, 4, 1, "", "CRC6_CDMA2000_A"], [20, 4, 1, "", "CRC6_CDMA2000_B"], [20, 4, 1, "", "CRC6_DARC"], [20, 4, 1, "", "CRC6_GSM"], [20, 4, 1, "", "CRC6_G_704"], [20, 4, 1, "", "CRC6_ITU"], [20, 4, 1, "", "CRC7_MMC"], [20, 4, 1, "", "CRC7_ROHC"], [20, 4, 1, "", "CRC7_UMTS"], [20, 4, 1, "", "CRC82_DARC"], [20, 4, 1, "", "CRC8_AES"], [20, 4, 1, "", "CRC8_AUTOSAR"], [20, 4, 1, "", "CRC8_BLUETOOTH"], [20, 4, 1, "", "CRC8_CDMA2000"], [20, 4, 1, "", "CRC8_DARC"], [20, 4, 1, "", "CRC8_DVB_S2"], [20, 4, 1, "", "CRC8_ETU"], [20, 4, 1, "", "CRC8_GSM_A"], [20, 4, 1, "", "CRC8_GSM_B"], [20, 4, 1, "", "CRC8_HITAG"], [20, 4, 1, "", "CRC8_ITU"], [20, 4, 1, "", "CRC8_I_432_1"], [20, 4, 1, "", "CRC8_I_CODE"], [20, 4, 1, "", "CRC8_LTE"], [20, 4, 1, "", "CRC8_MAXIM"], [20, 4, 1, "", "CRC8_MAXIM_DOW"], [20, 4, 1, "", "CRC8_MIFARE_MAD"], [20, 4, 1, "", "CRC8_NRSC_5"], [20, 4, 1, "", "CRC8_OPENSAFETY"], [20, 4, 1, "", "CRC8_ROHC"], [20, 4, 1, "", "CRC8_SAE_J1850"], [20, 4, 1, "", "CRC8_SMBUS"], [20, 4, 1, "", "CRC8_TECH_3250"], [20, 4, 1, "", "CRC8_WCDMA"]], "amaranth.lib.data": [[21, 1, 1, "", "ArrayLayout"], [21, 1, 1, "", "Field"], [21, 1, 1, "", "FlexibleLayout"], [21, 1, 1, "", "Layout"], [21, 1, 1, "", "Struct"], [21, 1, 1, "", "StructLayout"], [21, 1, 1, "", "Union"], [21, 1, 1, "", "UnionLayout"], [21, 1, 1, "", "View"]], "amaranth.lib.data.ArrayLayout": [[21, 3, 1, "", "size"]], "amaranth.lib.data.Field": [[21, 2, 1, "", "__eq__"], [21, 3, 1, "", "width"]], "amaranth.lib.data.Layout": [[21, 2, 1, "", "__call__"], [21, 2, 1, "", "__eq__"], [21, 2, 1, "", "__getitem__"], [21, 2, 1, "", "__iter__"], [21, 2, 1, "", "as_shape"], [21, 2, 1, "", "cast"], [21, 2, 1, "", "const"], [21, 3, 1, "", "size"]], "amaranth.lib.data.StructLayout": [[21, 3, 1, "", "size"]], "amaranth.lib.data.UnionLayout": [[21, 2, 1, "", "const"], [21, 3, 1, "", "size"]], "amaranth.lib.data.View": [[21, 2, 1, "", "__getattr__"], [21, 2, 1, "", "__getitem__"], [21, 2, 1, "", "as_value"], [21, 2, 1, "", "eq"], [21, 2, 1, "", "shape"]], "amaranth.lib.enum": [[22, 1, 1, "", "Enum"], [22, 1, 1, "", "EnumMeta"], [22, 1, 1, "", "EnumView"], [22, 1, 1, "", "Flag"], [22, 1, 1, "", "FlagView"], [22, 1, 1, "", "IntEnum"], [22, 1, 1, "", "IntFlag"]], "amaranth.lib.enum.EnumMeta": [[22, 2, 1, "", "__call__"], [22, 2, 1, "", "as_shape"]], "amaranth.lib.enum.EnumView": [[22, 2, 1, "", "__eq__"], [22, 2, 1, "", "__init__"], [22, 2, 1, "", "as_value"], [22, 2, 1, "", "eq"], [22, 2, 1, "", "shape"]], "amaranth.lib.enum.FlagView": [[22, 2, 1, "", "__and__"], [22, 2, 1, "", "__invert__"], [22, 2, 1, "", "__or__"], [22, 2, 1, "", "__rand__"], [22, 2, 1, "", "__ror__"], [22, 2, 1, "", "__rxor__"], [22, 2, 1, "", "__xor__"]], "amaranth.lib.fifo": [[23, 1, 1, "", "AsyncFIFO"], [23, 1, 1, "", "AsyncFIFOBuffered"], [23, 1, 1, "", "FIFOInterface"], [23, 1, 1, "", "SyncFIFO"], [23, 1, 1, "", "SyncFIFOBuffered"]], "amaranth.lib.wiring": [[24, 1, 1, "", "Component"], [24, 5, 1, "", "ConnectionError"], [24, 1, 1, "", "FlippedInterface"], [24, 1, 1, "", "FlippedSignature"], [24, 1, 1, "", "FlippedSignatureMembers"], [24, 1, 1, "", "Flow"], [24, 4, 1, "", "In"], [24, 1, 1, "", "Member"], [24, 4, 1, "", "Out"], [24, 1, 1, "", "PureInterface"], [24, 1, 1, "", "Signature"], [24, 5, 1, "", "SignatureError"], [24, 1, 1, "", "SignatureMembers"], [24, 1, 1, "", "SignatureMeta"], [24, 7, 1, "", "connect"], [24, 7, 1, "", "flipped"]], "amaranth.lib.wiring.Component": [[24, 3, 1, "", "signature"]], "amaranth.lib.wiring.FlippedInterface": [[24, 2, 1, "", "__delattr__"], [24, 2, 1, "", "__eq__"], [24, 2, 1, "", "__getattr__"], [24, 2, 1, "", "__setattr__"], [24, 3, 1, "", "signature"]], "amaranth.lib.wiring.FlippedSignature": [[24, 2, 1, "", "__delattr__"], [24, 2, 1, "", "__getattr__"], [24, 2, 1, "", "__setattr__"], [24, 2, 1, "", "flip"]], "amaranth.lib.wiring.FlippedSignatureMembers": [[24, 2, 1, "", "flip"]], "amaranth.lib.wiring.Flow": [[24, 6, 1, "", "In"], [24, 6, 1, "", "Out"], [24, 2, 1, "", "__call__"], [24, 2, 1, "", "flip"]], "amaranth.lib.wiring.Member": [[24, 2, 1, "", "array"], [24, 3, 1, "", "dimensions"], [24, 2, 1, "", "flip"], [24, 3, 1, "", "flow"], [24, 3, 1, "", "is_port"], [24, 3, 1, "", "is_signature"], [24, 3, 1, "", "reset"], [24, 3, 1, "", "shape"], [24, 3, 1, "", "signature"]], "amaranth.lib.wiring.PureInterface": [[24, 2, 1, "", "__init__"]], "amaranth.lib.wiring.Signature": [[24, 2, 1, "", "__eq__"], [24, 2, 1, "", "create"], [24, 2, 1, "", "flatten"], [24, 2, 1, "", "flip"], [24, 2, 1, "", "is_compliant"], [24, 3, 1, "", "members"]], "amaranth.lib.wiring.SignatureMembers": [[24, 2, 1, "", "__contains__"], [24, 2, 1, "", "__delitem__"], [24, 2, 1, "", "__eq__"], [24, 2, 1, "", "__getitem__"], [24, 2, 1, "", "__iter__"], [24, 2, 1, "", "__setitem__"], [24, 2, 1, "", "create"], [24, 2, 1, "", "flatten"], [24, 2, 1, "", "flip"]], "amaranth.lib.wiring.SignatureMeta": [[24, 2, 1, "", "__instancecheck__"], [24, 2, 1, "", "__subclasscheck__"]], "amaranth.vendor": [[8, 1, 1, "", "GowinPlatform"], [9, 1, 1, "", "IntelPlatform"], [10, 1, 1, "", "LatticeECP5Platform"], [11, 1, 1, "", "LatticeICE40Platform"], [12, 6, 1, "", "LatticeMachXO2Platform"], [12, 6, 1, "", "LatticeMachXO3LPlatform"], [13, 1, 1, "", "QuicklogicPlatform"], [14, 1, 1, "", "XilinxPlatform"]], "amaranth.vendor._lattice_machxo_2_3l": [[12, 1, 1, "", "LatticeMachXO2Or3LPlatform"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:property", "4": "py:data", "5": "py:exception", "6": "py:attribute", "7": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "property", "Python property"], "4": ["py", "data", "Python data"], "5": ["py", "exception", "Python exception"], "6": ["py", "attribute", "Python attribute"], "7": ["py", "function", "Python function"]}, "titleterms": {"changelog": 0, "version": 0, "0": 0, "5": 0, "unreleas": 0, "migrat": 0, "from": [0, 6], "4": 0, "implement": [0, 15], "rfc": 0, "languag": [0, 3, 5, 6], "chang": [0, 1], "standard": [0, 5, 16], "librari": [0, 5, 16], "platform": [0, 7], "integr": [0, 5, 7], "3": 0, "toolchain": [0, 3, 5], "2": 0, "1": 0, "contribut": 1, "file": 1, "problem": 1, "report": 1, "fix": 1, "propos": 1, "new": 1, "featur": 1, "work": 1, "codebas": 1, "prepar": 1, "environ": 1, "run": 1, "testsuit": 1, "build": [1, 5], "document": [1, 2], "your": 1, "weekli": 1, "meet": 1, "amaranth": [2, 4, 5], "project": 2, "instal": 4, "system": [4, 5], "requir": 4, "prerequisit": 4, "latest": 4, "releas": 4, "develop": [4, 5], "snapshot": 4, "edit": 4, "board": [4, 5], "definit": [4, 5], "todo": [4, 6, 7, 15, 25], "introduct": [5, 21, 24], "The": [5, 6], "simul": 5, "fpga": 5, "guid": 6, "prelud": 6, "shape": 6, "valu": 6, "constant": [6, 24], "cast": 6, "integ": 6, "rang": 6, "enumer": [6, 22], "member": 6, "signal": 6, "name": 6, "initi": 6, "reset": 6, "less": 6, "oper": 6, "perform": 6, "describ": 6, "comput": 6, "width": 6, "extens": 6, "arithmet": 6, "comparison": 6, "bitwis": 6, "shift": 6, "rotat": 6, "reduct": 6, "logic": 6, "bit": 6, "sequenc": 6, "match": 6, "convers": [6, 18], "choic": 6, "arrai": 6, "data": [6, 21], "structur": [6, 21], "modul": 6, "control": 6, "domain": [6, 17], "assign": 6, "target": 6, "order": 6, "flow": 6, "activ": 6, "inact": 6, "If": 6, "elif": 6, "els": 6, "block": 6, "switch": 6, "case": 6, "fsm": 6, "state": 6, "combinatori": 6, "evalu": 6, "synchron": 6, "clock": [6, 17], "late": 6, "bind": 6, "elabor": 6, "submodul": 6, "modifi": 6, "renam": 6, "memori": 6, "instanc": 6, "gowin": 8, "intel": 9, "lattic": [10, 11, 12], "ecp5": 10, "ice40": 11, "machxo2": 12, "machxo3l": 12, "quicklog": 13, "xilinx": 14, "get": 15, "start": 15, "A": 15, "counter": 15, "test": 15, "convert": 15, "blink": 15, "led": 15, "cross": 17, "code": 18, "One": 18, "hot": 18, "prioriti": 18, "grai": 18, "cyclic": 19, "redund": 19, "check": 19, "predefin": 20, "crc": 20, "algorithm": 20, "overview": [21, 24], "motiv": [21, 24], "compos": 21, "layout": 21, "defin": 21, "discrimin": 21, "union": 21, "model": 21, "common": 21, "view": [21, 22], "creat": 21, "access": 21, "custom": [21, 24], "class": [21, 22], "metaclass": 22, "base": 22, "first": 23, "out": 23, "queue": 23, "interfac": 24, "connect": 24, "reusabl": 24, "forward": 24, "interior": 24, "input": 24, "adapt": 24, "signatur": 24, "path": 24, "make": 24, "compon": 24, "tutori": 25}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx": 58}, "alltitles": {"Changelog": [[0, "changelog"]], "Version 0.5 (unreleased)": [[0, "version-0-5-unreleased"]], "Migrating from version 0.4": [[0, "migrating-from-version-0-4"]], "Implemented RFCs": [[0, "implemented-rfcs"], [0, "id1"]], "Language changes": [[0, "language-changes"], [0, "id2"], [0, "id5"]], "Standard library changes": [[0, "standard-library-changes"], [0, "id3"], [0, "id6"]], "Platform integration changes": [[0, "platform-integration-changes"], [0, "id4"], [0, "id8"]], "Version 0.4": [[0, "version-0-4"]], "Migrating from version 0.3": [[0, "migrating-from-version-0-3"]], "Toolchain changes": [[0, "toolchain-changes"], [0, "id7"]], "Version 0.3": [[0, "version-0-3"]], "Migrating from version 0.2": [[0, "migrating-from-version-0-2"]], "Versions 0.1, 0.2": [[0, "versions-0-1-0-2"]], "Contributing": [[1, "contributing"]], "Filing problem reports": [[1, "filing-problem-reports"]], "Fixing problems": [[1, "fixing-problems"]], "Proposing new features": [[1, "proposing-new-features"]], "Working with the codebase": [[1, "working-with-the-codebase"]], "Preparing the environment": [[1, "preparing-the-environment"]], "Running the testsuite": [[1, "running-the-testsuite"]], "Building the documentation": [[1, "building-the-documentation"]], "Contributing your changes": [[1, "contributing-your-changes"]], "Weekly meetings": [[1, "weekly-meetings"]], "Amaranth project documentation": [[2, "amaranth-project-documentation"]], "Language & toolchain": [[3, "language-toolchain"]], "Installation": [[4, "installation"]], "System requirements": [[4, "system-requirements"]], "Installing prerequisites": [[4, "installing-prerequisites"]], "Installing Amaranth": [[4, "installing-amaranth"]], "Latest release": [[4, "latest-release"]], "Development snapshot": [[4, "development-snapshot"]], "Editable development snapshot": [[4, "editable-development-snapshot"]], "Installing board definitions": [[4, "installing-board-definitions"]], "Todo": [[4, "id1"], [6, "id14"], [7, "id1"], [15, "id1"], [25, "id1"]], "Introduction": [[5, "introduction"], [21, "introduction"], [24, "introduction"]], "The Amaranth language": [[5, "the-amaranth-language"]], "The Amaranth standard library": [[5, "the-amaranth-standard-library"]], "The Amaranth simulator": [[5, "the-amaranth-simulator"]], "The Amaranth build system": [[5, "the-amaranth-build-system"]], "FPGA toolchain integration": [[5, "fpga-toolchain-integration"]], "Development board definitions": [[5, "development-board-definitions"]], "Language guide": [[6, "language-guide"]], "The prelude": [[6, "the-prelude"]], "Shapes": [[6, "shapes"]], "Shapes of values": [[6, "shapes-of-values"]], "Values": [[6, "values"]], "Constants": [[6, "constants"]], "Shape casting": [[6, "shape-casting"]], "Shapes from integers": [[6, "shapes-from-integers"]], "Shapes from ranges": [[6, "shapes-from-ranges"]], "Shapes from enumerations": [[6, "shapes-from-enumerations"]], "Value casting": [[6, "value-casting"]], "Values from integers": [[6, "values-from-integers"]], "Values from enumeration members": [[6, "values-from-enumeration-members"]], "Constant casting": [[6, "constant-casting"]], "Signals": [[6, "signals"]], "Signal shapes": [[6, "signal-shapes"]], "Signal names": [[6, "signal-names"]], "Initial signal values": [[6, "initial-signal-values"]], "Reset-less signals": [[6, "reset-less-signals"]], "Operators": [[6, "operators"]], "Performing or describing computations?": [[6, "performing-or-describing-computations"]], "Width extension": [[6, "width-extension"]], "Arithmetic operators": [[6, "arithmetic-operators"]], "Comparison operators": [[6, "comparison-operators"]], "Bitwise, shift, and rotate operators": [[6, "bitwise-shift-and-rotate-operators"]], "Reduction operators": [[6, "reduction-operators"]], "Logical operators": [[6, "logical-operators"]], "Bit sequence operators": [[6, "bit-sequence-operators"]], "Match operator": [[6, "match-operator"]], "Conversion operators": [[6, "conversion-operators"]], "Choice operator": [[6, "choice-operator"]], "Arrays": [[6, "arrays"]], "Data structures": [[6, "data-structures"], [21, "module-amaranth.lib.data"]], "Modules": [[6, "modules"]], "Control domains": [[6, "control-domains"]], "Assigning to signals": [[6, "assigning-to-signals"]], "Assignment targets": [[6, "assignment-targets"]], "Assignment domains": [[6, "assignment-domains"]], "Assignment order": [[6, "assignment-order"]], "Control flow": [[6, "control-flow"]], "Active and inactive assignments": [[6, "active-and-inactive-assignments"]], "If/Elif/Else control blocks": [[6, "if-elif-else-control-blocks"]], "Switch/Case control blocks": [[6, "switch-case-control-blocks"]], "FSM/State control blocks": [[6, "fsm-state-control-blocks"]], "Combinatorial evaluation": [[6, "combinatorial-evaluation"]], "Synchronous evaluation": [[6, "synchronous-evaluation"]], "Clock domains": [[6, "clock-domains"]], "Late binding of clock and reset signals": [[6, "late-binding-of-clock-and-reset-signals"]], "Elaboration": [[6, "elaboration"]], "Submodules": [[6, "submodules"]], "Modifying control flow": [[6, "modifying-control-flow"]], "Renaming domains": [[6, "renaming-domains"]], "Memories": [[6, "memories"]], "Instances": [[6, "instances"]], "Platform integration": [[7, "platform-integration"]], "Gowin": [[8, "gowin"]], "Intel": [[9, "intel"]], "Lattice ECP5": [[10, "lattice-ecp5"]], "Lattice iCE40": [[11, "lattice-ice40"]], "Lattice MachXO2 and MachXO3L": [[12, "lattice-machxo2-and-machxo3l"]], "Quicklogic": [[13, "quicklogic"]], "Xilinx": [[14, "xilinx"]], "Getting started": [[15, "getting-started"]], "A counter": [[15, "a-counter"]], "Implementing a counter": [[15, "implementing-a-counter"]], "Testing a counter": [[15, "testing-a-counter"]], "Converting a counter": [[15, "converting-a-counter"]], "A blinking LED": [[15, "a-blinking-led"]], "Standard library": [[16, "standard-library"]], "Clock domain crossing": [[17, "module-amaranth.lib.cdc"]], "Code conversion": [[18, "module-amaranth.lib.coding"]], "One-hot coding": [[18, "one-hot-coding"]], "Priority coding": [[18, "priority-coding"]], "Gray coding": [[18, "gray-coding"]], "Cyclic redundancy checks": [[19, "module-amaranth.lib.crc"]], "Predefined CRC Algorithms": [[20, "module-amaranth.lib.crc.catalog"]], "Overview": [[21, "overview"], [24, "overview"]], "Motivation": [[21, "motivation"], [24, "motivation"]], "Composing layouts": [[21, "composing-layouts"]], "Defining layouts": [[21, "defining-layouts"]], "Discriminated unions": [[21, "discriminated-unions"]], "Modeling structured data": [[21, "modeling-structured-data"]], "Common data layouts": [[21, "common-data-layouts"]], "Data views": [[21, "data-views"]], "Creating a view": [[21, "creating-a-view"]], "Accessing a view": [[21, "accessing-a-view"]], "Custom view classes": [[21, "custom-view-classes"]], "Data classes": [[21, "data-classes"]], "Enumerations": [[22, "module-amaranth.lib.enum"]], "Metaclass": [[22, "metaclass"]], "Base classes": [[22, "base-classes"]], "View classes": [[22, "view-classes"]], "First-in first-out queues": [[23, "module-amaranth.lib.fifo"]], "Interfaces and connections": [[24, "module-amaranth.lib.wiring"]], "Reusable interfaces": [[24, "reusable-interfaces"]], "Forwarding interior interfaces": [[24, "forwarding-interior-interfaces"]], "Constant inputs": [[24, "constant-inputs"]], "Adapting interfaces": [[24, "adapting-interfaces"]], "Customizing signatures and interfaces": [[24, "customizing-signatures-and-interfaces"]], "Paths": [[24, "paths"]], "Signatures": [[24, "signatures"]], "Interfaces": [[24, "interfaces"]], "Making connections": [[24, "making-connections"]], "Components": [[24, "components"]], "Tutorial": [[25, "tutorial"]]}, "indexentries": {"gowinplatform (class in amaranth.vendor)": [[8, "amaranth.vendor.GowinPlatform"]], "intelplatform (class in amaranth.vendor)": [[9, "amaranth.vendor.IntelPlatform"]], "latticeecp5platform (class in amaranth.vendor)": [[10, "amaranth.vendor.LatticeECP5Platform"]], "latticeice40platform (class in amaranth.vendor)": [[11, "amaranth.vendor.LatticeICE40Platform"]], "latticemachxo2or3lplatform (class in amaranth.vendor._lattice_machxo_2_3l)": [[12, "amaranth.vendor._lattice_machxo_2_3l.LatticeMachXO2Or3LPlatform"]], "latticemachxo2platform (in module amaranth.vendor)": [[12, "amaranth.vendor.LatticeMachXO2Platform"]], "latticemachxo3lplatform (in module amaranth.vendor)": [[12, "amaranth.vendor.LatticeMachXO3LPlatform"]], "quicklogicplatform (class in amaranth.vendor)": [[13, "amaranth.vendor.QuicklogicPlatform"]], "xilinxplatform (class in amaranth.vendor)": [[14, "amaranth.vendor.XilinxPlatform"]], "asyncffsynchronizer (class in amaranth.lib.cdc)": [[17, "amaranth.lib.cdc.AsyncFFSynchronizer"]], "ffsynchronizer (class in amaranth.lib.cdc)": [[17, "amaranth.lib.cdc.FFSynchronizer"]], "pulsesynchronizer (class in amaranth.lib.cdc)": [[17, "amaranth.lib.cdc.PulseSynchronizer"]], "resetsynchronizer (class in amaranth.lib.cdc)": [[17, "amaranth.lib.cdc.ResetSynchronizer"]], "amaranth.lib.cdc": [[17, "module-amaranth.lib.cdc"]], "module": [[17, "module-amaranth.lib.cdc"], [18, "module-amaranth.lib.coding"], [19, "module-amaranth.lib.crc"], [20, "module-amaranth.lib.crc.catalog"], [21, "module-amaranth.lib.data"], [22, "module-amaranth.lib.enum"], [23, "module-amaranth.lib.fifo"], [24, "module-amaranth.lib.wiring"]], "decoder (class in amaranth.lib.coding)": [[18, "amaranth.lib.coding.Decoder"]], "encoder (class in amaranth.lib.coding)": [[18, "amaranth.lib.coding.Encoder"]], "graydecoder (class in amaranth.lib.coding)": [[18, "amaranth.lib.coding.GrayDecoder"]], "grayencoder (class in amaranth.lib.coding)": [[18, "amaranth.lib.coding.GrayEncoder"]], "prioritydecoder (class in amaranth.lib.coding)": [[18, "amaranth.lib.coding.PriorityDecoder"]], "priorityencoder (class in amaranth.lib.coding)": [[18, "amaranth.lib.coding.PriorityEncoder"]], "amaranth.lib.coding": [[18, "module-amaranth.lib.coding"]], "algorithm (class in amaranth.lib.crc)": [[19, "amaranth.lib.crc.Algorithm"]], "parameters (class in amaranth.lib.crc)": [[19, "amaranth.lib.crc.Parameters"]], "processor (class in amaranth.lib.crc)": [[19, "amaranth.lib.crc.Processor"]], "__call__() (amaranth.lib.crc.algorithm method)": [[19, "amaranth.lib.crc.Algorithm.__call__"]], "algorithm (amaranth.lib.crc.parameters property)": [[19, "amaranth.lib.crc.Parameters.algorithm"]], "amaranth.lib.crc": [[19, "module-amaranth.lib.crc"]], "compute() (amaranth.lib.crc.parameters method)": [[19, "amaranth.lib.crc.Parameters.compute"]], "create() (amaranth.lib.crc.parameters method)": [[19, "amaranth.lib.crc.Parameters.create"]], "residue() (amaranth.lib.crc.parameters method)": [[19, "amaranth.lib.crc.Parameters.residue"]], "crc10_atm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC10_ATM"]], "crc10_cdma2000 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC10_CDMA2000"]], "crc10_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC10_GSM"]], "crc10_i_610 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC10_I_610"]], "crc11_flexray (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC11_FLEXRAY"]], "crc11_umts (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC11_UMTS"]], "crc12_3gpp (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC12_3GPP"]], "crc12_cdma2000 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC12_CDMA2000"]], "crc12_dect (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC12_DECT"]], "crc12_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC12_GSM"]], "crc12_umts (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC12_UMTS"]], "crc13_bbc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC13_BBC"]], "crc14_darc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC14_DARC"]], "crc14_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC14_GSM"]], "crc15_can (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC15_CAN"]], "crc15_mpt1327 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC15_MPT1327"]], "crc16_acorn (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ACORN"]], "crc16_arc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ARC"]], "crc16_aug_ccitt (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_AUG_CCITT"]], "crc16_autosar (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_AUTOSAR"]], "crc16_bluetooth (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_BLUETOOTH"]], "crc16_buypass (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_BUYPASS"]], "crc16_ccitt (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_CCITT"]], "crc16_ccitt_false (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_CCITT_FALSE"]], "crc16_ccitt_true (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_CCITT_TRUE"]], "crc16_cdma2000 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_CDMA2000"]], "crc16_cms (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_CMS"]], "crc16_darc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_DARC"]], "crc16_dds_110 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_DDS_110"]], "crc16_dect_r (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_DECT_R"]], "crc16_dect_x (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_DECT_X"]], "crc16_dnp (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_DNP"]], "crc16_en_13757 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_EN_13757"]], "crc16_epc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_EPC"]], "crc16_epc_c1g2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_EPC_C1G2"]], "crc16_genibus (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_GENIBUS"]], "crc16_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_GSM"]], "crc16_ibm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_IBM"]], "crc16_ibm_3740 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_IBM_3740"]], "crc16_ibm_sdlc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_IBM_SDLC"]], "crc16_iec_61158_2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_IEC_61158_2"]], "crc16_iso_hdlc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ISO_HDLC"]], "crc16_iso_iec_14443_3_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ISO_IEC_14443_3_A"]], "crc16_iso_iec_14443_3_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ISO_IEC_14443_3_B"]], "crc16_i_code (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_I_CODE"]], "crc16_kermit (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_KERMIT"]], "crc16_lj1200 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_LJ1200"]], "crc16_lte (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_LTE"]], "crc16_m17 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_M17"]], "crc16_maxim (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_MAXIM"]], "crc16_maxim_dow (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_MAXIM_DOW"]], "crc16_mcrf4xx (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_MCRF4XX"]], "crc16_modbus (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_MODBUS"]], "crc16_nrsc_5 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_NRSC_5"]], "crc16_opensafety_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_OPENSAFETY_A"]], "crc16_opensafety_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_OPENSAFETY_B"]], "crc16_profibus (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_PROFIBUS"]], "crc16_riello (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_RIELLO"]], "crc16_spi_fujitsu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_SPI_FUJITSU"]], "crc16_t10_dif (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_T10_DIF"]], "crc16_teledisk (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_TELEDISK"]], "crc16_tms37157 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_TMS37157"]], "crc16_umts (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_UMTS"]], "crc16_usb (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_USB"]], "crc16_verifone (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_VERIFONE"]], "crc16_v_41_lsb (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_V_41_LSB"]], "crc16_v_41_msb (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_V_41_MSB"]], "crc16_x25 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_X25"]], "crc16_xmodem (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_XMODEM"]], "crc16_zmodem (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ZMODEM"]], "crc17_can_fd (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC17_CAN_FD"]], "crc21_can_fd (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC21_CAN_FD"]], "crc24_ble (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_BLE"]], "crc24_flexray_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_FLEXRAY_A"]], "crc24_flexray_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_FLEXRAY_B"]], "crc24_interlaken (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_INTERLAKEN"]], "crc24_lte_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_LTE_A"]], "crc24_lte_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_LTE_B"]], "crc24_openpgp (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_OPENPGP"]], "crc24_os_9 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_OS_9"]], "crc30_cdma (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC30_CDMA"]], "crc31_philips (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC31_PHILIPS"]], "crc32_aal5 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_AAL5"]], "crc32_adccp (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_ADCCP"]], "crc32_aixm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_AIXM"]], "crc32_autosar (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_AUTOSAR"]], "crc32_base91_c (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_BASE91_C"]], "crc32_base91_d (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_BASE91_D"]], "crc32_bzip2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_BZIP2"]], "crc32_castagnoli (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_CASTAGNOLI"]], "crc32_cd_rom_edc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_CD_ROM_EDC"]], "crc32_cksum (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_CKSUM"]], "crc32_dect_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_DECT_B"]], "crc32_ethernet (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_ETHERNET"]], "crc32_interlaken (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_INTERLAKEN"]], "crc32_iscsi (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_ISCSI"]], "crc32_iso_hdlc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_ISO_HDLC"]], "crc32_jamcrc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_JAMCRC"]], "crc32_mef (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_MEF"]], "crc32_mpeg_2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_MPEG_2"]], "crc32_pkzip (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_PKZIP"]], "crc32_posix (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_POSIX"]], "crc32_v_42 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_V_42"]], "crc32_xfer (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_XFER"]], "crc32_xz (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_XZ"]], "crc3_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC3_GSM"]], "crc3_rohc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC3_ROHC"]], "crc40_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC40_GSM"]], "crc4_g_704 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC4_G_704"]], "crc4_interlaken (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC4_INTERLAKEN"]], "crc4_itu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC4_ITU"]], "crc5_epc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC5_EPC"]], "crc5_epc_c1g2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC5_EPC_C1G2"]], "crc5_g_704 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC5_G_704"]], "crc5_itu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC5_ITU"]], "crc5_usb (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC5_USB"]], "crc64_ecma (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_ECMA"]], "crc64_ecma_182 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_ECMA_182"]], "crc64_go_iso (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_GO_ISO"]], "crc64_ms (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_MS"]], "crc64_redis (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_REDIS"]], "crc64_we (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_WE"]], "crc64_xz (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_XZ"]], "crc6_cdma2000_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_CDMA2000_A"]], "crc6_cdma2000_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_CDMA2000_B"]], "crc6_darc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_DARC"]], "crc6_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_GSM"]], "crc6_g_704 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_G_704"]], "crc6_itu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_ITU"]], "crc7_mmc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC7_MMC"]], "crc7_rohc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC7_ROHC"]], "crc7_umts (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC7_UMTS"]], "crc82_darc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC82_DARC"]], "crc8_aes (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_AES"]], "crc8_autosar (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_AUTOSAR"]], "crc8_bluetooth (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_BLUETOOTH"]], "crc8_cdma2000 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_CDMA2000"]], "crc8_darc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_DARC"]], "crc8_dvb_s2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_DVB_S2"]], "crc8_etu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_ETU"]], "crc8_gsm_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_GSM_A"]], "crc8_gsm_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_GSM_B"]], "crc8_hitag (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_HITAG"]], "crc8_itu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_ITU"]], "crc8_i_432_1 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_I_432_1"]], "crc8_i_code (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_I_CODE"]], "crc8_lte (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_LTE"]], "crc8_maxim (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_MAXIM"]], "crc8_maxim_dow (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_MAXIM_DOW"]], "crc8_mifare_mad (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_MIFARE_MAD"]], "crc8_nrsc_5 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_NRSC_5"]], "crc8_opensafety (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_OPENSAFETY"]], "crc8_rohc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_ROHC"]], "crc8_sae_j1850 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_SAE_J1850"]], "crc8_smbus (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_SMBUS"]], "crc8_tech_3250 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_TECH_3250"]], "crc8_wcdma (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_WCDMA"]], "amaranth.lib.crc.catalog": [[20, "module-amaranth.lib.crc.catalog"]], "arraylayout (class in amaranth.lib.data)": [[21, "amaranth.lib.data.ArrayLayout"]], "field (class in amaranth.lib.data)": [[21, "amaranth.lib.data.Field"]], "flexiblelayout (class in amaranth.lib.data)": [[21, "amaranth.lib.data.FlexibleLayout"]], "layout (class in amaranth.lib.data)": [[21, "amaranth.lib.data.Layout"]], "struct (class in amaranth.lib.data)": [[21, "amaranth.lib.data.Struct"]], "structlayout (class in amaranth.lib.data)": [[21, "amaranth.lib.data.StructLayout"]], "union (class in amaranth.lib.data)": [[21, "amaranth.lib.data.Union"]], "unionlayout (class in amaranth.lib.data)": [[21, "amaranth.lib.data.UnionLayout"]], "view (class in amaranth.lib.data)": [[21, "amaranth.lib.data.View"]], "__call__() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.__call__"]], "__eq__() (amaranth.lib.data.field method)": [[21, "amaranth.lib.data.Field.__eq__"]], "__eq__() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.__eq__"]], "__getattr__() (amaranth.lib.data.view method)": [[21, "amaranth.lib.data.View.__getattr__"]], "__getitem__() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.__getitem__"]], "__getitem__() (amaranth.lib.data.view method)": [[21, "amaranth.lib.data.View.__getitem__"]], "__iter__() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.__iter__"]], "amaranth.lib.data": [[21, "module-amaranth.lib.data"]], "as_shape() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.as_shape"]], "as_value() (amaranth.lib.data.view method)": [[21, "amaranth.lib.data.View.as_value"]], "cast() (amaranth.lib.data.layout static method)": [[21, "amaranth.lib.data.Layout.cast"]], "const() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.const"]], "const() (amaranth.lib.data.unionlayout method)": [[21, "amaranth.lib.data.UnionLayout.const"]], "eq() (amaranth.lib.data.view method)": [[21, "amaranth.lib.data.View.eq"]], "shape() (amaranth.lib.data.view method)": [[21, "amaranth.lib.data.View.shape"]], "size (amaranth.lib.data.arraylayout property)": [[21, "amaranth.lib.data.ArrayLayout.size"]], "size (amaranth.lib.data.layout property)": [[21, "amaranth.lib.data.Layout.size"]], "size (amaranth.lib.data.structlayout property)": [[21, "amaranth.lib.data.StructLayout.size"]], "size (amaranth.lib.data.unionlayout property)": [[21, "amaranth.lib.data.UnionLayout.size"]], "width (amaranth.lib.data.field property)": [[21, "amaranth.lib.data.Field.width"]], "enum (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.Enum"]], "enummeta (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.EnumMeta"]], "enumview (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.EnumView"]], "flag (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.Flag"]], "flagview (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.FlagView"]], "intenum (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.IntEnum"]], "intflag (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.IntFlag"]], "__and__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__and__"]], "__call__() (amaranth.lib.enum.enummeta method)": [[22, "amaranth.lib.enum.EnumMeta.__call__"]], "__eq__() (amaranth.lib.enum.enumview method)": [[22, "amaranth.lib.enum.EnumView.__eq__"]], "__init__() (amaranth.lib.enum.enumview method)": [[22, "amaranth.lib.enum.EnumView.__init__"]], "__invert__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__invert__"]], "__or__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__or__"]], "__rand__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__rand__"]], "__ror__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__ror__"]], "__rxor__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__rxor__"]], "__xor__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__xor__"]], "amaranth.lib.enum": [[22, "module-amaranth.lib.enum"]], "as_shape() (amaranth.lib.enum.enummeta method)": [[22, "amaranth.lib.enum.EnumMeta.as_shape"]], "as_value() (amaranth.lib.enum.enumview method)": [[22, "amaranth.lib.enum.EnumView.as_value"]], "eq() (amaranth.lib.enum.enumview method)": [[22, "amaranth.lib.enum.EnumView.eq"]], "shape() (amaranth.lib.enum.enumview method)": [[22, "amaranth.lib.enum.EnumView.shape"]], "asyncfifo (class in amaranth.lib.fifo)": [[23, "amaranth.lib.fifo.AsyncFIFO"]], "asyncfifobuffered (class in amaranth.lib.fifo)": [[23, "amaranth.lib.fifo.AsyncFIFOBuffered"]], "fifointerface (class in amaranth.lib.fifo)": [[23, "amaranth.lib.fifo.FIFOInterface"]], "syncfifo (class in amaranth.lib.fifo)": [[23, "amaranth.lib.fifo.SyncFIFO"]], "syncfifobuffered (class in amaranth.lib.fifo)": [[23, "amaranth.lib.fifo.SyncFIFOBuffered"]], "amaranth.lib.fifo": [[23, "module-amaranth.lib.fifo"]], "component (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.Component"]], "connectionerror": [[24, "amaranth.lib.wiring.ConnectionError"]], "flippedinterface (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.FlippedInterface"]], "flippedsignature (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.FlippedSignature"]], "flippedsignaturemembers (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.FlippedSignatureMembers"]], "flow (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.Flow"]], "in (amaranth.lib.wiring.flow attribute)": [[24, "amaranth.lib.wiring.Flow.In"]], "in (in module amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.In"]], "member (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.Member"]], "out (amaranth.lib.wiring.flow attribute)": [[24, "amaranth.lib.wiring.Flow.Out"]], "out (in module amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.Out"]], "pureinterface (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.PureInterface"]], "signature (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.Signature"]], "signatureerror": [[24, "amaranth.lib.wiring.SignatureError"]], "signaturemembers (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.SignatureMembers"]], "signaturemeta (class in amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.SignatureMeta"]], "__call__() (amaranth.lib.wiring.flow method)": [[24, "amaranth.lib.wiring.Flow.__call__"]], "__contains__() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.__contains__"]], "__delattr__() (amaranth.lib.wiring.flippedinterface method)": [[24, "amaranth.lib.wiring.FlippedInterface.__delattr__"]], "__delattr__() (amaranth.lib.wiring.flippedsignature method)": [[24, "amaranth.lib.wiring.FlippedSignature.__delattr__"]], "__delitem__() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.__delitem__"]], "__eq__() (amaranth.lib.wiring.flippedinterface method)": [[24, "amaranth.lib.wiring.FlippedInterface.__eq__"]], "__eq__() (amaranth.lib.wiring.signature method)": [[24, "amaranth.lib.wiring.Signature.__eq__"]], "__eq__() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.__eq__"]], "__getattr__() (amaranth.lib.wiring.flippedinterface method)": [[24, "amaranth.lib.wiring.FlippedInterface.__getattr__"]], "__getattr__() (amaranth.lib.wiring.flippedsignature method)": [[24, "amaranth.lib.wiring.FlippedSignature.__getattr__"]], "__getitem__() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.__getitem__"]], "__init__() (amaranth.lib.wiring.pureinterface method)": [[24, "amaranth.lib.wiring.PureInterface.__init__"]], "__instancecheck__() (amaranth.lib.wiring.signaturemeta method)": [[24, "amaranth.lib.wiring.SignatureMeta.__instancecheck__"]], "__iter__() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.__iter__"]], "__setattr__() (amaranth.lib.wiring.flippedinterface method)": [[24, "amaranth.lib.wiring.FlippedInterface.__setattr__"]], "__setattr__() (amaranth.lib.wiring.flippedsignature method)": [[24, "amaranth.lib.wiring.FlippedSignature.__setattr__"]], "__setitem__() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.__setitem__"]], "__subclasscheck__() (amaranth.lib.wiring.signaturemeta method)": [[24, "amaranth.lib.wiring.SignatureMeta.__subclasscheck__"]], "amaranth.lib.wiring": [[24, "module-amaranth.lib.wiring"]], "array() (amaranth.lib.wiring.member method)": [[24, "amaranth.lib.wiring.Member.array"]], "connect() (in module amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.connect"]], "create() (amaranth.lib.wiring.signature method)": [[24, "amaranth.lib.wiring.Signature.create"]], "create() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.create"]], "dimensions (amaranth.lib.wiring.member property)": [[24, "amaranth.lib.wiring.Member.dimensions"]], "flatten() (amaranth.lib.wiring.signature method)": [[24, "amaranth.lib.wiring.Signature.flatten"]], "flatten() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.flatten"]], "flip() (amaranth.lib.wiring.flippedsignature method)": [[24, "amaranth.lib.wiring.FlippedSignature.flip"]], "flip() (amaranth.lib.wiring.flippedsignaturemembers method)": [[24, "amaranth.lib.wiring.FlippedSignatureMembers.flip"]], "flip() (amaranth.lib.wiring.flow method)": [[24, "amaranth.lib.wiring.Flow.flip"]], "flip() (amaranth.lib.wiring.member method)": [[24, "amaranth.lib.wiring.Member.flip"]], "flip() (amaranth.lib.wiring.signature method)": [[24, "amaranth.lib.wiring.Signature.flip"]], "flip() (amaranth.lib.wiring.signaturemembers method)": [[24, "amaranth.lib.wiring.SignatureMembers.flip"]], "flipped() (in module amaranth.lib.wiring)": [[24, "amaranth.lib.wiring.flipped"]], "flow (amaranth.lib.wiring.member property)": [[24, "amaranth.lib.wiring.Member.flow"]], "is_compliant() (amaranth.lib.wiring.signature method)": [[24, "amaranth.lib.wiring.Signature.is_compliant"]], "is_port (amaranth.lib.wiring.member property)": [[24, "amaranth.lib.wiring.Member.is_port"]], "is_signature (amaranth.lib.wiring.member property)": [[24, "amaranth.lib.wiring.Member.is_signature"]], "members (amaranth.lib.wiring.signature property)": [[24, "amaranth.lib.wiring.Signature.members"]], "reset (amaranth.lib.wiring.member property)": [[24, "amaranth.lib.wiring.Member.reset"]], "shape (amaranth.lib.wiring.member property)": [[24, "amaranth.lib.wiring.Member.shape"]], "signature (amaranth.lib.wiring.component property)": [[24, "amaranth.lib.wiring.Component.signature"]], "signature (amaranth.lib.wiring.flippedinterface property)": [[24, "amaranth.lib.wiring.FlippedInterface.signature"]], "signature (amaranth.lib.wiring.member property)": [[24, "amaranth.lib.wiring.Member.signature"]]}}) \ No newline at end of file diff --git a/docs/amaranth/latest/start.html b/docs/amaranth/latest/start.html index 83ca75f8..6408cb58 100644 --- a/docs/amaranth/latest/start.html +++ b/docs/amaranth/latest/start.html @@ -4,7 +4,7 @@ - Getting started — Amaranth language & toolchain 0.4.1.dev41 documentation + Getting started — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/stdlib.html b/docs/amaranth/latest/stdlib.html index 16848d48..3886193d 100644 --- a/docs/amaranth/latest/stdlib.html +++ b/docs/amaranth/latest/stdlib.html @@ -4,7 +4,7 @@ - Standard library — Amaranth language & toolchain 0.4.1.dev41 documentation + Standard library — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/stdlib/cdc.html b/docs/amaranth/latest/stdlib/cdc.html index 3580d0bf..d6bd6bc1 100644 --- a/docs/amaranth/latest/stdlib/cdc.html +++ b/docs/amaranth/latest/stdlib/cdc.html @@ -4,7 +4,7 @@ - Clock domain crossing — Amaranth language & toolchain 0.4.1.dev41 documentation + Clock domain crossing — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/stdlib/coding.html b/docs/amaranth/latest/stdlib/coding.html index df7f3108..e0731e6e 100644 --- a/docs/amaranth/latest/stdlib/coding.html +++ b/docs/amaranth/latest/stdlib/coding.html @@ -4,7 +4,7 @@ - Code conversion — Amaranth language & toolchain 0.4.1.dev41 documentation + Code conversion — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/stdlib/crc.html b/docs/amaranth/latest/stdlib/crc.html index f63c1cd4..e4053dd3 100644 --- a/docs/amaranth/latest/stdlib/crc.html +++ b/docs/amaranth/latest/stdlib/crc.html @@ -4,7 +4,7 @@ - Cyclic redundancy checks — Amaranth language & toolchain 0.4.1.dev41 documentation + Cyclic redundancy checks — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/stdlib/crc/catalog.html b/docs/amaranth/latest/stdlib/crc/catalog.html index 9932a0ff..35c368d4 100644 --- a/docs/amaranth/latest/stdlib/crc/catalog.html +++ b/docs/amaranth/latest/stdlib/crc/catalog.html @@ -4,7 +4,7 @@ - Predefined CRC Algorithms — Amaranth language & toolchain 0.4.1.dev41 documentation + Predefined CRC Algorithms — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/stdlib/data.html b/docs/amaranth/latest/stdlib/data.html index be0f9888..15eac541 100644 --- a/docs/amaranth/latest/stdlib/data.html +++ b/docs/amaranth/latest/stdlib/data.html @@ -4,7 +4,7 @@ - Data structures — Amaranth language & toolchain 0.4.1.dev41 documentation + Data structures — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/stdlib/enum.html b/docs/amaranth/latest/stdlib/enum.html index 8b35a0bd..a1d10547 100644 --- a/docs/amaranth/latest/stdlib/enum.html +++ b/docs/amaranth/latest/stdlib/enum.html @@ -4,7 +4,7 @@ - Enumerations — Amaranth language & toolchain 0.4.1.dev41 documentation + Enumerations — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/stdlib/fifo.html b/docs/amaranth/latest/stdlib/fifo.html index 6140239e..f7b93e38 100644 --- a/docs/amaranth/latest/stdlib/fifo.html +++ b/docs/amaranth/latest/stdlib/fifo.html @@ -4,7 +4,7 @@ - First-in first-out queues — Amaranth language & toolchain 0.4.1.dev41 documentation + First-in first-out queues — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/stdlib/wiring.html b/docs/amaranth/latest/stdlib/wiring.html index 7f65626b..348c5df6 100644 --- a/docs/amaranth/latest/stdlib/wiring.html +++ b/docs/amaranth/latest/stdlib/wiring.html @@ -4,7 +4,7 @@ - Interfaces and connections — Amaranth language & toolchain 0.4.1.dev41 documentation + Interfaces and connections — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6
      diff --git a/docs/amaranth/latest/tutorial.html b/docs/amaranth/latest/tutorial.html index 642429bd..46bfc5e3 100644 --- a/docs/amaranth/latest/tutorial.html +++ b/docs/amaranth/latest/tutorial.html @@ -4,7 +4,7 @@ - Tutorial — Amaranth language & toolchain 0.4.1.dev41 documentation + Tutorial — Amaranth language & toolchain 0.4.1.dev45 documentation @@ -15,7 +15,7 @@ - + @@ -39,7 +39,7 @@
      - 0.4.1.dev41+gdb7e649 + 0.4.1.dev45+g0ea2aa6