From c6c0e0e4f914a0235a6e64d546270a53e66f3b5e Mon Sep 17 00:00:00 2001 From: "github-merge-queue[bot]" Date: Wed, 9 Oct 2024 17:16:22 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20main=20from=20@=20amaranth-lan?= =?UTF-8?q?g/amaranth@b6bf515e5b2f7cb64fbeac7f17997e5099a80731=20?= =?UTF-8?q?=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/amaranth/latest/_sources/install.rst.txt | 4 +- docs/amaranth/latest/_static/basic.css | 6 +- docs/amaranth/latest/_static/doctools.js | 2 +- .../latest/_static/documentation_options.js | 5 +- docs/amaranth/latest/_static/language_data.js | 4 +- docs/amaranth/latest/_static/searchtools.js | 196 +++++++---- .../latest/_static/sphinx_highlight.js | 16 +- docs/amaranth/latest/changes.html | 86 ++--- docs/amaranth/latest/contrib.html | 34 +- docs/amaranth/latest/cover.html | 14 +- docs/amaranth/latest/genindex.html | 12 +- docs/amaranth/latest/guide.html | 134 +++---- docs/amaranth/latest/index.html | 14 +- docs/amaranth/latest/install.html | 32 +- docs/amaranth/latest/install.rst | 4 +- docs/amaranth/latest/intro.html | 26 +- docs/amaranth/latest/objects.inv | Bin 5068 -> 5068 bytes docs/amaranth/latest/platform.html | 14 +- docs/amaranth/latest/platform/altera.html | 16 +- docs/amaranth/latest/platform/gowin.html | 16 +- docs/amaranth/latest/platform/lattice.html | 16 +- docs/amaranth/latest/platform/quicklogic.html | 16 +- .../amaranth/latest/platform/siliconblue.html | 16 +- docs/amaranth/latest/platform/xilinx.html | 16 +- docs/amaranth/latest/py-modindex.html | 12 +- docs/amaranth/latest/reference.html | 164 ++++----- docs/amaranth/latest/search.html | 12 +- docs/amaranth/latest/searchindex.js | 2 +- docs/amaranth/latest/simulator.html | 98 +++--- docs/amaranth/latest/start.html | 24 +- docs/amaranth/latest/stdlib.html | 14 +- docs/amaranth/latest/stdlib/cdc.html | 22 +- docs/amaranth/latest/stdlib/crc.html | 38 +- docs/amaranth/latest/stdlib/crc/catalog.html | 328 +++++++++--------- docs/amaranth/latest/stdlib/data.html | 112 +++--- docs/amaranth/latest/stdlib/enum.html | 64 ++-- docs/amaranth/latest/stdlib/fifo.html | 24 +- docs/amaranth/latest/stdlib/io.html | 72 ++-- docs/amaranth/latest/stdlib/memory.html | 54 +-- docs/amaranth/latest/stdlib/meta.html | 38 +- docs/amaranth/latest/stdlib/stream.html | 36 +- docs/amaranth/latest/stdlib/wiring.html | 174 +++++----- docs/amaranth/latest/tutorial.html | 14 +- 43 files changed, 1034 insertions(+), 967 deletions(-) diff --git a/docs/amaranth/latest/_sources/install.rst.txt b/docs/amaranth/latest/_sources/install.rst.txt index 8be01f9c..42fa667a 100644 --- a/docs/amaranth/latest/_sources/install.rst.txt +++ b/docs/amaranth/latest/_sources/install.rst.txt @@ -23,7 +23,7 @@ System requirements .. |yosys-version| replace:: 0.40 (or newer) -Amaranth HDL requires Python 3.8; it works on CPython_ 3.8 (or newer), and works faster on PyPy3.8_ 7.3.7 (or newer). Installation requires pip_ 23.0 (or newer). +Amaranth HDL requires Python 3.9; it works on CPython_ 3.9 (or newer), and works faster on PyPy3.9_ 7.3.7 (or newer). Installation requires pip_ 23.0 (or newer). For most workflows, Amaranth requires Yosys_ |yosys-version|. A `compatible version of Yosys `_ is distributed via PyPI_ for most popular platforms, so it is usually not necessary to install Yosys separately. @@ -34,7 +34,7 @@ Synthesizing, placing and routing an Amaranth design for an FPGA requires the FP .. TODO: Link to FPGA family docs here .. _CPython: https://www.python.org/ -.. _PyPy3.8: https://www.pypy.org/ +.. _PyPy3.9: https://www.pypy.org/ .. _pip: https://pip.pypa.io/en/stable/ .. _Yosys: https://yosyshq.net/yosys/ .. _amaranth-yosys: https://pypi.org/project/amaranth-yosys/ diff --git a/docs/amaranth/latest/_static/basic.css b/docs/amaranth/latest/_static/basic.css index cfc60b86..f316efcb 100644 --- a/docs/amaranth/latest/_static/basic.css +++ b/docs/amaranth/latest/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -237,6 +237,10 @@ a.headerlink { visibility: hidden; } +a:visited { + color: #551A8B; +} + h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, diff --git a/docs/amaranth/latest/_static/doctools.js b/docs/amaranth/latest/_static/doctools.js index d06a71d7..4d67807d 100644 --- a/docs/amaranth/latest/_static/doctools.js +++ b/docs/amaranth/latest/_static/doctools.js @@ -4,7 +4,7 @@ * * Base JavaScript utilities for all Sphinx HTML documentation. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ diff --git a/docs/amaranth/latest/_static/documentation_options.js b/docs/amaranth/latest/_static/documentation_options.js index 88ac13f0..8cc814dc 100644 --- a/docs/amaranth/latest/_static/documentation_options.js +++ b/docs/amaranth/latest/_static/documentation_options.js @@ -1,6 +1,5 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.6.0.dev68', +const DOCUMENTATION_OPTIONS = { + VERSION: '0.6.0.dev69', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/amaranth/latest/_static/language_data.js b/docs/amaranth/latest/_static/language_data.js index 250f5665..367b8ed8 100644 --- a/docs/amaranth/latest/_static/language_data.js +++ b/docs/amaranth/latest/_static/language_data.js @@ -5,7 +5,7 @@ * This script contains the language-specific data used by searchtools.js, * namely the list of stopwords, stemmer, scorer and splitter. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -13,7 +13,7 @@ var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; -/* Non-minified version is copied as a separate JS file, is available */ +/* Non-minified version is copied as a separate JS file, if available */ /** * Porter Stemmer diff --git a/docs/amaranth/latest/_static/searchtools.js b/docs/amaranth/latest/_static/searchtools.js index 97d56a74..b08d58c9 100644 --- a/docs/amaranth/latest/_static/searchtools.js +++ b/docs/amaranth/latest/_static/searchtools.js @@ -4,7 +4,7 @@ * * Sphinx JavaScript utilities for the full-text search. * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -57,12 +57,12 @@ const _removeChildren = (element) => { const _escapeRegExp = (string) => string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string -const _displayItem = (item, searchTerms) => { +const _displayItem = (item, searchTerms, highlightTerms) => { const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; - const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; const [docName, title, anchor, descr, score, _filename] = item; @@ -75,28 +75,35 @@ const _displayItem = (item, searchTerms) => { if (dirname.match(/\/index\/$/)) dirname = dirname.substring(0, dirname.length - 6); else if (dirname === "index/") dirname = ""; - requestUrl = docUrlRoot + dirname; + requestUrl = contentRoot + dirname; linkUrl = requestUrl; } else { // normal html builders - requestUrl = docUrlRoot + docName + docFileSuffix; + requestUrl = contentRoot + docName + docFileSuffix; linkUrl = docName + docLinkSuffix; } let linkEl = listItem.appendChild(document.createElement("a")); linkEl.href = linkUrl + anchor; linkEl.dataset.score = score; linkEl.innerHTML = title; - if (descr) + if (descr) { listItem.appendChild(document.createElement("span")).innerHTML = " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } else if (showSearchSummary) fetch(requestUrl) .then((responseData) => responseData.text()) .then((data) => { if (data) listItem.appendChild( - Search.makeSearchSummary(data, searchTerms) + Search.makeSearchSummary(data, searchTerms, anchor) ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); }); Search.output.appendChild(listItem); }; @@ -109,26 +116,43 @@ const _finishSearch = (resultCount) => { ); else Search.status.innerText = _( - `Search finished, found ${resultCount} page(s) matching the search query.` - ); + "Search finished, found ${resultCount} page(s) matching the search query." + ).replace('${resultCount}', resultCount); }; const _displayNextItem = ( results, resultCount, - searchTerms + searchTerms, + highlightTerms, ) => { // results left, load the summary and display it // this is intended to be dynamic (don't sub resultsCount) if (results.length) { - _displayItem(results.pop(), searchTerms); + _displayItem(results.pop(), searchTerms, highlightTerms); setTimeout( - () => _displayNextItem(results, resultCount, searchTerms), + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), 5 ); } // search finished, update title and status message else _finishSearch(resultCount); }; +// Helper function used by query() to order search results. +// Each input is an array of [docname, title, anchor, descr, score, filename]. +// Order the results by score (in opposite order of appearance, since the +// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically. +const _orderResultsByScoreThenName = (a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; +}; /** * Default splitQuery function. Can be overridden in ``sphinx.search`` with a @@ -152,13 +176,26 @@ const Search = { _queued_query: null, _pulse_status: -1, - htmlToText: (htmlString) => { + htmlToText: (htmlString, anchor) => { const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); - htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + for (const removalQuery of [".headerlink", "script", "style"]) { + htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() }); + } + if (anchor) { + const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`); + if (anchorContent) return anchorContent.textContent; + + console.warn( + `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.` + ); + } + + // if anchor not specified or not found, fall back to main content const docContent = htmlElement.querySelector('[role="main"]'); - if (docContent !== undefined) return docContent.textContent; + if (docContent) return docContent.textContent; + console.warn( - "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template." ); return ""; }, @@ -231,16 +268,7 @@ const Search = { else Search.deferQuery(query); }, - /** - * execute search (requires search index to be loaded) - */ - query: (query) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - const allTitles = Search._index.alltitles; - const indexEntries = Search._index.indexentries; - + _parseQuery: (query) => { // stem the search terms and add them to the correct list const stemmer = new Stemmer(); const searchTerms = new Set(); @@ -276,21 +304,38 @@ const Search = { // console.info("required: ", [...searchTerms]); // console.info("excluded: ", [...excludedTerms]); - // array of [docname, title, anchor, descr, score, filename] - let results = []; + return [query, searchTerms, excludedTerms, highlightTerms, objectTerms]; + }, + + /** + * execute search (requires search index to be loaded) + */ + _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // Collect multiple result groups to be sorted separately and then ordered. + // Each is an array of [docname, title, anchor, descr, score, filename]. + const normalResults = []; + const nonMainIndexResults = []; + _removeChildren(document.getElementById("search-progress")); - const queryLower = query.toLowerCase(); + const queryLower = query.toLowerCase().trim(); for (const [title, foundTitles] of Object.entries(allTitles)) { - if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) { for (const [file, id] of foundTitles) { - let score = Math.round(100 * queryLower.length / title.length) - results.push([ + const score = Math.round(Scorer.title * queryLower.length / title.length); + const boost = titles[file] === title ? 1 : 0; // add a boost for document titles + normalResults.push([ docNames[file], titles[file] !== title ? `${titles[file]} > ${title}` : title, id !== null ? "#" + id : "", null, - score, + score + boost, filenames[file], ]); } @@ -300,46 +345,47 @@ const Search = { // search for explicit entries in index directives for (const [entry, foundEntries] of Object.entries(indexEntries)) { if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { - for (const [file, id] of foundEntries) { - let score = Math.round(100 * queryLower.length / entry.length) - results.push([ + for (const [file, id, isMain] of foundEntries) { + const score = Math.round(100 * queryLower.length / entry.length); + const result = [ docNames[file], titles[file], id ? "#" + id : "", null, score, filenames[file], - ]); + ]; + if (isMain) { + normalResults.push(result); + } else { + nonMainIndexResults.push(result); + } } } } // lookup as object objectTerms.forEach((term) => - results.push(...Search.performObjectSearch(term, objectTerms)) + normalResults.push(...Search.performObjectSearch(term, objectTerms)) ); // lookup as search terms in fulltext - results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms)); // let the scorer override scores with a custom scoring function - if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); - - // now sort the results by score (in opposite order of appearance, since the - // display function below uses pop() to retrieve items) and then - // alphabetically - results.sort((a, b) => { - const leftScore = a[4]; - const rightScore = b[4]; - if (leftScore === rightScore) { - // same score: sort alphabetically - const leftTitle = a[1].toLowerCase(); - const rightTitle = b[1].toLowerCase(); - if (leftTitle === rightTitle) return 0; - return leftTitle > rightTitle ? -1 : 1; // inverted is intentional - } - return leftScore > rightScore ? 1 : -1; - }); + if (Scorer.score) { + normalResults.forEach((item) => (item[4] = Scorer.score(item))); + nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item))); + } + + // Sort each group of results by score and then alphabetically by name. + normalResults.sort(_orderResultsByScoreThenName); + nonMainIndexResults.sort(_orderResultsByScoreThenName); + + // Combine the result groups in (reverse) order. + // Non-main index entries are typically arbitrary cross-references, + // so display them after other results. + let results = [...nonMainIndexResults, ...normalResults]; // remove duplicate search results // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept @@ -353,14 +399,19 @@ const Search = { return acc; }, []); - results = results.reverse(); + return results.reverse(); + }, + + query: (query) => { + const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query); + const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms); // for debugging //Search.lastresults = results.slice(); // a copy // console.info("search results:", Search.lastresults); // print the results - _displayNextItem(results, results.length, searchTerms); + _displayNextItem(results, results.length, searchTerms, highlightTerms); }, /** @@ -458,14 +509,18 @@ const Search = { // add support for partial matches if (word.length > 2) { const escapedWord = _escapeRegExp(word); - Object.keys(terms).forEach((term) => { - if (term.match(escapedWord) && !terms[word]) - arr.push({ files: terms[term], score: Scorer.partialTerm }); - }); - Object.keys(titleTerms).forEach((term) => { - if (term.match(escapedWord) && !titleTerms[word]) - arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); - }); + if (!terms.hasOwnProperty(word)) { + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + } + if (!titleTerms.hasOwnProperty(word)) { + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord)) + arr.push({ files: titleTerms[term], score: Scorer.partialTitle }); + }); + } } // no match but word was a required one @@ -488,9 +543,8 @@ const Search = { // create the mapping files.forEach((file) => { - if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) - fileMap.get(file).push(word); - else fileMap.set(file, [word]); + if (!fileMap.has(file)) fileMap.set(file, [word]); + else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word); }); }); @@ -541,8 +595,8 @@ const Search = { * search summary for a given text. keywords is a list * of stemmed words. */ - makeSearchSummary: (htmlText, keywords) => { - const text = Search.htmlToText(htmlText); + makeSearchSummary: (htmlText, keywords, anchor) => { + const text = Search.htmlToText(htmlText, anchor); if (text === "") return null; const textLower = text.toLowerCase(); diff --git a/docs/amaranth/latest/_static/sphinx_highlight.js b/docs/amaranth/latest/_static/sphinx_highlight.js index aae669d7..8a96c69a 100644 --- a/docs/amaranth/latest/_static/sphinx_highlight.js +++ b/docs/amaranth/latest/_static/sphinx_highlight.js @@ -29,14 +29,19 @@ const _highlight = (node, addItems, text, className) => { } span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); parent.insertBefore( span, parent.insertBefore( - document.createTextNode(val.substr(pos + text.length)), + rest, node.nextSibling ) ); node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); if (isInSVG) { const rect = document.createElementNS( @@ -140,5 +145,10 @@ const SphinxHighlight = { }, }; -_ready(SphinxHighlight.highlightSearchWords); -_ready(SphinxHighlight.initEscapeListener); +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/docs/amaranth/latest/changes.html b/docs/amaranth/latest/changes.html index ceda3148..fd40e386 100644 --- a/docs/amaranth/latest/changes.html +++ b/docs/amaranth/latest/changes.html @@ -1,10 +1,10 @@ - + - Changelog — Amaranth language & toolchain 0.6.0.dev68 documentation + Changelog — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
- 0.6.0.dev68 + 0.6.0.dev69
@@ -148,10 +148,10 @@
-

Changelog

+

Changelog

This document describes changes to the public interfaces in the Amaranth language and standard library. It does not include most bug fixes or implementation changes; versions which do not include notable changes are not listed here.

-

Documentation for past releases

+

Documentation for past releases

Documentation for past releases of the Amaranth language and toolchain is available online:

-

Version 0.5.3 (unreleased)

+

Version 0.5.3 (unreleased)

-

Language changes

+

Language changes

  • Added: individual bits of the same signal can now be assigned from different modules or domains.

-

Version 0.5.2

+

Version 0.5.2

-

Standard library changes

+

Standard library changes

-

Version 0.5.1

+

Version 0.5.1

-

Implemented RFCs

+

Implemented RFCs

  • RFC 69: Add a lib.io.PortLike object usable in simulation

-

Standard library changes

+

Standard library changes

  • Added: views of amaranth.lib.data.ArrayLayout can be indexed with negative integers or slices.

  • Added: len() works on views of amaranth.lib.data.ArrayLayout.

  • @@ -267,10 +267,10 @@

    Standard library changes -

    Version 0.5.0

    +

    Version 0.5.0

    The Migen compatibility layer has been removed.

    -

    Migrating from version 0.4

    +

    Migrating from version 0.4

    Apply the following changes to code written against Amaranth 0.4 to migrate it to version 0.5:

    • Update uses of reset= keyword argument to init=.

    • @@ -294,7 +294,7 @@

      Migrating from version 0.4 -

      Implemented RFCs

      +

      Implemented RFCs

      • RFC 17: Remove log2_int

      • RFC 27: Testbench processes for the simulator

      • @@ -318,7 +318,7 @@

        Implemented RFCs -

        Language changes

        +

        Language changes

        • Added: Slice objects have been made const-castable.

        • Added: amaranth.utils.ceil_log2(), amaranth.utils.exact_log2(). (RFC 17)

        • @@ -348,7 +348,7 @@

          Language changes -

          Standard library changes

          +

          Standard library changes

          • Added: amaranth.lib.memory. (RFC 45)

          • Added: amaranth.lib.data.Const class. (RFC 51)

          • @@ -365,7 +365,7 @@

            Standard library changes -

            Toolchain changes

            +

            Toolchain changes

            • Added: Simulator.add_testbench. (RFC 27)

            • Added: async function support in Simulator.add_testbench and Simulator.add_process. (RFC 36)

            • @@ -380,7 +380,7 @@

              Toolchain changes -

              Platform integration changes

              +

              Platform integration changes

              • Added: BuildPlan.execute_local_docker().

              • Added: BuildPlan.extract().

              • @@ -392,7 +392,7 @@

                Platform integration changes -

                Version 0.4.0

                +

                Version 0.4.0

                Support has been added for a new and improved way of defining data structures in amaranth.lib.data and component interfaces in amaranth.lib.wiring, as defined in RFC 1 and RFC 2. Record has been deprecated. In a departure from the usual policy, to give designers additional time to migrate, Record will be removed in Amaranth 0.6 (one release later than normal).

                Support for enumerations has been extended. A shape for enumeration members can be provided for an enumeration class, as defined in RFC 3.

                The language includes several new extension points for integration with Value based data structures defined outside of the core language. In particular, Signal(shape) may now return a Signal object wrapped in another if shape implements the call protocol, as defined in RFC 15.

                @@ -401,7 +401,7 @@

                Version 0.4.0nmigen.* namespace is not provided, # nmigen: annotations are not recognized, and NMIGEN_* envronment variables are not used.

                The Migen compatibility layer remains deprecated (as it had been since Amaranth 0.1), and is now scheduled to be removed in version 0.5.

                -

                Migrating from version 0.3

                +

                Migrating from version 0.3

                Apply the following changes to code written against Amaranth 0.3 to migrate it to version 0.4:

                • Update shell environment to use AMARANTH_* environment variables instead of NMIGEN_* environment variables.

                • @@ -419,7 +419,7 @@

                  Migrating from version 0.3 -

                  Implemented RFCs

                  +

                  Implemented RFCs

                  • RFC 1: Aggregate data structure library

                  • RFC 2: Interface definition library

                  • @@ -444,7 +444,7 @@

                    Implemented RFCs -

                    Language changes

                    +

                    Language changes

                    • Added: ShapeCastable, similar to ValueCastable.

                    • Added: ShapeLike and ValueLike. (RFC 35)

                    • @@ -470,7 +470,7 @@

                      Language changes -

                      Standard library changes

                      +

                      Standard library changes

                      • Added: amaranth.lib.enum. (RFC 3)

                      • Added: amaranth.lib.data. (RFC 1)

                      • @@ -482,7 +482,7 @@

                        Standard library changes -

                        Toolchain changes

                        +

                        Toolchain changes

                        • Changed: text files are written with LF line endings on Windows, like on other platforms.

                        • Added: debug_verilog override in build.TemplatedPlatform.

                        • @@ -496,7 +496,7 @@

                          Toolchain changes -

                          Platform integration changes

                          +

                          Platform integration changes

                          • Added: icepack_opts override in vendor.LatticeICE40Platform.

                          • Added: OSCH as default_clk clock source in vendor.LatticeMachXO2Platform, vendor.LatticeMachXO3LPlatform.

                          • @@ -511,11 +511,11 @@

                            Platform integration changes -

                            Version 0.3

                            +

                            Version 0.3

                            The project has been renamed from nMigen to Amaranth.

                            Features deprecated in version 0.2 have been removed.

                            -

                            Migrating from version 0.2

                            +

                            Migrating from version 0.2

                            Apply the following changes to code written against nMigen 0.2 to migrate it to Amaranth 0.3:

                            diff --git a/docs/amaranth/latest/contrib.html b/docs/amaranth/latest/contrib.html index 87a3f70c..fe517a0c 100644 --- a/docs/amaranth/latest/contrib.html +++ b/docs/amaranth/latest/contrib.html @@ -1,10 +1,10 @@ - + - Contributing — Amaranth language & toolchain 0.6.0.dev68 documentation + Contributing — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -40,7 +40,7 @@
                            - 0.6.0.dev68 + 0.6.0.dev69
                            @@ -109,10 +109,10 @@
                            -

                            Contributing

                            +

                            Contributing

                            The Amaranth project is the collective work of many people collaborating over the years, and it would not be the same without everyone’s unique perspectives and contributions. We’re glad that you are considering joining us! This page will guide you through some of the ways to contribute to the project.

                            -

                            Filing problem reports

                            +

                            Filing problem reports

                            We would like Amaranth to be a best-in-class design tool, and hearing about issues people encounter while using it is crucial for improving it. While we do care a lot about correctness of the results, we care about the experience of using the tool just as much. Amaranth is meant to be a tool that is comfortable to use: with fewer sharp edges (no matter how much technological appeal they might have) and more signs and guardrails.

                            Please report any problems you encounter using Amaranth. To go beyond that: If, while you are using Amaranth, you see an error message that is hard to understand or is misleading, please report it as a bug. Even (especially!) if you think you did something wrong.

                            When filing problem reports, please include the following information:

                            @@ -125,18 +125,18 @@

                            Filing problem reportsThere is no expectation that a person who is filing a problem report should work on fixing it. Submitting an issue is a valuable contribution in its own right.

                            -

                            Fixing problems

                            +

                            Fixing problems

                            We appreciate that many in the open source community tend to see problems they encounter as opportunities to collaborate, and we enjoy seeing an issue being filed together with a pull request. However, unless you’ve contributed a few times before or the fix is truly trivial, please discuss it with one of the maintainers first. It doesn’t take much time and it can sometimes save everyone a lot of unnecessary work and frustration.

                            -

                            Proposing new features

                            +

                            Proposing new features

                            Amaranth is a programming language and a toolchain, which is different from many other kinds of open source projects in that just about every part of it is, unavoidably, tightly coupled to every other one, the result being that seemingly obvious and apparently minor decisions can have dramatic consequences years later.

                            To make sure that new features undergo the scrutiny necessary for commitment to many years of support, and to make sure that everyone in the community who will be impacted by the changes has a chance to make their voice heard, all substantial changes, including feature proposals, must go through a formal Request for Comments process. The process, as well as the accepted proposals, are described here. Typically, substantial changes are accepted after one to several rounds of community review achieve near-unanimous consensus.

                            -

                            Working with the codebase

                            +

                            Working with the codebase

                            -

                            Preparing the environment

                            +

                            Preparing the environment

                            The Amaranth codebase uses the PDM package and dependency manager to structure the development workflow. Please install PDM first and make sure you have downloaded the latest changes to the source files. Once you have done so, run:

                            $ pdm install --dev
                             
                            @@ -145,7 +145,7 @@

                            Preparing the environmentpdm install each time after updating the source tree.

                            -

                            Running the testsuite

                            +

                            Running the testsuite

                            Some of the tests make use of formal methods, and to run the complete testsuite, it is necessary to install the Yosys frontend and the yices2 SMT solver. These are distributed as a part of the OSS CAD Suite. Without the tools being installed, the tests that rely on formal verification will be skipped.

                            To run the testsuite, use:

                            $ pdm run test
                            @@ -153,7 +153,7 @@ 

                            Running the testsuite

                            -

                            Building the documentation

                            +

                            Building the documentation

                            To build the documentation once, use:

                            $ pdm run document
                             
                            @@ -171,7 +171,7 @@

                            Building the documentation -

                            Documentation style guide

                            +

                            Documentation style guide

                            Warning

                            Our documentation style guidelines are evolving, and this section is incomplete.

                            @@ -213,7 +213,7 @@

                            Documentation style guide -

                            Contributing your changes

                            +

                            Contributing your changes

                            Warning

                            Our code style guidelines are evolving, and we do not yet have a formal document listing them.

                            @@ -221,7 +221,7 @@

                            Contributing your changes -

                            Weekly meetings

                            +

                            Weekly meetings

                            Every Monday at 17:00 UTC on our IRC channel #amaranth-lang at libera.chat or Matrix channel #amaranth-lang:matrix.org (the channels are bridged together: the same messages appear on both), Amaranth maintainers meet with users and contributors to discuss newly submitted Requests for Comments and any other issues that warrant broad attention. These public meetings are the primary avenue of decision making.

                            If you want to contribute, have interest in language evolution, or simply want to voice your view on proposed features, feel free to join these meetings; there is no formal attendance. If you are not able to make the time, the meetings are publicly recorded and the summaries are posted in the relevant GitHub thread after the meeting.

                            diff --git a/docs/amaranth/latest/cover.html b/docs/amaranth/latest/cover.html index 01399406..9afa7950 100644 --- a/docs/amaranth/latest/cover.html +++ b/docs/amaranth/latest/cover.html @@ -1,10 +1,10 @@ - + - Amaranth project documentation — Amaranth language & toolchain 0.6.0.dev68 documentation + Amaranth project documentation — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -40,7 +40,7 @@
                            - 0.6.0.dev68 + 0.6.0.dev69
                            @@ -81,7 +81,7 @@
                            -

                            Amaranth project documentation

                            +

                            Amaranth project documentation

                            • Language & toolchain
                            • diff --git a/docs/amaranth/latest/genindex.html b/docs/amaranth/latest/genindex.html index d10fca5b..5c7e9198 100644 --- a/docs/amaranth/latest/genindex.html +++ b/docs/amaranth/latest/genindex.html @@ -1,9 +1,9 @@ - + - Index — Amaranth language & toolchain 0.6.0.dev68 documentation + Index — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -16,9 +16,9 @@ - - - + + + @@ -38,7 +38,7 @@
                              - 0.6.0.dev68 + 0.6.0.dev69
                              diff --git a/docs/amaranth/latest/guide.html b/docs/amaranth/latest/guide.html index a1d209cf..36e34ce2 100644 --- a/docs/amaranth/latest/guide.html +++ b/docs/amaranth/latest/guide.html @@ -1,10 +1,10 @@ - + - Language guide — Amaranth language & toolchain 0.6.0.dev68 documentation + Language guide — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                              - 0.6.0.dev68 + 0.6.0.dev69
                              @@ -178,10 +178,10 @@
                              -

                              Language guide

                              +

                              Language guide

                              This guide introduces the Amaranth language in depth. It assumes familiarity with synchronous digital logic and the Python programming language, but does not require prior experience with any hardware description language. See the tutorial for a step-by-step introduction to the language, and the reference for a detailed description of the Python classes that underlie the language’s syntax.

                              -

                              The prelude

                              +

                              The prelude

                              Because Amaranth is a regular Python library, it needs to be imported before use. The root amaranth module, called the prelude, is carefully curated to export a small amount of the most essential names, useful in nearly every design. In source files dedicated to Amaranth code, it is a good practice to use a glob import for readability:

                              from amaranth import *
                               
                              @@ -193,7 +193,7 @@

                              Language guide -

                              Shapes

                              +

                              Shapes

                              A Shape describes the bit width and signedness of an Amaranth value. It can be constructed directly:

                              >>> Shape(width=5, signed=False)
                               unsigned(5)
                              @@ -209,7 +209,7 @@ 

                              Language guide -

                              Shapes of values

                              +

                              Shapes of values

                              All values have a .shape() method that computes their shape. The width of a value v, v.shape().width, can also be retrieved with len(v).

                              >>> Const(5).shape()
                               unsigned(3)
                              @@ -220,11 +220,11 @@ 

                              Shapes of values -

                              Values

                              +

                              Values

                              The basic building block of the Amaranth language is a value, which is a term for a binary number that is computed or stored anywhere in the design. Each value has a width—the amount of bits used to represent the value—and a signedness—the interpretation of the value by arithmetic operations—collectively called its shape. Signed values always use two’s complement representation.

                              -

                              Constants

                              +

                              Constants

                              The simplest Amaranth value is a constant, representing a fixed number, and introduced using Const(...) or its short alias C(...):

                              >>> ten = Const(10)
                               >>> minus_two = C(-2)
                              @@ -250,11 +250,11 @@ 

                              Shapes of values -

                              Shape casting

                              +

                              Shape casting

                              Shapes can be cast from other objects, which are called shape-like. Casting is a convenient way to specify a shape indirectly, for example, by a range of numbers representable by values with that shape. Shapes are shape-like objects as well.

                              Casting to a shape can be done explicitly with Shape.cast(), but is usually implicit, since shape-like objects are accepted anywhere shapes are.

                              -

                              Shapes from integers

                              +

                              Shapes from integers

                              Casting a shape from an integer i is a shorthand for constructing a shape with unsigned(i):

                              >>> Shape.cast(5)
                               unsigned(5)
                              @@ -264,7 +264,7 @@ 

                              Shapes of values -

                              Shapes from ranges

                              +

                              Shapes from ranges

                              Casting a shape from a range r produces a shape that:

                                @@ -305,7 +305,7 @@

                                Shapes of values -

                                Shapes from enumerations

                                +

                                Shapes from enumerations

                                Casting a shape from an enum.Enum subclass requires all of the enumeration members to have constant-castable values. The shape has a width large enough to represent the value of every member, and is signed only if there is a member with a negative value.

                                Specifying a shape with an enumeration is convenient for finite state machines, multiplexers, complex control signals, and all other values whose width is derived from a few distinct choices they must be able to fit:

                                class Direction(enum.Enum):
                                @@ -336,16 +336,16 @@ 

                                Shapes of values -

                                Custom shapes

                                +

                                Custom shapes

                                Any Python value that implements the ShapeCastable interface can extend the language with a custom shape-like object. For example, the standard library module amaranth.lib.data uses this facility to add support for aggregate data types to the language.

                              -

                              Value casting

                              +

                              Value casting

                              Like shapes, values may be cast from other objects, which are called value-like. Casting to values allows objects that are not provided by Amaranth, such as integers or enumeration members, to be used in Amaranth expressions directly. Custom value-like objects can be defined by implementing the ValueCastable interface. Values are value-like objects as well.

                              Casting to a value can be done explicitly with Value.cast(), but is usually implicit, since value-like objects are accepted anywhere values are.

                              -

                              Values from integers

                              +

                              Values from integers

                              Casting a value from an integer i is equivalent to Const(i):

                              >>> Value.cast(5)
                               (const 3'd5)
                              @@ -357,7 +357,7 @@ 

                              Values from integers

                              -

                              Values from enumeration members

                              +

                              Values from enumeration members

                              Casting a value from an enumeration member m is equivalent to Const(m.value, type(m)):

                              >>> Value.cast(Direction.LEFT)
                               (const 2'd1)
                              @@ -370,7 +370,7 @@ 

                              Values from enumeration members -

                              Constant casting

                              +

                              Constant casting

                              A subset of values are constant-castable. If a value is constant-castable and all of its operands are also constant-castable, it can be converted to a Const, the numeric value of which can then be read by Python code. This provides a way to perform computation on Amaranth values while constructing the design.

                              Constant-castable objects are accepted anywhere a constant integer is accepted. Casting to a constant can also be done explicitly with Const.cast():

                              >>> Const.cast(Cat(C(10, 4), C(1, 2)))
                              @@ -405,10 +405,10 @@ 

                              Values from enumeration members -

                              Signals

                              +

                              Signals

                              A signal is a value representing a (potentially) varying number. Signals can be assigned in a combinational or synchronous domain, in which case they are generated as wires or registers, respectively. Signals always have a well-defined value; they cannot be uninitialized or undefined.

                              -

                              Signal shapes

                              +

                              Signal shapes

                              A signal can be created with an explicitly specified shape (any shape-like object); if omitted, the shape defaults to unsigned(1). Although rarely useful, 0-bit signals are permitted.

                              >>> Signal().shape()
                               unsigned(1)
                              @@ -424,7 +424,7 @@ 

                              Signal shapes -

                              Signal names

                              +

                              Signal names

                              Each signal has a name, which is used in the waveform viewer, diagnostic messages, Verilog output, and so on. In most cases, the name is omitted and inferred from the name of the variable or attribute the signal is placed into:

                              >>> foo = Signal()
                               >>> foo.name
                              @@ -443,7 +443,7 @@ 

                              Signal shapes -

                              Initial signal values

                              +

                              Initial signal values

                              Each signal has an initial value, specified with the init= parameter. If the initial value is not specified explicitly, zero is used by default. An initial value can be specified with an integer or an enumeration member.

                              Signals assigned in a combinational domain assume their initial value when none of the assignments are active. Signals assigned in a synchronous domain assume their initial value after power-on reset and, unless the signal is reset-less, explicit reset. Signals that are used but never assigned are equivalent to constants of their initial value.

                              >>> Signal(4).init
                              @@ -456,7 +456,7 @@ 

                              Signal shapes -

                              Reset-less signals

                              +

                              Reset-less signals

                              Signals assigned in a synchronous domain can be resettable or reset-less, specified with the reset_less= parameter. If the parameter is not specified, signals are resettable by default. Resettable signals assume their initial value on explicit reset, which can be asserted via the clock domain or by modifying control flow with ResetInserter. Reset-less signals are not affected by explicit reset.

                              Signals assigned in a combinational domain are not affected by the reset_less parameter.

                              >>> Signal().reset_less
                              @@ -468,10 +468,10 @@ 

                              Signal shapes -

                              Operators

                              +

                              Operators

                              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?

                              +

                              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:

                              -

                              Width extension

                              +

                              Width extension

                              Many of the operations described below (for example, addition, equality, bitwise OR, and part select) extend the width of one or both operands to match the width of the expression. When this happens, unsigned values are always zero-extended and signed values are always sign-extended regardless of the operation or signedness of the result.

                              -

                              Arithmetic operators

                              +

                              Arithmetic operators

                              Most arithmetic operations on integers provided by Python can be used on Amaranth values, too.

                              Although Python integers have unlimited precision and Amaranth values are represented with a finite amount of bits, arithmetics on Amaranth values never overflows because the width of the arithmetic expression is always sufficient to represent all possible results.

                              >>> a = Signal(8)
                              @@ -548,7 +548,7 @@ 

                              Signal shapes -

                              Comparison operators

                              +

                              Comparison operators

                              All comparison operations on integers provided by Python can be used on Amaranth values. However, due to a limitation of Python, chained comparisons (e.g. a < b < c) cannot be used.

                              Similar to arithmetic operations, if any operand of a comparison expression is signed, a signed comparison is performed. The result of a comparison is a 1-bit unsigned value.

                              The following table lists the comparison operations provided by Amaranth:

                              @@ -581,7 +581,7 @@

                              Signal shapes -

                              Bitwise, shift, and rotate operators

                              +

                              Bitwise, shift, and rotate operators

                              All bitwise and shift operations on integers provided by Python can be used on Amaranth values as well.

                              Similar to arithmetic operations, if any operand of a bitwise expression is signed, the expression itself is signed as well. A shift expression is signed if the shifted value is signed. A rotate expression is always unsigned.

                              Rotate operations with variable rotate amounts cannot be efficiently synthesized for non-power-of-2 widths of the rotated value. Because of that, the rotate operations are only provided for constant rotate amounts, specified as Python ints.

                              @@ -663,7 +663,7 @@

                              Signal shapes -

                              Reduction operators

                              +

                              Reduction operators

                              Bitwise reduction operations on integers are not provided by Python, but are very useful for hardware. They are similar to bitwise operations applied “sideways”; for example, if bitwise AND is a binary operator that applies AND to each pair of bits between its two operands, then reduction AND is an unary operator that applies AND to all of the bits in its sole operand.

                              The result of a reduction is a 1-bit unsigned value.

                              The following table lists the reduction operations provided by Amaranth:

                              @@ -711,7 +711,7 @@

                              Signal shapes -

                              Logical operators

                              +

                              Logical operators

                              Unlike the arithmetic or bitwise operators, it is not possible to change the behavior of the Python logical operators not, and, and or. Due to that, logical expressions in Amaranth are written using bitwise operations on boolean (1-bit unsigned) values, with explicit boolean conversions added where necessary.

                              The following table lists the Python logical expressions and their Amaranth equivalents:

                              @@ -786,7 +786,7 @@

                              Signal shapes -

                              Bit sequence operators

                              +

                              Bit sequence operators

                              Apart from acting as numbers, Amaranth values can also be treated as bit sequences, supporting slicing, concatenation, replication, and other sequence operations. Since some of the operators Python defines for sequences clash with the operators it defines for numbers, Amaranth gives these operators a different name. Except for the names, Amaranth values follow Python sequence semantics, with the least significant bit at index 0.

                              Because every Amaranth value has a single fixed width, bit slicing and replication operations require the subscripts and count to be constant, specified as Python ints. It is often useful to slice a value with a constant width and variable offset, but this cannot be expressed with the Python slice notation. To solve this problem, Amaranth provides additional part select operations with the necessary semantics.

                              The result of any bit sequence operation is an unsigned value.

                              @@ -876,7 +876,7 @@

                              Signal shapes -

                              Match operator

                              +

                              Match operator

                              The val.matches(*patterns) operator examines a value against a set of patterns. It evaluates to Const(1) if the value matches any of the patterns, and to Const(0) otherwise. What it means for a value to match a pattern depends on the type of the pattern.

                              If the pattern is a str, it is treated as a bit mask with “don’t care” bits. After removing whitespace, each character of the pattern is compared to the corresponding bit of the value, where the leftmost character of the pattern (with the lowest index) corresponds to the most significant bit of the value. If the pattern character is '0' or '1', the comparison succeeds if the bit equals 0 or 1 correspondingly. If the pattern character is '-', the comparison always succeeds. Aside from spaces and tabs, which are ignored, no other characters are accepted.

                              Otherwise, the pattern is cast to a constant and compared to val using the equality operator.

                              @@ -884,17 +884,17 @@

                              Signal shapesCase control flow block accepts the same patterns, with the same meaning, as the match operator.

                              -

                              Conversion operators

                              +

                              Conversion operators

                              The .as_signed() and .as_unsigned() conversion operators reinterpret the bits of a value with the requested signedness. This is useful when the same value is sometimes treated as signed and sometimes as unsigned, or when a signed value is constructed using slices or concatenations.

                              For example, (pc + imm[:7].as_signed()).as_unsigned() sign-extends the 7 least significant bits of imm to the width of pc, performs the addition, and produces an unsigned result.

                              -

                              Choice operator

                              +

                              Choice operator

                              The Mux(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

                              +

                              Arrays

                              An array is a mutable collection that can be indexed 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.

                              • @@ -924,11 +924,11 @@

                                Signal shapes -

                                Data structures

                                +

                                Data structures

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

                              -

                              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 control domains, provide control flow syntax, manage clock domains, and aggregate submodules.

                              Every Amaranth design starts with a fresh module:

                              >>> m = Module()
                              @@ -936,13 +936,13 @@ 

                              Signal shapes -

                              Control domains

                              +

                              Control domains

                              A control domain is a named group of signals that change their value in identical conditions.

                              All designs have a single predefined combinational domain, containing all signals that change immediately when any value used to compute them changes. The name comb is reserved for the combinational domain, and refers to the same domain in all modules.

                              A design can also have any amount of user-defined synchronous domains, also called clock domains, containing signals that change when a specific edge occurs on the domain’s clock signal or, for domains with asynchronous reset, on the domain’s reset signal. Most modules only use a single synchronous domain, conventionally called sync, but the name sync does not have to be used, and lacks any special meaning beyond being the default.

                              The behavior of assignments differs for signals in combinational and synchronous domains. Collectively, signals in synchronous domains contain the state of a design, whereas signals in the combinational domain cannot form feedback loops or hold state.

                              -

                              Assigning to signals

                              +

                              Assigning to signals

                              Assignments are used to change the values of signals. An assignment statement can be introduced with the .eq(...) syntax:

                              >>> s = Signal()
                               >>> s.eq(1)
                              @@ -952,7 +952,7 @@ 

                              Signal shapeshow Amaranth operators work, an Amaranth assignment is an ordinary Python object used to describe a part of a circuit. An assignment does not have any effect on the signal it changes until it is added to a control domain in a module. Once added, it introduces logic into the circuit generated from that module.

                              -

                              Assignable values

                              +

                              Assignable values

                              An assignment can affect a value that is more complex than just a 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)
                              @@ -966,7 +966,7 @@ 

                              Signal shapes -

                              Assignment domains

                              +

                              Assignment domains

                              The m.d.<domain> += ... syntax is used to add assignments to a specific control domain in a module. It can add just a single assignment, or an entire sequence of them:

                              a = Signal()
                               b = Signal()
                              @@ -1003,7 +1003,7 @@ 

                              Signal shapesassertions and debug prints can be added using the same syntax.

                              -

                              Assignment order

                              +

                              Assignment order

                              Unlike with two different domains, adding multiple assignments to the same signal to the same domain is well-defined.

                              Assignments to different signal bits apply independently. For example, the following two snippets are equivalent:

                              a = Signal(8)
                              @@ -1034,7 +1034,7 @@ 

                              Signal shapes -

                              Control flow

                              +

                              Control flow

                              Although it is possible to write any decision tree as a combination of assignments and choice expressions, Amaranth provides control flow syntax tailored for this task: If/Elif/Else, Switch/Case, and FSM/State. The control flow syntax uses with blocks (it is implemented using context managers), for example:

                              timer = Signal(8)
                               with m.If(timer == 0):
                              @@ -1063,7 +1063,7 @@ 

                              Signal shapes -

                              Active and inactive assignments

                              +

                              Active and inactive assignments

                              An assignment added inside an Amaranth control structure, i.e. with m.<...>: block, is active if the condition of the control structure is satisfied, and inactive otherwise. For any given set of conditions, the final value of every signal assigned in a module is the same as if the inactive assignments were removed and the active assignments were performed unconditionally, taking into account the assignment order.

                              For example, there are two possible cases in the circuit generated from the following code:

                              timer = Signal(8)
                              @@ -1092,7 +1092,7 @@ 

                              Signal shapes -

                              If/Elif/Else control blocks

                              +

                              If/Elif/Else control blocks

                              Conditional control flow is described using a with m.If(cond1): block, which may be followed by one or more with m.Elif(cond2): blocks, and optionally a final with m.Else(): block. This structure parallels Python’s own if/elif/else control flow syntax. For example:

                              -

                              Switch/Case control blocks

                              +

                              Switch/Case control blocks

                              Case comparison, where a single value is examined against several different patterns, is described using a with m.Switch(value): block. This block can contain any amount of with m.Case(*patterns) and with m.Default(): blocks. This structure parallels Python’s own match/case control flow syntax. For example:

                              value = Signal(4)
                               
                              @@ -1141,7 +1141,7 @@ 

                              Signal shapes -

                              FSM/State control blocks

                              +

                              FSM/State control blocks

                              Simple finite state machines are described using a with m.FSM(): block. This block can contain one or more with m.State("Name") blocks. In addition to these blocks, the m.next = "Name" syntax chooses which state the FSM enters on the next clock cycle. For example, this FSM performs a bus read transaction once after reset:

                              bus_addr = Signal(16)
                               r_data   = Signal(8)
                              @@ -1199,7 +1199,7 @@ 

                              Signal shapes -

                              Combinational evaluation

                              +

                              Combinational evaluation

                              Signals in the combinational control domain change whenever any value used to compute them changes. The final value of a combinational signal is equal to its initial value updated by the active assignments in the assignment order. Combinational signals cannot hold any state.

                              Consider the following code:

                              a = Signal(8, init=1)
                              @@ -1215,7 +1215,7 @@ 

                              Signal shapes -

                              Synchronous evaluation

                              +

                              Synchronous evaluation

                              Signals in synchronous control domains change whenever the active edge (a 0-to-1 or 1-to-0 transition, configured when creating the domain) occurs on the clock of the synchronous domain. In addition, the signals in clock domains with an asynchronous reset change when such a reset is asserted. The final value of a synchronous signal is equal to its initial value if the reset (of any type) is asserted, or to its current value updated by the active assignments in the assignment order otherwise. Synchronous signals always hold state.

                              Consider the following code:

                              -

                              Assertions

                              +

                              Assertions

                              Some properties are so important that if they are violated, the computations described by the design become meaningless. These properties should be guarded with an Assert statement that immediately terminates the simulation if its condition is false. Assertions should generally be added to a synchronous domain, and may have an optional message printed when it is violated:

                              ip = Signal(16)
                               m.d.sync += Assert(ip < 128, "instruction pointer past the end of program code!")
                              @@ -1256,7 +1256,7 @@ 

                              Signal shapes -

                              Debug printing

                              +

                              Debug printing

                              The value of any expression, or of several of them, can be printed to the terminal during simulation using the Print statement. When added to the combinational domain, the value of an expression is printed whenever it changes:

                              state = Signal()
                               m.d.comb += Print(state)
                              @@ -1284,7 +1284,7 @@ 

                              Signal shapes -

                              Clock domains

                              +

                              Clock domains

                              A new synchronous control domain, which is more often called a clock domain, can be defined in a design by creating a ClockDomain object and adding it to the m.domains collection:

                              m.domains.video = cd_video = ClockDomain()
                               
                              @@ -1322,7 +1322,7 @@

                              Signal shapes -

                              Late binding of clock and reset signals

                              +

                              Late binding of clock and reset signals

                              Clock domains are late bound, which means that their signals and properties can be referred to using the domain’s name before the ClockDomain object with that name is created and added to the design. This happens whenever an assignment is added to a domain. In some cases, it is necessary to refer to the domain’s clock or reset signal using only the domain’s name. The ClockSignal and ResetSignal values make this possible:

                              m.d.comb += [
                                   ClockSignal().eq(bus_clk),
                              @@ -1347,7 +1347,7 @@ 

                              Signal shapes -

                              Elaboration

                              +

                              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:

                              class Counter(Elaboratable):
                              @@ -1372,7 +1372,7 @@ 

                              Signal shapesamaranth.lib.wiring.Component rather than plain Elaboratable. See the introduction to interfaces and components for details.

                              -

                              Submodules

                              +

                              Submodules

                              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()
                               
                              @@ -1394,7 +1394,7 @@

                              Signal shapesinstance.

                              -

                              Modifying control flow

                              +

                              Modifying control flow

                              Control flow within an elaboratable can be altered without introducing a new clock domain by using control flow modifiers that affect synchronous evaluation of signals in a specified domain (or domains). They never affect combinational evaluation. There are two control flow modifiers:

                              • ResetInserter introduces a synchronous reset input (or inputs), updating all of the signals in the specified domains to their initial value whenever the active edge occurs on the clock of the domain if the synchronous reset input is asserted.

                              • @@ -1439,7 +1439,7 @@

                                Signal shapes -

                                Renaming domains

                                +

                                Renaming domains

                                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:

                                @@ -1476,15 +1476,15 @@

                                Signal shapes -

                                Memories

                                +

                                Memories

                                Amaranth provides support for memories in the standard library module amaranth.lib.memory.

                              -

                              I/O values

                              +

                              I/O values

                              To interoperate with external circuitry, Amaranth provides core I/O values, which represent bundles of wires carrying uninterpreted signals. Unlike regular values, which represent binary numbers and can be assigned to create a unidirectional connection or used in computations, core I/O values represent electrical signals that may be digital or analog and have no shape, cannot be assigned, used in computations, or simulated.

                              Core I/O values are only used to define connections between non-Amaranth building blocks that traverse an Amaranth design, including instances and I/O buffer instances.

                              -

                              I/O ports

                              +

                              I/O ports

                              A core I/O port is a core I/O value representing a connection to a port of the topmost module in the design hierarchy. It can be created with an explicitly specified width.

                              from amaranth.hdl import IOPort
                               
                              @@ -1503,7 +1503,7 @@

                              Signal shapes -

                              I/O operators

                              +

                              I/O operators

                              Core I/O values support only a limited set of sequence operators, all of which return another core I/O value. The following table lists the operators provided by Amaranth for core I/O values:

                              @@ -1552,7 +1552,7 @@

                              Signal shapes -

                              Instances

                              +

                              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.

                              • @@ -1627,7 +1627,7 @@

                                Signal shapes -

                                I/O buffer instances

                                +

                                I/O buffer instances

                                Note

                                I/O buffer instances are a low-level primitive which is documented to ensure that the standard library does not rely on private interfaces in the core language. Most designers should use the amaranth.lib.io module instead.

                                diff --git a/docs/amaranth/latest/index.html b/docs/amaranth/latest/index.html index d60388bb..8936f40a 100644 --- a/docs/amaranth/latest/index.html +++ b/docs/amaranth/latest/index.html @@ -1,10 +1,10 @@ - + - Language & toolchain — Amaranth language & toolchain 0.6.0.dev68 documentation + Language & toolchain — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                - 0.6.0.dev68 + 0.6.0.dev69
                                @@ -95,7 +95,7 @@
                                -

                                Language & toolchain

                                +

                                Language & toolchain

                                Warning

                                This manual is a work in progress and is seriously incomplete!

                                diff --git a/docs/amaranth/latest/install.html b/docs/amaranth/latest/install.html index 37cdaaa6..89e5b136 100644 --- a/docs/amaranth/latest/install.html +++ b/docs/amaranth/latest/install.html @@ -1,10 +1,10 @@ - + - Installation — Amaranth language & toolchain 0.6.0.dev68 documentation + Installation — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                - 0.6.0.dev68 + 0.6.0.dev69
                                @@ -108,20 +108,20 @@
                                -

                                Installation

                                +

                                Installation

                                -

                                In-browser playground

                                +

                                In-browser playground

                                You can try Amaranth out without installing anything by visiting the Amaranth Playground. The playground webpage contains a fully functional Python interpreter and an Amaranth toolchain that can simulate a design, display waveforms, and generate Verilog code. It works on all modern browsers that support WebAssembly, including Firefox, Chrome, and Edge.

                                -

                                System requirements

                                -

                                Amaranth HDL requires Python 3.8; it works on CPython 3.8 (or newer), and works faster on PyPy3.8 7.3.7 (or newer). Installation requires pip 23.0 (or newer).

                                +

                                System requirements

                                +

                                Amaranth HDL requires Python 3.9; it works on CPython 3.9 (or newer), and works faster on PyPy3.9 7.3.7 (or newer). Installation requires pip 23.0 (or newer).

                                For most workflows, Amaranth requires Yosys 0.40 (or newer). A compatible version of Yosys is distributed via PyPI for most popular platforms, so it is usually not necessary to install Yosys separately.

                                Simulating Amaranth code requires no additional software. However, a waveform viewer like Surfer or GTKWave is invaluable for debugging. As an alternative, the Amaranth Playground can be used to display waveforms for simple designs.

                                Synthesizing, placing and routing an Amaranth design for an FPGA requires the FPGA family specific toolchain. The open source iCE40, ECP5, MachXO2/3, Nexus, and Gowin toolchains are distributed via PyPI for most popular platforms by the YoWASP project.

                                -

                                Installing prerequisites

                                +

                                Installing prerequisites

                                Windows

                                @@ -171,10 +171,10 @@

                                Installation -

                                Installing Amaranth

                                +

                                Installing Amaranth

                                The latest release of Amaranth should work well for most applications. A development snapshot—any commit from the main branch of Amaranth—should be similarly reliable, but is likely to include experimental API changes that will be in flux until the next release. With that in mind, development snapshots can be used to try out new functionality or to avoid bugs fixed since the last release.

                                -

                                Latest release

                                +

                                Latest release

                                Windows

                                @@ -204,7 +204,7 @@

                                Installation -

                                Development snapshot

                                +

                                Development snapshot

                                Windows

                                @@ -234,7 +234,7 @@

                                Installation -

                                Editable development snapshot

                                +

                                Editable development snapshot

                                Windows

                                @@ -289,7 +289,7 @@

                                Installation -

                                Installing board definitions

                                +

                                Installing board definitions

                                Todo

                                Explain how to install https://github.com/amaranth-lang/amaranth-boards.

                                diff --git a/docs/amaranth/latest/install.rst b/docs/amaranth/latest/install.rst index 8be01f9c..42fa667a 100644 --- a/docs/amaranth/latest/install.rst +++ b/docs/amaranth/latest/install.rst @@ -23,7 +23,7 @@ System requirements .. |yosys-version| replace:: 0.40 (or newer) -Amaranth HDL requires Python 3.8; it works on CPython_ 3.8 (or newer), and works faster on PyPy3.8_ 7.3.7 (or newer). Installation requires pip_ 23.0 (or newer). +Amaranth HDL requires Python 3.9; it works on CPython_ 3.9 (or newer), and works faster on PyPy3.9_ 7.3.7 (or newer). Installation requires pip_ 23.0 (or newer). For most workflows, Amaranth requires Yosys_ |yosys-version|. A `compatible version of Yosys `_ is distributed via PyPI_ for most popular platforms, so it is usually not necessary to install Yosys separately. @@ -34,7 +34,7 @@ Synthesizing, placing and routing an Amaranth design for an FPGA requires the FP .. TODO: Link to FPGA family docs here .. _CPython: https://www.python.org/ -.. _PyPy3.8: https://www.pypy.org/ +.. _PyPy3.9: https://www.pypy.org/ .. _pip: https://pip.pypa.io/en/stable/ .. _Yosys: https://yosyshq.net/yosys/ .. _amaranth-yosys: https://pypi.org/project/amaranth-yosys/ diff --git a/docs/amaranth/latest/intro.html b/docs/amaranth/latest/intro.html index 5d41e03c..f473f409 100644 --- a/docs/amaranth/latest/intro.html +++ b/docs/amaranth/latest/intro.html @@ -1,10 +1,10 @@ - + - Introduction — Amaranth language & toolchain 0.6.0.dev68 documentation + Introduction — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                - 0.6.0.dev68 + 0.6.0.dev69
                                @@ -106,17 +106,17 @@
                                -

                                Introduction

                                +

                                Introduction

                                The Amaranth project provides an open-source toolchain for developing hardware based on synchronous digital logic using the Python programming language. It aims to be easy to learn and use, reduce or eliminate common coding mistakes, and simplify the design of complex hardware with reusable components.

                                The Amaranth toolchain consists of the Amaranth language, the standard library, the simulator, and the build system, covering all steps of a typical FPGA development workflow. At the same time, it does not restrict the designer’s choice of tools: existing industry-standard (System)Verilog or VHDL code can be integrated into an Amaranth-based design flow, or, conversely, Amaranth code can be integrated into an existing Verilog-based design flow.

                                -

                                The Amaranth language

                                +

                                The Amaranth language

                                The Amaranth hardware description language is a Python library for register transfer level modeling of synchronous logic. Ordinary Python code is used to construct a netlist of a digital circuit, which can be simulated, directly synthesized via Yosys, or converted to human-readable Verilog code for use with industry-standard toolchains.

                                By relying on the flexibility, rich functionality and widespread adoption of the Python language, the Amaranth language is focused on a single task: modeling digital logic well. It has first-class support for building blocks like clock domains and finite state machines, and uses simple rules for arithmetic operations that closely match the Python semantics. Python classes, functions, loops and conditionals can be used to build organized and flexible designs; Python libraries can be seamlessly used with Amaranth during design or verification; and Python development tools can process Amaranth code.

                                A core design principle of the Amaranth language is to be not only easy to use, but also hard to accidentally misuse. Some HDLs provide functionality that has unexpected and undesirable behavior in synthesis, often with expensive consequences, and require a significant effort in learning a “safe” coding style and adopting third-party linting tools. Amaranth lacks non-synthesizable constructs and avoids error-prone inference in favor of explicit instantiation. It has many diagnostics (and regularly adds new ones) highlighting potential design issues. Most importantly, all usability issues are considered reportable bugs.

                                -

                                The Amaranth standard library

                                +

                                The Amaranth standard library

                                The Amaranth language comes with a standard library—a collection of essential digital design components and interfaces. It includes clock domain crossing primitives, synchronous and asynchronous FIFOs, a flexible I/O buffer interface, and more. By providing reliable building blocks out of the box, Amaranth allows the designer to focus on their application and avoids subtle differences in behavior between different designs.

                                Clock domain crossing often requires special treatment, such as using vendor-defined attributes or instantiating device-specific primitives. The CDC primitives in the Amaranth standard library can be overridden by the platform integration, and every platform integration included with Amaranth follows the vendor recommendations for CDC.

                                High-speed designs usually require the use of registered (and sometimes, geared) I/O buffers. The Amaranth standard library provides a common interface to be used between I/O buffers and peripheral implementations. The Amaranth build system, if used, can instantiate I/O buffers for every platform integration included with Amaranth.

                                @@ -124,22 +124,22 @@

                                Introduction -

                                The Amaranth simulator

                                +

                                The Amaranth simulator

                                The Amaranth project includes an advanced simulator for Amaranth code implemented in Python with no system dependencies; in this simulator, test benches are written as Python generator functions. Of course, it is always possible to convert an Amaranth design to Verilog for use with well-known tool like Icarus Verilog or Verilator.

                                The Amaranth simulator is event-driven and can simulate designs with multiple clocks or asynchronous resets. Although it is slower than Icarus Verilog, it compiles the netlist to Python code ahead of time, achieving remarkably high performance for a pure Python implementation—especially when running on PyPy.

                                Although Amaranth does not support native code simulation or co-simulation at the moment, such support will be added in near future.

                                -

                                The Amaranth build system

                                +

                                The Amaranth build system

                                To achieve an end-to-end FPGA development workflow, the Amaranth project integrates with all major FPGA toolchains and provides definitions for many common development boards.

                                -

                                FPGA toolchain integration

                                +

                                FPGA toolchain integration

                                Each FPGA family requires the use of synthesis and place & route tools specific for that device family. The Amaranth build system directly integrates with every major open-source and commercial FPGA toolchain, and can be easily extended to cover others.

                                Through this integration, Amaranth can specialize the CDC primitives and I/O buffers for a particular device and toolchain; generate I/O and clock constraints from board definition files; synchronize the power-on reset in single-clock designs; include (System)Verilog and VHDL files in the design (if supported by the toolchain); and finally, generate a script running synthesis, placement, routing, and timing analysis. The generated code can be customized to insert additional options, commands, constraints, and so on.

                                The Amaranth build system produces self-contained, portable build trees that require only the toolchain to be present in the environment. This makes builds easier to reproduce, or to run on a remote machine. The generated build scripts are always provided for both *nix and Windows.

                                -

                                Development board definitions

                                +

                                Development board definitions

                                Getting started with a new FPGA development board often requires going through a laborous and error-prone process of deriving toolchain configuration and constraint files from the supplied documentation. The Amaranth project includes a community-maintained repository of definitions for many open-source and commercial FPGA development boards.

                                These board definitions contain everything that is necessary to start using the board: FPGA family and model, clocks and resets, descriptions of on-board peripherals (including pin direction and attributes such as I/O standard), connector pinouts, and for boards with a built-in debug probe, the steps required to program the board. It takes a single Python invocation to generate, build, and download a test design that shows whether the board, toolchain, and programmer are working correctly.

                                Amaranth establishes a pin naming convention for many common peripherals (such as 7-segment displays, SPI flashes and SDRAM memories), enabling the reuse of unmodified interface code with many different boards. Further, the polarity of all control signals is unified to be active high, eliminating accidental polarity inversions and making simulation traces easier to follow; active low signals are inverted during I/O buffer instantiation.

                                diff --git a/docs/amaranth/latest/objects.inv b/docs/amaranth/latest/objects.inv index e8adca6bcdf864c0f2f66ddb1f6d75b9862be86d..8601bcefbd0b88ad89149043b01cf9dc814c1027 100644 GIT binary patch delta 12 TcmX@3enx#lG^6Flm;zw{A&Uf@ delta 12 TcmX@3enx#lG^54Fm;zw{A%+B- diff --git a/docs/amaranth/latest/platform.html b/docs/amaranth/latest/platform.html index 3c34b4b8..8ba02991 100644 --- a/docs/amaranth/latest/platform.html +++ b/docs/amaranth/latest/platform.html @@ -1,10 +1,10 @@ - + - Platform integration — Amaranth language & toolchain 0.6.0.dev68 documentation + Platform integration — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                - 0.6.0.dev68 + 0.6.0.dev69
                                @@ -104,7 +104,7 @@
                                -

                                Platform integration

                                +

                                Platform integration

                                Todo

                                Write this section.

                                diff --git a/docs/amaranth/latest/platform/altera.html b/docs/amaranth/latest/platform/altera.html index a476afec..bab74ed5 100644 --- a/docs/amaranth/latest/platform/altera.html +++ b/docs/amaranth/latest/platform/altera.html @@ -1,10 +1,10 @@ - + - Altera — Amaranth language & toolchain 0.6.0.dev68 documentation + Altera — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                - 0.6.0.dev68 + 0.6.0.dev69
                                @@ -108,12 +108,12 @@
                                -

                                Altera

                                +

                                Altera

                                The AlteraPlatform class provides a base platform to support Altera toolchains.

                                The Quartus and Mistral toolchains are supported.

                                -class amaranth.vendor.AlteraPlatform(*, toolchain='Quartus')
                                +class amaranth.vendor.AlteraPlatform(*, toolchain='Quartus')

                                Quartus toolchain

                                Required tools:
                                  diff --git a/docs/amaranth/latest/platform/gowin.html b/docs/amaranth/latest/platform/gowin.html index 6b4f0be4..74aee4d3 100644 --- a/docs/amaranth/latest/platform/gowin.html +++ b/docs/amaranth/latest/platform/gowin.html @@ -1,10 +1,10 @@ - + - Gowin — Amaranth language & toolchain 0.6.0.dev68 documentation + Gowin — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                  - 0.6.0.dev68 + 0.6.0.dev69
                                  @@ -108,12 +108,12 @@
                                  -

                                  Gowin

                                  +

                                  Gowin

                                  The GowinPlatform class provides a base platform to support Gowin toolchains.

                                  The Apicula and Gowin toolchains are supported.

                                  -class amaranth.vendor.GowinPlatform(*, toolchain='Apicula')
                                  +class amaranth.vendor.GowinPlatform(*, toolchain='Apicula')

                                  Apicula toolchain

                                  Required tools:
                                    diff --git a/docs/amaranth/latest/platform/lattice.html b/docs/amaranth/latest/platform/lattice.html index 1f213199..c3baedce 100644 --- a/docs/amaranth/latest/platform/lattice.html +++ b/docs/amaranth/latest/platform/lattice.html @@ -1,10 +1,10 @@ - + - Lattice — Amaranth language & toolchain 0.6.0.dev68 documentation + Lattice — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                    - 0.6.0.dev68 + 0.6.0.dev69
                                    @@ -108,12 +108,12 @@
                                    -

                                    Lattice

                                    +

                                    Lattice

                                    The LatticePlatform class provides a base platform to support Lattice toolchains (not including iCE40 devices, which are supported by SiliconBluePlatform). Currently supported devices include ECP5, MachXO2, MachXO3L, and Nexus.

                                    The Trellis and Diamond toolchains are supported.

                                    -class amaranth.vendor.LatticePlatform(*, toolchain=None)
                                    +class amaranth.vendor.LatticePlatform(*, toolchain=None)

                                    Trellis toolchain (ECP5, MachXO2, MachXO3)

                                    Required tools:
                                      diff --git a/docs/amaranth/latest/platform/quicklogic.html b/docs/amaranth/latest/platform/quicklogic.html index 79e9f15c..856e87f5 100644 --- a/docs/amaranth/latest/platform/quicklogic.html +++ b/docs/amaranth/latest/platform/quicklogic.html @@ -1,10 +1,10 @@ - + - Quicklogic — Amaranth language & toolchain 0.6.0.dev68 documentation + Quicklogic — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                      - 0.6.0.dev68 + 0.6.0.dev69
                                      @@ -108,12 +108,12 @@
                                      -

                                      Quicklogic

                                      +

                                      Quicklogic

                                      The QuicklogicPlatform class provides a base platform to support Quicklogic toolchains.

                                      The Symbiflow toolchain is supported.

                                      -class amaranth.vendor.QuicklogicPlatform
                                      +class amaranth.vendor.QuicklogicPlatform

                                      Symbiflow toolchain

                                      Required tools:
                                        diff --git a/docs/amaranth/latest/platform/siliconblue.html b/docs/amaranth/latest/platform/siliconblue.html index 097b2424..4107e5bf 100644 --- a/docs/amaranth/latest/platform/siliconblue.html +++ b/docs/amaranth/latest/platform/siliconblue.html @@ -1,10 +1,10 @@ - + - SiliconBlue — Amaranth language & toolchain 0.6.0.dev68 documentation + SiliconBlue — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                        - 0.6.0.dev68 + 0.6.0.dev69
                                        @@ -108,12 +108,12 @@
                                        -

                                        SiliconBlue

                                        +

                                        SiliconBlue

                                        The SiliconBluePlatform class provides a base platform to support Lattice (earlier SiliconBlue) iCE40 devices.

                                        The IceStorm and iCECube2 toolchains are supported.

                                        -class amaranth.vendor.SiliconBluePlatform(*, toolchain='IceStorm')
                                        +class amaranth.vendor.SiliconBluePlatform(*, toolchain='IceStorm')

                                        IceStorm toolchain

                                        Required tools:
                                          diff --git a/docs/amaranth/latest/platform/xilinx.html b/docs/amaranth/latest/platform/xilinx.html index f712e1a7..0ffd0312 100644 --- a/docs/amaranth/latest/platform/xilinx.html +++ b/docs/amaranth/latest/platform/xilinx.html @@ -1,10 +1,10 @@ - + - Xilinx — Amaranth language & toolchain 0.6.0.dev68 documentation + Xilinx — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                          - 0.6.0.dev68 + 0.6.0.dev69
                                          @@ -108,12 +108,12 @@
                                          -

                                          Xilinx

                                          +

                                          Xilinx

                                          The XilinxPlatform class provides a base platform to support Xilinx toolchains.

                                          The ISE, Vivado, and Symbiflow toolchains are supported.

                                          -class amaranth.vendor.XilinxPlatform(*, toolchain=None)
                                          +class amaranth.vendor.XilinxPlatform(*, toolchain=None)

                                          Vivado toolchain

                                          Required tools:
                                            diff --git a/docs/amaranth/latest/py-modindex.html b/docs/amaranth/latest/py-modindex.html index 7a5d5bd6..57f95785 100644 --- a/docs/amaranth/latest/py-modindex.html +++ b/docs/amaranth/latest/py-modindex.html @@ -1,9 +1,9 @@ - + - Python Module Index — Amaranth language & toolchain 0.6.0.dev68 documentation + Python Module Index — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -16,9 +16,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                            - 0.6.0.dev68 + 0.6.0.dev69
                                            diff --git a/docs/amaranth/latest/reference.html b/docs/amaranth/latest/reference.html index 4f6c715c..9aabfd0d 100644 --- a/docs/amaranth/latest/reference.html +++ b/docs/amaranth/latest/reference.html @@ -1,10 +1,10 @@ - + - Language reference — Amaranth language & toolchain 0.6.0.dev68 documentation + Language reference — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                            - 0.6.0.dev68 + 0.6.0.dev69
                                            @@ -115,7 +115,7 @@
                                            -

                                            Language reference

                                            +

                                            Language reference

                                            Warning

                                            This reference is a work in progress and is seriously incomplete!

                                            @@ -123,12 +123,12 @@

                                            This reference describes the Python classes that underlie the Amaranth language’s syntax. It assumes familiarity with the language guide.

                                            -

                                            Backwards compatibility

                                            +

                                            Backwards compatibility

                                            As part of the Amaranth backwards compatibility guarantee, any behaviors described in this document will not change from a version to another without at least one version including a warning about the impending change. Any nontrivial change to these behaviors must also go through the public review as a part of the Amaranth Request for Comments process.

                                            Conversely, any behavior not documented here is subject to change at any time with or without notice, and any names under the amaranth.hdl module that are not explicitly included in this document, even if they do not begin with an underscore, are internal to the implementation of the language.

                                            -

                                            Importing syntax

                                            +

                                            Importing syntax

                                            There are two ways to import the Amaranth syntax into a Python file: by importing the prelude or by importing individual names from the amaranth.hdl module. Since the prelude is kept small and rarely extended to avoid breaking downstream code that uses a glob import, there are some names that are only exported from the amaranth.hdl module. The following three snippets are equivalent:

                                            from amaranth import *
                                             
                                            @@ -174,7 +174,7 @@
                                             
                                          -

                                          Source locations

                                          +

                                          Source locations

                                          Many functions and methods in Amaranth take the src_loc_at=0 keyword argument. These language constructs may inspect the call stack to determine the file and line of its call site, which will be used to annotate generated code when a netlist is generated or to improve diagnostic messages.

                                          Some call sites are not relevant for an Amaranth designer; e.g. when an Amaranth language construct is called from a user-defined utility function, the source location of the call site within this utility function is usually not interesting to the designer. In these cases, one or more levels of function calls can be removed from consideration using the src_loc_at argument as follows (using Shape.cast() to demonstrate the concept):

                                          def my_shape_cast(obj, *, src_loc_at=0):
                                          @@ -185,11 +185,11 @@
                                           

                                          The number 1 corresponds to the number of call stack frames that should be skipped.

                                          -

                                          Shapes

                                          +

                                          Shapes

                                          See also the introduction to shapes and casting from shape-like objects in the language guide.

                                          -class amaranth.hdl.Shape(width=1, signed=False)
                                          +class amaranth.hdl.Shape(width=1, signed=False)

                                          Bit width and signedness of a Value.

                                          A Shape can be obtained by:

                                          -amaranth.hdl.signed(width)
                                          +amaranth.hdl.signed(width)

                                          Returns Shape(width, signed=True).

                                          -class amaranth.hdl.ShapeCastable
                                          +class amaranth.hdl.ShapeCastable

                                          Interface class for objects that can be cast to a Shape.

                                          Shapes of values in the Amaranth language are specified using shape-like objects. Inheriting a class from ShapeCastable and implementing all of the methods described below adds instances of that class to the list of shape-like objects @@ -282,7 +282,7 @@

                                          Shapes
                                          -as_shape()
                                          +as_shape()

                                          Convert self to a shape-like object.

                                          This method is called by the Amaranth language to convert self to a concrete Shape. It will usually return a Shape object, but it may also return @@ -304,7 +304,7 @@

                                          Shapes
                                          -const(obj)
                                          +const(obj)

                                          Convert a constant initializer obj to its value representation.

                                          This method is called by the Amaranth language to convert obj, which may be an arbitrary Python object, to a concrete value-like object. @@ -330,7 +330,7 @@

                                          Shapes
                                          -from_bits(raw)
                                          +from_bits(raw)

                                          Lift a bit pattern to a higher-level representation.

                                          This method is called by the Amaranth language to lift raw, which is an int, to a higher-level representation, which may be any object accepted by const(). @@ -359,7 +359,7 @@

                                          Shapes
                                          -__call__(obj)
                                          +__call__(obj)

                                          Lift a value-like object to a higher-level representation.

                                          This method is called by the Amaranth language to lift obj, which may be any value-like object whose shape equals Shape.cast(self), @@ -384,7 +384,7 @@

                                          Shapes
                                          -format(obj, spec)
                                          +format(obj, spec)

                                          Format a value.

                                          This method is called by the Amaranth language to implement formatting for custom shapes. Whenever "{obj:spec}" is encountered by Format, and obj @@ -406,7 +406,7 @@

                                          Shapes
                                          -class amaranth.hdl.ShapeLike
                                          +class amaranth.hdl.ShapeLike

                                          Abstract class representing all objects that can be cast to a Shape.

                                          issubclass(cls, ShapeLike) returns True for:

                                            @@ -431,11 +431,11 @@

                                            Shapes
                                            -

                                            Values

                                            +

                                            Values

                                            See also the introduction to values and casting from value-like objects in the language guide.

                                            -class amaranth.hdl.Value(*, src_loc_at=0)
                                            +class amaranth.hdl.Value(*, src_loc_at=0)

                                            Abstract representation of a bit pattern computed in a circuit.

                                            The Amaranth language gives Python code the ability to create a circuit netlist by manipulating objects representing the computations within that circuit. The Value class represents @@ -471,7 +471,7 @@

                                            Values
                                            -static cast(obj)
                                            +static cast(obj)

                                            Cast obj to an Amaranth value.

                                            Many value-like objects can be cast to a value:

                                              @@ -495,7 +495,7 @@

                                              Values
                                              -abstract shape()
                                              +abstract shape()

                                              Shape of self.

                                              Return type:
                                              @@ -506,7 +506,7 @@

                                              Values
                                              -as_unsigned()
                                              +as_unsigned()

                                              Reinterpretation as an unsigned value.

                                              Return type:
                                              @@ -517,7 +517,7 @@

                                              Values
                                              -as_signed()
                                              +as_signed()

                                              Reinterpretation as a signed value.

                                              Return type:
                                              @@ -531,7 +531,7 @@

                                              Values
                                              -__bool__()
                                              +__bool__()

                                              Forbidden conversion to boolean.

                                              Python uses this operator for its built-in semantics, e.g. if, and requires it to return a bool. Since this is not possible for Amaranth values, this operator @@ -545,7 +545,7 @@

                                              Values
                                              -bool()
                                              +bool()

                                              Conversion to boolean.

                                              Returns the same value as any(), but should be used where self is semantically a number.

                                              @@ -558,7 +558,7 @@

                                              Values
                                              -__pos__()
                                              +__pos__()

                                              Unary position, +self.

                                              Returns:
                                              @@ -572,7 +572,7 @@

                                              Values
                                              -__neg__()
                                              +__neg__()

                                              Unary negation, -self.

                                              Return type:
                                              @@ -583,7 +583,7 @@

                                              Values
                                              -__add__(other)
                                              +__add__(other)

                                              Addition, self + other.

                                              Returns:
                                              @@ -600,14 +600,14 @@

                                              Values
                                              -__radd__(other)
                                              +__radd__(other)

                                              Addition, other + self (reflected).

                                              Like __add__(), with operands swapped.

                                              -__sub__(other)
                                              +__sub__(other)

                                              Subtraction, self - other.

                                              Returns:
                                              @@ -627,14 +627,14 @@

                                              Values
                                              -__rsub__(other)
                                              +__rsub__(other)

                                              Subtraction, other - self (reflected).

                                              Like __sub__(), with operands swapped.

                                              -__mul__(other)
                                              +__mul__(other)

                                              Multiplication, self * other.

                                              Returns:
                                              @@ -649,14 +649,14 @@

                                              Values
                                              -__rmul__(other)
                                              +__rmul__(other)

                                              Multiplication, other * self (reflected).

                                              Like __mul__(), with operands swapped.

                                              -__floordiv__(other)
                                              +__floordiv__(other)

                                              Flooring division, self // other.

                                              If other is zero, the result of this operation is zero.

                                              @@ -674,7 +674,7 @@

                                              Values
                                              -__rfloordiv__(other)
                                              +__rfloordiv__(other)

                                              Flooring division, other // self (reflected).

                                              If self is zero, the result of this operation is zero.

                                              Like __floordiv__(), with operands swapped.

                                              @@ -682,7 +682,7 @@

                                              Values
                                              -__mod__(other)
                                              +__mod__(other)

                                              Flooring modulo or remainder, self % other.

                                              If other is zero, the result of this operation is zero.

                                              @@ -694,14 +694,14 @@

                                              Values
                                              -__rmod__(other)
                                              +__rmod__(other)

                                              Flooring modulo or remainder, other % self (reflected).

                                              Like __mod__(), with operands swapped.

                                              -__eq__(other)
                                              +__eq__(other)

                                              Equality comparison, self == other.

                                              Return type:
                                              @@ -712,7 +712,7 @@

                                              Values
                                              -__ne__(other)
                                              +__ne__(other)

                                              Inequality comparison, self != other.

                                              Return type:
                                              @@ -723,7 +723,7 @@

                                              Values
                                              -__lt__(other)
                                              +__lt__(other)

                                              Less than comparison, self < other.

                                              Return type:
                                              @@ -734,7 +734,7 @@

                                              Values
                                              -__le__(other)
                                              +__le__(other)

                                              Less than or equals comparison, self <= other.

                                              Return type:
                                              @@ -745,7 +745,7 @@

                                              Values
                                              -__gt__(other)
                                              +__gt__(other)

                                              Greater than comparison, self > other.

                                              Return type:
                                              @@ -756,7 +756,7 @@

                                              Values
                                              -__ge__(other)
                                              +__ge__(other)

                                              Greater than or equals comparison, self >= other.

                                              Return type:
                                              @@ -767,7 +767,7 @@

                                              Values
                                              -__abs__()
                                              +__abs__()

                                              Absolute value, abs(self).

                                              Return type:
                                              @@ -778,7 +778,7 @@

                                              Values
                                              -__invert__()
                                              +__invert__()

                                              Bitwise NOT, ~self.

                                              The shape of the result is the same as the shape of self, even for unsigned values.

                                              @@ -800,7 +800,7 @@

                                              Values
                                              -__and__(other)
                                              +__and__(other)

                                              Bitwise AND, self & other.

                                              Returns:
                                              @@ -817,14 +817,14 @@

                                              Values
                                              -__rand__(other)
                                              +__rand__(other)

                                              Bitwise AND, other & self.

                                              Like __and__(), with operands swapped.

                                              -all()
                                              +all()

                                              Reduction AND; are all bits 1?

                                              Return type:
                                              @@ -835,7 +835,7 @@

                                              Values
                                              -__or__(other)
                                              +__or__(other)

                                              Bitwise OR, self | other.

                                              Returns:
                                              @@ -852,14 +852,14 @@

                                              Values
                                              -__ror__(other)
                                              +__ror__(other)

                                              Bitwise OR, other | self.

                                              Like __or__(), with operands swapped.

                                              -any()
                                              +any()

                                              Reduction OR; is any bit 1?

                                              Performs the same operation as bool(), but should be used where self is semantically a bit sequence.

                                              @@ -872,7 +872,7 @@

                                              Values
                                              -__xor__(other)
                                              +__xor__(other)

                                              Bitwise XOR, self ^ other.

                                              Returns:
                                              @@ -889,14 +889,14 @@

                                              Values
                                              -__rxor__(other)
                                              +__rxor__(other)

                                              Bitwise XOR, other ^ self.

                                              Like __xor__(), with operands swapped.

                                              -xor()
                                              +xor()

                                              Reduction XOR; are an odd amount of bits 1?

                                              Return type:
                                              @@ -907,7 +907,7 @@

                                              Values
                                              -__lshift__(other)
                                              +__lshift__(other)

                                              Left shift by variable amount, self << other.

                                              Returns:
                                              @@ -925,14 +925,14 @@

                                              Values
                                              -__rlshift__(other)
                                              +__rlshift__(other)

                                              Left shift by variable amount, other << self.

                                              Like __lshift__(), with operands swapped.

                                              -shift_left(amount)
                                              +shift_left(amount)

                                              Left shift by constant amount.

                                              If amount < 0, performs the same operation as self.shift_right(-amount).

                                              @@ -948,7 +948,7 @@

                                              Values
                                              -rotate_left(amount)
                                              +rotate_left(amount)

                                              Left rotate by constant amount.

                                              If amount < 0, performs the same operation as self.rotate_right(-amount).

                                              @@ -960,7 +960,7 @@

                                              Values
                                              -__rshift__(other)
                                              +__rshift__(other)

                                              Right shift by variable amount, self >> other.

                                              Returns:
                                              @@ -978,14 +978,14 @@

                                              Values
                                              -__rrshift__(other)
                                              +__rrshift__(other)

                                              Right shift by variable amount, other >> self.

                                              Like __rshift__(), with operands swapped.

                                              -shift_right(amount)
                                              +shift_right(amount)

                                              Right shift by constant amount.

                                              If amount < 0, performs the same operation as self.shift_left(-amount).

                                              @@ -1001,7 +1001,7 @@

                                              Values
                                              -rotate_right(amount)
                                              +rotate_right(amount)

                                              Right rotate by constant amount.

                                              If amount < 0, performs the same operation as self.rotate_left(-amount).

                                              @@ -1013,7 +1013,7 @@

                                              Values
                                              -__len__()
                                              +__len__()

                                              Bit width of self.

                                              Returns:
                                              @@ -1027,7 +1027,7 @@

                                              Values
                                              -__getitem__(key)
                                              +__getitem__(key)

                                              Bit slicing.

                                              Selects a constant-width, constant-offset part of self. All three slicing syntaxes (self[i], self[i:j], and self[i:j:k]) as well as negative indices are @@ -1049,7 +1049,7 @@

                                              Values
                                              -__contains__(other)
                                              +__contains__(other)

                                              Forbidden membership test operator.

                                              Python requires this operator to return a bool. Since this is not possible for Amaranth values, this operator always raises an exception.

                                              @@ -1063,7 +1063,7 @@

                                              Values
                                              -bit_select(offset, width)
                                              +bit_select(offset, width)

                                              Part-select with bit granularity.

                                              Selects a constant width, variable offset part of self, where parts with successive offsets overlap by width - 1 bits. Bits above the most significant bit of self @@ -1092,7 +1092,7 @@

                                              Values
                                              -word_select(offset, width)
                                              +word_select(offset, width)

                                              Part-select with word granularity.

                                              Selects a constant width, variable offset part of self, where parts with successive offsets are adjacent but do not overlap. Bits above the most significant bit of self @@ -1121,7 +1121,7 @@

                                              Values
                                              -replicate(count)
                                              +replicate(count)

                                              Replication.

                                              Equivalent to Cat(self for _ in range(count)), but not assignable.

                                              @@ -1136,7 +1136,7 @@

                                              Values
                                              -matches(*patterns)
                                              +matches(*patterns)

                                              Pattern matching.

                                              Matches against a set of patterns, recognizing the same grammar as with m.Case(). The pattern syntax is described in the language guide.

                                              @@ -1153,7 +1153,7 @@

                                              Values
                                              -eq(value, *, src_loc_at=0)
                                              +eq(value, *, src_loc_at=0)

                                              Assignment.

                                              Once it is placed in a domain, an assignment changes the bit pattern of self to equal value. If the bit width of value is less than that of self, @@ -1169,7 +1169,7 @@

                                              Values
                                              -__hash__ = None
                                              +__hash__ = None

                                              Forbidden hashing.

                                              Python objects are hashable if they provide a __hash__ method that returns an int and an __eq__ method that returns a bool. @@ -1187,7 +1187,7 @@

                                              Values
                                              -__format__(format_desc)
                                              +__format__(format_desc)

                                              Forbidden formatting.

                                              Since normal Python formatting (f-strings and str.format) must immediately return a string, it is unsuitable for formatting Amaranth values. To format a value at simulation @@ -1199,7 +1199,7 @@

                                              Values
                                              -class amaranth.hdl.ValueCastable
                                              +class amaranth.hdl.ValueCastable

                                              Interface class for objects that can be cast to a Value.

                                              Computations in the Amaranth language are described by combining value-like objects. Inheriting a class from ValueCastable and implementing all of the methods described below adds instances of that class to the list of @@ -1217,7 +1217,7 @@

                                              Values
                                              -as_value()
                                              +as_value()

                                              Convert self to a value-like object.

                                              This method is called by the Amaranth language to convert self to a concrete Value. It will usually return a Value object, but it may also return @@ -1241,7 +1241,7 @@

                                              Values
                                              -shape()
                                              +shape()

                                              Compute the shape of self.

                                              This method is not called by the Amaranth language itself; whenever it needs to discover the shape of a value-castable object, it calls self.as_value().shape(). However, @@ -1272,7 +1272,7 @@

                                              Values
                                              -class amaranth.hdl.ValueLike
                                              +class amaranth.hdl.ValueLike

                                              Abstract class representing all objects that can be cast to a Value.

                                              issubclass(cls, ValueLike) returns True for:

                                                diff --git a/docs/amaranth/latest/search.html b/docs/amaranth/latest/search.html index 9663e08c..ffaf1c0e 100644 --- a/docs/amaranth/latest/search.html +++ b/docs/amaranth/latest/search.html @@ -1,9 +1,9 @@ - + - Search — Amaranth language & toolchain 0.6.0.dev68 documentation + Search — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                                - 0.6.0.dev68 + 0.6.0.dev69
                                                diff --git a/docs/amaranth/latest/searchindex.js b/docs/amaranth/latest/searchindex.js index 0807777f..8997f2d4 100644 --- a/docs/amaranth/latest/searchindex.js +++ b/docs/amaranth/latest/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["changes", "contrib", "cover", "guide", "index", "install", "intro", "platform", "platform/altera", "platform/gowin", "platform/lattice", "platform/quicklogic", "platform/siliconblue", "platform/xilinx", "reference", "simulator", "start", "stdlib", "stdlib/cdc", "stdlib/crc", "stdlib/crc/catalog", "stdlib/data", "stdlib/enum", "stdlib/fifo", "stdlib/io", "stdlib/memory", "stdlib/meta", "stdlib/stream", "stdlib/wiring", "tutorial"], "filenames": ["changes.rst", "contrib.rst", "cover.rst", "guide.rst", "index.rst", "install.rst", "intro.rst", "platform.rst", "platform/altera.rst", "platform/gowin.rst", "platform/lattice.rst", "platform/quicklogic.rst", "platform/siliconblue.rst", "platform/xilinx.rst", "reference.rst", "simulator.rst", "start.rst", "stdlib.rst", "stdlib/cdc.rst", "stdlib/crc.rst", "stdlib/crc/catalog.rst", "stdlib/data.rst", "stdlib/enum.rst", "stdlib/fifo.rst", "stdlib/io.rst", "stdlib/memory.rst", "stdlib/meta.rst", "stdlib/stream.rst", "stdlib/wiring.rst", "tutorial.rst"], "titles": ["Changelog", "Contributing", "Amaranth project documentation", "Language guide", "Language & toolchain", "Installation", "Introduction", "Platform integration", "Altera", "Gowin", "Lattice", "Quicklogic", "SiliconBlue", "Xilinx", "Language reference", "Simulator", "Getting started", "Standard library", "Clock domain crossing", "Cyclic redundancy checks", "Algorithm catalog", "Data structures", "Enumerations", "First-in first-out queues", "Input/output buffers", "Memory arrays", "Interface metadata", "Data streams", "Interfaces and connections", "Tutorial"], "terms": {"thi": [0, 1, 3, 4, 6, 7, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "describ": [0, 1, 14, 15, 16, 17, 21, 25, 26, 28], "public": [0, 1, 14, 17, 28], "interfac": [0, 1, 3, 4, 6, 14, 15, 16, 17, 21, 23, 24, 25, 27], "amaranth": [0, 1, 3, 4, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "It": [0, 1, 3, 5, 6, 14, 15, 16, 19, 21, 22, 24, 25, 28], "doe": [0, 1, 3, 6, 14, 15, 18, 21, 23, 24, 25, 26, 27, 28], "includ": [0, 1, 3, 5, 6, 10, 14, 16, 17, 19, 22, 24, 25, 27, 28], "most": [0, 1, 3, 5, 6, 14, 15, 16, 18, 19, 21, 22, 24, 25, 27, 28], "bug": [0, 1, 3, 5, 6], "fix": [0, 3, 4, 5, 16, 19, 25, 28], "which": [0, 1, 3, 6, 10, 12, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "do": [0, 1, 3, 14, 15, 16, 21, 25, 27, 28], "notabl": [0, 5], "ar": [0, 1, 3, 5, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "list": [0, 1, 3, 14, 15, 19, 21, 25, 26, 28], "here": [0, 1, 14, 21, 27], "i": [0, 1, 2, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29], "avail": [0, 1, 5, 8, 9, 10, 11, 12, 13, 15, 16, 19, 23, 24, 26, 27, 28], "onlin": 0, "66": 0, "simul": [0, 3, 4, 5, 14, 16, 17, 27], "time": [0, 1, 3, 5, 6, 12, 14, 15, 16, 18, 21, 23, 24, 25, 27, 28], "71": 0, "enumview": [0, 22, 28], "match": [0, 6, 14, 15, 22, 24, 25, 28], "ad": [0, 1, 3, 5, 6, 15, 16, 21, 24, 25, 28], "period": [0, 15, 16, 24, 27], "repres": [0, 3, 14, 24], "overrid": [0, 8, 9, 10, 11, 12, 13, 14, 18, 21, 25, 28], "valuecast": [0, 3, 14, 15, 21], "from_bit": [0, 14, 15, 21], "now": [0, 3, 28], "mandatori": 0, "51": 0, "deprec": 0, "local": [0, 25], "argument": [0, 1, 3, 14, 15, 22, 28], "clockdomain": [0, 3, 14, 15, 24], "59": 0, "remov": [0, 1, 3, 14, 15, 19, 28], "record": [0, 1, 16], "memori": [0, 4, 6, 14, 15, 16, 17, 23, 26, 28], "45": 0, "submodul": [0, 15, 19, 24, 25, 27, 28], "hdl": [0, 3, 5, 6, 14, 16, 21, 24, 25, 29], "valu": [0, 1, 4, 15, 16, 18, 19, 21, 22, 24, 25, 26, 28], "impli": [0, 3], "const": [0, 3, 14, 15, 21, 22, 25, 27, 28], "width": [0, 14, 19, 21, 23, 24, 25, 26, 27, 28], "sign": [0, 1, 3, 14, 21, 26, 27], "signal": [0, 4, 6, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 27, 28], "upward": 0, "propag": [0, 14, 15], "clock": [0, 4, 6, 15, 16, 17, 19, 23, 25, 27], "domain": [0, 4, 6, 14, 15, 16, 17, 23, 24, 25, 26, 27, 28], "util": [0, 14, 17], "log2_int": 0, "17": [0, 1, 15, 20, 22, 27], "payload_init": [0, 27], "lib": [0, 3, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "stream": [0, 4, 17, 19, 24, 28], "signatur": [0, 1, 17, 24, 25, 26, 27], "enum": [0, 3, 14, 17, 21, 22, 28], "provid": [0, 3, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "io": [0, 3, 24], "portlik": [0, 24], "__add__": [0, 14, 24, 28], "69": 0, "code": [0, 1, 3, 4, 5, 6, 14, 16, 17, 19, 21, 26, 28], "63": 0, "simulatorcontext": [0, 15], "elapsed_tim": [0, 15], "get": [0, 3, 4, 5, 6, 15, 21, 24, 25], "elaps": [0, 15], "default_clk_period": [0, 16], "add_clock": [0, 15, 16, 24, 27], "accept": [0, 1, 3, 14, 15, 21, 22, 24, 27, 28], "phase": [0, 3, 15, 24], "run_until": [0, 15], "deadlin": [0, 15], "delai": [0, 1, 15, 18, 23, 24], "interv": [0, 15], "resourcemanag": 0, "add_clock_constraint": 0, "return": [0, 1, 3, 14, 15, 16, 19, 21, 22, 24, 25, 26, 27, 28], "pass": [0, 3, 15, 22, 24, 26, 28], "float": [0, 18, 21], "second": [0, 1, 3, 14, 15, 18, 21, 27], "hertz": [0, 16], "ani": [0, 1, 3, 5, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "method": [0, 1, 3, 14, 15, 16, 18, 19, 21, 22, 25, 26, 28], "frequenc": [0, 3, 16, 18, 24], "default_clk_frequ": 0, "gowin": [0, 4, 5, 7], "us": [0, 1, 3, 5, 6, 8, 10, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29], "nextpnr": [0, 8, 9, 10, 12, 13], "himbaechel": [0, 9], "rather": [0, 1, 3, 15, 21, 24, 28], "than": [0, 1, 3, 5, 6, 14, 15, 18, 21, 22, 24, 25, 28], "individu": [0, 1, 14, 15, 21, 24, 27], "bit": [0, 5, 10, 13, 14, 15, 16, 19, 21, 22, 23, 24, 25, 27], "same": [0, 1, 3, 6, 14, 15, 16, 19, 21, 22, 23, 24, 25, 27, 28], "can": [0, 1, 3, 5, 6, 14, 15, 16, 19, 21, 22, 23, 24, 25, 26, 27, 28], "assign": [0, 1, 14, 15, 16, 21, 22, 25, 28], "differ": [0, 1, 3, 6, 15, 17, 18, 21, 23, 24, 25, 26, 28], "modul": [0, 1, 4, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "constant": [0, 4, 14, 22, 27], "data": [0, 4, 14, 15, 17, 18, 19, 23, 24, 25, 26, 28], "arraylayout": [0, 3, 21, 24, 25], "index": [0, 1, 3, 14, 21, 24, 25, 27, 28], "neg": [0, 3, 14, 15, 18, 24], "integ": [0, 14, 21, 22, 25, 26, 28], "slice": [0, 3, 14, 15, 21, 24], "len": [0, 3, 14, 21, 24, 25], "work": [0, 3, 4, 5, 6, 10, 14, 15, 16, 21, 27, 28], "iter": [0, 1, 3, 15, 19, 21, 24, 25, 28], "request": [0, 1, 3, 14, 16, 17, 24, 25, 27, 28], "dir": [0, 24, 26], "resourc": [0, 25], "subsign": 0, "add": [0, 1, 3, 6, 8, 10, 12, 13, 14, 15, 19, 21, 22, 27, 28], "object": [0, 3, 8, 14, 15, 19, 21, 24, 25, 26, 27, 28], "usabl": [0, 1, 6, 28], "view": [0, 1, 3, 17], "simulationport": [0, 24], "The": [0, 1, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29], "migen": 0, "compat": [0, 4, 5, 17, 24, 26, 27], "layer": 0, "ha": [0, 1, 3, 6, 14, 15, 16, 19, 21, 22, 23, 24, 25, 27, 28], "been": [0, 3, 5, 14, 15, 17, 19, 23], "appli": [0, 3, 19, 21, 22, 24, 27], "follow": [0, 1, 3, 5, 6, 10, 14, 15, 16, 18, 19, 21, 24, 25, 27, 28, 29], "written": [0, 3, 6, 16, 23, 25, 28, 29], "against": [0, 3, 14, 22, 26, 28], "updat": [0, 1, 3, 5, 15, 16, 19, 24, 25, 28], "reset": [0, 6, 15, 16, 18, 19, 23, 24, 28], "keyword": [0, 3, 14, 22, 26, 28], "init": [0, 3, 14, 15, 18, 19, 21, 24, 25, 26, 28], "ensur": [0, 3, 14, 22, 24, 26, 27, 28], "all": [0, 1, 3, 5, 6, 8, 14, 15, 16, 17, 19, 21, 22, 24, 25, 26, 28], "elaborat": [0, 3, 14, 15, 16, 24, 25, 28], "subclass": [0, 3, 14, 21, 22, 26, 28], "replac": [0, 4, 14, 22, 27, 28], "m": [0, 3, 14, 15, 16, 19, 21, 24, 25, 26, 27, 28], "case": [0, 14, 15, 16, 19, 21, 23, 25, 26, 28], "pattern": [0, 3, 14, 21, 22], "default": [0, 3, 13, 14, 15, 18, 24, 25, 28], "aren": 0, "t": [0, 1, 3, 14, 21, 25, 26, 27, 28], "outsid": [0, 3, 24, 28], "defin": [0, 3, 6, 14, 15, 16, 17, 18, 19, 22, 24, 25, 27, 28], "them": [0, 1, 3, 14, 15, 16, 21, 24, 28], "its": [0, 1, 3, 14, 15, 16, 18, 19, 21, 22, 24, 25, 26, 27, 28], "move": 0, "definit": [0, 3, 4, 16, 26, 28], "hierarchi": [0, 3, 21, 26], "necessari": [0, 1, 3, 5, 6, 12, 14, 15, 16, 17, 21, 26, 27, 28], "import": [0, 1, 3, 4, 15, 16, 19, 21, 22, 24, 25, 27, 28], "assert": [0, 4, 14, 15, 16, 18, 19, 23, 24, 25, 27, 28], "assum": [0, 3, 14, 15, 24, 25], "cover": [0, 3, 6, 14, 26, 28], "name": [0, 1, 6, 8, 9, 10, 12, 13, 14, 15, 18, 21, 24, 25, 26, 28], "messag": [0, 1, 3, 8, 10, 12, 14, 16, 25, 28], "instead": [0, 3, 14, 15, 21, 25, 26, 27, 28], "buffer": [0, 4, 6, 17, 23], "inlin": [0, 1], "copi": [0, 1, 27, 28], "convert": [0, 3, 6, 14, 15, 21, 24, 25, 26, 27, 28], "add_sync_process": 0, "testbench": [0, 15, 16, 25], "add_testbench": [0, 15, 16, 24, 27], "other": [0, 1, 3, 5, 6, 14, 15, 16, 18, 19, 21, 22, 24, 26, 27, 28], "add_process": [0, 15], "process": [0, 1, 3, 6, 14, 15, 17, 19, 21, 27, 28], "new": [0, 3, 4, 5, 6, 15, 19, 21, 23, 24, 25, 28], "async": [0, 15, 16, 24, 25, 27], "api": [0, 5], "explicit": [0, 3, 6, 14, 19], "take": [0, 1, 3, 6, 14, 15, 19, 28], "account": [0, 3, 28], "longer": 0, "implicit": [0, 3, 19], "previous": [0, 26, 28], "wa": [0, 3, 15, 19, 21, 28], "first": [0, 1, 3, 4, 5, 6, 14, 15, 16, 17, 18, 19, 21, 24, 27, 28], "toggl": [0, 15], "actual": [0, 1, 22, 28], "run_pass": 0, "true": [0, 3, 14, 15, 16, 18, 19, 20, 22, 24, 25, 27, 28], "If": [0, 1, 5, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "fals": [0, 3, 14, 15, 18, 19, 20, 23, 24, 26, 27, 28], "still": [0, 3, 15, 16, 18, 28, 29], "behavior": [0, 1, 3, 6, 14, 15, 16, 17, 21, 25, 28], "need_pow2": 0, "ceil_log2": [0, 25], "exact_log2": 0, "b": [0, 3, 15, 19, 22, 24, 25, 26, 28], "27": 0, "30": [0, 16, 20], "compon": [0, 1, 2, 3, 6, 15, 16, 17, 21, 24, 26, 27], "metadata": [0, 4, 13, 17], "36": [0, 16], "function": [0, 3, 5, 6, 14, 15, 16, 17, 19, 21, 25, 27, 28], "39": [0, 16], "semant": [0, 1, 3, 6, 14, 28], "42": [0, 16], "shape": [0, 1, 4, 15, 21, 22, 25, 27, 28], "castabl": [0, 3, 14, 21, 22, 25, 27, 28], "43": 0, "renam": 0, "46": 0, "cast": [0, 4, 14, 21, 22, 28], "rang": [0, 14, 15, 16, 21, 23, 24, 27, 28], "unsign": [0, 3, 14, 21, 22, 25, 26, 28], "50": [0, 15], "print": [0, 1, 4, 14, 28], "statement": [0, 3, 14, 15, 22, 28], "string": [0, 3, 14, 15, 21, 24, 26, 28], "format": [0, 1, 3, 14, 21, 26], "shapecast": [0, 3, 14, 15, 21, 22, 25], "53": 0, "low": [0, 3, 6, 15, 21, 24, 27], "level": [0, 1, 3, 6, 14, 15, 16, 21, 23, 24, 28], "o": [0, 2, 4, 6, 13, 15, 16, 18, 24, 26], "primit": [0, 3, 6, 25, 26], "55": 0, "58": [0, 3], "core": [0, 3, 6, 8, 24, 28], "support": [0, 1, 3, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 18, 21, 23, 24, 25, 27], "rid": 0, "61": [0, 27], "minim": [0, 1, 14, 16, 27], "62": 0, "memorydata": [0, 15, 25], "class": [0, 1, 3, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 23, 24, 25, 26, 27, 28], "65": 0, "special": [0, 3, 6, 19, 24, 25, 28], "structur": [0, 1, 4, 14, 16, 17, 26, 28], "have": [0, 1, 3, 5, 14, 15, 17, 21, 24, 25, 26, 28], "made": [0, 3, 5, 25, 28], "ioport": [0, 3, 24], "iobufferinst": [0, 3, 24], "never": [0, 3, 15, 21, 22, 25, 28], "activ": [0, 6, 15, 25], "alwai": [0, 1, 3, 6, 14, 15, 16, 18, 19, 24, 25, 28], "stop": [0, 3, 15], "warn": [0, 1, 14, 17], "hard": [0, 1, 6, 15, 21], "error": [0, 1, 3, 6, 8, 10, 12, 15, 19, 21, 28], "trigger": [0, 15, 25], "out": [0, 4, 5, 6, 14, 15, 16, 17, 18, 19, 24, 26, 27, 28], "valid": [0, 14, 18, 19, 21, 23, 24, 26, 27, 28], "without": [0, 1, 3, 5, 6, 14, 15, 17, 19, 21, 25, 27, 28], "like": [0, 1, 3, 5, 6, 14, 15, 18, 21, 22, 24, 25, 28], "wire": [0, 3, 15, 16, 17, 24, 25, 26, 27, 28], "member": [0, 1, 14, 21, 22, 24, 25, 26, 27, 28], "cdc": [0, 3, 6, 17, 18], "ffsynchron": [0, 17, 18], "fsm": 0, "immut": [0, 3, 15, 21, 28], "hashabl": [0, 14], "instanc": [0, 4, 10, 14, 21, 22, 24, 26, 28], "port": [0, 16, 17, 26, 28], "onli": [0, 1, 3, 5, 6, 10, 14, 15, 16, 18, 19, 21, 22, 23, 24, 26, 27, 28], "plain": [0, 3, 21, 22], "normal": [0, 14, 24, 28], "repl": 0, "10": [0, 3, 15, 20, 21, 28], "ast": [0, 14], "sampl": [0, 3, 15, 24, 27, 28], "stabl": [0, 3], "rose": 0, "fell": 0, "non": [0, 1, 3, 6, 14, 15, 18, 26, 28], "layout": [0, 17, 26], "is_compli": [0, 28], "reject": [0, 3], "less": [0, 14, 15, 24, 28], "singleendedport": [0, 24], "differentialport": [0, 24], "ffbuffer": [0, 24], "ddrbuffer": [0, 24], "meta": [0, 17, 26, 28], "componentmetadata": [0, 26, 28], "schedul": [0, 15], "19": 0, "fifo": [0, 6, 17, 23, 27], "fifointerfac": [0, 17, 23], "fwft": 0, "20": 0, "syncfifo": [0, 17, 23], "implicitli": [0, 14], "when": [0, 1, 3, 6, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "specifi": [0, 3, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 27, 28], "run": [0, 5, 6, 8, 9, 10, 11, 12, 13, 16, 24, 27], "until": [0, 3, 5, 14, 15, 18, 21, 24, 25, 27, 29], "given": [0, 3, 19, 21, 22, 25, 28], "even": [0, 1, 3, 14, 15, 18, 25, 28], "critic": [0, 15], "present": [0, 3, 6, 8, 9, 10, 11, 12, 13, 14, 24, 28], "settl": 0, "command": [0, 1, 5, 6, 8, 9, 10, 11, 12, 13, 16, 21], "gener": [0, 3, 5, 6, 14, 16, 19, 24, 25, 26, 28], "base": [0, 3, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 19, 21, 26, 28], "noth": [0, 14, 23, 28], "mix": [0, 3], "environ": [0, 6, 8, 9, 10, 11, 12, 13, 15], "variabl": [0, 3, 8, 9, 10, 11, 12, 13, 14, 21, 28], "nmigen_env_diamond": 0, "amaranth_env_diamond": [0, 10], "upper": 0, "buildplan": 0, "execute_local_dock": 0, "extract": [0, 28], "build": [0, 3, 4, 5, 8, 9, 10, 12, 13, 15, 16, 18, 23, 24, 26, 28], "sh": 0, "begin": [0, 3, 14, 15, 16, 21, 24, 27, 28], "bin": [0, 10, 12, 13], "intelplatform": 0, "alteraplatform": [0, 7, 8], "run_script": 0, "execute_loc": 0, "vendor": [0, 3, 6, 8, 9, 10, 11, 12, 13, 16], "intel": 0, "lattice_ecp5": 0, "lattice_ice40": 0, "lattice_machxo2_3l": 0, "quicklog": [0, 4, 7], "xilinx": [0, 4, 7], "18": 0, "improv": [0, 1, 14, 15, 21, 23, 28], "wai": [0, 1, 3, 14, 15, 21, 22, 24, 25, 26, 27, 28], "In": [0, 1, 3, 4, 14, 15, 16, 21, 22, 23, 24, 25, 26, 27, 28], "departur": 0, "usual": [0, 1, 3, 5, 6, 14, 15, 18, 21, 25, 26, 28], "polici": 0, "give": [0, 3, 14, 21], "design": [0, 1, 3, 5, 6, 13, 14, 15, 16, 17, 18, 19, 21, 24, 25, 26, 27, 28, 29], "addit": [0, 1, 3, 5, 6, 14, 15, 21, 22, 23, 24, 26, 27, 28], "one": [0, 1, 3, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 28, 29], "later": [0, 1, 3, 15, 27], "enumer": [0, 4, 14, 17, 21, 24, 27, 28], "extend": [0, 3, 6, 14, 15, 22, 26, 28], "A": [0, 1, 3, 4, 5, 6, 14, 15, 18, 19, 21, 22, 24, 25, 26, 27, 28, 29], "an": [0, 1, 3, 5, 6, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "sever": [0, 1, 3, 14, 15, 24, 28], "extens": [0, 16], "point": [0, 12, 15, 21, 24, 27], "particular": [0, 1, 3, 6, 15, 19, 21, 28], "mai": [0, 1, 3, 5, 14, 15, 18, 19, 21, 22, 24, 25, 27, 28], "wrap": [0, 1, 14, 15, 21, 22, 28], "anoth": [0, 3, 14, 15, 17, 21, 22, 25, 26, 27, 28], "call": [0, 3, 14, 15, 21, 22, 24, 25, 26, 28], "protocol": [0, 14, 22, 26, 27], "15": [0, 15, 16, 20], "issu": [0, 1, 3, 6, 25], "infer": [0, 3, 6, 21, 24], "resolv": [0, 3, 28], "where": [0, 1, 3, 14, 15, 18, 19, 21, 24, 25, 26, 27, 28], "both": [0, 1, 3, 6, 14, 15, 19, 21, 24, 25, 27, 28], "python": [0, 1, 3, 5, 6, 12, 14, 15, 16, 21, 22, 26, 28], "7": [0, 3, 5, 6, 20, 21, 24, 27], "11": [0, 3, 20, 21], "12": [0, 3, 20, 26], "featur": [0, 4, 14, 18, 28], "nmigen": [0, 29], "namespac": [0, 1, 3], "annot": [0, 14, 17, 21, 24, 28], "recogn": [0, 14, 25, 27], "nmigen_": 0, "envron": 0, "remain": [0, 14, 15, 23, 27, 28], "had": [0, 21, 28], "sinc": [0, 3, 5, 14, 15, 16, 19, 21, 28], "shell": 0, "amaranth_": 0, "amaranth_env_": 0, "uppercas": 0, "nmigen_env_": 0, "form": [0, 3, 19, 24, 27, 28], "some_vendor": 0, "somevendorplatform": 0, "reduc": [0, 3, 6, 18, 21, 25, 27, 28], "futur": [0, 3, 6, 15, 24, 28], "churn": 0, "count": [0, 3, 14, 15, 16, 27, 28], "replic": [0, 3, 14, 25], "appropri": [0, 24, 27, 28], "depend": [0, 1, 3, 5, 6, 14, 15, 21, 23, 28], "being": [0, 1, 3, 14, 21, 23, 25, 27, 28, 29], "storag": [0, 14], "access": [0, 3, 15, 23, 25, 26, 28], "represent": [0, 3, 14, 15, 25, 26, 28], "connect": [0, 3, 4, 16, 17, 18, 24, 27], "togeth": [0, 1, 3, 27, 28], "manual": [0, 1, 4, 5, 19, 21, 28], "instanti": [0, 3, 6, 14, 16, 18, 21, 24, 25], "regist": [0, 3, 6, 19, 23, 24, 26, 28], "e": [0, 1, 3, 14, 15, 18, 23, 24, 25, 27, 28], "g": [0, 1, 3, 13, 14, 15, 18, 25, 28], "past_x": 0, "x": [0, 3, 14, 19, 25, 28], "d": [0, 3, 15, 16, 19, 21, 24, 25, 26, 27, 28], "sync": [0, 3, 15, 16, 21, 24, 25, 27, 28], "eq": [0, 3, 14, 15, 16, 21, 22, 24, 25, 26, 27, 28], "nativ": [0, 6], "syntax": [0, 1, 3, 4, 15, 16, 21, 28], "pin": [0, 3, 6], "directli": [0, 3, 6, 14, 15, 18, 19, 21, 23, 24, 25, 28], "field": [0, 21], "led": [0, 4], "cat": [0, 3, 14, 22, 27], "n": [0, 3, 18, 21, 24, 25], "note": [0, 1, 3, 14, 18, 19, 21, 22, 24], "roundrobin": 0, "those": [0, 3, 28], "while": [0, 1, 3, 6, 14, 15, 19, 21, 24, 25, 26, 27, 28], "below": [0, 3, 14, 15, 16, 18, 25, 27, 28], "thei": [0, 1, 3, 14, 15, 16, 19, 21, 25, 26, 27, 28], "next": [0, 3, 5, 15, 16, 23, 24, 25, 27, 28], "aggreg": [0, 3, 21], "express": [0, 3, 15, 21, 22, 26, 28], "crc": [0, 17, 20], "8": [0, 3, 5, 19, 20, 21, 24, 25, 26, 27, 28], "9": [0, 3, 27], "initi": [0, 14, 15, 18, 19, 21, 25, 27, 28], "reorgan": 0, "lift": [0, 14, 24, 27, 28], "22": 0, "28": 0, "allow": [0, 1, 3, 6, 14, 18, 22, 24, 27, 28], "oper": [0, 4, 6, 14, 15, 21, 22, 24, 25, 28], "31": [0, 3, 20, 21], "type": [0, 3, 14, 15, 19, 21, 22, 23, 24, 25, 26, 28], "safeti": [0, 22], "34": 0, "pureinterfac": [0, 28], "35": 0, "shapelik": [0, 14, 21, 27], "valuelik": [0, 14, 15], "37": 0, "make": [0, 1, 3, 5, 6, 15, 17, 22, 23, 24, 25, 26, 27], "38": [0, 16], "similar": [0, 1, 3, 14, 15, 16, 19, 21, 25, 27, 28], "as_sign": [0, 3, 14], "as_unsign": [0, 3, 14], "left": [0, 3, 14, 19, 25], "hand": 0, "side": [0, 3], "supersed": 0, "transpar": [0, 3, 25], "read": [0, 1, 3, 21, 23, 24, 28], "enabl": [0, 3, 6, 8, 10, 12, 15, 16, 21, 24, 25, 27, 28], "creat": [0, 1, 3, 14, 15, 19, 22, 24, 25, 27, 28], "__call__": [0, 14, 19, 21, 22, 28], "recurs": [0, 21, 28], "treat": [0, 3, 19, 27, 28], "deriv": [0, 3, 6, 16, 21, 24, 28], "int": [0, 3, 14, 15, 16, 18, 19, 21, 23, 24, 25, 26, 28], "intenum": [0, 3, 14, 22], "empti": [0, 3, 15, 23, 25, 26], "explicitli": [0, 3, 14, 15, 16, 19, 21, 22, 25, 28], "construct": [0, 3, 6, 14, 15, 16, 19, 21, 22, 23, 25, 27, 28], "were": [0, 1, 3, 15], "__abs__": [0, 14], "predat": 0, "tupl": [0, 3, 15, 24, 25, 28], "uservalu": 0, "linter": 0, "instruct": [0, 3, 15, 16], "file": [0, 3, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 21, 22, 28], "text": [0, 1], "lf": 0, "line": [0, 1, 14, 16, 22, 28], "end": [0, 3, 6, 8, 9, 10, 12, 15, 16, 24], "window": [0, 5, 6, 10], "debug_verilog": 0, "templatedplatform": 0, "env": 0, "add_fil": [0, 12], "absolut": [0, 3, 14], "path": [0, 10, 26, 27], "sim": [0, 15, 16, 24, 25, 27], "step": [0, 1, 3, 5, 6, 15, 16], "back": [0, 15, 16, 28], "pysim": 0, "invok": [0, 3, 28], "rtlil": 0, "verilog": [0, 3, 5, 6, 16, 26], "test": [0, 1, 6, 14, 23, 24, 26, 27], "icepack_opt": 0, "latticeice40platform": [0, 3], "osch": 0, "default_clk": 0, "sourc": [0, 1, 3, 4, 5, 6, 16, 21, 24, 26, 28], "latticemachxo2platform": 0, "latticemachxo3lplatform": 0, "xrai": [0, 13], "xilinxplatform": [0, 7, 13], "artix": 0, "ultrascal": 0, "part": [0, 1, 3, 14, 15, 16, 17, 21, 25, 28], "gowinplatform": [0, 7, 9], "lattice_machxo2": 0, "lattice_machxo_2_3l": 0, "latticemachxo2or3lplatform": 0, "svf": [0, 10], "program": [0, 1, 3, 6, 10, 16], "vector": [0, 10], "xilinx_spartan_3_6": 0, "xilinxspartan3aplatform": 0, "xilinxspartan6platform": 0, "xilinx_7seri": 0, "xilinx7seriesplatform": 0, "xilinx_ultrascal": 0, "xilinxultrascaleplatform": 0, "project": [0, 1, 5, 6, 22, 26], "nm": 0, "prelud": [0, 4, 14], "am": [0, 3, 14], "adjust": 0, "nmigen_board": 0, "amaranth_board": [0, 16], "board": [0, 4, 16], "switch": [0, 21, 24], "inherit": [0, 3, 14, 21, 23, 28], "miss": [0, 1, 15], "fhdltestcas": 0, "assertform": 0, "ab": [0, 3, 14], "rotate_left": [0, 3, 14], "rotate_right": [0, 3, 14], "shift_left": [0, 3, 14], "shift_right": [0, 3, 14], "divis": [0, 3, 14], "modulo": [0, 3, 14], "divisor": [0, 16], "pulsesynchron": [0, 17, 18], "asyncffsynchron": [0, 17, 18], "asyncfifo": [0, 17, 23], "write": [0, 1, 3, 7, 15, 16, 23, 24, 25, 28], "r_rst": [0, 23], "r_level": [0, 23], "w_level": [0, 23], "backend": [0, 16], "larger": [0, 3, 19], "65536": 0, "emit": [0, 3, 28], "yosi": [0, 1, 5, 6, 8, 9, 10, 12, 13], "attribut": [0, 1, 3, 6, 16, 19, 21, 23, 24, 25, 26, 27, 28], "instal": [0, 1, 4, 12, 16], "fall": [0, 17, 24], "pypi": [0, 5, 6], "packag": [0, 1, 5, 16, 26], "builtin": [0, 5], "cxxrtl": 0, "multipl": [0, 3, 6, 14, 15, 27, 28], "fragment": [0, 3, 14], "advanc": [0, 6, 15, 16, 28], "execute_remote_ssh": 0, "vcd": [0, 15, 16, 27], "output": [0, 1, 3, 4, 12, 14, 15, 16, 17, 18, 19, 23, 25, 27, 28], "top": [0, 3, 15, 16, 24], "bench": [0, 6, 16], "contain": [0, 1, 3, 5, 6, 14, 15, 16, 19, 20, 21, 24, 25, 26, 27, 28], "sb_lfosc": 0, "sb_hfosc": 0, "binari": [0, 3, 8, 9, 10, 12, 13], "bitstream": [0, 8, 9, 10, 12, 13, 16], "grade": [0, 29], "famili": [0, 5, 6, 10, 21], "temperatur": 0, "speed": [0, 6, 15], "symbiflow": [0, 11, 13], "separ": [0, 5, 17], "flash": [0, 6, 10, 16], "sram": [0, 8, 10], "_flash": [0, 10], "_sram": [0, 10], "quicklogicplatform": [0, 7, 11], "cyclonev_oscil": 0, "add_set": [0, 8], "add_constraint": [0, 8, 10, 11, 12, 13], "mistral": [0, 8], "synth_design_opt": [0, 13], "No": [0, 21, 28], "publish": [0, 15, 26], "under": [0, 3, 14, 21, 26, 28], "collect": [1, 3, 6, 28], "mani": [1, 3, 6, 14, 16, 19, 25, 26, 28], "peopl": 1, "collabor": 1, "over": [1, 19, 21, 25], "year": 1, "would": [1, 3, 14, 15, 19, 21, 25, 26, 27, 28], "everyon": 1, "": [1, 3, 6, 14, 15, 16, 18, 19, 21, 23, 24, 25, 27, 28, 29], "uniqu": [1, 3, 26], "perspect": 1, "we": [1, 3, 24], "re": [1, 15, 19, 22, 24], "glad": 1, "you": [1, 3, 5, 14, 15, 18, 19, 25, 27], "consid": [1, 3, 6, 14, 16, 18, 21, 24, 26, 28, 29], "join": 1, "u": [1, 15, 25], "page": 1, "through": [1, 3, 6, 14, 15, 17, 21, 25, 26, 27, 28], "some": [1, 3, 6, 14, 16, 24, 25, 27, 28], "best": 1, "tool": [1, 3, 6, 8, 9, 10, 11, 12, 13, 26, 28], "hear": 1, "about": [1, 3, 14, 15, 17, 26, 28], "encount": [1, 14, 15], "crucial": [1, 3], "care": [1, 3], "lot": 1, "correct": [1, 3, 15, 17, 28], "result": [1, 3, 14, 15, 16, 21, 22, 24, 25, 26, 27, 28], "experi": [1, 3], "just": [1, 3, 15, 21, 22], "much": [1, 25], "meant": [1, 28], "comfort": 1, "fewer": [1, 3], "sharp": 1, "edg": [1, 3, 5, 15, 16, 18, 24, 25, 27], "matter": [1, 21], "how": [1, 3, 5, 15, 21, 28], "technolog": 1, "appeal": 1, "might": [1, 15], "more": [1, 3, 6, 14, 15, 16, 21, 24, 25, 26, 27, 28], "guardrail": 1, "pleas": 1, "To": [1, 3, 5, 6, 14, 15, 16, 21, 25, 28], "go": [1, 6, 14, 17, 28], "beyond": [1, 3, 28], "see": [1, 3, 14, 15, 16, 18, 20, 24, 28], "understand": [1, 3, 15, 28], "mislead": 1, "especi": [1, 3, 6], "think": 1, "did": [1, 5], "someth": 1, "wrong": [1, 3, 24, 28], "inform": [1, 8, 10, 12, 16, 21, 26, 28], "exact": [1, 14, 15, 21, 27], "version": [1, 4, 5, 14, 17, 26], "find": [1, 26], "c": [1, 3, 10, 14, 22, 28], "__version__": 1, "complet": [1, 3, 14, 15, 19], "self": [1, 3, 6, 14, 15, 16, 19, 21, 22, 24, 25, 26, 27, 28], "demonstr": [1, 14, 16, 27, 28], "feasibl": [1, 14], "sequenc": [1, 14, 15, 18, 21], "reproduc": [1, 6], "what": [1, 3, 25, 28], "expect": [1, 3, 15, 21, 27, 28], "happen": [1, 3, 25], "possibl": [1, 3, 6, 14, 15, 22, 24, 25, 27, 28], "verbatim": 1, "log": [1, 8, 10, 12, 13], "termin": [1, 3], "For": [1, 3, 5, 14, 15, 19, 21, 22, 24, 25, 26, 27, 28], "reason": [1, 3, 15, 28], "why": [1, 28], "There": [1, 3, 14, 25, 28], "person": [1, 26], "who": 1, "should": [1, 3, 5, 14, 15, 16, 18, 21, 23, 24, 25, 28], "submit": [1, 21], "valuabl": 1, "own": [1, 3, 19, 21], "right": [1, 3, 14, 21], "appreci": 1, "open": [1, 3, 5, 6, 15, 16], "commun": [1, 6, 15, 21, 27, 28, 29], "tend": 1, "opportun": 1, "enjoi": 1, "pull": [1, 5], "howev": [1, 3, 5, 14, 15, 18, 21, 25, 26, 27, 28], "unless": [1, 3, 14, 15, 23, 24, 26, 28], "ve": 1, "few": [1, 3, 16, 21, 26, 27, 28], "befor": [1, 3, 5, 10, 13, 15, 27, 28], "truli": 1, "trivial": 1, "discuss": [1, 28], "maintain": [1, 6, 18], "doesn": [1, 26, 28], "sometim": [1, 3, 6, 28], "save": [1, 10, 15], "unnecessari": 1, "frustrat": 1, "languag": [1, 2, 15, 16, 17, 24, 26, 28], "toolchain": [1, 2, 3, 5, 8, 9, 10, 11, 12, 13, 16, 25], "from": [1, 5, 6, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "kind": [1, 3, 15, 21, 28], "everi": [1, 3, 6, 14, 15, 16, 18, 19, 21, 25, 28], "unavoid": 1, "tightli": [1, 3, 28], "coupl": 1, "seemingli": 1, "obviou": 1, "appar": 1, "minor": 1, "decis": [1, 3], "dramat": 1, "consequ": [1, 6, 28], "sure": [1, 5], "undergo": 1, "scrutini": 1, "commit": [1, 5, 26], "impact": 1, "chanc": 1, "voic": 1, "heard": 1, "substanti": 1, "must": [1, 3, 12, 14, 15, 17, 18, 19, 21, 22, 24, 25, 26, 27, 28], "formal": [1, 29], "comment": [1, 14, 17], "well": [1, 3, 5, 6, 14, 15, 16, 21, 25, 27, 28], "typic": [1, 6, 24], "after": [1, 3, 5, 8, 10, 12, 13, 15, 18, 19, 23, 24, 25, 28], "round": [1, 23], "review": [1, 14, 17], "achiev": [1, 6], "unanim": 1, "consensu": 1, "pdm": 1, "manag": [1, 3, 15, 21], "develop": [1, 16, 21, 26, 27], "workflow": [1, 5, 6, 16], "download": [1, 6, 16], "latest": 1, "onc": [1, 3, 14, 15, 16, 18, 21, 24, 27, 28], "done": [1, 3, 14, 15, 19, 21, 27], "so": [1, 3, 5, 6, 15, 16, 18, 19, 21, 24, 25, 28], "dev": 1, "virtual": [1, 15, 25, 28], "locat": [1, 4, 16, 24, 28], "venv": 1, "runtim": 1, "itself": [1, 3, 10, 14, 15, 16, 19, 21, 22, 26, 28], "edit": [1, 16], "mode": [1, 3], "mean": [1, 3, 14, 24, 25, 28], "immedi": [1, 3, 5, 14, 15, 18, 25], "reflect": [1, 14, 19, 25], "pick": 1, "up": [1, 3, 15, 16, 21, 23, 28, 29], "good": [1, 3, 10], "habit": 1, "each": [1, 3, 6, 14, 15, 19, 21, 24, 25, 27, 28], "tree": [1, 3, 6], "frontend": 1, "yices2": 1, "smt": 1, "solver": 1, "These": [1, 3, 6, 14, 21, 27, 28], "distribut": [1, 5, 25], "oss": 1, "cad": 1, "suit": [1, 25], "reli": [1, 3, 6, 15, 28], "verif": [1, 6, 28, 29], "skip": [1, 14, 15], "doc": 1, "_build": 1, "html": 1, "involv": [1, 3], "small": [1, 3, 14, 16], "labor": [1, 6, 21], "rebuild": 1, "start": [1, 3, 4, 6, 15, 19, 21, 28], "automat": [1, 3, 16, 22], "live": 1, "brows": 1, "http": [1, 5, 26, 28], "127": [1, 3], "0": [1, 3, 4, 5, 14, 15, 16, 21, 22, 24, 25, 26, 27, 28], "1": [1, 3, 4, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "8000": 1, "browser": [1, 4], "short": [1, 3, 28], "keep": [1, 28], "ey": 1, "syntact": 1, "refer": [1, 3, 4, 17, 19, 24, 25, 28], "occasion": 1, "builder": 1, "persist": [1, 3], "render": 1, "incorrect": 1, "outdat": 1, "content": [1, 15, 24, 25, 27], "our": 1, "guidelin": 1, "evolv": 1, "section": [1, 3, 7, 15, 16, 21, 28], "incomplet": [1, 4, 14], "fundament": [1, 21], "contract": 1, "afford": 1, "implement": [1, 3, 6, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "becaus": [1, 3, 5, 14, 15, 21, 25, 28], "truth": [1, 21, 28], "secondari": 1, "rfc": [1, 27], "exist": [1, 3, 6, 19, 23, 26, 28], "outcom": 1, "corollari": 1, "previou": [1, 5, 15, 19, 21, 24], "difficult": [1, 3, 15, 26, 27], "readili": 1, "understood": 1, "need": [1, 3, 6, 14, 15, 18, 21, 23, 25, 26, 28], "break": [1, 3, 14, 15], "librari": [1, 3, 4, 14, 18, 24, 25, 27], "easier": [1, 3, 6], "Be": [1, 3], "consist": [1, 6, 15, 18, 24, 27, 28], "inspir": 1, "don": [1, 3], "expens": [1, 6], "clariti": [1, 3, 15, 16, 28], "concis": [1, 3, 21, 28], "easi": [1, 3, 6], "boilerpl": [1, 21, 28], "navig": 1, "paramet": [1, 3, 14, 15, 16, 17, 18, 21, 23, 24, 25, 26, 27, 28], "docstr": 1, "addition": [1, 14, 15, 25], "fact": [1, 3], "isn": [1, 14, 27], "correspond": [1, 3, 14, 15, 16, 19, 21, 22, 25, 27, 28], "mainli": 1, "clutter": 1, "goal": [1, 3, 28], "transfer": [1, 6, 17, 18, 25, 28], "knowledg": [1, 28], "tick": [1, 3, 15, 16, 24, 27], "box": [1, 6, 16], "limit": [1, 3, 6, 16, 24, 27, 28], "sphinx": 1, "100": [1, 3, 18], "column": 1, "py": [1, 16], "paragraph": 1, "rst": [1, 3, 15, 16], "head": 1, "third": [1, 6, 14, 17, 21], "ones": [1, 6, 14, 15, 21, 25, 28], "var_nam": 1, "testcod": 1, "block": [1, 6, 15, 16, 18, 23, 25, 28], "cannot": [1, 3, 14, 15, 19, 21, 23, 24, 25, 26, 28], "doctest": 1, "admonit": 1, "sparingli": 1, "paid": 1, "attent": 1, "els": [1, 16, 18, 24, 25, 27, 28], "unexpect": [1, 3, 6], "bad": 1, "thing": 1, "notic": [1, 14], "yellow": 1, "moment": [1, 3, 6, 15, 16, 24], "tip": 1, "otherwis": [1, 3, 5, 14, 15, 16, 18, 21, 24, 25, 28], "annoy": 1, "bright": [1, 21], "blue": [1, 21], "green": [1, 21], "kei": [1, 3, 14, 21, 24, 28], "topic": 1, "whole": [1, 3], "least": [1, 3, 6, 14, 15, 17, 19, 21, 23, 24, 25, 28], "faint": 1, "todo": 1, "also": [1, 3, 6, 14, 15, 16, 17, 19, 21, 22, 23, 24, 25, 27, 28], "phrase": 1, "descript": [1, 3, 6, 14, 15, 17, 21, 26, 28], "imper": [1, 3], "sentenc": 1, "properti": [1, 3, 21, 24, 25, 26, 27, 28], "declar": [1, 16, 28], "standard": [1, 2, 3, 4, 8, 10, 12, 14, 16, 19, 22, 26, 27, 28], "anchor": 1, "_lang": 1, "lang": [1, 5, 26, 28], "global": [1, 26], "sequenti": 1, "logic": [1, 6, 14, 16, 23, 24, 25], "term": [1, 3, 19, 24, 25], "combin": [1, 4, 14, 16, 19, 21, 24, 25, 27, 28], "combinatori": 1, "yet": [1, 18, 25], "ask": 1, "effort": [1, 6, 16], "modifi": [1, 25, 27, 28], "spirit": 1, "surround": 1, "dure": [1, 3, 6, 15, 18, 21, 24], "doubt": 1, "mondai": 1, "00": 1, "utc": 1, "irc": 1, "channel": [1, 21], "libera": 1, "chat": 1, "matrix": 1, "org": [1, 26, 28], "bridg": 1, "appear": [1, 3, 15, 21, 23, 24, 28], "user": [1, 3, 5, 14, 16, 21, 22, 26], "contributor": 1, "newli": [1, 15, 28], "warrant": 1, "broad": [1, 17], "primari": 1, "avenu": 1, "want": [1, 14, 19, 29], "interest": [1, 14], "evolut": 1, "simpli": 1, "feel": 1, "free": 1, "attend": 1, "abl": [1, 3, 15, 24], "publicli": [1, 26], "summari": 1, "post": 1, "relev": [1, 14, 15, 28], "github": [1, 5], "thread": 1, "system": [2, 3, 4, 16, 27, 28], "chip": [2, 28], "toolkit": 2, "introduc": [3, 15, 28], "depth": [3, 23, 25, 27], "familiar": [3, 14, 15], "digit": [3, 6, 17], "requir": [3, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 21, 24, 25, 26, 27, 28], "prior": 3, "hardwar": [3, 6, 15, 17, 19, 25, 26], "tutori": [3, 4, 16], "introduct": [3, 4, 14, 16, 17], "detail": [3, 15, 16, 18, 28], "underli": [3, 14, 21, 22, 24], "regular": 3, "root": [3, 12, 26], "carefulli": 3, "curat": 3, "export": [3, 10, 14, 22, 28], "amount": [3, 6, 14, 16, 21, 24, 25], "essenti": [3, 6, 17, 19, 28], "nearli": 3, "dedic": 3, "practic": [3, 27, 28], "glob": [3, 14], "readabl": [3, 6, 28], "frown": 3, "upon": 3, "convent": [3, 6], "alia": 3, "exampl": [3, 14, 15, 16, 17, 20, 21, 26, 28], "signed": [3, 14, 21, 28], "5": [3, 4, 15, 16, 20, 21, 22, 24, 28], "known": [3, 6, 10, 14, 15, 17, 19, 21, 25], "upfront": [3, 14], "conveni": [3, 14, 21, 25, 28], "alias": [3, 14], "v": [3, 16], "retriev": [3, 14, 15, 20, 21, 25, 26, 28], "3": [3, 4, 5, 15, 16, 20, 21, 25, 28], "basic": [3, 15, 16], "number": [3, 8, 14, 15, 18, 21, 23, 24, 25, 28], "store": [3, 5, 15, 21, 24, 25], "anywher": [3, 21], "interpret": [3, 5, 14, 28], "two": [3, 12, 14, 15, 19, 21, 24, 25, 27, 28], "complement": [3, 14, 24, 27], "simplest": 3, "ten": 3, "minus_two": 3, "2": [3, 4, 14, 15, 16, 18, 22, 23, 24, 25, 27, 28], "abov": [3, 14, 15, 16, 27, 28], "omit": [3, 5], "posit": [3, 14, 19, 21, 24, 28], "smallest": 3, "As": [3, 5, 14, 16, 17, 21], "4": [3, 4, 15, 16, 20, 21, 22, 24, 26], "truncat": [3, 14], "fit": [3, 14, 26], "although": [3, 6, 15, 16, 24, 28], "rare": [3, 14, 21, 28], "permit": 3, "360": 3, "104": 3, "129": 3, "indirectli": [3, 15], "shorthand": 3, "r": [3, 14, 25], "produc": [3, 6, 15, 16, 18, 27, 28], "larg": [3, 15, 21, 23], "enough": [3, 14, 21], "min": 3, "max": [3, 14], "counter": [3, 4, 15, 28], "whose": [3, 14, 15, 17, 21, 25, 26, 28], "set": [3, 8, 10, 12, 13, 14, 15, 16, 18, 19, 22, 23, 24, 25, 27, 28, 29], "item": [3, 28], "exclus": 3, "half": [3, 15, 24], "element": [3, 14, 15, 21, 23, 25, 28], "power": [3, 6, 18, 23, 25], "wide": [3, 14, 19, 25, 27], "fencepost": 3, "256": [3, 21], "syntaxwarn": 3, "equal": [3, 14, 21, 22, 24, 25, 28], "inclus": 3, "off": [3, 10], "detect": [3, 19, 27, 28], "diagnost": [3, 6, 14, 16, 28], "bound": [3, 14], "finit": [3, 6], "machin": [3, 6], "multiplex": 3, "complex": [3, 6, 14, 15, 21, 25, 26, 27, 28], "distinct": [3, 21], "direct": [3, 6, 15, 21, 24, 26, 28], "bottom": 3, "funct4": 3, "sub": [3, 22], "mul": [3, 22], "prevent": [3, 14, 15], "unwant": 3, "facil": [3, 19, 21, 26, 28], "equival": [3, 14, 15, 21, 22, 28], "d5": 3, "d1": [3, 16, 28], "subset": [3, 21, 25], "operand": [3, 14, 22], "numer": [3, 15], "6": [3, 4, 20, 21, 24], "d26": 3, "funct": [3, 22], "op": [3, 22], "reg": [3, 16, 22], "imm": [3, 22], "instr": [3, 22], "addi": [3, 22], "At": [3, 6, 15, 24], "expand": 3, "potenti": [3, 6, 28], "vari": [3, 15], "respect": [3, 25, 28], "uniniti": [3, 25], "undefin": [3, 15, 25], "waveform": [3, 5, 15, 16, 24], "viewer": [3, 5, 15], "place": [3, 5, 6, 13, 14, 16, 22, 28], "foo": [3, 22, 28], "bar": [3, 22], "foo2": 3, "second_foo": 3, "prepar": [3, 15], "synthesi": [3, 6, 12, 13], "ambigu": [3, 24, 25], "zero": [3, 14, 15, 21, 23, 25], "none": [3, 10, 13, 14, 15, 16, 18, 24, 25, 27, 28], "resett": [3, 18], "reset_less": [3, 18], "via": [3, 5, 6, 14, 21, 24, 25, 26, 27, 28], "resetinsert": [3, 14], "affect": [3, 5, 15, 24, 28], "rich": [3, 6], "themselv": 3, "concret": [3, 14, 21], "calcul": 3, "contrast": 3, "abstract": [3, 14, 17, 21, 24, 25, 26, 27], "circuit": [3, 4, 6, 14], "synthes": [3, 5, 6, 10, 12, 13, 15, 16], "ordinari": [3, 6], "sig": [3, 16, 21, 22, 28], "rememb": 3, "higher": [3, 14, 15, 18, 24], "traceback": [3, 21, 22, 28], "recent": [3, 19, 21, 22, 28], "last": [3, 5, 15, 21, 22, 28], "typeerror": [3, 14, 15, 21, 22, 24, 28], "attempt": [3, 25], "boolean": [3, 14], "therefor": [3, 19], "execut": [3, 15], "decid": 3, "whether": [3, 6, 14, 15, 16, 19, 25, 27, 28], "bodi": [3, 15, 28], "long": [3, 14, 19], "finish": [3, 15, 16], "solv": 3, "problem": [3, 4, 27, 28], "manipul": [3, 14, 15, 21, 27, 28], "OR": [3, 14, 22], "select": [3, 14, 15, 24, 25], "regardless": 3, "too": 3, "unlimit": 3, "precis": [3, 21], "overflow": [3, 16, 28], "suffici": [3, 21, 28], "similarli": [3, 5, 27, 28], "either": [3, 5, 14, 15, 18, 21, 22, 25, 26, 28], "128": 3, "382": 3, "signific": [3, 6, 14, 19, 21, 25], "tabl": 3, "negat": [3, 14, 22], "subtract": [3, 14], "floor": [3, 14], "due": [3, 25, 28], "chain": [3, 15, 18], "inequ": [3, 14], "greater": [3, 14], "effici": [3, 15, 25, 27], "NOT": [3, 14], "AND": [3, 14, 22], "xor": [3, 14, 19, 22], "revers": [3, 19, 27, 28], "exponenti": 3, "wider": 3, "intermedi": [3, 15], "stress": 3, "32": [3, 16, 19, 20, 21, 26, 28], "4294967296": 3, "veri": [3, 21, 28], "sidewai": 3, "pair": [3, 14, 24, 28], "between": [3, 6, 14, 15, 17, 18, 21, 23, 24, 25, 27, 28], "unari": [3, 14], "sole": [3, 14, 28], "odd": [3, 14], "bool": [3, 14, 18, 19, 21, 24, 26, 27, 28], "conceptu": [3, 15, 25], "unlik": 3, "chang": [3, 4, 5, 6, 14, 15, 17, 21, 25, 27, 28], "p": [3, 24, 27], "q": 3, "preced": 3, "wherea": [3, 28], "parenthes": 3, "around": [3, 24, 28], "subtl": [3, 6], "en": [3, 15, 16, 25, 28], "addr": [3, 21, 25, 26, 28], "d0": [3, 21, 22], "stb": 3, "use_stb": 3, "msb": [3, 27], "sd": 3, "misus": [3, 6], "apart": 3, "act": [3, 22, 23, 28], "concaten": [3, 24, 28], "clash": 3, "except": [3, 14, 15, 21, 24, 25, 26, 27, 28], "singl": [3, 6, 14, 15, 16, 21, 22, 24, 28], "subscript": 3, "often": [3, 6, 21, 28], "offset": [3, 14, 21], "notat": 3, "length": [3, 21, 24, 25], "j": [3, 14], "k": [3, 14], "bit_select": [3, 14, 24], "w": [3, 16, 25], "overlap": [3, 14, 21, 27], "word_select": [3, 14], "word": [3, 14, 15, 19, 24, 27, 28], "talk": 3, "convention": 3, "variat": 3, "occupi": 3, "explain": [3, 5], "0th": 3, "expon": [3, 21], "mismatch": [3, 5, 27], "caus": [3, 14, 15, 18, 24, 26, 27], "confus": [3, 25, 28], "0b1001": 3, "0b1010": 3, "0b1010_1001": 3, "val": [3, 16], "Such": [3, 15, 27, 28], "avoid": [3, 5, 6, 14, 15, 24, 27], "seem": [3, 25], "natur": 3, "alon": 3, "could": [3, 15, 17, 18, 21, 24, 25, 26, 27, 28], "ye": 3, "deliber": 3, "option": [3, 6, 8, 10, 12, 13, 15, 16, 18, 22, 28], "examin": [3, 28], "str": [3, 14, 15, 18, 21, 23, 24, 25, 26, 28], "mask": 3, "whitespac": 3, "charact": [3, 25], "compar": [3, 15, 21, 22, 23, 28], "leftmost": 3, "lowest": [3, 18], "succe": 3, "correspondingli": [3, 28], "asid": [3, 15, 28], "space": [3, 23], "tab": 3, "ignor": [3, 14, 28], "01": 3, "0b0000_0110": 3, "0b0000_0010": 3, "reinterpret": [3, 14], "pc": 3, "mux": [3, 14], "sel": 3, "val1": 3, "val0": 3, "condit": [3, 6, 14, 15, 16, 23, 27], "mutabl": [3, 25, 28], "behav": [3, 22], "proxi": [3, 21, 28], "three": [3, 14, 15, 17, 21, 27], "transform": [3, 21, 27], "origin": [3, 5, 26, 28], "target": [3, 18, 21, 22, 28], "final": [3, 6, 15, 28], "pixel": [3, 21], "180": 3, "92": 3, "230": 3, "74": 3, "130": 3, "115": 3, "becom": [3, 15, 19, 23, 27], "recommend": [3, 6, 14], "mutat": [3, 28], "unpredict": 3, "serv": [3, 21, 26, 28], "unit": [3, 27], "independ": [3, 24, 25, 27], "associ": [3, 15, 21, 24, 25, 28], "fresh": 3, "group": [3, 21], "ident": [3, 14, 19, 23, 25, 28], "predefin": [3, 17, 20], "comb": [3, 15, 16, 21, 24, 25, 26, 27, 28], "reserv": [3, 21], "specif": [3, 5, 6, 14, 15, 18, 19, 21, 24, 25, 26, 27, 28], "occur": [3, 15, 27], "asynchron": [3, 6, 15, 18, 23, 25], "lack": [3, 6, 27], "feedback": [3, 27, 28], "loop": [3, 6, 15, 25], "hold": [3, 14, 15, 16], "effect": [3, 15, 24, 25, 28], "0b11": 3, "d3": 3, "entir": [3, 15, 16, 19, 24, 26], "def": [3, 14, 15, 16, 21, 22, 24, 25, 26, 27, 28], "add_toggl": 3, "num": 3, "f": [3, 9, 14, 16, 27, 28], "sync_": 3, "driven": [3, 6, 15, 18, 24, 25, 27], "undriven": 3, "exactli": [3, 14, 15, 21, 22, 24, 25, 28], "dsl": 3, "syntaxerror": [3, 14], "driver": 3, "conflict": [3, 28], "try": [3, 5, 15], "drive": [3, 15, 16, 24, 28], "alreadi": [3, 15, 16, 28], "snippet": [3, 14], "determin": [3, 14, 15, 25, 27, 28], "tailor": 3, "task": [3, 6, 26], "context": [3, 15, 28], "timer": [3, 16], "superfici": 3, "branch": [3, 5], "insid": [3, 28], "observ": [3, 15], "satisfi": [3, 15, 28], "uncondition": 3, "further": [3, 6, 18, 27], "cond1": 3, "cond2": 3, "parallel": [3, 19, 24], "x_coord": 3, "is_bporch": 3, "364": 3, "is_act": 3, "374": 3, "is_fporch": 3, "within": [3, 14, 25, 26, 28], "full": [3, 5, 28], "is_even": 3, "is_odd": 3, "too_big": 3, "whichev": 3, "earlier": [3, 12], "programmat": 3, "particularli": 3, "squar": 3, "simpl": [3, 5, 6, 16, 21, 24, 25, 26, 28], "choos": [3, 16], "enter": 3, "cycl": [3, 15, 16, 18, 19, 23, 24, 25, 27], "bu": [3, 15, 26, 28], "transact": [3, 15], "bus_addr": 3, "16": [3, 15, 16, 19, 20, 21, 24, 25, 26, 27, 28], "r_data": [3, 15, 23, 26, 28], "r_en": [3, 23, 26], "latch": [3, 23], "address": [3, 21, 25, 26, 28], "0x1234": 3, "strobe": [3, 23], "again": [3, 15, 27], "belong": [3, 25, 27], "dom": 3, "current": [3, 10, 15, 19, 27, 28], "captur": [3, 15, 24, 27, 28], "ongo": 3, "whenev": [3, 14, 15, 19, 24, 27, 28], "y": [3, 25, 28], "past": [3, 4], "typo": 3, "unreach": 3, "hazard": 3, "elimin": [3, 6, 18], "lead": [3, 19], "surpris": 3, "nest": [3, 28], "innermost": 3, "outer": [3, 28], "inner": [3, 28], "shorten": 3, "unstabl": 3, "ring": 3, "oscil": [3, 16], "prohibit": [3, 27], "exceedingli": 3, "desir": 3, "technologi": 3, "devic": [3, 6, 10, 12, 24, 25, 27], "lut": [3, 25], "transit": [3, 15, 27], "configur": [3, 6, 16, 18, 19, 25, 28], "down": [3, 25], "increment": [3, 15, 16], "decrement": 3, "retain": [3, 16], "violat": 3, "meaningless": [3, 28], "guard": 3, "ip": 3, "pointer": 3, "boot": 3, "glitch": [3, 15], "instantan": 3, "transient": [3, 15], "visibl": [3, 15], "afterward": [3, 25], "safe": [3, 6, 18, 22, 27], "neither": [3, 15, 22, 28], "ip_sync": 3, "elsewher": [3, 28], "taken": [3, 15, 28], "old_stat": 3, "sep": 3, "helper": [3, 16, 27, 28], "08x": 3, "rule": [3, 6, 14, 17, 21], "0b111": 3, "unalign": 3, "video": 3, "cd_video": 3, "add_video_domain": 3, "cd": [3, 5], "video_": 3, "domain_nam": 3, "invoc": [3, 6, 16], "clk": [3, 15, 16, 24], "By": [3, 6], "jtag": [3, 10], "clk_edg": [3, 15], "high": [3, 6, 15, 21, 24, 25, 27], "nevertheless": [3, 28], "undesir": [3, 6], "startup": [3, 15], "subject": [3, 14, 22], "intention": 3, "undocu": 3, "enableinsert": [3, 14], "clocksign": [3, 14], "resetsign": [3, 14], "bus_clk": 3, "bus_rstn": 3, "found": 3, "With": [3, 5, 16], "cd_sync": [3, 15, 24], "consult": 3, "document": [3, 4, 6, 14, 15, 16, 17, 20, 24, 25, 28], "your": [3, 4, 5, 14, 18, 27, 28], "platform": [3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 24, 25, 26, 27, 28], "fpga": [3, 5, 16, 18, 23, 24, 25, 29], "disabl": [3, 15, 16], "divid": [3, 25], "built": [3, 6, 14, 16, 21, 24, 26, 27], "smaller": 3, "subdivis": 3, "compos": [3, 28], "deleg": [3, 14], "netlist": [3, 6, 12, 13, 14, 24], "receiv": [3, 15, 19, 24, 28], "inject": [3, 24], "experiment": [3, 5], "twice": [3, 14, 28], "correctli": [3, 6, 15, 16, 23, 25, 28], "rel": [3, 25], "guarante": [3, 14, 15, 17, 18], "counter_": 3, "autogener": 3, "suppli": [3, 6], "alter": 3, "input": [3, 4, 14, 15, 16, 17, 18, 19, 23, 25, 27], "map": [3, 13, 21, 26, 28], "shorter": 3, "common": [3, 6, 16, 17, 27], "forward": 3, "held": 3, "z": 3, "applic": [3, 5, 6, 15, 16, 21, 27, 28], "resetsynchron": [3, 17, 18], "reusabl": [3, 6, 15, 16], "leav": [3, 21, 28], "domainrenam": [3, 14], "integr": [3, 4, 15, 16, 26, 29], "interoper": [3, 16, 17, 28], "extern": [3, 15, 21, 24, 26, 27, 28], "circuitri": 3, "bundl": 3, "carri": [3, 28], "uninterpret": 3, "unidirect": [3, 27], "electr": [3, 24], "analog": 3, "travers": 3, "topmost": 3, "clk_port": 3, "unambigu": [3, 28], "13": [3, 20], "lower": [3, 21], "indic": [3, 14, 15, 19, 21, 27, 28], "vhdl": [3, 6], "translat": [3, 28], "entiti": [3, 26], "Not": 3, "parameter": 3, "inout": 3, "bidirect": 3, "identifi": [3, 17, 21], "a_anam": 3, "attr": [3, 28], "anam": 3, "p_pname": 3, "param": [3, 21], "pname": 3, "i_inam": 3, "in_val": 3, "inam": 3, "o_onam": 3, "out_val": 3, "onam": 3, "io_ionam": 3, "inout_v": 3, "ionam": 3, "processor": [3, 19], "p_width": 3, "i_clk": 3, "i_rst": 3, "i_en": 3, "i_mod": 3, "i_data_in": 3, "i_data": 3, "o_data_out": 3, "o_data": 3, "io_pin": 3, "data_in": 3, "data_out": 3, "convein": 3, "adorn": 3, "flipflop": 3, "__init__": [3, 16, 21, 22, 24, 26, 28], "isinst": [3, 14, 28], "sb_dff": 3, "i_c": 3, "i_d": 3, "o_q": 3, "rais": [3, 14, 15, 21, 22, 24, 25, 26, 28], "notimplementederror": 3, "privat": [3, 15], "four": [3, 15, 21, 27, 28], "tristat": 3, "combination": 3, "port_i": 3, "port_o": 3, "oe": [3, 24], "imped": 3, "progress": [4, 14], "serious": [4, 14], "playground": 4, "prerequisit": 4, "blink": [4, 24], "guid": [4, 14, 15, 16, 19, 28], "arrai": [4, 14, 17, 21, 28], "control": [4, 6, 15, 16, 26, 27, 28], "flow": [4, 6, 27, 28], "evalu": [4, 15, 16], "synchron": [4, 6, 16, 18, 23, 24, 25, 27], "debug": [4, 5, 6, 15, 16], "elabor": [4, 14, 15, 16, 18, 24, 25, 26, 27, 28], "backward": [4, 17], "cross": [4, 6, 17], "queue": [4, 17, 27], "cyclic": [4, 17], "redund": [4, 17, 28], "check": [4, 14, 15, 16, 17, 28], "altera": [4, 7], "lattic": [4, 7, 12, 16], "siliconblu": [4, 7], "changelog": 4, "releas": [4, 14, 18, 27], "unreleas": 4, "contribut": 4, "report": [4, 6, 8, 12, 13, 28], "propos": 4, "codebas": 4, "style": [4, 6], "weekli": 4, "meet": [4, 25], "anyth": [5, 14], "visit": 5, "webpag": 5, "fulli": [5, 14, 19], "displai": [5, 6, 15], "modern": 5, "webassembli": 5, "firefox": 5, "chrome": 5, "40": [5, 20], "newer": 5, "cpython": 5, "faster": [5, 18], "pypy3": 5, "pip": 5, "23": [5, 21], "popular": 5, "softwar": [5, 19], "surfer": [5, 15], "gtkwave": [5, 15], "invalu": 5, "altern": [5, 21], "rout": [5, 6, 13, 16], "ice40": [5, 10, 12, 16], "ecp5": [5, 10], "machxo2": [5, 10], "nexu": [5, 10], "yowasp": 5, "x86_64": 5, "aarch64": 5, "continu": [5, 15, 25, 29], "64": [5, 20], "upgrad": 5, "maco": 5, "homebrew": 5, "Then": [5, 25], "brew": 5, "debian": 5, "sudo": 5, "apt": 5, "python3": [5, 16], "On": [5, 10, 15, 18, 24, 25, 27], "architectur": [5, 19], "pip3": 5, "linux": [5, 10], "repositori": [5, 6], "main": 5, "reliabl": [5, 6, 28], "flux": 5, "mind": 5, "git": 5, "com": 5, "directori": 5, "crash": [5, 15], "clone": 5, "ff": 5, "aim": 6, "learn": [6, 15, 29], "mistak": 6, "simplifi": [6, 15, 27], "restrict": [6, 21, 22, 27, 28], "choic": 6, "industri": 6, "convers": [6, 14, 24, 26, 28], "model": [6, 15, 17, 19], "human": [6, 28], "flexibl": [6, 21], "widespread": 6, "adopt": 6, "focus": 6, "state": [6, 14, 15, 18, 24, 25], "arithmet": [6, 14], "close": [6, 15], "organ": [6, 25], "seamlessli": [6, 14], "principl": [6, 28], "accident": 6, "parti": [6, 14, 17], "lint": 6, "synthesiz": [6, 16, 24], "prone": [6, 21, 28], "favor": 6, "regularli": 6, "highlight": 6, "importantli": [6, 14], "come": [6, 12], "focu": [6, 27], "treatment": 6, "overridden": [6, 21, 28], "gear": 6, "peripher": [6, 24, 26, 28], "migrat": 6, "Of": 6, "cours": 6, "icaru": 6, "veril": 6, "event": [6, 15], "slower": 6, "compil": 6, "ahead": 6, "remark": 6, "perform": [6, 14, 15, 19, 21, 22, 25, 27, 28], "pure": [6, 28], "co": 6, "major": [6, 28], "commerci": 6, "easili": [6, 26], "constraint": [6, 13, 16, 18], "script": [6, 8, 9, 10, 11, 12, 13], "placement": 6, "analysi": 6, "custom": [6, 14, 16, 19, 22, 23, 25], "insert": [6, 8, 9, 10, 11, 12, 13, 25, 28], "portabl": 6, "remot": 6, "nix": 6, "everyth": [6, 17, 21, 22, 28], "connector": 6, "pinout": [6, 16], "probe": 6, "show": 6, "programm": [6, 10], "establish": 6, "segment": 6, "spi": 6, "sdram": 6, "reus": [6, 15, 28], "unmodifi": 6, "polar": [6, 15, 24], "unifi": [6, 27], "invers": [6, 14, 24], "trace": [6, 15], "invert": [6, 22, 24], "latticeplatform": [7, 10], "siliconblueplatform": [7, 10, 12], "quartu": 8, "quartus_map": 8, "quartus_fit": 8, "quartus_asm": 8, "quartus_sta": 8, "popul": [8, 9, 10, 11, 12, 13, 15, 21, 28], "amaranth_env_quartu": 8, "qsf": 8, "sdc": [8, 10, 12], "nproc": 8, "quartus_map_opt": 8, "extra": [8, 10, 12, 13], "quartus_fit_opt": 8, "quartus_asm_opt": 8, "quartus_sta_opt": 8, "product": [8, 9, 10, 12, 13], "rpt": [8, 10, 12, 13], "sof": 8, "rbf": 8, "raw": [8, 13, 14, 21], "amaranth_env_mistr": 8, "verbos": [8, 10, 12, 16], "read_verilog_opt": [8, 10, 12], "read_verilog": [8, 10, 12], "synth_opt": [8, 10, 12], "synth_intel_alm": 8, "script_after_read": [8, 10, 12, 13], "read_ilang": [8, 10, 12], "script_after_synth": [8, 10, 12, 13], "yosys_opt": [8, 10, 12], "nextpnr_opt": [8, 10, 12], "apicula": 9, "uarch": 9, "gowin_pack": 9, "amaranth_env_apicula": 9, "add_prefer": [9, 10], "cst": 9, "gw_sh": 9, "amaranth_env_gowin": 9, "machxo3l": 10, "trelli": 10, "diamond": 10, "machxo3": 10, "ecppack": 10, "amaranth_env_trelli": 10, "synth_": 10, "ecppack_opt": 10, "lpf": 10, "json": [10, 12, 26, 28], "rtl": [10, 12, 13], "tim": [10, 12], "config": 10, "ascii": [10, 12], "oxid": 10, "prjoxid": 10, "amaranth_env_oxid": 10, "synth_nexu": 10, "prjoxide_opt": 10, "pdc": 10, "xcf": 10, "pnmainc": 10, "ddtcmd": 10, "diamond_env": 10, "candid": 10, "bat": 10, "echo": 10, "lscc": 10, "diamond_vers": 10, "nt64": 10, "script_project": 10, "prj_project": 10, "tcl": [10, 12, 13], "script_after_export": 10, "prj_run": 10, "xdc": [10, 11, 13], "_impl": 10, "htm": [10, 12], "consolid": 10, "jed": 10, "jedec": 10, "fuse": 10, "radiant": 10, "radiantc": 10, "amaranth_env_radi": 10, "radiant_env": 10, "radiant_vers": 10, "prj_save": 10, "symbiflow_synth": [11, 13], "symbiflow_pack": [11, 13], "symbiflow_plac": [11, 13], "symbiflow_rout": [11, 13], "symbiflow_write_fasm": [11, 13], "symbiflow_write_bitstream": [11, 13], "amaranth_env_qlsymbiflow": 11, "icestorm": 12, "icecube2": 12, "icepack": 12, "amaranth_env_icestorm": 12, "synth_ice40": 12, "add_pre_pack": 12, "pre": 12, "pack": 12, "pcf": [12, 13], "asc": 12, "variant": 12, "lse": 12, "synplifi": 12, "tclsh": 12, "amaranth_env_icecube2": 12, "lse_opt": 12, "script_after_add": 12, "script_after_opt": 12, "set_opt": 12, "script_after_flow": 12, "run_sbt_backend_auto": 12, "sbt": 12, "_lse": 12, "_design": 12, "router": 12, "_time": [12, 13], "edf": 12, "edif": 12, "ISE": 13, "vivado": 13, "amaranth_env_vivado": 13, "read_xdc": 13, "synth_design": 13, "script_after_plac": 13, "place_design": 13, "script_after_rout": 13, "route_design": 13, "script_before_bitstream": 13, "write_bitstream": 13, "script_after_bitstream": 13, "vivado_opt": 13, "_timing_synth": 13, "_utilization_hierarchical_synth": 13, "_utilization_synth": 13, "_utilization_hierarchical_plac": 13, "_utilization_plac": 13, "_io": 13, "_control_set": 13, "_clock_util": 13, "_route_statu": 13, "_drc": 13, "_methodologi": 13, "_power": 13, "_rout": 13, "dcp": 13, "checkpoint": 13, "xst": 13, "ngdbuild": 13, "par": 13, "bitgen": 13, "amaranth_env_is": 13, "script_after_run": 13, "ucf": 13, "xst_opt": 13, "ngdbuild_opt": 13, "map_opt": 13, "par_opt": 13, "bitgen_opt": 13, "compress": 13, "srp": 13, "ngc": 13, "bld": 13, "ngd": 13, "databas": 13, "_map": 13, "mrp": 13, "ncd": 13, "physic": 13, "_par": 13, "_par_pad": 13, "txt": 13, "usag": 13, "drc": 13, "bgn": 13, "amaranth_env_symbiflow": 13, "fasm2fram": 13, "xc7frames2bit": 13, "amaranth_env_xrai": 13, "impend": [14, 17], "nontrivi": [14, 17], "underscor": [14, 21, 28], "intern": [14, 21, 24, 28], "kept": [14, 21], "downstream": 14, "src_loc_at": [14, 24, 25, 27, 28], "inspect": [14, 15, 16], "stack": 14, "site": [14, 16], "consider": 14, "concept": [14, 28], "my_shape_cast": 14, "obj": [14, 21, 26, 28], "frame": 14, "obtain": [14, 19], "varieti": 14, "static": [14, 21, 28], "repeatedli": [14, 15, 21], "as_shap": [14, 21, 22], "recursionerror": [14, 21], "__repr__": [14, 28], "mechan": [14, 24, 27], "illustr": [14, 27, 28], "purpos": [14, 28], "shape_cast": 14, "value_lik": 14, "idempot": 14, "caller": [14, 15], "arbitrari": [14, 15, 18, 21, 26, 27], "liter": 14, "constrain": 14, "valueerror": [14, 15, 21, 24], "unspecifi": [14, 21], "latter": [14, 21, 25], "compliant": [14, 28], "spec": 14, "issubclass": [14, 28], "cl": [14, 28], "enummeta": 14, "comput": [14, 17, 24, 28], "abil": [14, 16, 22], "bitwis": [14, 21, 22], "__invert__": [14, 22, 24], "drop": [14, 18, 22], "union": [14, 28], "opaqu": [14, 26], "enum_shap": 14, "as_valu": [14, 21, 22], "__bool__": 14, "forbidden": [14, 28], "__pos__": 14, "__neg__": 14, "__radd__": 14, "swap": 14, "__sub__": 14, "__rsub__": 14, "__mul__": 14, "__rmul__": 14, "__floordiv__": 14, "__rfloordiv__": 14, "__mod__": 14, "remaind": 14, "__rmod__": 14, "__eq__": [14, 21, 22, 28], "comparison": [14, 22], "__ne__": 14, "__lt__": 14, "__le__": 14, "__gt__": 14, "__ge__": 14, "deviat": 14, "wasn": 14, "imposs": [14, 28], "__and__": [14, 22, 24], "__rand__": [14, 22], "reduct": 14, "__or__": [14, 22], "__ror__": [14, 22], "__xor__": [14, 22], "__rxor__": [14, 22], "__lshift__": 14, "shift": [14, 19, 25], "__rlshift__": 14, "rotat": 14, "__rshift__": 14, "__rrshift__": 14, "__len__": [14, 24], "__getitem__": [14, 21, 24, 25, 28], "trim": 14, "__contains__": [14, 28], "membership": 14, "granular": [14, 25], "success": 14, "adjac": 14, "_": [14, 15, 16, 24, 25, 27, 28], "grammar": 14, "invalid": [14, 28], "__hash__": 14, "hash": 14, "preclud": 14, "dict": [14, 15, 21, 26, 28], "assoc": 14, "id": [14, 26, 28], "info": 14, "__format__": 14, "format_desc": 14, "unsuit": 14, "realli": 14, "dump": 14, "repr": 14, "prefer": [14, 15, 25], "value_cast": 14, "discov": 14, "richer": 14, "badenum": 14, "adder": [15, 26], "dut": [15, 16, 24, 27], "stimul": 15, "nor": [15, 22, 28], "measur": 15, "stimulu": 15, "reach": [15, 16, 21, 28], "write_vcd": [15, 16, 27], "mhz": [15, 16, 24, 27], "\u00b5": 15, "example1": 15, "revert": 15, "example1_error": 15, "verifi": [15, 16, 28], "intend": [15, 28], "concurr": [15, 16, 25], "interact": [15, 25, 27, 28], "ctx": [15, 16, 24, 25, 27], "wait": [15, 27], "testbench_example2": 15, "await": [15, 16, 24, 27], "repeat": [15, 28], "5th": 15, "deassert": [15, 18, 27], "10th": 15, "example2": 15, "react": [15, 21], "testbench_example3": 15, "1717": 15, "420": 15, "2137": 15, "example3": 15, "instant": 15, "techniqu": 15, "commonli": [15, 19], "reimplement": 15, "algorithm": [15, 17], "simultan": [15, 19], "order": [15, 19, 21, 27, 28], "yield": [15, 21, 28], "inconsist": 15, "converg": 15, "rest": [15, 21, 25, 28], "process_example4": 15, "count_valu": 15, "rst_valu": 15, "en_valu": 15, "elif": [15, 16, 24, 27], "testbench_example4": 15, "example4": 15, "anytim": 15, "process_example5": 15, "a_valu": 15, "b_valu": 15, "testbench_example5": 15, "example5": 15, "toplevel": [15, 24], "exercis": [15, 29], "lifecycl": 15, "stage": [15, 18], "fast": [15, 21], "process_instr_decod": 15, "testbench_cpu_execut": 15, "amort": 15, "cost": [15, 18], "if_exist": 15, "duti": [15, 18], "coincid": [15, 24], "nameerror": [15, 28], "driverconflict": 15, "runtimeerror": 15, "creation": [15, 28], "constructor": [15, 24, 28], "background": 15, "coroutin": 15, "exit": 15, "temporarili": 15, "share": [15, 21], "coordin": 15, "procss": 15, "indefinit": 15, "regard": 15, "closest": 15, "vcd_file": 15, "gtkw_file": 15, "referenc": [15, 21], "filenam": 15, "row": [15, 25], "restart": 15, "preempt": 15, "paus": [15, 27], "expr": 15, "span": [15, 21], "arriv": 15, "elev": 15, "durat": 15, "testbench_bus_transact": 15, "rst_activ": 15, "bus_active_valu": 15, "addr_valu": 15, "r_addr": 15, "ticktrigg": 15, "look": [15, 21], "indirect": 15, "triggercombin": 15, "expir": 15, "invis": 15, "wake": 15, "handl": [15, 19, 23, 25], "spuriou": 15, "wakeup": 15, "presenc": [15, 28], "brokentrigg": 15, "statu": [15, 26, 28], "race": 15, "suitabl": 15, "posedg": [15, 16, 24, 27], "negedg": 15, "domainreset": 15, "shot": 15, "clk_hit": 15, "multi": [15, 19, 24], "respond": [15, 28], "notifi": 15, "in_a_valu": 15, "in_b_valu": 15, "in_a": 15, "in_b": 15, "advantag": 15, "append": 15, "met": 15, "discard": [15, 27], "flag_valu": 15, "flag": [15, 22, 28], "arst_edg": 15, "delay_expir": 15, "arst": [15, 18], "1e": 15, "cursori": 16, "overview": 16, "explan": [16, 28], "shown": [16, 28], "up_count": 16, "upcount": 16, "ovf": 16, "super": [16, 21, 24, 26, 28], "black": [16, 21], "25": [16, 20], "24": [16, 20, 21, 24, 28], "clear": [16, 25, 28], "successfulli": 16, "de": 16, "facto": 16, "rise": [16, 24], "lightli": 16, "auto": 16, "verilog_backend": 16, "cc": 16, "2255": 16, "dump_modul": 16, "src": 16, "ir": 16, "509": 16, "29": 16, "h0000": 16, "1647": 16, "h19": 16, "h1": 16, "full_cas": 16, "xfrm": 16, "534": 16, "endmodul": 16, "aid": 16, "unfortun": [16, 24, 25, 26], "standalon": [16, 28], "adapt": 16, "hz": 16, "ledblink": 16, "half_freq": 16, "icestick": 16, "link": [16, 28], "foss": 16, "probabl": 16, "icestickplatform": 16, "do_program": 16, "benefit": 16, "turnkei": 16, "categori": 17, "idiomat": [17, 28], "metaclass": [17, 28], "schema": [17, 28], "syncfifobuff": [17, 23, 27], "asyncfifobuff": [17, 23], "resynchronis": 18, "flip": [18, 24, 28], "flop": 18, "metast": 18, "synchronis": 18, "o_domain": [18, 24], "unaffect": 18, "mtbf": 18, "increas": [18, 23, 24], "latenc": [18, 19, 23, 24, 25, 27], "max_input_delai": 18, "maximum": [18, 24], "fail": [18, 25, 28], "safest": 18, "load": 18, "asic": [18, 25], "warm": 18, "insuffici": 18, "get_ff_sync": 18, "cell": [18, 25], "primarili": [18, 28], "async_edg": 18, "po": 18, "get_async_ff_sync": 18, "gate": 18, "promptli": 18, "get_reset_sync": 18, "puls": [18, 24], "ratio": 18, "i_domain": [18, 24], "polynomi": [19, 20], "catalog": 19, "accommod": [19, 21], "crc16_ccitt": [19, 20], "crc16_usb": [19, 20], "crc16": 19, "ccitt": 19, "byte": [19, 21, 24], "usb": 19, "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, 26], "data_width": [19, 25, 28], "123456789": 19, "0x29b1": 19, "william": 19, "painless": 19, "reveng": [19, 20], "catalogu": [19, 20], "parameteris": 19, "crcmod": 19, "polynomin": 19, "zoo": 19, "entri": [19, 23], "highest": 19, "transmiss": [19, 24, 27], "littl": 19, "endian": 19, "0x4e4c": 19, "transmit": [19, 24, 27], "octet": 19, "0x4c": 19, "0x4e": 19, "plu": [19, 21, 23, 24], "residu": 19, "trail": 19, "subsequ": 19, "throughput": 19, "per": [19, 24], "classic": 19, "serial": [19, 24], "galoi": 19, "match_detect": 19, "codeword": 19, "theori": 19, "initialis": 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_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, "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, 27], "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, "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, "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, "relat": [21, 24, 25, 28], "foundat": [21, 24], "introspect": [21, 27, 28], "structlayout": 21, "unionlayout": 21, "flexiblelayout": 21, "struct": 21, "rgb": 21, "grayscal": 21, "color": 21, "rgb565": 21, "approxim": 21, "i_color": 21, "o_grai": 21, "repetit": [21, 27, 28], "rgb565_layout": 21, "red": 21, "accumul": 21, "averag": 21, "intens": 21, "input_layout": 21, "i_stream": [21, 27], "r_accum": 21, "sum": 21, "interchang": 21, "rgb_layout": 21, "r_bit": 21, "g_bit": 21, "b_bit": 21, "rgb24_layout": 21, "rgblayout": 21, "rgbview": 21, "ieee754singl": 21, "fraction": 21, "is_subnorm": 21, "set_addr": 21, "send_data": 21, "biggest": 21, "One": [21, 27], "cmd": 21, "0x00001234": 21, "preserv": [21, 24], "invari": 21, "__iter__": [21, 28], "keyerror": 21, "size": [21, 25], "gap": 21, "pad": 21, "_1": 21, "_2": 21, "won": 21, "dictionari": [21, 28], "largest": 21, "elem_shap": 21, "multipli": 21, "contigu": 21, "boundari": [21, 28], "arbitrarili": 21, "stride": 21, "chosen": 21, "dynam": [21, 25], "as_bit": 21, "__getattr__": [21, 28], "attributeerror": [21, 28], "accord": [21, 24, 26, 27], "ieee": 21, "754": 21, "flt": 21, "hex": 21, "0x3f800000": 21, "0xbf800000": 21, "haschecksum": 21, "checksum": 21, "barehead": 21, "headerwithparam": 21, "bare": 21, "varint": 21, "int8": 21, "int16": 21, "0x100": 21, "intflag": 22, "subi": 22, "likewis": 22, "normalenum": 22, "spam": 22, "ham": 22, "flagview": 22, "wrapper": [22, 28], "stdin": 22, "loos": 22, "transparentenum": 22, "instrview": 22, "has_immedi": 22, "view_class": 22, "d16": 22, "d17": 22, "enumtyp": 22, "arg": [22, 28], "kwarg": [22, 28], "among": 22, "w_data": [23, 26, 28], "w_rdy": 23, "w_en": [23, 26], "r_rdy": 23, "unread": 23, "substitut": 23, "incompat": [23, 28], "ram": [23, 25], "exchang": [23, 26, 27], "r_domain": 23, "w_domain": 23, "exact_depth": 23, "doubl": [24, 28], "rate": [24, 25, 27], "ddr": 24, "unavail": [24, 25, 28], "capabl": [24, 28], "terminologi": [24, 25], "clk24": 24, "recal": 24, "bus_d": 24, "bus_r": 24, "bus_w": 24, "turn": 24, "pipelin": 24, "buse": [24, 28], "diagram": [24, 25, 27], "complic": 24, "sourcesynchronousoutput": 24, "dout": 24, "bus_dclk": 24, "dclk": 24, "bus_dout": 24, "halv": 24, "align": 24, "unidirection": 24, "sim_port": 24, "outputseri": 24, "dclk_port": 24, "dout_port": 24, "payload": [24, 27], "readi": [24, 27, 28, 29], "test_output_seri": 24, "testbench_write_data": 24, "0xa1": 24, "testbench_sample_output": 24, "dout_valu": 24, "world": [24, 25], "bidir": 24, "narrow": 24, "differenti": 24, "Its": [24, 27], "iovalu": 24, "ouptut": 24, "relationship": [24, 28], "label": [24, 25], "t1": 24, "t2": 24, "recept": [24, 27], "queri": 24, "readport": 25, "writeport": 25, "read_port": 25, "write_port": 25, "almost": [25, 28], "dual": 25, "tdp": 25, "sdp": 25, "dram": 25, "abbrevi": 25, "consum": [25, 27, 28], "extrem": 25, "errata": 25, "defect": 25, "basi": 25, "simpler": 25, "better": 25, "hello": 25, "rd_port": 25, "writabl": 25, "push": [25, 27], "pop": 25, "wr_port": 25, "transparent_for": 25, "minimum": [25, 26], "alreadyelabor": 25, "geometri": 25, "delet": [25, 28], "dimens": [25, 28], "get_memori": 25, "ti": [25, 27], "old": 25, "addr_width": [25, 28], "partial": 25, "evenli": 25, "split": 25, "far": 25, "en_width": 25, "elem_count": 25, "stai": 26, "ecosystem": 26, "explor": 26, "33": 26, "pars": 26, "unreward": 26, "as_json": [26, 28], "adher": 26, "csr": 26, "csrlayoutannot": 26, "draft": 26, "2020": 26, "patternproperti": 26, "requiredproperti": 26, "_origin": 26, "conform": [26, 28], "csrsignatur": 26, "superclass": [26, 28], "emb": 26, "myperipher": 26, "csr_bu": 26, "0x0004": 26, "0x0008": 26, "csr_bus__addr": 26, "csr_bus__w_en": 26, "csr_bus__w_data": 26, "csr_bus__r_en": 26, "csr_bus__r_data": 26, "url": 26, "suggest": 26, "encourag": [26, 28], "invalidschema": 26, "invalidannot": 26, "classmethod": [26, 28], "__init_subclass__": 26, "handshak": 27, "govern": 27, "convei": 27, "backpressur": 27, "tie": 27, "always_readi": 27, "always_valid": 27, "unduli": 27, "albeit": 27, "dsp": 27, "uniform": 27, "stream_get": 27, "stream_put": 27, "pend": 27, "ssel": 27, "sclk": 27, "sdat": 27, "eight": 27, "consecut": 27, "assembl": 27, "serialreceiv": 27, "sclk_reg": 27, "sclk_edg": 27, "test_serial_receiv": 27, "testbench_input": 27, "testbench_output": 27, "expected_word": 27, "0b10100111": 27, "08b": 27, "stream_serial_receiv": 27, "serialtransmitt": 27, "test_serial_transmitt": 27, "expected_bit": 27, "stream_serial_transmitt": 27, "fir": 27, "filter": 27, "valueneg": 27, "o_stream": 27, "test_value_neg": 27, "stream_value_neg": 27, "seri": 27, "momentari": 27, "loss": 27, "examplepipelin": 27, "i_ssel": 27, "i_sclk": 27, "i_sdat": 27, "o_ssel": 27, "o_sclk": 27, "o_sdat": 27, "w_stream": 27, "r_stream": 27, "test_example_pipelin": 27, "expected_valu": 27, "stream_example_pipelin": 27, "payload_shap": 27, "lane": 27, "packet": 27, "shortcut": [27, 28], "signaturememb": 28, "flippedsignatur": 28, "flippedinterfac": 28, "flippedsignaturememb": 28, "vice": 28, "versa": 28, "basiccount": 28, "solut": 28, "rewritten": 28, "componentcount": 28, "gone": 28, "unchang": 28, "answer": 28, "question": 28, "genericcount": 28, "direction": 28, "meaning": 28, "sink": 28, "dataproduc": 28, "dataconsum": 28, "though": 28, "simplestreamsignatur": 28, "data_shap": 28, "intact": 28, "intf": 28, "metaprogram": 28, "streamproduc": 28, "streamconsum": 28, "complementari": 28, "ubiquit": 28, "streamconsumerusingin": 28, "deep": 28, "in1": 28, "in2": 28, "auxiliari": 28, "robust": 28, "proportion": 28, "pronounc": 28, "refactor": 28, "conclud": 28, "expos": 28, "dataprocessorimplement": 28, "dataprocessorwrapp": 28, "impl": 28, "dataforward": 28, "producerrequiringreadi": 28, "consumeralwaysreadi": 28, "consumerpossiblyunreadi": 28, "connectionerror": 28, "arg0": 28, "prolifer": 28, "subtli": 28, "absenc": 28, "legacyaxidataproduc": 28, "adata": 28, "avalid": 28, "areadi": 28, "moderndataconsum": 28, "data_produc": 28, "data_consum": 28, "adapted_data_sourc": 28, "usefulli": 28, "transfertyp": 28, "simplebussignatur": 28, "_addr_width": 28, "rw": 28, "simplebusinterfac": 28, "is_read_xf": 28, "is_write_xf": 28, "frozen": 28, "freez": 28, "anonym": 28, "sig32": 28, "sig24": 28, "bus__en": 28, "bus__rw": 28, "bus__addr": 28, "bus__r_data": 28, "bus__w_data": 28, "unusu": 28, "ever": 28, "denot": 28, "cyc": 28, "outgo": 28, "That": 28, "incom": 28, "discrimin": 28, "rgbpixel": 28, "prepend": 28, "dimension": 28, "is_port": 28, "is_signatur": 28, "signatureerror": 28, "abc": 28, "__setitem__": 28, "stub": 28, "forbid": 28, "__delitem__": 28, "flatten": 28, "disregard": 28, "__": 28, "unflip": 28, "flipped_memb": 28, "ing": 28, "influenc": 28, "obj__items__0": 28, "obj__items__1": 28, "prescrib": 28, "aspect": 28, "complianc": 28, "fill": 28, "help": 28, "hoc": 28, "customsignatur": 28, "custominterfac": 28, "my_properti": 28, "accur": 28, "flipped_sig": 28, "distinguish": 28, "signatureknowswhenflip": 28, "is_flip": 28, "getattr": 28, "getter": 28, "__setattr__": 28, "setattr": 28, "setter": 28, "__delattr__": 28, "delattr": 28, "signaturemeta": 28, "subtyp": 28, "__subclasscheck__": 28, "__instancecheck__": 28, "overhead": 28, "__dict__": 28, "approach": 28, "checker": 28, "track": 28, "burdensom": 28, "flipped_intf": 28, "interfaceknowswhenflip": 28, "other_unflip": 28, "caveat": 28, "obj1": 28, "obj2": 28, "obj3": 28, "besid": 28, "out1": 28, "arbit": 28, "decod": 28, "clarifi": 28, "fixedcompon": 28, "assumpt": 28, "parametriccompon": 28, "rai": 28, "attach": 28, "invalidmetadata": 28, "network": 28, "offici": 29, "vivonomicon": 29, "kbob": 29, "robert": 29, "baruch": 29, "my": 29, "journei": 29, "david": 29, "sporn": 29, "focuss": 29, "workstat": 29}, "objects": {"amaranth": [[14, 0, 0, "-", "hdl"], [15, 0, 0, "-", "sim"]], "amaranth.hdl": [[25, 1, 1, "", "MemoryData"], [14, 1, 1, "", "Shape"], [14, 1, 1, "", "ShapeCastable"], [14, 1, 1, "", "ShapeLike"], [14, 1, 1, "", "Value"], [14, 1, 1, "", "ValueCastable"], [14, 1, 1, "", "ValueLike"], [14, 4, 1, "", "signed"], [14, 4, 1, "", "unsigned"]], "amaranth.hdl.MemoryData": [[25, 1, 1, "", "Init"], [25, 2, 1, "", "__getitem__"]], "amaranth.hdl.Shape": [[14, 2, 1, "", "__repr__"], [14, 2, 1, "", "cast"]], "amaranth.hdl.ShapeCastable": [[14, 2, 1, "", "__call__"], [14, 2, 1, "", "as_shape"], [14, 2, 1, "", "const"], [14, 2, 1, "", "format"], [14, 2, 1, "", "from_bits"]], "amaranth.hdl.Value": [[14, 2, 1, "", "__abs__"], [14, 2, 1, "", "__add__"], [14, 2, 1, "", "__and__"], [14, 2, 1, "", "__bool__"], [14, 2, 1, "", "__contains__"], [14, 2, 1, "", "__eq__"], [14, 2, 1, "", "__floordiv__"], [14, 2, 1, "", "__format__"], [14, 2, 1, "", "__ge__"], [14, 2, 1, "", "__getitem__"], [14, 2, 1, "", "__gt__"], [14, 3, 1, "", "__hash__"], [14, 2, 1, "", "__invert__"], [14, 2, 1, "", "__le__"], [14, 2, 1, "", "__len__"], [14, 2, 1, "", "__lshift__"], [14, 2, 1, "", "__lt__"], [14, 2, 1, "", "__mod__"], [14, 2, 1, "", "__mul__"], [14, 2, 1, "", "__ne__"], [14, 2, 1, "", "__neg__"], [14, 2, 1, "", "__or__"], [14, 2, 1, "", "__pos__"], [14, 2, 1, "", "__radd__"], [14, 2, 1, "", "__rand__"], [14, 2, 1, "", "__rfloordiv__"], [14, 2, 1, "", "__rlshift__"], [14, 2, 1, "", "__rmod__"], [14, 2, 1, "", "__rmul__"], [14, 2, 1, "", "__ror__"], [14, 2, 1, "", "__rrshift__"], [14, 2, 1, "", "__rshift__"], [14, 2, 1, "", "__rsub__"], [14, 2, 1, "", "__rxor__"], [14, 2, 1, "", "__sub__"], [14, 2, 1, "", "__xor__"], [14, 2, 1, "", "all"], [14, 2, 1, "", "any"], [14, 2, 1, "", "as_signed"], [14, 2, 1, "", "as_unsigned"], [14, 2, 1, "", "bit_select"], [14, 2, 1, "", "bool"], [14, 2, 1, "", "cast"], [14, 2, 1, "", "eq"], [14, 2, 1, "", "matches"], [14, 2, 1, "", "replicate"], [14, 2, 1, "", "rotate_left"], [14, 2, 1, "", "rotate_right"], [14, 2, 1, "", "shape"], [14, 2, 1, "", "shift_left"], [14, 2, 1, "", "shift_right"], [14, 2, 1, "", "word_select"], [14, 2, 1, "", "xor"]], "amaranth.hdl.ValueCastable": [[14, 2, 1, "", "as_value"], [14, 2, 1, "", "shape"]], "amaranth.lib": [[18, 0, 0, "-", "cdc"], [19, 0, 0, "-", "crc"], [21, 0, 0, "-", "data"], [22, 0, 0, "-", "enum"], [23, 0, 0, "-", "fifo"], [24, 0, 0, "-", "io"], [25, 0, 0, "-", "memory"], [26, 0, 0, "-", "meta"], [27, 0, 0, "-", "stream"], [28, 0, 0, "-", "wiring"]], "amaranth.lib.cdc": [[18, 1, 1, "", "AsyncFFSynchronizer"], [18, 1, 1, "", "FFSynchronizer"], [18, 1, 1, "", "PulseSynchronizer"], [18, 1, 1, "", "ResetSynchronizer"]], "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, 2, 1, "", "compute"], [19, 2, 1, "", "create"], [19, 2, 1, "", "residue"]], "amaranth.lib.crc.catalog": [[20, 5, 1, "", "CRC10_ATM"], [20, 5, 1, "", "CRC10_CDMA2000"], [20, 5, 1, "", "CRC10_GSM"], [20, 5, 1, "", "CRC10_I_610"], [20, 5, 1, "", "CRC11_FLEXRAY"], [20, 5, 1, "", "CRC11_UMTS"], [20, 5, 1, "", "CRC12_3GPP"], [20, 5, 1, "", "CRC12_CDMA2000"], [20, 5, 1, "", "CRC12_DECT"], [20, 5, 1, "", "CRC12_GSM"], [20, 5, 1, "", "CRC12_UMTS"], [20, 5, 1, "", "CRC13_BBC"], [20, 5, 1, "", "CRC14_DARC"], [20, 5, 1, "", "CRC14_GSM"], [20, 5, 1, "", "CRC15_CAN"], [20, 5, 1, "", "CRC15_MPT1327"], [20, 5, 1, "", "CRC16_ACORN"], [20, 5, 1, "", "CRC16_ARC"], [20, 5, 1, "", "CRC16_AUG_CCITT"], [20, 5, 1, "", "CRC16_AUTOSAR"], [20, 5, 1, "", "CRC16_BLUETOOTH"], [20, 5, 1, "", "CRC16_BUYPASS"], [20, 5, 1, "", "CRC16_CCITT"], [20, 5, 1, "", "CRC16_CCITT_FALSE"], [20, 5, 1, "", "CRC16_CCITT_TRUE"], [20, 5, 1, "", "CRC16_CDMA2000"], [20, 5, 1, "", "CRC16_CMS"], [20, 5, 1, "", "CRC16_DARC"], [20, 5, 1, "", "CRC16_DDS_110"], [20, 5, 1, "", "CRC16_DECT_R"], [20, 5, 1, "", "CRC16_DECT_X"], [20, 5, 1, "", "CRC16_DNP"], [20, 5, 1, "", "CRC16_EN_13757"], [20, 5, 1, "", "CRC16_EPC"], [20, 5, 1, "", "CRC16_EPC_C1G2"], [20, 5, 1, "", "CRC16_GENIBUS"], [20, 5, 1, "", "CRC16_GSM"], [20, 5, 1, "", "CRC16_IBM"], [20, 5, 1, "", "CRC16_IBM_3740"], [20, 5, 1, "", "CRC16_IBM_SDLC"], [20, 5, 1, "", "CRC16_IEC_61158_2"], [20, 5, 1, "", "CRC16_ISO_HDLC"], [20, 5, 1, "", "CRC16_ISO_IEC_14443_3_A"], [20, 5, 1, "", "CRC16_ISO_IEC_14443_3_B"], [20, 5, 1, "", "CRC16_I_CODE"], [20, 5, 1, "", "CRC16_KERMIT"], [20, 5, 1, "", "CRC16_LJ1200"], [20, 5, 1, "", "CRC16_LTE"], [20, 5, 1, "", "CRC16_M17"], [20, 5, 1, "", "CRC16_MAXIM"], [20, 5, 1, "", "CRC16_MAXIM_DOW"], [20, 5, 1, "", "CRC16_MCRF4XX"], [20, 5, 1, "", "CRC16_MODBUS"], [20, 5, 1, "", "CRC16_NRSC_5"], [20, 5, 1, "", "CRC16_OPENSAFETY_A"], [20, 5, 1, "", "CRC16_OPENSAFETY_B"], [20, 5, 1, "", "CRC16_PROFIBUS"], [20, 5, 1, "", "CRC16_RIELLO"], [20, 5, 1, "", "CRC16_SPI_FUJITSU"], [20, 5, 1, "", "CRC16_T10_DIF"], [20, 5, 1, "", "CRC16_TELEDISK"], [20, 5, 1, "", "CRC16_TMS37157"], [20, 5, 1, "", "CRC16_UMTS"], [20, 5, 1, "", "CRC16_USB"], [20, 5, 1, "", "CRC16_VERIFONE"], [20, 5, 1, "", "CRC16_V_41_LSB"], [20, 5, 1, "", "CRC16_V_41_MSB"], [20, 5, 1, "", "CRC16_X25"], [20, 5, 1, "", "CRC16_XMODEM"], [20, 5, 1, "", "CRC16_ZMODEM"], [20, 5, 1, "", "CRC17_CAN_FD"], [20, 5, 1, "", "CRC21_CAN_FD"], [20, 5, 1, "", "CRC24_BLE"], [20, 5, 1, "", "CRC24_FLEXRAY_A"], [20, 5, 1, "", "CRC24_FLEXRAY_B"], [20, 5, 1, "", "CRC24_INTERLAKEN"], [20, 5, 1, "", "CRC24_LTE_A"], [20, 5, 1, "", "CRC24_LTE_B"], [20, 5, 1, "", "CRC24_OPENPGP"], [20, 5, 1, "", "CRC24_OS_9"], [20, 5, 1, "", "CRC30_CDMA"], [20, 5, 1, "", "CRC31_PHILIPS"], [20, 5, 1, "", "CRC32_AAL5"], [20, 5, 1, "", "CRC32_ADCCP"], [20, 5, 1, "", "CRC32_AIXM"], [20, 5, 1, "", "CRC32_AUTOSAR"], [20, 5, 1, "", "CRC32_BASE91_C"], [20, 5, 1, "", "CRC32_BASE91_D"], [20, 5, 1, "", "CRC32_BZIP2"], [20, 5, 1, "", "CRC32_CASTAGNOLI"], [20, 5, 1, "", "CRC32_CD_ROM_EDC"], [20, 5, 1, "", "CRC32_CKSUM"], [20, 5, 1, "", "CRC32_DECT_B"], [20, 5, 1, "", "CRC32_ETHERNET"], [20, 5, 1, "", "CRC32_INTERLAKEN"], [20, 5, 1, "", "CRC32_ISCSI"], [20, 5, 1, "", "CRC32_ISO_HDLC"], [20, 5, 1, "", "CRC32_JAMCRC"], [20, 5, 1, "", "CRC32_MEF"], [20, 5, 1, "", "CRC32_MPEG_2"], [20, 5, 1, "", "CRC32_PKZIP"], [20, 5, 1, "", "CRC32_POSIX"], [20, 5, 1, "", "CRC32_V_42"], [20, 5, 1, "", "CRC32_XFER"], [20, 5, 1, "", "CRC32_XZ"], [20, 5, 1, "", "CRC3_GSM"], [20, 5, 1, "", "CRC3_ROHC"], [20, 5, 1, "", "CRC40_GSM"], [20, 5, 1, "", "CRC4_G_704"], [20, 5, 1, "", "CRC4_INTERLAKEN"], [20, 5, 1, "", "CRC4_ITU"], [20, 5, 1, "", "CRC5_EPC"], [20, 5, 1, "", "CRC5_EPC_C1G2"], [20, 5, 1, "", "CRC5_G_704"], [20, 5, 1, "", "CRC5_ITU"], [20, 5, 1, "", "CRC5_USB"], [20, 5, 1, "", "CRC64_ECMA"], [20, 5, 1, "", "CRC64_ECMA_182"], [20, 5, 1, "", "CRC64_GO_ISO"], [20, 5, 1, "", "CRC64_MS"], [20, 5, 1, "", "CRC64_REDIS"], [20, 5, 1, "", "CRC64_WE"], [20, 5, 1, "", "CRC64_XZ"], [20, 5, 1, "", "CRC6_CDMA2000_A"], [20, 5, 1, "", "CRC6_CDMA2000_B"], [20, 5, 1, "", "CRC6_DARC"], [20, 5, 1, "", "CRC6_GSM"], [20, 5, 1, "", "CRC6_G_704"], [20, 5, 1, "", "CRC6_ITU"], [20, 5, 1, "", "CRC7_MMC"], [20, 5, 1, "", "CRC7_ROHC"], [20, 5, 1, "", "CRC7_UMTS"], [20, 5, 1, "", "CRC82_DARC"], [20, 5, 1, "", "CRC8_AES"], [20, 5, 1, "", "CRC8_AUTOSAR"], [20, 5, 1, "", "CRC8_BLUETOOTH"], [20, 5, 1, "", "CRC8_CDMA2000"], [20, 5, 1, "", "CRC8_DARC"], [20, 5, 1, "", "CRC8_DVB_S2"], [20, 5, 1, "", "CRC8_ETU"], [20, 5, 1, "", "CRC8_GSM_A"], [20, 5, 1, "", "CRC8_GSM_B"], [20, 5, 1, "", "CRC8_HITAG"], [20, 5, 1, "", "CRC8_ITU"], [20, 5, 1, "", "CRC8_I_432_1"], [20, 5, 1, "", "CRC8_I_CODE"], [20, 5, 1, "", "CRC8_LTE"], [20, 5, 1, "", "CRC8_MAXIM"], [20, 5, 1, "", "CRC8_MAXIM_DOW"], [20, 5, 1, "", "CRC8_MIFARE_MAD"], [20, 5, 1, "", "CRC8_NRSC_5"], [20, 5, 1, "", "CRC8_OPENSAFETY"], [20, 5, 1, "", "CRC8_ROHC"], [20, 5, 1, "", "CRC8_SAE_J1850"], [20, 5, 1, "", "CRC8_SMBUS"], [20, 5, 1, "", "CRC8_TECH_3250"], [20, 5, 1, "", "CRC8_WCDMA"]], "amaranth.lib.data": [[21, 1, 1, "", "ArrayLayout"], [21, 1, 1, "", "Const"], [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, 6, 1, "", "size"]], "amaranth.lib.data.Const": [[21, 2, 1, "", "__getattr__"], [21, 2, 1, "", "__getitem__"], [21, 2, 1, "", "as_bits"], [21, 2, 1, "", "as_value"], [21, 2, 1, "", "shape"]], "amaranth.lib.data.Field": [[21, 2, 1, "", "__eq__"], [21, 6, 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, 2, 1, "", "from_bits"], [21, 6, 1, "", "size"]], "amaranth.lib.data.StructLayout": [[21, 6, 1, "", "size"]], "amaranth.lib.data.UnionLayout": [[21, 6, 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, "", "EnumType"], [22, 1, 1, "", "EnumView"], [22, 1, 1, "", "Flag"], [22, 1, 1, "", "FlagView"], [22, 1, 1, "", "IntEnum"], [22, 1, 1, "", "IntFlag"]], "amaranth.lib.enum.EnumType": [[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, "", "matches"], [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.io": [[24, 1, 1, "", "Buffer"], [24, 1, 1, "", "DDRBuffer"], [24, 1, 1, "", "DifferentialPort"], [24, 1, 1, "", "Direction"], [24, 1, 1, "", "FFBuffer"], [24, 1, 1, "", "PortLike"], [24, 1, 1, "", "SimulationPort"], [24, 1, 1, "", "SingleEndedPort"]], "amaranth.lib.io.Buffer": [[24, 1, 1, "", "Signature"]], "amaranth.lib.io.DDRBuffer": [[24, 1, 1, "", "Signature"]], "amaranth.lib.io.Direction": [[24, 3, 1, "", "Bidir"], [24, 3, 1, "", "Input"], [24, 3, 1, "", "Output"], [24, 2, 1, "", "__and__"]], "amaranth.lib.io.FFBuffer": [[24, 1, 1, "", "Signature"]], "amaranth.lib.io.PortLike": [[24, 2, 1, "", "__add__"], [24, 2, 1, "", "__getitem__"], [24, 2, 1, "", "__invert__"], [24, 2, 1, "", "__len__"], [24, 6, 1, "", "direction"]], "amaranth.lib.memory": [[25, 1, 1, "", "Memory"], [25, 1, 1, "", "ReadPort"], [25, 1, 1, "", "WritePort"]], "amaranth.lib.memory.Memory": [[25, 2, 1, "", "read_port"], [25, 6, 1, "", "read_ports"], [25, 2, 1, "", "write_port"], [25, 6, 1, "", "write_ports"]], "amaranth.lib.memory.ReadPort": [[25, 1, 1, "", "Signature"]], "amaranth.lib.memory.WritePort": [[25, 1, 1, "", "Signature"]], "amaranth.lib.meta": [[26, 1, 1, "", "Annotation"], [26, 7, 1, "", "InvalidAnnotation"], [26, 7, 1, "", "InvalidSchema"]], "amaranth.lib.meta.Annotation": [[26, 2, 1, "", "__init_subclass__"], [26, 2, 1, "", "as_json"], [26, 6, 1, "", "origin"], [26, 3, 1, "", "schema"], [26, 2, 1, "", "validate"]], "amaranth.lib.stream": [[27, 1, 1, "", "Interface"], [27, 1, 1, "", "Signature"]], "amaranth.lib.stream.Interface": [[27, 6, 1, "", "p"]], "amaranth.lib.wiring": [[28, 1, 1, "", "Component"], [28, 1, 1, "", "ComponentMetadata"], [28, 7, 1, "", "ConnectionError"], [28, 1, 1, "", "FlippedInterface"], [28, 1, 1, "", "FlippedSignature"], [28, 1, 1, "", "FlippedSignatureMembers"], [28, 1, 1, "", "Flow"], [28, 5, 1, "", "In"], [28, 7, 1, "", "InvalidMetadata"], [28, 1, 1, "", "Member"], [28, 5, 1, "", "Out"], [28, 1, 1, "", "PureInterface"], [28, 1, 1, "", "Signature"], [28, 7, 1, "", "SignatureError"], [28, 1, 1, "", "SignatureMembers"], [28, 1, 1, "", "SignatureMeta"], [28, 4, 1, "", "connect"], [28, 4, 1, "", "flipped"]], "amaranth.lib.wiring.Component": [[28, 6, 1, "", "metadata"], [28, 6, 1, "", "signature"]], "amaranth.lib.wiring.ComponentMetadata": [[28, 2, 1, "", "as_json"], [28, 6, 1, "", "origin"], [28, 3, 1, "", "schema"], [28, 2, 1, "", "validate"]], "amaranth.lib.wiring.FlippedInterface": [[28, 2, 1, "", "__delattr__"], [28, 2, 1, "", "__eq__"], [28, 2, 1, "", "__getattr__"], [28, 2, 1, "", "__setattr__"], [28, 6, 1, "", "signature"]], "amaranth.lib.wiring.FlippedSignature": [[28, 2, 1, "", "__delattr__"], [28, 2, 1, "", "__getattr__"], [28, 2, 1, "", "__setattr__"], [28, 2, 1, "", "flip"]], "amaranth.lib.wiring.FlippedSignatureMembers": [[28, 2, 1, "", "flip"]], "amaranth.lib.wiring.Flow": [[28, 3, 1, "", "In"], [28, 3, 1, "", "Out"], [28, 2, 1, "", "__call__"], [28, 2, 1, "", "flip"]], "amaranth.lib.wiring.Member": [[28, 2, 1, "", "array"], [28, 6, 1, "", "dimensions"], [28, 2, 1, "", "flip"], [28, 6, 1, "", "flow"], [28, 6, 1, "", "init"], [28, 6, 1, "", "is_port"], [28, 6, 1, "", "is_signature"], [28, 6, 1, "", "shape"], [28, 6, 1, "", "signature"]], "amaranth.lib.wiring.PureInterface": [[28, 2, 1, "", "__init__"]], "amaranth.lib.wiring.Signature": [[28, 2, 1, "", "__eq__"], [28, 2, 1, "", "annotations"], [28, 2, 1, "", "create"], [28, 2, 1, "", "flatten"], [28, 2, 1, "", "flip"], [28, 2, 1, "", "is_compliant"], [28, 6, 1, "", "members"]], "amaranth.lib.wiring.SignatureMembers": [[28, 2, 1, "", "__contains__"], [28, 2, 1, "", "__delitem__"], [28, 2, 1, "", "__eq__"], [28, 2, 1, "", "__getitem__"], [28, 2, 1, "", "__iter__"], [28, 2, 1, "", "__setitem__"], [28, 2, 1, "", "create"], [28, 2, 1, "", "flatten"], [28, 2, 1, "", "flip"]], "amaranth.lib.wiring.SignatureMeta": [[28, 2, 1, "", "__instancecheck__"], [28, 2, 1, "", "__subclasscheck__"]], "amaranth.sim": [[15, 7, 1, "", "BrokenTrigger"], [15, 7, 1, "", "DomainReset"], [15, 1, 1, "", "Simulator"], [15, 1, 1, "", "SimulatorContext"], [15, 1, 1, "", "TickTrigger"], [15, 1, 1, "", "TriggerCombination"]], "amaranth.sim.Simulator": [[15, 2, 1, "", "add_clock"], [15, 2, 1, "", "add_process"], [15, 2, 1, "", "add_testbench"], [15, 2, 1, "", "advance"], [15, 2, 1, "", "reset"], [15, 2, 1, "", "run"], [15, 2, 1, "", "run_until"], [15, 2, 1, "", "write_vcd"]], "amaranth.sim.SimulatorContext": [[15, 2, 1, "", "changed"], [15, 2, 1, "", "critical"], [15, 2, 1, "", "delay"], [15, 2, 1, "", "edge"], [15, 2, 1, "", "elapsed_time"], [15, 2, 1, "", "get"], [15, 2, 1, "", "negedge"], [15, 2, 1, "", "posedge"], [15, 2, 1, "", "set"], [15, 2, 1, "", "tick"]], "amaranth.sim.TickTrigger": [[15, 2, 1, "", "repeat"], [15, 2, 1, "", "sample"], [15, 2, 1, "", "until"]], "amaranth.sim.TriggerCombination": [[15, 2, 1, "", "changed"], [15, 2, 1, "", "delay"], [15, 2, 1, "", "edge"], [15, 2, 1, "", "negedge"], [15, 2, 1, "", "posedge"], [15, 2, 1, "", "sample"]], "amaranth.vendor": [[8, 1, 1, "", "AlteraPlatform"], [9, 1, 1, "", "GowinPlatform"], [10, 1, 1, "", "LatticePlatform"], [11, 1, 1, "", "QuicklogicPlatform"], [12, 1, 1, "", "SiliconBluePlatform"], [13, 1, 1, "", "XilinxPlatform"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:function", "5": "py:data", "6": "py:property", "7": "py:exception"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "function", "Python function"], "5": ["py", "data", "Python data"], "6": ["py", "property", "Python property"], "7": ["py", "exception", "Python exception"]}, "titleterms": {"changelog": 0, "document": [0, 1, 2], "past": 0, "releas": [0, 5], "version": 0, "0": 0, "6": 0, "unreleas": 0, "implement": [0, 16], "rfc": 0, "languag": [0, 3, 4, 6, 14], "chang": [0, 1], "standard": [0, 6, 17], "librari": [0, 6, 17], "toolchain": [0, 4, 6], "platform": [0, 7], "integr": [0, 6, 7], "5": 0, "3": 0, "2": 0, "1": 0, "migrat": 0, "from": [0, 3], "4": 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, 15], "testsuit": 1, "build": [1, 6], "style": 1, "guid": [1, 3], "your": 1, "weekli": 1, "meet": 1, "amaranth": [2, 5, 6], "project": 2, "The": [3, 6], "prelud": 3, "shape": [3, 14], "valu": [3, 14, 27], "constant": [3, 21, 28], "cast": 3, "integ": 3, "rang": 3, "enumer": [3, 22], "custom": [3, 21, 28], "member": 3, "signal": 3, "name": 3, "initi": 3, "reset": 3, "less": 3, "oper": 3, "perform": 3, "describ": 3, "comput": [3, 19], "width": 3, "extens": 3, "arithmet": 3, "comparison": 3, "bitwis": 3, "shift": 3, "rotat": 3, "reduct": 3, "logic": 3, "bit": 3, "sequenc": 3, "match": 3, "convers": 3, "choic": 3, "arrai": [3, 25], "data": [3, 21, 27], "structur": [3, 21], "modul": 3, "control": 3, "domain": [3, 18], "assign": 3, "order": 3, "flow": 3, "activ": 3, "inact": 3, "If": 3, "elif": 3, "els": 3, "block": 3, "switch": 3, "case": 3, "fsm": 3, "state": 3, "combin": [3, 15], "evalu": 3, "synchron": [3, 15], "assert": 3, "debug": 3, "print": 3, "clock": [3, 18, 24], "late": 3, "bind": 3, "elabor": 3, "submodul": 3, "modifi": 3, "renam": 3, "memori": [3, 25], "i": 3, "o": 3, "port": [3, 24, 25], "instanc": 3, "buffer": [3, 24], "instal": 5, "In": 5, "browser": 5, "playground": 5, "system": [5, 6], "requir": 5, "prerequisit": 5, "latest": 5, "develop": [5, 6], "snapshot": 5, "edit": 5, "board": [5, 6], "definit": [5, 6], "todo": [5, 7, 16, 29], "introduct": [6, 19, 21, 24, 25, 26, 27, 28], "simul": [6, 15, 24, 25], "fpga": 6, "altera": 8, "gowin": 9, "lattic": 10, "quicklog": 11, "siliconblu": 12, "xilinx": 13, "refer": [14, 15, 26, 27], "backward": 14, "compat": 14, "import": 14, "syntax": 14, "sourc": 14, "locat": 14, "circuit": 15, "test": [15, 16], "replac": 15, "code": 15, "get": 16, "start": 16, "A": 16, "counter": 16, "convert": 16, "blink": 16, "led": [16, 24], "cross": 18, "cyclic": 19, "redund": 19, "check": 19, "exampl": [19, 24, 25, 27], "algorithm": [19, 20], "paramet": 19, "crc": 19, "predefin": 19, "catalog": 20, "overview": [21, 28], "motiv": [21, 28], "compos": 21, "layout": 21, "defin": [21, 26], "discrimin": 21, "union": 21, "model": 21, "common": 21, "view": [21, 22], "creat": 21, "access": 21, "class": [21, 22], "metaclass": 22, "base": 22, "first": [23, 25], "out": [23, 25], "queue": [23, 25], "input": [24, 28], "output": 24, "bidirect": 24, "bu": 24, "forward": [24, 28], "read": 25, "onli": 25, "descript": 25, "compon": [25, 28], "interfac": [26, 28], "metadata": [26, 28], "annot": 26, "identifi": 26, "schema": 26, "stream": 27, "transfer": 27, "rule": 27, "serial": 27, "receiv": 27, "transmitt": 27, "negat": 27, "complet": 27, "pipelin": 27, "connect": 28, "reusabl": 28, "interior": 28, "adapt": 28, "signatur": 28, "path": 28, "make": 28, "tutori": 29}, "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"]], "Documentation for past releases": [[0, "documentation-for-past-releases"]], "Version 0.6.0 (unreleased)": [[0, "version-0-6-0-unreleased"]], "Implemented RFCs": [[0, "implemented-rfcs"], [0, "id4"], [0, "id6"], [0, "id11"]], "Language changes": [[0, "language-changes"], [0, "id1"], [0, "id7"], [0, "id12"], [0, "id16"]], "Standard library changes": [[0, "standard-library-changes"], [0, "id2"], [0, "id5"], [0, "id8"], [0, "id13"], [0, "id17"]], "Toolchain changes": [[0, "toolchain-changes"], [0, "id9"], [0, "id14"], [0, "id18"]], "Platform integration changes": [[0, "platform-integration-changes"], [0, "id3"], [0, "id10"], [0, "id15"], [0, "id19"]], "Version 0.5.3 (unreleased)": [[0, "version-0-5-3-unreleased"]], "Version 0.5.2": [[0, "version-0-5-2"]], "Version 0.5.1": [[0, "version-0-5-1"]], "Version 0.5.0": [[0, "version-0-5-0"]], "Migrating from version 0.4": [[0, "migrating-from-version-0-4"]], "Version 0.4.0": [[0, "version-0-4-0"]], "Migrating from version 0.3": [[0, "migrating-from-version-0-3"]], "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"]], "Documentation style guide": [[1, "documentation-style-guide"]], "Contributing your changes": [[1, "contributing-your-changes"]], "Weekly meetings": [[1, "weekly-meetings"]], "Amaranth project documentation": [[2, "amaranth-project-documentation"]], "Language guide": [[3, "language-guide"]], "The prelude": [[3, "the-prelude"]], "Shapes": [[3, "shapes"], [14, "shapes"]], "Shapes of values": [[3, "shapes-of-values"]], "Values": [[3, "values"], [14, "values"]], "Constants": [[3, "constants"]], "Shape casting": [[3, "shape-casting"]], "Shapes from integers": [[3, "shapes-from-integers"]], "Shapes from ranges": [[3, "shapes-from-ranges"]], "Shapes from enumerations": [[3, "shapes-from-enumerations"]], "Custom shapes": [[3, "custom-shapes"]], "Value casting": [[3, "value-casting"]], "Values from integers": [[3, "values-from-integers"]], "Values from enumeration members": [[3, "values-from-enumeration-members"]], "Constant casting": [[3, "constant-casting"]], "Signals": [[3, "signals"]], "Signal shapes": [[3, "signal-shapes"]], "Signal names": [[3, "signal-names"]], "Initial signal values": [[3, "initial-signal-values"]], "Reset-less signals": [[3, "reset-less-signals"]], "Operators": [[3, "operators"]], "Performing or describing computations?": [[3, "performing-or-describing-computations"]], "Width extension": [[3, "width-extension"]], "Arithmetic operators": [[3, "arithmetic-operators"]], "Comparison operators": [[3, "comparison-operators"]], "Bitwise, shift, and rotate operators": [[3, "bitwise-shift-and-rotate-operators"]], "Reduction operators": [[3, "reduction-operators"]], "Logical operators": [[3, "logical-operators"]], "Bit sequence operators": [[3, "bit-sequence-operators"]], "Match operator": [[3, "match-operator"]], "Conversion operators": [[3, "conversion-operators"]], "Choice operator": [[3, "choice-operator"]], "Arrays": [[3, "arrays"]], "Data structures": [[3, "data-structures"], [21, "module-amaranth.lib.data"]], "Modules": [[3, "modules"]], "Control domains": [[3, "control-domains"]], "Assigning to signals": [[3, "assigning-to-signals"]], "Assignable values": [[3, "assignable-values"]], "Assignment domains": [[3, "assignment-domains"]], "Assignment order": [[3, "assignment-order"]], "Control flow": [[3, "control-flow"]], "Active and inactive assignments": [[3, "active-and-inactive-assignments"]], "If/Elif/Else control blocks": [[3, "if-elif-else-control-blocks"]], "Switch/Case control blocks": [[3, "switch-case-control-blocks"]], "FSM/State control blocks": [[3, "fsm-state-control-blocks"]], "Combinational evaluation": [[3, "combinational-evaluation"]], "Synchronous evaluation": [[3, "synchronous-evaluation"]], "Assertions": [[3, "assertions"]], "Debug printing": [[3, "debug-printing"]], "Clock domains": [[3, "clock-domains"]], "Late binding of clock and reset signals": [[3, "late-binding-of-clock-and-reset-signals"]], "Elaboration": [[3, "elaboration"]], "Submodules": [[3, "submodules"]], "Modifying control flow": [[3, "modifying-control-flow"]], "Renaming domains": [[3, "renaming-domains"]], "Memories": [[3, "memories"]], "I/O values": [[3, "i-o-values"]], "I/O ports": [[3, "i-o-ports"]], "I/O operators": [[3, "i-o-operators"]], "Instances": [[3, "instances"]], "I/O buffer instances": [[3, "i-o-buffer-instances"]], "Language & toolchain": [[4, "language-toolchain"]], "Installation": [[5, "installation"]], "In-browser playground": [[5, "in-browser-playground"]], "System requirements": [[5, "system-requirements"]], "Installing prerequisites": [[5, "installing-prerequisites"]], "Installing Amaranth": [[5, "installing-amaranth"]], "Latest release": [[5, "latest-release"]], "Development snapshot": [[5, "development-snapshot"]], "Editable development snapshot": [[5, "editable-development-snapshot"]], "Installing board definitions": [[5, "installing-board-definitions"]], "Todo": [[5, "id1"], [7, "id1"], [16, "id1"], [29, "id1"]], "Introduction": [[6, "introduction"], [19, "introduction"], [21, "introduction"], [24, "introduction"], [25, "introduction"], [26, "introduction"], [27, "introduction"], [28, "introduction"]], "The Amaranth language": [[6, "the-amaranth-language"]], "The Amaranth standard library": [[6, "the-amaranth-standard-library"]], "The Amaranth simulator": [[6, "the-amaranth-simulator"]], "The Amaranth build system": [[6, "the-amaranth-build-system"]], "FPGA toolchain integration": [[6, "fpga-toolchain-integration"]], "Development board definitions": [[6, "development-board-definitions"]], "Platform integration": [[7, "platform-integration"]], "Altera": [[8, "altera"]], "Gowin": [[9, "gowin"]], "Lattice": [[10, "lattice"]], "Quicklogic": [[11, "quicklogic"]], "SiliconBlue": [[12, "siliconblue"]], "Xilinx": [[13, "xilinx"]], "Language reference": [[14, "module-amaranth.hdl"]], "Backwards compatibility": [[14, "backwards-compatibility"]], "Importing syntax": [[14, "importing-syntax"]], "Source locations": [[14, "source-locations"]], "Simulator": [[15, "module-amaranth.sim"]], "Simulating circuits": [[15, "simulating-circuits"]], "Running a simulation": [[15, "running-a-simulation"]], "Testing synchronous circuits": [[15, "testing-synchronous-circuits"]], "Testing combinational circuits": [[15, "testing-combinational-circuits"]], "Replacing circuits with code": [[15, "replacing-circuits-with-code"]], "Replacing synchronous circuits": [[15, "replacing-synchronous-circuits"]], "Replacing combinational circuits": [[15, "replacing-combinational-circuits"]], "Reference": [[15, "reference"], [26, "reference"], [27, "reference"]], "Getting started": [[16, "getting-started"]], "A counter": [[16, "a-counter"]], "Implementing a counter": [[16, "implementing-a-counter"]], "Testing a counter": [[16, "testing-a-counter"]], "Converting a counter": [[16, "converting-a-counter"]], "A blinking LED": [[16, "a-blinking-led"]], "Standard library": [[17, "standard-library"]], "Clock domain crossing": [[18, "module-amaranth.lib.cdc"]], "Cyclic redundancy checks": [[19, "module-amaranth.lib.crc"]], "Examples": [[19, "examples"], [24, "examples"], [25, "examples"], [27, "examples"]], "Algorithms and parameters": [[19, "algorithms-and-parameters"]], "CRC computation": [[19, "crc-computation"]], "Predefined algorithms": [[19, "predefined-algorithms"]], "Algorithm catalog": [[20, "module-amaranth.lib.crc.catalog"]], "Overview": [[21, "overview"], [28, "overview"]], "Motivation": [[21, "motivation"], [28, "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"]], "Creating a constant": [[21, "creating-a-constant"]], "Accessing a constant": [[21, "accessing-a-constant"]], "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"]], "Input/output buffers": [[24, "module-amaranth.lib.io"]], "LED output": [[24, "led-output"]], "Clock input": [[24, "clock-input"]], "Bidirectional bus": [[24, "bidirectional-bus"]], "Clock forwarding": [[24, "clock-forwarding"]], "Simulation": [[24, "simulation"], [25, "simulation"]], "Ports": [[24, "ports"]], "Buffers": [[24, "buffers"]], "Memory arrays": [[25, "module-amaranth.lib.memory"]], "Read-only memory": [[25, "read-only-memory"]], "First-in, first-out queue": [[25, "first-in-first-out-queue"]], "Memory description": [[25, "memory-description"]], "Memory component": [[25, "memory-component"]], "Memory ports": [[25, "memory-ports"]], "Interface metadata": [[26, "module-amaranth.lib.meta"]], "Defining annotations": [[26, "defining-annotations"]], "Identifying schemas": [[26, "identifying-schemas"]], "Data streams": [[27, "module-amaranth.lib.stream"]], "Data transfer rules": [[27, "data-transfer-rules"]], "Serial receiver": [[27, "serial-receiver"]], "Serial transmitter": [[27, "serial-transmitter"]], "Value negator": [[27, "value-negator"]], "Complete pipeline": [[27, "complete-pipeline"]], "Interfaces and connections": [[28, "module-amaranth.lib.wiring"]], "Reusable interfaces": [[28, "reusable-interfaces"]], "Forwarding interior interfaces": [[28, "forwarding-interior-interfaces"]], "Constant inputs": [[28, "constant-inputs"]], "Adapting interfaces": [[28, "adapting-interfaces"]], "Customizing signatures and interfaces": [[28, "customizing-signatures-and-interfaces"]], "Paths": [[28, "paths"]], "Signatures": [[28, "signatures"]], "Interfaces": [[28, "interfaces"]], "Making connections": [[28, "making-connections"]], "Components": [[28, "components"]], "Component metadata": [[28, "component-metadata"]], "Tutorial": [[29, "tutorial"]]}, "indexentries": {"alteraplatform (class in amaranth.vendor)": [[8, "amaranth.vendor.AlteraPlatform"]], "gowinplatform (class in amaranth.vendor)": [[9, "amaranth.vendor.GowinPlatform"]], "latticeplatform (class in amaranth.vendor)": [[10, "amaranth.vendor.LatticePlatform"]], "quicklogicplatform (class in amaranth.vendor)": [[11, "amaranth.vendor.QuicklogicPlatform"]], "siliconblueplatform (class in amaranth.vendor)": [[12, "amaranth.vendor.SiliconBluePlatform"]], "xilinxplatform (class in amaranth.vendor)": [[13, "amaranth.vendor.XilinxPlatform"]], "shape (class in amaranth.hdl)": [[14, "amaranth.hdl.Shape"]], "shapecastable (class in amaranth.hdl)": [[14, "amaranth.hdl.ShapeCastable"]], "shapelike (class in amaranth.hdl)": [[14, "amaranth.hdl.ShapeLike"]], "value (class in amaranth.hdl)": [[14, "amaranth.hdl.Value"]], "valuecastable (class in amaranth.hdl)": [[14, "amaranth.hdl.ValueCastable"]], "valuelike (class in amaranth.hdl)": [[14, "amaranth.hdl.ValueLike"]], "__abs__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__abs__"]], "__add__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__add__"]], "__and__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__and__"]], "__bool__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__bool__"]], "__call__() (amaranth.hdl.shapecastable method)": [[14, "amaranth.hdl.ShapeCastable.__call__"]], "__contains__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__contains__"]], "__eq__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__eq__"]], "__floordiv__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__floordiv__"]], "__format__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__format__"]], "__ge__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__ge__"]], "__getitem__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__getitem__"]], "__gt__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__gt__"]], "__hash__ (amaranth.hdl.value attribute)": [[14, "amaranth.hdl.Value.__hash__"]], "__invert__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__invert__"]], "__le__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__le__"]], "__len__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__len__"]], "__lshift__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__lshift__"]], "__lt__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__lt__"]], "__mod__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__mod__"]], "__mul__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__mul__"]], "__ne__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__ne__"]], "__neg__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__neg__"]], "__or__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__or__"]], "__pos__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__pos__"]], "__radd__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__radd__"]], "__rand__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rand__"]], "__repr__() (amaranth.hdl.shape method)": [[14, "amaranth.hdl.Shape.__repr__"]], "__rfloordiv__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rfloordiv__"]], "__rlshift__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rlshift__"]], "__rmod__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rmod__"]], "__rmul__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rmul__"]], "__ror__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__ror__"]], "__rrshift__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rrshift__"]], "__rshift__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rshift__"]], "__rsub__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rsub__"]], "__rxor__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rxor__"]], "__sub__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__sub__"]], "__xor__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__xor__"]], "all() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.all"]], "amaranth.hdl": [[14, "module-amaranth.hdl"]], "any() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.any"]], "as_shape() (amaranth.hdl.shapecastable method)": [[14, "amaranth.hdl.ShapeCastable.as_shape"]], "as_signed() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.as_signed"]], "as_unsigned() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.as_unsigned"]], "as_value() (amaranth.hdl.valuecastable method)": [[14, "amaranth.hdl.ValueCastable.as_value"]], "bit_select() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.bit_select"]], "bool() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.bool"]], "cast() (amaranth.hdl.shape static method)": [[14, "amaranth.hdl.Shape.cast"]], "cast() (amaranth.hdl.value static method)": [[14, "amaranth.hdl.Value.cast"]], "const() (amaranth.hdl.shapecastable method)": [[14, "amaranth.hdl.ShapeCastable.const"]], "eq() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.eq"]], "format() (amaranth.hdl.shapecastable method)": [[14, "amaranth.hdl.ShapeCastable.format"]], "from_bits() (amaranth.hdl.shapecastable method)": [[14, "amaranth.hdl.ShapeCastable.from_bits"]], "matches() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.matches"]], "module": [[14, "module-amaranth.hdl"], [15, "module-amaranth.sim"], [18, "module-amaranth.lib.cdc"], [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.io"], [25, "module-amaranth.lib.memory"], [26, "module-amaranth.lib.meta"], [27, "module-amaranth.lib.stream"], [28, "module-amaranth.lib.wiring"]], "replicate() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.replicate"]], "rotate_left() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.rotate_left"]], "rotate_right() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.rotate_right"]], "shape() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.shape"]], "shape() (amaranth.hdl.valuecastable method)": [[14, "amaranth.hdl.ValueCastable.shape"]], "shift_left() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.shift_left"]], "shift_right() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.shift_right"]], "signed() (in module amaranth.hdl)": [[14, "amaranth.hdl.signed"]], "unsigned() (in module amaranth.hdl)": [[14, "amaranth.hdl.unsigned"]], "word_select() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.word_select"]], "xor() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.xor"]], "brokentrigger": [[15, "amaranth.sim.BrokenTrigger"]], "domainreset": [[15, "amaranth.sim.DomainReset"]], "simulator (class in amaranth.sim)": [[15, "amaranth.sim.Simulator"]], "simulatorcontext (class in amaranth.sim)": [[15, "amaranth.sim.SimulatorContext"]], "ticktrigger (class in amaranth.sim)": [[15, "amaranth.sim.TickTrigger"]], "triggercombination (class in amaranth.sim)": [[15, "amaranth.sim.TriggerCombination"]], "add_clock() (amaranth.sim.simulator method)": [[15, "amaranth.sim.Simulator.add_clock"]], "add_process() (amaranth.sim.simulator method)": [[15, "amaranth.sim.Simulator.add_process"]], "add_testbench() (amaranth.sim.simulator method)": [[15, "amaranth.sim.Simulator.add_testbench"]], "advance() (amaranth.sim.simulator method)": [[15, "amaranth.sim.Simulator.advance"]], "amaranth.sim": [[15, "module-amaranth.sim"]], "changed() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.changed"]], "changed() (amaranth.sim.triggercombination method)": [[15, "amaranth.sim.TriggerCombination.changed"]], "critical() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.critical"]], "delay() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.delay"]], "delay() (amaranth.sim.triggercombination method)": [[15, "amaranth.sim.TriggerCombination.delay"]], "edge() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.edge"]], "edge() (amaranth.sim.triggercombination method)": [[15, "amaranth.sim.TriggerCombination.edge"]], "elapsed_time() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.elapsed_time"]], "get() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.get"]], "negedge() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.negedge"]], "negedge() (amaranth.sim.triggercombination method)": [[15, "amaranth.sim.TriggerCombination.negedge"]], "posedge() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.posedge"]], "posedge() (amaranth.sim.triggercombination method)": [[15, "amaranth.sim.TriggerCombination.posedge"]], "repeat() (amaranth.sim.ticktrigger method)": [[15, "amaranth.sim.TickTrigger.repeat"]], "reset() (amaranth.sim.simulator method)": [[15, "amaranth.sim.Simulator.reset"]], "run() (amaranth.sim.simulator method)": [[15, "amaranth.sim.Simulator.run"]], "run_until() (amaranth.sim.simulator method)": [[15, "amaranth.sim.Simulator.run_until"]], "sample() (amaranth.sim.ticktrigger method)": [[15, "amaranth.sim.TickTrigger.sample"]], "sample() (amaranth.sim.triggercombination method)": [[15, "amaranth.sim.TriggerCombination.sample"]], "set() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.set"]], "tick() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.tick"]], "until() (amaranth.sim.ticktrigger method)": [[15, "amaranth.sim.TickTrigger.until"]], "write_vcd() (amaranth.sim.simulator method)": [[15, "amaranth.sim.Simulator.write_vcd"]], "asyncffsynchronizer (class in amaranth.lib.cdc)": [[18, "amaranth.lib.cdc.AsyncFFSynchronizer"]], "ffsynchronizer (class in amaranth.lib.cdc)": [[18, "amaranth.lib.cdc.FFSynchronizer"]], "pulsesynchronizer (class in amaranth.lib.cdc)": [[18, "amaranth.lib.cdc.PulseSynchronizer"]], "resetsynchronizer (class in amaranth.lib.cdc)": [[18, "amaranth.lib.cdc.ResetSynchronizer"]], "amaranth.lib.cdc": [[18, "module-amaranth.lib.cdc"]], "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__"]], "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"]], "const (class in amaranth.lib.data)": [[21, "amaranth.lib.data.Const"]], "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.const method)": [[21, "amaranth.lib.data.Const.__getattr__"]], "__getattr__() (amaranth.lib.data.view method)": [[21, "amaranth.lib.data.View.__getattr__"]], "__getitem__() (amaranth.lib.data.const method)": [[21, "amaranth.lib.data.Const.__getitem__"]], "__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_bits() (amaranth.lib.data.const method)": [[21, "amaranth.lib.data.Const.as_bits"]], "as_shape() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.as_shape"]], "as_value() (amaranth.lib.data.const method)": [[21, "amaranth.lib.data.Const.as_value"]], "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"]], "eq() (amaranth.lib.data.view method)": [[21, "amaranth.lib.data.View.eq"]], "from_bits() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.from_bits"]], "shape() (amaranth.lib.data.const method)": [[21, "amaranth.lib.data.Const.shape"]], "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"]], "enumtype (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.EnumType"]], "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.enumtype method)": [[22, "amaranth.lib.enum.EnumType.__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.enumtype method)": [[22, "amaranth.lib.enum.EnumType.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"]], "matches() (amaranth.lib.enum.enumview method)": [[22, "amaranth.lib.enum.EnumView.matches"]], "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"]], "bidir (amaranth.lib.io.direction attribute)": [[24, "amaranth.lib.io.Direction.Bidir"]], "buffer (class in amaranth.lib.io)": [[24, "amaranth.lib.io.Buffer"]], "buffer.signature (class in amaranth.lib.io)": [[24, "amaranth.lib.io.Buffer.Signature"]], "ddrbuffer (class in amaranth.lib.io)": [[24, "amaranth.lib.io.DDRBuffer"]], "ddrbuffer.signature (class in amaranth.lib.io)": [[24, "amaranth.lib.io.DDRBuffer.Signature"]], "differentialport (class in amaranth.lib.io)": [[24, "amaranth.lib.io.DifferentialPort"]], "direction (class in amaranth.lib.io)": [[24, "amaranth.lib.io.Direction"]], "ffbuffer (class in amaranth.lib.io)": [[24, "amaranth.lib.io.FFBuffer"]], "ffbuffer.signature (class in amaranth.lib.io)": [[24, "amaranth.lib.io.FFBuffer.Signature"]], "input (amaranth.lib.io.direction attribute)": [[24, "amaranth.lib.io.Direction.Input"]], "output (amaranth.lib.io.direction attribute)": [[24, "amaranth.lib.io.Direction.Output"]], "portlike (class in amaranth.lib.io)": [[24, "amaranth.lib.io.PortLike"]], "simulationport (class in amaranth.lib.io)": [[24, "amaranth.lib.io.SimulationPort"]], "singleendedport (class in amaranth.lib.io)": [[24, "amaranth.lib.io.SingleEndedPort"]], "__add__() (amaranth.lib.io.portlike method)": [[24, "amaranth.lib.io.PortLike.__add__"]], "__and__() (amaranth.lib.io.direction method)": [[24, "amaranth.lib.io.Direction.__and__"]], "__getitem__() (amaranth.lib.io.portlike method)": [[24, "amaranth.lib.io.PortLike.__getitem__"]], "__invert__() (amaranth.lib.io.portlike method)": [[24, "amaranth.lib.io.PortLike.__invert__"]], "__len__() (amaranth.lib.io.portlike method)": [[24, "amaranth.lib.io.PortLike.__len__"]], "amaranth.lib.io": [[24, "module-amaranth.lib.io"]], "direction (amaranth.lib.io.portlike property)": [[24, "amaranth.lib.io.PortLike.direction"]], "memory (class in amaranth.lib.memory)": [[25, "amaranth.lib.memory.Memory"]], "memorydata (class in amaranth.hdl)": [[25, "amaranth.hdl.MemoryData"]], "memorydata.init (class in amaranth.hdl)": [[25, "amaranth.hdl.MemoryData.Init"]], "readport (class in amaranth.lib.memory)": [[25, "amaranth.lib.memory.ReadPort"]], "readport.signature (class in amaranth.lib.memory)": [[25, "amaranth.lib.memory.ReadPort.Signature"]], "writeport (class in amaranth.lib.memory)": [[25, "amaranth.lib.memory.WritePort"]], "writeport.signature (class in amaranth.lib.memory)": [[25, "amaranth.lib.memory.WritePort.Signature"]], "__getitem__() (amaranth.hdl.memorydata method)": [[25, "amaranth.hdl.MemoryData.__getitem__"]], "amaranth.lib.memory": [[25, "module-amaranth.lib.memory"]], "read_port() (amaranth.lib.memory.memory method)": [[25, "amaranth.lib.memory.Memory.read_port"]], "read_ports (amaranth.lib.memory.memory property)": [[25, "amaranth.lib.memory.Memory.read_ports"]], "write_port() (amaranth.lib.memory.memory method)": [[25, "amaranth.lib.memory.Memory.write_port"]], "write_ports (amaranth.lib.memory.memory property)": [[25, "amaranth.lib.memory.Memory.write_ports"]], "annotation (class in amaranth.lib.meta)": [[26, "amaranth.lib.meta.Annotation"]], "invalidannotation": [[26, "amaranth.lib.meta.InvalidAnnotation"]], "invalidschema": [[26, "amaranth.lib.meta.InvalidSchema"]], "__init_subclass__() (amaranth.lib.meta.annotation class method)": [[26, "amaranth.lib.meta.Annotation.__init_subclass__"]], "amaranth.lib.meta": [[26, "module-amaranth.lib.meta"]], "as_json() (amaranth.lib.meta.annotation method)": [[26, "amaranth.lib.meta.Annotation.as_json"]], "origin (amaranth.lib.meta.annotation property)": [[26, "amaranth.lib.meta.Annotation.origin"]], "schema (amaranth.lib.meta.annotation attribute)": [[26, "amaranth.lib.meta.Annotation.schema"]], "validate() (amaranth.lib.meta.annotation class method)": [[26, "amaranth.lib.meta.Annotation.validate"]], "interface (class in amaranth.lib.stream)": [[27, "amaranth.lib.stream.Interface"]], "signature (class in amaranth.lib.stream)": [[27, "amaranth.lib.stream.Signature"]], "amaranth.lib.stream": [[27, "module-amaranth.lib.stream"]], "p (amaranth.lib.stream.interface property)": [[27, "amaranth.lib.stream.Interface.p"]], "component (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.Component"]], "componentmetadata (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.ComponentMetadata"]], "connectionerror": [[28, "amaranth.lib.wiring.ConnectionError"]], "flippedinterface (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.FlippedInterface"]], "flippedsignature (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.FlippedSignature"]], "flippedsignaturemembers (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.FlippedSignatureMembers"]], "flow (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.Flow"]], "in (amaranth.lib.wiring.flow attribute)": [[28, "amaranth.lib.wiring.Flow.In"]], "in (in module amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.In"]], "invalidmetadata": [[28, "amaranth.lib.wiring.InvalidMetadata"]], "member (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.Member"]], "out (amaranth.lib.wiring.flow attribute)": [[28, "amaranth.lib.wiring.Flow.Out"]], "out (in module amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.Out"]], "pureinterface (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.PureInterface"]], "signature (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.Signature"]], "signatureerror": [[28, "amaranth.lib.wiring.SignatureError"]], "signaturemembers (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.SignatureMembers"]], "signaturemeta (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.SignatureMeta"]], "__call__() (amaranth.lib.wiring.flow method)": [[28, "amaranth.lib.wiring.Flow.__call__"]], "__contains__() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.__contains__"]], "__delattr__() (amaranth.lib.wiring.flippedinterface method)": [[28, "amaranth.lib.wiring.FlippedInterface.__delattr__"]], "__delattr__() (amaranth.lib.wiring.flippedsignature method)": [[28, "amaranth.lib.wiring.FlippedSignature.__delattr__"]], "__delitem__() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.__delitem__"]], "__eq__() (amaranth.lib.wiring.flippedinterface method)": [[28, "amaranth.lib.wiring.FlippedInterface.__eq__"]], "__eq__() (amaranth.lib.wiring.signature method)": [[28, "amaranth.lib.wiring.Signature.__eq__"]], "__eq__() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.__eq__"]], "__getattr__() (amaranth.lib.wiring.flippedinterface method)": [[28, "amaranth.lib.wiring.FlippedInterface.__getattr__"]], "__getattr__() (amaranth.lib.wiring.flippedsignature method)": [[28, "amaranth.lib.wiring.FlippedSignature.__getattr__"]], "__getitem__() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.__getitem__"]], "__init__() (amaranth.lib.wiring.pureinterface method)": [[28, "amaranth.lib.wiring.PureInterface.__init__"]], "__instancecheck__() (amaranth.lib.wiring.signaturemeta method)": [[28, "amaranth.lib.wiring.SignatureMeta.__instancecheck__"]], "__iter__() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.__iter__"]], "__setattr__() (amaranth.lib.wiring.flippedinterface method)": [[28, "amaranth.lib.wiring.FlippedInterface.__setattr__"]], "__setattr__() (amaranth.lib.wiring.flippedsignature method)": [[28, "amaranth.lib.wiring.FlippedSignature.__setattr__"]], "__setitem__() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.__setitem__"]], "__subclasscheck__() (amaranth.lib.wiring.signaturemeta method)": [[28, "amaranth.lib.wiring.SignatureMeta.__subclasscheck__"]], "amaranth.lib.wiring": [[28, "module-amaranth.lib.wiring"]], "annotations() (amaranth.lib.wiring.signature method)": [[28, "amaranth.lib.wiring.Signature.annotations"]], "array() (amaranth.lib.wiring.member method)": [[28, "amaranth.lib.wiring.Member.array"]], "as_json() (amaranth.lib.wiring.componentmetadata method)": [[28, "amaranth.lib.wiring.ComponentMetadata.as_json"]], "connect() (in module amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.connect"]], "create() (amaranth.lib.wiring.signature method)": [[28, "amaranth.lib.wiring.Signature.create"]], "create() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.create"]], "dimensions (amaranth.lib.wiring.member property)": [[28, "amaranth.lib.wiring.Member.dimensions"]], "flatten() (amaranth.lib.wiring.signature method)": [[28, "amaranth.lib.wiring.Signature.flatten"]], "flatten() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.flatten"]], "flip() (amaranth.lib.wiring.flippedsignature method)": [[28, "amaranth.lib.wiring.FlippedSignature.flip"]], "flip() (amaranth.lib.wiring.flippedsignaturemembers method)": [[28, "amaranth.lib.wiring.FlippedSignatureMembers.flip"]], "flip() (amaranth.lib.wiring.flow method)": [[28, "amaranth.lib.wiring.Flow.flip"]], "flip() (amaranth.lib.wiring.member method)": [[28, "amaranth.lib.wiring.Member.flip"]], "flip() (amaranth.lib.wiring.signature method)": [[28, "amaranth.lib.wiring.Signature.flip"]], "flip() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.flip"]], "flipped() (in module amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.flipped"]], "flow (amaranth.lib.wiring.member property)": [[28, "amaranth.lib.wiring.Member.flow"]], "init (amaranth.lib.wiring.member property)": [[28, "amaranth.lib.wiring.Member.init"]], "is_compliant() (amaranth.lib.wiring.signature method)": [[28, "amaranth.lib.wiring.Signature.is_compliant"]], "is_port (amaranth.lib.wiring.member property)": [[28, "amaranth.lib.wiring.Member.is_port"]], "is_signature (amaranth.lib.wiring.member property)": [[28, "amaranth.lib.wiring.Member.is_signature"]], "members (amaranth.lib.wiring.signature property)": [[28, "amaranth.lib.wiring.Signature.members"]], "metadata (amaranth.lib.wiring.component property)": [[28, "amaranth.lib.wiring.Component.metadata"]], "origin (amaranth.lib.wiring.componentmetadata property)": [[28, "amaranth.lib.wiring.ComponentMetadata.origin"]], "schema (amaranth.lib.wiring.componentmetadata attribute)": [[28, "amaranth.lib.wiring.ComponentMetadata.schema"]], "shape (amaranth.lib.wiring.member property)": [[28, "amaranth.lib.wiring.Member.shape"]], "signature (amaranth.lib.wiring.component property)": [[28, "amaranth.lib.wiring.Component.signature"]], "signature (amaranth.lib.wiring.flippedinterface property)": [[28, "amaranth.lib.wiring.FlippedInterface.signature"]], "signature (amaranth.lib.wiring.member property)": [[28, "amaranth.lib.wiring.Member.signature"]], "validate() (amaranth.lib.wiring.componentmetadata class method)": [[28, "amaranth.lib.wiring.ComponentMetadata.validate"]]}}) \ No newline at end of file +Search.setIndex({"alltitles": {"A blinking LED": [[16, "a-blinking-led"]], "A counter": [[16, "a-counter"]], "Accessing a constant": [[21, "accessing-a-constant"]], "Accessing a view": [[21, "accessing-a-view"]], "Active and inactive assignments": [[3, "active-and-inactive-assignments"]], "Adapting interfaces": [[28, "adapting-interfaces"]], "Algorithm catalog": [[20, null]], "Algorithms and parameters": [[19, "algorithms-and-parameters"]], "Altera": [[8, null]], "Amaranth project documentation": [[2, null]], "Arithmetic operators": [[3, "arithmetic-operators"]], "Arrays": [[3, "arrays"]], "Assertions": [[3, "assertions"]], "Assignable values": [[3, "assignable-values"]], "Assigning to signals": [[3, "assigning-to-signals"]], "Assignment domains": [[3, "assignment-domains"]], "Assignment order": [[3, "assignment-order"]], "Backwards compatibility": [[14, "backwards-compatibility"]], "Base classes": [[22, "base-classes"]], "Bidirectional bus": [[24, "bidirectional-bus"]], "Bit sequence operators": [[3, "bit-sequence-operators"]], "Bitwise, shift, and rotate operators": [[3, "bitwise-shift-and-rotate-operators"]], "Buffers": [[24, "buffers"]], "Building the documentation": [[1, "building-the-documentation"]], "CRC computation": [[19, "crc-computation"]], "Changelog": [[0, null]], "Choice operator": [[3, "choice-operator"]], "Clock domain crossing": [[18, null]], "Clock domains": [[3, "clock-domains"]], "Clock forwarding": [[24, "clock-forwarding"]], "Clock input": [[24, "clock-input"]], "Combinational evaluation": [[3, "combinational-evaluation"]], "Common data layouts": [[21, "common-data-layouts"]], "Comparison operators": [[3, "comparison-operators"]], "Complete pipeline": [[27, "complete-pipeline"]], "Component metadata": [[28, "component-metadata"]], "Components": [[28, "components"]], "Composing layouts": [[21, "composing-layouts"]], "Constant casting": [[3, "constant-casting"]], "Constant inputs": [[28, "constant-inputs"]], "Constants": [[3, "constants"]], "Contributing": [[1, null]], "Contributing your changes": [[1, "contributing-your-changes"]], "Control domains": [[3, "control-domains"]], "Control flow": [[3, "control-flow"]], "Conversion operators": [[3, "conversion-operators"]], "Converting a counter": [[16, "converting-a-counter"]], "Creating a constant": [[21, "creating-a-constant"]], "Creating a view": [[21, "creating-a-view"]], "Custom shapes": [[3, "custom-shapes"]], "Custom view classes": [[21, "custom-view-classes"]], "Customizing signatures and interfaces": [[28, "customizing-signatures-and-interfaces"]], "Cyclic redundancy checks": [[19, null]], "Data classes": [[21, "data-classes"]], "Data streams": [[27, null]], "Data structures": [[3, "data-structures"], [21, null]], "Data transfer rules": [[27, "data-transfer-rules"]], "Data views": [[21, "data-views"]], "Debug printing": [[3, "debug-printing"]], "Defining annotations": [[26, "defining-annotations"]], "Defining layouts": [[21, "defining-layouts"]], "Development board definitions": [[6, "development-board-definitions"]], "Development snapshot": [[5, "development-snapshot"]], "Discriminated unions": [[21, "discriminated-unions"]], "Documentation for past releases": [[0, "documentation-for-past-releases"]], "Documentation style guide": [[1, "documentation-style-guide"]], "Editable development snapshot": [[5, "editable-development-snapshot"]], "Elaboration": [[3, "elaboration"]], "Enumerations": [[22, null]], "Examples": [[19, "examples"], [24, "examples"], [25, "examples"], [27, "examples"]], "FPGA toolchain integration": [[6, "fpga-toolchain-integration"]], "FSM/State control blocks": [[3, "fsm-state-control-blocks"]], "Filing problem reports": [[1, "filing-problem-reports"]], "First-in first-out queues": [[23, null]], "First-in, first-out queue": [[25, "first-in-first-out-queue"]], "Fixing problems": [[1, "fixing-problems"]], "Forwarding interior interfaces": [[28, "forwarding-interior-interfaces"]], "Getting started": [[16, null]], "Gowin": [[9, null]], "I/O buffer instances": [[3, "i-o-buffer-instances"]], "I/O operators": [[3, "i-o-operators"]], "I/O ports": [[3, "i-o-ports"]], "I/O values": [[3, "i-o-values"]], "Identifying schemas": [[26, "identifying-schemas"]], "If/Elif/Else control blocks": [[3, "if-elif-else-control-blocks"]], "Implemented RFCs": [[0, "implemented-rfcs"], [0, "id4"], [0, "id6"], [0, "id11"]], "Implementing a counter": [[16, "implementing-a-counter"]], "Importing syntax": [[14, "importing-syntax"]], "In-browser playground": [[5, "in-browser-playground"]], "Initial signal values": [[3, "initial-signal-values"]], "Input/output buffers": [[24, null]], "Installation": [[5, null]], "Installing Amaranth": [[5, "installing-amaranth"]], "Installing board definitions": [[5, "installing-board-definitions"]], "Installing prerequisites": [[5, "installing-prerequisites"]], "Instances": [[3, "instances"]], "Interface metadata": [[26, null]], "Interfaces": [[28, "interfaces"]], "Interfaces and connections": [[28, null]], "Introduction": [[6, null], [19, "introduction"], [21, "introduction"], [24, "introduction"], [25, "introduction"], [26, "introduction"], [27, "introduction"], [28, "introduction"]], "LED output": [[24, "led-output"]], "Language & toolchain": [[4, null]], "Language changes": [[0, "language-changes"], [0, "id1"], [0, "id7"], [0, "id12"], [0, "id16"]], "Language guide": [[3, null]], "Language reference": [[14, null]], "Late binding of clock and reset signals": [[3, "late-binding-of-clock-and-reset-signals"]], "Latest release": [[5, "latest-release"]], "Lattice": [[10, null]], "Logical operators": [[3, "logical-operators"]], "Making connections": [[28, "making-connections"]], "Match operator": [[3, "match-operator"]], "Memories": [[3, "memories"]], "Memory arrays": [[25, null]], "Memory component": [[25, "memory-component"]], "Memory description": [[25, "memory-description"]], "Memory ports": [[25, "memory-ports"]], "Metaclass": [[22, "metaclass"]], "Migrating from version 0.2": [[0, "migrating-from-version-0-2"]], "Migrating from version 0.3": [[0, "migrating-from-version-0-3"]], "Migrating from version 0.4": [[0, "migrating-from-version-0-4"]], "Modeling structured data": [[21, "modeling-structured-data"]], "Modifying control flow": [[3, "modifying-control-flow"]], "Modules": [[3, "modules"]], "Motivation": [[21, "motivation"], [28, "motivation"]], "Operators": [[3, "operators"]], "Overview": [[21, "overview"], [28, "overview"]], "Paths": [[28, "paths"]], "Performing or describing computations?": [[3, "performing-or-describing-computations"]], "Platform integration": [[7, null]], "Platform integration changes": [[0, "platform-integration-changes"], [0, "id3"], [0, "id10"], [0, "id15"], [0, "id19"]], "Ports": [[24, "ports"]], "Predefined algorithms": [[19, "predefined-algorithms"]], "Preparing the environment": [[1, "preparing-the-environment"]], "Proposing new features": [[1, "proposing-new-features"]], "Quicklogic": [[11, null]], "Read-only memory": [[25, "read-only-memory"]], "Reduction operators": [[3, "reduction-operators"]], "Reference": [[15, "reference"], [26, "reference"], [27, "reference"]], "Renaming domains": [[3, "renaming-domains"]], "Replacing circuits with code": [[15, "replacing-circuits-with-code"]], "Replacing combinational circuits": [[15, "replacing-combinational-circuits"]], "Replacing synchronous circuits": [[15, "replacing-synchronous-circuits"]], "Reset-less signals": [[3, "reset-less-signals"]], "Reusable interfaces": [[28, "reusable-interfaces"]], "Running a simulation": [[15, "running-a-simulation"]], "Running the testsuite": [[1, "running-the-testsuite"]], "Serial receiver": [[27, "serial-receiver"]], "Serial transmitter": [[27, "serial-transmitter"]], "Shape casting": [[3, "shape-casting"]], "Shapes": [[3, "shapes"], [14, "shapes"]], "Shapes from enumerations": [[3, "shapes-from-enumerations"]], "Shapes from integers": [[3, "shapes-from-integers"]], "Shapes from ranges": [[3, "shapes-from-ranges"]], "Shapes of values": [[3, "shapes-of-values"]], "Signal names": [[3, "signal-names"]], "Signal shapes": [[3, "signal-shapes"]], "Signals": [[3, "signals"]], "Signatures": [[28, "signatures"]], "SiliconBlue": [[12, null]], "Simulating circuits": [[15, "simulating-circuits"]], "Simulation": [[24, "simulation"], [25, "simulation"]], "Simulator": [[15, null]], "Source locations": [[14, "source-locations"]], "Standard library": [[17, null]], "Standard library changes": [[0, "standard-library-changes"], [0, "id2"], [0, "id5"], [0, "id8"], [0, "id13"], [0, "id17"]], "Submodules": [[3, "submodules"]], "Switch/Case control blocks": [[3, "switch-case-control-blocks"]], "Synchronous evaluation": [[3, "synchronous-evaluation"]], "System requirements": [[5, "system-requirements"]], "Testing a counter": [[16, "testing-a-counter"]], "Testing combinational circuits": [[15, "testing-combinational-circuits"]], "Testing synchronous circuits": [[15, "testing-synchronous-circuits"]], "The Amaranth build system": [[6, "the-amaranth-build-system"]], "The Amaranth language": [[6, "the-amaranth-language"]], "The Amaranth simulator": [[6, "the-amaranth-simulator"]], "The Amaranth standard library": [[6, "the-amaranth-standard-library"]], "The prelude": [[3, "the-prelude"]], "Todo": [[5, "id1"], [7, "id1"], [16, "id1"], [29, "id1"]], "Toolchain changes": [[0, "toolchain-changes"], [0, "id9"], [0, "id14"], [0, "id18"]], "Tutorial": [[29, null]], "Value casting": [[3, "value-casting"]], "Value negator": [[27, "value-negator"]], "Values": [[3, "values"], [14, "values"]], "Values from enumeration members": [[3, "values-from-enumeration-members"]], "Values from integers": [[3, "values-from-integers"]], "Version 0.3": [[0, "version-0-3"]], "Version 0.4.0": [[0, "version-0-4-0"]], "Version 0.5.0": [[0, "version-0-5-0"]], "Version 0.5.1": [[0, "version-0-5-1"]], "Version 0.5.2": [[0, "version-0-5-2"]], "Version 0.5.3 (unreleased)": [[0, "version-0-5-3-unreleased"]], "Version 0.6.0 (unreleased)": [[0, "version-0-6-0-unreleased"]], "Versions 0.1, 0.2": [[0, "versions-0-1-0-2"]], "View classes": [[22, "view-classes"]], "Weekly meetings": [[1, "weekly-meetings"]], "Width extension": [[3, "width-extension"]], "Working with the codebase": [[1, "working-with-the-codebase"]], "Xilinx": [[13, null]]}, "docnames": ["changes", "contrib", "cover", "guide", "index", "install", "intro", "platform", "platform/altera", "platform/gowin", "platform/lattice", "platform/quicklogic", "platform/siliconblue", "platform/xilinx", "reference", "simulator", "start", "stdlib", "stdlib/cdc", "stdlib/crc", "stdlib/crc/catalog", "stdlib/data", "stdlib/enum", "stdlib/fifo", "stdlib/io", "stdlib/memory", "stdlib/meta", "stdlib/stream", "stdlib/wiring", "tutorial"], "envversion": {"sphinx": 62, "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}, "filenames": ["changes.rst", "contrib.rst", "cover.rst", "guide.rst", "index.rst", "install.rst", "intro.rst", "platform.rst", "platform/altera.rst", "platform/gowin.rst", "platform/lattice.rst", "platform/quicklogic.rst", "platform/siliconblue.rst", "platform/xilinx.rst", "reference.rst", "simulator.rst", "start.rst", "stdlib.rst", "stdlib/cdc.rst", "stdlib/crc.rst", "stdlib/crc/catalog.rst", "stdlib/data.rst", "stdlib/enum.rst", "stdlib/fifo.rst", "stdlib/io.rst", "stdlib/memory.rst", "stdlib/meta.rst", "stdlib/stream.rst", "stdlib/wiring.rst", "tutorial.rst"], "indexentries": {"__abs__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__abs__", false]], "__add__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__add__", false]], "__add__() (amaranth.lib.io.portlike method)": [[24, "amaranth.lib.io.PortLike.__add__", false]], "__and__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__and__", false]], "__and__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__and__", false]], "__and__() (amaranth.lib.io.direction method)": [[24, "amaranth.lib.io.Direction.__and__", false]], "__bool__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__bool__", false]], "__call__() (amaranth.hdl.shapecastable method)": [[14, "amaranth.hdl.ShapeCastable.__call__", false]], "__call__() (amaranth.lib.crc.algorithm method)": [[19, "amaranth.lib.crc.Algorithm.__call__", false]], "__call__() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.__call__", false]], "__call__() (amaranth.lib.enum.enumtype method)": [[22, "amaranth.lib.enum.EnumType.__call__", false]], "__call__() (amaranth.lib.wiring.flow method)": [[28, "amaranth.lib.wiring.Flow.__call__", false]], "__contains__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__contains__", false]], "__contains__() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.__contains__", false]], "__delattr__() (amaranth.lib.wiring.flippedinterface method)": [[28, "amaranth.lib.wiring.FlippedInterface.__delattr__", false]], "__delattr__() (amaranth.lib.wiring.flippedsignature method)": [[28, "amaranth.lib.wiring.FlippedSignature.__delattr__", false]], "__delitem__() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.__delitem__", false]], "__eq__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__eq__", false]], "__eq__() (amaranth.lib.data.field method)": [[21, "amaranth.lib.data.Field.__eq__", false]], "__eq__() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.__eq__", false]], "__eq__() (amaranth.lib.enum.enumview method)": [[22, "amaranth.lib.enum.EnumView.__eq__", false]], "__eq__() (amaranth.lib.wiring.flippedinterface method)": [[28, "amaranth.lib.wiring.FlippedInterface.__eq__", false]], "__eq__() (amaranth.lib.wiring.signature method)": [[28, "amaranth.lib.wiring.Signature.__eq__", false]], "__eq__() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.__eq__", false]], "__floordiv__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__floordiv__", false]], "__format__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__format__", false]], "__ge__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__ge__", false]], "__getattr__() (amaranth.lib.data.const method)": [[21, "amaranth.lib.data.Const.__getattr__", false]], "__getattr__() (amaranth.lib.data.view method)": [[21, "amaranth.lib.data.View.__getattr__", false]], "__getattr__() (amaranth.lib.wiring.flippedinterface method)": [[28, "amaranth.lib.wiring.FlippedInterface.__getattr__", false]], "__getattr__() (amaranth.lib.wiring.flippedsignature method)": [[28, "amaranth.lib.wiring.FlippedSignature.__getattr__", false]], "__getitem__() (amaranth.hdl.memorydata method)": [[25, "amaranth.hdl.MemoryData.__getitem__", false]], "__getitem__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__getitem__", false]], "__getitem__() (amaranth.lib.data.const method)": [[21, "amaranth.lib.data.Const.__getitem__", false]], "__getitem__() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.__getitem__", false]], "__getitem__() (amaranth.lib.data.view method)": [[21, "amaranth.lib.data.View.__getitem__", false]], "__getitem__() (amaranth.lib.io.portlike method)": [[24, "amaranth.lib.io.PortLike.__getitem__", false]], "__getitem__() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.__getitem__", false]], "__gt__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__gt__", false]], "__hash__ (amaranth.hdl.value attribute)": [[14, "amaranth.hdl.Value.__hash__", false]], "__init__() (amaranth.lib.enum.enumview method)": [[22, "amaranth.lib.enum.EnumView.__init__", false]], "__init__() (amaranth.lib.wiring.pureinterface method)": [[28, "amaranth.lib.wiring.PureInterface.__init__", false]], "__init_subclass__() (amaranth.lib.meta.annotation class method)": [[26, "amaranth.lib.meta.Annotation.__init_subclass__", false]], "__instancecheck__() (amaranth.lib.wiring.signaturemeta method)": [[28, "amaranth.lib.wiring.SignatureMeta.__instancecheck__", false]], "__invert__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__invert__", false]], "__invert__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__invert__", false]], "__invert__() (amaranth.lib.io.portlike method)": [[24, "amaranth.lib.io.PortLike.__invert__", false]], "__iter__() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.__iter__", false]], "__iter__() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.__iter__", false]], "__le__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__le__", false]], "__len__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__len__", false]], "__len__() (amaranth.lib.io.portlike method)": [[24, "amaranth.lib.io.PortLike.__len__", false]], "__lshift__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__lshift__", false]], "__lt__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__lt__", false]], "__mod__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__mod__", false]], "__mul__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__mul__", false]], "__ne__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__ne__", false]], "__neg__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__neg__", false]], "__or__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__or__", false]], "__or__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__or__", false]], "__pos__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__pos__", false]], "__radd__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__radd__", false]], "__rand__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rand__", false]], "__rand__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__rand__", false]], "__repr__() (amaranth.hdl.shape method)": [[14, "amaranth.hdl.Shape.__repr__", false]], "__rfloordiv__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rfloordiv__", false]], "__rlshift__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rlshift__", false]], "__rmod__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rmod__", false]], "__rmul__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rmul__", false]], "__ror__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__ror__", false]], "__ror__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__ror__", false]], "__rrshift__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rrshift__", false]], "__rshift__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rshift__", false]], "__rsub__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rsub__", false]], "__rxor__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__rxor__", false]], "__rxor__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__rxor__", false]], "__setattr__() (amaranth.lib.wiring.flippedinterface method)": [[28, "amaranth.lib.wiring.FlippedInterface.__setattr__", false]], "__setattr__() (amaranth.lib.wiring.flippedsignature method)": [[28, "amaranth.lib.wiring.FlippedSignature.__setattr__", false]], "__setitem__() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.__setitem__", false]], "__sub__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__sub__", false]], "__subclasscheck__() (amaranth.lib.wiring.signaturemeta method)": [[28, "amaranth.lib.wiring.SignatureMeta.__subclasscheck__", false]], "__xor__() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.__xor__", false]], "__xor__() (amaranth.lib.enum.flagview method)": [[22, "amaranth.lib.enum.FlagView.__xor__", false]], "add_clock() (amaranth.sim.simulator method)": [[15, "amaranth.sim.Simulator.add_clock", false]], "add_process() (amaranth.sim.simulator method)": [[15, "amaranth.sim.Simulator.add_process", false]], "add_testbench() (amaranth.sim.simulator method)": [[15, "amaranth.sim.Simulator.add_testbench", false]], "advance() (amaranth.sim.simulator method)": [[15, "amaranth.sim.Simulator.advance", false]], "algorithm (class in amaranth.lib.crc)": [[19, "amaranth.lib.crc.Algorithm", false]], "all() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.all", false]], "alteraplatform (class in amaranth.vendor)": [[8, "amaranth.vendor.AlteraPlatform", false]], "amaranth.hdl": [[14, "module-amaranth.hdl", false]], "amaranth.lib.cdc": [[18, "module-amaranth.lib.cdc", false]], "amaranth.lib.crc": [[19, "module-amaranth.lib.crc", false]], "amaranth.lib.crc.catalog": [[20, "module-amaranth.lib.crc.catalog", false]], "amaranth.lib.data": [[21, "module-amaranth.lib.data", false]], "amaranth.lib.enum": [[22, "module-amaranth.lib.enum", false]], "amaranth.lib.fifo": [[23, "module-amaranth.lib.fifo", false]], "amaranth.lib.io": [[24, "module-amaranth.lib.io", false]], "amaranth.lib.memory": [[25, "module-amaranth.lib.memory", false]], "amaranth.lib.meta": [[26, "module-amaranth.lib.meta", false]], "amaranth.lib.stream": [[27, "module-amaranth.lib.stream", false]], "amaranth.lib.wiring": [[28, "module-amaranth.lib.wiring", false]], "amaranth.sim": [[15, "module-amaranth.sim", false]], "annotation (class in amaranth.lib.meta)": [[26, "amaranth.lib.meta.Annotation", false]], "annotations() (amaranth.lib.wiring.signature method)": [[28, "amaranth.lib.wiring.Signature.annotations", false]], "any() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.any", false]], "array() (amaranth.lib.wiring.member method)": [[28, "amaranth.lib.wiring.Member.array", false]], "arraylayout (class in amaranth.lib.data)": [[21, "amaranth.lib.data.ArrayLayout", false]], "as_bits() (amaranth.lib.data.const method)": [[21, "amaranth.lib.data.Const.as_bits", false]], "as_json() (amaranth.lib.meta.annotation method)": [[26, "amaranth.lib.meta.Annotation.as_json", false]], "as_json() (amaranth.lib.wiring.componentmetadata method)": [[28, "amaranth.lib.wiring.ComponentMetadata.as_json", false]], "as_shape() (amaranth.hdl.shapecastable method)": [[14, "amaranth.hdl.ShapeCastable.as_shape", false]], "as_shape() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.as_shape", false]], "as_shape() (amaranth.lib.enum.enumtype method)": [[22, "amaranth.lib.enum.EnumType.as_shape", false]], "as_signed() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.as_signed", false]], "as_unsigned() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.as_unsigned", false]], "as_value() (amaranth.hdl.valuecastable method)": [[14, "amaranth.hdl.ValueCastable.as_value", false]], "as_value() (amaranth.lib.data.const method)": [[21, "amaranth.lib.data.Const.as_value", false]], "as_value() (amaranth.lib.data.view method)": [[21, "amaranth.lib.data.View.as_value", false]], "as_value() (amaranth.lib.enum.enumview method)": [[22, "amaranth.lib.enum.EnumView.as_value", false]], "asyncffsynchronizer (class in amaranth.lib.cdc)": [[18, "amaranth.lib.cdc.AsyncFFSynchronizer", false]], "asyncfifo (class in amaranth.lib.fifo)": [[23, "amaranth.lib.fifo.AsyncFIFO", false]], "asyncfifobuffered (class in amaranth.lib.fifo)": [[23, "amaranth.lib.fifo.AsyncFIFOBuffered", false]], "bidir (amaranth.lib.io.direction attribute)": [[24, "amaranth.lib.io.Direction.Bidir", false]], "bit_select() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.bit_select", false]], "bool() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.bool", false]], "brokentrigger": [[15, "amaranth.sim.BrokenTrigger", false]], "buffer (class in amaranth.lib.io)": [[24, "amaranth.lib.io.Buffer", false]], "buffer.signature (class in amaranth.lib.io)": [[24, "amaranth.lib.io.Buffer.Signature", false]], "cast() (amaranth.hdl.shape static method)": [[14, "amaranth.hdl.Shape.cast", false]], "cast() (amaranth.hdl.value static method)": [[14, "amaranth.hdl.Value.cast", false]], "cast() (amaranth.lib.data.layout static method)": [[21, "amaranth.lib.data.Layout.cast", false]], "changed() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.changed", false]], "changed() (amaranth.sim.triggercombination method)": [[15, "amaranth.sim.TriggerCombination.changed", false]], "component (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.Component", false]], "componentmetadata (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.ComponentMetadata", false]], "compute() (amaranth.lib.crc.parameters method)": [[19, "amaranth.lib.crc.Parameters.compute", false]], "connect() (in module amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.connect", false]], "connectionerror": [[28, "amaranth.lib.wiring.ConnectionError", false]], "const (class in amaranth.lib.data)": [[21, "amaranth.lib.data.Const", false]], "const() (amaranth.hdl.shapecastable method)": [[14, "amaranth.hdl.ShapeCastable.const", false]], "const() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.const", false]], "crc10_atm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC10_ATM", false]], "crc10_cdma2000 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC10_CDMA2000", false]], "crc10_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC10_GSM", false]], "crc10_i_610 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC10_I_610", false]], "crc11_flexray (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC11_FLEXRAY", false]], "crc11_umts (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC11_UMTS", false]], "crc12_3gpp (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC12_3GPP", false]], "crc12_cdma2000 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC12_CDMA2000", false]], "crc12_dect (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC12_DECT", false]], "crc12_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC12_GSM", false]], "crc12_umts (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC12_UMTS", false]], "crc13_bbc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC13_BBC", false]], "crc14_darc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC14_DARC", false]], "crc14_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC14_GSM", false]], "crc15_can (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC15_CAN", false]], "crc15_mpt1327 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC15_MPT1327", false]], "crc16_acorn (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ACORN", false]], "crc16_arc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ARC", false]], "crc16_aug_ccitt (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_AUG_CCITT", false]], "crc16_autosar (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_AUTOSAR", false]], "crc16_bluetooth (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_BLUETOOTH", false]], "crc16_buypass (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_BUYPASS", false]], "crc16_ccitt (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_CCITT", false]], "crc16_ccitt_false (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_CCITT_FALSE", false]], "crc16_ccitt_true (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_CCITT_TRUE", false]], "crc16_cdma2000 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_CDMA2000", false]], "crc16_cms (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_CMS", false]], "crc16_darc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_DARC", false]], "crc16_dds_110 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_DDS_110", false]], "crc16_dect_r (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_DECT_R", false]], "crc16_dect_x (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_DECT_X", false]], "crc16_dnp (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_DNP", false]], "crc16_en_13757 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_EN_13757", false]], "crc16_epc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_EPC", false]], "crc16_epc_c1g2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_EPC_C1G2", false]], "crc16_genibus (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_GENIBUS", false]], "crc16_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_GSM", false]], "crc16_i_code (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_I_CODE", false]], "crc16_ibm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_IBM", false]], "crc16_ibm_3740 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_IBM_3740", false]], "crc16_ibm_sdlc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_IBM_SDLC", false]], "crc16_iec_61158_2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_IEC_61158_2", false]], "crc16_iso_hdlc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ISO_HDLC", false]], "crc16_iso_iec_14443_3_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ISO_IEC_14443_3_A", false]], "crc16_iso_iec_14443_3_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ISO_IEC_14443_3_B", false]], "crc16_kermit (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_KERMIT", false]], "crc16_lj1200 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_LJ1200", false]], "crc16_lte (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_LTE", false]], "crc16_m17 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_M17", false]], "crc16_maxim (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_MAXIM", false]], "crc16_maxim_dow (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_MAXIM_DOW", false]], "crc16_mcrf4xx (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_MCRF4XX", false]], "crc16_modbus (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_MODBUS", false]], "crc16_nrsc_5 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_NRSC_5", false]], "crc16_opensafety_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_OPENSAFETY_A", false]], "crc16_opensafety_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_OPENSAFETY_B", false]], "crc16_profibus (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_PROFIBUS", false]], "crc16_riello (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_RIELLO", false]], "crc16_spi_fujitsu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_SPI_FUJITSU", false]], "crc16_t10_dif (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_T10_DIF", false]], "crc16_teledisk (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_TELEDISK", false]], "crc16_tms37157 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_TMS37157", false]], "crc16_umts (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_UMTS", false]], "crc16_usb (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_USB", false]], "crc16_v_41_lsb (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_V_41_LSB", false]], "crc16_v_41_msb (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_V_41_MSB", false]], "crc16_verifone (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_VERIFONE", false]], "crc16_x25 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_X25", false]], "crc16_xmodem (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_XMODEM", false]], "crc16_zmodem (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC16_ZMODEM", false]], "crc17_can_fd (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC17_CAN_FD", false]], "crc21_can_fd (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC21_CAN_FD", false]], "crc24_ble (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_BLE", false]], "crc24_flexray_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_FLEXRAY_A", false]], "crc24_flexray_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_FLEXRAY_B", false]], "crc24_interlaken (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_INTERLAKEN", false]], "crc24_lte_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_LTE_A", false]], "crc24_lte_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_LTE_B", false]], "crc24_openpgp (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_OPENPGP", false]], "crc24_os_9 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC24_OS_9", false]], "crc30_cdma (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC30_CDMA", false]], "crc31_philips (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC31_PHILIPS", false]], "crc32_aal5 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_AAL5", false]], "crc32_adccp (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_ADCCP", false]], "crc32_aixm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_AIXM", false]], "crc32_autosar (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_AUTOSAR", false]], "crc32_base91_c (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_BASE91_C", false]], "crc32_base91_d (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_BASE91_D", false]], "crc32_bzip2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_BZIP2", false]], "crc32_castagnoli (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_CASTAGNOLI", false]], "crc32_cd_rom_edc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_CD_ROM_EDC", false]], "crc32_cksum (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_CKSUM", false]], "crc32_dect_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_DECT_B", false]], "crc32_ethernet (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_ETHERNET", false]], "crc32_interlaken (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_INTERLAKEN", false]], "crc32_iscsi (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_ISCSI", false]], "crc32_iso_hdlc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_ISO_HDLC", false]], "crc32_jamcrc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_JAMCRC", false]], "crc32_mef (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_MEF", false]], "crc32_mpeg_2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_MPEG_2", false]], "crc32_pkzip (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_PKZIP", false]], "crc32_posix (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_POSIX", false]], "crc32_v_42 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_V_42", false]], "crc32_xfer (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_XFER", false]], "crc32_xz (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC32_XZ", false]], "crc3_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC3_GSM", false]], "crc3_rohc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC3_ROHC", false]], "crc40_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC40_GSM", false]], "crc4_g_704 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC4_G_704", false]], "crc4_interlaken (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC4_INTERLAKEN", false]], "crc4_itu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC4_ITU", false]], "crc5_epc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC5_EPC", false]], "crc5_epc_c1g2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC5_EPC_C1G2", false]], "crc5_g_704 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC5_G_704", false]], "crc5_itu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC5_ITU", false]], "crc5_usb (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC5_USB", false]], "crc64_ecma (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_ECMA", false]], "crc64_ecma_182 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_ECMA_182", false]], "crc64_go_iso (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_GO_ISO", false]], "crc64_ms (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_MS", false]], "crc64_redis (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_REDIS", false]], "crc64_we (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_WE", false]], "crc64_xz (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC64_XZ", false]], "crc6_cdma2000_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_CDMA2000_A", false]], "crc6_cdma2000_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_CDMA2000_B", false]], "crc6_darc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_DARC", false]], "crc6_g_704 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_G_704", false]], "crc6_gsm (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_GSM", false]], "crc6_itu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC6_ITU", false]], "crc7_mmc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC7_MMC", false]], "crc7_rohc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC7_ROHC", false]], "crc7_umts (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC7_UMTS", false]], "crc82_darc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC82_DARC", false]], "crc8_aes (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_AES", false]], "crc8_autosar (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_AUTOSAR", false]], "crc8_bluetooth (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_BLUETOOTH", false]], "crc8_cdma2000 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_CDMA2000", false]], "crc8_darc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_DARC", false]], "crc8_dvb_s2 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_DVB_S2", false]], "crc8_etu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_ETU", false]], "crc8_gsm_a (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_GSM_A", false]], "crc8_gsm_b (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_GSM_B", false]], "crc8_hitag (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_HITAG", false]], "crc8_i_432_1 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_I_432_1", false]], "crc8_i_code (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_I_CODE", false]], "crc8_itu (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_ITU", false]], "crc8_lte (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_LTE", false]], "crc8_maxim (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_MAXIM", false]], "crc8_maxim_dow (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_MAXIM_DOW", false]], "crc8_mifare_mad (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_MIFARE_MAD", false]], "crc8_nrsc_5 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_NRSC_5", false]], "crc8_opensafety (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_OPENSAFETY", false]], "crc8_rohc (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_ROHC", false]], "crc8_sae_j1850 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_SAE_J1850", false]], "crc8_smbus (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_SMBUS", false]], "crc8_tech_3250 (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_TECH_3250", false]], "crc8_wcdma (in module amaranth.lib.crc.catalog)": [[20, "amaranth.lib.crc.catalog.CRC8_WCDMA", false]], "create() (amaranth.lib.crc.parameters method)": [[19, "amaranth.lib.crc.Parameters.create", false]], "create() (amaranth.lib.wiring.signature method)": [[28, "amaranth.lib.wiring.Signature.create", false]], "create() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.create", false]], "critical() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.critical", false]], "ddrbuffer (class in amaranth.lib.io)": [[24, "amaranth.lib.io.DDRBuffer", false]], "ddrbuffer.signature (class in amaranth.lib.io)": [[24, "amaranth.lib.io.DDRBuffer.Signature", false]], "delay() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.delay", false]], "delay() (amaranth.sim.triggercombination method)": [[15, "amaranth.sim.TriggerCombination.delay", false]], "differentialport (class in amaranth.lib.io)": [[24, "amaranth.lib.io.DifferentialPort", false]], "dimensions (amaranth.lib.wiring.member property)": [[28, "amaranth.lib.wiring.Member.dimensions", false]], "direction (amaranth.lib.io.portlike property)": [[24, "amaranth.lib.io.PortLike.direction", false]], "direction (class in amaranth.lib.io)": [[24, "amaranth.lib.io.Direction", false]], "domainreset": [[15, "amaranth.sim.DomainReset", false]], "edge() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.edge", false]], "edge() (amaranth.sim.triggercombination method)": [[15, "amaranth.sim.TriggerCombination.edge", false]], "elapsed_time() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.elapsed_time", false]], "enum (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.Enum", false]], "enumtype (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.EnumType", false]], "enumview (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.EnumView", false]], "eq() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.eq", false]], "eq() (amaranth.lib.data.view method)": [[21, "amaranth.lib.data.View.eq", false]], "eq() (amaranth.lib.enum.enumview method)": [[22, "amaranth.lib.enum.EnumView.eq", false]], "ffbuffer (class in amaranth.lib.io)": [[24, "amaranth.lib.io.FFBuffer", false]], "ffbuffer.signature (class in amaranth.lib.io)": [[24, "amaranth.lib.io.FFBuffer.Signature", false]], "ffsynchronizer (class in amaranth.lib.cdc)": [[18, "amaranth.lib.cdc.FFSynchronizer", false]], "field (class in amaranth.lib.data)": [[21, "amaranth.lib.data.Field", false]], "fifointerface (class in amaranth.lib.fifo)": [[23, "amaranth.lib.fifo.FIFOInterface", false]], "flag (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.Flag", false]], "flagview (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.FlagView", false]], "flatten() (amaranth.lib.wiring.signature method)": [[28, "amaranth.lib.wiring.Signature.flatten", false]], "flatten() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.flatten", false]], "flexiblelayout (class in amaranth.lib.data)": [[21, "amaranth.lib.data.FlexibleLayout", false]], "flip() (amaranth.lib.wiring.flippedsignature method)": [[28, "amaranth.lib.wiring.FlippedSignature.flip", false]], "flip() (amaranth.lib.wiring.flippedsignaturemembers method)": [[28, "amaranth.lib.wiring.FlippedSignatureMembers.flip", false]], "flip() (amaranth.lib.wiring.flow method)": [[28, "amaranth.lib.wiring.Flow.flip", false]], "flip() (amaranth.lib.wiring.member method)": [[28, "amaranth.lib.wiring.Member.flip", false]], "flip() (amaranth.lib.wiring.signature method)": [[28, "amaranth.lib.wiring.Signature.flip", false]], "flip() (amaranth.lib.wiring.signaturemembers method)": [[28, "amaranth.lib.wiring.SignatureMembers.flip", false]], "flipped() (in module amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.flipped", false]], "flippedinterface (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.FlippedInterface", false]], "flippedsignature (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.FlippedSignature", false]], "flippedsignaturemembers (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.FlippedSignatureMembers", false]], "flow (amaranth.lib.wiring.member property)": [[28, "amaranth.lib.wiring.Member.flow", false]], "flow (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.Flow", false]], "format() (amaranth.hdl.shapecastable method)": [[14, "amaranth.hdl.ShapeCastable.format", false]], "from_bits() (amaranth.hdl.shapecastable method)": [[14, "amaranth.hdl.ShapeCastable.from_bits", false]], "from_bits() (amaranth.lib.data.layout method)": [[21, "amaranth.lib.data.Layout.from_bits", false]], "get() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.get", false]], "gowinplatform (class in amaranth.vendor)": [[9, "amaranth.vendor.GowinPlatform", false]], "in (amaranth.lib.wiring.flow attribute)": [[28, "amaranth.lib.wiring.Flow.In", false]], "in (in module amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.In", false]], "init (amaranth.lib.wiring.member property)": [[28, "amaranth.lib.wiring.Member.init", false]], "input (amaranth.lib.io.direction attribute)": [[24, "amaranth.lib.io.Direction.Input", false]], "intenum (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.IntEnum", false]], "interface (class in amaranth.lib.stream)": [[27, "amaranth.lib.stream.Interface", false]], "intflag (class in amaranth.lib.enum)": [[22, "amaranth.lib.enum.IntFlag", false]], "invalidannotation": [[26, "amaranth.lib.meta.InvalidAnnotation", false]], "invalidmetadata": [[28, "amaranth.lib.wiring.InvalidMetadata", false]], "invalidschema": [[26, "amaranth.lib.meta.InvalidSchema", false]], "is_compliant() (amaranth.lib.wiring.signature method)": [[28, "amaranth.lib.wiring.Signature.is_compliant", false]], "is_port (amaranth.lib.wiring.member property)": [[28, "amaranth.lib.wiring.Member.is_port", false]], "is_signature (amaranth.lib.wiring.member property)": [[28, "amaranth.lib.wiring.Member.is_signature", false]], "latticeplatform (class in amaranth.vendor)": [[10, "amaranth.vendor.LatticePlatform", false]], "layout (class in amaranth.lib.data)": [[21, "amaranth.lib.data.Layout", false]], "matches() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.matches", false]], "matches() (amaranth.lib.enum.enumview method)": [[22, "amaranth.lib.enum.EnumView.matches", false]], "member (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.Member", false]], "members (amaranth.lib.wiring.signature property)": [[28, "amaranth.lib.wiring.Signature.members", false]], "memory (class in amaranth.lib.memory)": [[25, "amaranth.lib.memory.Memory", false]], "memorydata (class in amaranth.hdl)": [[25, "amaranth.hdl.MemoryData", false]], "memorydata.init (class in amaranth.hdl)": [[25, "amaranth.hdl.MemoryData.Init", false]], "metadata (amaranth.lib.wiring.component property)": [[28, "amaranth.lib.wiring.Component.metadata", false]], "module": [[14, "module-amaranth.hdl", false], [15, "module-amaranth.sim", false], [18, "module-amaranth.lib.cdc", false], [19, "module-amaranth.lib.crc", false], [20, "module-amaranth.lib.crc.catalog", false], [21, "module-amaranth.lib.data", false], [22, "module-amaranth.lib.enum", false], [23, "module-amaranth.lib.fifo", false], [24, "module-amaranth.lib.io", false], [25, "module-amaranth.lib.memory", false], [26, "module-amaranth.lib.meta", false], [27, "module-amaranth.lib.stream", false], [28, "module-amaranth.lib.wiring", false]], "negedge() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.negedge", false]], "negedge() (amaranth.sim.triggercombination method)": [[15, "amaranth.sim.TriggerCombination.negedge", false]], "origin (amaranth.lib.meta.annotation property)": [[26, "amaranth.lib.meta.Annotation.origin", false]], "origin (amaranth.lib.wiring.componentmetadata property)": [[28, "amaranth.lib.wiring.ComponentMetadata.origin", false]], "out (amaranth.lib.wiring.flow attribute)": [[28, "amaranth.lib.wiring.Flow.Out", false]], "out (in module amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.Out", false]], "output (amaranth.lib.io.direction attribute)": [[24, "amaranth.lib.io.Direction.Output", false]], "p (amaranth.lib.stream.interface property)": [[27, "amaranth.lib.stream.Interface.p", false]], "parameters (class in amaranth.lib.crc)": [[19, "amaranth.lib.crc.Parameters", false]], "portlike (class in amaranth.lib.io)": [[24, "amaranth.lib.io.PortLike", false]], "posedge() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.posedge", false]], "posedge() (amaranth.sim.triggercombination method)": [[15, "amaranth.sim.TriggerCombination.posedge", false]], "processor (class in amaranth.lib.crc)": [[19, "amaranth.lib.crc.Processor", false]], "pulsesynchronizer (class in amaranth.lib.cdc)": [[18, "amaranth.lib.cdc.PulseSynchronizer", false]], "pureinterface (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.PureInterface", false]], "quicklogicplatform (class in amaranth.vendor)": [[11, "amaranth.vendor.QuicklogicPlatform", false]], "read_port() (amaranth.lib.memory.memory method)": [[25, "amaranth.lib.memory.Memory.read_port", false]], "read_ports (amaranth.lib.memory.memory property)": [[25, "amaranth.lib.memory.Memory.read_ports", false]], "readport (class in amaranth.lib.memory)": [[25, "amaranth.lib.memory.ReadPort", false]], "readport.signature (class in amaranth.lib.memory)": [[25, "amaranth.lib.memory.ReadPort.Signature", false]], "repeat() (amaranth.sim.ticktrigger method)": [[15, "amaranth.sim.TickTrigger.repeat", false]], "replicate() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.replicate", false]], "reset() (amaranth.sim.simulator method)": [[15, "amaranth.sim.Simulator.reset", false]], "resetsynchronizer (class in amaranth.lib.cdc)": [[18, "amaranth.lib.cdc.ResetSynchronizer", false]], "residue() (amaranth.lib.crc.parameters method)": [[19, "amaranth.lib.crc.Parameters.residue", false]], "rotate_left() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.rotate_left", false]], "rotate_right() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.rotate_right", false]], "run() (amaranth.sim.simulator method)": [[15, "amaranth.sim.Simulator.run", false]], "run_until() (amaranth.sim.simulator method)": [[15, "amaranth.sim.Simulator.run_until", false]], "sample() (amaranth.sim.ticktrigger method)": [[15, "amaranth.sim.TickTrigger.sample", false]], "sample() (amaranth.sim.triggercombination method)": [[15, "amaranth.sim.TriggerCombination.sample", false]], "schema (amaranth.lib.meta.annotation attribute)": [[26, "amaranth.lib.meta.Annotation.schema", false]], "schema (amaranth.lib.wiring.componentmetadata attribute)": [[28, "amaranth.lib.wiring.ComponentMetadata.schema", false]], "set() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.set", false]], "shape (amaranth.lib.wiring.member property)": [[28, "amaranth.lib.wiring.Member.shape", false]], "shape (class in amaranth.hdl)": [[14, "amaranth.hdl.Shape", false]], "shape() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.shape", false]], "shape() (amaranth.hdl.valuecastable method)": [[14, "amaranth.hdl.ValueCastable.shape", false]], "shape() (amaranth.lib.data.const method)": [[21, "amaranth.lib.data.Const.shape", false]], "shape() (amaranth.lib.data.view method)": [[21, "amaranth.lib.data.View.shape", false]], "shape() (amaranth.lib.enum.enumview method)": [[22, "amaranth.lib.enum.EnumView.shape", false]], "shapecastable (class in amaranth.hdl)": [[14, "amaranth.hdl.ShapeCastable", false]], "shapelike (class in amaranth.hdl)": [[14, "amaranth.hdl.ShapeLike", false]], "shift_left() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.shift_left", false]], "shift_right() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.shift_right", false]], "signature (amaranth.lib.wiring.component property)": [[28, "amaranth.lib.wiring.Component.signature", false]], "signature (amaranth.lib.wiring.flippedinterface property)": [[28, "amaranth.lib.wiring.FlippedInterface.signature", false]], "signature (amaranth.lib.wiring.member property)": [[28, "amaranth.lib.wiring.Member.signature", false]], "signature (class in amaranth.lib.stream)": [[27, "amaranth.lib.stream.Signature", false]], "signature (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.Signature", false]], "signatureerror": [[28, "amaranth.lib.wiring.SignatureError", false]], "signaturemembers (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.SignatureMembers", false]], "signaturemeta (class in amaranth.lib.wiring)": [[28, "amaranth.lib.wiring.SignatureMeta", false]], "signed() (in module amaranth.hdl)": [[14, "amaranth.hdl.signed", false]], "siliconblueplatform (class in amaranth.vendor)": [[12, "amaranth.vendor.SiliconBluePlatform", false]], "simulationport (class in amaranth.lib.io)": [[24, "amaranth.lib.io.SimulationPort", false]], "simulator (class in amaranth.sim)": [[15, "amaranth.sim.Simulator", false]], "simulatorcontext (class in amaranth.sim)": [[15, "amaranth.sim.SimulatorContext", false]], "singleendedport (class in amaranth.lib.io)": [[24, "amaranth.lib.io.SingleEndedPort", false]], "size (amaranth.lib.data.arraylayout property)": [[21, "amaranth.lib.data.ArrayLayout.size", false]], "size (amaranth.lib.data.layout property)": [[21, "amaranth.lib.data.Layout.size", false]], "size (amaranth.lib.data.structlayout property)": [[21, "amaranth.lib.data.StructLayout.size", false]], "size (amaranth.lib.data.unionlayout property)": [[21, "amaranth.lib.data.UnionLayout.size", false]], "struct (class in amaranth.lib.data)": [[21, "amaranth.lib.data.Struct", false]], "structlayout (class in amaranth.lib.data)": [[21, "amaranth.lib.data.StructLayout", false]], "syncfifo (class in amaranth.lib.fifo)": [[23, "amaranth.lib.fifo.SyncFIFO", false]], "syncfifobuffered (class in amaranth.lib.fifo)": [[23, "amaranth.lib.fifo.SyncFIFOBuffered", false]], "tick() (amaranth.sim.simulatorcontext method)": [[15, "amaranth.sim.SimulatorContext.tick", false]], "ticktrigger (class in amaranth.sim)": [[15, "amaranth.sim.TickTrigger", false]], "triggercombination (class in amaranth.sim)": [[15, "amaranth.sim.TriggerCombination", false]], "union (class in amaranth.lib.data)": [[21, "amaranth.lib.data.Union", false]], "unionlayout (class in amaranth.lib.data)": [[21, "amaranth.lib.data.UnionLayout", false]], "unsigned() (in module amaranth.hdl)": [[14, "amaranth.hdl.unsigned", false]], "until() (amaranth.sim.ticktrigger method)": [[15, "amaranth.sim.TickTrigger.until", false]], "validate() (amaranth.lib.meta.annotation class method)": [[26, "amaranth.lib.meta.Annotation.validate", false]], "validate() (amaranth.lib.wiring.componentmetadata class method)": [[28, "amaranth.lib.wiring.ComponentMetadata.validate", false]], "value (class in amaranth.hdl)": [[14, "amaranth.hdl.Value", false]], "valuecastable (class in amaranth.hdl)": [[14, "amaranth.hdl.ValueCastable", false]], "valuelike (class in amaranth.hdl)": [[14, "amaranth.hdl.ValueLike", false]], "view (class in amaranth.lib.data)": [[21, "amaranth.lib.data.View", false]], "width (amaranth.lib.data.field property)": [[21, "amaranth.lib.data.Field.width", false]], "word_select() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.word_select", false]], "write_port() (amaranth.lib.memory.memory method)": [[25, "amaranth.lib.memory.Memory.write_port", false]], "write_ports (amaranth.lib.memory.memory property)": [[25, "amaranth.lib.memory.Memory.write_ports", false]], "write_vcd() (amaranth.sim.simulator method)": [[15, "amaranth.sim.Simulator.write_vcd", false]], "writeport (class in amaranth.lib.memory)": [[25, "amaranth.lib.memory.WritePort", false]], "writeport.signature (class in amaranth.lib.memory)": [[25, "amaranth.lib.memory.WritePort.Signature", false]], "xilinxplatform (class in amaranth.vendor)": [[13, "amaranth.vendor.XilinxPlatform", false]], "xor() (amaranth.hdl.value method)": [[14, "amaranth.hdl.Value.xor", false]]}, "objects": {"amaranth": [[14, 0, 0, "-", "hdl"], [15, 0, 0, "-", "sim"]], "amaranth.hdl": [[25, 1, 1, "", "MemoryData"], [14, 1, 1, "", "Shape"], [14, 1, 1, "", "ShapeCastable"], [14, 1, 1, "", "ShapeLike"], [14, 1, 1, "", "Value"], [14, 1, 1, "", "ValueCastable"], [14, 1, 1, "", "ValueLike"], [14, 4, 1, "", "signed"], [14, 4, 1, "", "unsigned"]], "amaranth.hdl.MemoryData": [[25, 1, 1, "", "Init"], [25, 2, 1, "", "__getitem__"]], "amaranth.hdl.Shape": [[14, 2, 1, "", "__repr__"], [14, 2, 1, "", "cast"]], "amaranth.hdl.ShapeCastable": [[14, 2, 1, "", "__call__"], [14, 2, 1, "", "as_shape"], [14, 2, 1, "", "const"], [14, 2, 1, "", "format"], [14, 2, 1, "", "from_bits"]], "amaranth.hdl.Value": [[14, 2, 1, "", "__abs__"], [14, 2, 1, "", "__add__"], [14, 2, 1, "", "__and__"], [14, 2, 1, "", "__bool__"], [14, 2, 1, "", "__contains__"], [14, 2, 1, "", "__eq__"], [14, 2, 1, "", "__floordiv__"], [14, 2, 1, "", "__format__"], [14, 2, 1, "", "__ge__"], [14, 2, 1, "", "__getitem__"], [14, 2, 1, "", "__gt__"], [14, 3, 1, "", "__hash__"], [14, 2, 1, "", "__invert__"], [14, 2, 1, "", "__le__"], [14, 2, 1, "", "__len__"], [14, 2, 1, "", "__lshift__"], [14, 2, 1, "", "__lt__"], [14, 2, 1, "", "__mod__"], [14, 2, 1, "", "__mul__"], [14, 2, 1, "", "__ne__"], [14, 2, 1, "", "__neg__"], [14, 2, 1, "", "__or__"], [14, 2, 1, "", "__pos__"], [14, 2, 1, "", "__radd__"], [14, 2, 1, "", "__rand__"], [14, 2, 1, "", "__rfloordiv__"], [14, 2, 1, "", "__rlshift__"], [14, 2, 1, "", "__rmod__"], [14, 2, 1, "", "__rmul__"], [14, 2, 1, "", "__ror__"], [14, 2, 1, "", "__rrshift__"], [14, 2, 1, "", "__rshift__"], [14, 2, 1, "", "__rsub__"], [14, 2, 1, "", "__rxor__"], [14, 2, 1, "", "__sub__"], [14, 2, 1, "", "__xor__"], [14, 2, 1, "", "all"], [14, 2, 1, "", "any"], [14, 2, 1, "", "as_signed"], [14, 2, 1, "", "as_unsigned"], [14, 2, 1, "", "bit_select"], [14, 2, 1, "", "bool"], [14, 2, 1, "", "cast"], [14, 2, 1, "", "eq"], [14, 2, 1, "", "matches"], [14, 2, 1, "", "replicate"], [14, 2, 1, "", "rotate_left"], [14, 2, 1, "", "rotate_right"], [14, 2, 1, "", "shape"], [14, 2, 1, "", "shift_left"], [14, 2, 1, "", "shift_right"], [14, 2, 1, "", "word_select"], [14, 2, 1, "", "xor"]], "amaranth.hdl.ValueCastable": [[14, 2, 1, "", "as_value"], [14, 2, 1, "", "shape"]], "amaranth.lib": [[18, 0, 0, "-", "cdc"], [19, 0, 0, "-", "crc"], [21, 0, 0, "-", "data"], [22, 0, 0, "-", "enum"], [23, 0, 0, "-", "fifo"], [24, 0, 0, "-", "io"], [25, 0, 0, "-", "memory"], [26, 0, 0, "-", "meta"], [27, 0, 0, "-", "stream"], [28, 0, 0, "-", "wiring"]], "amaranth.lib.cdc": [[18, 1, 1, "", "AsyncFFSynchronizer"], [18, 1, 1, "", "FFSynchronizer"], [18, 1, 1, "", "PulseSynchronizer"], [18, 1, 1, "", "ResetSynchronizer"]], "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, 2, 1, "", "compute"], [19, 2, 1, "", "create"], [19, 2, 1, "", "residue"]], "amaranth.lib.crc.catalog": [[20, 5, 1, "", "CRC10_ATM"], [20, 5, 1, "", "CRC10_CDMA2000"], [20, 5, 1, "", "CRC10_GSM"], [20, 5, 1, "", "CRC10_I_610"], [20, 5, 1, "", "CRC11_FLEXRAY"], [20, 5, 1, "", "CRC11_UMTS"], [20, 5, 1, "", "CRC12_3GPP"], [20, 5, 1, "", "CRC12_CDMA2000"], [20, 5, 1, "", "CRC12_DECT"], [20, 5, 1, "", "CRC12_GSM"], [20, 5, 1, "", "CRC12_UMTS"], [20, 5, 1, "", "CRC13_BBC"], [20, 5, 1, "", "CRC14_DARC"], [20, 5, 1, "", "CRC14_GSM"], [20, 5, 1, "", "CRC15_CAN"], [20, 5, 1, "", "CRC15_MPT1327"], [20, 5, 1, "", "CRC16_ACORN"], [20, 5, 1, "", "CRC16_ARC"], [20, 5, 1, "", "CRC16_AUG_CCITT"], [20, 5, 1, "", "CRC16_AUTOSAR"], [20, 5, 1, "", "CRC16_BLUETOOTH"], [20, 5, 1, "", "CRC16_BUYPASS"], [20, 5, 1, "", "CRC16_CCITT"], [20, 5, 1, "", "CRC16_CCITT_FALSE"], [20, 5, 1, "", "CRC16_CCITT_TRUE"], [20, 5, 1, "", "CRC16_CDMA2000"], [20, 5, 1, "", "CRC16_CMS"], [20, 5, 1, "", "CRC16_DARC"], [20, 5, 1, "", "CRC16_DDS_110"], [20, 5, 1, "", "CRC16_DECT_R"], [20, 5, 1, "", "CRC16_DECT_X"], [20, 5, 1, "", "CRC16_DNP"], [20, 5, 1, "", "CRC16_EN_13757"], [20, 5, 1, "", "CRC16_EPC"], [20, 5, 1, "", "CRC16_EPC_C1G2"], [20, 5, 1, "", "CRC16_GENIBUS"], [20, 5, 1, "", "CRC16_GSM"], [20, 5, 1, "", "CRC16_IBM"], [20, 5, 1, "", "CRC16_IBM_3740"], [20, 5, 1, "", "CRC16_IBM_SDLC"], [20, 5, 1, "", "CRC16_IEC_61158_2"], [20, 5, 1, "", "CRC16_ISO_HDLC"], [20, 5, 1, "", "CRC16_ISO_IEC_14443_3_A"], [20, 5, 1, "", "CRC16_ISO_IEC_14443_3_B"], [20, 5, 1, "", "CRC16_I_CODE"], [20, 5, 1, "", "CRC16_KERMIT"], [20, 5, 1, "", "CRC16_LJ1200"], [20, 5, 1, "", "CRC16_LTE"], [20, 5, 1, "", "CRC16_M17"], [20, 5, 1, "", "CRC16_MAXIM"], [20, 5, 1, "", "CRC16_MAXIM_DOW"], [20, 5, 1, "", "CRC16_MCRF4XX"], [20, 5, 1, "", "CRC16_MODBUS"], [20, 5, 1, "", "CRC16_NRSC_5"], [20, 5, 1, "", "CRC16_OPENSAFETY_A"], [20, 5, 1, "", "CRC16_OPENSAFETY_B"], [20, 5, 1, "", "CRC16_PROFIBUS"], [20, 5, 1, "", "CRC16_RIELLO"], [20, 5, 1, "", "CRC16_SPI_FUJITSU"], [20, 5, 1, "", "CRC16_T10_DIF"], [20, 5, 1, "", "CRC16_TELEDISK"], [20, 5, 1, "", "CRC16_TMS37157"], [20, 5, 1, "", "CRC16_UMTS"], [20, 5, 1, "", "CRC16_USB"], [20, 5, 1, "", "CRC16_VERIFONE"], [20, 5, 1, "", "CRC16_V_41_LSB"], [20, 5, 1, "", "CRC16_V_41_MSB"], [20, 5, 1, "", "CRC16_X25"], [20, 5, 1, "", "CRC16_XMODEM"], [20, 5, 1, "", "CRC16_ZMODEM"], [20, 5, 1, "", "CRC17_CAN_FD"], [20, 5, 1, "", "CRC21_CAN_FD"], [20, 5, 1, "", "CRC24_BLE"], [20, 5, 1, "", "CRC24_FLEXRAY_A"], [20, 5, 1, "", "CRC24_FLEXRAY_B"], [20, 5, 1, "", "CRC24_INTERLAKEN"], [20, 5, 1, "", "CRC24_LTE_A"], [20, 5, 1, "", "CRC24_LTE_B"], [20, 5, 1, "", "CRC24_OPENPGP"], [20, 5, 1, "", "CRC24_OS_9"], [20, 5, 1, "", "CRC30_CDMA"], [20, 5, 1, "", "CRC31_PHILIPS"], [20, 5, 1, "", "CRC32_AAL5"], [20, 5, 1, "", "CRC32_ADCCP"], [20, 5, 1, "", "CRC32_AIXM"], [20, 5, 1, "", "CRC32_AUTOSAR"], [20, 5, 1, "", "CRC32_BASE91_C"], [20, 5, 1, "", "CRC32_BASE91_D"], [20, 5, 1, "", "CRC32_BZIP2"], [20, 5, 1, "", "CRC32_CASTAGNOLI"], [20, 5, 1, "", "CRC32_CD_ROM_EDC"], [20, 5, 1, "", "CRC32_CKSUM"], [20, 5, 1, "", "CRC32_DECT_B"], [20, 5, 1, "", "CRC32_ETHERNET"], [20, 5, 1, "", "CRC32_INTERLAKEN"], [20, 5, 1, "", "CRC32_ISCSI"], [20, 5, 1, "", "CRC32_ISO_HDLC"], [20, 5, 1, "", "CRC32_JAMCRC"], [20, 5, 1, "", "CRC32_MEF"], [20, 5, 1, "", "CRC32_MPEG_2"], [20, 5, 1, "", "CRC32_PKZIP"], [20, 5, 1, "", "CRC32_POSIX"], [20, 5, 1, "", "CRC32_V_42"], [20, 5, 1, "", "CRC32_XFER"], [20, 5, 1, "", "CRC32_XZ"], [20, 5, 1, "", "CRC3_GSM"], [20, 5, 1, "", "CRC3_ROHC"], [20, 5, 1, "", "CRC40_GSM"], [20, 5, 1, "", "CRC4_G_704"], [20, 5, 1, "", "CRC4_INTERLAKEN"], [20, 5, 1, "", "CRC4_ITU"], [20, 5, 1, "", "CRC5_EPC"], [20, 5, 1, "", "CRC5_EPC_C1G2"], [20, 5, 1, "", "CRC5_G_704"], [20, 5, 1, "", "CRC5_ITU"], [20, 5, 1, "", "CRC5_USB"], [20, 5, 1, "", "CRC64_ECMA"], [20, 5, 1, "", "CRC64_ECMA_182"], [20, 5, 1, "", "CRC64_GO_ISO"], [20, 5, 1, "", "CRC64_MS"], [20, 5, 1, "", "CRC64_REDIS"], [20, 5, 1, "", "CRC64_WE"], [20, 5, 1, "", "CRC64_XZ"], [20, 5, 1, "", "CRC6_CDMA2000_A"], [20, 5, 1, "", "CRC6_CDMA2000_B"], [20, 5, 1, "", "CRC6_DARC"], [20, 5, 1, "", "CRC6_GSM"], [20, 5, 1, "", "CRC6_G_704"], [20, 5, 1, "", "CRC6_ITU"], [20, 5, 1, "", "CRC7_MMC"], [20, 5, 1, "", "CRC7_ROHC"], [20, 5, 1, "", "CRC7_UMTS"], [20, 5, 1, "", "CRC82_DARC"], [20, 5, 1, "", "CRC8_AES"], [20, 5, 1, "", "CRC8_AUTOSAR"], [20, 5, 1, "", "CRC8_BLUETOOTH"], [20, 5, 1, "", "CRC8_CDMA2000"], [20, 5, 1, "", "CRC8_DARC"], [20, 5, 1, "", "CRC8_DVB_S2"], [20, 5, 1, "", "CRC8_ETU"], [20, 5, 1, "", "CRC8_GSM_A"], [20, 5, 1, "", "CRC8_GSM_B"], [20, 5, 1, "", "CRC8_HITAG"], [20, 5, 1, "", "CRC8_ITU"], [20, 5, 1, "", "CRC8_I_432_1"], [20, 5, 1, "", "CRC8_I_CODE"], [20, 5, 1, "", "CRC8_LTE"], [20, 5, 1, "", "CRC8_MAXIM"], [20, 5, 1, "", "CRC8_MAXIM_DOW"], [20, 5, 1, "", "CRC8_MIFARE_MAD"], [20, 5, 1, "", "CRC8_NRSC_5"], [20, 5, 1, "", "CRC8_OPENSAFETY"], [20, 5, 1, "", "CRC8_ROHC"], [20, 5, 1, "", "CRC8_SAE_J1850"], [20, 5, 1, "", "CRC8_SMBUS"], [20, 5, 1, "", "CRC8_TECH_3250"], [20, 5, 1, "", "CRC8_WCDMA"]], "amaranth.lib.data": [[21, 1, 1, "", "ArrayLayout"], [21, 1, 1, "", "Const"], [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, 6, 1, "", "size"]], "amaranth.lib.data.Const": [[21, 2, 1, "", "__getattr__"], [21, 2, 1, "", "__getitem__"], [21, 2, 1, "", "as_bits"], [21, 2, 1, "", "as_value"], [21, 2, 1, "", "shape"]], "amaranth.lib.data.Field": [[21, 2, 1, "", "__eq__"], [21, 6, 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, 2, 1, "", "from_bits"], [21, 6, 1, "", "size"]], "amaranth.lib.data.StructLayout": [[21, 6, 1, "", "size"]], "amaranth.lib.data.UnionLayout": [[21, 6, 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, "", "EnumType"], [22, 1, 1, "", "EnumView"], [22, 1, 1, "", "Flag"], [22, 1, 1, "", "FlagView"], [22, 1, 1, "", "IntEnum"], [22, 1, 1, "", "IntFlag"]], "amaranth.lib.enum.EnumType": [[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, "", "matches"], [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.io": [[24, 1, 1, "", "Buffer"], [24, 1, 1, "", "DDRBuffer"], [24, 1, 1, "", "DifferentialPort"], [24, 1, 1, "", "Direction"], [24, 1, 1, "", "FFBuffer"], [24, 1, 1, "", "PortLike"], [24, 1, 1, "", "SimulationPort"], [24, 1, 1, "", "SingleEndedPort"]], "amaranth.lib.io.Buffer": [[24, 1, 1, "", "Signature"]], "amaranth.lib.io.DDRBuffer": [[24, 1, 1, "", "Signature"]], "amaranth.lib.io.Direction": [[24, 3, 1, "", "Bidir"], [24, 3, 1, "", "Input"], [24, 3, 1, "", "Output"], [24, 2, 1, "", "__and__"]], "amaranth.lib.io.FFBuffer": [[24, 1, 1, "", "Signature"]], "amaranth.lib.io.PortLike": [[24, 2, 1, "", "__add__"], [24, 2, 1, "", "__getitem__"], [24, 2, 1, "", "__invert__"], [24, 2, 1, "", "__len__"], [24, 6, 1, "", "direction"]], "amaranth.lib.memory": [[25, 1, 1, "", "Memory"], [25, 1, 1, "", "ReadPort"], [25, 1, 1, "", "WritePort"]], "amaranth.lib.memory.Memory": [[25, 2, 1, "", "read_port"], [25, 6, 1, "", "read_ports"], [25, 2, 1, "", "write_port"], [25, 6, 1, "", "write_ports"]], "amaranth.lib.memory.ReadPort": [[25, 1, 1, "", "Signature"]], "amaranth.lib.memory.WritePort": [[25, 1, 1, "", "Signature"]], "amaranth.lib.meta": [[26, 1, 1, "", "Annotation"], [26, 7, 1, "", "InvalidAnnotation"], [26, 7, 1, "", "InvalidSchema"]], "amaranth.lib.meta.Annotation": [[26, 2, 1, "", "__init_subclass__"], [26, 2, 1, "", "as_json"], [26, 6, 1, "", "origin"], [26, 3, 1, "", "schema"], [26, 2, 1, "", "validate"]], "amaranth.lib.stream": [[27, 1, 1, "", "Interface"], [27, 1, 1, "", "Signature"]], "amaranth.lib.stream.Interface": [[27, 6, 1, "", "p"]], "amaranth.lib.wiring": [[28, 1, 1, "", "Component"], [28, 1, 1, "", "ComponentMetadata"], [28, 7, 1, "", "ConnectionError"], [28, 1, 1, "", "FlippedInterface"], [28, 1, 1, "", "FlippedSignature"], [28, 1, 1, "", "FlippedSignatureMembers"], [28, 1, 1, "", "Flow"], [28, 5, 1, "", "In"], [28, 7, 1, "", "InvalidMetadata"], [28, 1, 1, "", "Member"], [28, 5, 1, "", "Out"], [28, 1, 1, "", "PureInterface"], [28, 1, 1, "", "Signature"], [28, 7, 1, "", "SignatureError"], [28, 1, 1, "", "SignatureMembers"], [28, 1, 1, "", "SignatureMeta"], [28, 4, 1, "", "connect"], [28, 4, 1, "", "flipped"]], "amaranth.lib.wiring.Component": [[28, 6, 1, "", "metadata"], [28, 6, 1, "", "signature"]], "amaranth.lib.wiring.ComponentMetadata": [[28, 2, 1, "", "as_json"], [28, 6, 1, "", "origin"], [28, 3, 1, "", "schema"], [28, 2, 1, "", "validate"]], "amaranth.lib.wiring.FlippedInterface": [[28, 2, 1, "", "__delattr__"], [28, 2, 1, "", "__eq__"], [28, 2, 1, "", "__getattr__"], [28, 2, 1, "", "__setattr__"], [28, 6, 1, "", "signature"]], "amaranth.lib.wiring.FlippedSignature": [[28, 2, 1, "", "__delattr__"], [28, 2, 1, "", "__getattr__"], [28, 2, 1, "", "__setattr__"], [28, 2, 1, "", "flip"]], "amaranth.lib.wiring.FlippedSignatureMembers": [[28, 2, 1, "", "flip"]], "amaranth.lib.wiring.Flow": [[28, 3, 1, "", "In"], [28, 3, 1, "", "Out"], [28, 2, 1, "", "__call__"], [28, 2, 1, "", "flip"]], "amaranth.lib.wiring.Member": [[28, 2, 1, "", "array"], [28, 6, 1, "", "dimensions"], [28, 2, 1, "", "flip"], [28, 6, 1, "", "flow"], [28, 6, 1, "", "init"], [28, 6, 1, "", "is_port"], [28, 6, 1, "", "is_signature"], [28, 6, 1, "", "shape"], [28, 6, 1, "", "signature"]], "amaranth.lib.wiring.PureInterface": [[28, 2, 1, "", "__init__"]], "amaranth.lib.wiring.Signature": [[28, 2, 1, "", "__eq__"], [28, 2, 1, "", "annotations"], [28, 2, 1, "", "create"], [28, 2, 1, "", "flatten"], [28, 2, 1, "", "flip"], [28, 2, 1, "", "is_compliant"], [28, 6, 1, "", "members"]], "amaranth.lib.wiring.SignatureMembers": [[28, 2, 1, "", "__contains__"], [28, 2, 1, "", "__delitem__"], [28, 2, 1, "", "__eq__"], [28, 2, 1, "", "__getitem__"], [28, 2, 1, "", "__iter__"], [28, 2, 1, "", "__setitem__"], [28, 2, 1, "", "create"], [28, 2, 1, "", "flatten"], [28, 2, 1, "", "flip"]], "amaranth.lib.wiring.SignatureMeta": [[28, 2, 1, "", "__instancecheck__"], [28, 2, 1, "", "__subclasscheck__"]], "amaranth.sim": [[15, 7, 1, "", "BrokenTrigger"], [15, 7, 1, "", "DomainReset"], [15, 1, 1, "", "Simulator"], [15, 1, 1, "", "SimulatorContext"], [15, 1, 1, "", "TickTrigger"], [15, 1, 1, "", "TriggerCombination"]], "amaranth.sim.Simulator": [[15, 2, 1, "", "add_clock"], [15, 2, 1, "", "add_process"], [15, 2, 1, "", "add_testbench"], [15, 2, 1, "", "advance"], [15, 2, 1, "", "reset"], [15, 2, 1, "", "run"], [15, 2, 1, "", "run_until"], [15, 2, 1, "", "write_vcd"]], "amaranth.sim.SimulatorContext": [[15, 2, 1, "", "changed"], [15, 2, 1, "", "critical"], [15, 2, 1, "", "delay"], [15, 2, 1, "", "edge"], [15, 2, 1, "", "elapsed_time"], [15, 2, 1, "", "get"], [15, 2, 1, "", "negedge"], [15, 2, 1, "", "posedge"], [15, 2, 1, "", "set"], [15, 2, 1, "", "tick"]], "amaranth.sim.TickTrigger": [[15, 2, 1, "", "repeat"], [15, 2, 1, "", "sample"], [15, 2, 1, "", "until"]], "amaranth.sim.TriggerCombination": [[15, 2, 1, "", "changed"], [15, 2, 1, "", "delay"], [15, 2, 1, "", "edge"], [15, 2, 1, "", "negedge"], [15, 2, 1, "", "posedge"], [15, 2, 1, "", "sample"]], "amaranth.vendor": [[8, 1, 1, "", "AlteraPlatform"], [9, 1, 1, "", "GowinPlatform"], [10, 1, 1, "", "LatticePlatform"], [11, 1, 1, "", "QuicklogicPlatform"], [12, 1, 1, "", "SiliconBluePlatform"], [13, 1, 1, "", "XilinxPlatform"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "attribute", "Python attribute"], "4": ["py", "function", "Python function"], "5": ["py", "data", "Python data"], "6": ["py", "property", "Python property"], "7": ["py", "exception", "Python exception"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:function", "5": "py:data", "6": "py:property", "7": "py:exception"}, "terms": {"": [1, 3, 6, 14, 15, 16, 18, 19, 21, 23, 24, 25, 27, 28, 29], "0": [1, 3, 4, 5, 14, 15, 16, 21, 22, 24, 25, 26, 27, 28], "00": 1, "01": 3, "05": 20, "08b": 27, "08x": 3, "0b0000_0010": 3, "0b0000_0110": 3, "0b1001": 3, "0b1010": 3, "0b10100111": 27, "0b1010_1001": 3, "0b11": 3, "0b111": 3, "0th": 3, "0x0": [20, 21], "0x00": 20, "0x000": 20, "0x0000": [19, 20, 26], "0x00000": 20, "0x000000": 20, "0x00000000": 20, "0x0000000000": 20, "0x0000000000000000": 20, "0x00000000000000000000": 20, "0x000000000000001b": 20, "0x000000af": 20, "0x00001234": 21, "0x0001": 20, "0x0004": 26, "0x0004820009": 20, "0x00065b": 20, "0x0008": 26, "0x001": 20, "0x04c11db7": 20, "0x0589": 20, "0x07": 20, "0x080b": 20, "0x100": 21, "0x1021": [19, 20], "0x102899": 20, "0x1234": 3, "0x15": 20, "0x1685b": 20, "0x175": 20, "0x19": 20, "0x1a": 20, "0x1cf5": 20, "0x1d": 20, "0x1d0f": 20, "0x1dcf": 20, "0x1edc6f41": 20, "0x1f": 20, "0x202d": 20, "0x2030b9c7": 20, "0x233": 20, "0x259c84cba6426349": 20, "0x27": 20, "0x29b1": 19, "0x2f": 20, "0x3": 20, "0x307": 20, "0x308c0111011401440411": 20, "0x31": 20, "0x328b63": 20, "0x385": 20, "0x39": 20, "0x3d65": 20, "0x3d9": 20, "0x3f": 20, "0x3f800000": 21, "0x3ff": 20, "0x3fff": 20, "0x3fffffff": 20, "0x42f0e1eba9ea3693": 20, "0x45": 20, "0x4599": 20, "0x49": 20, "0x4c": 19, "0x4c11db7": 20, "0x4e": 19, "0x4e4c": 19, "0x4f": 20, "0x5": 20, "0x55": 20, "0x555555": 20, "0x5935": 20, "0x5d6dcb": 20, "0x6815": 20, "0x6f63": 20, "0x7": 20, "0x741b8cd7": 20, "0x755b": 20, "0x7f": [20, 21], "0x7fffffff": 20, "0x800063": 20, "0x8001801b": 20, "0x8005": 20, "0x800d": 20, "0x805": 20, "0x80f": 20, "0x814141ab": 20, "0x864cfb": 20, "0x89ec": 20, "0x8bb7": 20, "0x9": 20, "0x9b": 20, "0xa097": 20, "0xa1": 24, "0xa7": 20, "0xa833982b": 20, "0xabcdef": 20, "0xad93d23594c935a9": 20, "0xb2aa": 20, "0xb704ce": 20, "0xbf800000": 21, "0xc6c6": 20, "0xc7": 20, "0xc867": 20, "0xd31": 20, "0xd5": 20, "0xf": 20, "0xf13": 20, "0xf4acfb13": 20, "0xfd": 20, "0xfedcba": 20, "0xff": [20, 27], "0xfff": 20, "0xffff": [19, 20], "0xffffff": 20, "0xffffffff": 20, "0xffffffffff": 20, "0xffffffffffffffff": 20, "1": [1, 3, 4, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "10": [0, 3, 15, 20, 21, 28], "100": [1, 3, 18], "104": 3, "10th": 15, "11": [0, 3, 20, 21], "115": 3, "12": [0, 3, 20, 26], "123456789": 19, "127": [1, 3], "128": 3, "129": 3, "13": [3, 20], "130": 3, "14": [20, 21], "15": [0, 15, 16, 20], "16": [3, 15, 16, 19, 20, 21, 24, 25, 26, 27, 28], "1647": 16, "17": [0, 1, 15, 20, 22, 27], "1717": 15, "18": 0, "180": 3, "19": 0, "1e": 15, "2": [3, 4, 14, 15, 16, 18, 22, 23, 24, 25, 27, 28], "20": 0, "2020": 26, "2023": 20, "21": 20, "2137": 15, "22": 0, "2255": 16, "23": [5, 21], "230": 3, "24": [16, 20, 21, 24, 28], "25": [16, 20], "256": [3, 21], "27": 0, "28": 0, "29": 16, "3": [3, 4, 5, 15, 16, 20, 21, 25, 28], "30": [0, 16, 20], "31": [0, 3, 20, 21], "32": [3, 16, 19, 20, 21, 26, 28], "33": 26, "34": 0, "35": 0, "36": [0, 16], "360": 3, "364": 3, "37": 0, "374": 3, "38": [0, 16], "382": 3, "39": [0, 16], "4": [3, 4, 15, 16, 20, 21, 22, 24, 26], "40": [5, 20], "42": [0, 16], "420": 15, "4294967296": 3, "43": 0, "45": 0, "46": 0, "5": [3, 4, 15, 16, 20, 21, 22, 24, 28], "50": [0, 15], "509": 16, "51": 0, "53": 0, "534": 16, "55": 0, "58": [0, 3], "59": 0, "5th": 15, "6": [3, 4, 20, 21, 24], "61": [0, 27], "62": 0, "63": 0, "64": [5, 20], "65": 0, "65536": 0, "66": 0, "69": 0, "7": [0, 3, 5, 6, 20, 21, 24, 27], "71": 0, "74": 3, "754": 21, "8": [0, 3, 19, 20, 21, 24, 25, 26, 27, 28], "8000": 1, "82": 20, "9": [0, 3, 5, 27], "92": 3, "A": [0, 1, 3, 4, 5, 6, 14, 15, 18, 19, 21, 22, 24, 25, 26, 27, 28, 29], "AND": [3, 14, 22], "As": [3, 5, 14, 16, 17, 21], "At": [3, 6, 15, 24], "Be": [1, 3], "By": [3, 6], "For": [1, 3, 5, 14, 15, 19, 21, 22, 24, 25, 26, 27, 28], "ISE": 13, "If": [0, 1, 5, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "In": [0, 1, 3, 4, 14, 15, 16, 21, 22, 23, 24, 25, 26, 27, 28], "It": [0, 1, 3, 5, 6, 14, 15, 16, 19, 21, 22, 24, 25, 28], "Its": [24, 27], "NOT": [3, 14], "No": [0, 21, 28], "Not": 3, "OR": [3, 14, 22], "Of": 6, "On": [5, 10, 15, 18, 24, 25, 27], "One": [21, 27], "Such": [3, 15, 27, 28], "That": 28, "The": [0, 1, 4, 5, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29], "Then": [5, 25], "There": [1, 3, 14, 25, 28], "These": [1, 3, 6, 14, 21, 27, 28], "To": [1, 3, 5, 6, 14, 15, 16, 21, 25, 28], "With": [3, 5, 16], "_": [14, 15, 16, 24, 25, 27, 28], "_1": 21, "_2": 21, "__": 28, "__abs__": [0, 14], "__add__": [0, 14, 24, 28], "__and__": [14, 22, 24], "__bool__": 14, "__call__": [0, 14, 19, 21, 22, 28], "__contains__": [14, 28], "__delattr__": 28, "__delitem__": 28, "__dict__": 28, "__eq__": [14, 21, 22, 28], "__floordiv__": 14, "__format__": 14, "__ge__": 14, "__getattr__": [21, 28], "__getitem__": [14, 21, 24, 25, 28], "__gt__": 14, "__hash__": 14, "__init__": [3, 16, 21, 22, 24, 26, 28], "__init_subclass__": 26, "__instancecheck__": 28, "__invert__": [14, 22, 24], "__iter__": [21, 28], "__le__": 14, "__len__": [14, 24], "__lshift__": 14, "__lt__": 14, "__mod__": 14, "__mul__": 14, "__ne__": 14, "__neg__": 14, "__or__": [14, 22], "__pos__": 14, "__radd__": 14, "__rand__": [14, 22], "__repr__": [14, 28], "__rfloordiv__": 14, "__rlshift__": 14, "__rmod__": 14, "__rmul__": 14, "__ror__": [14, 22], "__rrshift__": 14, "__rshift__": 14, "__rsub__": 14, "__rxor__": [14, 22], "__setattr__": 28, "__setitem__": 28, "__sub__": 14, "__subclasscheck__": 28, "__version__": 1, "__xor__": [14, 22], "_addr_width": 28, "_build": 1, "_clock_util": 13, "_control_set": 13, "_design": 12, "_drc": 13, "_flash": [0, 10], "_impl": 10, "_io": 13, "_lang": 1, "_lse": 12, "_map": 13, "_methodologi": 13, "_origin": 26, "_par": 13, "_par_pad": 13, "_power": 13, "_rout": 13, "_route_statu": 13, "_sram": [0, 10], "_time": [12, 13], "_timing_synth": 13, "_utilization_hierarchical_plac": 13, "_utilization_hierarchical_synth": 13, "_utilization_plac": 13, "_utilization_synth": 13, "a_anam": 3, "a_valu": 15, "aarch64": 5, "ab": [0, 3, 14], "abbrevi": 25, "abc": 28, "abil": [14, 16, 22], "abl": [1, 3, 15, 24], "about": [1, 3, 14, 15, 17, 26, 28], "abov": [3, 14, 15, 16, 27, 28], "absenc": 28, "absolut": [0, 3, 14], "abstract": [3, 14, 17, 21, 24, 25, 26, 27], "accept": [0, 1, 3, 14, 15, 21, 22, 24, 27, 28], "access": [0, 3, 15, 23, 25, 26, 28], "accident": 6, "accommod": [19, 21], "accord": [21, 24, 26, 27], "account": [0, 3, 28], "accumul": 21, "accur": 28, "achiev": [1, 6], "act": [3, 22, 23, 28], "activ": [0, 6, 15, 25], "actual": [0, 1, 22, 28], "ad": [0, 1, 3, 5, 6, 15, 16, 21, 24, 25, 28], "adapt": 16, "adapted_data_sourc": 28, "adata": 28, "add": [0, 1, 3, 6, 8, 10, 12, 13, 14, 15, 19, 21, 22, 27, 28], "add_clock": [0, 15, 16, 24, 27], "add_clock_constraint": 0, "add_constraint": [0, 8, 10, 11, 12, 13], "add_fil": [0, 12], "add_pre_pack": 12, "add_prefer": [9, 10], "add_process": [0, 15], "add_set": [0, 8], "add_sync_process": 0, "add_testbench": [0, 15, 16, 24, 27], "add_toggl": 3, "add_video_domain": 3, "adder": [15, 26], "addi": [3, 22], "addit": [0, 1, 3, 5, 6, 14, 15, 21, 22, 23, 24, 26, 27, 28], "addition": [1, 14, 15, 25], "addr": [3, 21, 25, 26, 28], "addr_valu": 15, "addr_width": [25, 28], "address": [3, 21, 25, 26, 28], "adher": 26, "adjac": 14, "adjust": 0, "admonit": 1, "adopt": 6, "adorn": 3, "advanc": [0, 6, 15, 16, 28], "advantag": 15, "affect": [3, 5, 15, 24, 28], "afford": 1, "after": [1, 3, 5, 8, 10, 12, 13, 15, 18, 19, 23, 24, 25, 28], "afterward": [3, 25], "again": [3, 15, 27], "against": [0, 3, 14, 22, 26, 28], "aggreg": [0, 3, 21], "ahead": 6, "aid": 16, "aim": 6, "albeit": 27, "algo": 19, "algorithm": [15, 17], "alia": 3, "alias": [3, 14], "align": 24, "all": [0, 1, 3, 5, 6, 8, 14, 15, 16, 17, 19, 21, 22, 24, 25, 26, 28], "allow": [0, 1, 3, 6, 14, 18, 22, 24, 27, 28], "almost": [25, 28], "alon": 3, "alreadi": [3, 15, 16, 28], "alreadyelabor": 25, "also": [1, 3, 6, 14, 15, 16, 17, 19, 21, 22, 23, 24, 25, 27, 28], "alter": 3, "altera": [4, 7], "alteraplatform": [0, 7, 8], "altern": [5, 21], "although": [3, 6, 15, 16, 24, 28], "alwai": [0, 1, 3, 6, 14, 15, 16, 18, 19, 24, 25, 28], "always_readi": 27, "always_valid": 27, "am": [0, 3, 14], "amaranth": [0, 1, 3, 4, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29], "amaranth_": 0, "amaranth_board": [0, 16], "amaranth_env_": 0, "amaranth_env_apicula": 9, "amaranth_env_diamond": [0, 10], "amaranth_env_gowin": 9, "amaranth_env_icecube2": 12, "amaranth_env_icestorm": 12, "amaranth_env_is": 13, "amaranth_env_mistr": 8, "amaranth_env_oxid": 10, "amaranth_env_qlsymbiflow": 11, "amaranth_env_quartu": 8, "amaranth_env_radi": 10, "amaranth_env_symbiflow": 13, "amaranth_env_trelli": 10, "amaranth_env_vivado": 13, "amaranth_env_xrai": 13, "ambigu": [3, 24, 25], "among": 22, "amort": 15, "amount": [3, 6, 14, 16, 21, 24, 25], "an": [0, 1, 3, 5, 6, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "analog": 3, "analysi": 6, "anam": 3, "anchor": 1, "ani": [0, 1, 3, 5, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "annot": [0, 14, 17, 21, 24, 28], "annoy": 1, "anonym": 28, "anoth": [0, 3, 14, 15, 17, 21, 22, 25, 26, 27, 28], "answer": 28, "anyth": [5, 14], "anytim": 15, "anywher": [3, 21], "apart": 3, "api": [0, 5], "apicula": 9, "appar": 1, "appeal": 1, "appear": [1, 3, 15, 21, 23, 24, 28], "append": 15, "appli": [0, 3, 19, 21, 22, 24, 27], "applic": [3, 5, 6, 15, 16, 21, 27, 28], "appreci": 1, "approach": 28, "appropri": [0, 24, 27, 28], "approxim": 21, "apt": 5, "ar": [0, 1, 3, 5, 6, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "arbit": 28, "arbitrari": [14, 15, 18, 21, 26, 27], "arbitrarili": 21, "architectur": [5, 19], "areadi": 28, "aren": 0, "arg": [22, 28], "arg0": 28, "argument": [0, 1, 3, 14, 15, 22, 28], "arithmet": [6, 14], "around": [3, 24, 28], "arrai": [4, 14, 17, 21, 28], "arraylayout": [0, 3, 21, 24, 25], "arriv": 15, "arst": [15, 18], "arst_edg": 15, "artix": 0, "as_bit": 21, "as_json": [26, 28], "as_shap": [14, 21, 22], "as_sign": [0, 3, 14], "as_unsign": [0, 3, 14], "as_valu": [14, 21, 22], "asc": 12, "ascii": [10, 12], "asic": [18, 25], "asid": [3, 15, 28], "ask": 1, "aspect": 28, "assembl": 27, "assert": [0, 4, 14, 15, 16, 18, 19, 23, 24, 25, 27, 28], "assertform": 0, "assign": [0, 1, 14, 15, 16, 21, 22, 25, 28], "assoc": 14, "associ": [3, 15, 21, 24, 25, 28], "assum": [0, 3, 14, 15, 24, 25], "assumpt": 28, "ast": [0, 14], "async": [0, 15, 16, 24, 25, 27], "async_edg": 18, "asyncffsynchron": [0, 17, 18], "asyncfifo": [0, 17, 23], "asyncfifobuff": [17, 23], "asynchron": [3, 6, 15, 18, 23, 25], "attach": 28, "attempt": [3, 25], "attend": 1, "attent": 1, "attr": [3, 28], "attribut": [0, 1, 3, 6, 16, 19, 21, 23, 24, 25, 26, 27, 28], "attributeerror": [21, 28], "auto": 16, "autogener": 3, "automat": [1, 3, 16, 22], "auxiliari": 28, "avail": [0, 1, 5, 8, 9, 10, 11, 12, 13, 15, 16, 19, 23, 24, 26, 27, 28], "avalid": 28, "avenu": 1, "averag": 21, "avoid": [3, 5, 6, 14, 15, 24, 27], "await": [15, 16, 24, 27], "b": [0, 3, 15, 19, 22, 24, 25, 26, 28], "b_bit": 21, "b_valu": 15, "back": [0, 15, 16, 28], "backend": [0, 16], "background": 15, "backpressur": 27, "backward": [4, 17], "bad": 1, "badenum": 14, "bar": [3, 22], "bare": 21, "barehead": 21, "baruch": 29, "base": [0, 3, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 19, 21, 26, 28], "basi": 25, "basic": [3, 15, 16], "basiccount": 28, "bat": 10, "becaus": [1, 3, 5, 14, 15, 21, 25, 28], "becom": [3, 15, 19, 23, 27], "been": [0, 3, 5, 14, 15, 17, 19, 23], "befor": [1, 3, 5, 10, 13, 15, 27, 28], "begin": [0, 3, 14, 15, 16, 21, 24, 27, 28], "behav": [3, 22], "behavior": [0, 1, 3, 6, 14, 15, 16, 17, 21, 25, 28], "being": [0, 1, 3, 14, 21, 23, 25, 27, 28, 29], "belong": [3, 25, 27], "below": [0, 3, 14, 15, 16, 18, 25, 27, 28], "bench": [0, 6, 16], "benefit": 16, "besid": 28, "best": 1, "better": 25, "between": [3, 6, 14, 15, 17, 18, 21, 23, 24, 25, 27, 28], "beyond": [1, 3, 28], "bgn": 13, "bidir": 24, "bidirect": 3, "biggest": 21, "bin": [0, 10, 12, 13], "binari": [0, 3, 8, 9, 10, 12, 13], "bit": [0, 5, 10, 13, 14, 15, 16, 19, 21, 22, 23, 24, 25, 27], "bit_select": [3, 14, 24], "bitgen": 13, "bitgen_opt": 13, "bitstream": [0, 8, 9, 10, 12, 13, 16], "bitwis": [14, 21, 22], "black": [16, 21], "bld": 13, "blink": [4, 24], "block": [1, 6, 15, 16, 18, 23, 25, 28], "blue": [1, 21], "board": [0, 4, 16], "bodi": [3, 15, 28], "boilerpl": [1, 21, 28], "bool": [3, 14, 18, 19, 21, 24, 26, 27, 28], "boolean": [3, 14], "boot": 3, "both": [0, 1, 3, 6, 14, 15, 19, 21, 24, 25, 27, 28], "bottom": 3, "bound": [3, 14], "boundari": [21, 28], "box": [1, 6, 16], "branch": [3, 5], "break": [1, 3, 14, 15], "brew": 5, "bridg": 1, "bright": [1, 21], "broad": [1, 17], "brokentrigg": 15, "brows": 1, "browser": [1, 4], "bu": [3, 15, 26, 28], "buffer": [0, 4, 6, 17, 23], "bug": [0, 1, 3, 5, 6], "build": [0, 3, 4, 5, 8, 9, 10, 12, 13, 15, 16, 18, 23, 24, 26, 28], "builder": 1, "buildplan": 0, "built": [3, 6, 14, 16, 21, 24, 26, 27], "builtin": [0, 5], "bundl": 3, "burdensom": 28, "bus__addr": 28, "bus__en": 28, "bus__r_data": 28, "bus__rw": 28, "bus__w_data": 28, "bus_active_valu": 15, "bus_addr": 3, "bus_clk": 3, "bus_d": 24, "bus_dclk": 24, "bus_dout": 24, "bus_r": 24, "bus_rstn": 3, "bus_w": 24, "buse": [24, 28], "byte": [19, 21, 24], "c": [1, 3, 10, 14, 22, 28], "cad": 1, "calcul": 3, "call": [0, 3, 14, 15, 21, 22, 24, 25, 26, 28], "caller": [14, 15], "can": [0, 1, 3, 5, 6, 14, 15, 16, 19, 21, 22, 23, 24, 25, 26, 27, 28], "candid": 10, "cannot": [1, 3, 14, 15, 19, 21, 23, 24, 25, 26, 28], "capabl": [24, 28], "captur": [3, 15, 24, 27, 28], "care": [1, 3], "carefulli": 3, "carri": [3, 28], "case": [0, 14, 15, 16, 19, 21, 23, 25, 26, 28], "cast": [0, 4, 14, 21, 22, 28], "castabl": [0, 3, 14, 21, 22, 25, 27, 28], "cat": [0, 3, 14, 22, 27], "catalog": 19, "catalogu": [19, 20], "categori": 17, "caus": [3, 14, 15, 18, 24, 26, 27], "caveat": 28, "cc": 16, "ccitt": 19, "cd": [3, 5], "cd_sync": [3, 15, 24], "cd_video": 3, "cdc": [0, 3, 6, 17, 18], "ceil_log2": [0, 25], "cell": [18, 25], "chain": [3, 15, 18], "chanc": 1, "chang": [3, 4, 5, 6, 14, 15, 17, 21, 25, 27, 28], "changelog": 4, "channel": [1, 21], "charact": [3, 25], "chat": 1, "check": [4, 14, 15, 16, 17, 28], "checker": 28, "checkpoint": 13, "checksum": 21, "chip": [2, 28], "choic": 6, "choos": [3, 16], "chosen": 21, "chrome": 5, "churn": 0, "circuit": [3, 4, 6, 14], "circuitri": 3, "cl": [14, 28], "clarifi": 28, "clariti": [1, 3, 15, 16, 28], "clash": 3, "class": [0, 1, 3, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 23, 24, 25, 26, 27, 28], "classic": 19, "classmethod": [26, 28], "clear": [16, 25, 28], "clk": [3, 15, 16, 24], "clk24": 24, "clk_edg": [3, 15], "clk_hit": 15, "clk_port": 3, "clock": [0, 4, 6, 15, 16, 17, 19, 23, 25, 27], "clockdomain": [0, 3, 14, 15, 24], "clocksign": [3, 14], "clone": 5, "close": [6, 15], "closest": 15, "clutter": 1, "cmd": 21, "co": 6, "code": [0, 1, 3, 4, 5, 6, 14, 16, 17, 19, 21, 26, 28], "codebas": 4, "codeword": 19, "coincid": [15, 24], "collabor": 1, "collect": [1, 3, 6, 28], "color": 21, "column": 1, "com": 5, "comb": [3, 15, 16, 21, 24, 25, 26, 27, 28], "combin": [1, 4, 14, 16, 19, 21, 24, 25, 27, 28], "combination": 3, "combinatori": 1, "come": [6, 12], "comfort": 1, "command": [0, 1, 5, 6, 8, 9, 10, 11, 12, 13, 16, 21], "comment": [1, 14, 17], "commerci": 6, "commit": [1, 5, 26], "common": [3, 6, 16, 17, 27], "commonli": [15, 19], "commun": [1, 6, 15, 21, 27, 28, 29], "compar": [3, 15, 21, 22, 23, 28], "comparison": [14, 22], "compat": [0, 4, 5, 17, 24, 26, 27], "compil": 6, "complement": [3, 14, 24, 27], "complementari": 28, "complet": [1, 3, 14, 15, 19], "complex": [3, 6, 14, 15, 21, 25, 26, 27, 28], "complianc": 28, "compliant": [14, 28], "complic": 24, "compon": [0, 1, 2, 3, 6, 15, 16, 17, 21, 24, 26, 27], "componentcount": 28, "componentmetadata": [0, 26, 28], "compos": [3, 28], "compress": 13, "comput": [14, 17, 24, 28], "concaten": [3, 24, 28], "concept": [14, 28], "conceptu": [3, 15, 25], "concis": [1, 3, 21, 28], "conclud": 28, "concret": [3, 14, 21], "concurr": [15, 16, 25], "cond1": 3, "cond2": 3, "condit": [3, 6, 14, 15, 16, 23, 27], "config": 10, "configur": [3, 6, 16, 18, 19, 25, 28], "conflict": [3, 28], "conform": [26, 28], "confus": [3, 25, 28], "connect": [0, 3, 4, 16, 17, 18, 24, 27], "connectionerror": 28, "connector": 6, "consecut": 27, "consensu": 1, "consequ": [1, 6, 28], "consid": [1, 3, 6, 14, 16, 18, 21, 24, 26, 28, 29], "consider": 14, "consist": [1, 6, 15, 18, 24, 27, 28], "consolid": 10, "const": [0, 3, 14, 15, 21, 22, 25, 27, 28], "constant": [0, 4, 14, 22, 27], "constrain": 14, "constraint": [6, 13, 16, 18], "construct": [0, 3, 6, 14, 15, 16, 19, 21, 22, 23, 25, 27, 28], "constructor": [15, 24, 28], "consult": 3, "consum": [25, 27, 28], "consumeralwaysreadi": 28, "consumerpossiblyunreadi": 28, "contain": [0, 1, 3, 5, 6, 14, 15, 16, 19, 20, 21, 24, 25, 26, 27, 28], "content": [1, 15, 24, 25, 27], "context": [3, 15, 28], "contigu": 21, "continu": [5, 15, 25, 29], "contract": 1, "contrast": 3, "contribut": 4, "contributor": 1, "control": [4, 6, 15, 16, 26, 27, 28], "convei": 27, "convein": 3, "conveni": [3, 14, 21, 25, 28], "convent": [3, 6], "convention": 3, "converg": 15, "convers": [6, 14, 24, 26, 28], "convert": [0, 3, 6, 14, 15, 21, 24, 25, 26, 27, 28], "coordin": 15, "copi": [0, 1, 27, 28], "core": [0, 3, 6, 8, 24, 28], "corollari": 1, "coroutin": 15, "correct": [1, 3, 15, 17, 28], "correctli": [3, 6, 15, 16, 23, 25, 28], "correspond": [1, 3, 14, 15, 16, 19, 21, 22, 25, 27, 28], "correspondingli": [3, 28], "cost": [15, 18], "could": [3, 15, 17, 18, 21, 24, 25, 26, 27, 28], "count": [0, 3, 14, 15, 16, 27, 28], "count_valu": 15, "counter": [3, 4, 15, 28], "counter_": 3, "coupl": 1, "cours": 6, "cover": [0, 3, 6, 14, 26, 28], "cpython": 5, "crash": [5, 15], "crc": [0, 17, 20], "crc10_atm": [19, 20], "crc10_cdma2000": [19, 20], "crc10_gsm": [19, 20], "crc10_i_610": [19, 20], "crc11_flexrai": [19, 20], "crc11_umt": [19, 20], "crc12_3gpp": [19, 20], "crc12_cdma2000": [19, 20], "crc12_dect": [19, 20], "crc12_gsm": [19, 20], "crc12_umt": [19, 20], "crc13_bbc": [19, 20], "crc14_darc": [19, 20], "crc14_gsm": [19, 20], "crc15_can": [19, 20], "crc15_mpt1327": [19, 20], "crc16": 19, "crc16_acorn": [19, 20], "crc16_arc": [19, 20], "crc16_aug_ccitt": [19, 20], "crc16_autosar": [19, 20], "crc16_bluetooth": [19, 20], "crc16_buypass": [19, 20], "crc16_ccitt": [19, 20], "crc16_ccitt_fals": [19, 20], "crc16_ccitt_tru": [19, 20], "crc16_cdma2000": [19, 20], "crc16_cm": [19, 20], "crc16_darc": [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_epc": [19, 20], "crc16_epc_c1g2": [19, 20], "crc16_genibu": [19, 20], "crc16_gsm": [19, 20], "crc16_i_cod": [19, 20], "crc16_ibm": [19, 20], "crc16_ibm_3740": [19, 20], "crc16_ibm_sdlc": [19, 20], "crc16_iec_61158_2": [19, 20], "crc16_iso_hdlc": [19, 20], "crc16_iso_iec_14443_3_a": [19, 20], "crc16_iso_iec_14443_3_b": [19, 20], "crc16_kermit": [19, 20], "crc16_lj1200": [19, 20], "crc16_lte": [19, 20], "crc16_m17": [19, 20], "crc16_maxim": [19, 20], "crc16_maxim_dow": [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_riello": [19, 20], "crc16_spi_fujitsu": [19, 20], "crc16_t10_dif": [19, 20], "crc16_teledisk": [19, 20], "crc16_tms37157": [19, 20], "crc16_umt": [19, 20], "crc16_usb": [19, 20], "crc16_v_41_lsb": [19, 20], "crc16_v_41_msb": [19, 20], "crc16_verifon": [19, 20], "crc16_x25": [19, 20], "crc16_xmodem": [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_aal5": [19, 20], "crc32_adccp": [19, 20], "crc32_aixm": [19, 20], "crc32_autosar": [19, 20], "crc32_base91_c": [19, 20], "crc32_base91_d": [19, 20], "crc32_bzip2": [19, 20], "crc32_castagnoli": [19, 20], "crc32_cd_rom_edc": [19, 20], "crc32_cksum": [19, 20], "crc32_dect_b": [19, 20], "crc32_ethernet": [19, 20], "crc32_interlaken": [19, 20], "crc32_iscsi": [19, 20], "crc32_iso_hdlc": [19, 20], "crc32_jamcrc": [19, 20], "crc32_mef": [19, 20], "crc32_mpeg_2": [19, 20], "crc32_pkzip": [19, 20], "crc32_posix": [19, 20], "crc32_v_42": [19, 20], "crc32_xfer": [19, 20], "crc32_xz": [19, 20], "crc3_gsm": [19, 20], "crc3_rohc": [19, 20], "crc40_gsm": [19, 20], "crc4_g_704": [19, 20], "crc4_interlaken": [19, 20], "crc4_itu": [19, 20], "crc5_epc": [19, 20], "crc5_epc_c1g2": [19, 20], "crc5_g_704": [19, 20], "crc5_itu": [19, 20], "crc5_usb": [19, 20], "crc64_ecma": [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], "crc6_cdma2000_a": [19, 20], "crc6_cdma2000_b": [19, 20], "crc6_darc": [19, 20], "crc6_g_704": [19, 20], "crc6_gsm": [19, 20], "crc6_itu": [19, 20], "crc7_mmc": [19, 20], "crc7_rohc": [19, 20], "crc7_umt": [19, 20], "crc82_darc": [19, 20], "crc8_ae": [19, 20], "crc8_autosar": [19, 20], "crc8_bluetooth": [19, 20], "crc8_cdma2000": [19, 20], "crc8_darc": [19, 20], "crc8_dvb_s2": [19, 20], "crc8_etu": [19, 20], "crc8_gsm_a": [19, 20], "crc8_gsm_b": [19, 20], "crc8_hitag": [19, 20], "crc8_i_432_1": [19, 20], "crc8_i_cod": [19, 20], "crc8_itu": [19, 20], "crc8_lte": [19, 20], "crc8_maxim": [19, 20], "crc8_maxim_dow": [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_wcdma": [19, 20], "crc_width": [19, 20], "crcmod": 19, "creat": [0, 1, 3, 14, 15, 19, 22, 24, 25, 27, 28], "creation": [15, 28], "critic": [0, 15], "cross": [4, 6, 17], "crucial": [1, 3], "csr": 26, "csr_bu": 26, "csr_bus__addr": 26, "csr_bus__r_data": 26, "csr_bus__r_en": 26, "csr_bus__w_data": 26, "csr_bus__w_en": 26, "csrlayoutannot": 26, "csrsignatur": 26, "cst": 9, "ctx": [15, 16, 24, 25, 27], "curat": 3, "current": [3, 10, 15, 19, 27, 28], "cursori": 16, "custom": [6, 14, 16, 19, 22, 23, 25], "custominterfac": 28, "customsignatur": 28, "cxxrtl": 0, "cyc": 28, "cycl": [3, 15, 16, 18, 19, 23, 24, 25, 27], "cyclic": [4, 17], "cyclonev_oscil": 0, "d": [0, 3, 15, 16, 19, 21, 24, 25, 26, 27, 28], "d0": [3, 21, 22], "d1": [3, 16, 28], "d16": 22, "d17": 22, "d26": 3, "d3": 3, "d5": 3, "data": [0, 4, 14, 15, 17, 18, 19, 23, 24, 25, 26, 28], "data_consum": 28, "data_in": 3, "data_out": 3, "data_produc": 28, "data_shap": 28, "data_width": [19, 25, 28], "databas": 13, "dataconsum": 28, "dataforward": 28, "dataprocessorimplement": 28, "dataprocessorwrapp": 28, "dataproduc": 28, "david": 29, "dclk": 24, "dclk_port": 24, "dcp": 13, "ddr": 24, "ddrbuffer": [0, 24], "ddtcmd": 10, "de": 16, "deadlin": [0, 15], "deassert": [15, 18, 27], "debian": 5, "debug": [4, 5, 6, 15, 16], "debug_verilog": 0, "decid": 3, "decis": [1, 3], "declar": [1, 16, 28], "decod": 28, "decrement": 3, "dedic": 3, "deep": 28, "def": [3, 14, 15, 16, 21, 22, 24, 25, 26, 27, 28], "default": [0, 3, 13, 14, 15, 18, 24, 25, 28], "default_clk": 0, "default_clk_frequ": 0, "default_clk_period": [0, 16], "defect": 25, "defin": [0, 3, 6, 14, 15, 16, 17, 18, 19, 22, 24, 25, 27, 28], "definit": [0, 3, 4, 16, 26, 28], "delai": [0, 1, 15, 18, 23, 24], "delattr": 28, "delay_expir": 15, "deleg": [3, 14], "delet": [25, 28], "deliber": 3, "demonstr": [1, 14, 16, 27, 28], "denot": 28, "departur": 0, "depend": [0, 1, 3, 5, 6, 14, 15, 21, 23, 28], "deprec": 0, "depth": [3, 23, 25, 27], "deriv": [0, 3, 6, 16, 21, 24, 28], "describ": [0, 1, 14, 15, 16, 17, 21, 25, 26, 28], "descript": [1, 3, 6, 14, 15, 17, 21, 26, 28], "design": [0, 1, 3, 5, 6, 13, 14, 15, 16, 17, 18, 19, 21, 24, 25, 26, 27, 28, 29], "desir": 3, "detail": [3, 15, 16, 18, 28], "detect": [3, 19, 27, 28], "determin": [3, 14, 15, 25, 27, 28], "dev": 1, "develop": [1, 16, 21, 26, 27], "deviat": 14, "devic": [3, 6, 10, 12, 24, 25, 27], "diagnost": [3, 6, 14, 16, 28], "diagram": [24, 25, 27], "diamond": 10, "diamond_env": 10, "diamond_vers": 10, "dict": [14, 15, 21, 26, 28], "dictionari": [21, 28], "did": [1, 5], "differ": [0, 1, 3, 6, 15, 17, 18, 21, 23, 24, 25, 26, 28], "differenti": 24, "differentialport": [0, 24], "difficult": [1, 3, 15, 26, 27], "digit": [3, 6, 17], "dimens": [25, 28], "dimension": 28, "dir": [0, 24, 26], "direct": [3, 6, 15, 21, 24, 26, 28], "direction": 28, "directli": [0, 3, 6, 14, 15, 18, 19, 21, 23, 24, 25, 28], "directori": 5, "disabl": [3, 15, 16], "discard": [15, 27], "discov": 14, "discrimin": 28, "discuss": [1, 28], "displai": [5, 6, 15], "disregard": 28, "distinct": [3, 21], "distinguish": 28, "distribut": [1, 5, 25], "divid": [3, 25], "divis": [0, 3, 14], "divisor": [0, 16], "do": [0, 1, 3, 14, 15, 16, 21, 25, 27, 28], "do_program": 16, "doc": 1, "docstr": 1, "doctest": 1, "document": [3, 4, 6, 14, 15, 16, 17, 20, 24, 25, 28], "doe": [0, 1, 3, 6, 14, 15, 18, 21, 23, 24, 25, 26, 27, 28], "doesn": [1, 26, 28], "dom": 3, "domain": [0, 4, 6, 14, 15, 16, 17, 23, 24, 25, 26, 27, 28], "domain_nam": 3, "domainrenam": [3, 14], "domainreset": 15, "don": [1, 3], "done": [1, 3, 14, 15, 19, 21, 27], "doubl": [24, 28], "doubt": 1, "dout": 24, "dout_port": 24, "dout_valu": 24, "down": [3, 25], "download": [1, 6, 16], "downstream": 14, "draft": 26, "dram": 25, "dramat": 1, "drc": 13, "drive": [3, 15, 16, 24, 28], "driven": [3, 6, 15, 18, 24, 25, 27], "driver": 3, "driverconflict": 15, "drop": [14, 18, 22], "dsl": 3, "dsp": 27, "dual": 25, "due": [3, 25, 28], "dump": 14, "dump_modul": 16, "durat": 15, "dure": [1, 3, 6, 15, 18, 21, 24], "dut": [15, 16, 24, 27], "duti": [15, 18], "dynam": [21, 25], "e": [0, 1, 3, 14, 15, 18, 23, 24, 25, 27, 28], "each": [1, 3, 6, 14, 15, 19, 21, 24, 25, 27, 28], "earlier": [3, 12], "easi": [1, 3, 6], "easier": [1, 3, 6], "easili": [6, 26], "echo": 10, "ecosystem": 26, "ecp5": [5, 10], "ecppack": 10, "ecppack_opt": 10, "edf": 12, "edg": [1, 3, 5, 15, 16, 18, 24, 25, 27], "edif": 12, "edit": [1, 16], "effect": [3, 15, 24, 25, 28], "effici": [3, 15, 25, 27], "effort": [1, 6, 16], "eight": 27, "either": [3, 5, 14, 15, 18, 21, 22, 25, 26, 28], "elabor": [4, 14, 15, 16, 18, 24, 25, 26, 27, 28], "elaborat": [0, 3, 14, 15, 16, 24, 25, 28], "elaps": [0, 15], "elapsed_tim": [0, 15], "electr": [3, 24], "elem_count": 25, "elem_shap": 21, "element": [3, 14, 15, 21, 23, 25, 28], "elev": 15, "elif": [15, 16, 24, 27], "elimin": [3, 6, 18], "els": [1, 16, 18, 24, 25, 27, 28], "elsewher": [3, 28], "emb": 26, "emit": [0, 3, 28], "empti": [0, 3, 15, 23, 25, 26], "en": [3, 15, 16, 25, 28], "en_valu": 15, "en_width": 25, "enabl": [0, 3, 6, 8, 10, 12, 15, 16, 21, 24, 25, 27, 28], "enableinsert": [3, 14], "encount": [1, 14, 15], "encourag": [26, 28], "end": [0, 3, 6, 8, 9, 10, 12, 15, 16, 24], "endian": 19, "endmodul": 16, "enjoi": 1, "enough": [3, 14, 21], "ensur": [0, 3, 14, 22, 24, 26, 27, 28], "enter": 3, "entir": [3, 15, 16, 19, 24, 26], "entiti": [3, 26], "entri": [19, 23], "enum": [0, 3, 14, 17, 21, 22, 28], "enum_shap": 14, "enumer": [0, 4, 14, 17, 21, 24, 27, 28], "enummeta": 14, "enumtyp": 22, "enumview": [0, 22, 28], "env": 0, "environ": [0, 6, 8, 9, 10, 11, 12, 13, 15], "envron": 0, "eq": [0, 3, 14, 15, 16, 21, 22, 24, 25, 26, 27, 28], "equal": [3, 14, 21, 22, 24, 25, 28], "equival": [3, 14, 15, 21, 22, 28], "errata": 25, "error": [0, 1, 3, 6, 8, 10, 12, 15, 19, 21, 28], "especi": [1, 3, 6], "essenti": [3, 6, 17, 19, 28], "establish": 6, "evalu": [4, 15, 16], "even": [0, 1, 3, 14, 15, 18, 25, 28], "evenli": 25, "event": [6, 15], "ever": 28, "everi": [1, 3, 6, 14, 15, 16, 18, 19, 21, 25, 28], "everyon": 1, "everyth": [6, 17, 21, 22, 28], "evolut": 1, "evolv": 1, "exact": [1, 14, 15, 21, 27], "exact_depth": 23, "exact_log2": 0, "exactli": [3, 14, 15, 21, 22, 24, 25, 28], "examin": [3, 28], "exampl": [3, 14, 15, 16, 17, 20, 21, 26, 28], "example1": 15, "example1_error": 15, "example2": 15, "example3": 15, "example4": 15, "example5": 15, "examplepipelin": 27, "exceedingli": 3, "except": [3, 14, 15, 21, 24, 25, 26, 27, 28], "exchang": [23, 26, 27], "exclus": 3, "execut": [3, 15], "execute_loc": 0, "execute_local_dock": 0, "execute_remote_ssh": 0, "exercis": [15, 29], "exist": [1, 3, 6, 19, 23, 26, 28], "exit": 15, "expand": 3, "expect": [1, 3, 15, 21, 27, 28], "expected_bit": 27, "expected_valu": 27, "expected_word": 27, "expens": [1, 6], "experi": [1, 3], "experiment": [3, 5], "expir": 15, "explain": [3, 5], "explan": [16, 28], "explicit": [0, 3, 6, 14, 19], "explicitli": [0, 3, 14, 15, 16, 19, 21, 22, 25, 28], "explor": 26, "expon": [3, 21], "exponenti": 3, "export": [3, 10, 14, 22, 28], "expos": 28, "expr": 15, "express": [0, 3, 15, 21, 22, 26, 28], "extend": [0, 3, 6, 14, 15, 22, 26, 28], "extens": [0, 16], "extern": [3, 15, 21, 24, 26, 27, 28], "extra": [8, 10, 12, 13], "extract": [0, 28], "extrem": 25, "ey": 1, "f": [3, 9, 14, 16, 27, 28], "facil": [3, 19, 21, 26, 28], "fact": [1, 3], "facto": 16, "fail": [18, 25, 28], "faint": 1, "fall": [0, 17, 24], "fals": [0, 3, 14, 15, 18, 19, 20, 23, 24, 26, 27, 28], "famili": [0, 5, 6, 10, 21], "familiar": [3, 14, 15], "far": 25, "fasm2fram": 13, "fast": [15, 21], "faster": [5, 18], "favor": 6, "feasibl": [1, 14], "featur": [0, 4, 14, 18, 28], "feedback": [3, 27, 28], "feel": 1, "fell": 0, "fencepost": 3, "few": [1, 3, 16, 21, 26, 27, 28], "fewer": [1, 3], "ff": 5, "ffbuffer": [0, 24], "ffsynchron": [0, 17, 18], "fhdltestcas": 0, "field": [0, 21], "fifo": [0, 6, 17, 23, 27], "fifointerfac": [0, 17, 23], "file": [0, 3, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 21, 22, 28], "filenam": 15, "fill": 28, "filter": 27, "final": [3, 6, 15, 28], "find": [1, 26], "finish": [3, 15, 16], "finit": [3, 6], "fir": 27, "firefox": 5, "first": [0, 1, 3, 4, 5, 6, 14, 15, 16, 17, 18, 19, 21, 24, 27, 28], "fit": [3, 14, 26], "fix": [0, 3, 4, 5, 16, 19, 25, 28], "fixedcompon": 28, "flag": [15, 22, 28], "flag_valu": 15, "flagview": 22, "flash": [0, 6, 10, 16], "flatten": 28, "flexibl": [6, 21], "flexiblelayout": 21, "flip": [18, 24, 28], "flipflop": 3, "flipped_intf": 28, "flipped_memb": 28, "flipped_sig": 28, "flippedinterfac": 28, "flippedsignatur": 28, "flippedsignaturememb": 28, "float": [0, 18, 21], "floor": [3, 14], "flop": 18, "flow": [4, 6, 27, 28], "flt": 21, "flux": 5, "focu": [6, 27], "focus": 6, "focuss": 29, "follow": [0, 1, 3, 5, 6, 10, 14, 15, 16, 18, 19, 21, 24, 25, 27, 28, 29], "foo": [3, 22, 28], "foo2": 3, "forbid": 28, "forbidden": [14, 28], "form": [0, 3, 19, 24, 27, 28], "formal": [1, 29], "format": [0, 1, 3, 14, 21, 26], "format_desc": 14, "forward": 3, "foss": 16, "found": 3, "foundat": [21, 24], "four": [3, 15, 21, 27, 28], "fpga": [3, 5, 16, 18, 23, 24, 25, 29], "fraction": 21, "fragment": [0, 3, 14], "frame": 14, "free": 1, "freez": 28, "frequenc": [0, 3, 16, 18, 24], "fresh": 3, "from": [1, 5, 6, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "from_bit": [0, 14, 15, 21], "frontend": 1, "frown": 3, "frozen": 28, "frustrat": 1, "fsm": 0, "full": [3, 5, 28], "full_cas": 16, "fulli": [5, 14, 19], "funct": [3, 22], "funct4": 3, "function": [0, 3, 5, 6, 14, 15, 16, 17, 19, 21, 25, 27, 28], "fundament": [1, 21], "further": [3, 6, 18, 27], "fuse": 10, "futur": [0, 3, 6, 15, 24, 28], "fwft": 0, "g": [0, 1, 3, 13, 14, 15, 18, 25, 28], "g_bit": 21, "galoi": 19, "gap": 21, "gate": 18, "gear": 6, "gener": [0, 3, 5, 6, 14, 16, 19, 24, 25, 26, 28], "genericcount": 28, "geometri": 25, "get": [0, 3, 4, 5, 6, 15, 21, 24, 25], "get_async_ff_sync": 18, "get_ff_sync": 18, "get_memori": 25, "get_reset_sync": 18, "getattr": 28, "getter": 28, "git": 5, "github": [1, 5], "give": [0, 3, 14, 21], "given": [0, 3, 19, 21, 22, 25, 28], "glad": 1, "glitch": [3, 15], "glob": [3, 14], "global": [1, 26], "go": [1, 6, 14, 17, 28], "goal": [1, 3, 28], "gone": 28, "good": [1, 3, 10], "govern": 27, "gowin": [0, 4, 5, 7], "gowin_pack": 9, "gowinplatform": [0, 7, 9], "grade": [0, 29], "grammar": 14, "granular": [14, 25], "grayscal": 21, "greater": [3, 14], "green": [1, 21], "group": [3, 21], "gtkw_file": 15, "gtkwave": [5, 15], "guarante": [3, 14, 15, 17, 18], "guard": 3, "guardrail": 1, "guid": [4, 14, 15, 16, 19, 28], "guidelin": 1, "gw_sh": 9, "h0000": 16, "h1": 16, "h19": 16, "ha": [0, 1, 3, 6, 14, 15, 16, 19, 21, 22, 23, 24, 25, 27, 28], "habit": 1, "had": [0, 21, 28], "half": [3, 15, 24], "half_freq": 16, "halv": 24, "ham": 22, "hand": 0, "handl": [15, 19, 23, 25], "handshak": 27, "happen": [1, 3, 25], "hard": [0, 1, 6, 15, 21], "hardwar": [3, 6, 15, 17, 19, 25, 26], "has_immedi": 22, "haschecksum": 21, "hash": 14, "hashabl": [0, 14], "have": [0, 1, 3, 5, 14, 15, 17, 21, 24, 25, 26, 28], "hazard": 3, "hdl": [0, 3, 5, 6, 14, 16, 21, 24, 25, 29], "head": 1, "headerwithparam": 21, "hear": 1, "heard": 1, "held": 3, "hello": 25, "help": 28, "helper": [3, 16, 27, 28], "here": [0, 1, 14, 21, 27], "hertz": [0, 16], "hex": 21, "hierarchi": [0, 3, 21, 26], "high": [3, 6, 15, 21, 24, 25, 27], "higher": [3, 14, 15, 18, 24], "highest": 19, "highlight": 6, "himbaechel": [0, 9], "hoc": 28, "hold": [3, 14, 15, 16], "homebrew": 5, "how": [1, 3, 5, 15, 21, 28], "howev": [1, 3, 5, 14, 15, 18, 21, 25, 26, 27, 28], "htm": [10, 12], "html": 1, "http": [1, 5, 26, 28], "human": [6, 28], "hz": 16, "i": [0, 1, 2, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29], "i_c": 3, "i_clk": 3, "i_color": 21, "i_d": 3, "i_data": 3, "i_data_in": 3, "i_domain": [18, 24], "i_en": 3, "i_inam": 3, "i_mod": 3, "i_rst": 3, "i_sclk": 27, "i_sdat": 27, "i_ssel": 27, "i_stream": [21, 27], "icaru": 6, "ice40": [5, 10, 12, 16], "icecube2": 12, "icepack": 12, "icepack_opt": 0, "icestick": 16, "icestickplatform": 16, "icestorm": 12, "id": [14, 26, 28], "idempot": 14, "ident": [3, 14, 19, 23, 25, 28], "identifi": [3, 17, 21], "idiomat": [17, 28], "ieee": 21, "ieee754singl": 21, "if_exist": 15, "ignor": [3, 14, 28], "illustr": [14, 27, 28], "imm": [3, 22], "immedi": [1, 3, 5, 14, 15, 18, 25], "immut": [0, 3, 15, 21, 28], "impact": 1, "imped": 3, "impend": [14, 17], "imper": [1, 3], "impl": 28, "implement": [1, 3, 6, 14, 15, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "impli": [0, 3], "implicit": [0, 3, 19], "implicitli": [0, 14], "import": [0, 1, 3, 4, 15, 16, 19, 21, 22, 24, 25, 27, 28], "importantli": [6, 14], "imposs": [14, 28], "improv": [0, 1, 14, 15, 21, 23, 28], "in1": 28, "in2": 28, "in_a": 15, "in_a_valu": 15, "in_b": 15, "in_b_valu": 15, "in_val": 3, "inam": 3, "includ": [0, 1, 3, 5, 6, 10, 14, 16, 17, 19, 22, 24, 25, 27, 28], "inclus": 3, "incom": 28, "incompat": [23, 28], "incomplet": [1, 4, 14], "inconsist": 15, "incorrect": 1, "increas": [18, 23, 24], "increment": [3, 15, 16], "indefinit": 15, "independ": [3, 24, 25, 27], "index": [0, 1, 3, 14, 21, 24, 25, 27, 28], "indic": [3, 14, 15, 19, 21, 27, 28], "indirect": 15, "indirectli": [3, 15], "individu": [0, 1, 14, 15, 21, 24, 27], "industri": 6, "inequ": [3, 14], "infer": [0, 3, 6, 21, 24], "influenc": 28, "info": 14, "inform": [1, 8, 10, 12, 16, 21, 26, 28], "ing": 28, "inherit": [0, 3, 14, 21, 23, 28], "init": [0, 3, 14, 15, 18, 19, 21, 24, 25, 26, 28], "initi": [0, 14, 15, 18, 19, 21, 25, 27, 28], "initial_crc": [19, 20], "initialis": 19, "inject": [3, 24], "inlin": [0, 1], "inner": [3, 28], "innermost": 3, "inout": 3, "inout_v": 3, "input": [3, 4, 14, 15, 16, 17, 18, 19, 23, 25, 27], "input_layout": 21, "insert": [6, 8, 9, 10, 11, 12, 13, 25, 28], "insid": [3, 28], "inspect": [14, 15, 16], "inspir": 1, "instal": [0, 1, 4, 12, 16], "instanc": [0, 4, 10, 14, 21, 22, 24, 26, 28], "instant": 15, "instantan": 3, "instanti": [0, 3, 6, 14, 16, 18, 21, 24, 25], "instead": [0, 3, 14, 15, 21, 25, 26, 27, 28], "instr": [3, 22], "instruct": [0, 3, 15, 16], "instrview": 22, "insuffici": 18, "int": [0, 3, 14, 15, 16, 18, 19, 21, 23, 24, 25, 26, 28], "int16": 21, "int8": 21, "intact": 28, "integ": [0, 14, 21, 22, 25, 26, 28], "integr": [3, 4, 15, 16, 26, 29], "intel": 0, "intelplatform": 0, "intend": [15, 28], "intens": 21, "intention": 3, "intenum": [0, 3, 14, 22], "interact": [15, 25, 27, 28], "interchang": 21, "interest": [1, 14], "interfac": [0, 1, 3, 4, 6, 14, 15, 16, 17, 21, 23, 24, 25, 27], "interfaceknowswhenflip": 28, "intermedi": [3, 15], "intern": [14, 21, 24, 28], "interoper": [3, 16, 17, 28], "interpret": [3, 5, 14, 28], "interv": [0, 15], "intf": 28, "intflag": 22, "introduc": [3, 15, 28], "introduct": [3, 4, 14, 16, 17], "introspect": [21, 27, 28], "invalid": [14, 28], "invalidannot": 26, "invalidmetadata": 28, "invalidschema": 26, "invalu": 5, "invari": 21, "invers": [6, 14, 24], "invert": [6, 22, 24], "invis": 15, "invoc": [3, 6, 16], "invok": [0, 3, 28], "involv": [1, 3], "io": [0, 3, 24], "io_ionam": 3, "io_pin": 3, "iobufferinst": [0, 3, 24], "ionam": 3, "ioport": [0, 3, 24], "iovalu": 24, "ip": 3, "ip_sync": 3, "ir": 16, "irc": 1, "is_act": 3, "is_bporch": 3, "is_compli": [0, 28], "is_even": 3, "is_flip": 28, "is_fporch": 3, "is_odd": 3, "is_port": 28, "is_read_xf": 28, "is_signatur": 28, "is_subnorm": 21, "is_write_xf": 28, "isinst": [3, 14, 28], "isn": [1, 14, 27], "issu": [0, 1, 3, 6, 25], "issubclass": [14, 28], "item": [3, 28], "iter": [0, 1, 3, 15, 19, 21, 24, 25, 28], "its": [0, 1, 3, 14, 15, 16, 18, 19, 21, 22, 24, 25, 26, 27, 28], "itself": [1, 3, 10, 14, 15, 16, 19, 21, 22, 26, 28], "j": [3, 14], "jed": 10, "jedec": 10, "join": 1, "journei": 29, "json": [10, 12, 26, 28], "jtag": [3, 10], "just": [1, 3, 15, 21, 22], "k": [3, 14], "kbob": 29, "keep": [1, 28], "kei": [1, 3, 14, 21, 24, 28], "kept": [14, 21], "keyerror": 21, "keyword": [0, 3, 14, 22, 26, 28], "kind": [1, 3, 15, 21, 28], "knowledg": [1, 28], "known": [3, 6, 10, 14, 15, 17, 19, 21, 25], "kwarg": [22, 28], "label": [24, 25], "labor": [1, 6, 21], "lack": [3, 6, 27], "lane": 27, "lang": [1, 5, 26, 28], "languag": [1, 2, 15, 16, 17, 24, 26, 28], "larg": [3, 15, 21, 23], "larger": [0, 3, 19], "largest": 21, "last": [3, 5, 15, 21, 22, 28], "latch": [3, 23], "latenc": [18, 19, 23, 24, 25, 27], "later": [0, 1, 3, 15, 27], "latest": 1, "latter": [14, 21, 25], "lattic": [4, 7, 12, 16], "lattice_ecp5": 0, "lattice_ice40": 0, "lattice_machxo2": 0, "lattice_machxo2_3l": 0, "lattice_machxo_2_3l": 0, "latticeice40platform": [0, 3], "latticemachxo2or3lplatform": 0, "latticemachxo2platform": 0, "latticemachxo3lplatform": 0, "latticeplatform": [7, 10], "layer": 0, "layout": [0, 17, 26], "lead": [3, 19], "learn": [6, 15, 29], "least": [1, 3, 6, 14, 15, 17, 19, 21, 23, 24, 25, 28], "leav": [3, 21, 28], "led": [0, 4], "ledblink": 16, "left": [0, 3, 14, 19, 25], "leftmost": 3, "legacyaxidataproduc": 28, "len": [0, 3, 14, 21, 24, 25], "length": [3, 21, 24, 25], "less": [0, 14, 15, 24, 28], "level": [0, 1, 3, 6, 14, 15, 16, 21, 23, 24, 28], "lf": 0, "lib": [0, 3, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "libera": 1, "librari": [1, 3, 4, 14, 18, 24, 25, 27], "lifecycl": 15, "lift": [0, 14, 24, 27, 28], "lightli": 16, "like": [0, 1, 3, 5, 6, 14, 15, 18, 21, 22, 24, 25, 28], "likewis": 22, "limit": [1, 3, 6, 16, 24, 27, 28], "line": [0, 1, 14, 16, 22, 28], "link": [16, 28], "lint": 6, "linter": 0, "linux": [5, 10], "list": [0, 1, 3, 14, 15, 19, 21, 25, 26, 28], "liter": 14, "littl": 19, "live": 1, "load": 18, "local": [0, 25], "locat": [1, 4, 16, 24, 28], "log": [1, 8, 10, 12, 13], "log2_int": 0, "logic": [1, 6, 14, 16, 23, 24, 25], "long": [3, 14, 19], "longer": 0, "look": [15, 21], "loop": [3, 6, 15, 25], "loos": 22, "loss": 27, "lot": 1, "low": [0, 3, 6, 15, 21, 24, 27], "lower": [3, 21], "lowest": [3, 18], "lpf": 10, "lscc": 10, "lse": 12, "lse_opt": 12, "lut": [3, 25], "m": [0, 3, 14, 15, 16, 19, 21, 24, 25, 26, 27, 28], "machin": [3, 6], "machxo2": [5, 10], "machxo3": 10, "machxo3l": 10, "maco": 5, "made": [0, 3, 5, 25, 28], "mai": [0, 1, 3, 5, 14, 15, 18, 19, 21, 22, 24, 25, 27, 28], "main": 5, "mainli": 1, "maintain": [1, 6, 18], "major": [6, 28], "make": [0, 1, 3, 5, 6, 15, 17, 22, 23, 24, 25, 26, 27], "manag": [1, 3, 15, 21], "mandatori": 0, "mani": [1, 3, 6, 14, 16, 19, 25, 26, 28], "manipul": [3, 14, 15, 21, 27, 28], "manual": [0, 1, 4, 5, 19, 21, 28], "map": [3, 13, 21, 26, 28], "map_opt": 13, "mask": 3, "match": [0, 6, 14, 15, 22, 24, 25, 28], "match_detect": 19, "matrix": 1, "matter": [1, 21], "max": [3, 14], "max_input_delai": 18, "maximum": [18, 24], "mean": [1, 3, 14, 24, 25, 28], "meaning": 28, "meaningless": [3, 28], "meant": [1, 28], "measur": 15, "mechan": [14, 24, 27], "meet": [4, 25], "member": [0, 1, 14, 21, 22, 24, 25, 26, 27, 28], "membership": 14, "memori": [0, 4, 6, 14, 15, 16, 17, 23, 26, 28], "memorydata": [0, 15, 25], "messag": [0, 1, 3, 8, 10, 12, 14, 16, 25, 28], "met": 15, "meta": [0, 17, 26, 28], "metaclass": [17, 28], "metadata": [0, 4, 13, 17], "metaprogram": 28, "metast": 18, "method": [0, 1, 3, 14, 15, 16, 18, 19, 21, 22, 25, 26, 28], "mhz": [15, 16, 24, 27], "migen": 0, "might": [1, 15], "migrat": 6, "min": 3, "mind": 5, "minim": [0, 1, 14, 16, 27], "minimum": [25, 26], "minor": 1, "minus_two": 3, "mislead": 1, "mismatch": [3, 5, 27], "miss": [0, 1, 15], "mistak": 6, "mistral": [0, 8], "misus": [3, 6], "mix": [0, 3], "mode": [1, 3], "model": [6, 15, 17, 19], "modern": 5, "moderndataconsum": 28, "modifi": [1, 25, 27, 28], "modul": [0, 1, 4, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "modulo": [0, 3, 14], "moment": [1, 3, 6, 15, 16, 24], "momentari": 27, "mondai": 1, "more": [1, 3, 6, 14, 15, 16, 21, 24, 25, 26, 27, 28], "most": [0, 1, 3, 5, 6, 14, 15, 16, 18, 19, 21, 22, 24, 25, 27, 28], "move": 0, "mrp": 13, "msb": [3, 27], "mtbf": 18, "much": [1, 25], "mul": [3, 22], "multi": [15, 19, 24], "multipl": [0, 3, 6, 14, 15, 27, 28], "multiplex": 3, "multipli": 21, "must": [1, 3, 12, 14, 15, 17, 18, 19, 21, 22, 24, 25, 26, 27, 28], "mutabl": [3, 25, 28], "mutat": [3, 28], "mux": [3, 14], "my": 29, "my_properti": 28, "my_shape_cast": 14, "myperipher": 26, "n": [0, 3, 18, 21, 24, 25], "name": [0, 1, 6, 8, 9, 10, 12, 13, 14, 15, 18, 21, 24, 25, 26, 28], "nameerror": [15, 28], "namespac": [0, 1, 3], "narrow": 24, "nativ": [0, 6], "natur": 3, "navig": 1, "ncd": 13, "nearli": 3, "necessari": [0, 1, 3, 5, 6, 12, 14, 15, 16, 17, 21, 26, 27, 28], "need": [1, 3, 6, 14, 15, 18, 21, 23, 25, 26, 28], "need_pow2": 0, "neg": [0, 3, 14, 15, 18, 24], "negat": [3, 14, 22], "negedg": 15, "neither": [3, 15, 22, 28], "nest": [3, 28], "netlist": [3, 6, 12, 13, 14, 24], "network": 28, "never": [0, 3, 15, 21, 22, 25, 28], "nevertheless": [3, 28], "new": [0, 3, 4, 5, 6, 15, 19, 21, 23, 24, 25, 28], "newer": 5, "newli": [1, 15, 28], "next": [0, 3, 5, 15, 16, 23, 24, 25, 27, 28], "nextpnr": [0, 8, 9, 10, 12, 13], "nextpnr_opt": [8, 10, 12], "nexu": [5, 10], "ngc": 13, "ngd": 13, "ngdbuild": 13, "ngdbuild_opt": 13, "nix": 6, "nm": 0, "nmigen": [0, 29], "nmigen_": 0, "nmigen_board": 0, "nmigen_env_": 0, "nmigen_env_diamond": 0, "non": [0, 1, 3, 6, 14, 15, 18, 26, 28], "none": [3, 10, 13, 14, 15, 16, 18, 24, 25, 27, 28], "nontrivi": [14, 17], "nor": [15, 22, 28], "normal": [0, 14, 24, 28], "normalenum": 22, "notabl": [0, 5], "notat": 3, "note": [0, 1, 3, 14, 18, 19, 21, 22, 24], "noth": [0, 14, 23, 28], "notic": [1, 14], "notifi": 15, "notimplementederror": 3, "now": [0, 3, 28], "nproc": 8, "nt64": 10, "num": 3, "number": [3, 8, 14, 15, 18, 21, 23, 24, 25, 28], "numer": [3, 15], "o": [0, 2, 4, 6, 13, 15, 16, 18, 24, 26], "o_data": 3, "o_data_out": 3, "o_domain": [18, 24], "o_grai": 21, "o_onam": 3, "o_q": 3, "o_sclk": 27, "o_sdat": 27, "o_ssel": 27, "o_stream": 27, "obj": [14, 21, 26, 28], "obj1": 28, "obj2": 28, "obj3": 28, "obj__items__0": 28, "obj__items__1": 28, "object": [0, 3, 8, 14, 15, 19, 21, 24, 25, 26, 27, 28], "observ": [3, 15], "obtain": [14, 19], "obviou": 1, "occasion": 1, "occupi": 3, "occur": [3, 15, 27], "octet": 19, "odd": [3, 14], "oe": [3, 24], "off": [3, 10], "offici": 29, "offset": [3, 14, 21], "often": [3, 6, 21, 28], "old": 25, "old_stat": 3, "omit": [3, 5], "onam": 3, "onc": [1, 3, 14, 15, 16, 18, 21, 24, 27, 28], "one": [0, 1, 3, 14, 15, 16, 17, 18, 19, 21, 23, 24, 25, 28, 29], "ones": [1, 6, 14, 15, 21, 25, 28], "ongo": 3, "onli": [0, 1, 3, 5, 6, 10, 14, 15, 16, 18, 19, 21, 22, 23, 24, 26, 27, 28], "onlin": 0, "op": [3, 22], "opaqu": [14, 26], "open": [1, 3, 5, 6, 15, 16], "oper": [0, 4, 6, 14, 15, 21, 22, 24, 25, 28], "operand": [3, 14, 22], "opportun": 1, "option": [3, 6, 8, 10, 12, 13, 15, 16, 18, 22, 28], "order": [15, 19, 21, 27, 28], "ordinari": [3, 6], "org": [1, 26, 28], "organ": [6, 25], "origin": [3, 5, 26, 28], "osch": 0, "oscil": [3, 16], "oss": 1, "other": [0, 1, 3, 5, 6, 14, 15, 16, 18, 19, 21, 22, 24, 26, 27, 28], "other_unflip": 28, "otherwis": [1, 3, 5, 14, 15, 16, 18, 21, 24, 25, 28], "ouptut": 24, "our": 1, "out": [0, 4, 5, 6, 14, 15, 16, 17, 18, 19, 24, 26, 27, 28], "out1": 28, "out_val": 3, "outcom": 1, "outdat": 1, "outer": [3, 28], "outgo": 28, "output": [0, 1, 3, 4, 12, 14, 15, 16, 17, 18, 19, 23, 25, 27, 28], "outputseri": 24, "outsid": [0, 3, 24, 28], "over": [1, 19, 21, 25], "overflow": [3, 16, 28], "overhead": 28, "overlap": [3, 14, 21, 27], "overrid": [0, 8, 9, 10, 11, 12, 13, 14, 18, 21, 25, 28], "overridden": [6, 21, 28], "overview": 16, "ovf": 16, "own": [1, 3, 19, 21], "oxid": 10, "p": [3, 24, 27], "p_pname": 3, "p_width": 3, "pack": 12, "packag": [0, 1, 5, 16, 26], "packet": 27, "pad": 21, "page": 1, "paid": 1, "painless": 19, "pair": [3, 14, 24, 28], "par": 13, "par_opt": 13, "paragraph": 1, "parallel": [3, 19, 24], "param": [3, 21], "paramet": [1, 3, 14, 15, 16, 17, 18, 21, 23, 24, 25, 26, 27, 28], "parameter": 3, "parameteris": 19, "parametriccompon": 28, "parenthes": 3, "pars": 26, "part": [0, 1, 3, 14, 15, 16, 17, 21, 25, 28], "parti": [6, 14, 17], "partial": 25, "particular": [0, 1, 3, 6, 15, 19, 21, 28], "particularli": 3, "pass": [0, 3, 15, 22, 24, 26, 28], "past": [3, 4], "past_x": 0, "path": [0, 10, 26, 27], "pattern": [0, 3, 14, 21, 22], "patternproperti": 26, "paus": [15, 27], "payload": [24, 27], "payload_init": [0, 27], "payload_shap": 27, "pc": 3, "pcf": [12, 13], "pdc": 10, "pdm": 1, "pend": 27, "peopl": 1, "per": [19, 24], "perform": [6, 14, 15, 19, 21, 22, 25, 27, 28], "period": [0, 15, 16, 24, 27], "peripher": [6, 24, 26, 28], "permit": 3, "persist": [1, 3], "person": [1, 26], "perspect": 1, "phase": [0, 3, 15, 24], "phrase": 1, "physic": 13, "pick": 1, "pin": [0, 3, 6], "pinout": [6, 16], "pip": 5, "pip3": 5, "pipelin": 24, "pixel": [3, 21], "place": [3, 5, 6, 13, 14, 16, 22, 28], "place_design": 13, "placement": 6, "plain": [0, 3, 21, 22], "platform": [3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 24, 25, 26, 27, 28], "playground": 4, "pleas": 1, "plu": [19, 21, 23, 24], "pname": 3, "pnmainc": 10, "po": 18, "point": [0, 12, 15, 21, 24, 27], "pointer": 3, "polar": [6, 15, 24], "polici": 0, "polynomi": [19, 20], "polynomin": 19, "pop": 25, "popul": [8, 9, 10, 11, 12, 13, 15, 21, 28], "popular": 5, "port": [0, 16, 17, 26, 28], "port_i": 3, "port_o": 3, "portabl": 6, "portlik": [0, 24], "posedg": [15, 16, 24, 27], "posit": [3, 14, 19, 21, 24, 28], "possibl": [1, 3, 6, 14, 15, 22, 24, 25, 27, 28], "post": 1, "potenti": [3, 6, 28], "power": [3, 6, 18, 23, 25], "practic": [3, 27, 28], "pre": 12, "preced": 3, "precis": [3, 21], "preclud": 14, "predat": 0, "predefin": [3, 17, 20], "preempt": 15, "prefer": [14, 15, 25], "prelud": [0, 4, 14], "prepar": [3, 15], "prepend": 28, "prerequisit": 4, "prescrib": 28, "presenc": [15, 28], "present": [0, 3, 6, 8, 9, 10, 11, 12, 13, 14, 24, 28], "preserv": [21, 24], "prevent": [3, 14, 15], "previou": [1, 5, 15, 19, 21, 24], "previous": [0, 26, 28], "primari": 1, "primarili": [18, 28], "primit": [0, 3, 6, 25, 26], "principl": [6, 28], "print": [0, 1, 4, 14, 28], "prior": 3, "privat": [3, 15], "prj_project": 10, "prj_run": 10, "prj_save": 10, "prjoxid": 10, "prjoxide_opt": 10, "probabl": 16, "probe": 6, "problem": [3, 4, 27, 28], "process": [0, 1, 3, 6, 14, 15, 17, 19, 21, 27, 28], "process_example4": 15, "process_example5": 15, "process_instr_decod": 15, "processor": [3, 19], "procss": 15, "produc": [3, 6, 15, 16, 18, 27, 28], "producerrequiringreadi": 28, "product": [8, 9, 10, 12, 13], "program": [0, 1, 3, 6, 10, 16], "programm": [6, 10], "programmat": 3, "progress": [4, 14], "prohibit": [3, 27], "project": [0, 1, 5, 6, 22, 26], "prolifer": 28, "promptli": 18, "prone": [6, 21, 28], "pronounc": 28, "propag": [0, 14, 15], "properti": [1, 3, 21, 24, 25, 26, 27, 28], "proportion": 28, "propos": 4, "protocol": [0, 14, 22, 26, 27], "provid": [0, 3, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "proxi": [3, 21, 28], "public": [0, 1, 14, 17, 28], "publicli": [1, 26], "publish": [0, 15, 26], "pull": [1, 5], "puls": [18, 24], "pulsesynchron": [0, 17, 18], "pure": [6, 28], "pureinterfac": [0, 28], "purpos": [14, 28], "push": [25, 27], "py": [1, 16], "pypi": [0, 5, 6], "pypy3": 5, "pysim": 0, "python": [0, 1, 3, 5, 6, 12, 14, 15, 16, 21, 22, 26, 28], "python3": [5, 16], "q": 3, "qsf": 8, "quartu": 8, "quartus_asm": 8, "quartus_asm_opt": 8, "quartus_fit": 8, "quartus_fit_opt": 8, "quartus_map": 8, "quartus_map_opt": 8, "quartus_sta": 8, "quartus_sta_opt": 8, "queri": 24, "question": 28, "queue": [4, 17, 27], "quicklog": [0, 4, 7], "quicklogicplatform": [0, 7, 11], "r": [3, 14, 25], "r_accum": 21, "r_addr": 15, "r_bit": 21, "r_data": [3, 15, 23, 26, 28], "r_domain": 23, "r_en": [3, 23, 26], "r_level": [0, 23], "r_rdy": 23, "r_rst": [0, 23], "r_stream": 27, "race": 15, "radiant": 10, "radiant_env": 10, "radiant_vers": 10, "radiantc": 10, "rai": 28, "rais": [3, 14, 15, 21, 22, 24, 25, 26, 28], "ram": [23, 25], "rang": [0, 14, 15, 16, 21, 23, 24, 27, 28], "rare": [3, 14, 21, 28], "rate": [24, 25, 27], "rather": [0, 1, 3, 15, 21, 24, 28], "ratio": 18, "raw": [8, 13, 14, 21], "rbf": 8, "rd_port": 25, "re": [1, 15, 19, 22, 24], "reach": [15, 16, 21, 28], "react": [15, 21], "read": [0, 1, 3, 21, 23, 24, 28], "read_ilang": [8, 10, 12], "read_port": 25, "read_verilog": [8, 10, 12], "read_verilog_opt": [8, 10, 12], "read_xdc": 13, "readabl": [3, 6, 28], "readi": [24, 27, 28, 29], "readili": 1, "readport": 25, "realli": 14, "reason": [1, 3, 15, 28], "rebuild": 1, "recal": 24, "receiv": [3, 15, 19, 24, 28], "recent": [3, 19, 21, 22, 28], "recept": [24, 27], "recogn": [0, 14, 25, 27], "recommend": [3, 6, 14], "record": [0, 1, 16], "recurs": [0, 21, 28], "recursionerror": [14, 21], "red": 21, "reduc": [0, 3, 6, 18, 21, 25, 27, 28], "reduct": 14, "redund": [4, 17, 28], "refactor": 28, "refer": [1, 3, 4, 17, 19, 24, 25, 28], "referenc": [15, 21], "reflect": [1, 14, 19, 25], "reflect_input": [19, 20], "reflect_output": [19, 20], "reg": [3, 16, 22], "regard": 15, "regardless": 3, "regist": [0, 3, 6, 19, 23, 24, 26, 28], "regular": 3, "regularli": 6, "reimplement": 15, "reinterpret": [3, 14], "reject": [0, 3], "rel": [3, 25], "relat": [21, 24, 25, 28], "relationship": [24, 28], "releas": [4, 14, 18, 27], "relev": [1, 14, 15, 28], "reli": [1, 3, 6, 15, 28], "reliabl": [5, 6, 28], "remain": [0, 14, 15, 23, 27, 28], "remaind": 14, "remark": 6, "rememb": 3, "remot": 6, "remov": [0, 1, 3, 14, 15, 19, 28], "renam": 0, "render": 1, "reorgan": 0, "repeat": [15, 28], "repeatedli": [14, 15, 21], "repetit": [21, 27, 28], "repl": 0, "replac": [0, 4, 14, 22, 27, 28], "replic": [0, 3, 14, 25], "report": [4, 6, 8, 12, 13, 28], "repositori": [5, 6], "repr": 14, "repres": [0, 3, 14, 24], "represent": [0, 3, 14, 15, 25, 26, 28], "reproduc": [1, 6], "request": [0, 1, 3, 14, 16, 17, 24, 25, 27, 28], "requir": [3, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 21, 24, 25, 26, 27, 28], "requiredproperti": 26, "reserv": [3, 21], "reset": [0, 6, 15, 16, 18, 19, 23, 24, 28], "reset_less": [3, 18], "resetinsert": [3, 14], "resetsign": [3, 14], "resetsynchron": [3, 17, 18], "resett": [3, 18], "residu": 19, "resolv": [0, 3, 28], "resourc": [0, 25], "resourcemanag": 0, "respect": [3, 25, 28], "respond": [15, 28], "rest": [15, 21, 25, 28], "restart": 15, "restrict": [6, 21, 22, 27, 28], "result": [1, 3, 14, 15, 16, 21, 22, 24, 25, 26, 27, 28], "resynchronis": 18, "retain": [3, 16], "retriev": [3, 14, 15, 20, 21, 25, 26, 28], "return": [0, 1, 3, 14, 15, 16, 19, 21, 22, 24, 25, 26, 27, 28], "reus": [6, 15, 28], "reusabl": [3, 6, 15, 16], "reveng": [19, 20], "revers": [3, 19, 27, 28], "revert": 15, "review": [1, 14, 17], "rewritten": 28, "rfc": [1, 27], "rgb": 21, "rgb24_layout": 21, "rgb565": 21, "rgb565_layout": 21, "rgb_layout": 21, "rgblayout": 21, "rgbpixel": 28, "rgbview": 21, "rich": [3, 6], "richer": 14, "rid": 0, "right": [1, 3, 14, 21], "ring": 3, "rise": [16, 24], "robert": 29, "robust": 28, "root": [3, 12, 26], "rose": 0, "rotat": 14, "rotate_left": [0, 3, 14], "rotate_right": [0, 3, 14], "round": [1, 23], "roundrobin": 0, "rout": [5, 6, 13, 16], "route_design": 13, "router": 12, "row": [15, 25], "rpt": [8, 10, 12, 13], "rst": [1, 3, 15, 16], "rst_activ": 15, "rst_valu": 15, "rtl": [10, 12, 13], "rtlil": 0, "rule": [3, 6, 14, 17, 21], "run": [0, 5, 6, 8, 9, 10, 11, 12, 13, 16, 24, 27], "run_pass": 0, "run_sbt_backend_auto": 12, "run_script": 0, "run_until": [0, 15], "runtim": 1, "runtimeerror": 15, "rw": 28, "safe": [3, 6, 18, 22, 27], "safest": 18, "safeti": [0, 22], "same": [0, 1, 3, 6, 14, 15, 16, 19, 21, 22, 23, 24, 25, 27, 28], "sampl": [0, 3, 15, 24, 27, 28], "satisfi": [3, 15, 28], "save": [1, 10, 15], "sb_dff": 3, "sb_hfosc": 0, "sb_lfosc": 0, "sbt": 12, "schedul": [0, 15], "schema": [17, 28], "sclk": 27, "sclk_edg": 27, "sclk_reg": 27, "script": [6, 8, 9, 10, 11, 12, 13], "script_after_add": 12, "script_after_bitstream": 13, "script_after_export": 10, "script_after_flow": 12, "script_after_opt": 12, "script_after_plac": 13, "script_after_read": [8, 10, 12, 13], "script_after_rout": 13, "script_after_run": 13, "script_after_synth": [8, 10, 12, 13], "script_before_bitstream": 13, "script_project": 10, "scrutini": 1, "sd": 3, "sdat": 27, "sdc": [8, 10, 12], "sdp": 25, "sdram": 6, "seamlessli": [6, 14], "second": [0, 1, 3, 14, 15, 18, 21, 27], "second_foo": 3, "secondari": 1, "section": [1, 3, 7, 15, 16, 21, 28], "see": [1, 3, 14, 15, 16, 18, 20, 24, 28], "seem": [3, 25], "seemingli": 1, "segment": 6, "sel": 3, "select": [3, 14, 15, 24, 25], "self": [1, 3, 6, 14, 15, 16, 19, 21, 22, 24, 25, 26, 27, 28], "semant": [0, 1, 3, 6, 14, 28], "send_data": 21, "sentenc": 1, "sep": 3, "separ": [0, 5, 17], "sequenc": [1, 14, 15, 18, 21], "sequenti": 1, "seri": 27, "serial": [19, 24], "serialreceiv": 27, "serialtransmitt": 27, "serious": [4, 14], "serv": [3, 21, 26, 28], "set": [3, 8, 10, 12, 13, 14, 15, 16, 18, 19, 22, 23, 24, 25, 27, 28, 29], "set_addr": 21, "set_opt": 12, "setattr": 28, "setter": 28, "settl": 0, "sever": [0, 1, 3, 14, 15, 24, 28], "sh": 0, "shape": [0, 1, 4, 15, 21, 22, 25, 27, 28], "shape_cast": 14, "shapecast": [0, 3, 14, 15, 21, 22, 25], "shapelik": [0, 14, 21, 27], "share": [15, 21], "sharp": 1, "shell": 0, "shift": [14, 19, 25], "shift_left": [0, 3, 14], "shift_right": [0, 3, 14], "short": [1, 3, 28], "shortcut": [27, 28], "shorten": 3, "shorter": 3, "shorthand": 3, "shot": 15, "should": [1, 3, 5, 14, 15, 16, 18, 21, 23, 24, 25, 28], "show": 6, "shown": [16, 28], "side": [0, 3], "sidewai": 3, "sig": [3, 16, 21, 22, 28], "sig24": 28, "sig32": 28, "sign": [0, 1, 3, 14, 21, 26, 27], "signal": [0, 4, 6, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 27, 28], "signatur": [0, 1, 17, 24, 25, 26, 27], "signatureerror": 28, "signatureknowswhenflip": 28, "signaturememb": 28, "signaturemeta": 28, "signed": [3, 14, 21, 28], "signific": [3, 6, 14, 19, 21, 25], "siliconblu": [4, 7], "siliconblueplatform": [7, 10, 12], "sim": [0, 15, 16, 24, 25, 27], "sim_port": 24, "similar": [0, 1, 3, 14, 15, 16, 19, 21, 25, 27, 28], "similarli": [3, 5, 27, 28], "simpl": [3, 5, 6, 16, 21, 24, 25, 26, 28], "simplebusinterfac": 28, "simplebussignatur": 28, "simpler": 25, "simplest": 3, "simplestreamsignatur": 28, "simpli": 1, "simplifi": [6, 15, 27], "simul": [0, 3, 4, 5, 14, 16, 17, 27], "simulationport": [0, 24], "simulatorcontext": [0, 15], "simultan": [15, 19], "sinc": [0, 3, 5, 14, 15, 16, 19, 21, 28], "singl": [3, 6, 14, 15, 16, 21, 22, 24, 28], "singleendedport": [0, 24], "sink": 28, "site": [14, 16], "size": [21, 25], "skip": [1, 14, 15], "slice": [0, 3, 14, 15, 21, 24], "slower": 6, "small": [1, 3, 14, 16], "smaller": 3, "smallest": 3, "smt": 1, "snippet": [3, 14], "so": [1, 3, 5, 6, 15, 16, 18, 19, 21, 24, 25, 28], "sof": 8, "softwar": [5, 19], "sole": [3, 14, 28], "solut": 28, "solv": 3, "solver": 1, "some": [1, 3, 6, 14, 16, 24, 25, 27, 28], "some_vendor": 0, "someth": 1, "sometim": [1, 3, 6, 28], "somevendorplatform": 0, "sourc": [0, 1, 3, 4, 5, 6, 16, 21, 24, 26, 28], "sourcesynchronousoutput": 24, "space": [3, 23], "spam": 22, "span": [15, 21], "sparingli": 1, "spec": 14, "special": [0, 3, 6, 19, 24, 25, 28], "specif": [3, 5, 6, 14, 15, 18, 19, 21, 24, 25, 26, 27, 28], "specifi": [0, 3, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 27, 28], "speed": [0, 6, 15], "sphinx": 1, "spi": 6, "spirit": 1, "split": 25, "sporn": 29, "spuriou": 15, "squar": 3, "sram": [0, 8, 10], "src": 16, "src_loc_at": [14, 24, 25, 27, 28], "srp": 13, "ssel": 27, "stabl": [0, 3], "stack": 14, "stage": [15, 18], "stai": 26, "standalon": [16, 28], "standard": [1, 2, 3, 4, 8, 10, 12, 14, 16, 19, 22, 26, 27, 28], "start": [1, 3, 4, 6, 15, 19, 21, 28], "startup": [3, 15], "state": [6, 14, 15, 18, 24, 25], "statement": [0, 3, 14, 15, 22, 28], "static": [14, 21, 28], "statu": [15, 26, 28], "stb": 3, "stdin": 22, "step": [0, 1, 3, 5, 6, 15, 16], "still": [0, 3, 15, 16, 18, 28, 29], "stimul": 15, "stimulu": 15, "stop": [0, 3, 15], "storag": [0, 14], "store": [3, 5, 15, 21, 24, 25], "str": [3, 14, 15, 18, 21, 23, 24, 25, 26, 28], "stream": [0, 4, 17, 19, 24, 28], "stream_example_pipelin": 27, "stream_get": 27, "stream_put": 27, "stream_serial_receiv": 27, "stream_serial_transmitt": 27, "stream_value_neg": 27, "streamconsum": 28, "streamconsumerusingin": 28, "streamproduc": 28, "stress": 3, "stride": 21, "string": [0, 3, 14, 15, 21, 24, 26, 28], "strobe": [3, 23], "struct": 21, "structlayout": 21, "structur": [0, 1, 4, 14, 16, 17, 26, 28], "stub": 28, "style": [4, 6], "sub": [3, 22], "subclass": [0, 3, 14, 21, 22, 26, 28], "subdivis": 3, "subi": 22, "subject": [3, 14, 22], "submit": [1, 21], "submodul": [0, 15, 19, 24, 25, 27, 28], "subscript": 3, "subsequ": 19, "subset": [3, 21, 25], "subsign": 0, "substanti": 1, "substitut": 23, "subtl": [3, 6], "subtli": 28, "subtract": [3, 14], "subtyp": 28, "succe": 3, "success": 14, "successfulli": 16, "sudo": 5, "suffici": [3, 21, 28], "suggest": 26, "suit": [1, 25], "suitabl": 15, "sum": 21, "summari": 1, "super": [16, 21, 24, 26, 28], "superclass": [26, 28], "superfici": 3, "supersed": 0, "suppli": [3, 6], "support": [0, 1, 3, 5, 6, 8, 9, 10, 11, 12, 13, 14, 16, 18, 21, 23, 24, 25, 27], "sure": [1, 5], "surfer": [5, 15], "surpris": 3, "surround": 1, "svf": [0, 10], "swap": 14, "switch": [0, 21, 24], "symbiflow": [0, 11, 13], "symbiflow_pack": [11, 13], "symbiflow_plac": [11, 13], "symbiflow_rout": [11, 13], "symbiflow_synth": [11, 13], "symbiflow_write_bitstream": [11, 13], "symbiflow_write_fasm": [11, 13], "sync": [0, 3, 15, 16, 21, 24, 25, 27, 28], "sync_": 3, "syncfifo": [0, 17, 23], "syncfifobuff": [17, 23, 27], "synchron": [4, 6, 16, 18, 23, 24, 25, 27], "synchronis": 18, "synplifi": 12, "syntact": 1, "syntax": [0, 1, 3, 4, 15, 16, 21, 28], "syntaxerror": [3, 14], "syntaxwarn": 3, "synth_": 10, "synth_design": 13, "synth_design_opt": [0, 13], "synth_ice40": 12, "synth_intel_alm": 8, "synth_nexu": 10, "synth_opt": [8, 10, 12], "synthes": [3, 5, 6, 10, 12, 13, 15, 16], "synthesi": [3, 6, 12, 13], "synthesiz": [6, 16, 24], "system": [2, 3, 4, 16, 27, 28], "t": [0, 1, 3, 14, 21, 25, 26, 27, 28], "t1": 24, "t2": 24, "tab": 3, "tabl": 3, "tailor": 3, "take": [0, 1, 3, 6, 14, 15, 19, 28], "taken": [3, 15, 28], "talk": 3, "target": [3, 18, 21, 22, 28], "task": [3, 6, 26], "tcl": [10, 12, 13], "tclsh": 12, "tdp": 25, "techniqu": 15, "technolog": 1, "technologi": 3, "temperatur": 0, "templatedplatform": 0, "temporarili": 15, "ten": 3, "tend": 1, "term": [1, 3, 19, 24, 25], "termin": [1, 3], "terminologi": [24, 25], "test": [0, 1, 6, 14, 23, 24, 26, 27], "test_example_pipelin": 27, "test_output_seri": 24, "test_serial_receiv": 27, "test_serial_transmitt": 27, "test_value_neg": 27, "testbench": [0, 15, 16, 25], "testbench_bus_transact": 15, "testbench_cpu_execut": 15, "testbench_example2": 15, "testbench_example3": 15, "testbench_example4": 15, "testbench_example5": 15, "testbench_input": 27, "testbench_output": 27, "testbench_sample_output": 24, "testbench_write_data": 24, "testcod": 1, "text": [0, 1], "than": [0, 1, 3, 5, 6, 14, 15, 18, 21, 22, 24, 25, 28], "thei": [0, 1, 3, 14, 15, 16, 19, 21, 25, 26, 27, 28], "them": [0, 1, 3, 14, 15, 16, 21, 24, 28], "themselv": 3, "theori": 19, "therefor": [3, 19], "thi": [0, 1, 3, 4, 6, 7, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28], "thing": 1, "think": 1, "third": [1, 6, 14, 17, 21], "those": [0, 3, 28], "though": 28, "thread": 1, "three": [3, 14, 15, 17, 21, 27], "through": [1, 3, 6, 14, 15, 17, 21, 25, 26, 27, 28], "throughput": 19, "ti": [25, 27], "tick": [1, 3, 15, 16, 24, 27], "ticktrigg": 15, "tie": 27, "tightli": [1, 3, 28], "tim": [10, 12], "time": [0, 1, 3, 5, 6, 12, 14, 15, 16, 18, 21, 23, 24, 25, 27, 28], "timer": [3, 16], "tip": 1, "todo": 1, "togeth": [0, 1, 3, 27, 28], "toggl": [0, 15], "too": 3, "too_big": 3, "tool": [1, 3, 6, 8, 9, 10, 11, 12, 13, 26, 28], "toolchain": [1, 2, 3, 5, 8, 9, 10, 11, 12, 13, 16, 25], "toolkit": 2, "top": [0, 3, 15, 16, 24], "topic": 1, "toplevel": [15, 24], "topmost": 3, "trace": [6, 15], "traceback": [3, 21, 22, 28], "track": 28, "trail": 19, "transact": [3, 15], "transfer": [1, 6, 17, 18, 25, 28], "transfertyp": 28, "transform": [3, 21, 27], "transient": [3, 15], "transit": [3, 15, 27], "translat": [3, 28], "transmiss": [19, 24, 27], "transmit": [19, 24, 27], "transpar": [0, 3, 25], "transparent_for": 25, "transparentenum": 22, "travers": 3, "treat": [0, 3, 19, 27, 28], "treatment": 6, "tree": [1, 3, 6], "trelli": 10, "trigger": [0, 15, 25], "triggercombin": 15, "trim": 14, "tristat": 3, "trivial": 1, "true": [0, 3, 14, 15, 16, 18, 19, 20, 22, 24, 25, 27, 28], "truli": 1, "truncat": [3, 14], "truth": [1, 21, 28], "try": [3, 5, 15], "tupl": [0, 3, 15, 24, 25, 28], "turn": 24, "turnkei": 16, "tutori": [3, 4, 16], "twice": [3, 14, 28], "two": [3, 12, 14, 15, 19, 21, 24, 25, 27, 28], "txt": 13, "type": [0, 3, 14, 15, 19, 21, 22, 23, 24, 25, 26, 28], "typeerror": [3, 14, 15, 21, 22, 24, 28], "typic": [1, 6, 24], "typo": 3, "u": [1, 15, 25], "uarch": 9, "ubiquit": 28, "ucf": 13, "ultrascal": 0, "unaffect": 18, "unalign": 3, "unambigu": [3, 28], "unanim": 1, "unari": [3, 14], "unavail": [24, 25, 28], "unavoid": 1, "unchang": 28, "uncondition": 3, "undefin": [3, 15, 25], "under": [0, 3, 14, 21, 26, 28], "undergo": 1, "underli": [3, 14, 21, 22, 24], "underscor": [14, 21, 28], "understand": [1, 3, 15, 28], "understood": 1, "undesir": [3, 6], "undocu": 3, "undriven": 3, "unduli": 27, "unexpect": [1, 3, 6], "unflip": 28, "unfortun": [16, 24, 25, 26], "unidirect": [3, 27], "unidirection": 24, "unifi": [6, 27], "uniform": 27, "uniniti": [3, 25], "uninterpret": 3, "union": [14, 28], "unionlayout": 21, "uniqu": [1, 3, 26], "unit": [3, 27], "unless": [1, 3, 14, 15, 23, 24, 26, 28], "unlik": 3, "unlimit": 3, "unmodifi": 6, "unnecessari": 1, "unpredict": 3, "unreach": 3, "unread": 23, "unreleas": 4, "unreward": 26, "unsign": [0, 3, 14, 21, 22, 25, 26, 28], "unspecifi": [14, 21], "unstabl": 3, "unsuit": 14, "until": [0, 3, 5, 14, 15, 18, 21, 24, 25, 27, 29], "unusu": 28, "unwant": 3, "up": [1, 3, 15, 16, 21, 23, 28, 29], "up_count": 16, "upcount": 16, "updat": [0, 1, 3, 5, 15, 16, 19, 24, 25, 28], "upfront": [3, 14], "upgrad": 5, "upon": 3, "upper": 0, "uppercas": 0, "upward": 0, "url": 26, "us": [0, 1, 3, 5, 6, 8, 10, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29], "usabl": [0, 1, 6, 28], "usag": 13, "usb": 19, "use_stb": 3, "usefulli": 28, "user": [1, 3, 5, 14, 16, 21, 22, 26], "uservalu": 0, "usual": [0, 1, 3, 5, 6, 14, 15, 18, 21, 25, 26, 28], "utc": 1, "util": [0, 14, 17], "v": [3, 16], "val": [3, 16], "val0": 3, "val1": 3, "valid": [0, 14, 18, 19, 21, 23, 24, 26, 27, 28], "valu": [0, 1, 4, 15, 16, 18, 19, 21, 22, 24, 25, 26, 28], "valuabl": 1, "value_cast": 14, "value_lik": 14, "valuecast": [0, 3, 14, 15, 21], "valueerror": [14, 15, 21, 24], "valuelik": [0, 14, 15], "valueneg": 27, "var_nam": 1, "vari": [3, 15], "variabl": [0, 3, 8, 9, 10, 11, 12, 13, 14, 21, 28], "variant": 12, "variat": 3, "varieti": 14, "varint": 21, "vcd": [0, 15, 16, 27], "vcd_file": 15, "ve": 1, "vector": [0, 10], "vendor": [0, 3, 6, 8, 9, 10, 11, 12, 13, 16], "venv": 1, "verbatim": 1, "verbos": [8, 10, 12, 16], "veri": [3, 21, 28], "verif": [1, 6, 28, 29], "verifi": [15, 16, 28], "veril": 6, "verilog": [0, 3, 5, 6, 16, 26], "verilog_backend": 16, "versa": 28, "version": [1, 4, 5, 14, 17, 26], "vhdl": [3, 6], "via": [3, 5, 6, 14, 21, 24, 25, 26, 27, 28], "vice": 28, "video": 3, "video_": 3, "view": [0, 1, 3, 17], "view_class": 22, "viewer": [3, 5, 15], "violat": 3, "virtual": [1, 15, 25, 28], "visibl": [3, 15], "visit": 5, "vivado": 13, "vivado_opt": 13, "vivonomicon": 29, "voic": 1, "w": [3, 16, 25], "w_data": [23, 26, 28], "w_domain": 23, "w_en": [23, 26], "w_level": [0, 23], "w_rdy": 23, "w_stream": 27, "wa": [0, 3, 15, 19, 21, 28], "wai": [0, 1, 3, 14, 15, 21, 22, 24, 25, 26, 27, 28], "wait": [15, 27], "wake": 15, "wakeup": 15, "want": [1, 14, 19, 29], "warm": 18, "warn": [0, 1, 14, 17], "warrant": 1, "wasn": 14, "waveform": [3, 5, 15, 16, 24], "we": [1, 3, 24], "webassembli": 5, "webpag": 5, "weekli": 4, "well": [1, 3, 5, 6, 14, 15, 16, 21, 25, 27, 28], "were": [0, 1, 3, 15], "what": [1, 3, 25, 28], "when": [0, 1, 3, 6, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "whenev": [3, 14, 15, 19, 24, 27, 28], "where": [0, 1, 3, 14, 15, 18, 19, 21, 24, 25, 26, 27, 28], "wherea": [3, 28], "whether": [3, 6, 14, 15, 16, 19, 25, 27, 28], "which": [0, 1, 3, 6, 10, 12, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28], "whichev": 3, "while": [0, 1, 3, 6, 14, 15, 19, 21, 24, 25, 26, 27, 28], "whitespac": 3, "who": 1, "whole": [1, 3], "whose": [3, 14, 15, 17, 21, 25, 26, 28], "why": [1, 28], "wide": [3, 14, 19, 25, 27], "wider": 3, "widespread": 6, "width": [0, 14, 19, 21, 23, 24, 25, 26, 27, 28], "william": 19, "window": [0, 5, 6, 10], "wire": [0, 3, 15, 16, 17, 24, 25, 26, 27, 28], "within": [3, 14, 25, 26, 28], "without": [0, 1, 3, 5, 6, 14, 15, 17, 19, 21, 25, 27, 28], "won": 21, "word": [3, 14, 15, 19, 24, 27, 28], "word_select": [3, 14], "work": [0, 3, 4, 5, 6, 10, 14, 15, 16, 21, 27, 28], "workflow": [1, 5, 6, 16], "workstat": 29, "world": [24, 25], "would": [1, 3, 14, 15, 19, 21, 25, 26, 27, 28], "wr_port": 25, "wrap": [0, 1, 14, 15, 21, 22, 28], "wrapper": [22, 28], "writabl": 25, "write": [0, 1, 3, 7, 15, 16, 23, 24, 25, 28], "write_bitstream": 13, "write_port": 25, "write_vcd": [15, 16, 27], "writeport": 25, "written": [0, 3, 6, 16, 23, 25, 28, 29], "wrong": [1, 3, 24, 28], "x": [0, 3, 14, 19, 25, 28], "x86_64": 5, "x_coord": 3, "xc7frames2bit": 13, "xcf": 10, "xdc": [10, 11, 13], "xfrm": 16, "xilinx": [0, 4, 7], "xilinx7seriesplatform": 0, "xilinx_7seri": 0, "xilinx_spartan_3_6": 0, "xilinx_ultrascal": 0, "xilinxplatform": [0, 7, 13], "xilinxspartan3aplatform": 0, "xilinxspartan6platform": 0, "xilinxultrascaleplatform": 0, "xor": [3, 14, 19, 22], "xor_output": [19, 20], "xrai": [0, 13], "xst": 13, "xst_opt": 13, "y": [3, 25, 28], "ye": 3, "year": 1, "yellow": 1, "yet": [1, 18, 25], "yices2": 1, "yield": [15, 21, 28], "yosi": [0, 1, 5, 6, 8, 9, 10, 12, 13], "yosys_opt": [8, 10, 12], "you": [1, 3, 5, 14, 15, 18, 19, 25, 27], "your": [3, 4, 5, 14, 18, 27, 28], "yowasp": 5, "z": 3, "zero": [3, 14, 15, 21, 23, 25], "zoo": 19, "\u00b5": 15}, "titles": ["Changelog", "Contributing", "Amaranth project documentation", "Language guide", "Language & toolchain", "Installation", "Introduction", "Platform integration", "Altera", "Gowin", "Lattice", "Quicklogic", "SiliconBlue", "Xilinx", "Language reference", "Simulator", "Getting started", "Standard library", "Clock domain crossing", "Cyclic redundancy checks", "Algorithm catalog", "Data structures", "Enumerations", "First-in first-out queues", "Input/output buffers", "Memory arrays", "Interface metadata", "Data streams", "Interfaces and connections", "Tutorial"], "titleterms": {"0": 0, "1": 0, "2": 0, "3": 0, "4": 0, "5": 0, "6": 0, "A": 16, "If": 3, "In": 5, "The": [3, 6], "access": 21, "activ": 3, "adapt": 28, "algorithm": [19, 20], "altera": 8, "amaranth": [2, 5, 6], "annot": 26, "arithmet": 3, "arrai": [3, 25], "assert": 3, "assign": 3, "backward": 14, "base": 22, "bidirect": 24, "bind": 3, "bit": 3, "bitwis": 3, "blink": 16, "block": 3, "board": [5, 6], "browser": 5, "bu": 24, "buffer": [3, 24], "build": [1, 6], "case": 3, "cast": 3, "catalog": 20, "chang": [0, 1], "changelog": 0, "check": 19, "choic": 3, "circuit": 15, "class": [21, 22], "clock": [3, 18, 24], "code": 15, "codebas": 1, "combin": [3, 15], "common": 21, "comparison": 3, "compat": 14, "complet": 27, "compon": [25, 28], "compos": 21, "comput": [3, 19], "connect": 28, "constant": [3, 21, 28], "contribut": 1, "control": 3, "convers": 3, "convert": 16, "counter": 16, "crc": 19, "creat": 21, "cross": 18, "custom": [3, 21, 28], "cyclic": 19, "data": [3, 21, 27], "debug": 3, "defin": [21, 26], "definit": [5, 6], "describ": 3, "descript": 25, "develop": [5, 6], "discrimin": 21, "document": [0, 1, 2], "domain": [3, 18], "edit": 5, "elabor": 3, "elif": 3, "els": 3, "enumer": [3, 22], "environ": 1, "evalu": 3, "exampl": [19, 24, 25, 27], "extens": 3, "featur": 1, "file": 1, "first": [23, 25], "fix": 1, "flow": 3, "forward": [24, 28], "fpga": 6, "from": [0, 3], "fsm": 3, "get": 16, "gowin": 9, "guid": [1, 3], "i": 3, "identifi": 26, "implement": [0, 16], "import": 14, "inact": 3, "initi": 3, "input": [24, 28], "instal": 5, "instanc": 3, "integ": 3, "integr": [0, 6, 7], "interfac": [26, 28], "interior": 28, "introduct": [6, 19, 21, 24, 25, 26, 27, 28], "languag": [0, 3, 4, 6, 14], "late": 3, "latest": 5, "lattic": 10, "layout": 21, "led": [16, 24], "less": 3, "librari": [0, 6, 17], "locat": 14, "logic": 3, "make": 28, "match": 3, "meet": 1, "member": 3, "memori": [3, 25], "metaclass": 22, "metadata": [26, 28], "migrat": 0, "model": 21, "modifi": 3, "modul": 3, "motiv": [21, 28], "name": 3, "negat": 27, "new": 1, "o": 3, "onli": 25, "oper": 3, "order": 3, "out": [23, 25], "output": 24, "overview": [21, 28], "paramet": 19, "past": 0, "path": 28, "perform": 3, "pipelin": 27, "platform": [0, 7], "playground": 5, "port": [3, 24, 25], "predefin": 19, "prelud": 3, "prepar": 1, "prerequisit": 5, "print": 3, "problem": 1, "project": 2, "propos": 1, "queue": [23, 25], "quicklog": 11, "rang": 3, "read": 25, "receiv": 27, "reduct": 3, "redund": 19, "refer": [14, 15, 26, 27], "releas": [0, 5], "renam": 3, "replac": 15, "report": 1, "requir": 5, "reset": 3, "reusabl": 28, "rfc": 0, "rotat": 3, "rule": 27, "run": [1, 15], "schema": 26, "sequenc": 3, "serial": 27, "shape": [3, 14], "shift": 3, "signal": 3, "signatur": 28, "siliconblu": 12, "simul": [6, 15, 24, 25], "snapshot": 5, "sourc": 14, "standard": [0, 6, 17], "start": 16, "state": 3, "stream": 27, "structur": [3, 21], "style": 1, "submodul": 3, "switch": 3, "synchron": [3, 15], "syntax": 14, "system": [5, 6], "test": [15, 16], "testsuit": 1, "todo": [5, 7, 16, 29], "toolchain": [0, 4, 6], "transfer": 27, "transmitt": 27, "tutori": 29, "union": 21, "unreleas": 0, "valu": [3, 14, 27], "version": 0, "view": [21, 22], "weekli": 1, "width": 3, "work": 1, "xilinx": 13, "your": 1}}) \ No newline at end of file diff --git a/docs/amaranth/latest/simulator.html b/docs/amaranth/latest/simulator.html index 4c1c1b69..2e98baab 100644 --- a/docs/amaranth/latest/simulator.html +++ b/docs/amaranth/latest/simulator.html @@ -1,10 +1,10 @@ - + - Simulator — Amaranth language & toolchain 0.6.0.dev68 documentation + Simulator — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                                - 0.6.0.dev68 + 0.6.0.dev69
                                                @@ -118,10 +118,10 @@
                                                -

                                                Simulator

                                                +

                                                Simulator

                                                The amaranth.sim module, also known as the simulator, makes it possible to evaluate a design’s functionality in a virtual environment before it is implemented in hardware.

                                                -

                                                Simulating circuits

                                                +

                                                Simulating circuits

                                                The following examples simulate one of the two designs below: synchronous counter running in the sync clock domain, and combinational adder. They assume familiarity with the language guide.

                                                from amaranth.lib import wiring
                                                 from amaranth.lib.wiring import In, Out
                                                @@ -148,7 +148,7 @@ 

                                                Simulating circuits -

                                                Running a simulation

                                                +

                                                Running a simulation

                                                Simulating a design always requires the three basic steps: constructing the DUT, constructing a Simulator for it, and running the simulation with the Simulator.run() or Simulator.run_until() method:

                                                from amaranth.sim import Simulator, Period
                                                 
                                                @@ -183,7 +183,7 @@ 

                                                Running a simulation

                                                -

                                                Testing synchronous circuits

                                                +

                                                Testing synchronous circuits

                                                To verify that the DUT works as intended during a simulation, known values are provided as the inputs, and the outputs are compared with the expected results.

                                                This is done by adding a different type of stimulus to the simulator, a testbench: an async Python function that runs concurrently with the DUT and can manipulate the signals used in the simulation. A testbench is added using the Simulator.add_testbench() method, and receives a SimulatorContext object through which it can interact with the simulator: inspect the value of signals using the ctx.get() method, change the value of signals using the ctx.set() method, or wait for an active edge of a clock domain using the ctx.tick() method.

                                                The following example simulates a counter and verifies that it can be stopped using its en input:

                                                @@ -207,7 +207,7 @@

                                                Testing synchronous circuitsctx.tick() method waits until after the circuit has reacted to the clock edge, the change to the en input affects the behavior of the circuit on the next clock cycle after the change:

                                                {'head': {'tock': 0}, 'signal': [{'name': 'clk', 'wave': 'lp..............'}, {'name': 'rst', 'wave': 'l...............'}, {'name': 'en', 'wave': 'h....0....1.....'}, {'name': 'count', 'wave': '======.....=====', 'data': ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10']}], 'config': {'skin': 'default'}}

                                                -

                                                Testing combinational circuits

                                                +

                                                Testing combinational circuits

                                                A testbench that tests a combinational circuit advances simulation time using the ctx.delay() method instead of the ctx.tick() method, since the simulation does not contain a clock in this case. The Simulator.run() method stops the simulation and returns once all testbenches finish executing.

                                                The following example simulates an adder:

                                                dut = Adder()
                                                @@ -235,7 +235,7 @@ 

                                                Testing combinational circuits

                                                -

                                                Replacing circuits with code

                                                +

                                                Replacing circuits with code

                                                Note

                                                This section describes an advanced technique that is not commonly used. If you are first learning how to use the simulator, you can skip it.

                                                @@ -248,7 +248,7 @@

                                                Replacing circuits with codeSignals.

                                                -

                                                Replacing synchronous circuits

                                                +

                                                Replacing synchronous circuits

                                                Processes cannot inspect values of signals using the ctx.get() method. Instead, values of signals in a synchronous process are sampled at each active edge of the clock domain (or, for domains with asynchronous reset, at the assertion of the reset signal) using the ctx.tick() method.

                                                The following code replaces the Counter elaboratable with the equivalent Python code in a process, and uses a testbench to verify its correct operation:

                                                m = Module()
                                                @@ -284,7 +284,7 @@ 

                                                Replacing synchronous circuitsSimulator.write_vcd() method only captures values of signals that appear in the circuit provided to the simulator when it is created. The en and count signals do not, and are added explicitly using the traces argument so that they will appear in the VCD file.

                                                -

                                                Replacing combinational circuits

                                                +

                                                Replacing combinational circuits

                                                Values of signals in a combinational process are sampled anytime they change using the ctx.changed() method.

                                                The following code replaces the Adder elaboratable with the equivalent Python code in a process, and uses a testbench to verify its correct operation:

                                                m = Module()
                                                @@ -319,10 +319,10 @@ 

                                                Replacing combinational circuits -

                                                Reference

                                                +

                                                Reference

                                                -class amaranth.sim.Simulator(toplevel)
                                                +class amaranth.sim.Simulator(toplevel)

                                                Simulator for Amaranth designs.

                                                The simulator accepts a top-level design (an elaboratable), processes that replace circuits with behavioral code, clocks that drive clock domains, and @@ -367,7 +367,7 @@

                                                Reference
                                                -add_clock(period, *, phase=None, domain='sync', if_exists=False)
                                                +add_clock(period, *, phase=None, domain='sync', if_exists=False)

                                                Add a clock to the simulation.

                                                Adds a stimulus that toggles the clock signal of domain at a 50% duty cycle.

                                                The driven clock signal will toggle every half-period seconds starting at phase @@ -391,7 +391,7 @@

                                                Reference
                                                -add_testbench(constructor, *, background=False)
                                                +add_testbench(constructor, *, background=False)

                                                Add a testbench to the simulation.

                                                Adds a testbench that runs concurrently with the toplevel elaboratable and is able to manipulate its inputs, outputs, and state.

                                                @@ -425,7 +425,7 @@

                                                Reference
                                                -add_process(process)
                                                +add_process(process)

                                                Add a process to the simulation.

                                                Adds a process that is evaluated as a part of the toplevel elaboratable and is able to replace circuits with Python code.

                                                @@ -466,7 +466,7 @@

                                                Reference
                                                -run()
                                                +run()

                                                Run the simulation indefinitely.

                                                This method advances the simulation while any critical testbenches or processes continue executing. It is equivalent to:

                                                @@ -478,7 +478,7 @@

                                                Reference
                                                -run_until(deadline)
                                                +run_until(deadline)

                                                Run the simulation until a specific point in time.

                                                This method advances the simulation until the simulation time reaches deadline, without regard for whether there are critical testbenches or processes executing.

                                                @@ -486,7 +486,7 @@

                                                Reference
                                                -advance()
                                                +advance()

                                                Advance the simulation.

                                                This method advances the simulation by one time step. After this method completes, all of the events scheduled for the current point in time will have taken effect, and the current @@ -500,7 +500,7 @@

                                                Reference
                                                -write_vcd(vcd_file, gtkw_file=None, *, traces=())
                                                +write_vcd(vcd_file, gtkw_file=None, *, traces=())

                                                Capture waveforms to a file.

                                                This context manager captures waveforms for each signal and memory that is referenced from toplevel, as well as any additional signals or memories specified in traces, @@ -531,7 +531,7 @@

                                                Reference
                                                -reset()
                                                +reset()

                                                Reset the simulation.

                                                This method reverts the simulation to its initial state:

                                                  @@ -545,7 +545,7 @@

                                                  Reference
                                                  -class amaranth.sim.SimulatorContext(...)
                                                  +class amaranth.sim.SimulatorContext(...)

                                                  Simulator context.

                                                  Simulator processes and testbenches are async Python functions that interact with the simulation using the only argument they receive: the context. Using a context, it is @@ -562,7 +562,7 @@

                                                  Reference
                                                  -get(expr)
                                                  +get(expr)

                                                  Sample the value of an expression.

                                                  The behavior of this method depends on the type of expr:

                                                    @@ -582,7 +582,7 @@

                                                    Reference
                                                    -set(expr, value)
                                                    +set(expr, value)

                                                    Update the value of an expression.

                                                    The behavior of this method depends on the type of expr:

                                                      @@ -600,7 +600,7 @@

                                                      Reference
                                                      -critical()
                                                      +critical()

                                                      Context manager that temporarily makes the caller critical.

                                                      Testbenches and processes may be background or critical, where critical ones prevent Simulator.run() from finishing. Processes are always created background, while @@ -629,7 +629,7 @@

                                                      Reference
                                                      -tick(domain='sync', *, context=None)
                                                      +tick(domain='sync', *, context=None)

                                                      Wait until an active clock edge or an asynchronous reset occurs.

                                                      This method returns a TickTrigger object that, when awaited, pauses the execution of the calling process or testbench until the active edge of the clock, or the asynchronous @@ -657,7 +657,7 @@

                                                      Reference
                                                      -delay(interval)
                                                      +delay(interval)

                                                      Wait until a time interval has elapsed.

                                                      This method returns a TriggerCombination object that, when awaited, pauses the execution of the calling process or testbench by interval seconds. The returned @@ -683,7 +683,7 @@

                                                      Reference
                                                      -changed(*signals)
                                                      +changed(*signals)

                                                      Asynchronously wait until one of the signals change.

                                                      This method returns a TriggerCombination object that, when awaited, pauses the execution of the calling process or testbench until any of the signals change. @@ -708,7 +708,7 @@

                                                      Reference
                                                      -edge(signal, polarity)
                                                      +edge(signal, polarity)

                                                      Asynchronously wait until a low-to-high or high-to-low transition of a signal occurs.

                                                      This method returns a TriggerCombination object that, when awaited, pauses the execution of the calling process or testbench until the value of signal @@ -737,21 +737,21 @@

                                                      Reference
                                                      -posedge(signal)
                                                      +posedge(signal)

                                                      Asynchronously wait until a signal is asserted.

                                                      Equivalent to edge(signal, 1).

                                                -negedge(signal)
                                                +negedge(signal)

                                                Asynchronously wait until a signal is deasserted.

                                                Equivalent to edge(signal, 0).

                                                -elapsed_time()
                                                +elapsed_time()

                                                Return the currently elapsed simulation time.

                                                @@ -759,20 +759,20 @@

                                                Reference
                                                -exception amaranth.sim.BrokenTrigger
                                                +exception amaranth.sim.BrokenTrigger

                                                Exception raised when a trigger that is repeatedly awaited using an async for loop has a matching event occur while the body of the async for loop is still executing.

                                              -exception amaranth.sim.DomainReset
                                              +exception amaranth.sim.DomainReset

                                              Exception raised when a tick trigger is repeatedly awaited, and its domain has been reset.

                                              -
                                              +
                                              -class amaranth.sim.TickTrigger(...)
                                              +class amaranth.sim.TickTrigger(...)

                                              A trigger that wakes up the caller when the active edge of a clock domain occurs or the domain is asynchronously reset.

                                              A TickTrigger is an immutable object that stores a reference to a clock domain and @@ -822,7 +822,7 @@

                                              Reference
                                              -sample(*exprs)
                                              +sample(*exprs)

                                              Sample expressions when this trigger is activated.

                                              This method returns a new TickTrigger object. When awaited, this object returns, in addition to the values that would be otherwise returned by await trigger, @@ -860,7 +860,7 @@

                                              Reference
                                              -async until(condition)
                                              +async until(condition)

                                              Repeat this trigger until a condition is met.

                                              This method awaits this trigger at least once, and returns a tuple of the values that are sample()d when condition evaluates to a non-zero value. Values @@ -889,7 +889,7 @@

                                              Reference
                                              -async repeat(count)
                                              +async repeat(count)

                                              Repeat this trigger a specific number of times.

                                              This method awaits this trigger at least once, and returns a tuple of the values that are sample()d during the last repeat. Values sampled during previous repeats @@ -918,7 +918,7 @@

                                              Reference
                                              -class amaranth.sim.TriggerCombination(...)
                                              +class amaranth.sim.TriggerCombination(...)

                                              A list of triggers, the activation of any of which will wake up the caller.

                                              A TriggerCombination is an immutable object that stores a list of triggers and expressions to sample. The trigger combination wakes up the caller when any of these triggers @@ -960,7 +960,7 @@

                                              Reference
                                              -sample(*exprs)
                                              +sample(*exprs)

                                              Sample signals when a trigger from this combination is activated.

                                              This method returns a new TriggerCombination object. When awaited, this object returns, in addition to the values that would be returned by await trigger, the values @@ -989,7 +989,7 @@

                                              Reference
                                              -delay(interval)
                                              +delay(interval)

                                              Add a delay trigger to the list of triggers.

                                              This method returns a new TriggerCombination object. When awaited, this object also waits for the same trigger as SimulatorContext.delay(), and returns, @@ -999,7 +999,7 @@

                                              Reference
                                              -changed(*signals)
                                              +changed(*signals)

                                              Add a signal change trigger to the list of triggers.

                                              This method returns a new TriggerCombination object. When awaited, this object also waits for the same trigger as SimulatorContext.changed(), and returns, @@ -1009,7 +1009,7 @@

                                              Reference
                                              -edge(signal, polarity)
                                              +edge(signal, polarity)

                                              Add a low-to-high or high-to-low transition trigger to the list of triggers.

                                              This method returns a new TriggerCombination object. When awaited, this object also waits for the same trigger as SimulatorContext.edge(), and returns, @@ -1019,14 +1019,14 @@

                                              Reference
                                              -posedge(signal)
                                              +posedge(signal)

                                              Add a low-to-high transition trigger to the list of triggers.

                                              Equivalent to edge(signal, 1).

                                              -negedge(signal)
                                              +negedge(signal)

                                              Add a high-to-low transition trigger to the list of triggers.

                                              Equivalent to edge(signal, 0).

                                              diff --git a/docs/amaranth/latest/start.html b/docs/amaranth/latest/start.html index 8321c82a..eff998a7 100644 --- a/docs/amaranth/latest/start.html +++ b/docs/amaranth/latest/start.html @@ -1,10 +1,10 @@ - + - Getting started — Amaranth language & toolchain 0.6.0.dev68 documentation + Getting started — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                              - 0.6.0.dev68 + 0.6.0.dev69
                                              @@ -105,16 +105,16 @@
                                              -

                                              Getting started

                                              +

                                              Getting started

                                              This section demonstrates the basic Amaranth workflow to provide a cursory overview of the language and the toolchain. See the tutorial for a step-by-step introduction to the language, and the language guide for a detailed explanation of every language construct.

                                              -

                                              A counter

                                              +

                                              A counter

                                              As a first example, consider a counter with a fixed limit, enable, and overflow. The code for this example is shown below. Download and run it:

                                              $ python3 up_counter.py
                                               
                                              -

                                              Implementing a counter

                                              +

                                              Implementing a counter

                                              A 16-bit up counter with enable input, overflow output, and a limit fixed at design time can be implemented in Amaranth as follows:

                                              -

                                              Testing a counter

                                              +

                                              Testing a counter

                                              To verify its functionality, the counter can be simulated for a small amount of time, with a test bench driving it and checking a few simple conditions:

                                              46from amaranth.sim import Simulator, Period
                                               47
                                              @@ -203,7 +203,7 @@ 

                                              Testing a counterSignal as well as the clock of the sync domain:

                                              {'signal': [{'name': 'clk', 'wave': 'p..........'}, {'name': 'count', 'wave': '===========', 'data': ['17', '18', '19', '20', '21', '22', '23', '24', '25', '0', '1']}, {'name': 'en', 'wave': '1..........'}, {'name': 'ovf', 'wave': '0.......10.'}], 'head': {'tock': 48}, 'config': {'skin': 'default'}}

                                              -

                                              Converting a counter

                                              +

                                              Converting a counter

                                              Although some Amaranth workflows do not include Verilog at all, it is still the de facto standard for HDL interoperability. Any Amaranth design can be converted to synthesizable Verilog using the corresponding backend:

                                              76from amaranth.back import verilog
                                               77
                                              @@ -274,7 +274,7 @@ 

                                              Converting a counter

                                              -

                                              A blinking LED

                                              +

                                              A blinking LED

                                              Although Amaranth works well as a standalone HDL, it also includes a build system that integrates with FPGA toolchains, and many board definition files for common developer boards that include pinouts and programming adapter invocations. The following code will blink a LED with a frequency of 1 Hz on any board that has a LED and an oscillator:

                                               1from amaranth import *
                                                2
                                              diff --git a/docs/amaranth/latest/stdlib.html b/docs/amaranth/latest/stdlib.html
                                              index 60c1742b..cb6e1012 100644
                                              --- a/docs/amaranth/latest/stdlib.html
                                              +++ b/docs/amaranth/latest/stdlib.html
                                              @@ -1,10 +1,10 @@
                                               
                                              -
                                              +
                                               
                                                 
                                               
                                                 
                                              -  Standard library — Amaranth language & toolchain 0.6.0.dev68 documentation
                                              +  Standard library — Amaranth language & toolchain 0.6.0.dev69 documentation
                                                     
                                                     
                                                     
                                              @@ -17,9 +17,9 @@
                                                 
                                                       
                                                       
                                              -        
                                              -        
                                              -        
                                              +        
                                              +        
                                              +        
                                                       
                                                   
                                                   
                                              @@ -41,7 +41,7 @@
                                                             
                                                         
                                                             
                                              - 0.6.0.dev68 + 0.6.0.dev69
                                              @@ -108,7 +108,7 @@
                                              -

                                              Standard library

                                              +

                                              Standard library

                                              The amaranth.lib module, also known as the standard library, provides modules that falls into one of the three categories:

                                              1. Modules that will used by essentially all idiomatic Amaranth code, or which are necessary for interoperability. This includes amaranth.lib.enum (enumerations), amaranth.lib.data (data structures), amaranth.lib.wiring (interfaces and components), amaranth.lib.meta (interface metadata), and amaranth.lib.stream (data streams).

                                              2. diff --git a/docs/amaranth/latest/stdlib/cdc.html b/docs/amaranth/latest/stdlib/cdc.html index a7bf2ad6..c238e529 100644 --- a/docs/amaranth/latest/stdlib/cdc.html +++ b/docs/amaranth/latest/stdlib/cdc.html @@ -1,10 +1,10 @@ - + - Clock domain crossing — Amaranth language & toolchain 0.6.0.dev68 documentation + Clock domain crossing — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                                - 0.6.0.dev68 + 0.6.0.dev69
                                                @@ -115,11 +115,11 @@
                                                -

                                                Clock domain crossing

                                                +

                                                Clock domain crossing

                                                The amaranth.lib.cdc module provides building blocks for transferring data between clock domains.

                                                -class amaranth.lib.cdc.FFSynchronizer
                                                +class amaranth.lib.cdc.FFSynchronizer

                                                Resynchronise a signal to a different clock domain.

                                                Consists of a chain of flip-flops. Eliminates metastabilities at the output, but provides no other guarantee as to the safe domain-crossing of a signal.

                                                @@ -163,7 +163,7 @@
                                                -class amaranth.lib.cdc.AsyncFFSynchronizer
                                                +class amaranth.lib.cdc.AsyncFFSynchronizer

                                                Synchronize deassertion of an asynchronous signal.

                                                The signal driven by the AsyncFFSynchronizer is asserted asynchronously and deasserted synchronously, eliminating metastability during deassertion.

                                                @@ -189,7 +189,7 @@
                                                -class amaranth.lib.cdc.ResetSynchronizer
                                                +class amaranth.lib.cdc.ResetSynchronizer

                                                Synchronize deassertion of a clock domain reset.

                                                The reset of the clock domain driven by the ResetSynchronizer is asserted asynchronously and deasserted synchronously, eliminating metastability during deassertion.

                                                @@ -217,7 +217,7 @@
                                                -class amaranth.lib.cdc.PulseSynchronizer
                                                +class amaranth.lib.cdc.PulseSynchronizer

                                                A one-clock pulse on the input produces a one-clock pulse on the output.

                                                If the output clock is faster than the input clock, then the input may be safely asserted at 100% duty cycle. Otherwise, if the clock ratio is n:1, the input may be asserted at most diff --git a/docs/amaranth/latest/stdlib/crc.html b/docs/amaranth/latest/stdlib/crc.html index 853ee54f..57d8e348 100644 --- a/docs/amaranth/latest/stdlib/crc.html +++ b/docs/amaranth/latest/stdlib/crc.html @@ -1,10 +1,10 @@ - + - Cyclic redundancy checks — Amaranth language & toolchain 0.6.0.dev68 documentation + Cyclic redundancy checks — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@

                                                - 0.6.0.dev68 + 0.6.0.dev69
                                                @@ -116,11 +116,11 @@
                                                -

                                                Cyclic redundancy checks

                                                +

                                                Cyclic redundancy checks

                                                The amaranth.lib.crc module provides facilities for computing cyclic redundancy checks (CRCs) in software and in hardware.

                                                -

                                                Introduction

                                                +

                                                Introduction

                                                The essentials of a CRC computation are specified with an Algorithm object, which defines CRC width, polynomial, initial value, input/output reflection, and output XOR. Many commonly used CRC algorithms are available in the catalog module, while most other @@ -130,7 +130,7 @@

                                                IntroductionParameters.create() creates a Processor that computes a CRC in hardware.

                                                -

                                                Examples

                                                +

                                                Examples

                                                from amaranth.lib.crc import Algorithm
                                                 from amaranth.lib.crc.catalog import CRC16_CCITT, CRC16_USB
                                                 
                                                @@ -152,10 +152,10 @@ 

                                                Examples -

                                                Algorithms and parameters

                                                +

                                                Algorithms and parameters

                                                -class amaranth.lib.crc.Algorithm(*, crc_width, polynomial, initial_crc, reflect_input, reflect_output, xor_output)
                                                +class amaranth.lib.crc.Algorithm(*, crc_width, polynomial, initial_crc, reflect_input, reflect_output, xor_output)

                                                Essential parameters for cyclic redundancy check computation.

                                                The parameter set is based on the Williams model from “A Painless Guide to CRC Error Detection Algorithms”.

                                                @@ -198,7 +198,7 @@

                                                Algorithms and parameters
                                                -__call__(data_width=8)
                                                +__call__(data_width=8)

                                                Combine these essential parameters with a data word width to form complete parameters.

                                                Returns:
                                                @@ -214,7 +214,7 @@

                                                Algorithms and parameters
                                                -class amaranth.lib.crc.Parameters(algorithm, data_width=8)
                                                +class amaranth.lib.crc.Parameters(algorithm, data_width=8)

                                                Complete parameters for cyclic redundancy check computation.

                                                Contains the essential Algorithm parameters, plus the data word width.

                                                A Parameters object can be used to directly compute CRCs using @@ -231,13 +231,13 @@

                                                Algorithms and parameters
                                                -residue()
                                                +residue()

                                                Obtain the residual value left in the CRC register after processing a valid trailing CRC.

                                                -compute(data)
                                                +compute(data)

                                                Compute the CRC of all data words in data.

                                                Parameters:
                                                @@ -248,7 +248,7 @@

                                                Algorithms and parameters
                                                -create()
                                                +create()

                                                Create a hardware CRC generator with these parameters.

                                                Returns:
                                                @@ -264,10 +264,10 @@

                                                Algorithms and parameters -

                                                CRC computation

                                                +

                                                CRC computation

                                                -class amaranth.lib.crc.Processor
                                                +class amaranth.lib.crc.Processor

                                                Hardware cyclic redundancy check generator.

                                                This module generates CRCs from an input data stream, which can be used to validate an existing CRC or generate a new CRC. It is configured by the Parameters class, which can handle @@ -305,7 +305,7 @@

                                                CRC computation -

                                                Predefined algorithms

                                                +

                                                Predefined algorithms

                                                The following predefined CRC algorithms are available:

                                                  diff --git a/docs/amaranth/latest/stdlib/crc/catalog.html b/docs/amaranth/latest/stdlib/crc/catalog.html index 2d61283c..da462297 100644 --- a/docs/amaranth/latest/stdlib/crc/catalog.html +++ b/docs/amaranth/latest/stdlib/crc/catalog.html @@ -1,10 +1,10 @@ - + - Algorithm catalog — Amaranth language & toolchain 0.6.0.dev68 documentation + Algorithm catalog — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                                  - 0.6.0.dev68 + 0.6.0.dev69
                                                  @@ -117,793 +117,793 @@
                                                  -

                                                  Algorithm catalog

                                                  +

                                                  Algorithm catalog

                                                  This module contains a catalog of predefined CRC algorithms, retrieved from the reveng catalogue on 2023-05-25.

                                                  See the documentation for the crc module for examples.

                                                  -amaranth.lib.crc.catalog.CRC3_GSM = Algorithm(crc_width=3, polynomial=0x3, initial_crc=0x0, reflect_input=False, reflect_output=False, xor_output=0x7)
                                                  +amaranth.lib.crc.catalog.CRC3_GSM = Algorithm(crc_width=3, polynomial=0x3, initial_crc=0x0, reflect_input=False, reflect_output=False, xor_output=0x7)
                                                  -amaranth.lib.crc.catalog.CRC3_ROHC = Algorithm(crc_width=3, polynomial=0x3, initial_crc=0x7, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  +amaranth.lib.crc.catalog.CRC3_ROHC = Algorithm(crc_width=3, polynomial=0x3, initial_crc=0x7, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  -amaranth.lib.crc.catalog.CRC4_G_704 = Algorithm(crc_width=4, polynomial=0x3, initial_crc=0x0, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  +amaranth.lib.crc.catalog.CRC4_G_704 = Algorithm(crc_width=4, polynomial=0x3, initial_crc=0x0, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  -amaranth.lib.crc.catalog.CRC4_ITU = Algorithm(crc_width=4, polynomial=0x3, initial_crc=0x0, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  +amaranth.lib.crc.catalog.CRC4_ITU = Algorithm(crc_width=4, polynomial=0x3, initial_crc=0x0, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  -amaranth.lib.crc.catalog.CRC4_INTERLAKEN = Algorithm(crc_width=4, polynomial=0x3, initial_crc=0xf, reflect_input=False, reflect_output=False, xor_output=0xf)
                                                  +amaranth.lib.crc.catalog.CRC4_INTERLAKEN = Algorithm(crc_width=4, polynomial=0x3, initial_crc=0xf, reflect_input=False, reflect_output=False, xor_output=0xf)
                                                  -amaranth.lib.crc.catalog.CRC5_EPC_C1G2 = Algorithm(crc_width=5, polynomial=0x9, initial_crc=0x9, reflect_input=False, reflect_output=False, xor_output=0x0)
                                                  +amaranth.lib.crc.catalog.CRC5_EPC_C1G2 = Algorithm(crc_width=5, polynomial=0x9, initial_crc=0x9, reflect_input=False, reflect_output=False, xor_output=0x0)
                                                  -amaranth.lib.crc.catalog.CRC5_EPC = Algorithm(crc_width=5, polynomial=0x9, initial_crc=0x9, reflect_input=False, reflect_output=False, xor_output=0x0)
                                                  +amaranth.lib.crc.catalog.CRC5_EPC = Algorithm(crc_width=5, polynomial=0x9, initial_crc=0x9, reflect_input=False, reflect_output=False, xor_output=0x0)
                                                  -amaranth.lib.crc.catalog.CRC5_G_704 = Algorithm(crc_width=5, polynomial=0x15, initial_crc=0x0, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  +amaranth.lib.crc.catalog.CRC5_G_704 = Algorithm(crc_width=5, polynomial=0x15, initial_crc=0x0, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  -amaranth.lib.crc.catalog.CRC5_ITU = Algorithm(crc_width=5, polynomial=0x15, initial_crc=0x0, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  +amaranth.lib.crc.catalog.CRC5_ITU = Algorithm(crc_width=5, polynomial=0x15, initial_crc=0x0, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  -amaranth.lib.crc.catalog.CRC5_USB = Algorithm(crc_width=5, polynomial=0x5, initial_crc=0x1f, reflect_input=True, reflect_output=True, xor_output=0x1f)
                                                  +amaranth.lib.crc.catalog.CRC5_USB = Algorithm(crc_width=5, polynomial=0x5, initial_crc=0x1f, reflect_input=True, reflect_output=True, xor_output=0x1f)
                                                  -amaranth.lib.crc.catalog.CRC6_CDMA2000_A = Algorithm(crc_width=6, polynomial=0x27, initial_crc=0x3f, reflect_input=False, reflect_output=False, xor_output=0x0)
                                                  +amaranth.lib.crc.catalog.CRC6_CDMA2000_A = Algorithm(crc_width=6, polynomial=0x27, initial_crc=0x3f, reflect_input=False, reflect_output=False, xor_output=0x0)
                                                  -amaranth.lib.crc.catalog.CRC6_CDMA2000_B = Algorithm(crc_width=6, polynomial=0x7, initial_crc=0x3f, reflect_input=False, reflect_output=False, xor_output=0x0)
                                                  +amaranth.lib.crc.catalog.CRC6_CDMA2000_B = Algorithm(crc_width=6, polynomial=0x7, initial_crc=0x3f, reflect_input=False, reflect_output=False, xor_output=0x0)
                                                  -amaranth.lib.crc.catalog.CRC6_DARC = Algorithm(crc_width=6, polynomial=0x19, initial_crc=0x0, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  +amaranth.lib.crc.catalog.CRC6_DARC = Algorithm(crc_width=6, polynomial=0x19, initial_crc=0x0, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  -amaranth.lib.crc.catalog.CRC6_G_704 = Algorithm(crc_width=6, polynomial=0x3, initial_crc=0x0, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  +amaranth.lib.crc.catalog.CRC6_G_704 = Algorithm(crc_width=6, polynomial=0x3, initial_crc=0x0, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  -amaranth.lib.crc.catalog.CRC6_ITU = Algorithm(crc_width=6, polynomial=0x3, initial_crc=0x0, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  +amaranth.lib.crc.catalog.CRC6_ITU = Algorithm(crc_width=6, polynomial=0x3, initial_crc=0x0, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  -amaranth.lib.crc.catalog.CRC6_GSM = Algorithm(crc_width=6, polynomial=0x2f, initial_crc=0x0, reflect_input=False, reflect_output=False, xor_output=0x3f)
                                                  +amaranth.lib.crc.catalog.CRC6_GSM = Algorithm(crc_width=6, polynomial=0x2f, initial_crc=0x0, reflect_input=False, reflect_output=False, xor_output=0x3f)
                                                  -amaranth.lib.crc.catalog.CRC7_MMC = Algorithm(crc_width=7, polynomial=0x9, initial_crc=0x0, reflect_input=False, reflect_output=False, xor_output=0x0)
                                                  +amaranth.lib.crc.catalog.CRC7_MMC = Algorithm(crc_width=7, polynomial=0x9, initial_crc=0x0, reflect_input=False, reflect_output=False, xor_output=0x0)
                                                  -amaranth.lib.crc.catalog.CRC7_ROHC = Algorithm(crc_width=7, polynomial=0x4f, initial_crc=0x7f, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  +amaranth.lib.crc.catalog.CRC7_ROHC = Algorithm(crc_width=7, polynomial=0x4f, initial_crc=0x7f, reflect_input=True, reflect_output=True, xor_output=0x0)
                                                  -amaranth.lib.crc.catalog.CRC7_UMTS = Algorithm(crc_width=7, polynomial=0x45, initial_crc=0x0, reflect_input=False, reflect_output=False, xor_output=0x0)
                                                  +amaranth.lib.crc.catalog.CRC7_UMTS = Algorithm(crc_width=7, polynomial=0x45, initial_crc=0x0, reflect_input=False, reflect_output=False, xor_output=0x0)
                                                  -amaranth.lib.crc.catalog.CRC8_AUTOSAR = Algorithm(crc_width=8, polynomial=0x2f, initial_crc=0xff, reflect_input=False, reflect_output=False, xor_output=0xff)
                                                  +amaranth.lib.crc.catalog.CRC8_AUTOSAR = Algorithm(crc_width=8, polynomial=0x2f, initial_crc=0xff, reflect_input=False, reflect_output=False, xor_output=0xff)
                                                  -amaranth.lib.crc.catalog.CRC8_BLUETOOTH = Algorithm(crc_width=8, polynomial=0xa7, initial_crc=0x00, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_BLUETOOTH = Algorithm(crc_width=8, polynomial=0xa7, initial_crc=0x00, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_CDMA2000 = Algorithm(crc_width=8, polynomial=0x9b, initial_crc=0xff, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_CDMA2000 = Algorithm(crc_width=8, polynomial=0x9b, initial_crc=0xff, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_DARC = Algorithm(crc_width=8, polynomial=0x39, initial_crc=0x00, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_DARC = Algorithm(crc_width=8, polynomial=0x39, initial_crc=0x00, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_DVB_S2 = Algorithm(crc_width=8, polynomial=0xd5, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_DVB_S2 = Algorithm(crc_width=8, polynomial=0xd5, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_GSM_A = Algorithm(crc_width=8, polynomial=0x1d, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_GSM_A = Algorithm(crc_width=8, polynomial=0x1d, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_GSM_B = Algorithm(crc_width=8, polynomial=0x49, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0xff)
                                                  +amaranth.lib.crc.catalog.CRC8_GSM_B = Algorithm(crc_width=8, polynomial=0x49, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0xff)
                                                  -amaranth.lib.crc.catalog.CRC8_HITAG = Algorithm(crc_width=8, polynomial=0x1d, initial_crc=0xff, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_HITAG = Algorithm(crc_width=8, polynomial=0x1d, initial_crc=0xff, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_I_432_1 = Algorithm(crc_width=8, polynomial=0x07, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x55)
                                                  +amaranth.lib.crc.catalog.CRC8_I_432_1 = Algorithm(crc_width=8, polynomial=0x07, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x55)
                                                  -amaranth.lib.crc.catalog.CRC8_ITU = Algorithm(crc_width=8, polynomial=0x07, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x55)
                                                  +amaranth.lib.crc.catalog.CRC8_ITU = Algorithm(crc_width=8, polynomial=0x07, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x55)
                                                  -amaranth.lib.crc.catalog.CRC8_I_CODE = Algorithm(crc_width=8, polynomial=0x1d, initial_crc=0xfd, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_I_CODE = Algorithm(crc_width=8, polynomial=0x1d, initial_crc=0xfd, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_LTE = Algorithm(crc_width=8, polynomial=0x9b, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_LTE = Algorithm(crc_width=8, polynomial=0x9b, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_MAXIM_DOW = Algorithm(crc_width=8, polynomial=0x31, initial_crc=0x00, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_MAXIM_DOW = Algorithm(crc_width=8, polynomial=0x31, initial_crc=0x00, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_MAXIM = Algorithm(crc_width=8, polynomial=0x31, initial_crc=0x00, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_MAXIM = Algorithm(crc_width=8, polynomial=0x31, initial_crc=0x00, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_MIFARE_MAD = Algorithm(crc_width=8, polynomial=0x1d, initial_crc=0xc7, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_MIFARE_MAD = Algorithm(crc_width=8, polynomial=0x1d, initial_crc=0xc7, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_NRSC_5 = Algorithm(crc_width=8, polynomial=0x31, initial_crc=0xff, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_NRSC_5 = Algorithm(crc_width=8, polynomial=0x31, initial_crc=0xff, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_OPENSAFETY = Algorithm(crc_width=8, polynomial=0x2f, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_OPENSAFETY = Algorithm(crc_width=8, polynomial=0x2f, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_ROHC = Algorithm(crc_width=8, polynomial=0x07, initial_crc=0xff, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_ROHC = Algorithm(crc_width=8, polynomial=0x07, initial_crc=0xff, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_SAE_J1850 = Algorithm(crc_width=8, polynomial=0x1d, initial_crc=0xff, reflect_input=False, reflect_output=False, xor_output=0xff)
                                                  +amaranth.lib.crc.catalog.CRC8_SAE_J1850 = Algorithm(crc_width=8, polynomial=0x1d, initial_crc=0xff, reflect_input=False, reflect_output=False, xor_output=0xff)
                                                  -amaranth.lib.crc.catalog.CRC8_SMBUS = Algorithm(crc_width=8, polynomial=0x07, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_SMBUS = Algorithm(crc_width=8, polynomial=0x07, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_TECH_3250 = Algorithm(crc_width=8, polynomial=0x1d, initial_crc=0xff, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_TECH_3250 = Algorithm(crc_width=8, polynomial=0x1d, initial_crc=0xff, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_AES = Algorithm(crc_width=8, polynomial=0x1d, initial_crc=0xff, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_AES = Algorithm(crc_width=8, polynomial=0x1d, initial_crc=0xff, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_ETU = Algorithm(crc_width=8, polynomial=0x1d, initial_crc=0xff, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_ETU = Algorithm(crc_width=8, polynomial=0x1d, initial_crc=0xff, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC8_WCDMA = Algorithm(crc_width=8, polynomial=0x9b, initial_crc=0x00, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC8_WCDMA = Algorithm(crc_width=8, polynomial=0x9b, initial_crc=0x00, reflect_input=True, reflect_output=True, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC10_ATM = Algorithm(crc_width=10, polynomial=0x233, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC10_ATM = Algorithm(crc_width=10, polynomial=0x233, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC10_I_610 = Algorithm(crc_width=10, polynomial=0x233, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC10_I_610 = Algorithm(crc_width=10, polynomial=0x233, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC10_CDMA2000 = Algorithm(crc_width=10, polynomial=0x3d9, initial_crc=0x3ff, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC10_CDMA2000 = Algorithm(crc_width=10, polynomial=0x3d9, initial_crc=0x3ff, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC10_GSM = Algorithm(crc_width=10, polynomial=0x175, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x3ff)
                                                  +amaranth.lib.crc.catalog.CRC10_GSM = Algorithm(crc_width=10, polynomial=0x175, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x3ff)
                                                  -amaranth.lib.crc.catalog.CRC11_FLEXRAY = Algorithm(crc_width=11, polynomial=0x385, initial_crc=0x1a, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC11_FLEXRAY = Algorithm(crc_width=11, polynomial=0x385, initial_crc=0x1a, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC11_UMTS = Algorithm(crc_width=11, polynomial=0x307, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  +amaranth.lib.crc.catalog.CRC11_UMTS = Algorithm(crc_width=11, polynomial=0x307, initial_crc=0x00, reflect_input=False, reflect_output=False, xor_output=0x00)
                                                  -amaranth.lib.crc.catalog.CRC12_CDMA2000 = Algorithm(crc_width=12, polynomial=0xf13, initial_crc=0xfff, reflect_input=False, reflect_output=False, xor_output=0x000)
                                                  +amaranth.lib.crc.catalog.CRC12_CDMA2000 = Algorithm(crc_width=12, polynomial=0xf13, initial_crc=0xfff, reflect_input=False, reflect_output=False, xor_output=0x000)
                                                  -amaranth.lib.crc.catalog.CRC12_DECT = Algorithm(crc_width=12, polynomial=0x80f, initial_crc=0x000, reflect_input=False, reflect_output=False, xor_output=0x000)
                                                  +amaranth.lib.crc.catalog.CRC12_DECT = Algorithm(crc_width=12, polynomial=0x80f, initial_crc=0x000, reflect_input=False, reflect_output=False, xor_output=0x000)
                                                  -amaranth.lib.crc.catalog.CRC12_GSM = Algorithm(crc_width=12, polynomial=0xd31, initial_crc=0x000, reflect_input=False, reflect_output=False, xor_output=0xfff)
                                                  +amaranth.lib.crc.catalog.CRC12_GSM = Algorithm(crc_width=12, polynomial=0xd31, initial_crc=0x000, reflect_input=False, reflect_output=False, xor_output=0xfff)
                                                  -amaranth.lib.crc.catalog.CRC12_UMTS = Algorithm(crc_width=12, polynomial=0x80f, initial_crc=0x000, reflect_input=False, reflect_output=True, xor_output=0x000)
                                                  +amaranth.lib.crc.catalog.CRC12_UMTS = Algorithm(crc_width=12, polynomial=0x80f, initial_crc=0x000, reflect_input=False, reflect_output=True, xor_output=0x000)
                                                  -amaranth.lib.crc.catalog.CRC12_3GPP = Algorithm(crc_width=12, polynomial=0x80f, initial_crc=0x000, reflect_input=False, reflect_output=True, xor_output=0x000)
                                                  +amaranth.lib.crc.catalog.CRC12_3GPP = Algorithm(crc_width=12, polynomial=0x80f, initial_crc=0x000, reflect_input=False, reflect_output=True, xor_output=0x000)
                                                  -amaranth.lib.crc.catalog.CRC13_BBC = Algorithm(crc_width=13, polynomial=0x1cf5, initial_crc=0x000, reflect_input=False, reflect_output=False, xor_output=0x000)
                                                  +amaranth.lib.crc.catalog.CRC13_BBC = Algorithm(crc_width=13, polynomial=0x1cf5, initial_crc=0x000, reflect_input=False, reflect_output=False, xor_output=0x000)
                                                  -amaranth.lib.crc.catalog.CRC14_DARC = Algorithm(crc_width=14, polynomial=0x805, initial_crc=0x000, reflect_input=True, reflect_output=True, xor_output=0x000)
                                                  +amaranth.lib.crc.catalog.CRC14_DARC = Algorithm(crc_width=14, polynomial=0x805, initial_crc=0x000, reflect_input=True, reflect_output=True, xor_output=0x000)
                                                  -amaranth.lib.crc.catalog.CRC14_GSM = Algorithm(crc_width=14, polynomial=0x202d, initial_crc=0x000, reflect_input=False, reflect_output=False, xor_output=0x3fff)
                                                  +amaranth.lib.crc.catalog.CRC14_GSM = Algorithm(crc_width=14, polynomial=0x202d, initial_crc=0x000, reflect_input=False, reflect_output=False, xor_output=0x3fff)
                                                  -amaranth.lib.crc.catalog.CRC15_CAN = Algorithm(crc_width=15, polynomial=0x4599, initial_crc=0x000, reflect_input=False, reflect_output=False, xor_output=0x000)
                                                  +amaranth.lib.crc.catalog.CRC15_CAN = Algorithm(crc_width=15, polynomial=0x4599, initial_crc=0x000, reflect_input=False, reflect_output=False, xor_output=0x000)
                                                  -amaranth.lib.crc.catalog.CRC15_MPT1327 = Algorithm(crc_width=15, polynomial=0x6815, initial_crc=0x000, reflect_input=False, reflect_output=False, xor_output=0x001)
                                                  +amaranth.lib.crc.catalog.CRC15_MPT1327 = Algorithm(crc_width=15, polynomial=0x6815, initial_crc=0x000, reflect_input=False, reflect_output=False, xor_output=0x001)
                                                  -amaranth.lib.crc.catalog.CRC16_ARC = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_ARC = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_IBM = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_IBM = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_CDMA2000 = Algorithm(crc_width=16, polynomial=0xc867, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_CDMA2000 = Algorithm(crc_width=16, polynomial=0xc867, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_CMS = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_CMS = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_DDS_110 = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0x800d, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_DDS_110 = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0x800d, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_DECT_R = Algorithm(crc_width=16, polynomial=0x0589, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0001)
                                                  +amaranth.lib.crc.catalog.CRC16_DECT_R = Algorithm(crc_width=16, polynomial=0x0589, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0001)
                                                  -amaranth.lib.crc.catalog.CRC16_DECT_X = Algorithm(crc_width=16, polynomial=0x0589, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_DECT_X = Algorithm(crc_width=16, polynomial=0x0589, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_DNP = Algorithm(crc_width=16, polynomial=0x3d65, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0xffff)
                                                  +amaranth.lib.crc.catalog.CRC16_DNP = Algorithm(crc_width=16, polynomial=0x3d65, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0xffff)
                                                  -amaranth.lib.crc.catalog.CRC16_EN_13757 = Algorithm(crc_width=16, polynomial=0x3d65, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  +amaranth.lib.crc.catalog.CRC16_EN_13757 = Algorithm(crc_width=16, polynomial=0x3d65, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  -amaranth.lib.crc.catalog.CRC16_GENIBUS = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  +amaranth.lib.crc.catalog.CRC16_GENIBUS = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  -amaranth.lib.crc.catalog.CRC16_DARC = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  +amaranth.lib.crc.catalog.CRC16_DARC = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  -amaranth.lib.crc.catalog.CRC16_EPC = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  +amaranth.lib.crc.catalog.CRC16_EPC = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  -amaranth.lib.crc.catalog.CRC16_EPC_C1G2 = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  +amaranth.lib.crc.catalog.CRC16_EPC_C1G2 = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  -amaranth.lib.crc.catalog.CRC16_I_CODE = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  +amaranth.lib.crc.catalog.CRC16_I_CODE = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  -amaranth.lib.crc.catalog.CRC16_GSM = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  +amaranth.lib.crc.catalog.CRC16_GSM = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  -amaranth.lib.crc.catalog.CRC16_IBM_3740 = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_IBM_3740 = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_AUTOSAR = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_AUTOSAR = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_CCITT_FALSE = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_CCITT_FALSE = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_IBM_SDLC = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=True, reflect_output=True, xor_output=0xffff)
                                                  +amaranth.lib.crc.catalog.CRC16_IBM_SDLC = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=True, reflect_output=True, xor_output=0xffff)
                                                  -amaranth.lib.crc.catalog.CRC16_ISO_HDLC = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=True, reflect_output=True, xor_output=0xffff)
                                                  +amaranth.lib.crc.catalog.CRC16_ISO_HDLC = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=True, reflect_output=True, xor_output=0xffff)
                                                  -amaranth.lib.crc.catalog.CRC16_ISO_IEC_14443_3_B = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=True, reflect_output=True, xor_output=0xffff)
                                                  +amaranth.lib.crc.catalog.CRC16_ISO_IEC_14443_3_B = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=True, reflect_output=True, xor_output=0xffff)
                                                  -amaranth.lib.crc.catalog.CRC16_X25 = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=True, reflect_output=True, xor_output=0xffff)
                                                  +amaranth.lib.crc.catalog.CRC16_X25 = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=True, reflect_output=True, xor_output=0xffff)
                                                  -amaranth.lib.crc.catalog.CRC16_ISO_IEC_14443_3_A = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xc6c6, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_ISO_IEC_14443_3_A = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xc6c6, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_KERMIT = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_KERMIT = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_BLUETOOTH = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_BLUETOOTH = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_CCITT = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_CCITT = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_CCITT_TRUE = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_CCITT_TRUE = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_V_41_LSB = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_V_41_LSB = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_LJ1200 = Algorithm(crc_width=16, polynomial=0x6f63, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_LJ1200 = Algorithm(crc_width=16, polynomial=0x6f63, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_M17 = Algorithm(crc_width=16, polynomial=0x5935, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_M17 = Algorithm(crc_width=16, polynomial=0x5935, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_MAXIM_DOW = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0xffff)
                                                  +amaranth.lib.crc.catalog.CRC16_MAXIM_DOW = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0xffff)
                                                  -amaranth.lib.crc.catalog.CRC16_MAXIM = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0xffff)
                                                  +amaranth.lib.crc.catalog.CRC16_MAXIM = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0x0000, reflect_input=True, reflect_output=True, xor_output=0xffff)
                                                  -amaranth.lib.crc.catalog.CRC16_MCRF4XX = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_MCRF4XX = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xffff, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_MODBUS = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0xffff, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_MODBUS = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0xffff, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_NRSC_5 = Algorithm(crc_width=16, polynomial=0x080b, initial_crc=0xffff, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_NRSC_5 = Algorithm(crc_width=16, polynomial=0x080b, initial_crc=0xffff, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_OPENSAFETY_A = Algorithm(crc_width=16, polynomial=0x5935, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_OPENSAFETY_A = Algorithm(crc_width=16, polynomial=0x5935, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_OPENSAFETY_B = Algorithm(crc_width=16, polynomial=0x755b, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_OPENSAFETY_B = Algorithm(crc_width=16, polynomial=0x755b, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_PROFIBUS = Algorithm(crc_width=16, polynomial=0x1dcf, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  +amaranth.lib.crc.catalog.CRC16_PROFIBUS = Algorithm(crc_width=16, polynomial=0x1dcf, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  -amaranth.lib.crc.catalog.CRC16_IEC_61158_2 = Algorithm(crc_width=16, polynomial=0x1dcf, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  +amaranth.lib.crc.catalog.CRC16_IEC_61158_2 = Algorithm(crc_width=16, polynomial=0x1dcf, initial_crc=0xffff, reflect_input=False, reflect_output=False, xor_output=0xffff)
                                                  -amaranth.lib.crc.catalog.CRC16_RIELLO = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xb2aa, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_RIELLO = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0xb2aa, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_SPI_FUJITSU = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x1d0f, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_SPI_FUJITSU = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x1d0f, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_AUG_CCITT = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x1d0f, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_AUG_CCITT = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x1d0f, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_T10_DIF = Algorithm(crc_width=16, polynomial=0x8bb7, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_T10_DIF = Algorithm(crc_width=16, polynomial=0x8bb7, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_TELEDISK = Algorithm(crc_width=16, polynomial=0xa097, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_TELEDISK = Algorithm(crc_width=16, polynomial=0xa097, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_TMS37157 = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x89ec, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_TMS37157 = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x89ec, reflect_input=True, reflect_output=True, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_UMTS = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_UMTS = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_BUYPASS = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_BUYPASS = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_VERIFONE = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_VERIFONE = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_USB = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0xffff, reflect_input=True, reflect_output=True, xor_output=0xffff)
                                                  +amaranth.lib.crc.catalog.CRC16_USB = Algorithm(crc_width=16, polynomial=0x8005, initial_crc=0xffff, reflect_input=True, reflect_output=True, xor_output=0xffff)
                                                  -amaranth.lib.crc.catalog.CRC16_XMODEM = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_XMODEM = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_ACORN = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_ACORN = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_LTE = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_LTE = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_V_41_MSB = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_V_41_MSB = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC16_ZMODEM = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC16_ZMODEM = Algorithm(crc_width=16, polynomial=0x1021, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC17_CAN_FD = Algorithm(crc_width=17, polynomial=0x1685b, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  +amaranth.lib.crc.catalog.CRC17_CAN_FD = Algorithm(crc_width=17, polynomial=0x1685b, initial_crc=0x0000, reflect_input=False, reflect_output=False, xor_output=0x0000)
                                                  -amaranth.lib.crc.catalog.CRC21_CAN_FD = Algorithm(crc_width=21, polynomial=0x102899, initial_crc=0x00000, reflect_input=False, reflect_output=False, xor_output=0x00000)
                                                  +amaranth.lib.crc.catalog.CRC21_CAN_FD = Algorithm(crc_width=21, polynomial=0x102899, initial_crc=0x00000, reflect_input=False, reflect_output=False, xor_output=0x00000)
                                                  -amaranth.lib.crc.catalog.CRC24_BLE = Algorithm(crc_width=24, polynomial=0x00065b, initial_crc=0x555555, reflect_input=True, reflect_output=True, xor_output=0x000000)
                                                  +amaranth.lib.crc.catalog.CRC24_BLE = Algorithm(crc_width=24, polynomial=0x00065b, initial_crc=0x555555, reflect_input=True, reflect_output=True, xor_output=0x000000)
                                                  -amaranth.lib.crc.catalog.CRC24_FLEXRAY_A = Algorithm(crc_width=24, polynomial=0x5d6dcb, initial_crc=0xfedcba, reflect_input=False, reflect_output=False, xor_output=0x000000)
                                                  +amaranth.lib.crc.catalog.CRC24_FLEXRAY_A = Algorithm(crc_width=24, polynomial=0x5d6dcb, initial_crc=0xfedcba, reflect_input=False, reflect_output=False, xor_output=0x000000)
                                                  -amaranth.lib.crc.catalog.CRC24_FLEXRAY_B = Algorithm(crc_width=24, polynomial=0x5d6dcb, initial_crc=0xabcdef, reflect_input=False, reflect_output=False, xor_output=0x000000)
                                                  +amaranth.lib.crc.catalog.CRC24_FLEXRAY_B = Algorithm(crc_width=24, polynomial=0x5d6dcb, initial_crc=0xabcdef, reflect_input=False, reflect_output=False, xor_output=0x000000)
                                                  -amaranth.lib.crc.catalog.CRC24_INTERLAKEN = Algorithm(crc_width=24, polynomial=0x328b63, initial_crc=0xffffff, reflect_input=False, reflect_output=False, xor_output=0xffffff)
                                                  +amaranth.lib.crc.catalog.CRC24_INTERLAKEN = Algorithm(crc_width=24, polynomial=0x328b63, initial_crc=0xffffff, reflect_input=False, reflect_output=False, xor_output=0xffffff)
                                                  -amaranth.lib.crc.catalog.CRC24_LTE_A = Algorithm(crc_width=24, polynomial=0x864cfb, initial_crc=0x000000, reflect_input=False, reflect_output=False, xor_output=0x000000)
                                                  +amaranth.lib.crc.catalog.CRC24_LTE_A = Algorithm(crc_width=24, polynomial=0x864cfb, initial_crc=0x000000, reflect_input=False, reflect_output=False, xor_output=0x000000)
                                                  -amaranth.lib.crc.catalog.CRC24_LTE_B = Algorithm(crc_width=24, polynomial=0x800063, initial_crc=0x000000, reflect_input=False, reflect_output=False, xor_output=0x000000)
                                                  +amaranth.lib.crc.catalog.CRC24_LTE_B = Algorithm(crc_width=24, polynomial=0x800063, initial_crc=0x000000, reflect_input=False, reflect_output=False, xor_output=0x000000)
                                                  -amaranth.lib.crc.catalog.CRC24_OPENPGP = Algorithm(crc_width=24, polynomial=0x864cfb, initial_crc=0xb704ce, reflect_input=False, reflect_output=False, xor_output=0x000000)
                                                  +amaranth.lib.crc.catalog.CRC24_OPENPGP = Algorithm(crc_width=24, polynomial=0x864cfb, initial_crc=0xb704ce, reflect_input=False, reflect_output=False, xor_output=0x000000)
                                                  -amaranth.lib.crc.catalog.CRC24_OS_9 = Algorithm(crc_width=24, polynomial=0x800063, initial_crc=0xffffff, reflect_input=False, reflect_output=False, xor_output=0xffffff)
                                                  +amaranth.lib.crc.catalog.CRC24_OS_9 = Algorithm(crc_width=24, polynomial=0x800063, initial_crc=0xffffff, reflect_input=False, reflect_output=False, xor_output=0xffffff)
                                                  -amaranth.lib.crc.catalog.CRC30_CDMA = Algorithm(crc_width=30, polynomial=0x2030b9c7, initial_crc=0x3fffffff, reflect_input=False, reflect_output=False, xor_output=0x3fffffff)
                                                  +amaranth.lib.crc.catalog.CRC30_CDMA = Algorithm(crc_width=30, polynomial=0x2030b9c7, initial_crc=0x3fffffff, reflect_input=False, reflect_output=False, xor_output=0x3fffffff)
                                                  -amaranth.lib.crc.catalog.CRC31_PHILIPS = Algorithm(crc_width=31, polynomial=0x4c11db7, initial_crc=0x7fffffff, reflect_input=False, reflect_output=False, xor_output=0x7fffffff)
                                                  +amaranth.lib.crc.catalog.CRC31_PHILIPS = Algorithm(crc_width=31, polynomial=0x4c11db7, initial_crc=0x7fffffff, reflect_input=False, reflect_output=False, xor_output=0x7fffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_AIXM = Algorithm(crc_width=32, polynomial=0x814141ab, initial_crc=0x00000000, reflect_input=False, reflect_output=False, xor_output=0x00000000)
                                                  +amaranth.lib.crc.catalog.CRC32_AIXM = Algorithm(crc_width=32, polynomial=0x814141ab, initial_crc=0x00000000, reflect_input=False, reflect_output=False, xor_output=0x00000000)
                                                  -amaranth.lib.crc.catalog.CRC32_AUTOSAR = Algorithm(crc_width=32, polynomial=0xf4acfb13, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  +amaranth.lib.crc.catalog.CRC32_AUTOSAR = Algorithm(crc_width=32, polynomial=0xf4acfb13, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_BASE91_D = Algorithm(crc_width=32, polynomial=0xa833982b, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  +amaranth.lib.crc.catalog.CRC32_BASE91_D = Algorithm(crc_width=32, polynomial=0xa833982b, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_BZIP2 = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=False, reflect_output=False, xor_output=0xffffffff)
                                                  +amaranth.lib.crc.catalog.CRC32_BZIP2 = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=False, reflect_output=False, xor_output=0xffffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_AAL5 = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=False, reflect_output=False, xor_output=0xffffffff)
                                                  +amaranth.lib.crc.catalog.CRC32_AAL5 = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=False, reflect_output=False, xor_output=0xffffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_DECT_B = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=False, reflect_output=False, xor_output=0xffffffff)
                                                  +amaranth.lib.crc.catalog.CRC32_DECT_B = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=False, reflect_output=False, xor_output=0xffffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_CD_ROM_EDC = Algorithm(crc_width=32, polynomial=0x8001801b, initial_crc=0x00000000, reflect_input=True, reflect_output=True, xor_output=0x00000000)
                                                  +amaranth.lib.crc.catalog.CRC32_CD_ROM_EDC = Algorithm(crc_width=32, polynomial=0x8001801b, initial_crc=0x00000000, reflect_input=True, reflect_output=True, xor_output=0x00000000)
                                                  -amaranth.lib.crc.catalog.CRC32_CKSUM = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0x00000000, reflect_input=False, reflect_output=False, xor_output=0xffffffff)
                                                  +amaranth.lib.crc.catalog.CRC32_CKSUM = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0x00000000, reflect_input=False, reflect_output=False, xor_output=0xffffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_POSIX = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0x00000000, reflect_input=False, reflect_output=False, xor_output=0xffffffff)
                                                  +amaranth.lib.crc.catalog.CRC32_POSIX = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0x00000000, reflect_input=False, reflect_output=False, xor_output=0xffffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_ISCSI = Algorithm(crc_width=32, polynomial=0x1edc6f41, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  +amaranth.lib.crc.catalog.CRC32_ISCSI = Algorithm(crc_width=32, polynomial=0x1edc6f41, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_BASE91_C = Algorithm(crc_width=32, polynomial=0x1edc6f41, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  +amaranth.lib.crc.catalog.CRC32_BASE91_C = Algorithm(crc_width=32, polynomial=0x1edc6f41, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_CASTAGNOLI = Algorithm(crc_width=32, polynomial=0x1edc6f41, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  +amaranth.lib.crc.catalog.CRC32_CASTAGNOLI = Algorithm(crc_width=32, polynomial=0x1edc6f41, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_INTERLAKEN = Algorithm(crc_width=32, polynomial=0x1edc6f41, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  +amaranth.lib.crc.catalog.CRC32_INTERLAKEN = Algorithm(crc_width=32, polynomial=0x1edc6f41, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_ISO_HDLC = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  +amaranth.lib.crc.catalog.CRC32_ISO_HDLC = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_ADCCP = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  +amaranth.lib.crc.catalog.CRC32_ADCCP = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_V_42 = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  +amaranth.lib.crc.catalog.CRC32_V_42 = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_XZ = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  +amaranth.lib.crc.catalog.CRC32_XZ = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_PKZIP = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  +amaranth.lib.crc.catalog.CRC32_PKZIP = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_ETHERNET = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  +amaranth.lib.crc.catalog.CRC32_ETHERNET = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffff)
                                                  -amaranth.lib.crc.catalog.CRC32_JAMCRC = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0x00000000)
                                                  +amaranth.lib.crc.catalog.CRC32_JAMCRC = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0x00000000)
                                                  -amaranth.lib.crc.catalog.CRC32_MEF = Algorithm(crc_width=32, polynomial=0x741b8cd7, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0x00000000)
                                                  +amaranth.lib.crc.catalog.CRC32_MEF = Algorithm(crc_width=32, polynomial=0x741b8cd7, initial_crc=0xffffffff, reflect_input=True, reflect_output=True, xor_output=0x00000000)
                                                  -amaranth.lib.crc.catalog.CRC32_MPEG_2 = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=False, reflect_output=False, xor_output=0x00000000)
                                                  +amaranth.lib.crc.catalog.CRC32_MPEG_2 = Algorithm(crc_width=32, polynomial=0x04c11db7, initial_crc=0xffffffff, reflect_input=False, reflect_output=False, xor_output=0x00000000)
                                                  -amaranth.lib.crc.catalog.CRC32_XFER = Algorithm(crc_width=32, polynomial=0x000000af, initial_crc=0x00000000, reflect_input=False, reflect_output=False, xor_output=0x00000000)
                                                  +amaranth.lib.crc.catalog.CRC32_XFER = Algorithm(crc_width=32, polynomial=0x000000af, initial_crc=0x00000000, reflect_input=False, reflect_output=False, xor_output=0x00000000)
                                                  -amaranth.lib.crc.catalog.CRC40_GSM = Algorithm(crc_width=40, polynomial=0x0004820009, initial_crc=0x0000000000, reflect_input=False, reflect_output=False, xor_output=0xffffffffff)
                                                  +amaranth.lib.crc.catalog.CRC40_GSM = Algorithm(crc_width=40, polynomial=0x0004820009, initial_crc=0x0000000000, reflect_input=False, reflect_output=False, xor_output=0xffffffffff)
                                                  -amaranth.lib.crc.catalog.CRC64_ECMA_182 = Algorithm(crc_width=64, polynomial=0x42f0e1eba9ea3693, initial_crc=0x0000000000000000, reflect_input=False, reflect_output=False, xor_output=0x0000000000000000)
                                                  +amaranth.lib.crc.catalog.CRC64_ECMA_182 = Algorithm(crc_width=64, polynomial=0x42f0e1eba9ea3693, initial_crc=0x0000000000000000, reflect_input=False, reflect_output=False, xor_output=0x0000000000000000)
                                                  -amaranth.lib.crc.catalog.CRC64_GO_ISO = Algorithm(crc_width=64, polynomial=0x000000000000001b, initial_crc=0xffffffffffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffffffffffff)
                                                  +amaranth.lib.crc.catalog.CRC64_GO_ISO = Algorithm(crc_width=64, polynomial=0x000000000000001b, initial_crc=0xffffffffffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffffffffffff)
                                                  -amaranth.lib.crc.catalog.CRC64_MS = Algorithm(crc_width=64, polynomial=0x259c84cba6426349, initial_crc=0xffffffffffffffff, reflect_input=True, reflect_output=True, xor_output=0x0000000000000000)
                                                  +amaranth.lib.crc.catalog.CRC64_MS = Algorithm(crc_width=64, polynomial=0x259c84cba6426349, initial_crc=0xffffffffffffffff, reflect_input=True, reflect_output=True, xor_output=0x0000000000000000)
                                                  -amaranth.lib.crc.catalog.CRC64_REDIS = Algorithm(crc_width=64, polynomial=0xad93d23594c935a9, initial_crc=0x0000000000000000, reflect_input=True, reflect_output=True, xor_output=0x0000000000000000)
                                                  +amaranth.lib.crc.catalog.CRC64_REDIS = Algorithm(crc_width=64, polynomial=0xad93d23594c935a9, initial_crc=0x0000000000000000, reflect_input=True, reflect_output=True, xor_output=0x0000000000000000)
                                                  -amaranth.lib.crc.catalog.CRC64_WE = Algorithm(crc_width=64, polynomial=0x42f0e1eba9ea3693, initial_crc=0xffffffffffffffff, reflect_input=False, reflect_output=False, xor_output=0xffffffffffffffff)
                                                  +amaranth.lib.crc.catalog.CRC64_WE = Algorithm(crc_width=64, polynomial=0x42f0e1eba9ea3693, initial_crc=0xffffffffffffffff, reflect_input=False, reflect_output=False, xor_output=0xffffffffffffffff)
                                                  -amaranth.lib.crc.catalog.CRC64_XZ = Algorithm(crc_width=64, polynomial=0x42f0e1eba9ea3693, initial_crc=0xffffffffffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffffffffffff)
                                                  +amaranth.lib.crc.catalog.CRC64_XZ = Algorithm(crc_width=64, polynomial=0x42f0e1eba9ea3693, initial_crc=0xffffffffffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffffffffffff)
                                                  -amaranth.lib.crc.catalog.CRC64_ECMA = Algorithm(crc_width=64, polynomial=0x42f0e1eba9ea3693, initial_crc=0xffffffffffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffffffffffff)
                                                  +amaranth.lib.crc.catalog.CRC64_ECMA = Algorithm(crc_width=64, polynomial=0x42f0e1eba9ea3693, initial_crc=0xffffffffffffffff, reflect_input=True, reflect_output=True, xor_output=0xffffffffffffffff)
                                                  -amaranth.lib.crc.catalog.CRC82_DARC = Algorithm(crc_width=82, polynomial=0x308c0111011401440411, initial_crc=0x00000000000000000000, reflect_input=True, reflect_output=True, xor_output=0x00000000000000000000)
                                                  +amaranth.lib.crc.catalog.CRC82_DARC = Algorithm(crc_width=82, polynomial=0x308c0111011401440411, initial_crc=0x00000000000000000000, reflect_input=True, reflect_output=True, xor_output=0x00000000000000000000)
                                                  diff --git a/docs/amaranth/latest/stdlib/data.html b/docs/amaranth/latest/stdlib/data.html index 86093f12..0d484684 100644 --- a/docs/amaranth/latest/stdlib/data.html +++ b/docs/amaranth/latest/stdlib/data.html @@ -1,10 +1,10 @@ - + - Data structures — Amaranth language & toolchain 0.6.0.dev68 documentation + Data structures — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                                  - 0.6.0.dev68 + 0.6.0.dev69
                                                  @@ -116,12 +116,12 @@
                                                  -

                                                  Data structures

                                                  +

                                                  Data structures

                                                  The amaranth.lib.data module provides a way to describe the bitwise layout of values and a proxy class for accessing fields of values using the attribute access and indexing syntax.

                                                  -

                                                  Introduction

                                                  +

                                                  Introduction

                                                  -

                                                  Overview

                                                  +

                                                  Overview

                                                  This module provides four related facilities:

                                                  1. Low-level bitwise layout description via Field and Layout. These classes are rarely used directly, but are the foundation on which all other functionality is built. They are also useful for introspection.

                                                  2. @@ -135,7 +135,7 @@

                                                    Overview -

                                                    Motivation

                                                    +

                                                    Motivation

                                                    The fundamental Amaranth type is a Value: a sequence of bits that can also be used as a number. Manipulating values directly is sufficient for simple applications, but in more complex ones, values are often more than just a sequence of bits; they have well-defined internal structure.

                                                    For example, consider a module that processes pixels, converting them from RGB to grayscale. The color pixel format is RGB565:

                                                    {'reg': [{'name': '.red', 'bits': 5, 'type': 2}, {'name': '.green', 'bits': 6, 'type': 3}, {'name': '.blue', 'bits': 5, 'type': 4}], 'config': {'lanes': 1, 'compact': True, 'vflip': True, 'hspace': 650}}

                                                    This module could be implemented (using a fast but very approximate method) as follows:

                                                    @@ -166,7 +166,7 @@

                                                    Motivation -

                                                    Composing layouts

                                                    +

                                                    Composing layouts

                                                    Layouts are composable: a Layout is a shape and can be used as a part of another layout. In this case, an attribute access through a view returns a view as well.

                                                    For example, consider a module that processes RGB pixels in groups of up to four at a time, provided by another module, and accumulates their average intensity:

                                                    input_layout = data.StructLayout({
                                                    @@ -189,7 +189,7 @@ 

                                                    Composing layouts -

                                                    Defining layouts

                                                    +

                                                    Defining layouts

                                                    Data layouts can be defined in a few different ways depending on the use case.

                                                    In case the data format is defined using a family of layouts instead of a single specific one, a function can be used:

                                                    def rgb_layout(r_bits, g_bits, b_bits):
                                                    @@ -240,7 +240,7 @@ 

                                                    Defining layouts -

                                                    Discriminated unions

                                                    +

                                                    Discriminated unions

                                                    This module provides a UnionLayout, which is rarely needed by itself, but is very useful in combination with a discriminant: a enumeration indicating which field of the union contains valid data.

                                                    For example, consider a module that can direct another module to perform one of a few operations, each of which requires its own parameters. The two modules could communicate through a channel with a layout like this:

                                                    class Command(data.Struct):
                                                    @@ -285,10 +285,10 @@ 

                                                    Discriminated unions

                                                  -

                                                  Modeling structured data

                                                  +

                                                  Modeling structured data

                                                  -class amaranth.lib.data.Field(shape, offset)
                                                  +class amaranth.lib.data.Field(shape, offset)

                                                  Description of a data field.

                                                  The Field class specifies the signedness and bit positions of a field in an Amaranth value.

                                                  @@ -303,7 +303,7 @@

                                                  Modeling structured data
                                                  -property width
                                                  +property width

                                                  Width of the field.

                                                  This property should be used over self.shape.width because self.shape can be an arbitrary shape-like object, which may not have @@ -320,7 +320,7 @@

                                                  Modeling structured data
                                                  -__eq__(other)
                                                  +__eq__(other)

                                                  Compare fields.

                                                  Two fields are equal if they have the same shape and offset.

                                                  @@ -329,7 +329,7 @@

                                                  Modeling structured data
                                                  -class amaranth.lib.data.Layout
                                                  +class amaranth.lib.data.Layout

                                                  Description of a data layout.

                                                  The shape-like Layout interface associates keys (string names or integer indexes) with fields, giving identifiers to spans of bits in @@ -341,7 +341,7 @@

                                                  Modeling structured dataLayout must preserve this invariant.

                                                  -static cast(obj)
                                                  +static cast(obj)

                                                  Cast a shape-like object to a layout.

                                                  This method performs a subset of the operations done by Shape.cast(); it will recursively call .as_shape(), but only until a layout is returned.

                                                  @@ -357,7 +357,7 @@

                                                  Modeling structured data
                                                  -abstract __iter__()
                                                  +abstract __iter__()

                                                  Iterate fields in the layout.

                                                  Yields:
                                                  @@ -371,7 +371,7 @@

                                                  Modeling structured data
                                                  -abstract __getitem__(key)
                                                  +abstract __getitem__(key)

                                                  Retrieve a field from the layout.

                                                  Returns:
                                                  @@ -388,7 +388,7 @@

                                                  Modeling structured data
                                                  -abstract property size
                                                  +abstract property size

                                                  Size of the layout.

                                                  Returns:
                                                  @@ -402,7 +402,7 @@

                                                  Modeling structured data
                                                  -as_shape()
                                                  +as_shape()

                                                  Shape of the layout.

                                                  Returns:
                                                  @@ -416,7 +416,7 @@

                                                  Modeling structured data
                                                  -__eq__(other)
                                                  +__eq__(other)

                                                  Compare layouts.

                                                  Two layouts are equal if they have the same size and the same fields under the same names. The order of the fields is not considered.

                                                  @@ -424,7 +424,7 @@

                                                  Modeling structured data
                                                  -__call__(target)
                                                  +__call__(target)

                                                  Create a view into a target.

                                                  When a Layout is used as the shape of a Field and accessed through a View, this method is used to wrap the slice of the underlying value into @@ -441,7 +441,7 @@

                                                  Modeling structured data
                                                  -const(init)
                                                  +const(init)

                                                  Convert a constant initializer to a constant.

                                                  Converts init, which may be a sequence or a mapping of field values, to a constant.

                                                  @@ -458,7 +458,7 @@

                                                  Modeling structured data
                                                  -from_bits(raw)
                                                  +from_bits(raw)

                                                  Convert a bit pattern to a constant.

                                                  Converts raw, which is an int, to a constant.

                                                  @@ -475,10 +475,10 @@

                                                  Modeling structured data -

                                                  Common data layouts

                                                  +

                                                  Common data layouts

                                                  -class amaranth.lib.data.StructLayout(members)
                                                  +class amaranth.lib.data.StructLayout(members)

                                                  Description of a structure layout.

                                                  The fields of a structure layout follow one another without any gaps, and the size of a structure layout is the sum of the sizes of its members.

                                                  @@ -504,7 +504,7 @@

                                                  Common data layouts
                                                  -property size
                                                  +property size

                                                  Size of the structure layout.

                                                  Returns:
                                                  @@ -521,7 +521,7 @@

                                                  Common data layouts
                                                  -class amaranth.lib.data.UnionLayout(members)
                                                  +class amaranth.lib.data.UnionLayout(members)

                                                  Description of a union layout.

                                                  The fields of a union layout all start from bit 0, and the size of a union layout is the size of the largest of its members.

                                                  @@ -541,7 +541,7 @@

                                                  Common data layouts
                                                  -property size
                                                  +property size

                                                  Size of the union layout.

                                                  Returns:
                                                  @@ -558,7 +558,7 @@

                                                  Common data layouts
                                                  -class amaranth.lib.data.ArrayLayout(elem_shape, length)
                                                  +class amaranth.lib.data.ArrayLayout(elem_shape, length)

                                                  Description of an array layout.

                                                  The fields of an array layout follow one another without any gaps, and the size of an array layout is the size of its element multiplied by its length.

                                                  @@ -586,7 +586,7 @@

                                                  Common data layouts
                                                  -property size
                                                  +property size

                                                  Size of the array layout.

                                                  Returns:
                                                  @@ -602,7 +602,7 @@

                                                  Common data layouts
                                                  -class amaranth.lib.data.FlexibleLayout(size, fields)
                                                  +class amaranth.lib.data.FlexibleLayout(size, fields)

                                                  Description of a flexible layout.

                                                  A flexible layout is similar to a structure layout; while fields in StructLayout are defined contiguously, the fields in a flexible layout can overlap and have gaps between them.

                                                  @@ -635,22 +635,22 @@

                                                  Common data layouts -

                                                  Data views

                                                  +

                                                  Data views

                                                  -class amaranth.lib.data.View(layout, target)
                                                  +class amaranth.lib.data.View(layout, target)

                                                  A value viewed through the lens of a layout.

                                                  The value-like class View provides access to the fields of an underlying Amaranth value via the names or indexes defined in the provided layout.

                                                  -

                                                  Creating a view

                                                  +

                                                  Creating a view

                                                  A view must be created using an explicitly provided layout and target. To create a new Signal that is wrapped in a View with a given layout, use Signal(layout, ...), which for a Layout is equivalent to View(layout, Signal(...)).

                                                  -

                                                  Accessing a view

                                                  +

                                                  Accessing a view

                                                  Slicing a view or accessing its attributes returns a part of the underlying value corresponding to the field with that index or name, which is itself either a value or a value-castable object. If the shape of the field is a Layout, it will be @@ -666,7 +666,7 @@

                                                  Accessing a viewValue using as_value().

                                                  -

                                                  Custom view classes

                                                  +

                                                  Custom view classes

                                                  The View class can be inherited from to define additional properties or methods on a view. The only three names that are reserved on instances of View and Const are as_value(), Const.as_bits(), and eq(), leaving the rest to the developer. @@ -674,7 +674,7 @@

                                                  Custom view classesView that also provide a concise way to define a layout.

                                                  -shape()
                                                  +shape()

                                                  Get layout of this view.

                                                  Returns:
                                                  @@ -688,7 +688,7 @@

                                                  Custom view classes
                                                  -as_value()
                                                  +as_value()

                                                  Get underlying value.

                                                  Returns:
                                                  @@ -703,7 +703,7 @@

                                                  Custom view classes
                                                  -eq(other)
                                                  +eq(other)

                                                  Assign to the underlying value.

                                                  Returns:
                                                  @@ -717,7 +717,7 @@

                                                  Custom view classes
                                                  -__getitem__(key)
                                                  +__getitem__(key)

                                                  Slice the underlying value.

                                                  A field corresponding to key is looked up in the layout. If the field’s shape is a shape-castable object that has a __call__() method, it is called and @@ -748,7 +748,7 @@

                                                  Custom view classes
                                                  -__getattr__(name)
                                                  +__getattr__(name)

                                                  Access a field of the underlying value.

                                                  Returns self[name].

                                                  @@ -764,17 +764,17 @@

                                                  Custom view classes
                                                  -class amaranth.lib.data.Const(layout, target)
                                                  +class amaranth.lib.data.Const(layout, target)

                                                  A constant value viewed through the lens of a layout.

                                                  The Const class is similar to the View class, except that its target is a specific bit pattern and operations on it return constants.

                                                  -

                                                  Creating a constant

                                                  +

                                                  Creating a constant

                                                  A constant can be created from a dict or list of field values using Layout.const(), or from a bit pattern using Layout.from_bits().

                                                  -

                                                  Accessing a constant

                                                  +

                                                  Accessing a constant

                                                  Slicing a constant or accessing its attributes returns a part of the underlying value corresponding to the field with that index or name. If the shape of the field is a Layout, the returned value is a Const; if it is a different @@ -790,7 +790,7 @@

                                                  Accessing a constantas_bits().

                                                  -shape()
                                                  +shape()

                                                  Get layout of this constant.

                                                  Returns:
                                                  @@ -804,7 +804,7 @@

                                                  Accessing a constant
                                                  -as_bits()
                                                  +as_bits()

                                                  Get underlying bit pattern.

                                                  Returns:
                                                  @@ -818,7 +818,7 @@

                                                  Accessing a constant
                                                  -as_value()
                                                  +as_value()

                                                  Convert to a value.

                                                  Returns:
                                                  @@ -832,7 +832,7 @@

                                                  Accessing a constant
                                                  -__getitem__(key)
                                                  +__getitem__(key)

                                                  Slice the underlying value.

                                                  A field corresponding to key is looked up in the layout. If the field’s shape is a shape-castable object, returns the result of calling from_bits(). @@ -861,7 +861,7 @@

                                                  Accessing a constant
                                                  -__getattr__(name)
                                                  +__getattr__(name)

                                                  Access a field of the underlying value.

                                                  Returns self[name].

                                                  @@ -881,10 +881,10 @@

                                                  Accessing a constant
                                                  -

                                                  Data classes

                                                  +

                                                  Data classes

                                                  -class amaranth.lib.data.Struct(target)
                                                  +class amaranth.lib.data.Struct(target)

                                                  Structures defined with annotations.

                                                  The Struct base class is a subclass of View that provides a concise way to describe the structure layout and initial values for the fields using Python @@ -968,7 +968,7 @@

                                                  Data classes
                                                  -class amaranth.lib.data.Union(target)
                                                  +class amaranth.lib.data.Union(target)

                                                  Unions defined with annotations.

                                                  The Union base class is a subclass of View that provides a concise way to describe the union layout using Python variable annotations. It is very similar to the Struct class, except that its layout diff --git a/docs/amaranth/latest/stdlib/enum.html b/docs/amaranth/latest/stdlib/enum.html index b57347d9..ba2a0985 100644 --- a/docs/amaranth/latest/stdlib/enum.html +++ b/docs/amaranth/latest/stdlib/enum.html @@ -1,10 +1,10 @@ - + - Enumerations — Amaranth language & toolchain 0.6.0.dev68 documentation + Enumerations — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@

                                                  - 0.6.0.dev68 + 0.6.0.dev69
                                                  @@ -114,7 +114,7 @@
                                                  -

                                                  Enumerations

                                                  +

                                                  Enumerations

                                                  The amaranth.lib.enum module is a drop-in replacement for the standard enum module that provides extended Enum, IntEnum, Flag, and IntFlag classes with the ability to specify a shape explicitly.

                                                  A shape can be specified for an enumeration with the shape= keyword argument:

                                                  from amaranth.lib import enum
                                                  @@ -202,10 +202,10 @@
                                                   
                                                  -

                                                  Metaclass

                                                  +

                                                  Metaclass

                                                  -class amaranth.lib.enum.EnumType
                                                  +class amaranth.lib.enum.EnumType

                                                  Subclass of the standard enum.EnumType that implements the ShapeCastable protocol.

                                                  This metaclass provides the as_shape() method, making its instances @@ -219,7 +219,7 @@

                                                  Metaclassview_class= keyword argument when creating the enum class.

                                                  -as_shape()
                                                  +as_shape()

                                                  Cast this enumeration to a shape.

                                                  Returns:
                                                  @@ -237,7 +237,7 @@

                                                  Metaclass
                                                  -__call__(value, *args, **kwargs)
                                                  +__call__(value, *args, **kwargs)

                                                  Cast the value to this enum type.

                                                  When given an integer constant, it returns the corresponding enum value, like a standard Python enumeration.

                                                  @@ -262,66 +262,66 @@

                                                  Metaclass -

                                                  Base classes

                                                  +

                                                  Base classes

                                                  -class amaranth.lib.enum.Enum
                                                  +class amaranth.lib.enum.Enum

                                                  Subclass of the standard enum.Enum that has EnumType as its metaclass and EnumView as its view class.

                                                  -class amaranth.lib.enum.IntEnum
                                                  +class amaranth.lib.enum.IntEnum

                                                  Subclass of the standard enum.IntEnum that has EnumType as its metaclass.

                                                  -class amaranth.lib.enum.Flag
                                                  +class amaranth.lib.enum.Flag

                                                  Subclass of the standard enum.Flag that has EnumType as its metaclass and FlagView as its view class.

                                                  -class amaranth.lib.enum.IntFlag
                                                  +class amaranth.lib.enum.IntFlag

                                                  Subclass of the standard enum.IntFlag that has EnumType as its metaclass.

                                                  -

                                                  View classes

                                                  +

                                                  View classes

                                                  -class amaranth.lib.enum.EnumView
                                                  +class amaranth.lib.enum.EnumView

                                                  The view class used for Enum.

                                                  Wraps a Value and only allows type-safe operations. The only operators allowed are equality comparisons (== and !=) with another EnumView of the same enum type.

                                                  -__init__(enum, target)
                                                  +__init__(enum, target)

                                                  Constructs a view with the given enum type and target (a value-like).

                                                  -shape()
                                                  +shape()

                                                  Returns the underlying enum type.

                                                  -as_value()
                                                  +as_value()

                                                  Returns the underlying value.

                                                  -eq(other)
                                                  +eq(other)

                                                  Assign to the underlying value.

                                                  Returns:
                                                  @@ -335,7 +335,7 @@

                                                  View classes
                                                  -__eq__(other)
                                                  +__eq__(other)

                                                  Compares the underlying value for equality.

                                                  The other operand has to be either another EnumView with the same enum type, or a plain value of the underlying enum.

                                                  @@ -351,7 +351,7 @@

                                                  View classes
                                                  -matches(*patterns)
                                                  +matches(*patterns)

                                                  Pattern matching.

                                                  Matches against a set of patterns, which must be values of the same enum as the view.

                                                  @@ -365,13 +365,13 @@

                                                  View classes
                                                  -class amaranth.lib.enum.FlagView
                                                  +class amaranth.lib.enum.FlagView

                                                  The view class used for Flag.

                                                  In addition to the operations allowed by EnumView, it allows bitwise operations among values of the same enum type.

                                                  -__invert__()
                                                  +__invert__()

                                                  Inverts all flags in this value and returns another FlagView.

                                                  Note that this is not equivalent to applying bitwise negation to the underlying value: just like the Python enum.Flag class, only bits corresponding to flags actually @@ -385,7 +385,7 @@

                                                  View classes
                                                  -__and__(other)
                                                  +__and__(other)

                                                  Performs a bitwise AND and returns another FlagView.

                                                  The other operand has to be either another FlagView of the same enum type, or a plain value of the underlying enum type.

                                                  @@ -398,7 +398,7 @@

                                                  View classes
                                                  -__or__(other)
                                                  +__or__(other)

                                                  Performs a bitwise OR and returns another FlagView.

                                                  The other operand has to be either another FlagView of the same enum type, or a plain value of the underlying enum type.

                                                  @@ -411,7 +411,7 @@

                                                  View classes
                                                  -__xor__(other)
                                                  +__xor__(other)

                                                  Performs a bitwise XOR and returns another FlagView.

                                                  The other operand has to be either another FlagView of the same enum type, or a plain value of the underlying enum type.

                                                  @@ -424,7 +424,7 @@

                                                  View classes
                                                  -__rand__(other)
                                                  +__rand__(other)

                                                  Performs a bitwise AND and returns another FlagView.

                                                  The other operand has to be either another FlagView of the same enum type, or a plain value of the underlying enum type.

                                                  @@ -437,7 +437,7 @@

                                                  View classes
                                                  -__ror__(other)
                                                  +__ror__(other)

                                                  Performs a bitwise OR and returns another FlagView.

                                                  The other operand has to be either another FlagView of the same enum type, or a plain value of the underlying enum type.

                                                  @@ -450,7 +450,7 @@

                                                  View classes
                                                  -__rxor__(other)
                                                  +__rxor__(other)

                                                  Performs a bitwise XOR and returns another FlagView.

                                                  The other operand has to be either another FlagView of the same enum type, or a plain value of the underlying enum type.

                                                  diff --git a/docs/amaranth/latest/stdlib/fifo.html b/docs/amaranth/latest/stdlib/fifo.html index 63f05fbe..223ac4ca 100644 --- a/docs/amaranth/latest/stdlib/fifo.html +++ b/docs/amaranth/latest/stdlib/fifo.html @@ -1,10 +1,10 @@ - + - First-in first-out queues — Amaranth language & toolchain 0.6.0.dev68 documentation + First-in first-out queues — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                                  - 0.6.0.dev68 + 0.6.0.dev69
                                                  @@ -116,11 +116,11 @@
                                                  -

                                                  First-in first-out queues

                                                  +

                                                  First-in first-out queues

                                                  The amaranth.lib.fifo module provides building blocks for first-in, first-out queues.

                                                  -class amaranth.lib.fifo.FIFOInterface(*, width, depth)
                                                  +class amaranth.lib.fifo.FIFOInterface(*, width, depth)

                                                  Data written to the input interface (w_data, w_rdy, w_en) is buffered and can be read at the output interface (r_data, r_rdy, r_en). The data entry written first to the input also appears first on the output.

                                                  @@ -155,7 +155,7 @@
                                                  -class amaranth.lib.fifo.SyncFIFO(*, width, depth)
                                                  +class amaranth.lib.fifo.SyncFIFO(*, width, depth)

                                                  Synchronous first in, first out queue.

                                                  Read and write interfaces are accessed from the same clock domain. If different clock domains are needed, use AsyncFIFO.

                                                  @@ -187,7 +187,7 @@
                                                  -class amaranth.lib.fifo.SyncFIFOBuffered(*, width, depth)
                                                  +class amaranth.lib.fifo.SyncFIFOBuffered(*, width, depth)

                                                  Buffered synchronous first in, first out queue.

                                                  This queue’s interface is identical to SyncFIFO, but it does not use asynchronous memory reads, which are incompatible with FPGA block RAMs.

                                                  @@ -221,7 +221,7 @@
                                                  -class amaranth.lib.fifo.AsyncFIFO(*, width, depth, r_domain='read', w_domain='write', exact_depth=False)
                                                  +class amaranth.lib.fifo.AsyncFIFO(*, width, depth, r_domain='read', w_domain='write', exact_depth=False)

                                                  Asynchronous first in, first out queue.

                                                  Read and write interfaces are accessed from different clock domains, which can be set when constructing the FIFO.

                                                  @@ -261,7 +261,7 @@
                                                  -class amaranth.lib.fifo.AsyncFIFOBuffered(*, width, depth, r_domain='read', w_domain='write', exact_depth=False)
                                                  +class amaranth.lib.fifo.AsyncFIFOBuffered(*, width, depth, r_domain='read', w_domain='write', exact_depth=False)

                                                  Buffered asynchronous first in, first out queue.

                                                  Read and write interfaces are accessed from different clock domains, which can be set when constructing the FIFO.

                                                  diff --git a/docs/amaranth/latest/stdlib/io.html b/docs/amaranth/latest/stdlib/io.html index d13d594a..d51cc586 100644 --- a/docs/amaranth/latest/stdlib/io.html +++ b/docs/amaranth/latest/stdlib/io.html @@ -1,10 +1,10 @@ - + - Input/output buffers — Amaranth language & toolchain 0.6.0.dev68 documentation + Input/output buffers — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                                  - 0.6.0.dev68 + 0.6.0.dev69
                                                  @@ -116,10 +116,10 @@
                                                  -

                                                  Input/output buffers

                                                  +

                                                  Input/output buffers

                                                  The amaranth.lib.io module provides a platform-independent way to instantiate platform-specific input/output buffers: combinational, synchronous, and double data rate (DDR).

                                                  -

                                                  Introduction

                                                  +

                                                  Introduction

                                                  The Amaranth language provides core I/O values that designate connections to external devices, and I/O buffer instances that implement platform-independent combinational I/O buffers. This low-level mechanism is foundational to all I/O in Amaranth and must be used whenever a device-specific platform is unavailable, but is limited in its capabilities. The amaranth.lib.io module builds on top of it to provide library I/O ports that specialize and annotate I/O values, and buffer components that connect ports to logic.

                                                  Note

                                                  @@ -132,7 +132,7 @@

                                                  Introduction -

                                                  Examples

                                                  +

                                                  Examples

                                                  All of the following examples assume that one of the built-in FPGA platforms is used.

                                                  from amaranth.sim import Simulator, Period
                                                   from amaranth.lib import io, wiring, stream
                                                  @@ -140,7 +140,7 @@ 

                                                  Examples -

                                                  LED output

                                                  +

                                                  LED output

                                                  In this example, a library I/O port for a LED is requested from the platform and driven to blink the LED:

                                                  class Toplevel(Elaboratable):
                                                       def elaborate(self, platform):
                                                  @@ -162,7 +162,7 @@ 

                                                  LED output -

                                                  Clock input

                                                  +

                                                  Clock input

                                                  In this example, a clock domain is created and driven from an external clock source:

                                                  class Toplevel(Elaboratable):
                                                       def elaborate(self, platform):
                                                  @@ -180,7 +180,7 @@ 

                                                  Clock input -

                                                  Bidirectional bus

                                                  +

                                                  Bidirectional bus

                                                  This example implements a peripheral for a clocked parallel bus. This peripheral can store and recall one byte of data. The data is stored with a write enable pulse, and recalled with a read enable pulse:

                                                  class Toplevel(Elaboratable):
                                                       def elaborate(self, platform):
                                                  @@ -204,7 +204,7 @@ 

                                                  Bidirectional busFFBuffer for a waveform diagram. Although it increases the maximum clock frequency at which the bus can run, it also makes the bus signaling more complicated.

                                                  -

                                                  Clock forwarding

                                                  +

                                                  Clock forwarding

                                                  In this example of a source-synchronous interface, a clock signal is generated with the same phase as the DDR data signals associated with it:

                                                  class SourceSynchronousOutput(wiring.Component):
                                                       dout: In(16)
                                                  @@ -233,7 +233,7 @@ 

                                                  Clock forwarding -

                                                  Simulation

                                                  +

                                                  Simulation

                                                  The Amaranth simulator, amaranth.sim, cannot simulate core I/O values or I/O buffer instances as it only operates on unidirectionally driven two-state wires. This module provides a simulation-only library I/O port, SimulationPort, so that components that use library I/O buffers can be tested.

                                                  A component that is designed for testing should accept the library I/O ports it will drive as constructor parameters rather than requesting them from the platform directly. Synthesizable designs will instantiate the component with a SingleEndedPort, DifferentialPort, or a platform-specific library I/O port, while tests will instantiate the component with a SimulationPort. Tests are able to inject inputs into the component using sim_port.i, capture the outputs of the component via sim_port.o, and ensure that the component is driving the outputs at the appropriate times using sim_port.oe.

                                                  For example, consider a simple serializer that accepts a stream of multi-bit data words and outputs them bit by bit. It can be tested as follows:

                                                  @@ -291,32 +291,32 @@

                                                  Simulation -

                                                  Ports

                                                  +

                                                  Ports

                                                  -class amaranth.lib.io.Direction
                                                  +class amaranth.lib.io.Direction

                                                  Represents direction of a library I/O port, or of an I/O buffer component.

                                                  -Input = 'i'
                                                  +Input = 'i'

                                                  Input direction (from outside world to Amaranth design).

                                                  -Output = 'o'
                                                  +Output = 'o'

                                                  Output direction (from Amaranth design to outside world).

                                                  -Bidir = 'io'
                                                  +Bidir = 'io'

                                                  Bidirectional (can be switched between input and output).

                                                  -__and__(other)
                                                  +__and__(other)

                                                  Narrow the set of possible directions.

                                                  • self & self returns self.

                                                  • @@ -329,7 +329,7 @@

                                                    Ports
                                                    -class amaranth.lib.io.PortLike
                                                    +class amaranth.lib.io.PortLike

                                                    Represents an abstract library I/O port that can be passed to a buffer.

                                                    The port types supported by most platforms are SingleEndedPort and DifferentialPort. Platforms may define additional port types where appropriate.

                                                    @@ -339,7 +339,7 @@

                                                    Ports

                                                  -abstract property direction
                                                  +abstract property direction

                                                  Direction of the port.

                                                  Return type:
                                                  @@ -350,7 +350,7 @@

                                                  Ports
                                                  -abstract __len__()
                                                  +abstract __len__()

                                                  Computes the width of the port.

                                                  Returns:
                                                  @@ -365,7 +365,7 @@

                                                  Ports
                                                  -abstract __getitem__(key)
                                                  +abstract __getitem__(key)

                                                  Slices the port.

                                                  Returns:
                                                  @@ -381,7 +381,7 @@

                                                  Ports
                                                  -abstract __invert__()
                                                  +abstract __invert__()

                                                  Inverts polarity of the port.

                                                  Inverting polarity of a library I/O port has the same effect as adding inverters to the i and o members of an I/O buffer component for that port.

                                                  @@ -398,7 +398,7 @@

                                                  Ports
                                                  -abstract __add__(other)
                                                  +abstract __add__(other)

                                                  Concatenates two library I/O ports of the same type.

                                                  The direction of the resulting port is:

                                                  -

                                                  Buffers

                                                  +

                                                  Buffers

                                                  -class amaranth.lib.io.Buffer(direction, port)
                                                  +class amaranth.lib.io.Buffer(direction, port)

                                                  A combinational I/O buffer component.

                                                  This buffer can be used on any platform; if the platform does not specialize its implementation, an I/O buffer instance is used.

                                                  @@ -548,7 +548,7 @@

                                                  Buffers
                                                  -class Signature(direction, width)
                                                  +class Signature(direction, width)

                                                  Signature of a combinational I/O buffer.

                                                  Parameters:
                                                  @@ -572,7 +572,7 @@

                                                  Buffers
                                                  -class amaranth.lib.io.FFBuffer(direction, port, *, i_domain=None, o_domain=None)
                                                  +class amaranth.lib.io.FFBuffer(direction, port, *, i_domain=None, o_domain=None)

                                                  A registered I/O buffer component.

                                                  This buffer can be used on any platform; if the platform does not specialize its implementation, an I/O buffer instance is used, combined with reset-less @@ -603,7 +603,7 @@

                                                  Buffers
                                                  -class Signature(direction, width)
                                                  +class Signature(direction, width)

                                                  Signature of a registered I/O buffer.

                                                  Parameters:
                                                  @@ -627,7 +627,7 @@

                                                  Buffers
                                                  -class amaranth.lib.io.DDRBuffer(direction, port, *, i_domain=None, o_domain=None)
                                                  +class amaranth.lib.io.DDRBuffer(direction, port, *, i_domain=None, o_domain=None)

                                                  A double data rate I/O buffer component.

                                                  This buffer is only available on platforms that support double data rate I/O.

                                                  The following diagram defines the timing relationship between the underlying core I/O value @@ -678,7 +678,7 @@

                                                  Buffers
                                                  -class Signature(direction, width)
                                                  +class Signature(direction, width)

                                                  Signature of a double data rate I/O buffer.

                                                  Parameters:
                                                  diff --git a/docs/amaranth/latest/stdlib/memory.html b/docs/amaranth/latest/stdlib/memory.html index a709bcff..f3da7580 100644 --- a/docs/amaranth/latest/stdlib/memory.html +++ b/docs/amaranth/latest/stdlib/memory.html @@ -1,10 +1,10 @@ - + - Memory arrays — Amaranth language & toolchain 0.6.0.dev68 documentation + Memory arrays — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                                  - 0.6.0.dev68 + 0.6.0.dev69
                                                  @@ -116,10 +116,10 @@
                                                  -

                                                  Memory arrays

                                                  +

                                                  Memory arrays

                                                  The amaranth.lib.memory module provides a way to efficiently store data organized as an array of identically shaped rows, which may be addressed (read and/or written) one at a time. This organization is well suited for an efficient implementation in hardware.

                                                  -

                                                  Introduction

                                                  +

                                                  Introduction

                                                  A memory component is accessed through read and write memory ports, which are interface objects with address, data, and enable ports. The address input selects the memory row to be accessed, the enable input determines whether an access will be made, and the data output (for read ports) or data input (for write ports) transfers data between the memory row and the rest of the design. Read ports can be synchronous (where the memory row access is triggered by the active edge of a clock) or asynchronous (where the memory row is accessed continuously); write ports are always synchronous.

                                                  Note

                                                  @@ -140,13 +140,13 @@

                                                  Introduction -

                                                  Examples

                                                  +

                                                  Examples

                                                  First, import the Memory class.

                                                  from amaranth.lib.memory import Memory
                                                   
                                                  -

                                                  Read-only memory

                                                  +

                                                  Read-only memory

                                                  In the following example, a read-only memory is used to output a fixed message in a loop:

                                                  message = b"Hello world\n"
                                                   m.submodules.memory = memory = \
                                                  @@ -165,7 +165,7 @@ 

                                                  Read-only memory

                                                  -

                                                  First-in, first-out queue

                                                  +

                                                  First-in, first-out queue

                                                  In a more complex example, a power-of-2 sized writable memory is used to implement a first-in, first-out queue:

                                                  push = Signal()
                                                   pop  = Signal()
                                                  @@ -191,7 +191,7 @@ 

                                                  First-in, first-out queue

                                                  -

                                                  Simulation

                                                  +

                                                  Simulation

                                                  There are two ways to interact with a memory array in a simulator: requesting a read and/or write port that is used only in a testbench, or directly reading and writing memory contents. In most cases, directly accessing memory contents using MemoryData.__getitem__ is more convenient.

                                                  For example, this testbench will clear the least significant bit of every memory row:

                                                  async def testbench(ctx):
                                                  @@ -202,7 +202,7 @@ 

                                                  Simulation -

                                                  Memory description

                                                  +

                                                  Memory description

                                                  exception amaranth.hdl.AlreadyElaborated
                                                  @@ -211,7 +211,7 @@

                                                  Memory description
                                                  -class amaranth.hdl.MemoryData(*, shape, depth, init, src_loc_at=0)
                                                  +class amaranth.hdl.MemoryData(*, shape, depth, init, src_loc_at=0)

                                                  Abstract description of a memory array.

                                                  A MemoryData object describes the geometry (shape and depth) and the initial contents of a memory array, without specifying the way in which it is accessed. It is conceptually @@ -239,7 +239,7 @@

                                                  Memory description
                                                  -class Init(...)
                                                  +class Init(...)

                                                  Memory initialization data.

                                                  This is a special container used only for initial contents of memories. It is similar to list, but does not support inserting or deleting elements; its length is always @@ -258,7 +258,7 @@

                                                  Memory description
                                                  -__getitem__(index)
                                                  +__getitem__(index)

                                                  Retrieve a memory row for simulation.

                                                  A MemoryData object can be indexed with an int to construct a special value that can be used to read and write the selected memory row in a simulation testbench, @@ -279,10 +279,10 @@

                                                  Memory description -

                                                  Memory component

                                                  +

                                                  Memory component

                                                  -class amaranth.lib.memory.Memory(data, *, src_loc_at=0)
                                                  +class amaranth.lib.memory.Memory(data, *, src_loc_at=0)
                                                  @@ -313,7 +313,7 @@

                                                  Memory component
                                                  -read_port(*, domain='sync', transparent_for=(), src_loc_at=0)
                                                  +read_port(*, domain='sync', transparent_for=(), src_loc_at=0)

                                                  Request a read port.

                                                  If domain is "comb", the created read port is asynchronous and always enabled (with its enable input is tied to Const(1)), and its data output always reflects @@ -338,7 +338,7 @@

                                                  Memory component
                                                  -write_port(*, domain='sync', granularity=None, src_loc_at=0)
                                                  +write_port(*, domain='sync', granularity=None, src_loc_at=0)

                                                  Request a write port.

                                                  The created write port is synchronous, updating the contents of the selected row at each active edge of domain where the enable input is asserted.

                                                  @@ -358,14 +358,14 @@

                                                  Memory component
                                                  -property read_ports
                                                  +property read_ports

                                                  All read ports defined so far.

                                                  This property is provided for the platform.get_memory() override.

                                                  -property write_ports
                                                  +property write_ports

                                                  All write ports defined so far.

                                                  This property is provided for the platform.get_memory() override.

                                                  @@ -374,10 +374,10 @@

                                                  Memory component -

                                                  Memory ports

                                                  +

                                                  Memory ports

                                                  -class amaranth.lib.memory.ReadPort(...)
                                                  +class amaranth.lib.memory.ReadPort(...)

                                                  A read memory port.

                                                  Memory read ports, which are interface objects, can be constructed by calling Memory.read_port() or via ReadPort.Signature.create().

                                                  @@ -395,7 +395,7 @@

                                                  Memory ports
                                                  -class Signature(*, addr_width, shape)
                                                  +class Signature(*, addr_width, shape)

                                                  Signature of a memory read port.

                                                  Parameters:
                                                  @@ -418,7 +418,7 @@

                                                  Memory ports
                                                  -class amaranth.lib.memory.WritePort(...)
                                                  +class amaranth.lib.memory.WritePort(...)

                                                  A write memory port.

                                                  Memory write ports, which are interface objects, can be constructed by calling Memory.write_port() or via WritePort.Signature.create().

                                                  @@ -433,7 +433,7 @@

                                                  Memory ports
                                                  -class Signature(*, addr_width, shape, granularity=None)
                                                  +class Signature(*, addr_width, shape, granularity=None)

                                                  Signature of a memory write port.

                                                  Width of the enable input is determined as follows:

                                                    diff --git a/docs/amaranth/latest/stdlib/meta.html b/docs/amaranth/latest/stdlib/meta.html index 0d6bb251..14b57ad3 100644 --- a/docs/amaranth/latest/stdlib/meta.html +++ b/docs/amaranth/latest/stdlib/meta.html @@ -1,10 +1,10 @@ - + - Interface metadata — Amaranth language & toolchain 0.6.0.dev68 documentation + Interface metadata — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                                    - 0.6.0.dev68 + 0.6.0.dev69
                                                    @@ -115,10 +115,10 @@
                                                    -

                                                    Interface metadata

                                                    +

                                                    Interface metadata

                                                    The amaranth.lib.meta module provides a way to annotate objects in an Amaranth design and exchange these annotations with external tools in a standardized format.

                                                    -

                                                    Introduction

                                                    +

                                                    Introduction

                                                    Many Amaranth designs stay entirely within the Amaranth ecosystem, using the facilities it provides to define, test, and build hardware. In this case, the design is available for exploration using Python code, and metadata is not necessary. However, if an Amaranth design needs to fit into an existing ecosystem, or, conversely, to integrate components developed for another ecosystem, metadata can be used to exchange structured information about the design.

                                                    Consider a simple component:

                                                    class Adder(wiring.Component):
                                                    @@ -177,7 +177,7 @@ 

                                                    Introduction -

                                                    Defining annotations

                                                    +

                                                    Defining annotations

                                                    Consider a simple control and status register (CSR) bus that provides the memory layout of the accessible registers via an annotation:

                                                    class CSRLayoutAnnotation(meta.Annotation):
                                                         schema = {
                                                    @@ -314,7 +314,7 @@ 

                                                    Defining annotations

                                                    -

                                                    Identifying schemas

                                                    +

                                                    Identifying schemas

                                                    An Annotation schema must have a "$id" property, whose value is a URL that serves as its globally unique identifier. The suggested format of this URL is:

                                                    <protocol>://<domain>/schema/<package>/<version>/<path>.json
                                                     
                                                    @@ -335,24 +335,24 @@

                                                    Identifying schemas -

                                                    Reference

                                                    +

                                                    Reference

                                                    -exception amaranth.lib.meta.InvalidSchema
                                                    +exception amaranth.lib.meta.InvalidSchema

                                                    Exception raised when a subclass of Annotation is defined with a non-conformant schema.

                                                    -exception amaranth.lib.meta.InvalidAnnotation
                                                    +exception amaranth.lib.meta.InvalidAnnotation

                                                    Exception raised by Annotation.validate() when the JSON representation of an annotation does not conform to its schema.

                                                    -class amaranth.lib.meta.Annotation
                                                    +class amaranth.lib.meta.Annotation

                                                    Interface annotation.

                                                    Annotations are containers for metadata that can be retrieved from an interface object using the Signature.annotations method.

                                                    @@ -360,7 +360,7 @@

                                                    Reference
                                                    -classmethod __init_subclass__()
                                                    +classmethod __init_subclass__()

                                                    Defining a subclass of Annotation causes its schema to be validated.

                                                    Raises:
                                                    @@ -375,7 +375,7 @@

                                                    Reference
                                                    -schema = { "$id": "...", ... }
                                                    +schema = { "$id": "...", ... }

                                                    Schema of this annotation, expressed in the JSON Schema language.

                                                    Subclasses of Annotation must define this class attribute.

                                                    @@ -387,14 +387,14 @@

                                                    Reference
                                                    -abstract property origin
                                                    +abstract property origin

                                                    Python object described by this Annotation instance.

                                                    Subclasses of Annotation must implement this property.

                                                    -abstract as_json()
                                                    +abstract as_json()

                                                    Convert to a JSON representation.

                                                    Subclasses of Annotation must implement this method.

                                                    JSON representation returned by this method must adhere to schema and pass @@ -412,7 +412,7 @@

                                                    Reference
                                                    -classmethod validate(instance)
                                                    +classmethod validate(instance)

                                                    Validate a JSON representation against schema.

                                                    Parameters:
                                                    diff --git a/docs/amaranth/latest/stdlib/stream.html b/docs/amaranth/latest/stdlib/stream.html index 4e67212b..affab2c9 100644 --- a/docs/amaranth/latest/stdlib/stream.html +++ b/docs/amaranth/latest/stdlib/stream.html @@ -1,10 +1,10 @@ - + - Data streams — Amaranth language & toolchain 0.6.0.dev68 documentation + Data streams — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                                    - 0.6.0.dev68 + 0.6.0.dev69
                                                    @@ -115,10 +115,10 @@
                                                    -

                                                    Data streams

                                                    +

                                                    Data streams

                                                    The amaranth.lib.stream module provides a mechanism for unidirectional exchange of arbitrary data between modules.

                                                    -

                                                    Introduction

                                                    +

                                                    Introduction

                                                    One of the most common flow control mechanisms is ready/valid handshaking, where a producer pushes data to a consumer whenever it becomes available, and the consumer signals to the producer whether it can accept more data. In Amaranth, this mechanism is implemented using an interface with three members:

                                                    • payload (driven by the producer), containing the data;

                                                    • @@ -128,7 +128,7 @@

                                                      Introductionstream.Interface, and defines the exact rules governing the flow of data through it.

                                                    -

                                                    Data transfer rules

                                                    +

                                                    Data transfer rules

                                                    The producer and the consumer must be synchronized: they must belong to the same clock domain, and any control flow modifiers must be applied to both, in the same order.

                                                    Data flows through a stream according to the following four rules:

                                                      @@ -142,7 +142,7 @@

                                                      Introductionvalid and ready.

                                                    -

                                                    Examples

                                                    +

                                                    Examples

                                                    The following examples demonstrate the use of streams for a data processing pipeline that receives serial data input from an external device, transforms it by negating the 2’s complement value, and transmits it to another external device whenever requested. Similar pipelines, albeit more complex, are widely used in DSP applications.

                                                    The use of a unified data transfer mechanism enables uniform testing of individual units, and makes it possible to add a queue to the pipeline using only two additional connections.

                                                    from amaranth.lib import stream, wiring
                                                    @@ -170,7 +170,7 @@ 

                                                    ExamplesRFC 61 do not provide built-in helper functions for testing pending further work on the clock domain system. They will be provided in a later release. For the time being, you can copy the helper functions above to test your designs that use streams.

                                                    -

                                                    Serial receiver

                                                    +

                                                    Serial receiver

                                                    The serial receiver captures the serial output of an external device and converts it to a stream of words. While the ssel signal is high, each low-to-high transition on the sclk input captures the value of the sdat signal; eight consecutive captured bits are assembled into a word (MSB first) and pushed into the pipeline for processing. If the ssel signal is low, no data transmission occurs and the transmitter and the receiver are instead synchronized with each other.

                                                    In this example, the external device does not provide a way to pause data transmission. If the pipeline isn’t ready to accept the next payload, it is necessary to discard data at some point; here, it is done in the serial receiver.

                                                    class SerialReceiver(wiring.Component):
                                                    @@ -244,7 +244,7 @@ 

                                                    Serial receiverstream_serial_receiver.vcd):

                                                    {'signal': [{'name': 'clk', 'wave': 'lpppppppppppppppppppp'}, {}, ['serial', {'name': 'ssel', 'wave': '01................0..'}, {'name': 'sclk', 'wave': '0..101010101010101...'}, {'name': 'sdat', 'wave': '0.=.=.=.=.=.=.=.=....', 'data': ['1', '0', '1', '0', '0', '0', '0', '1']}], {}, ['stream', {'name': 'payload', 'wave': '=..................=.', 'data': ['00', 'A7']}, {'name': 'valid', 'wave': '0..................10'}, {'name': 'ready', 'wave': '1...................0'}]], 'config': {'skin': 'default'}}

                                                    -

                                                    Serial transmitter

                                                    +

                                                    Serial transmitter

                                                    The serial transmitter accepts a stream of words and provides it to the serial input of an external device whenever requested. Its serial interface is the same as that of the serial receiver, with the exception that the sclk and sdat signals are outputs. The ssel signal remains an input; the external device uses it for flow control.

                                                    class SerialTransmitter(wiring.Component):
                                                         ssel: In(1)
                                                    @@ -305,7 +305,7 @@ 

                                                    Serial transmitter -

                                                    Value negator

                                                    +

                                                    Value negator

                                                    The value negator accepts a stream of words, negates the 2’s complement value of these words, and provides the result as a stream of words again. In a practical DSP application, this unit could be replaced with, for example, a FIR filter.

                                                    class ValueNegator(wiring.Component):
                                                         i_stream: In(stream.Signature(signed(8)))
                                                    @@ -345,7 +345,7 @@ 

                                                    Value negator -

                                                    Complete pipeline

                                                    +

                                                    Complete pipeline

                                                    The complete pipeline consists of a serial receiver, a value negator, a FIFO queue, and a serial transmitter connected in series. Without queueing, any momentary mismatch between the rate at which the serial data is produced and consumed would result in data loss. A FIFO queue from the lib.fifo standard library module is used to avoid this problem.

                                                    from amaranth.lib.fifo import SyncFIFOBuffered
                                                     
                                                    @@ -435,11 +435,11 @@ 

                                                    Complete pipeline -

                                                    Reference

                                                    +

                                                    Reference

                                                    Components that communicate using streams must not only use a stream.Interface, but also follow the data transfer rules.

                                                    -class amaranth.lib.stream.Signature(payload_shape, *, payload_init=None, always_valid=False, always_ready=False)
                                                    +class amaranth.lib.stream.Signature(payload_shape, *, payload_init=None, always_valid=False, always_ready=False)

                                                    Signature of a unidirectional data stream.

                                                    Note

                                                    @@ -469,7 +469,7 @@

                                                    Reference
                                                    -class amaranth.lib.stream.Interface(signature, *, path=None, src_loc_at=0)
                                                    +class amaranth.lib.stream.Interface(signature, *, path=None, src_loc_at=0)

                                                    A unidirectional data stream.

                                                    Attributes:
                                                    @@ -478,7 +478,7 @@

                                                    Reference
                                                    -property p
                                                    +property p

                                                    Shortcut for self.payload.

                                                    This shortcut reduces repetition when manipulating the payload, for example:

                                                    m.d.comb += [
                                                    diff --git a/docs/amaranth/latest/stdlib/wiring.html b/docs/amaranth/latest/stdlib/wiring.html
                                                    index 34979d77..b0238da6 100644
                                                    --- a/docs/amaranth/latest/stdlib/wiring.html
                                                    +++ b/docs/amaranth/latest/stdlib/wiring.html
                                                    @@ -1,10 +1,10 @@
                                                     
                                                    -
                                                    +
                                                     
                                                       
                                                     
                                                       
                                                    -  Interfaces and connections — Amaranth language & toolchain 0.6.0.dev68 documentation
                                                    +  Interfaces and connections — Amaranth language & toolchain 0.6.0.dev69 documentation
                                                           
                                                           
                                                           
                                                    @@ -17,9 +17,9 @@
                                                       
                                                             
                                                             
                                                    -        
                                                    -        
                                                    -        
                                                    +        
                                                    +        
                                                    +        
                                                             
                                                         
                                                         
                                                    @@ -41,7 +41,7 @@
                                                                   
                                                               
                                                                   
                                                    - 0.6.0.dev68 + 0.6.0.dev69
                                                    @@ -117,12 +117,12 @@
                                                    -

                                                    Interfaces and connections

                                                    +

                                                    Interfaces and connections

                                                    The amaranth.lib.wiring module provides a way to declare the interfaces between design components and connect them to each other in a reliable and convenient way.

                                                    -

                                                    Introduction

                                                    +

                                                    Introduction

                                                    -

                                                    Overview

                                                    +

                                                    Overview

                                                    This module provides four related facilities:

                                                    1. Description and construction of interface objects via Flow (In and Out), Member, and Signature, as well as the associated container class SignatureMembers. These classes provide the syntax used in defining components, and are also useful for introspection.

                                                    2. @@ -138,7 +138,7 @@

                                                      Overview“Motivation” and “Reusable interfaces” sections describe concepts that are essential for using this module and writing idiomatic Amaranth code. The sections after describe advanced use cases that are only relevant for more complex code.

                                                    -

                                                    Motivation

                                                    +

                                                    Motivation

                                                    Consider a reusable counter with an enable input, configurable limit, and an overflow flag. Using only the core Amaranth language, it could be implemented as:

                                                    class BasicCounter(Elaboratable):
                                                         def __init__(self):
                                                    @@ -222,7 +222,7 @@ 

                                                    Overview -

                                                    Reusable interfaces

                                                    +

                                                    Reusable interfaces

                                                    Consider a more complex example where two components are communicating with a stream that is using ready/valid signaling, where the valid signal indicates that the value of data provided by the source is meaningful, and the ready signal indicates that the sink has consumed the data word:

                                                    class DataProducer(wiring.Component):
                                                         en: In(1)
                                                    @@ -348,7 +348,7 @@ 

                                                    Overview -

                                                    Forwarding interior interfaces

                                                    +

                                                    Forwarding interior interfaces

                                                    Consider a case where a component includes another component as a part of its implementation, and where it is necessary to forward the ports of the inner component, that is, expose them within the outer component’s signature. To use the SimpleStreamSignature definition above in an example:

                                                    class DataProcessorImplementation(wiring.Component):
                                                         source: Out(SimpleStreamSignature(8))
                                                    @@ -398,7 +398,7 @@ 

                                                    Overview -

                                                    Constant inputs

                                                    +

                                                    Constant inputs

                                                    Sometimes, a component must conform to a particular signature, but some of the input ports required by the signature must have a fixed value at all times. This module addresses this case by allowing both Signal and Const objects to be used to implement port members:

                                                    class ProducerRequiringReady(wiring.Component):
                                                         source: Out(SimpleStreamSignature(8))
                                                    @@ -443,7 +443,7 @@ 

                                                    Overview -

                                                    Adapting interfaces

                                                    +

                                                    Adapting interfaces

                                                    Sometimes, a design requires an interface with a particular signature to be used, but the only implementation available is either a component with an incompatible signature or an elaboratable with no signature at all. If this problem cannot be resolved by other means, interface adaptation can be used, where the existing signals are placed into a new interface with the appropriate signature. For example:

                                                    class LegacyAXIDataProducer(Elaboratable):
                                                         def __init__(self):
                                                    @@ -473,7 +473,7 @@ 

                                                    Overviewcreate method of the signature that is required elsewhere in the design.

                                                    -

                                                    Customizing signatures and interfaces

                                                    +

                                                    Customizing signatures and interfaces

                                                    The amaranth.lib.wiring module encourages creation of reusable building blocks. In the examples above, a custom signature, SimpleStreamSignature, was introduced to illustrate the essential concepts necessary to use this module. While sufficient for that goal, it does not demonstrate the full capabilities provided by the module.

                                                    Consider a simple System-on-Chip memory bus with a configurable address width. In an application like that, additional properties and methods could be usefully defined both on the signature (for example, properties to retrieve the parameters of the interface) and on the created interface object (for example, methods to examine the control and status signals). These can be defined as follows:

                                                    from amaranth.lib import enum
                                                    @@ -555,21 +555,21 @@ 

                                                    Overview -

                                                    Paths

                                                    +

                                                    Paths

                                                    Whenever an operation in this module needs to refer to the interior of an object, it accepts or produces a path: a tuple of strings and integers denoting the attribute names and indexes through which an interior value can be extracted. For example, the path ("buses", 0, "cyc") into the object obj corresponds to the Python expression obj.buses[0].cyc.

                                                    When they appear in diagnostics, paths are printed as the corresponding Python expression.

                                                    -

                                                    Signatures

                                                    +

                                                    Signatures

                                                    -class amaranth.lib.wiring.Flow
                                                    +class amaranth.lib.wiring.Flow

                                                    Direction of data flow. This enumeration has two values, Out and In, the meaning of which depends on the context in which they are used.

                                                    -Out
                                                    +Out

                                                    Outgoing data flow.

                                                    When included in a standalone Signature, a port Member with an Out data flow carries data from an initiator to a responder. That is, the signature @@ -583,7 +583,7 @@

                                                    Signatures
                                                    -In
                                                    +In

                                                    Incoming data flow.

                                                    When included in a standalone Signature, a port Member with an In data flow carries data from an responder to a initiator. That is, the signature @@ -597,7 +597,7 @@

                                                    Signatures
                                                    -flip()
                                                    +flip()

                                                    Flip the direction of data flow.

                                                    Returns:
                                                    @@ -611,7 +611,7 @@

                                                    Signatures
                                                    -__call__(description, *, init=None, reset=None, src_loc_at=0)
                                                    +__call__(description, *, init=None, reset=None, src_loc_at=0)

                                                    Create a Member with this data flow and the provided description and initial value.

                                                    @@ -628,19 +628,19 @@

                                                    Signatures
                                                    -amaranth.lib.wiring.Out = Flow.Out
                                                    +amaranth.lib.wiring.Out = Out

                                                    A shortcut for importing Flow.Out as amaranth.lib.wiring.Out.

                                                    -amaranth.lib.wiring.In = Flow.In
                                                    +amaranth.lib.wiring.In = In

                                                    A shortcut for importing Flow.In as amaranth.lib.wiring.In.

                                                    -class amaranth.lib.wiring.Member(flow, description, *, init=None)
                                                    +class amaranth.lib.wiring.Member(flow, description, *, init=None)

                                                    Description of a signature member.

                                                    This class is a discriminated union: its instances describe either a port member or a signature member, and accessing properties for the wrong kind of member raises @@ -656,7 +656,7 @@

                                                    SignaturesIn and Out, e.g. In(unsigned(1)) or Out(stream.Signature(RGBPixel)).

                                                    -flip()
                                                    +flip()

                                                    Flip the data flow of this member.

                                                    Returns:
                                                    @@ -671,7 +671,7 @@

                                                    Signatures
                                                    -array(*dimensions)
                                                    +array(*dimensions)

                                                    Add array dimensions to this member.

                                                    The dimensions passed to this method are prepended to the existing dimensions. For example, Out(1).array(2) describes an array of 2 elements, whereas both @@ -694,7 +694,7 @@

                                                    Signatures
                                                    -property flow
                                                    +property flow

                                                    Data flow of this member.

                                                    Return type:
                                                    @@ -705,7 +705,7 @@

                                                    Signatures
                                                    -property is_port
                                                    +property is_port

                                                    Whether this is a description of a port member.

                                                    Returns:
                                                    @@ -720,7 +720,7 @@

                                                    Signatures
                                                    -property is_signature
                                                    +property is_signature

                                                    Whether this is a description of a signature member.

                                                    Returns:
                                                    @@ -735,7 +735,7 @@

                                                    Signatures
                                                    -property shape
                                                    +property shape

                                                    Shape of a port member.

                                                    Returns:
                                                    @@ -752,7 +752,7 @@

                                                    Signatures
                                                    -property init
                                                    +property init

                                                    Initial value of a port member.

                                                    Returns:
                                                    @@ -769,7 +769,7 @@

                                                    Signatures
                                                    -property signature
                                                    +property signature

                                                    Signature of a signature member.

                                                    Returns:
                                                    @@ -786,7 +786,7 @@

                                                    Signatures
                                                    -property dimensions
                                                    +property dimensions

                                                    Array dimensions.

                                                    A member will usually have no dimensions; in this case it does not describe an array. A single dimension describes one-dimensional array, and so on.

                                                    @@ -804,7 +804,7 @@

                                                    Signatures
                                                    -exception amaranth.lib.wiring.SignatureError
                                                    +exception amaranth.lib.wiring.SignatureError

                                                    This exception is raised when an invalid operation specific to signature manipulation is performed with SignatureMembers. Other exceptions, such as TypeError or NameError, will still be raised where appropriate.

                                                    @@ -812,7 +812,7 @@

                                                    Signatures
                                                    -class amaranth.lib.wiring.SignatureMembers(members=())
                                                    +class amaranth.lib.wiring.SignatureMembers(members=())

                                                    Mapping of signature member names to their descriptions.

                                                    This container, a collections.abc.Mapping, is used to implement the members attribute of signature objects.

                                                    @@ -823,7 +823,7 @@

                                                    Signatures
                                                    -flip()
                                                    +flip()

                                                    Flip the data flow of the members in this mapping.

                                                    Returns:
                                                    @@ -838,7 +838,7 @@

                                                    Signatures
                                                    -__eq__(other)
                                                    +__eq__(other)

                                                    Compare the members in this and another mapping.

                                                    Returns:
                                                    @@ -852,7 +852,7 @@

                                                    Signatures
                                                    -__contains__(name)
                                                    +__contains__(name)

                                                    Check whether a member with a given name exists.

                                                    Return type:
                                                    @@ -863,7 +863,7 @@

                                                    Signatures
                                                    -__getitem__(name)
                                                    +__getitem__(name)

                                                    Retrieves the description of a member with a given name.

                                                    Return type:
                                                    @@ -881,7 +881,7 @@

                                                    Signatures
                                                    -__setitem__(name, member)
                                                    +__setitem__(name, member)

                                                    Stub that forbids addition of members to the collection.

                                                    Raises:
                                                    @@ -892,7 +892,7 @@

                                                    Signatures
                                                    -__delitem__(name)
                                                    +__delitem__(name)

                                                    Stub that forbids removal of members from the collection.

                                                    Raises:
                                                    @@ -903,7 +903,7 @@

                                                    Signatures
                                                    -__iter__()
                                                    +__iter__()

                                                    Iterate through the names of members in the collection.

                                                    Returns:
                                                    @@ -917,7 +917,7 @@

                                                    Signatures
                                                    -flatten(*, path=())
                                                    +flatten(*, path=())

                                                    Recursively iterate through this collection.

                                                    Note

                                                    @@ -948,7 +948,7 @@

                                                    Signatures
                                                    -create(*, path=None, src_loc_at=0)
                                                    +create(*, path=None, src_loc_at=0)

                                                    Create members from their descriptions.

                                                    For each port member, this function creates a Signal with the shape and initial value taken from the member description, and the name constructed from @@ -974,7 +974,7 @@

                                                    Signatures
                                                    -class amaranth.lib.wiring.FlippedSignatureMembers(unflipped)
                                                    +class amaranth.lib.wiring.FlippedSignatureMembers(unflipped)

                                                    Mapping of signature member names to their descriptions, with the directions flipped.

                                                    Although an instance of FlippedSignatureMembers could be created directly, it will be usually created by a call to SignatureMembers.flip().

                                                    @@ -991,7 +991,7 @@

                                                    Signatures
                                                    -flip()
                                                    +flip()

                                                    Flips this mapping back to the original one.

                                                    Returns:
                                                    @@ -1007,7 +1007,7 @@

                                                    Signatures
                                                    -class amaranth.lib.wiring.Signature(members)
                                                    +class amaranth.lib.wiring.Signature(members)

                                                    Description of an interface object.

                                                    An interface object is a Python object that has a signature attribute containing a Signature object, as well as an attribute for every member of its signature. @@ -1024,7 +1024,7 @@

                                                    Signatures
                                                    -flip()
                                                    +flip()

                                                    Flip the data flow of the members in this signature.

                                                    Returns:
                                                    @@ -1042,7 +1042,7 @@

                                                    Signatures
                                                    -property members
                                                    +property members

                                                    Members in this signature.

                                                    Return type:
                                                    @@ -1053,7 +1053,7 @@

                                                    Signatures
                                                    -__eq__(other)
                                                    +__eq__(other)

                                                    Compare this signature with another.

                                                    The behavior of this operator depends on the types of the arguments. If both self and other are instances of the base Signature class, they are compared @@ -1073,7 +1073,7 @@

                                                    Signatures
                                                    -flatten(obj)
                                                    +flatten(obj)

                                                    Recursively iterate through this signature, retrieving member values from an interface object.

                                                    @@ -1107,7 +1107,7 @@

                                                    Signatures
                                                    -is_compliant(obj, *, reasons=None, path=('obj',))
                                                    +is_compliant(obj, *, reasons=None, path=('obj',))

                                                    Check whether an object matches the description in this signature.

                                                    This module places few restrictions on what an interface object may be; it does not prescribe a specific base class or a specific way of constructing the object, only @@ -1157,7 +1157,7 @@

                                                    Signatures
                                                    -create(*, path=None, src_loc_at=0)
                                                    +create(*, path=None, src_loc_at=0)

                                                    Create an interface object from this signature.

                                                    The default Signature.create() implementation consists of one line:

                                                    def create(self, *, path=None, src_loc_at=0):
                                                    @@ -1191,7 +1191,7 @@ 

                                                    Signatures
                                                    -annotations(obj, /)
                                                    +annotations(obj, /)

                                                    Annotate an interface object.

                                                    Subclasses of Signature may override this method to provide annotations for a corresponding interface object. The default implementation provides none.

                                                    @@ -1210,7 +1210,7 @@

                                                    Signatures
                                                    -class amaranth.lib.wiring.FlippedSignature(unflipped)
                                                    +class amaranth.lib.wiring.FlippedSignature(unflipped)

                                                    Description of an interface object, with the members’ directions flipped.

                                                    Although an instance of FlippedSignature could be created directly, it will be usually created by a call to Signature.flip().

                                                    @@ -1251,7 +1251,7 @@

                                                    Signatures
                                                    -flip()
                                                    +flip()

                                                    Flips this signature back to the original one.

                                                    Returns:
                                                    @@ -1265,7 +1265,7 @@

                                                    Signatures
                                                    -__getattr__(name)
                                                    +__getattr__(name)

                                                    Retrieves attribute or method name of the unflipped signature.

                                                    Performs getattr(unflipped, name), ensuring that, if name refers to a property getter or a method, its self argument receives the flipped signature. A class @@ -1274,7 +1274,7 @@

                                                    Signatures
                                                    -__setattr__(name, value)
                                                    +__setattr__(name, value)

                                                    Assigns attribute name of the unflipped signature to value.

                                                    Performs setattr(unflipped, name, value), ensuring that, if name refers to a property setter, its self argument receives the flipped signature.

                                                    @@ -1282,7 +1282,7 @@

                                                    Signatures
                                                    -__delattr__(name)
                                                    +__delattr__(name)

                                                    Removes attribute name of the unflipped signature.

                                                    Performs delattr(unflipped, name), ensuring that, if name refers to a property deleter, its self argument receives the flipped signature.

                                                    @@ -1292,7 +1292,7 @@

                                                    Signatures
                                                    -class amaranth.lib.wiring.SignatureMeta
                                                    +class amaranth.lib.wiring.SignatureMeta

                                                    Metaclass for Signature that makes FlippedSignature its ‘virtual subclass’.

                                                    The object returned by Signature.flip() is an instance of FlippedSignature. @@ -1306,7 +1306,7 @@

                                                    Signatures
                                                    -__subclasscheck__(subclass)
                                                    +__subclasscheck__(subclass)

                                                    Override of issubclass(cls, Signature).

                                                    In addition to the standard behavior of issubclass(), this override makes FlippedSignature a subclass of Signature or any of its subclasses.

                                                    @@ -1314,7 +1314,7 @@

                                                    Signatures
                                                    -__instancecheck__(instance)
                                                    +__instancecheck__(instance)

                                                    Override of isinstance(obj, Signature).

                                                    In addition to the standard behavior of isinstance(), this override makes isinstance(obj, cls) act as isinstance(obj.flip(), cls) where @@ -1325,10 +1325,10 @@

                                                    Signatures -

                                                    Interfaces

                                                    +

                                                    Interfaces

                                                    -class amaranth.lib.wiring.PureInterface(signature, *, path=None, src_loc_at=0)
                                                    +class amaranth.lib.wiring.PureInterface(signature, *, path=None, src_loc_at=0)

                                                    A helper for constructing ad-hoc interfaces.

                                                    The PureInterface helper primarily exists to be used by the default implementation of Signature.create(), but it can also be used in any other context where an interface @@ -1342,7 +1342,7 @@

                                                    Interfaces
                                                    -__init__(signature, *, path=None, src_loc_at=0)
                                                    +__init__(signature, *, path=None, src_loc_at=0)

                                                    Create attributes from a signature.

                                                    The sole method defined by this helper is its constructor, which only defines the self.signature attribute as well as the attributes created from the signature @@ -1367,7 +1367,7 @@

                                                    Interfaces
                                                    -class amaranth.lib.wiring.FlippedInterface(unflipped)
                                                    +class amaranth.lib.wiring.FlippedInterface(unflipped)

                                                    An interface object, with its members’ directions flipped.

                                                    An instance of FlippedInterface should only be created by calling flipped(), which ensures that a FlippedInterface(FlippedInterface(...)) object is never created.

                                                    @@ -1407,7 +1407,7 @@

                                                    Interfaces
                                                    -property signature
                                                    +property signature

                                                    Signature of the flipped interface.

                                                    Returns:
                                                    @@ -1421,7 +1421,7 @@

                                                    Interfaces
                                                    -__eq__(other)
                                                    +__eq__(other)

                                                    Compare this flipped interface with another.

                                                    Returns:
                                                    @@ -1436,7 +1436,7 @@

                                                    Interfaces
                                                    -__getattr__(name)
                                                    +__getattr__(name)

                                                    Retrieves attribute or method name of the unflipped interface.

                                                    Performs getattr(unflipped, name), with the following caveats:

                                                      @@ -1449,7 +1449,7 @@

                                                      Interfaces
                                                      -__setattr__(name, value)
                                                      +__setattr__(name, value)

                                                      Assigns attribute name of the unflipped interface to value.

                                                      Performs setattr(unflipped, name, value), with the following caveats:

                                                        @@ -1461,7 +1461,7 @@

                                                        Interfaces
                                                        -__delattr__(name)
                                                        +__delattr__(name)

                                                        Removes attribute name of the unflipped interface.

                                                        Performs delattr(unflipped, name), ensuring that, if name refers to a property deleter, its self argument receives the flipped interface.

                                                        @@ -1471,7 +1471,7 @@

                                                        Interfaces
                                                        -amaranth.lib.wiring.flipped(interface)
                                                        +amaranth.lib.wiring.flipped(interface)

                                                        Flip the data flow of the members of the interface object interface.

                                                        If an interface object is flipped twice, returns the original object: flipped(flipped(interface)) is interface. Otherwise, wraps interface in @@ -1482,17 +1482,17 @@

                                                        Interfaces -

                                                        Making connections

                                                        +

                                                        Making connections

                                                        -exception amaranth.lib.wiring.ConnectionError
                                                        +exception amaranth.lib.wiring.ConnectionError

                                                        Exception raised when the connect() function is requested to perform an impossible, meaningless, or forbidden connection.

                                                        -amaranth.lib.wiring.connect(m, *args, **kwargs)
                                                        +amaranth.lib.wiring.connect(m, *args, **kwargs)

                                                        Connect interface objects to each other.

                                                        This function creates connections between ports of several interface objects. (Any number of interface objects may be provided; in most cases it is two.)

                                                        @@ -1535,10 +1535,10 @@

                                                        Making connections -

                                                        Components

                                                        +

                                                        Components

                                                        -class amaranth.lib.wiring.Component(*args, src_loc_at=0, **kwargs)
                                                        +class amaranth.lib.wiring.Component(*args, src_loc_at=0, **kwargs)

                                                        Base class for elaboratable interface objects.

                                                        A component is an Elaboratable whose interaction with other parts of the design is defined by its signature. Most if not all elaboratables in idiomatic Amaranth code should be @@ -1587,7 +1587,7 @@

                                                        Components
                                                        -property signature
                                                        +property signature

                                                        Signature of the component.

                                                        Warning

                                                        @@ -1599,7 +1599,7 @@

                                                        Components
                                                        -property metadata
                                                        +property metadata

                                                        Metadata attached to the component.

                                                        Return type:
                                                        @@ -1612,17 +1612,17 @@

                                                        Components -

                                                        Component metadata

                                                        +

                                                        Component metadata

                                                        -exception amaranth.lib.wiring.InvalidMetadata
                                                        +exception amaranth.lib.wiring.InvalidMetadata

                                                        Exception raised by ComponentMetadata.validate() when the JSON representation of a component’s metadata does not conform to its schema.

                                                        -class amaranth.lib.wiring.ComponentMetadata(origin)
                                                        +class amaranth.lib.wiring.ComponentMetadata(origin)

                                                        Component metadata.

                                                        Component metadata describes the interface of a Component and can be exported to JSON for interoperability with non-Amaranth tooling.

                                                        @@ -1633,7 +1633,7 @@

                                                        Component metadata
                                                        -schema = { "$id": "https://amaranth-lang.org/schema/amaranth/0.5/component.json", ... }
                                                        +schema = { "$id": "https://amaranth-lang.org/schema/amaranth/0.5/component.json", ... }

                                                        Schema of component metadata, expressed in the JSON Schema language.

                                                        A copy of this schema can be retrieved from amaranth-lang.org.

                                                        @@ -1645,7 +1645,7 @@

                                                        Component metadata
                                                        -property origin
                                                        +property origin

                                                        Component described by this metadata.

                                                        Return type:
                                                        @@ -1656,7 +1656,7 @@

                                                        Component metadata
                                                        -classmethod validate(instance)
                                                        +classmethod validate(instance)

                                                        Validate a JSON representation of component metadata against schema.

                                                        This method does not validate annotations of the interface members, and consequently does not make network requests.

                                                        @@ -1673,7 +1673,7 @@

                                                        Component metadata
                                                        -as_json()
                                                        +as_json()

                                                        Translate to JSON.

                                                        Returns:
                                                        diff --git a/docs/amaranth/latest/tutorial.html b/docs/amaranth/latest/tutorial.html index dbdbf8c6..09c2d0d1 100644 --- a/docs/amaranth/latest/tutorial.html +++ b/docs/amaranth/latest/tutorial.html @@ -1,10 +1,10 @@ - + - Tutorial — Amaranth language & toolchain 0.6.0.dev68 documentation + Tutorial — Amaranth language & toolchain 0.6.0.dev69 documentation @@ -17,9 +17,9 @@ - - - + + + @@ -41,7 +41,7 @@
                                                        - 0.6.0.dev68 + 0.6.0.dev69
                                                        @@ -96,7 +96,7 @@
                                                        -

                                                        Tutorial

                                                        +

                                                        Tutorial

                                                        Todo

                                                        The official tutorial is still being written. Until it’s ready, consider following one of the tutorials written by the Amaranth community: