diff --git a/.doctrees/api.doctree b/.doctrees/api.doctree index 7a102a68a..12c95543f 100644 Binary files a/.doctrees/api.doctree and b/.doctrees/api.doctree differ diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle index f54dbfe09..9b8ef26d3 100644 Binary files a/.doctrees/environment.pickle and b/.doctrees/environment.pickle differ diff --git a/.doctrees/modules-coreblocks.doctree b/.doctrees/modules-coreblocks.doctree new file mode 100644 index 000000000..5d4b1f95b Binary files /dev/null and b/.doctrees/modules-coreblocks.doctree differ diff --git a/.doctrees/modules-transactron.doctree b/.doctrees/modules-transactron.doctree new file mode 100644 index 000000000..decb78f5d Binary files /dev/null and b/.doctrees/modules-transactron.doctree differ diff --git a/.doctrees/transactron.doctree b/.doctrees/transactron.doctree new file mode 100644 index 000000000..0bd5f571c Binary files /dev/null and b/.doctrees/transactron.doctree differ diff --git a/Assumptions.html b/Assumptions.html index f047c5844..db57555c9 100644 --- a/Assumptions.html +++ b/Assumptions.html @@ -104,7 +104,7 @@

List of assumptions made during development

© Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

diff --git a/Current_graph.html b/Current_graph.html index 6673a38a8..ed40ff0f5 100644 --- a/Current_graph.html +++ b/Current_graph.html @@ -517,7 +517,7 @@

Full transaction-method graph

© Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

diff --git a/Development_environment.html b/Development_environment.html index cdb773f02..854f805e9 100644 --- a/Development_environment.html +++ b/Development_environment.html @@ -178,7 +178,7 @@

build_docs.sh

© Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

diff --git a/Home.html b/Home.html index aa2cbd836..bdb1bce2c 100644 --- a/Home.html +++ b/Home.html @@ -129,7 +129,7 @@

Documentation

© Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

diff --git a/Problem-checklist.html b/Problem-checklist.html index 1a40e1386..6888a779a 100644 --- a/Problem-checklist.html +++ b/Problem-checklist.html @@ -105,7 +105,7 @@

Problem checklist

© Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

diff --git a/Transactions.html b/Transactions.html index a6f672497..602d78c65 100644 --- a/Transactions.html +++ b/Transactions.html @@ -267,7 +267,7 @@

Transaction and method nesting

© Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

diff --git a/_sources/api.md.txt b/_sources/api.md.txt index ab2def980..5daa246b7 100644 --- a/_sources/api.md.txt +++ b/_sources/api.md.txt @@ -1,5 +1,6 @@ # API ```{eval-rst} -.. include:: modules.rst -``` \ No newline at end of file +.. include:: modules-coreblocks.rst +.. include:: modules-transactron.rst +``` diff --git a/_sources/modules-coreblocks.rst.txt b/_sources/modules-coreblocks.rst.txt new file mode 100644 index 000000000..a163e779b --- /dev/null +++ b/_sources/modules-coreblocks.rst.txt @@ -0,0 +1,7 @@ +coreblocks +========== + +.. toctree:: + :maxdepth: 4 + + coreblocks diff --git a/_sources/modules-transactron.rst.txt b/_sources/modules-transactron.rst.txt new file mode 100644 index 000000000..04795e606 --- /dev/null +++ b/_sources/modules-transactron.rst.txt @@ -0,0 +1,7 @@ +transactron +=========== + +.. toctree:: + :maxdepth: 4 + + transactron diff --git a/_sources/transactron.rst.txt b/_sources/transactron.rst.txt new file mode 100644 index 000000000..c39770fb0 --- /dev/null +++ b/_sources/transactron.rst.txt @@ -0,0 +1,45 @@ +transactron package +=================== + +Submodules +---------- + +transactron.core module +----------------------- + +.. automodule:: transactron.core + :members: + :undoc-members: + :show-inheritance: + +transactron.graph module +------------------------ + +.. automodule:: transactron.graph + :members: + :undoc-members: + :show-inheritance: + +transactron.lib module +---------------------- + +.. automodule:: transactron.lib + :members: + :undoc-members: + :show-inheritance: + +transactron.tracing module +-------------------------- + +.. automodule:: transactron.tracing + :members: + :undoc-members: + :show-inheritance: + +Module contents +--------------- + +.. automodule:: transactron + :members: + :undoc-members: + :show-inheritance: diff --git a/api.html b/api.html index 4ce01b157..349c42b86 100644 --- a/api.html +++ b/api.html @@ -58,6 +58,10 @@
  • coreblocks package
  • +
  • transactron +
  • @@ -187,6 +191,22 @@

    coreblocks +

    transactron

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

    coreblocks

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/auto_graph.html b/auto_graph.html index 9e26b5ac9..9e076984f 100644 --- a/auto_graph.html +++ b/auto_graph.html @@ -509,7 +509,7 @@

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/components/icache.html b/components/icache.html index 936d4bcf1..68e6aa55d 100644 --- a/components/icache.html +++ b/components/icache.html @@ -131,7 +131,7 @@

    Address mapping example

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/coreblocks.frontend.html b/coreblocks.frontend.html index 1861f1a13..c79de9603 100644 --- a/coreblocks.frontend.html +++ b/coreblocks.frontend.html @@ -98,7 +98,7 @@

    Submodules
    -__init__(gen_params: GenParams, get_raw: Method, push_decoded: Method) None
    +__init__(gen_params: GenParams, get_raw: Method, push_decoded: Method) None
    Parameters
    @@ -203,7 +203,7 @@

    Submodules
    -__init__(gen_params: GenParams, icache: ICacheInterface, cont: Method) None
    +__init__(gen_params: GenParams, icache: ICacheInterface, cont: Method) None
    Parameters
    @@ -229,7 +229,7 @@

    Submodules
    -__init__(gen_params: GenParams, icache: ICacheInterface, cont: Method) None
    +__init__(gen_params: GenParams, icache: ICacheInterface, cont: Method) None
    Parameters
    @@ -331,17 +331,17 @@

    Submodules
    -accept_res: Method
    +accept_res: Method

    -flush: Method
    +flush: Method
    -issue_req: Method
    +issue_req: Method
    @@ -404,7 +404,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/coreblocks.fu.html b/coreblocks.fu.html index 038863b2b..86d59754a 100644 --- a/coreblocks.fu.html +++ b/coreblocks.fu.html @@ -796,7 +796,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/coreblocks.fu.unsigned_multiplication.html b/coreblocks.fu.unsigned_multiplication.html index 43ab00b98..92437d06d 100644 --- a/coreblocks.fu.unsigned_multiplication.html +++ b/coreblocks.fu.unsigned_multiplication.html @@ -237,7 +237,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/coreblocks.html b/coreblocks.html index d9257e61f..4bb4a2d2b 100644 --- a/coreblocks.html +++ b/coreblocks.html @@ -218,7 +218,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/coreblocks.params.html b/coreblocks.params.html index 347c9147a..c3106a30b 100644 --- a/coreblocks.params.html +++ b/coreblocks.params.html @@ -1952,7 +1952,7 @@

    Submodules
    unifier
    -

    alias of Collector

    +

    alias of Collector

    @@ -1960,7 +1960,7 @@

    Submodules
    class coreblocks.params.keys.ExceptionReportKey
    -

    Bases: SimpleKey[Method]

    +

    Bases: SimpleKey[Method]

    __init__() None
    @@ -1991,7 +1991,7 @@

    Submodules
    unifier
    -

    alias of MethodTryProduct

    +

    alias of MethodTryProduct

    @@ -2363,7 +2363,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/coreblocks.peripherals.html b/coreblocks.peripherals.html index 9e8ea079f..9829f061d 100644 --- a/coreblocks.peripherals.html +++ b/coreblocks.peripherals.html @@ -348,7 +348,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/coreblocks.scheduler.html b/coreblocks.scheduler.html index f03ffd115..88df9ac02 100644 --- a/coreblocks.scheduler.html +++ b/coreblocks.scheduler.html @@ -108,7 +108,7 @@

    Submodules
    -__init__(*, get_instr: Method, get_free_reg: Method, rat_rename: Method, rob_put: Method, rf_read1: Method, rf_read2: Method, reservation_stations: Sequence[tuple[coreblocks.utils.protocols.FuncBlock, set[coreblocks.params.optypes.OpType]]], gen_params: GenParams)
    +__init__(*, get_instr: Method, get_free_reg: Method, rat_rename: Method, rob_put: Method, rf_read1: Method, rf_read2: Method, reservation_stations: Sequence[tuple[coreblocks.utils.protocols.FuncBlock, set[coreblocks.params.optypes.OpType]]], gen_params: GenParams)
    Parameters
    @@ -154,7 +154,7 @@

    Submodules
    -__init__(*, gen_params: GenParams, get_ready: Method, take_row: Method, issue: Method)
    +__init__(*, gen_params: GenParams, get_ready: Method, take_row: Method, issue: Method)
    Parameters
    @@ -191,7 +191,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/coreblocks.stages.html b/coreblocks.stages.html index ed6420019..3e94808e3 100644 --- a/coreblocks.stages.html +++ b/coreblocks.stages.html @@ -103,7 +103,7 @@

    Submodules
    -__init__(*, gen: GenParams, get_result: Method, rob_mark_done: Method, rs_write_val: Method, rf_write_val: Method)
    +__init__(*, gen: GenParams, get_result: Method, rob_mark_done: Method, rs_write_val: Method, rf_write_val: Method)
    Parameters
    @@ -150,7 +150,7 @@

    Submodules
    -get_extra_method(item: UnifierKey) Method
    +get_extra_method(item: UnifierKey) Method

    @@ -164,7 +164,7 @@

    SubmodulesElaboratable

    -__init__(gen_params: GenParams, *, rob_peek: Method, rob_retire: Method, r_rat_commit: Method, free_rf_put: Method, rf_free: Method, precommit: Method, exception_cause_get: Method)
    +__init__(gen_params: GenParams, *, rob_peek: Method, rob_retire: Method, r_rat_commit: Method, free_rf_put: Method, rf_free: Method, precommit: Method, exception_cause_get: Method)

    @@ -266,7 +266,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/coreblocks.structs_common.html b/coreblocks.structs_common.html index 5856b8069..6d16afa88 100644 --- a/coreblocks.structs_common.html +++ b/coreblocks.structs_common.html @@ -351,14 +351,14 @@

    SubmodulesElaboratable

    -__init__(gp: GenParams, rob_get_indices: Method)
    +__init__(gp: GenParams, rob_get_indices: Method)

    -coreblocks.structs_common.exception.should_update_prioriy(m: TModule, current_cause: Value, new_cause: Value) Value
    +coreblocks.structs_common.exception.should_update_prioriy(m: TModule, current_cause: Value, new_cause: Value) Value
    @@ -446,7 +446,7 @@

    Submodules

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/coreblocks.utils.html b/coreblocks.utils.html index a060bb719..34b60dc3b 100644 --- a/coreblocks.utils.html +++ b/coreblocks.utils.html @@ -20,6 +20,7 @@ + @@ -173,22 +174,22 @@

    Submodules
    -get_result: Method
    +get_result: Method

    -insert: Method
    +insert: Method
    -select: Method
    +select: Method
    -update: Method
    +update: Method
    @@ -204,12 +205,12 @@

    Submodules
    -accept: Method
    +accept: Method

    -issue: Method
    +issue: Method
    @@ -225,7 +226,7 @@

    Submodules
    -method: Method
    +method: Method
    @@ -459,13 +460,14 @@

    Submodules +

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/genindex.html b/genindex.html index a59caa45e..0c204333d 100644 --- a/genindex.html +++ b/genindex.html @@ -307,6 +307,68 @@

    _

  • (coreblocks.utils.protocols.Unifier method)
  • (coreblocks.utils.utils.ModuleConnector method) +
  • +
  • (transactron.core.Method method) +
  • +
  • (transactron.core.TModule method) +
  • +
  • (transactron.core.Transaction method) +
  • +
  • (transactron.core.TransactionContext method) +
  • +
  • (transactron.core.TransactionManager method) +
  • +
  • (transactron.core.TransactionModule method) +
  • +
  • (transactron.graph.OwnershipGraph method) +
  • +
  • (transactron.lib.Adapter method) +
  • +
  • (transactron.lib.AdapterTrans method) +
  • +
  • (transactron.lib.CatTrans method) +
  • +
  • (transactron.lib.ClickIn method) +
  • +
  • (transactron.lib.ClickOut method) +
  • +
  • (transactron.lib.Collector method) +
  • +
  • (transactron.lib.Connect method) +
  • +
  • (transactron.lib.ConnectAndTransformTrans method) +
  • +
  • (transactron.lib.ConnectTrans method) +
  • +
  • (transactron.lib.FIFO method) +
  • +
  • (transactron.lib.Forwarder method) +
  • +
  • (transactron.lib.ManyToOneConnectTrans method) +
  • +
  • (transactron.lib.MemoryBank method) +
  • +
  • (transactron.lib.MethodFilter method) +
  • +
  • (transactron.lib.MethodProduct method) +
  • +
  • (transactron.lib.MethodTransformer method) +
  • +
  • (transactron.lib.MethodTryProduct method) +
  • +
  • (transactron.lib.Serializer method) +
  • +
  • (transactron.Method method) +
  • +
  • (transactron.TModule method) +
  • +
  • (transactron.Transaction method) +
  • +
  • (transactron.TransactionContext method) +
  • +
  • (transactron.TransactionManager method) +
  • +
  • (transactron.TransactionModule method)
  • @@ -336,6 +398,10 @@

    A

  • accept (coreblocks.utils.protocols.FuncUnit attribute)
  • accept_res (coreblocks.frontend.icache.ICacheInterface attribute) +
  • +
  • Adapter (class in transactron.lib) +
  • +
  • AdapterTrans (class in transactron.lib)
  • ADD (coreblocks.params.isa.Funct3 attribute) @@ -345,10 +411,16 @@

    A

  • add_dependency() (coreblocks.params.dependencies.DependencyManager method)
  • -
  • ADDRESS_GENERATION (coreblocks.params.optypes.OpType attribute) +
  • add_transaction() (transactron.core.TransactionManager method) + +
  • auto_debug_signals() (in module coreblocks.utils.debug_signals)
  • +
  • AvoidedIf() (transactron.core.TModule method) + +
  • @@ -431,10 +509,10 @@

    B

  • (coreblocks.params.isa.Funct7 attribute)
  • - - + - + @@ -1757,6 +2027,10 @@

    R

  • (coreblocks.params.isa.Funct3 attribute)
  • +
  • remember() (transactron.graph.OwnershipGraph method) +
  • +
  • remember_field() (transactron.graph.OwnershipGraph method) +
  • REMU (coreblocks.fu.div_unit.DivFn.Fn attribute)
  • - - + @@ -1999,8 +2297,6 @@

    T

  • T4 (coreblocks.params.isa.Registers attribute)
  • - - + +

    W

    @@ -2272,7 +2661,7 @@

    Z

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/index.html b/index.html index 8abe6c325..02de1ed30 100644 --- a/index.html +++ b/index.html @@ -193,6 +193,10 @@

    Coreblockscoreblocks package +
  • transactron +
  • @@ -210,7 +214,7 @@

    Coreblocks

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/miscellany/exceptionsSummary.html b/miscellany/exceptionsSummary.html index e060f882f..56c4f455a 100644 --- a/miscellany/exceptionsSummary.html +++ b/miscellany/exceptionsSummary.html @@ -271,7 +271,7 @@

    Summary

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/modules-coreblocks.html b/modules-coreblocks.html new file mode 100644 index 000000000..10318b104 --- /dev/null +++ b/modules-coreblocks.html @@ -0,0 +1,208 @@ + + + + + + coreblocks — Coreblocks documentation + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    coreblocks

    +
    + +
    +
    + + +
    +
    +
    + +
    + +
    +

    © Copyright Kuźnia Rdzeni, 2023. + Last updated on 10:23 2023-10-07. +

    +
    + + + +
    +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/modules-transactron.html b/modules-transactron.html new file mode 100644 index 000000000..5312e8f4d --- /dev/null +++ b/modules-transactron.html @@ -0,0 +1,125 @@ + + + + + + transactron — Coreblocks documentation + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv index 3098f8adf..90b245346 100644 Binary files a/objects.inv and b/objects.inv differ diff --git a/py-modindex.html b/py-modindex.html index 74953d614..7a67ca455 100644 --- a/py-modindex.html +++ b/py-modindex.html @@ -84,7 +84,8 @@

    Python Module Index

    - c + c | + t
    @@ -377,6 +378,35 @@

    Python Module Index

    + + + + + + + + + + + + + + + + +
        coreblocks.utils.utils
     
    + t
    + transactron +
        + transactron.core +
        + transactron.graph +
        + transactron.lib +
        + transactron.tracing +
    @@ -388,7 +418,7 @@

    Python Module Index

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/scheduler/Overview.html b/scheduler/Overview.html index f44b1b625..b1ae161ef 100644 --- a/scheduler/Overview.html +++ b/scheduler/Overview.html @@ -146,7 +146,7 @@

    More detailed description of each block

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/search.html b/search.html index fd74b4bed..4ade9dadb 100644 --- a/search.html +++ b/search.html @@ -101,7 +101,7 @@

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/searchindex.js b/searchindex.js index a0edbf41b..ed350e5ed 100644 --- a/searchindex.js +++ b/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["Assumptions", "Current_graph", "Development_environment", "Home", "Problem-checklist", "Transactions", "api", "auto_graph", "components/icache", "coreblocks", "coreblocks.frontend", "coreblocks.fu", "coreblocks.fu.unsigned_multiplication", "coreblocks.params", "coreblocks.peripherals", "coreblocks.scheduler", "coreblocks.stages", "coreblocks.structs_common", "coreblocks.utils", "index", "miscellany/exceptionsSummary", "modules", "scheduler/Overview", "shared_structs/Implementation/RS_impl", "shared_structs/RS", "synthesis/Synthesis"], "filenames": ["Assumptions.md", "Current_graph.md", "Development_environment.md", "Home.md", "Problem-checklist.md", "Transactions.md", "api.md", "auto_graph.rst", "components/icache.md", "coreblocks.rst", "coreblocks.frontend.rst", "coreblocks.fu.rst", "coreblocks.fu.unsigned_multiplication.rst", "coreblocks.params.rst", "coreblocks.peripherals.rst", "coreblocks.scheduler.rst", "coreblocks.stages.rst", "coreblocks.structs_common.rst", "coreblocks.utils.rst", "index.md", "miscellany/exceptionsSummary.md", "modules.rst", "scheduler/Overview.md", "shared_structs/Implementation/RS_impl.md", "shared_structs/RS.md", "synthesis/Synthesis.md"], "titles": ["List of assumptions made during development", "Full transaction-method graph", "Development environment", "Introduction", "Problem checklist", "Documentation for Coreblocks transaction framework", "API", "<no title>", "Instruction Cache", "coreblocks package", "coreblocks.frontend package", "coreblocks.fu package", "coreblocks.fu.unsigned_multiplication package", "coreblocks.params package", "coreblocks.peripherals package", "coreblocks.scheduler package", "coreblocks.stages package", "coreblocks.structs_common package", "coreblocks.utils package", "Coreblocks", "Summary of papers about interrupts", "coreblocks", "Scheduler overview", "Proposition of Reservation Station implementation", "Reservation Station", "Synthesis"], "terms": {"rf": [0, 6, 9, 16, 20, 21, 23, 24], "ha": [0, 2, 4, 10, 15, 17, 18, 20, 23], "data": [0, 10, 13, 14, 17, 18, 19, 24], "forward": 0, "from": [0, 2, 3, 4, 5, 10, 13, 14, 15, 16, 17, 18, 20, 23, 24, 25], "tomasulo": 0, "announc": [0, 16, 17], "bu": [0, 13, 14], "read": [0, 4, 5, 13, 14, 17, 18, 19], "x0": [0, 13], "rf0": 0, "return": [0, 5, 8, 11, 13, 14, 18, 20], "0": [0, 10, 11, 13, 15, 17, 23, 24], "write": [0, 5, 10, 17, 18, 20, 24], "i": [0, 2, 3, 5, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 22, 23, 24, 25], "noop": 0, "separ": [0, 22], "r": [0, 2, 6, 9, 13, 15, 16, 20, 21, 22, 23, 24], "each": [0, 10, 11, 13, 14, 17, 19, 20, 23, 24, 25], "fu": [0, 6, 9, 13, 16, 17, 21, 23, 24], "writeback": 0, "stage": [0, 6, 9, 17, 21], "save": [0, 2, 13, 16, 20, 23, 24, 25], "rob": [0, 6, 9, 15, 16, 20, 21, 22, 23, 24], "after": [0, 5, 8, 10, 14, 20, 22], "get": [0, 2, 10, 11, 12, 13, 15, 16, 18, 19], "output": [0, 2, 10, 14, 16, 17, 20, 23, 24, 25], "commit": [0, 2, 17, 20, 25], "updat": [0, 16, 17, 18], "rat": [0, 6, 9, 15, 20, 21], "In": [2, 3, 5, 15, 18, 19, 24, 25], "order": [2, 3, 5, 8, 13, 15, 19, 25], "prepar": [2, 15, 20], "pleas": [2, 4, 5, 13], "follow": [2, 5, 8, 11, 15, 18, 23, 25], "step": [2, 5, 10, 15, 20], "below": 2, "instal": [2, 25], "python": [2, 5, 18], "3": [2, 11, 13, 17, 18], "10": [2, 8, 13, 20], "interpret": [2, 13], "pip": 2, "packag": [2, 6, 19, 21], "manag": [2, 11, 13, 19], "option": [2, 5, 11, 13, 17, 18], "creat": [2, 10, 12, 18], "virtual": 2, "python3": 2, "m": [2, 5, 13, 17, 18, 20], "venv": 2, "project": [2, 3, 20, 25], "directori": [2, 3], "activ": 2, "gener": [2, 3, 4, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 25], "bin": 2, "all": [2, 4, 5, 13, 14, 17, 18, 19, 20, 25], "requir": [2, 8, 17, 19, 20], "librari": [2, 19], "pip3": 2, "dev": 2, "txt": 2, "riscv64": 2, "unknown": [2, 13], "elf": 2, "binutil": 2, "your": [2, 4], "favourit": 2, "On": 2, "debian": 2, "base": [2, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20], "distro": 2, "call": [2, 4, 5, 10, 15, 17, 23], "arch": [2, 13], "precommit": [2, 16], "hook": 2, "pre": 2, "thi": [2, 4, 5, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 23, 24, 25], "automat": [2, 17, 18], "run": [2, 5, 25], "linter": 2, "befor": [2, 4, 13, 14, 22], "The": [2, 3, 8, 10, 11, 13, 14, 16, 18, 19, 20, 22, 23, 24], "contain": [2, 5, 13, 18], "number": [2, 12, 13, 14, 16, 18, 20, 25], "which": [2, 3, 5, 8, 10, 11, 15, 16, 18, 20, 22, 23, 24], "ar": [2, 3, 4, 5, 8, 13, 14, 16, 17, 18, 20, 22, 23, 24, 25], "ci": [2, 25], "also": [2, 5, 16], "intend": 2, "local": [2, 13], "thei": [2, 5, 14, 17, 20, 22], "unit": [2, 8, 10, 11, 12, 13, 14, 15, 16, 17, 22], "test": [2, 4, 13, 18, 25], "By": 2, "default": [2, 13, 14, 18], "everi": [2, 10, 11, 14], "avail": [2, 3, 13, 14, 15, 17, 25], "specif": [2, 8, 13, 20], "file": [2, 13, 18, 20], "can": [2, 3, 5, 8, 13, 14, 16, 17, 18, 20, 22, 23, 25], "test_transact": 2, "an": [2, 3, 4, 5, 8, 10, 11, 13, 15, 16, 17, 18, 20, 23], "exampl": [2, 5, 13, 17, 18, 19, 23, 25], "One": [2, 18, 20], "even": [2, 20], "class": [2, 5, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18], "testschedul": 2, "Or": [2, 5], "method": [2, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19], "test_singl": 2, "argument": [2, 5, 14, 15, 18, 24], "actual": [2, 10, 19], "search": 2, "within": [2, 12], "full": [2, 13, 18, 19, 20], "name": [2, 5, 18, 25], "match": [2, 18, 23, 24], "queri": 2, "thank": 2, "given": [2, 5, 18, 23], "uniqu": 2, "just": [2, 5], "l": [2, 13], "list": [2, 4, 10, 11, 13, 14, 17, 18, 19], "help": [2, 20, 25], "e": [2, 4, 10, 13, 18, 20], "g": [2, 4, 10, 13, 18, 20], "find": [2, 20], "parameter": 2, "t": [2, 4, 5, 10, 13, 18, 20, 23, 25], "trace": 2, "waveform": 2, "vcd": 2, "format": [2, 5, 11, 18], "gtkw": [2, 18], "gtkwave": [2, 18], "tool": [2, 12, 25], "__traces__": 2, "debug": [2, 18], "driven": 2, "v": [2, 3, 8, 13, 20, 23], "verbos": [2, 25], "make": [2, 3, 4, 10, 11, 20], "runner": 2, "more": [2, 16, 19, 20, 25], "It": [2, 5, 10, 11, 12, 13, 15, 16, 20, 22, 23], "print": 2, "being": [2, 14, 18], "check": [2, 4, 18, 20, 23, 24], "code": [2, 3, 4, 5, 18, 20], "type": [2, 10, 11, 13, 18], "should": [2, 3, 5, 8, 10, 13, 14, 15, 16, 18, 20, 22, 23, 24], "subcommand": 2, "filenam": 2, "main": [2, 20, 22], "reformat": 2, "black": 2, "check_format": 2, "verifi": 2, "flake8": 2, "check_typ": 2, "pyright": 2, "same": [2, 5, 12, 13, 18], "when": [2, 4, 5, 10, 14, 18, 20, 23, 24], "confront": 2, "would": [2, 13, 20], "messag": 2, "you": [2, 4, 23, 25], "mai": [2, 25], "diff": 2, "wai": [2, 5, 10, 11, 13, 20], "displai": 2, "chang": [2, 5, 23], "appli": [2, 4, 20], "chose": 2, "locat": [2, 3, 22], "issu": [2, 8, 10, 11, 12, 15, 18], "visual": 2, "core": [2, 6, 10, 11, 12, 13, 15, 16, 17, 20, 21, 25], "architectur": [2, 20], "graph": [2, 19, 25], "one": [2, 5, 8, 10, 11, 14, 16, 18, 20, 22, 23, 24], "support": [2, 10, 13, 15, 19], "need": [2, 5, 10, 14, 20, 23, 25], "pass": [2, 5, 16, 17, 18], "appropri": [2, 23], "p": [2, 13], "prune": 2, "remov": [2, 20], "disconnect": 2, "node": 2, "f": [2, 13, 15, 25], "select": [2, 10, 11, 14, 15, 16, 17, 18], "elk": 2, "eclips": 2, "layout": [2, 4, 5, 6, 9, 10, 14, 15, 16, 18, 21], "kernel": [2, 20], "dot": 2, "graphviz": 2, "mermaid": 2, "document": [2, 19], "sphinx": 2, "html": [2, 3], "build": [2, 25], "coreblock": [3, 4, 25], "go": [3, 4, 20], "out": [3, 10, 11, 12, 14, 16, 19], "processor": [3, 19, 22], "implement": [3, 11, 13, 14, 19, 20, 22], "risc": [3, 8, 13], "microarchitectur": 3, "focu": 3, "flexibl": [3, 22], "allow": [3, 13, 18, 20], "easili": 3, "experi": 3, "differ": [3, 4, 11, 13, 14, 16, 20], "compon": [3, 10, 13], "doc": 3, "collect": [3, 13, 16, 17, 25], "descript": [3, 19], "whole": [3, 10, 20], "overview": [3, 19, 20], "high": 3, "level": [3, 13, 20], "found": 3, "version": 3, "page": [3, 20], "api": [3, 19], "kuznia": 3, "rdzeni": 3, "github": 3, "io": 3, "If": [4, 5, 8, 10, 13, 14, 17, 18, 20, 23], "someth": [4, 5], "doesn": [4, 5, 18, 20], "work": [4, 5, 10, 15, 20], "re": [4, 5, 14, 20], "puzzl": 4, "why": 4, "through": 4, "see": [4, 5, 12], "ani": [4, 8, 10, 13, 14, 15, 18, 20], "point": [4, 13, 20], "case": [4, 8, 14, 15, 16, 18, 20], "sure": 4, "us": [4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25], "yield": 4, "function": [4, 5, 10, 11, 13, 15, 16, 18, 20, 25], "testbenchio": 4, "notabl": 4, "except": [4, 6, 9, 13, 16, 18, 19, 21], "settl": 4, "instead": [4, 5, 20], "signal": [4, 10, 11, 14, 18, 19], "unexpect": 4, "valu": [4, 10, 11, 13, 14, 15, 16, 17, 18, 23, 24], "try": [4, 5, 20], "ad": [4, 13, 18, 25], "right": 4, "don": [4, 20, 23], "do": [4, 10, 13, 20], "eq": [4, 5], "two": [4, 5, 10, 16, 17, 18, 20], "record": [4, 5, 10, 11, 14, 18], "assign": [4, 5, 17, 18], "util": [4, 5, 6, 9, 15, 16, 21], "amaranth": [4, 5, 10, 13, 14, 18, 25], "statement": [4, 5, 18], "some": [4, 5, 17, 20, 25], "domain": 4, "have": [4, 8, 13, 14, 16, 17, 18, 20, 25], "combin": [4, 13, 16], "loop": 4, "especi": 4, "simul": 4, "hang": 4, "extend": [4, 13], "spot": 4, "yourself": [4, 5, 25], "easi": [4, 5, 20], "fix": 4, "mistak": 4, "modular": 5, "design": [5, 12, 20], "inspir": 5, "bluespec": 5, "program": [5, 13, 20], "languag": [5, 13], "wiki": 5, "compil": [5, 25], "idea": [5, 20], "interfac": [5, 10, 12, 14, 15, 16, 17, 19], "hardwar": [5, 13, 19, 22], "modul": [5, 6, 21], "A": [5, 10, 13], "state": [5, 14, 19, 20], "oper": [5, 8, 10, 11, 13, 20], "perform": [5, 10, 11, 12, 13, 15, 17, 18, 25], "singl": [5, 11, 12, 13, 15, 16, 18], "clock": [5, 12, 22, 25], "cycl": [5, 8, 11, 12, 14, 17, 20, 22], "atom": [5, 13, 23], "either": [5, 10, 18], "execut": [5, 11, 13, 14, 15, 16, 19, 22, 24], "its": [5, 10, 15, 16, 17, 18, 20], "entrieti": 5, "onli": [5, 11, 17, 18, 20], "readi": [5, 10, 14, 15, 16, 17, 18, 19, 23], "doe": 5, "conflict": 5, "anoth": [5, 8, 10], "schedul": [5, 6, 9, 19, 20, 21], "defin": [5, 10, 17, 18], "depend": [5, 6, 9, 17, 18, 21], "other": [5, 17, 19], "via": [5, 10], "directli": [5, 13], "link": 5, "indirectli": 5, "multipl": [5, 8, 11, 12, 13, 14, 15, 16], "them": [5, 13, 18, 20], "access": [5, 8, 13, 17, 20], "coordin": 5, "system": [5, 13], "avoid": 5, "commun": [5, 20, 23], "caller": 5, "both": [5, 18, 23], "direct": [5, 18], "back": 5, "structur": [5, 18, 19, 20, 23], "simplest": 5, "part": [5, 17, 20, 22], "elaborat": [5, 9, 10, 11, 12, 14, 15, 16, 17, 18], "block": [5, 8, 12, 13, 14, 15, 16, 19, 20], "myth": 5, "def": 5, "elabor": 5, "self": 5, "platform": [5, 25], "tmodul": [5, 17], "bodi": [5, 17], "condit": 5, "includ": [5, 18], "like": [5, 8, 10, 14, 20], "d": [5, 13], "comb": 5, "sig1": 5, "expr1": 5, "sync": 5, "sig2": 5, "expr2": 5, "result": [5, 8, 10, 11, 12, 13, 14, 16, 17, 18, 20], "arg_expr": 5, "analog": 5, "": [5, 13, 14, 18, 20], "multiplex": 5, "rememb": [5, 20], "insid": [5, 10], "alwai": [5, 8, 17], "onc": 5, "becaus": [5, 20], "resourc": [5, 11, 20, 25], "request": [5, 8, 10, 11, 12, 13, 14], "paramet": [5, 10, 11, 12, 13, 14, 15, 16, 17, 18, 25], "bit": [5, 8, 10, 11, 12, 13, 14, 17, 18, 20, 23, 24], "express": 5, "expr": 5, "As": [5, 8, 20], "typic": 5, "declar": 5, "constructor": [5, 10], "myotherth": 5, "__init__": [5, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18], "o": [5, 12, 20], "my_method": 5, "input_layout": 5, "output_layout": 5, "def_method": 5, "_": 5, "arg": [5, 10, 11, 18], "other_method": 5, "ret_expr": 5, "techniqu": 5, "present": [5, 18, 20], "abov": 5, "conveni": 5, "syntax": 5, "particular": 5, "unnam": 5, "usual": [5, 20], "For": [5, 8, 13, 18, 23, 24, 25], "could": 5, "around": 5, "entir": [5, 8], "sometim": 5, "might": 5, "altern": 5, "decid": [5, 20, 22], "best": 5, "import": [5, 20], "question": 5, "ask": 5, "independ": [5, 8], "thing": [5, 18], "lock": [5, 20], "so": [5, 14, 16, 20], "mayb": [5, 20], "extern": [5, 19], "doubt": 5, "prefer": 5, "noth": 5, "els": [5, 17, 20], "Such": 5, "adaptertran": 5, "facilit": 5, "provid": [5, 10, 11, 13, 15, 17], "most": [5, 8, 20], "ones": 5, "connecttran": 5, "connect": [5, 10, 14, 16, 17, 20], "togeth": 5, "fifo": [5, 6, 9, 16, 20, 21], "queue": [5, 18, 20], "adapt": 5, "plain": 5, "These": [5, 20, 25], "veri": [5, 20], "testbench": 5, "parent": 5, "convers": 5, "true": [5, 13, 14, 18], "possibl": [5, 18, 20], "limit": [5, 14], "impli": 5, "consid": [5, 20], "subpackag": [6, 21], "frontend": [6, 9, 21, 22], "submodul": [6, 21], "decod": [6, 9, 11, 15, 21], "fetch": [6, 8, 9, 13, 16, 17, 20, 21], "icach": [6, 9, 21], "rvc": [6, 9, 21], "content": [6, 21], "alu": [6, 9, 13, 21], "div_unit": [6, 9, 21], "fu_decod": [6, 9, 21], "jumpbranch": [6, 9, 13, 21], "mul_unit": [6, 9, 21], "shift_unit": [6, 9, 13, 21], "zbc": [6, 9, 13, 21], "zb": [6, 9, 13, 21], "param": [6, 9, 10, 11, 15, 16, 17, 21], "configur": [6, 9, 15, 21], "fu_param": [6, 9, 21], "genparam": [6, 9, 10, 11, 12, 15, 16, 17, 21], "icache_param": [6, 9, 21], "instr": [6, 9, 10, 21], "isa": [6, 9, 10, 17, 21], "kei": [6, 9, 17, 18, 21], "optyp": [6, 9, 10, 11, 15, 16, 17, 21], "peripher": [6, 9, 21], "wishbon": [6, 9, 21], "wakeup_select": [6, 9, 21], "backend": [6, 9, 21], "func_blocks_unifi": [6, 9, 21], "retir": [6, 9, 21], "rs_func_block": [6, 9, 21], "structs_common": [6, 9, 21], "csr": [6, 9, 10, 13, 21], "csr_gener": [6, 9, 21], "debug_sign": [6, 9, 16, 21], "protocol": [6, 9, 10, 15, 16, 21], "expos": [8, 18], "three": [8, 10, 20], "issue_req": [8, 10], "lookup": [8, 10], "accept_resp": 8, "flush": [8, 10, 20], "under": 8, "4": [8, 11, 13], "byte": [8, 13], "align": [8, 18], "c": [8, 13, 20], "extens": [8, 13], "introduc": [8, 20], "16": [8, 13, 20], "relax": 8, "handl": [8, 11, 19], "fulli": 8, "pipelin": [8, 14, 15, 17, 20, 23], "process": [8, 19], "invok": [8, 10, 15, 16, 20, 23], "accept_r": [8, 10], "space": [8, 20], "simpli": 8, "latenc": [8, 20], "least": 8, "miss": [8, 20], "occur": [8, 10], "arbitrarili": 8, "long": [8, 24], "ensur": 8, "refetch": 8, "howev": 8, "guarante": [8, 20], "alreadi": [8, 13, 16, 20], "been": 8, "still": [8, 20, 24], "wait": [8, 14, 16, 20, 23, 24], "accept": [8, 10, 11, 12, 17, 18], "inform": [8, 15, 25], "regard": 8, "error": [8, 10, 14, 18], "mean": [8, 15, 24], "dure": [8, 19, 22], "line": [8, 10, 13, 19], "refil": [8, 10], "subsequ": 8, "trigger": [8, 17], "32": [8, 11, 12, 13, 20], "128": [8, 13], "set": [8, 10, 11, 13, 15, 16, 17, 19, 23], "size": [8, 13, 14, 18, 20], "equal": 8, "31": [8, 13], "15": [8, 13], "14": [8, 13], "13": [8, 13], "12": [8, 13], "11": [8, 13], "09": 8, "08": 8, "07": 8, "06": 8, "05": 8, "04": 8, "03": 8, "02": 8, "01": 8, "00": 8, "tag": [8, 14, 16, 20, 23, 24], "index": [8, 18], "offset": 8, "unsigned_multipl": [9, 11], "common": [9, 11, 18], "fast_recurs": [9, 11], "sequenc": [9, 11, 15, 18], "shift": [9, 11, 13], "gen_param": [9, 10, 11, 13, 15, 16, 17], "wb_instr_bu": 9, "wishbonebu": [9, 14], "wb_data_bu": 9, "simpl": [10, 15, 16, 18], "transact": [10, 13, 14, 17, 18, 19, 23], "instanti": 10, "instrdecod": 10, "combinatori": 10, "manner": [10, 14], "get_raw": 10, "push_decod": 10, "none": [10, 11, 13, 16, 17, 18], "instanc": [10, 13, 15, 16], "raw": 10, "instruct": [10, 11, 13, 15, 16, 17, 19, 20, 22, 23], "previou": [10, 14, 20], "fetchlayout": [10, 13], "send": [10, 13, 15, 16], "next": [10, 15, 16, 17, 20], "describ": [10, 15, 16, 20], "decodelayout": [10, 13, 15], "elementari": 10, "opcod": [10, 13, 23, 24], "funct3": [10, 11, 13], "etc": 10, "attribut": [10, 11, 12, 13, 14, 16, 17, 18], "gen": [10, 11, 12, 16], "ilen": [10, 13], "identifi": [10, 13, 23], "funct3_v": 10, "1": [10, 11, 12, 13, 15, 17, 18, 20, 23, 24], "funct7": [10, 11, 13], "seven": 10, "funct7_v": 10, "funct12": [10, 13], "twelv": 10, "funct12_v": 10, "rd": [10, 13], "reg_cnt_log": 10, "address": [10, 13, 14, 17, 19, 20], "regist": [10, 13, 15, 17, 20, 22], "rd_v": 10, "rs1": [10, 13], "hold": [10, 14, 17], "first": [10, 11, 15, 20, 23, 24], "input": [10, 11, 16, 17, 18, 20, 23, 24], "rs1_v": 10, "take": [10, 13, 14, 16, 22, 23, 25], "form": [10, 13, 17, 20], "rs2": [10, 13], "second": [10, 11, 15, 23, 24], "rs2_v": 10, "imm": [10, 13], "xlen": [10, 11, 13, 17], "immedi": [10, 14], "were": [10, 20], "succ": 10, "fencetarget": [10, 13], "successor": 10, "fenc": [10, 13], "pred": 10, "predecessor": 10, "fm": 10, "fencefm": [10, 13], "mode": [10, 13, 20], "csr_alen": [10, 13], "control": [10, 13, 14, 17], "sourc": [10, 15, 23], "kind": [10, 11, 13, 15], "illeg": 10, "wa": [10, 13, 17, 20], "success": [10, 14], "fit": 10, "pc": [10, 17, 19], "increment": [10, 17], "ilen_byt": 10, "icacheinterfac": 10, "cont": 10, "cach": [10, 13, 19], "unalignedfetch": 10, "unalign": 10, "associ": [10, 13], "replac": [10, 12, 13, 23], "polici": 10, "pseudo": 10, "random": 10, "scheme": 10, "time": [10, 14, 17, 20, 25], "trash": 10, "we": [10, 16, 20, 22, 23, 24, 25], "keep": 10, "global": [10, 17, 20], "counter": [10, 13, 17], "abstract": [10, 12, 13], "awai": 10, "refiller_start": 10, "whenev": 10, "refiller_accept": 10, "word": [10, 13], "written": [10, 17, 24], "last": [10, 15], "transfer": [10, 14], "over": [10, 17, 18], "shouldn": 10, "until": [10, 20], "start": [10, 11, 14, 20], "icachelayout": [10, 13], "icacheparamet": [10, 13], "cacherefillerinterfac": 10, "start_refil": 10, "accept_refil": 10, "deserialize_addr": 10, "raw_addr": 10, "dict": [10, 14, 18], "str": [10, 13, 18], "hdl": [10, 13], "ast": [10, 13], "serialize_addr": 10, "addr": 10, "icachebypass": 10, "wb_master": 10, "wishbonemast": [10, 13, 14], "haselabor": [10, 18], "kwarg": [10, 13, 14, 18], "simplewbcacherefil": 10, "instrdecompress": 10, "decompr_reg": 10, "rvc_reg": 10, "instr_mux": 10, "sel": 10, "int": [10, 11, 12, 13, 14, 16, 17, 18], "enum": [10, 11, 13, 18], "valuecast": [10, 13, 18], "tupl": [10, 11, 15, 16, 17, 18], "is_instr_compress": 10, "alucompon": [11, 13], "functionalcomponentparam": [11, 13, 16], "zba_en": 11, "fals": [11, 13, 18], "zbb_enabl": 11, "get_modul": [11, 13, 16, 17], "funcunit": [11, 13, 16, 18], "get_optyp": [11, 13, 16, 17], "alufuncunit": 11, "alu_fn": 11, "alufn": 11, "object": [11, 13, 14], "divcompon": 11, "ipc": 11, "div_fn": 11, "divfn": 11, "decodermanag": 11, "fn": 11, "intflag": [11, 13], "enumer": [11, 13, 17, 18], "div": [11, 13], "divu": [11, 13], "2": [11, 12, 13, 14, 17, 18], "rem": [11, 13], "remu": [11, 13], "8": [11, 12, 13, 14], "get_instruct": 11, "divunit": 11, "get_input": 11, "exceptionfuncunit": 11, "unit_fn": 11, "exceptionunitfn": 11, "exceptionunitcompon": [11, 13], "respons": [11, 14, 15], "decode_fn": 11, "exec_fn": 11, "op": [11, 13], "check_optyp": 11, "bool": [11, 13, 17, 18], "valid": [11, 13, 14, 15, 23], "get_decod": 11, "get_funct": 11, "get_op_typ": 11, "jumpbranchfuncunit": 11, "jb_fn": 11, "jumpbranchfn": 11, "jumpcompon": [11, 13], "mulcompon": 11, "mul_unit_typ": 11, "multyp": 11, "dsp_width": [11, 12], "mul_fn": 11, "mulfn": 11, "hot": [11, 18, 20], "wire": 11, "5": [11, 13, 22], "mul": [11, 13], "mulh": [11, 13], "mulhsu": [11, 13], "mulhu": [11, 13], "intenum": [11, 13, 17], "recursive_mul": 11, "fastest": 11, "multipli": [11, 12], "costli": [11, 20], "term": 11, "sequence_mul": 11, "dsp": [11, 12], "balanc": 11, "between": [11, 20], "cost": [11, 19], "shift_mul": 11, "cheapest": 11, "russian": [11, 12], "peasant": [11, 12], "algorithm": [11, 12], "mulunit": 11, "unsign": [11, 12], "integ": [11, 13, 18], "standard": [11, 17, 18, 20], "funcunitlayout": [11, 13, 15, 16], "comput": [11, 12, 17, 20], "mul_typ": 11, "shiftfuncunit": 11, "shift_unit_fn": 11, "shiftunitfn": 11, "shiftunitcompon": [11, 13], "clmultipli": 11, "carri": [11, 13, 25], "less": [11, 13], "product": 11, "i1": [11, 12], "n": [11, 12, 13], "factor": 11, "i2": [11, 12], "reset": [11, 17, 19], "new": [11, 13, 14, 18, 19, 20], "busi": 11, "while": 11, "progress": 11, "bit_width": 11, "recursion_depth": 11, "width": [11, 12, 13, 14, 17, 18], "depth": [11, 14, 18], "recurs": [11, 12, 18], "parallel": 11, "assum": [11, 16, 18, 20], "power": [11, 18], "iterative_modul": 11, "recursive_modul": 11, "zbccompon": 11, "zbc_fn": 11, "zbcfn": 11, "clmul": [11, 13], "clmulh": [11, 13], "clmulr": [11, 13], "classmethod": 11, "zbcunit": 11, "zbsfunction": 11, "in1": 11, "in2": 11, "zbscompon": 11, "bclr": [11, 13], "bext": [11, 13], "binv": [11, 13], "bset": [11, 13], "zbsunit": 11, "zbs_fn": 11, "dspmulunit": 12, "synthesi": [12, 19], "mulbaseunsign": 12, "unsignedmulunitlayout": [12, 13], "recursiveunsignedmul": 12, "fast": 12, "sequentialunsignedmul": 12, "sequenti": [12, 14], "classic": [12, 20], "shiftunsignedmul": 12, "cheap": 12, "multi": 12, "coreconfigur": 13, "func_units_config": 13, "blockcomponentparam": [13, 16, 17], "reserv": [13, 17, 19, 20], "station": [13, 19], "rsblockcompon": [13, 16], "rs_entri": [13, 16, 17], "lsublockcompon": 13, "compress": 13, "enabl": 13, "embed": 13, "reduc": [13, 20], "phys_regs_bit": 13, "physic": [13, 15, 20], "rob_entries_bit": 13, "reorder": [13, 20], "buffer": [13, 14, 20, 23], "start_pc": 13, "initi": [13, 19], "icache_en": 13, "disabl": 13, "bypass": 13, "icache_wai": 13, "icache_sets_bit": 13, "log": [13, 20], "icache_block_size_bit": 13, "allow_partial_extens": 13, "partial": 13, "_implied_extens": 13, "extenst": 13, "flag": 13, "specifi": [13, 14, 17, 24], "intern": [13, 18, 19], "abc": 13, "func_unit": [13, 16], "lsu": 13, "dummylsu": 13, "6": [13, 20], "7": 13, "dependencykei": 13, "u": [13, 20], "dependencymanag": [13, 17], "concret": 13, "frozen": 13, "lock_on_get": 13, "get_depend": 13, "empty_valid": 13, "without": [13, 15, 16, 20], "action": [13, 17], "caus": [13, 20], "rais": [13, 18, 20], "keyerror": 13, "add_depend": 13, "give": 13, "behavior": 13, "track": 13, "across": 13, "add": 13, "multpl": 13, "funcblock": [13, 15, 16, 17, 18], "get_rs_entry_count": [13, 16, 17], "optypes_support": 13, "iter": [13, 16, 17, 18], "dependentcach": 13, "cfg": 13, "addr_width": [13, 14], "length": [13, 18, 20], "word_width": 13, "machin": [13, 17], "num_of_wai": 13, "num_of_sets_bit": 13, "block_size_bit": 13, "btypeinstr": 13, "riscvinstr": 13, "pack": 13, "ebreakinstr": 13, "itypeinstr": 13, "illegalinstr": 13, "jtypeinstr": 13, "rtypeinstr": 13, "stypeinstr": 13, "utypeinstr": 13, "exceptioncaus": 13, "breakpoint": 13, "environment_call_from_m": 13, "environment_call_from_": 13, "9": 13, "environment_call_from_u": 13, "illegal_instruct": 13, "instruction_access_fault": 13, "instruction_address_misalign": 13, "instruction_page_fault": 13, "load_access_fault": 13, "load_address_misalign": 13, "load_page_fault": 13, "store_access_fault": 13, "store_address_misalign": 13, "store_page_fault": 13, "b": 13, "512": 13, "manipul": 13, "256": 13, "doubl": [13, 17, 20], "precis": [13, 20], "float": 13, "64": [13, 14], "98366": 13, "basic": [13, 19], "j": 13, "1024": 13, "dynam": [13, 18, 20], "decim": 13, "divis": 13, "16384": 13, "user": [13, 17, 20], "interrupt": [13, 19], "4096": 13, "simd": 13, "q": 13, "quad": 13, "2048": 13, "memori": [13, 14, 20], "8192": 13, "vector": [13, 15, 19, 20], "xintmachinemod": 13, "8589934592": 13, "categor": 13, "privilieg": 13, "xintsupervisor": 13, "17179869184": 13, "supervisor": [13, 17], "zam": 13, "2097152": 13, "misalign": 13, "zba": 13, "268435456": 13, "zbb": 13, "536870912": 13, "1073741824": 13, "2147483648": 13, "zdinx": 13, "33554432": 13, "zfh": 13, "4194304": 13, "half": 13, "zfhmin": 13, "8388608": 13, "minim": 13, "zfinx": 13, "16777216": 13, "zhinx": 13, "67108864": 13, "zicntr": 13, "524288": 13, "timer": [13, 17], "zicsr": 13, "32768": 13, "statu": [13, 17], "zifencei": 13, "65536": 13, "zihintntl": 13, "262144": 13, "non": [13, 23], "tempor": 13, "hint": 13, "zihintpaus": 13, "131072": 13, "paus": 13, "energi": 13, "zihpm": 13, "1048576": 13, "zmmul": 13, "134217728": 13, "ztso": 13, "4294967296": 13, "total": 13, "store": [13, 16, 18, 20, 23, 24], "tso": 13, "dev_i": 13, "dev_o": 13, "mem_r": 13, "mem_w": 13, "clz": 13, "1536": 13, "cpop": 13, "1538": 13, "ctz": 13, "1537": 13, "ebreak": 13, "ecal": 13, "mret": 13, "770": 13, "orcb": 13, "647": 13, "rev8_32": 13, "1688": 13, "rev8_64": 13, "1720": 13, "sextb": 13, "1540": 13, "sexth": 13, "1541": 13, "sret": 13, "258": 13, "wfi": 13, "261": 13, "zexth": 13, "AND": 13, "andn": 13, "beq": 13, "bge": 13, "bgeu": 13, "blt": 13, "bltu": 13, "bne": 13, "csrrc": 13, "csrrci": 13, "csrr": 13, "csrrsi": 13, "csrrw": 13, "csrrwi": 13, "divuw": 13, "divw": 13, "fencei": 13, "h": [13, 20], "hu": 13, "jalr": 13, "max": [13, 25], "maxu": 13, "min": 13, "minu": 13, "mulw": 13, "OR": 13, "orn": 13, "priv": 13, "remuw": 13, "remw": 13, "rev8": 13, "rol": 13, "ror": 13, "sh1add": 13, "sh2add": 13, "sh3add": 13, "sll": 13, "slt": 13, "sltu": 13, "sr": 13, "sub": 13, "w": [13, 20], "xnor": 13, "xor": 13, "36": 13, "52": 13, "20": 13, "48": 13, "muldiv": 13, "sa": 13, "sfencevma": 13, "sl": 13, "gather": 13, "numer": 13, "val": 13, "correspond": [13, 23], "val_log": 13, "field": [13, 16, 17, 18, 23, 24], "relev": 13, "nativ": 13, "reg_cnt": 13, "maximum": 13, "bitwis": 13, "isa_str": 13, "string": 13, "refer": 13, "gcc": 13, "detail": [13, 19], "instrtyp": 13, "auipc": 13, "branch": [13, 20, 25], "24": 13, "jal": 13, "27": 13, "25": 13, "load": [13, 20], "load_fp": 13, "lui": 13, "misc_mem": 13, "op32": 13, "op_imm": 13, "op_imm_32": 13, "store_fp": 13, "28": [13, 20], "a0": 13, "a1": 13, "a2": 13, "a3": 13, "a4": 13, "a5": 13, "a6": 13, "a7": 13, "17": 13, "fp": 13, "gp": [13, 17], "ra": 13, "s0": 13, "s1": 13, "s10": 13, "26": 13, "s11": 13, "s2": 13, "18": 13, "s3": 13, "19": 13, "s4": 13, "s5": 13, "21": 13, "s6": 13, "22": 13, "s7": 13, "23": 13, "s8": 13, "s9": 13, "sp": 13, "t0": 13, "t1": 13, "t2": 13, "t3": 13, "t4": 13, "29": 13, "t5": 13, "30": [13, 20], "t6": 13, "tp": 13, "x1": 13, "x10": 13, "x11": 13, "x12": 13, "x13": 13, "x14": 13, "x15": 13, "x16": 13, "x17": 13, "x18": 13, "x19": 13, "x2": 13, "x20": 13, "x21": 13, "x22": 13, "x23": 13, "x24": 13, "x25": 13, "x26": 13, "x27": 13, "x28": 13, "x29": 13, "x3": 13, "x30": 13, "x31": 13, "x4": 13, "x5": 13, "x6": 13, "x7": 13, "x8": 13, "x9": 13, "zero": [13, 23], "branchresolvedkei": 13, "unifierkei": [13, 16], "unifi": [13, 18], "alia": 13, "collector": 13, "exceptionreportkei": 13, "simplekei": 13, "genericcsrregisterskei": 13, "genericcsrregist": [13, 17], "instructionprecommitkei": 13, "methodtryproduct": 13, "wishbonedatakei": 13, "csrlayout": 13, "commonlayout": 13, "lsulayout": 13, "ratlayout": [13, 15], "rflayout": [13, 15], "roblayout": [13, 15], "rsinterfacelayout": 13, "rs_entries_bit": 13, "rslayout": [13, 15], "schedulerlayout": 13, "confus": 13, "address_gener": 13, "arithmet": 13, "bit_manipul": 13, "compar": [13, 19], "csr_imm": [13, 17], "csr_reg": [13, 17], "div_rem": 13, "33": 13, "logic": [13, 20, 24, 25], "single_bit_manipul": 13, "unary_bit_manipulation_1": 13, "unary_bit_manipulation_2": 13, "unary_bit_manipulation_3": 13, "unary_bit_manipulation_4": 13, "unary_bit_manipulation_5": 13, "optypes_required_by_extens": 13, "resolve_impl": 13, "ignore_unsupport": 13, "pipelinedwishbonemast": 14, "master": [14, 25], "wb_param": 14, "wishboneparamet": 14, "max_req": 14, "pend": 14, "wb": 14, "wishbonelayout": 14, "sent": [14, 16], "requestlayout": 14, "complet": [14, 16, 20], "resultlayout": 14, "requests_finish": 14, "generate_method_layout": 14, "wishbonearbit": 14, "arbit": 14, "slave": 14, "assert": 14, "cyc": 14, "grant": 14, "round": [14, 18], "robin": 14, "slave_wb": 14, "intefac": 14, "boolean": 14, "whether": [14, 18], "side": [14, 17, 20, 23, 24], "otherwis": 14, "wb_layout": 14, "wbmaster": 14, "becom": 14, "generate_layout": 14, "wishbonememoryslav": 14, "underneath": 14, "keyword": 14, "underli": 14, "infer": 14, "data_width": 14, "wishbonemux": 14, "muxer": 14, "master_wb": 14, "ssel_tga": 14, "corespond": 14, "tga": 14, "stb": 14, "note": [14, 17, 18], "stare": 14, "finish": [14, 16], "stall": [14, 17, 20], "clear": [14, 18, 23, 24], "delai": 14, "previous": 14, "deassert": 14, "dat_r": 14, "dat_w": 14, "adr": 14, "singal": 14, "granular": 14, "smallest": 14, "port": 14, "capabl": 14, "insert": [15, 16, 17, 18, 19, 20, 22, 23], "alloc": [15, 22, 23, 24], "renam": [15, 22], "entri": [15, 16, 18, 20, 22, 23, 24], "stuck": 15, "get_instr": 15, "get_free_reg": 15, "rat_renam": 15, "rob_put": 15, "rf_read1": 15, "rf_read2": 15, "reservation_st": 15, "decoded_instr": 15, "id": [15, 23, 24], "current": [15, 17, 20], "free": [15, 19, 20, 24], "rat_rename_in": 15, "rat_rename_out": 15, "data_layout": 15, "rf_read_out": 15, "rf_read_in": 15, "wakeupselect": 15, "wakeup": [15, 24], "firstli": 15, "get_readi": 15, "binari": 15, "where": [15, 20, 23, 24], "th": 15, "posit": [15, 23, 24], "row": [15, 19], "taken": 15, "take_row": 15, "get_ready_list_out": 15, "take_out": 15, "push": 15, "down": 15, "resultannounc": 16, "mark": [16, 19, 20], "get_result": [16, 17, 18], "serial": 16, "than": [16, 20], "manytooneconnecttran": 16, "rob_mark_don": 16, "rs_write_v": 16, "rf_write_v": 16, "end": [16, 20], "rob_id": 16, "reg_id": 16, "reg_val": 16, "funcblocksunifi": 16, "extra_methods_requir": 16, "get_extra_method": 16, "item": [16, 18], "rob_peek": 16, "rob_retir": 16, "r_rat_commit": 16, "free_rf_put": 16, "rf_free": 16, "exception_cause_get": 16, "rsfuncblock": 16, "With": 16, "csrblockcompon": 17, "csrlistkei": 17, "listkei": 17, "csrregist": 17, "behaviour": 17, "csrunit": 17, "csr_val": 17, "effect": [17, 20, 23, 24], "_fu_read": 17, "_fu_writ": 17, "simultan": 17, "ignor": 17, "prioriti": [17, 18], "csr_number": 17, "ro_bit": 17, "mask": 17, "those": [17, 20], "upper": 17, "0b11": 17, "discard": 17, "regitst": 17, "unitl": 17, "place": [17, 20, 23], "put": [17, 23], "receiv": 17, "fetch_continu": 17, "resum": 17, "privilegelevel": 17, "csr_access_privileg": 17, "csr_addr": 17, "csraddress": 17, "3072": 17, "cycleh": 17, "3200": 17, "instret": 17, "3074": 17, "instreth": 17, "3202": 17, "mcaus": 17, "834": 17, "3073": 17, "timeh": 17, "3201": 17, "doublecountercsr": 17, "group": 17, "At": 17, "overflow": 17, "low_addr": 17, "high_addr": 17, "repres": 17, "lower": [17, 18], "higher": 17, "synthetis": 17, "exceptioncauseregist": 17, "rob_get_indic": 17, "should_update_priorii": 17, "current_caus": 17, "new_caus": 17, "frat": 17, "rrat": 17, "registerfil": 17, "reorderbuff": 17, "ready_for": 17, "auto_debug_sign": 18, "union": 18, "view": 18, "signalbundl": 18, "map": [18, 19, 20], "arrai": 18, "basicfifo": 18, "empti": 18, "reiniti": 18, "init": 18, "shape": 18, "shapecast": 18, "rang": 18, "layoutlik": 18, "paramt": 18, "semaphor": 18, "max_count": 18, "assigntyp": 18, "rh": 18, "moduleconnector": 18, "anonym": 18, "onehotswitch": 18, "modulelik": 18, "switch": [18, 20, 23], "style": 18, "similar": [18, 20], "benefit": 18, "represent": 18, "sig": 18, "onehotcas": 18, "0b01": 18, "0b10": 18, "onehotswitchdynam": 18, "liter": 18, "variabl": 18, "signifi": 18, "align_to_power_of_two": 18, "num": 18, "up": [18, 19, 24], "lh": 18, "assignarg": 18, "assignfield": 18, "lhs_strict": 18, "rhs_strict": 18, "safe": [18, 20], "structlayout": 18, "mismatch": 18, "accord": 18, "explicitli": 18, "castabl": 18, "determin": [18, 20], "subrecord": 18, "valueerror": 18, "bits_from_int": 18, "count_leading_zero": 18, "count_trailing_zero": 18, "flatten_sign": 18, "flatten": 18, "popcount": 18, "silence_mustus": 18, "introduct": 19, "assumpt": [19, 20], "made": [19, 20], "develop": 19, "environ": 19, "script": [19, 25], "run_test": 19, "py": [19, 25], "lint": 19, "sh": 19, "core_graph": 19, "build_doc": 19, "framework": [19, 23], "usag": 19, "advanc": 19, "concept": 19, "nest": 19, "schema": 19, "proposit": [19, 20], "slot": 19, "tabl": 19, "substitut": 19, "clean": 19, "problem": [19, 20], "checklist": 19, "benchmark": 19, "summari": 19, "paper": 19, "about": 19, "old": 19, "softwar": 19, "tlb": 19, "analysi": 19, "strategi": 19, "igpu": 19, "specul": 19, "gpu": 19, "effici": 19, "journal": 20, "articl": 20, "look": 20, "choic": 20, "primari": 20, "relat": 20, "procedur": 20, "chosen": 20, "basi": 20, "improv": 20, "pretti": 20, "1993": 20, "2001": 20, "much": 20, "research": 20, "cpu": 20, "solv": 20, "due": 20, "characterist": 20, "our": [20, 22], "what": 20, "peopl": 20, "probabl": 20, "lot": 20, "worth": 20, "walker": 20, "cragon": 20, "concurr": 20, "ieee": 20, "vol": 20, "june": 20, "1995": 20, "moudgil": 20, "vassiliadi": 20, "micro": 20, "pp": 20, "58": 20, "67": 20, "februari": 20, "1996": 20, "survei": 20, "topic": 20, "cdc": 20, "6600": 20, "done": 20, "jump": 20, "handler": 20, "ibm360": 20, "stop": 20, "crai": 20, "here": [20, 23], "bigger": 20, "torng": 20, "martin": 20, "dai": 20, "probe": 20, "author": 20, "window": 20, "iw": 20, "dispatch": [20, 22, 23, 24], "didn": 20, "context": 20, "copi": 20, "restor": 20, "restart": 20, "few": 20, "encod": 20, "big": 20, "overhead": 20, "origin": 20, "unfeas": 20, "job": 20, "addition": 20, "But": 20, "cooper": 20, "smaller": 20, "interest": 20, "propos": 20, "nrp": 20, "No": 20, "itself": 20, "wast": 20, "how": [20, 23, 25], "mani": [20, 25], "element": 20, "left": 20, "middl": [20, 22], "aamer": 20, "jaleel": 20, "bruce": 20, "jacob": 20, "cours": 20, "penalti": 20, "alpha": 20, "mip": 20, "concentr": 20, "properti": 20, "short": 20, "inlin": 20, "observ": 20, "enough": 20, "live": 20, "known": 20, "fly": 20, "swap": 20, "nop": 20, "reexecut": 20, "indic": [20, 24], "privileg": 20, "correct": [20, 23, 24], "contrast": 20, "tendenc": 20, "longer": 20, "hard": 20, "risk": 20, "linux": [20, 25], "purpos": 20, "addit": 20, "hw": 20, "bore": 20, "treat": [20, 22], "mansur": 20, "samadzadeh": 20, "loai": 20, "garalnabi": 20, "checkpoint": 20, "repair": 20, "histori": 20, "futur": [20, 22, 23], "jaikrishnan": 20, "menon": 20, "marc": 20, "de": 20, "kruijf": 20, "karthikeyan": 20, "sankaralingam": 20, "2012": 20, "To": [20, 25], "low": 20, "boundari": 20, "rewritten": 20, "recompil": 20, "runtim": 20, "region": 20, "subregion": 20, "begin": 20, "small": 20, "overrid": 20, "barrier": 20, "warp": 20, "wrong": 20, "split": [20, 22], "prevent": 20, "ivan": 20, "tanas": 20, "isaac": 20, "gelado": 20, "jorda": 20, "eduard": 20, "ayguad": 20, "nacho": 20, "navarro": 20, "2017": 20, "analys": 20, "problemat": 20, "successfulli": 20, "kill": 20, "modif": 20, "fail": 20, "repli": 20, "modifi": 20, "claim": 20, "operand": [20, 23, 24], "replai": 20, "marker": 20, "jerom": 20, "hampton": 20, "2008": 20, "mention": 20, "alli": 20, "bailei": 20, "ab04": 20, "ag": 20, "younger": 20, "repeat": 20, "canon": 20, "eventu": 20, "aren": 20, "Its": 22, "task": 22, "rss": 22, "phase": 22, "choos": 22, "potenti": 22, "merg": 22, "optim": 22, "todo": 22, "want": 23, "feel": 23, "anyth": 23, "id_out": [23, 24], "id_rob": [23, 24], "id_rs1": [23, 24], "val_rs1": [23, 24], "id_rs2": [23, 24], "val_rs2": [23, 24], "fill": 23, "id_rsx": 23, "val_rsx": 23, "releas": 23, "comparison": 23, "null": [23, 24], "woken": 24, "invalid": 24, "src1": 24, "src2": 24, "inst_readi": 24, "synthes": 25, "circuit": 25, "consum": 25, "grow": 25, "yosi": 25, "prjtrelli": 25, "nextpnr": 25, "ecp5": 25, "manual": 25, "git": 25, "repositori": 25, "docker": 25, "imag": 25, "vuush": 25, "synth": 25, "amaranthsynthecp5": 25, "dockerfil": 25, "command": 25, "amd64": 25, "parse_benchmark_info": 25, "pars": 25, "extract": 25, "frequenc": 25, "cell": 25, "ram": 25, "dff": 25, "dedic": 25, "subpag": 25}, "objects": {"": [[9, 0, 0, "-", "coreblocks"]], "coreblocks": [[9, 0, 0, "-", "core"], [10, 0, 0, "-", "frontend"], [11, 0, 0, "-", "fu"], [13, 0, 0, "-", "params"], [14, 0, 0, "-", "peripherals"], [15, 0, 0, "-", "scheduler"], [16, 0, 0, "-", "stages"], [17, 0, 0, "-", "structs_common"], [18, 0, 0, "-", "utils"]], "coreblocks.core": [[9, 1, 1, "", "Core"]], "coreblocks.core.Core": [[9, 2, 1, "", "__init__"]], "coreblocks.frontend": [[10, 0, 0, "-", "decode"], [10, 0, 0, "-", "decoder"], [10, 0, 0, "-", "fetch"], [10, 0, 0, "-", "icache"], [10, 0, 0, "-", "rvc"]], "coreblocks.frontend.decode": [[10, 1, 1, "", "Decode"]], "coreblocks.frontend.decode.Decode": [[10, 2, 1, "", "__init__"]], "coreblocks.frontend.decoder": [[10, 1, 1, "", "InstrDecoder"]], "coreblocks.frontend.decoder.InstrDecoder": [[10, 2, 1, "", "__init__"]], "coreblocks.frontend.fetch": [[10, 1, 1, "", "Fetch"], [10, 1, 1, "", "UnalignedFetch"]], "coreblocks.frontend.fetch.Fetch": [[10, 2, 1, "", "__init__"]], "coreblocks.frontend.fetch.UnalignedFetch": [[10, 2, 1, "", "__init__"]], "coreblocks.frontend.icache": [[10, 1, 1, "", "ICache"], [10, 1, 1, "", "ICacheBypass"], [10, 1, 1, "", "ICacheInterface"], [10, 1, 1, "", "SimpleWBCacheRefiller"]], "coreblocks.frontend.icache.ICache": [[10, 2, 1, "", "__init__"], [10, 2, 1, "", "deserialize_addr"], [10, 2, 1, "", "serialize_addr"]], "coreblocks.frontend.icache.ICacheBypass": [[10, 2, 1, "", "__init__"]], "coreblocks.frontend.icache.ICacheInterface": [[10, 2, 1, "", "__init__"], [10, 3, 1, "", "accept_res"], [10, 3, 1, "", "flush"], [10, 3, 1, "", "issue_req"]], "coreblocks.frontend.icache.SimpleWBCacheRefiller": [[10, 2, 1, "", "__init__"]], "coreblocks.frontend.rvc": [[10, 1, 1, "", "InstrDecompress"], [10, 4, 1, "", "is_instr_compressed"]], "coreblocks.frontend.rvc.InstrDecompress": [[10, 2, 1, "", "__init__"], [10, 2, 1, "", "decompr_reg"], [10, 2, 1, "", "instr_mux"]], "coreblocks.fu": [[11, 0, 0, "-", "alu"], [11, 0, 0, "-", "div_unit"], [11, 0, 0, "-", "exception"], [11, 0, 0, "-", "fu_decoder"], [11, 0, 0, "-", "jumpbranch"], [11, 0, 0, "-", "mul_unit"], [11, 0, 0, "-", "shift_unit"], [12, 0, 0, "-", "unsigned_multiplication"], [11, 0, 0, "-", "zbc"], [11, 0, 0, "-", "zbs"]], "coreblocks.fu.alu": [[11, 1, 1, "", "ALUComponent"], [11, 1, 1, "", "AluFuncUnit"]], "coreblocks.fu.alu.ALUComponent": [[11, 2, 1, "", "__init__"], [11, 2, 1, "", "get_module"], [11, 2, 1, "", "get_optypes"]], "coreblocks.fu.alu.AluFuncUnit": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.div_unit": [[11, 1, 1, "", "DivComponent"], [11, 1, 1, "", "DivFn"], [11, 1, 1, "", "DivUnit"], [11, 4, 1, "", "get_input"]], "coreblocks.fu.div_unit.DivComponent": [[11, 2, 1, "", "__init__"], [11, 3, 1, "", "div_fn"], [11, 2, 1, "", "get_module"], [11, 2, 1, "", "get_optypes"], [11, 3, 1, "", "ipc"]], "coreblocks.fu.div_unit.DivFn": [[11, 1, 1, "", "Fn"], [11, 2, 1, "", "get_instructions"]], "coreblocks.fu.div_unit.DivFn.Fn": [[11, 3, 1, "", "DIV"], [11, 3, 1, "", "DIVU"], [11, 3, 1, "", "REM"], [11, 3, 1, "", "REMU"]], "coreblocks.fu.div_unit.DivUnit": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.exception": [[11, 1, 1, "", "ExceptionFuncUnit"], [11, 1, 1, "", "ExceptionUnitComponent"]], "coreblocks.fu.exception.ExceptionFuncUnit": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.exception.ExceptionUnitComponent": [[11, 2, 1, "", "__init__"], [11, 2, 1, "", "get_module"], [11, 2, 1, "", "get_optypes"]], "coreblocks.fu.fu_decoder": [[11, 1, 1, "", "Decoder"], [11, 1, 1, "", "DecoderManager"]], "coreblocks.fu.fu_decoder.Decoder": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.fu_decoder.DecoderManager": [[11, 3, 1, "", "Fn"], [11, 2, 1, "", "get_decoder"], [11, 2, 1, "", "get_function"], [11, 2, 1, "", "get_instructions"], [11, 2, 1, "", "get_op_types"]], "coreblocks.fu.jumpbranch": [[11, 1, 1, "", "JumpBranchFuncUnit"], [11, 1, 1, "", "JumpComponent"]], "coreblocks.fu.jumpbranch.JumpBranchFuncUnit": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.jumpbranch.JumpComponent": [[11, 2, 1, "", "__init__"], [11, 2, 1, "", "get_module"], [11, 2, 1, "", "get_optypes"]], "coreblocks.fu.mul_unit": [[11, 1, 1, "", "MulComponent"], [11, 1, 1, "", "MulFn"], [11, 1, 1, "", "MulType"], [11, 1, 1, "", "MulUnit"]], "coreblocks.fu.mul_unit.MulComponent": [[11, 2, 1, "", "__init__"], [11, 3, 1, "", "dsp_width"], [11, 2, 1, "", "get_module"], [11, 2, 1, "", "get_optypes"], [11, 3, 1, "", "mul_fn"], [11, 3, 1, "", "mul_unit_type"]], "coreblocks.fu.mul_unit.MulFn": [[11, 1, 1, "", "Fn"], [11, 2, 1, "", "get_instructions"]], "coreblocks.fu.mul_unit.MulFn.Fn": [[11, 3, 1, "", "MUL"], [11, 3, 1, "", "MULH"], [11, 3, 1, "", "MULHSU"], [11, 3, 1, "", "MULHU"]], "coreblocks.fu.mul_unit.MulType": [[11, 3, 1, "", "RECURSIVE_MUL"], [11, 3, 1, "", "SEQUENCE_MUL"], [11, 3, 1, "", "SHIFT_MUL"]], "coreblocks.fu.mul_unit.MulUnit": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.shift_unit": [[11, 1, 1, "", "ShiftFuncUnit"], [11, 1, 1, "", "ShiftUnitComponent"]], "coreblocks.fu.shift_unit.ShiftFuncUnit": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.shift_unit.ShiftUnitComponent": [[11, 2, 1, "", "__init__"], [11, 2, 1, "", "get_module"], [11, 2, 1, "", "get_optypes"]], "coreblocks.fu.unsigned_multiplication": [[12, 0, 0, "-", "common"], [12, 0, 0, "-", "fast_recursive"], [12, 0, 0, "-", "sequence"], [12, 0, 0, "-", "shift"]], "coreblocks.fu.unsigned_multiplication.common": [[12, 1, 1, "", "DSPMulUnit"], [12, 1, 1, "", "MulBaseUnsigned"]], "coreblocks.fu.unsigned_multiplication.common.DSPMulUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.fu.unsigned_multiplication.common.MulBaseUnsigned": [[12, 2, 1, "", "__init__"]], "coreblocks.fu.unsigned_multiplication.fast_recursive": [[12, 1, 1, "", "RecursiveUnsignedMul"]], "coreblocks.fu.unsigned_multiplication.fast_recursive.RecursiveUnsignedMul": [[12, 2, 1, "", "__init__"]], "coreblocks.fu.unsigned_multiplication.sequence": [[12, 1, 1, "", "SequentialUnsignedMul"]], "coreblocks.fu.unsigned_multiplication.sequence.SequentialUnsignedMul": [[12, 2, 1, "", "__init__"]], "coreblocks.fu.unsigned_multiplication.shift": [[12, 1, 1, "", "ShiftUnsignedMul"]], "coreblocks.fu.unsigned_multiplication.shift.ShiftUnsignedMul": [[12, 2, 1, "", "__init__"]], "coreblocks.fu.zbc": [[11, 1, 1, "", "ClMultiplier"], [11, 1, 1, "", "ZbcComponent"], [11, 1, 1, "", "ZbcFn"], [11, 1, 1, "", "ZbcUnit"]], "coreblocks.fu.zbc.ClMultiplier": [[11, 2, 1, "", "__init__"], [11, 2, 1, "", "iterative_module"], [11, 2, 1, "", "recursive_module"]], "coreblocks.fu.zbc.ZbcComponent": [[11, 2, 1, "", "__init__"], [11, 2, 1, "", "get_module"], [11, 2, 1, "", "get_optypes"], [11, 3, 1, "", "recursion_depth"], [11, 3, 1, "", "zbc_fn"]], "coreblocks.fu.zbc.ZbcFn": [[11, 1, 1, "", "Fn"], [11, 2, 1, "", "get_instructions"]], "coreblocks.fu.zbc.ZbcFn.Fn": [[11, 3, 1, "", "CLMUL"], [11, 3, 1, "", "CLMULH"], [11, 3, 1, "", "CLMULR"]], "coreblocks.fu.zbc.ZbcUnit": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.zbs": [[11, 1, 1, "", "Zbs"], [11, 1, 1, "", "ZbsComponent"], [11, 1, 1, "", "ZbsFunction"], [11, 1, 1, "", "ZbsUnit"]], "coreblocks.fu.zbs.Zbs": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.zbs.ZbsComponent": [[11, 2, 1, "", "__init__"], [11, 2, 1, "", "get_module"], [11, 2, 1, "", "get_optypes"]], "coreblocks.fu.zbs.ZbsFunction": [[11, 1, 1, "", "Fn"], [11, 2, 1, "", "get_instructions"]], "coreblocks.fu.zbs.ZbsFunction.Fn": [[11, 3, 1, "", "BCLR"], [11, 3, 1, "", "BEXT"], [11, 3, 1, "", "BINV"], [11, 3, 1, "", "BSET"]], "coreblocks.fu.zbs.ZbsUnit": [[11, 2, 1, "", "__init__"]], "coreblocks.params": [[13, 0, 0, "-", "configurations"], [13, 0, 0, "-", "dependencies"], [13, 0, 0, "-", "fu_params"], [13, 0, 0, "-", "genparams"], [13, 0, 0, "-", "icache_params"], [13, 0, 0, "-", "instr"], [13, 0, 0, "-", "isa"], [13, 0, 0, "-", "keys"], [13, 0, 0, "-", "layouts"], [13, 0, 0, "-", "optypes"]], "coreblocks.params.configurations": [[13, 1, 1, "", "CoreConfiguration"]], "coreblocks.params.configurations.CoreConfiguration": [[13, 2, 1, "", "__init__"], [13, 3, 1, "", "allow_partial_extensions"], [13, 3, 1, "", "compressed"], [13, 3, 1, "", "embedded"], [13, 3, 1, "", "func_units_config"], [13, 3, 1, "", "icache_block_size_bits"], [13, 3, 1, "", "icache_enable"], [13, 3, 1, "", "icache_sets_bits"], [13, 3, 1, "", "icache_ways"], [13, 3, 1, "", "phys_regs_bits"], [13, 2, 1, "", "replace"], [13, 3, 1, "", "rob_entries_bits"], [13, 3, 1, "", "start_pc"], [13, 3, 1, "", "xlen"]], "coreblocks.params.dependencies": [[13, 1, 1, "", "DependencyKey"], [13, 1, 1, "", "DependencyManager"]], "coreblocks.params.dependencies.DependencyKey": [[13, 2, 1, "", "combine"], [13, 3, 1, "", "empty_valid"], [13, 3, 1, "", "lock_on_get"]], "coreblocks.params.dependencies.DependencyManager": [[13, 2, 1, "", "__init__"], [13, 2, 1, "", "add_dependency"], [13, 2, 1, "", "get_dependency"]], "coreblocks.params.fu_params": [[13, 1, 1, "", "BlockComponentParams"], [13, 1, 1, "", "FunctionalComponentParams"], [13, 4, 1, "", "optypes_supported"]], "coreblocks.params.fu_params.BlockComponentParams": [[13, 2, 1, "", "get_module"], [13, 2, 1, "", "get_optypes"], [13, 2, 1, "", "get_rs_entry_count"]], "coreblocks.params.fu_params.FunctionalComponentParams": [[13, 2, 1, "", "get_module"], [13, 2, 1, "", "get_optypes"]], "coreblocks.params.genparams": [[13, 1, 1, "", "GenParams"]], "coreblocks.params.genparams.GenParams": [[13, 2, 1, "", "__init__"]], "coreblocks.params.icache_params": [[13, 1, 1, "", "ICacheParameters"]], "coreblocks.params.icache_params.ICacheParameters": [[13, 2, 1, "", "__init__"]], "coreblocks.params.instr": [[13, 1, 1, "", "BTypeInstr"], [13, 1, 1, "", "EBreakInstr"], [13, 1, 1, "", "ITypeInstr"], [13, 1, 1, "", "IllegalInstr"], [13, 1, 1, "", "JTypeInstr"], [13, 1, 1, "", "RTypeInstr"], [13, 1, 1, "", "STypeInstr"], [13, 1, 1, "", "UTypeInstr"]], "coreblocks.params.instr.BTypeInstr": [[13, 2, 1, "", "__init__"], [13, 2, 1, "", "pack"]], "coreblocks.params.instr.EBreakInstr": [[13, 2, 1, "", "__init__"]], "coreblocks.params.instr.ITypeInstr": [[13, 2, 1, "", "__init__"], [13, 2, 1, "", "pack"]], "coreblocks.params.instr.IllegalInstr": [[13, 2, 1, "", "__init__"], [13, 2, 1, "", "pack"]], "coreblocks.params.instr.JTypeInstr": [[13, 2, 1, "", "__init__"], [13, 2, 1, "", "pack"]], "coreblocks.params.instr.RTypeInstr": [[13, 2, 1, "", "__init__"], [13, 2, 1, "", "pack"]], "coreblocks.params.instr.STypeInstr": [[13, 2, 1, "", "__init__"], [13, 2, 1, "", "pack"]], "coreblocks.params.instr.UTypeInstr": [[13, 2, 1, "", "__init__"], [13, 2, 1, "", "pack"]], "coreblocks.params.isa": [[13, 1, 1, "", "ExceptionCause"], [13, 1, 1, "", "Extension"], [13, 1, 1, "", "FenceFm"], [13, 1, 1, "", "FenceTarget"], [13, 1, 1, "", "Funct12"], [13, 1, 1, "", "Funct3"], [13, 1, 1, "", "Funct7"], [13, 1, 1, "", "ISA"], [13, 1, 1, "", "InstrType"], [13, 1, 1, "", "Opcode"], [13, 1, 1, "", "Registers"]], "coreblocks.params.isa.ExceptionCause": [[13, 3, 1, "", "BREAKPOINT"], [13, 3, 1, "", "ENVIRONMENT_CALL_FROM_M"], [13, 3, 1, "", "ENVIRONMENT_CALL_FROM_S"], [13, 3, 1, "", "ENVIRONMENT_CALL_FROM_U"], [13, 3, 1, "", "ILLEGAL_INSTRUCTION"], [13, 3, 1, "", "INSTRUCTION_ACCESS_FAULT"], [13, 3, 1, "", "INSTRUCTION_ADDRESS_MISALIGNED"], [13, 3, 1, "", "INSTRUCTION_PAGE_FAULT"], [13, 3, 1, "", "LOAD_ACCESS_FAULT"], [13, 3, 1, "", "LOAD_ADDRESS_MISALIGNED"], [13, 3, 1, "", "LOAD_PAGE_FAULT"], [13, 3, 1, "", "STORE_ACCESS_FAULT"], [13, 3, 1, "", "STORE_ADDRESS_MISALIGNED"], [13, 3, 1, "", "STORE_PAGE_FAULT"]], "coreblocks.params.isa.Extension": [[13, 3, 1, "", "A"], [13, 3, 1, "", "B"], [13, 3, 1, "", "C"], [13, 3, 1, "", "D"], [13, 3, 1, "", "E"], [13, 3, 1, "", "F"], [13, 3, 1, "", "G"], [13, 3, 1, "", "I"], [13, 3, 1, "", "J"], [13, 3, 1, "", "L"], [13, 3, 1, "", "M"], [13, 3, 1, "", "N"], [13, 3, 1, "", "P"], [13, 3, 1, "", "Q"], [13, 3, 1, "", "T"], [13, 3, 1, "", "V"], [13, 3, 1, "", "XINTMACHINEMODE"], [13, 3, 1, "", "XINTSUPERVISOR"], [13, 3, 1, "", "ZAM"], [13, 3, 1, "", "ZBA"], [13, 3, 1, "", "ZBB"], [13, 3, 1, "", "ZBC"], [13, 3, 1, "", "ZBS"], [13, 3, 1, "", "ZDINX"], [13, 3, 1, "", "ZFH"], [13, 3, 1, "", "ZFHMIN"], [13, 3, 1, "", "ZFINX"], [13, 3, 1, "", "ZHINX"], [13, 3, 1, "", "ZICNTR"], [13, 3, 1, "", "ZICSR"], [13, 3, 1, "", "ZIFENCEI"], [13, 3, 1, "", "ZIHINTNTL"], [13, 3, 1, "", "ZIHINTPAUSE"], [13, 3, 1, "", "ZIHPM"], [13, 3, 1, "", "ZMMUL"], [13, 3, 1, "", "ZTSO"]], "coreblocks.params.isa.FenceFm": [[13, 3, 1, "", "NONE"], [13, 3, 1, "", "TSO"]], "coreblocks.params.isa.FenceTarget": [[13, 3, 1, "", "DEV_I"], [13, 3, 1, "", "DEV_O"], [13, 3, 1, "", "MEM_R"], [13, 3, 1, "", "MEM_W"]], "coreblocks.params.isa.Funct12": [[13, 3, 1, "", "CLZ"], [13, 3, 1, "", "CPOP"], [13, 3, 1, "", "CTZ"], [13, 3, 1, "", "EBREAK"], [13, 3, 1, "", "ECALL"], [13, 3, 1, "", "MRET"], [13, 3, 1, "", "ORCB"], [13, 3, 1, "", "REV8_32"], [13, 3, 1, "", "REV8_64"], [13, 3, 1, "", "SEXTB"], [13, 3, 1, "", "SEXTH"], [13, 3, 1, "", "SRET"], [13, 3, 1, "", "WFI"], [13, 3, 1, "", "ZEXTH"]], "coreblocks.params.isa.Funct3": [[13, 3, 1, "", "ADD"], [13, 3, 1, "", "AND"], [13, 3, 1, "", "ANDN"], [13, 3, 1, "", "B"], [13, 3, 1, "", "BCLR"], [13, 3, 1, "", "BEQ"], [13, 3, 1, "", "BEXT"], [13, 3, 1, "", "BGE"], [13, 3, 1, "", "BGEU"], [13, 3, 1, "", "BINV"], [13, 3, 1, "", "BLT"], [13, 3, 1, "", "BLTU"], [13, 3, 1, "", "BNE"], [13, 3, 1, "", "BSET"], [13, 3, 1, "", "BU"], [13, 3, 1, "", "CLMUL"], [13, 3, 1, "", "CLMULH"], [13, 3, 1, "", "CLMULR"], [13, 3, 1, "", "CLZ"], [13, 3, 1, "", "CPOP"], [13, 3, 1, "", "CSRRC"], [13, 3, 1, "", "CSRRCI"], [13, 3, 1, "", "CSRRS"], [13, 3, 1, "", "CSRRSI"], [13, 3, 1, "", "CSRRW"], [13, 3, 1, "", "CSRRWI"], [13, 3, 1, "", "CTZ"], [13, 3, 1, "", "D"], [13, 3, 1, "", "DIV"], [13, 3, 1, "", "DIVU"], [13, 3, 1, "", "DIVUW"], [13, 3, 1, "", "DIVW"], [13, 3, 1, "", "FENCE"], [13, 3, 1, "", "FENCEI"], [13, 3, 1, "", "H"], [13, 3, 1, "", "HU"], [13, 3, 1, "", "JALR"], [13, 3, 1, "", "MAX"], [13, 3, 1, "", "MAXU"], [13, 3, 1, "", "MIN"], [13, 3, 1, "", "MINU"], [13, 3, 1, "", "MUL"], [13, 3, 1, "", "MULH"], [13, 3, 1, "", "MULHSU"], [13, 3, 1, "", "MULHU"], [13, 3, 1, "", "MULW"], [13, 3, 1, "", "OR"], [13, 3, 1, "", "ORCB"], [13, 3, 1, "", "ORN"], [13, 3, 1, "", "PRIV"], [13, 3, 1, "", "REM"], [13, 3, 1, "", "REMU"], [13, 3, 1, "", "REMUW"], [13, 3, 1, "", "REMW"], [13, 3, 1, "", "REV8"], [13, 3, 1, "", "ROL"], [13, 3, 1, "", "ROR"], [13, 3, 1, "", "SEXTB"], [13, 3, 1, "", "SEXTH"], [13, 3, 1, "", "SH1ADD"], [13, 3, 1, "", "SH2ADD"], [13, 3, 1, "", "SH3ADD"], [13, 3, 1, "", "SLL"], [13, 3, 1, "", "SLT"], [13, 3, 1, "", "SLTU"], [13, 3, 1, "", "SR"], [13, 3, 1, "", "SUB"], [13, 3, 1, "", "W"], [13, 3, 1, "", "XNOR"], [13, 3, 1, "", "XOR"], [13, 3, 1, "", "ZEXTH"]], "coreblocks.params.isa.Funct7": [[13, 3, 1, "", "ADD"], [13, 3, 1, "", "AND"], [13, 3, 1, "", "ANDN"], [13, 3, 1, "", "BCLR"], [13, 3, 1, "", "BEXT"], [13, 3, 1, "", "BINV"], [13, 3, 1, "", "BSET"], [13, 3, 1, "", "CLMUL"], [13, 3, 1, "", "CLZ"], [13, 3, 1, "", "CPOP"], [13, 3, 1, "", "CTZ"], [13, 3, 1, "", "MAX"], [13, 3, 1, "", "MIN"], [13, 3, 1, "", "MULDIV"], [13, 3, 1, "", "OR"], [13, 3, 1, "", "ORCB"], [13, 3, 1, "", "ORN"], [13, 3, 1, "", "REV8"], [13, 3, 1, "", "ROL"], [13, 3, 1, "", "ROR"], [13, 3, 1, "", "SA"], [13, 3, 1, "", "SEXTB"], [13, 3, 1, "", "SEXTH"], [13, 3, 1, "", "SFENCEVMA"], [13, 3, 1, "", "SH1ADD"], [13, 3, 1, "", "SH2ADD"], [13, 3, 1, "", "SH3ADD"], [13, 3, 1, "", "SL"], [13, 3, 1, "", "SLT"], [13, 3, 1, "", "SUB"], [13, 3, 1, "", "XNOR"], [13, 3, 1, "", "XOR"], [13, 3, 1, "", "ZEXTH"]], "coreblocks.params.isa.ISA": [[13, 2, 1, "", "__init__"]], "coreblocks.params.isa.InstrType": [[13, 3, 1, "", "B"], [13, 3, 1, "", "I"], [13, 3, 1, "", "J"], [13, 3, 1, "", "R"], [13, 3, 1, "", "S"], [13, 3, 1, "", "U"]], "coreblocks.params.isa.Opcode": [[13, 3, 1, "", "AUIPC"], [13, 3, 1, "", "BRANCH"], [13, 3, 1, "", "JAL"], [13, 3, 1, "", "JALR"], [13, 3, 1, "", "LOAD"], [13, 3, 1, "", "LOAD_FP"], [13, 3, 1, "", "LUI"], [13, 3, 1, "", "MISC_MEM"], [13, 3, 1, "", "OP"], [13, 3, 1, "", "OP32"], [13, 3, 1, "", "OP_IMM"], [13, 3, 1, "", "OP_IMM_32"], [13, 3, 1, "", "STORE"], [13, 3, 1, "", "STORE_FP"], [13, 3, 1, "", "SYSTEM"]], "coreblocks.params.isa.Registers": [[13, 3, 1, "", "A0"], [13, 3, 1, "", "A1"], [13, 3, 1, "", "A2"], [13, 3, 1, "", "A3"], [13, 3, 1, "", "A4"], [13, 3, 1, "", "A5"], [13, 3, 1, "", "A6"], [13, 3, 1, "", "A7"], [13, 3, 1, "", "FP"], [13, 3, 1, "", "GP"], [13, 3, 1, "", "RA"], [13, 3, 1, "", "S0"], [13, 3, 1, "", "S1"], [13, 3, 1, "", "S10"], [13, 3, 1, "", "S11"], [13, 3, 1, "", "S2"], [13, 3, 1, "", "S3"], [13, 3, 1, "", "S4"], [13, 3, 1, "", "S5"], [13, 3, 1, "", "S6"], [13, 3, 1, "", "S7"], [13, 3, 1, "", "S8"], [13, 3, 1, "", "S9"], [13, 3, 1, "", "SP"], [13, 3, 1, "", "T0"], [13, 3, 1, "", "T1"], [13, 3, 1, "", "T2"], [13, 3, 1, "", "T3"], [13, 3, 1, "", "T4"], [13, 3, 1, "", "T5"], [13, 3, 1, "", "T6"], [13, 3, 1, "", "TP"], [13, 3, 1, "", "X0"], [13, 3, 1, "", "X1"], [13, 3, 1, "", "X10"], [13, 3, 1, "", "X11"], [13, 3, 1, "", "X12"], [13, 3, 1, "", "X13"], [13, 3, 1, "", "X14"], [13, 3, 1, "", "X15"], [13, 3, 1, "", "X16"], [13, 3, 1, "", "X17"], [13, 3, 1, "", "X18"], [13, 3, 1, "", "X19"], [13, 3, 1, "", "X2"], [13, 3, 1, "", "X20"], [13, 3, 1, "", "X21"], [13, 3, 1, "", "X22"], [13, 3, 1, "", "X23"], [13, 3, 1, "", "X24"], [13, 3, 1, "", "X25"], [13, 3, 1, "", "X26"], [13, 3, 1, "", "X27"], [13, 3, 1, "", "X28"], [13, 3, 1, "", "X29"], [13, 3, 1, "", "X3"], [13, 3, 1, "", "X30"], [13, 3, 1, "", "X31"], [13, 3, 1, "", "X4"], [13, 3, 1, "", "X5"], [13, 3, 1, "", "X6"], [13, 3, 1, "", "X7"], [13, 3, 1, "", "X8"], [13, 3, 1, "", "X9"], [13, 3, 1, "", "ZERO"]], "coreblocks.params.keys": [[13, 1, 1, "", "BranchResolvedKey"], [13, 1, 1, "", "ExceptionReportKey"], [13, 1, 1, "", "GenericCSRRegistersKey"], [13, 1, 1, "", "InstructionPrecommitKey"], [13, 1, 1, "", "WishboneDataKey"]], "coreblocks.params.keys.BranchResolvedKey": [[13, 2, 1, "", "__init__"], [13, 3, 1, "", "unifier"]], "coreblocks.params.keys.ExceptionReportKey": [[13, 2, 1, "", "__init__"]], "coreblocks.params.keys.GenericCSRRegistersKey": [[13, 2, 1, "", "__init__"]], "coreblocks.params.keys.InstructionPrecommitKey": [[13, 2, 1, "", "__init__"], [13, 3, 1, "", "unifier"]], "coreblocks.params.keys.WishboneDataKey": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts": [[13, 1, 1, "", "CSRLayouts"], [13, 1, 1, "", "CommonLayouts"], [13, 1, 1, "", "DecodeLayouts"], [13, 1, 1, "", "FetchLayouts"], [13, 1, 1, "", "FuncUnitLayouts"], [13, 1, 1, "", "ICacheLayouts"], [13, 1, 1, "", "LSULayouts"], [13, 1, 1, "", "RATLayouts"], [13, 1, 1, "", "RFLayouts"], [13, 1, 1, "", "ROBLayouts"], [13, 1, 1, "", "RSInterfaceLayouts"], [13, 1, 1, "", "RSLayouts"], [13, 1, 1, "", "SchedulerLayouts"], [13, 1, 1, "", "UnsignedMulUnitLayouts"]], "coreblocks.params.layouts.CSRLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.CommonLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.DecodeLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.FetchLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.FuncUnitLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.ICacheLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.LSULayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.RATLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.RFLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.ROBLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.RSInterfaceLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.RSLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.SchedulerLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.UnsignedMulUnitLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.optypes": [[13, 1, 1, "", "OpType"], [13, 4, 1, "", "optypes_required_by_extensions"]], "coreblocks.params.optypes.OpType": [[13, 3, 1, "", "ADDRESS_GENERATION"], [13, 3, 1, "", "ARITHMETIC"], [13, 3, 1, "", "AUIPC"], [13, 3, 1, "", "BIT_MANIPULATION"], [13, 3, 1, "", "BRANCH"], [13, 3, 1, "", "CLMUL"], [13, 3, 1, "", "COMPARE"], [13, 3, 1, "", "CSR_IMM"], [13, 3, 1, "", "CSR_REG"], [13, 3, 1, "", "DIV_REM"], [13, 3, 1, "", "EBREAK"], [13, 3, 1, "", "ECALL"], [13, 3, 1, "", "EXCEPTION"], [13, 3, 1, "", "FENCE"], [13, 3, 1, "", "FENCEI"], [13, 3, 1, "", "JAL"], [13, 3, 1, "", "JALR"], [13, 3, 1, "", "LOAD"], [13, 3, 1, "", "LOGIC"], [13, 3, 1, "", "MRET"], [13, 3, 1, "", "MUL"], [13, 3, 1, "", "SFENCEVMA"], [13, 3, 1, "", "SHIFT"], [13, 3, 1, "", "SINGLE_BIT_MANIPULATION"], [13, 3, 1, "", "SRET"], [13, 3, 1, "", "STORE"], [13, 3, 1, "", "UNARY_BIT_MANIPULATION_1"], [13, 3, 1, "", "UNARY_BIT_MANIPULATION_2"], [13, 3, 1, "", "UNARY_BIT_MANIPULATION_3"], [13, 3, 1, "", "UNARY_BIT_MANIPULATION_4"], [13, 3, 1, "", "UNARY_BIT_MANIPULATION_5"], [13, 3, 1, "", "UNKNOWN"], [13, 3, 1, "", "WFI"]], "coreblocks.peripherals": [[14, 0, 0, "-", "wishbone"]], "coreblocks.peripherals.wishbone": [[14, 1, 1, "", "PipelinedWishboneMaster"], [14, 1, 1, "", "WishboneArbiter"], [14, 1, 1, "", "WishboneBus"], [14, 1, 1, "", "WishboneLayout"], [14, 1, 1, "", "WishboneMaster"], [14, 1, 1, "", "WishboneMemorySlave"], [14, 1, 1, "", "WishboneMuxer"], [14, 1, 1, "", "WishboneParameters"]], "coreblocks.peripherals.wishbone.PipelinedWishboneMaster": [[14, 2, 1, "", "__init__"], [14, 2, 1, "", "generate_method_layouts"]], "coreblocks.peripherals.wishbone.WishboneArbiter": [[14, 2, 1, "", "__init__"]], "coreblocks.peripherals.wishbone.WishboneBus": [[14, 2, 1, "", "__init__"]], "coreblocks.peripherals.wishbone.WishboneLayout": [[14, 2, 1, "", "__init__"]], "coreblocks.peripherals.wishbone.WishboneMaster": [[14, 2, 1, "", "__init__"], [14, 2, 1, "", "generate_layouts"]], "coreblocks.peripherals.wishbone.WishboneMemorySlave": [[14, 2, 1, "", "__init__"]], "coreblocks.peripherals.wishbone.WishboneMuxer": [[14, 2, 1, "", "__init__"]], "coreblocks.peripherals.wishbone.WishboneParameters": [[14, 2, 1, "", "__init__"]], "coreblocks.scheduler": [[15, 0, 0, "-", "scheduler"], [15, 0, 0, "-", "wakeup_select"]], "coreblocks.scheduler.scheduler": [[15, 1, 1, "", "Scheduler"]], "coreblocks.scheduler.scheduler.Scheduler": [[15, 2, 1, "", "__init__"]], "coreblocks.scheduler.wakeup_select": [[15, 1, 1, "", "WakeupSelect"]], "coreblocks.scheduler.wakeup_select.WakeupSelect": [[15, 2, 1, "", "__init__"]], "coreblocks.stages": [[16, 0, 0, "-", "backend"], [16, 0, 0, "-", "func_blocks_unifier"], [16, 0, 0, "-", "retirement"], [16, 0, 0, "-", "rs_func_block"]], "coreblocks.stages.backend": [[16, 1, 1, "", "ResultAnnouncement"]], "coreblocks.stages.backend.ResultAnnouncement": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "debug_signals"]], "coreblocks.stages.func_blocks_unifier": [[16, 1, 1, "", "FuncBlocksUnifier"]], "coreblocks.stages.func_blocks_unifier.FuncBlocksUnifier": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "get_extra_method"]], "coreblocks.stages.retirement": [[16, 1, 1, "", "Retirement"]], "coreblocks.stages.retirement.Retirement": [[16, 2, 1, "", "__init__"]], "coreblocks.stages.rs_func_block": [[16, 1, 1, "", "RSBlockComponent"], [16, 1, 1, "", "RSFuncBlock"]], "coreblocks.stages.rs_func_block.RSBlockComponent": [[16, 2, 1, "", "__init__"], [16, 3, 1, "", "func_units"], [16, 2, 1, "", "get_module"], [16, 2, 1, "", "get_optypes"], [16, 2, 1, "", "get_rs_entry_count"], [16, 3, 1, "", "rs_entries"]], "coreblocks.stages.rs_func_block.RSFuncBlock": [[16, 2, 1, "", "__init__"]], "coreblocks.structs_common": [[17, 0, 0, "-", "csr"], [17, 0, 0, "-", "csr_generic"], [17, 0, 0, "-", "exception"], [17, 0, 0, "-", "rat"], [17, 0, 0, "-", "rf"], [17, 0, 0, "-", "rob"], [17, 0, 0, "-", "rs"]], "coreblocks.structs_common.csr": [[17, 1, 1, "", "CSRBlockComponent"], [17, 1, 1, "", "CSRListKey"], [17, 1, 1, "", "CSRRegister"], [17, 1, 1, "", "CSRUnit"], [17, 1, 1, "", "PrivilegeLevel"], [17, 4, 1, "", "csr_access_privilege"]], "coreblocks.structs_common.csr.CSRBlockComponent": [[17, 2, 1, "", "get_module"], [17, 2, 1, "", "get_optypes"], [17, 2, 1, "", "get_rs_entry_count"]], "coreblocks.structs_common.csr.CSRListKey": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.csr.CSRRegister": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.csr.CSRUnit": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.csr.PrivilegeLevel": [[17, 3, 1, "", "MACHINE"], [17, 3, 1, "", "SUPERVISOR"], [17, 3, 1, "", "USER"]], "coreblocks.structs_common.csr_generic": [[17, 1, 1, "", "CSRAddress"], [17, 1, 1, "", "DoubleCounterCSR"], [17, 1, 1, "", "GenericCSRRegisters"]], "coreblocks.structs_common.csr_generic.CSRAddress": [[17, 3, 1, "", "CYCLE"], [17, 3, 1, "", "CYCLEH"], [17, 3, 1, "", "INSTRET"], [17, 3, 1, "", "INSTRETH"], [17, 3, 1, "", "MCAUSE"], [17, 3, 1, "", "TIME"], [17, 3, 1, "", "TIMEH"]], "coreblocks.structs_common.csr_generic.DoubleCounterCSR": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.csr_generic.GenericCSRRegisters": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.exception": [[17, 1, 1, "", "ExceptionCauseRegister"], [17, 4, 1, "", "should_update_prioriy"]], "coreblocks.structs_common.exception.ExceptionCauseRegister": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.rat": [[17, 1, 1, "", "FRAT"], [17, 1, 1, "", "RRAT"]], "coreblocks.structs_common.rat.FRAT": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.rat.RRAT": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.rf": [[17, 1, 1, "", "RegisterFile"]], "coreblocks.structs_common.rf.RegisterFile": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.rob": [[17, 1, 1, "", "ReorderBuffer"]], "coreblocks.structs_common.rob.ReorderBuffer": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.rs": [[17, 1, 1, "", "RS"]], "coreblocks.structs_common.rs.RS": [[17, 2, 1, "", "__init__"]], "coreblocks.utils": [[18, 0, 0, "-", "debug_signals"], [18, 0, 0, "-", "fifo"], [18, 0, 0, "-", "protocols"], [18, 0, 0, "-", "utils"]], "coreblocks.utils.debug_signals": [[18, 4, 1, "", "auto_debug_signals"]], "coreblocks.utils.fifo": [[18, 1, 1, "", "BasicFifo"], [18, 1, 1, "", "Semaphore"]], "coreblocks.utils.fifo.BasicFifo": [[18, 2, 1, "", "__init__"]], "coreblocks.utils.fifo.Semaphore": [[18, 2, 1, "", "__init__"]], "coreblocks.utils.protocols": [[18, 1, 1, "", "FuncBlock"], [18, 1, 1, "", "FuncUnit"], [18, 1, 1, "", "Unifier"]], "coreblocks.utils.protocols.FuncBlock": [[18, 2, 1, "", "__init__"], [18, 3, 1, "", "get_result"], [18, 3, 1, "", "insert"], [18, 3, 1, "", "select"], [18, 3, 1, "", "update"]], "coreblocks.utils.protocols.FuncUnit": [[18, 2, 1, "", "__init__"], [18, 3, 1, "", "accept"], [18, 3, 1, "", "issue"]], "coreblocks.utils.protocols.Unifier": [[18, 2, 1, "", "__init__"], [18, 3, 1, "", "method"]], "coreblocks.utils.utils": [[18, 1, 1, "", "AssignType"], [18, 1, 1, "", "ModuleConnector"], [18, 4, 1, "", "OneHotSwitch"], [18, 4, 1, "", "OneHotSwitchDynamic"], [18, 4, 1, "", "align_to_power_of_two"], [18, 4, 1, "", "assign"], [18, 4, 1, "", "bits_from_int"], [18, 4, 1, "", "count_leading_zeros"], [18, 4, 1, "", "count_trailing_zeros"], [18, 4, 1, "", "flatten_signals"], [18, 4, 1, "", "popcount"], [18, 4, 1, "", "silence_mustuse"]], "coreblocks.utils.utils.AssignType": [[18, 3, 1, "", "ALL"], [18, 3, 1, "", "COMMON"], [18, 3, 1, "", "RHS"]], "coreblocks.utils.utils.ModuleConnector": [[18, 2, 1, "", "__init__"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:function"}, "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"]}, "titleterms": {"list": 0, "assumpt": [0, 8], "made": 0, "dure": 0, "develop": [0, 2], "full": 1, "transact": [1, 5], "method": [1, 5, 23, 24], "graph": 1, "environ": 2, "set": 2, "up": 2, "us": [2, 23, 24], "script": 2, "run_test": 2, "py": 2, "lint": 2, "sh": 2, "core_graph": 2, "build_doc": 2, "introduct": [3, 5, 20], "document": [3, 5, 25], "problem": 4, "checklist": 4, "coreblock": [5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "framework": 5, "basic": 5, "usag": [5, 25], "implement": [5, 23], "The": 5, "librari": 5, "advanc": 5, "concept": 5, "nest": 5, "api": 6, "instruct": [8, 24], "cach": 8, "interfac": [8, 23, 24], "address": 8, "map": 8, "exampl": 8, "packag": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18], "subpackag": [9, 11], "submodul": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18], "core": 9, "modul": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18], "content": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18], "frontend": 10, "decod": 10, "fetch": 10, "icach": 10, "rvc": 10, "fu": [11, 12], "alu": 11, "div_unit": 11, "except": [11, 17, 20], "fu_decod": 11, "jumpbranch": 11, "mul_unit": 11, "shift_unit": 11, "zbc": 11, "zb": 11, "unsigned_multipl": 12, "common": 12, "fast_recurs": 12, "sequenc": 12, "shift": 12, "param": 13, "configur": 13, "depend": 13, "fu_param": 13, "genparam": 13, "icache_param": 13, "instr": 13, "isa": 13, "kei": 13, "layout": 13, "optyp": 13, "peripher": 14, "wishbon": 14, "schedul": [15, 22], "wakeup_select": 15, "stage": 16, "backend": 16, "func_blocks_unifi": 16, "retir": 16, "rs_func_block": 16, "structs_common": 17, "csr": 17, "csr_gener": 17, "rat": 17, "rf": 17, "rob": 17, "r": 17, "util": 18, "debug_sign": 18, "fifo": 18, "protocol": 18, "summari": 20, "paper": 20, "about": 20, "interrupt": 20, "handl": 20, "old": 20, "pc": 20, "out": 20, "order": 20, "execut": 20, "processor": 20, "In": 20, "line": 20, "softwar": 20, "manag": 20, "tlb": 20, "hardwar": 20, "cost": 20, "analysi": 20, "process": 20, "strategi": 20, "igpu": 20, "support": 20, "specul": 20, "gpu": 20, "effici": 20, "other": 20, "overview": [22, 24], "descript": 22, "schema": 22, "structur": 22, "more": 22, "detail": 22, "each": 22, "block": 22, "proposit": 23, "reserv": [23, 24], "station": [23, 24], "intern": 23, "data": 23, "actual": 23, "slot": [23, 24], "tabl": 23, "compar": [23, 24], "substitut": [23, 24], "read": [23, 24], "row": [23, 24], "clean": [23, 24], "get": [23, 24], "free": 23, "mark": [23, 24], "extern": [23, 24], "all": [23, 24], "reset": 24, "initi": 24, "state": 24, "insert": 24, "new": 24, "readi": 24, "vector": 24, "signal": 24, "synthesi": 25, "requir": 25, "benchmark": 25}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.todo": 2, "sphinx": 56}}) \ No newline at end of file +Search.setIndex({"docnames": ["Assumptions", "Current_graph", "Development_environment", "Home", "Problem-checklist", "Transactions", "api", "auto_graph", "components/icache", "coreblocks", "coreblocks.frontend", "coreblocks.fu", "coreblocks.fu.unsigned_multiplication", "coreblocks.params", "coreblocks.peripherals", "coreblocks.scheduler", "coreblocks.stages", "coreblocks.structs_common", "coreblocks.utils", "index", "miscellany/exceptionsSummary", "modules-coreblocks", "modules-transactron", "scheduler/Overview", "shared_structs/Implementation/RS_impl", "shared_structs/RS", "synthesis/Synthesis", "transactron"], "filenames": ["Assumptions.md", "Current_graph.md", "Development_environment.md", "Home.md", "Problem-checklist.md", "Transactions.md", "api.md", "auto_graph.rst", "components/icache.md", "coreblocks.rst", "coreblocks.frontend.rst", "coreblocks.fu.rst", "coreblocks.fu.unsigned_multiplication.rst", "coreblocks.params.rst", "coreblocks.peripherals.rst", "coreblocks.scheduler.rst", "coreblocks.stages.rst", "coreblocks.structs_common.rst", "coreblocks.utils.rst", "index.md", "miscellany/exceptionsSummary.md", "modules-coreblocks.rst", "modules-transactron.rst", "scheduler/Overview.md", "shared_structs/Implementation/RS_impl.md", "shared_structs/RS.md", "synthesis/Synthesis.md", "transactron.rst"], "titles": ["List of assumptions made during development", "Full transaction-method graph", "Development environment", "Introduction", "Problem checklist", "Documentation for Coreblocks transaction framework", "API", "<no title>", "Instruction Cache", "coreblocks package", "coreblocks.frontend package", "coreblocks.fu package", "coreblocks.fu.unsigned_multiplication package", "coreblocks.params package", "coreblocks.peripherals package", "coreblocks.scheduler package", "coreblocks.stages package", "coreblocks.structs_common package", "coreblocks.utils package", "Coreblocks", "Summary of papers about interrupts", "coreblocks", "transactron", "Scheduler overview", "Proposition of Reservation Station implementation", "Reservation Station", "Synthesis", "transactron package"], "terms": {"rf": [0, 6, 9, 16, 20, 21, 24, 25], "ha": [0, 2, 4, 10, 15, 17, 18, 20, 24, 27], "data": [0, 10, 13, 14, 17, 18, 19, 25, 27], "forward": [0, 27], "from": [0, 2, 3, 4, 5, 10, 13, 14, 15, 16, 17, 18, 20, 24, 25, 26, 27], "tomasulo": 0, "announc": [0, 16, 17], "bu": [0, 13, 14], "read": [0, 4, 5, 13, 14, 17, 18, 19, 27], "x0": [0, 13], "rf0": 0, "return": [0, 5, 8, 11, 13, 14, 18, 20, 27], "0": [0, 10, 11, 13, 15, 17, 24, 25, 27], "write": [0, 5, 10, 17, 18, 20, 25, 27], "i": [0, 2, 3, 5, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 23, 24, 25, 26, 27], "noop": 0, "separ": [0, 23, 27], "r": [0, 2, 6, 9, 13, 15, 16, 20, 21, 23, 24, 25], "each": [0, 10, 11, 13, 14, 17, 19, 20, 24, 25, 26, 27], "fu": [0, 6, 9, 13, 16, 17, 21, 24, 25], "writeback": 0, "stage": [0, 6, 9, 17, 21], "save": [0, 2, 13, 16, 20, 24, 25, 26, 27], "rob": [0, 6, 9, 15, 16, 20, 21, 23, 24, 25], "after": [0, 5, 8, 10, 14, 20, 23, 27], "get": [0, 2, 10, 11, 12, 13, 15, 16, 18, 19, 27], "output": [0, 2, 10, 14, 16, 17, 20, 24, 25, 26, 27], "commit": [0, 2, 17, 20, 26], "updat": [0, 16, 17, 18], "rat": [0, 6, 9, 15, 20, 21], "In": [2, 3, 5, 15, 18, 19, 25, 26, 27], "order": [2, 3, 5, 8, 13, 15, 19, 26, 27], "prepar": [2, 15, 20, 27], "pleas": [2, 4, 5, 13], "follow": [2, 5, 8, 11, 15, 18, 24, 26], "step": [2, 5, 10, 15, 20], "below": 2, "instal": [2, 26], "python": [2, 5, 18, 27], "3": [2, 11, 13, 17, 18, 27], "10": [2, 8, 13, 20], "interpret": [2, 13, 27], "pip": 2, "packag": [2, 6, 19, 21, 22], "manag": [2, 11, 13, 19, 27], "option": [2, 5, 11, 13, 17, 18, 27], "creat": [2, 10, 12, 18, 27], "virtual": 2, "python3": 2, "m": [2, 5, 13, 17, 18, 20, 27], "venv": 2, "project": [2, 3, 20, 26], "directori": [2, 3], "activ": [2, 27], "gener": [2, 3, 4, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 26, 27], "bin": 2, "all": [2, 4, 5, 13, 14, 17, 18, 19, 20, 26, 27], "requir": [2, 8, 17, 19, 20, 27], "librari": [2, 19, 27], "pip3": 2, "dev": 2, "txt": 2, "riscv64": 2, "unknown": [2, 13], "elf": 2, "binutil": 2, "your": [2, 4], "favourit": 2, "On": [2, 27], "debian": 2, "base": [2, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 27], "distro": 2, "call": [2, 4, 5, 10, 15, 17, 24, 27], "arch": [2, 13], "precommit": [2, 16], "hook": [2, 27], "pre": 2, "thi": [2, 4, 5, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 24, 25, 26, 27], "automat": [2, 17, 18], "run": [2, 5, 26, 27], "linter": 2, "befor": [2, 4, 13, 14, 23, 27], "The": [2, 3, 8, 10, 11, 13, 14, 16, 18, 19, 20, 23, 24, 25, 27], "contain": [2, 5, 13, 18, 27], "number": [2, 12, 13, 14, 16, 18, 20, 26, 27], "which": [2, 3, 5, 8, 10, 11, 15, 16, 18, 20, 23, 24, 25, 27], "ar": [2, 3, 4, 5, 8, 13, 14, 16, 17, 18, 20, 23, 24, 25, 26, 27], "ci": [2, 26], "also": [2, 5, 16, 27], "intend": [2, 27], "local": [2, 13], "thei": [2, 5, 14, 17, 20, 23, 27], "unit": [2, 8, 10, 11, 12, 13, 14, 15, 16, 17, 23], "test": [2, 4, 13, 18, 26, 27], "By": [2, 27], "default": [2, 13, 14, 18, 27], "everi": [2, 10, 11, 14, 27], "avail": [2, 3, 13, 14, 15, 17, 26], "specif": [2, 8, 13, 20], "file": [2, 13, 18, 20], "can": [2, 3, 5, 8, 13, 14, 16, 17, 18, 20, 23, 24, 26, 27], "test_transact": 2, "an": [2, 3, 4, 5, 8, 10, 11, 13, 15, 16, 17, 18, 20, 24, 27], "exampl": [2, 5, 13, 17, 18, 19, 24, 26, 27], "One": [2, 18, 20, 27], "even": [2, 20, 27], "class": [2, 5, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 27], "testschedul": 2, "Or": [2, 5], "method": [2, 8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 27], "test_singl": 2, "argument": [2, 5, 14, 15, 18, 25, 27], "actual": [2, 10, 19], "search": 2, "within": [2, 12], "full": [2, 13, 18, 19, 20, 27], "name": [2, 5, 18, 26, 27], "match": [2, 18, 24, 25], "queri": 2, "thank": 2, "given": [2, 5, 18, 24, 27], "uniqu": 2, "just": [2, 5], "l": [2, 13], "list": [2, 4, 10, 11, 13, 14, 17, 18, 19, 27], "help": [2, 20, 26], "e": [2, 4, 10, 13, 18, 20, 27], "g": [2, 4, 10, 13, 18, 20], "find": [2, 20], "parameter": 2, "t": [2, 4, 5, 10, 13, 18, 20, 24, 26, 27], "trace": [2, 6, 22], "waveform": 2, "vcd": 2, "format": [2, 5, 11, 18, 27], "gtkw": [2, 18], "gtkwave": [2, 18], "tool": [2, 12, 26], "__traces__": 2, "debug": [2, 18], "driven": 2, "v": [2, 3, 8, 13, 20, 24], "verbos": [2, 26], "make": [2, 3, 4, 10, 11, 20], "runner": 2, "more": [2, 16, 19, 20, 26], "It": [2, 5, 10, 11, 12, 13, 15, 16, 20, 23, 24, 27], "print": 2, "being": [2, 14, 18, 27], "check": [2, 4, 18, 20, 24, 25], "code": [2, 3, 4, 5, 18, 20, 27], "type": [2, 10, 11, 13, 18, 27], "should": [2, 3, 5, 8, 10, 13, 14, 15, 16, 18, 20, 23, 24, 25, 27], "subcommand": 2, "filenam": 2, "main": [2, 20, 23], "reformat": 2, "black": 2, "check_format": 2, "verifi": 2, "flake8": 2, "check_typ": 2, "pyright": 2, "same": [2, 5, 12, 13, 18, 27], "when": [2, 4, 5, 10, 14, 18, 20, 24, 25, 27], "confront": 2, "would": [2, 13, 20], "messag": 2, "you": [2, 4, 24, 26], "mai": [2, 26], "diff": 2, "wai": [2, 5, 10, 11, 13, 20, 27], "displai": 2, "chang": [2, 5, 24, 27], "appli": [2, 4, 20, 27], "chose": 2, "locat": [2, 3, 23], "issu": [2, 8, 10, 11, 12, 15, 18], "visual": 2, "core": [2, 6, 10, 11, 12, 13, 15, 16, 17, 20, 21, 22, 26], "architectur": [2, 20], "graph": [2, 6, 19, 22, 26], "one": [2, 5, 8, 10, 11, 14, 16, 18, 20, 23, 24, 25, 27], "support": [2, 10, 13, 15, 19, 27], "need": [2, 5, 10, 14, 20, 24, 26, 27], "pass": [2, 5, 16, 17, 18, 27], "appropri": [2, 24, 27], "p": [2, 13], "prune": [2, 27], "remov": [2, 20], "disconnect": 2, "node": 2, "f": [2, 13, 15, 26], "select": [2, 10, 11, 14, 15, 16, 17, 18], "elk": [2, 27], "eclips": 2, "layout": [2, 4, 5, 6, 9, 10, 14, 15, 16, 18, 21, 27], "kernel": [2, 20], "dot": [2, 27], "graphviz": 2, "mermaid": [2, 27], "document": [2, 19], "sphinx": 2, "html": [2, 3], "build": [2, 26], "coreblock": [3, 4, 26], "go": [3, 4, 20, 27], "out": [3, 10, 11, 12, 14, 16, 19, 27], "processor": [3, 19, 23], "implement": [3, 11, 13, 14, 19, 20, 23], "risc": [3, 8, 13], "microarchitectur": 3, "focu": 3, "flexibl": [3, 23], "allow": [3, 13, 18, 20, 27], "easili": [3, 27], "experi": 3, "differ": [3, 4, 11, 13, 14, 16, 20, 27], "compon": [3, 10, 13, 27], "doc": 3, "collect": [3, 13, 16, 17, 26, 27], "descript": [3, 19], "whole": [3, 10, 20, 27], "overview": [3, 19, 20], "high": 3, "level": [3, 13, 20], "found": 3, "version": 3, "page": [3, 20], "api": [3, 19], "kuznia": 3, "rdzeni": 3, "github": 3, "io": 3, "If": [4, 5, 8, 10, 13, 14, 17, 18, 20, 24, 27], "someth": [4, 5], "doesn": [4, 5, 18, 20], "work": [4, 5, 10, 15, 20, 27], "re": [4, 5, 14, 20, 27], "puzzl": 4, "why": 4, "through": 4, "see": [4, 5, 12], "ani": [4, 8, 10, 13, 14, 15, 18, 20], "point": [4, 13, 20], "case": [4, 8, 14, 15, 16, 18, 20, 27], "sure": 4, "us": [4, 5, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 26, 27], "yield": 4, "function": [4, 5, 10, 11, 13, 15, 16, 18, 20, 26, 27], "testbenchio": 4, "notabl": 4, "except": [4, 6, 9, 13, 16, 18, 19, 21, 27], "settl": 4, "instead": [4, 5, 20, 27], "signal": [4, 10, 11, 14, 18, 19, 27], "unexpect": 4, "valu": [4, 10, 11, 13, 14, 15, 16, 17, 18, 24, 25, 27], "try": [4, 5, 20], "ad": [4, 13, 18, 26, 27], "right": [4, 27], "don": [4, 20, 24, 27], "do": [4, 10, 13, 20, 27], "eq": [4, 5, 27], "two": [4, 5, 10, 16, 17, 18, 20, 27], "record": [4, 5, 10, 11, 14, 18, 27], "assign": [4, 5, 17, 18, 27], "util": [4, 5, 6, 9, 15, 16, 21, 27], "amaranth": [4, 5, 10, 13, 14, 18, 26, 27], "statement": [4, 5, 18, 27], "some": [4, 5, 17, 20, 26, 27], "domain": [4, 27], "have": [4, 8, 13, 14, 16, 17, 18, 20, 26, 27], "combin": [4, 13, 16, 27], "loop": 4, "especi": 4, "simul": [4, 27], "hang": 4, "extend": [4, 13, 27], "spot": 4, "yourself": [4, 5, 26], "easi": [4, 5, 20], "fix": 4, "mistak": 4, "modular": 5, "design": [5, 12, 20, 27], "inspir": 5, "bluespec": 5, "program": [5, 13, 20], "languag": [5, 13], "wiki": 5, "compil": [5, 26], "idea": [5, 20], "interfac": [5, 10, 12, 14, 15, 16, 17, 19, 27], "hardwar": [5, 13, 19, 23], "modul": [5, 6, 21, 22], "A": [5, 10, 13, 27], "state": [5, 14, 19, 20, 27], "oper": [5, 8, 10, 11, 13, 20, 27], "perform": [5, 10, 11, 12, 13, 15, 17, 18, 26, 27], "singl": [5, 11, 12, 13, 15, 16, 18, 27], "clock": [5, 12, 23, 26, 27], "cycl": [5, 8, 11, 12, 14, 17, 20, 23, 27], "atom": [5, 13, 24], "either": [5, 10, 18, 27], "execut": [5, 11, 13, 14, 15, 16, 19, 23, 25, 27], "its": [5, 10, 15, 16, 17, 18, 20, 27], "entrieti": 5, "onli": [5, 11, 17, 18, 20, 27], "readi": [5, 10, 14, 15, 16, 17, 18, 19, 24, 27], "doe": 5, "conflict": [5, 27], "anoth": [5, 8, 10, 27], "schedul": [5, 6, 9, 19, 20, 21, 27], "defin": [5, 10, 17, 18, 27], "depend": [5, 6, 9, 17, 18, 21, 27], "other": [5, 17, 19, 27], "via": [5, 10, 27], "directli": [5, 13, 27], "link": 5, "indirectli": [5, 27], "multipl": [5, 8, 11, 12, 13, 14, 15, 16, 27], "them": [5, 13, 18, 20, 27], "access": [5, 8, 13, 17, 20], "coordin": 5, "system": [5, 13], "avoid": 5, "commun": [5, 20, 24], "caller": [5, 27], "both": [5, 18, 24, 27], "direct": [5, 18, 27], "back": 5, "structur": [5, 18, 19, 20, 24], "simplest": 5, "part": [5, 17, 20, 23, 27], "elaborat": [5, 9, 10, 11, 12, 14, 15, 16, 17, 18, 27], "block": [5, 8, 12, 13, 14, 15, 16, 19, 20, 27], "myth": 5, "def": [5, 27], "elabor": 5, "self": 5, "platform": [5, 26, 27], "tmodul": [5, 17, 27], "bodi": [5, 17, 27], "condit": [5, 27], "includ": [5, 18, 27], "like": [5, 8, 10, 14, 20, 27], "d": [5, 13, 27], "comb": [5, 27], "sig1": 5, "expr1": 5, "sync": [5, 27], "sig2": 5, "expr2": 5, "result": [5, 8, 10, 11, 12, 13, 14, 16, 17, 18, 20, 27], "arg_expr": 5, "analog": 5, "": [5, 13, 14, 18, 20, 27], "multiplex": 5, "rememb": [5, 20, 27], "insid": [5, 10, 27], "alwai": [5, 8, 17, 27], "onc": [5, 27], "becaus": [5, 20, 27], "resourc": [5, 11, 20, 26], "request": [5, 8, 10, 11, 12, 13, 14, 27], "paramet": [5, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27], "bit": [5, 8, 10, 11, 12, 13, 14, 17, 18, 20, 24, 25, 27], "express": 5, "expr": 5, "As": [5, 8, 20], "typic": [5, 27], "declar": 5, "constructor": [5, 10, 27], "myotherth": 5, "__init__": [5, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 27], "o": [5, 12, 20, 27], "my_method": 5, "input_layout": 5, "output_layout": 5, "def_method": [5, 27], "_": [5, 27], "arg": [5, 10, 11, 18, 27], "other_method": 5, "ret_expr": 5, "techniqu": 5, "present": [5, 18, 20, 27], "abov": 5, "conveni": [5, 27], "syntax": [5, 27], "particular": 5, "unnam": 5, "usual": [5, 20], "For": [5, 8, 13, 18, 24, 25, 26], "could": 5, "around": 5, "entir": [5, 8], "sometim": 5, "might": [5, 27], "altern": [5, 27], "decid": [5, 20, 23], "best": 5, "import": [5, 20], "question": 5, "ask": 5, "independ": [5, 8, 27], "thing": [5, 18], "lock": [5, 20, 27], "so": [5, 14, 16, 20, 27], "mayb": [5, 20], "extern": [5, 19, 27], "doubt": 5, "prefer": 5, "noth": 5, "els": [5, 17, 20, 27], "Such": 5, "adaptertran": [5, 27], "facilit": 5, "provid": [5, 10, 11, 13, 15, 17, 27], "most": [5, 8, 20, 27], "ones": 5, "connecttran": [5, 27], "connect": [5, 10, 14, 16, 17, 20, 27], "togeth": [5, 27], "fifo": [5, 6, 9, 16, 20, 21, 27], "queue": [5, 18, 20, 27], "adapt": [5, 27], "plain": [5, 27], "These": [5, 20, 26], "veri": [5, 20], "testbench": [5, 27], "parent": 5, "convers": 5, "true": [5, 13, 14, 18, 27], "possibl": [5, 18, 20, 27], "limit": [5, 14, 27], "impli": 5, "consid": [5, 20, 27], "subpackag": [6, 21], "frontend": [6, 9, 21, 23], "submodul": [6, 21, 22], "decod": [6, 9, 11, 15, 21], "fetch": [6, 8, 9, 13, 16, 17, 20, 21], "icach": [6, 9, 21], "rvc": [6, 9, 21], "content": [6, 21, 22], "alu": [6, 9, 13, 21], "div_unit": [6, 9, 21], "fu_decod": [6, 9, 21], "jumpbranch": [6, 9, 13, 21], "mul_unit": [6, 9, 21], "shift_unit": [6, 9, 13, 21], "zbc": [6, 9, 13, 21], "zb": [6, 9, 13, 21], "param": [6, 9, 10, 11, 15, 16, 17, 21], "configur": [6, 9, 15, 21], "fu_param": [6, 9, 21], "genparam": [6, 9, 10, 11, 12, 15, 16, 17, 21], "icache_param": [6, 9, 21], "instr": [6, 9, 10, 21], "isa": [6, 9, 10, 17, 21], "kei": [6, 9, 17, 18, 21], "optyp": [6, 9, 10, 11, 15, 16, 17, 21], "peripher": [6, 9, 21], "wishbon": [6, 9, 21], "wakeup_select": [6, 9, 21], "backend": [6, 9, 21], "func_blocks_unifi": [6, 9, 21], "retir": [6, 9, 21], "rs_func_block": [6, 9, 21], "structs_common": [6, 9, 21], "csr": [6, 9, 10, 13, 21], "csr_gener": [6, 9, 21], "debug_sign": [6, 9, 16, 21, 27], "protocol": [6, 9, 10, 15, 16, 21], "lib": [6, 22], "expos": [8, 18, 27], "three": [8, 10, 20, 27], "issue_req": [8, 10], "lookup": [8, 10], "accept_resp": 8, "flush": [8, 10, 20], "under": [8, 27], "4": [8, 11, 13, 27], "byte": [8, 13], "align": [8, 18], "c": [8, 13, 20], "extens": [8, 13], "introduc": [8, 20], "16": [8, 13, 20, 27], "relax": 8, "handl": [8, 11, 19, 27], "fulli": [8, 27], "pipelin": [8, 14, 15, 17, 20, 24, 27], "process": [8, 19, 27], "invok": [8, 10, 15, 16, 20, 24], "accept_r": [8, 10], "space": [8, 20], "simpli": 8, "latenc": [8, 20, 27], "least": 8, "miss": [8, 20], "occur": [8, 10], "arbitrarili": 8, "long": [8, 25], "ensur": 8, "refetch": 8, "howev": 8, "guarante": [8, 20], "alreadi": [8, 13, 16, 20], "been": 8, "still": [8, 20, 25, 27], "wait": [8, 14, 16, 20, 24, 25, 27], "accept": [8, 10, 11, 12, 17, 18, 27], "inform": [8, 15, 26, 27], "regard": 8, "error": [8, 10, 14, 18, 27], "mean": [8, 15, 25, 27], "dure": [8, 19, 23], "line": [8, 10, 13, 19], "refil": [8, 10], "subsequ": 8, "trigger": [8, 17], "32": [8, 11, 12, 13, 20], "128": [8, 13], "set": [8, 10, 11, 13, 15, 16, 17, 19, 24, 27], "size": [8, 13, 14, 18, 20, 27], "equal": 8, "31": [8, 13], "15": [8, 13], "14": [8, 13], "13": [8, 13], "12": [8, 13], "11": [8, 13], "09": 8, "08": 8, "07": 8, "06": 8, "05": 8, "04": 8, "03": 8, "02": 8, "01": 8, "00": 8, "tag": [8, 14, 16, 20, 24, 25], "index": [8, 18, 27], "offset": 8, "unsigned_multipl": [9, 11], "common": [9, 11, 18, 27], "fast_recurs": [9, 11], "sequenc": [9, 11, 15, 18, 27], "shift": [9, 11, 13], "gen_param": [9, 10, 11, 13, 15, 16, 17], "wb_instr_bu": 9, "wishbonebu": [9, 14], "wb_data_bu": 9, "simpl": [10, 15, 16, 18, 27], "transact": [10, 13, 14, 17, 18, 19, 24, 27], "instanti": 10, "instrdecod": 10, "combinatori": 10, "manner": [10, 14], "get_raw": 10, "push_decod": 10, "none": [10, 11, 13, 16, 17, 18, 27], "instanc": [10, 13, 15, 16, 27], "raw": 10, "instruct": [10, 11, 13, 15, 16, 17, 19, 20, 23, 24], "previou": [10, 14, 20], "fetchlayout": [10, 13], "send": [10, 13, 15, 16], "next": [10, 15, 16, 17, 20, 27], "describ": [10, 15, 16, 20, 27], "decodelayout": [10, 13, 15], "elementari": 10, "opcod": [10, 13, 24, 25], "funct3": [10, 11, 13], "etc": 10, "attribut": [10, 11, 12, 13, 14, 16, 17, 18, 27], "gen": [10, 11, 12, 16], "ilen": [10, 13], "identifi": [10, 13, 24], "funct3_v": 10, "1": [10, 11, 12, 13, 15, 17, 18, 20, 24, 25, 27], "funct7": [10, 11, 13], "seven": 10, "funct7_v": 10, "funct12": [10, 13], "twelv": 10, "funct12_v": 10, "rd": [10, 13], "reg_cnt_log": 10, "address": [10, 13, 14, 17, 19, 20], "regist": [10, 13, 15, 17, 20, 23], "rd_v": 10, "rs1": [10, 13], "hold": [10, 14, 17], "first": [10, 11, 15, 20, 24, 25, 27], "input": [10, 11, 16, 17, 18, 20, 24, 25, 27], "rs1_v": 10, "take": [10, 13, 14, 16, 23, 24, 26, 27], "form": [10, 13, 17, 20, 27], "rs2": [10, 13], "second": [10, 11, 15, 24, 25, 27], "rs2_v": 10, "imm": [10, 13], "xlen": [10, 11, 13, 17], "immedi": [10, 14], "were": [10, 20], "succ": 10, "fencetarget": [10, 13], "successor": 10, "fenc": [10, 13], "pred": 10, "predecessor": 10, "fm": 10, "fencefm": [10, 13], "mode": [10, 13, 20], "csr_alen": [10, 13], "control": [10, 13, 14, 17, 27], "sourc": [10, 15, 24], "kind": [10, 11, 13, 15], "illeg": 10, "wa": [10, 13, 17, 20, 27], "success": [10, 14], "fit": 10, "pc": [10, 17, 19], "increment": [10, 17], "ilen_byt": 10, "icacheinterfac": 10, "cont": 10, "cach": [10, 13, 19], "unalignedfetch": 10, "unalign": 10, "associ": [10, 13], "replac": [10, 12, 13, 24], "polici": 10, "pseudo": 10, "random": 10, "scheme": 10, "time": [10, 14, 17, 20, 26, 27], "trash": 10, "we": [10, 16, 20, 23, 24, 25, 26], "keep": [10, 27], "global": [10, 17, 20], "counter": [10, 13, 17], "abstract": [10, 12, 13], "awai": 10, "refiller_start": 10, "whenev": 10, "refiller_accept": 10, "word": [10, 13], "written": [10, 17, 25, 27], "last": [10, 15, 27], "transfer": [10, 14, 27], "over": [10, 17, 18, 27], "shouldn": 10, "until": [10, 20, 27], "start": [10, 11, 14, 20, 27], "icachelayout": [10, 13], "icacheparamet": [10, 13], "cacherefillerinterfac": 10, "start_refil": 10, "accept_refil": 10, "deserialize_addr": 10, "raw_addr": 10, "dict": [10, 14, 18, 27], "str": [10, 13, 18, 27], "hdl": [10, 13, 27], "ast": [10, 13, 27], "serialize_addr": 10, "addr": [10, 27], "icachebypass": 10, "wb_master": 10, "wishbonemast": [10, 13, 14], "haselabor": [10, 18, 27], "kwarg": [10, 13, 14, 18, 27], "simplewbcacherefil": 10, "instrdecompress": 10, "decompr_reg": 10, "rvc_reg": 10, "instr_mux": 10, "sel": 10, "int": [10, 11, 12, 13, 14, 16, 17, 18, 27], "enum": [10, 11, 13, 18, 27], "valuecast": [10, 13, 18, 27], "tupl": [10, 11, 15, 16, 17, 18, 27], "is_instr_compress": 10, "alucompon": [11, 13], "functionalcomponentparam": [11, 13, 16], "zba_en": 11, "fals": [11, 13, 18, 27], "zbb_enabl": 11, "get_modul": [11, 13, 16, 17], "funcunit": [11, 13, 16, 18], "get_optyp": [11, 13, 16, 17], "alufuncunit": 11, "alu_fn": 11, "alufn": 11, "object": [11, 13, 14, 27], "divcompon": 11, "ipc": 11, "div_fn": 11, "divfn": 11, "decodermanag": 11, "fn": 11, "intflag": [11, 13, 27], "enumer": [11, 13, 17, 18, 27], "div": [11, 13], "divu": [11, 13], "2": [11, 12, 13, 14, 17, 18, 27], "rem": [11, 13], "remu": [11, 13], "8": [11, 12, 13, 14, 27], "get_instruct": 11, "divunit": 11, "get_input": 11, "exceptionfuncunit": 11, "unit_fn": 11, "exceptionunitfn": 11, "exceptionunitcompon": [11, 13], "respons": [11, 14, 15, 27], "decode_fn": 11, "exec_fn": 11, "op": [11, 13], "check_optyp": 11, "bool": [11, 13, 17, 18, 27], "valid": [11, 13, 14, 15, 24], "get_decod": 11, "get_funct": 11, "get_op_typ": 11, "jumpbranchfuncunit": 11, "jb_fn": 11, "jumpbranchfn": 11, "jumpcompon": [11, 13], "mulcompon": 11, "mul_unit_typ": 11, "multyp": 11, "dsp_width": [11, 12], "mul_fn": 11, "mulfn": 11, "hot": [11, 18, 20], "wire": 11, "5": [11, 13, 23], "mul": [11, 13], "mulh": [11, 13], "mulhsu": [11, 13], "mulhu": [11, 13], "intenum": [11, 13, 17], "recursive_mul": 11, "fastest": 11, "multipli": [11, 12], "costli": [11, 20], "term": 11, "sequence_mul": 11, "dsp": [11, 12], "balanc": 11, "between": [11, 20, 27], "cost": [11, 19], "shift_mul": 11, "cheapest": 11, "russian": [11, 12], "peasant": [11, 12], "algorithm": [11, 12], "mulunit": 11, "unsign": [11, 12], "integ": [11, 13, 18], "standard": [11, 17, 18, 20], "funcunitlayout": [11, 13, 15, 16], "comput": [11, 12, 17, 20, 27], "mul_typ": 11, "shiftfuncunit": 11, "shift_unit_fn": 11, "shiftunitfn": 11, "shiftunitcompon": [11, 13], "clmultipli": 11, "carri": [11, 13, 26], "less": [11, 13], "product": [11, 27], "i1": [11, 12], "n": [11, 12, 13], "factor": 11, "i2": [11, 12], "reset": [11, 17, 19, 27], "new": [11, 13, 14, 18, 19, 20, 27], "busi": 11, "while": [11, 27], "progress": 11, "bit_width": 11, "recursion_depth": 11, "width": [11, 12, 13, 14, 17, 18, 27], "depth": [11, 14, 18, 27], "recurs": [11, 12, 18], "parallel": 11, "assum": [11, 16, 18, 20, 27], "power": [11, 18], "iterative_modul": 11, "recursive_modul": 11, "zbccompon": 11, "zbc_fn": 11, "zbcfn": 11, "clmul": [11, 13], "clmulh": [11, 13], "clmulr": [11, 13], "classmethod": [11, 27], "zbcunit": 11, "zbsfunction": 11, "in1": 11, "in2": 11, "zbscompon": 11, "bclr": [11, 13], "bext": [11, 13], "binv": [11, 13], "bset": [11, 13], "zbsunit": 11, "zbs_fn": 11, "dspmulunit": 12, "synthesi": [12, 19], "mulbaseunsign": 12, "unsignedmulunitlayout": [12, 13], "recursiveunsignedmul": 12, "fast": 12, "sequentialunsignedmul": 12, "sequenti": [12, 14], "classic": [12, 20], "shiftunsignedmul": 12, "cheap": 12, "multi": 12, "coreconfigur": 13, "func_units_config": 13, "blockcomponentparam": [13, 16, 17], "reserv": [13, 17, 19, 20], "station": [13, 19], "rsblockcompon": [13, 16], "rs_entri": [13, 16, 17], "lsublockcompon": 13, "compress": 13, "enabl": [13, 27], "embed": 13, "reduc": [13, 20, 27], "phys_regs_bit": 13, "physic": [13, 15, 20], "rob_entries_bit": 13, "reorder": [13, 20, 27], "buffer": [13, 14, 20, 24, 27], "start_pc": 13, "initi": [13, 19], "icache_en": 13, "disabl": [13, 27], "bypass": 13, "icache_wai": 13, "icache_sets_bit": 13, "log": [13, 20], "icache_block_size_bit": 13, "allow_partial_extens": 13, "partial": 13, "_implied_extens": 13, "extenst": 13, "flag": 13, "specifi": [13, 14, 17, 25, 27], "intern": [13, 18, 19, 27], "abc": [13, 27], "func_unit": [13, 16], "lsu": 13, "dummylsu": 13, "6": [13, 20], "7": 13, "dependencykei": 13, "u": [13, 20], "dependencymanag": [13, 17], "concret": 13, "frozen": 13, "lock_on_get": 13, "get_depend": 13, "empty_valid": 13, "without": [13, 15, 16, 20], "action": [13, 17, 27], "caus": [13, 20, 27], "rais": [13, 18, 20, 27], "keyerror": [13, 27], "add_depend": 13, "give": 13, "behavior": [13, 27], "track": 13, "across": 13, "add": [13, 27], "multpl": 13, "funcblock": [13, 15, 16, 17, 18], "get_rs_entry_count": [13, 16, 17], "optypes_support": 13, "iter": [13, 16, 17, 18, 27], "dependentcach": 13, "cfg": 13, "addr_width": [13, 14], "length": [13, 18, 20, 27], "word_width": 13, "machin": [13, 17], "num_of_wai": 13, "num_of_sets_bit": 13, "block_size_bit": 13, "btypeinstr": 13, "riscvinstr": 13, "pack": 13, "ebreakinstr": 13, "itypeinstr": 13, "illegalinstr": 13, "jtypeinstr": 13, "rtypeinstr": 13, "stypeinstr": 13, "utypeinstr": 13, "exceptioncaus": 13, "breakpoint": 13, "environment_call_from_m": 13, "environment_call_from_": 13, "9": 13, "environment_call_from_u": 13, "illegal_instruct": 13, "instruction_access_fault": 13, "instruction_address_misalign": 13, "instruction_page_fault": 13, "load_access_fault": 13, "load_address_misalign": 13, "load_page_fault": 13, "store_access_fault": 13, "store_address_misalign": 13, "store_page_fault": 13, "b": 13, "512": 13, "manipul": 13, "256": 13, "doubl": [13, 17, 20], "precis": [13, 20], "float": 13, "64": [13, 14], "98366": 13, "basic": [13, 19], "j": 13, "1024": 13, "dynam": [13, 18, 20], "decim": 13, "divis": 13, "16384": 13, "user": [13, 17, 20], "interrupt": [13, 19], "4096": 13, "simd": 13, "q": 13, "quad": 13, "2048": 13, "memori": [13, 14, 20, 27], "8192": 13, "vector": [13, 15, 19, 20], "xintmachinemod": 13, "8589934592": 13, "categor": 13, "privilieg": 13, "xintsupervisor": 13, "17179869184": 13, "supervisor": [13, 17], "zam": 13, "2097152": 13, "misalign": 13, "zba": 13, "268435456": 13, "zbb": 13, "536870912": 13, "1073741824": 13, "2147483648": 13, "zdinx": 13, "33554432": 13, "zfh": 13, "4194304": 13, "half": 13, "zfhmin": 13, "8388608": 13, "minim": 13, "zfinx": 13, "16777216": 13, "zhinx": 13, "67108864": 13, "zicntr": 13, "524288": 13, "timer": [13, 17], "zicsr": 13, "32768": 13, "statu": [13, 17], "zifencei": 13, "65536": 13, "zihintntl": 13, "262144": 13, "non": [13, 24, 27], "tempor": 13, "hint": [13, 27], "zihintpaus": 13, "131072": 13, "paus": 13, "energi": 13, "zihpm": 13, "1048576": 13, "zmmul": 13, "134217728": 13, "ztso": 13, "4294967296": 13, "total": 13, "store": [13, 16, 18, 20, 24, 25, 27], "tso": 13, "dev_i": 13, "dev_o": 13, "mem_r": 13, "mem_w": 13, "clz": 13, "1536": 13, "cpop": 13, "1538": 13, "ctz": 13, "1537": 13, "ebreak": 13, "ecal": 13, "mret": 13, "770": 13, "orcb": 13, "647": 13, "rev8_32": 13, "1688": 13, "rev8_64": 13, "1720": 13, "sextb": 13, "1540": 13, "sexth": 13, "1541": 13, "sret": 13, "258": 13, "wfi": 13, "261": 13, "zexth": 13, "AND": 13, "andn": 13, "beq": 13, "bge": 13, "bgeu": 13, "blt": 13, "bltu": 13, "bne": 13, "csrrc": 13, "csrrci": 13, "csrr": 13, "csrrsi": 13, "csrrw": 13, "csrrwi": 13, "divuw": 13, "divw": 13, "fencei": 13, "h": [13, 20], "hu": 13, "jalr": 13, "max": [13, 26], "maxu": 13, "min": 13, "minu": 13, "mulw": 13, "OR": 13, "orn": 13, "priv": 13, "remuw": 13, "remw": 13, "rev8": 13, "rol": 13, "ror": 13, "sh1add": 13, "sh2add": 13, "sh3add": 13, "sll": 13, "slt": 13, "sltu": 13, "sr": 13, "sub": 13, "w": [13, 20], "xnor": 13, "xor": 13, "36": 13, "52": 13, "20": 13, "48": 13, "muldiv": 13, "sa": 13, "sfencevma": 13, "sl": 13, "gather": 13, "numer": 13, "val": 13, "correspond": [13, 24, 27], "val_log": 13, "field": [13, 16, 17, 18, 24, 25, 27], "relev": [13, 27], "nativ": 13, "reg_cnt": 13, "maximum": 13, "bitwis": 13, "isa_str": 13, "string": 13, "refer": 13, "gcc": 13, "detail": [13, 19], "instrtyp": 13, "auipc": 13, "branch": [13, 20, 26, 27], "24": 13, "jal": 13, "27": 13, "25": 13, "load": [13, 20], "load_fp": 13, "lui": 13, "misc_mem": 13, "op32": 13, "op_imm": 13, "op_imm_32": 13, "store_fp": 13, "28": [13, 20], "a0": 13, "a1": 13, "a2": 13, "a3": 13, "a4": 13, "a5": 13, "a6": 13, "a7": 13, "17": 13, "fp": [13, 27], "gp": [13, 17], "ra": 13, "s0": 13, "s1": 13, "s10": 13, "26": 13, "s11": 13, "s2": 13, "18": 13, "s3": 13, "19": 13, "s4": 13, "s5": 13, "21": 13, "s6": 13, "22": 13, "s7": 13, "23": 13, "s8": 13, "s9": 13, "sp": 13, "t0": 13, "t1": 13, "t2": 13, "t3": 13, "t4": 13, "29": 13, "t5": 13, "30": [13, 20], "t6": 13, "tp": 13, "x1": 13, "x10": 13, "x11": 13, "x12": 13, "x13": 13, "x14": 13, "x15": 13, "x16": 13, "x17": 13, "x18": 13, "x19": 13, "x2": 13, "x20": 13, "x21": 13, "x22": 13, "x23": 13, "x24": 13, "x25": 13, "x26": 13, "x27": 13, "x28": 13, "x29": 13, "x3": 13, "x30": 13, "x31": 13, "x4": 13, "x5": 13, "x6": 13, "x7": 13, "x8": 13, "x9": 13, "zero": [13, 24, 27], "branchresolvedkei": 13, "unifierkei": [13, 16], "unifi": [13, 18], "alia": 13, "collector": [13, 27], "exceptionreportkei": 13, "simplekei": 13, "genericcsrregisterskei": 13, "genericcsrregist": [13, 17], "instructionprecommitkei": 13, "methodtryproduct": [13, 27], "wishbonedatakei": 13, "csrlayout": 13, "commonlayout": 13, "lsulayout": 13, "ratlayout": [13, 15], "rflayout": [13, 15], "roblayout": [13, 15], "rsinterfacelayout": 13, "rs_entries_bit": 13, "rslayout": [13, 15], "schedulerlayout": 13, "confus": 13, "address_gener": 13, "arithmet": 13, "bit_manipul": 13, "compar": [13, 19], "csr_imm": [13, 17], "csr_reg": [13, 17], "div_rem": 13, "33": 13, "logic": [13, 20, 25, 26], "single_bit_manipul": 13, "unary_bit_manipulation_1": 13, "unary_bit_manipulation_2": 13, "unary_bit_manipulation_3": 13, "unary_bit_manipulation_4": 13, "unary_bit_manipulation_5": 13, "optypes_required_by_extens": 13, "resolve_impl": 13, "ignore_unsupport": 13, "pipelinedwishbonemast": 14, "master": [14, 26], "wb_param": 14, "wishboneparamet": 14, "max_req": 14, "pend": 14, "wb": 14, "wishbonelayout": 14, "sent": [14, 16], "requestlayout": 14, "complet": [14, 16, 20], "resultlayout": 14, "requests_finish": 14, "generate_method_layout": 14, "wishbonearbit": 14, "arbit": 14, "slave": 14, "assert": 14, "cyc": 14, "grant": [14, 27], "round": [14, 18, 27], "robin": [14, 27], "slave_wb": 14, "intefac": 14, "boolean": [14, 27], "whether": [14, 18], "side": [14, 17, 20, 24, 25], "otherwis": 14, "wb_layout": 14, "wbmaster": 14, "becom": 14, "generate_layout": 14, "wishbonememoryslav": 14, "underneath": 14, "keyword": [14, 27], "underli": 14, "infer": [14, 27], "data_width": 14, "wishbonemux": 14, "muxer": 14, "master_wb": 14, "ssel_tga": 14, "corespond": 14, "tga": 14, "stb": 14, "note": [14, 17, 18, 27], "stare": 14, "finish": [14, 16], "stall": [14, 17, 20], "clear": [14, 18, 24, 25, 27], "delai": 14, "previous": 14, "deassert": 14, "dat_r": 14, "dat_w": 14, "adr": 14, "singal": 14, "granular": [14, 27], "smallest": 14, "port": [14, 27], "capabl": 14, "insert": [15, 16, 17, 18, 19, 20, 23, 24], "alloc": [15, 23, 24, 25], "renam": [15, 23], "entri": [15, 16, 18, 20, 23, 24, 25], "stuck": 15, "get_instr": 15, "get_free_reg": 15, "rat_renam": 15, "rob_put": 15, "rf_read1": 15, "rf_read2": 15, "reservation_st": 15, "decoded_instr": 15, "id": [15, 24, 25], "current": [15, 17, 20, 27], "free": [15, 19, 20, 25], "rat_rename_in": 15, "rat_rename_out": 15, "data_layout": [15, 27], "rf_read_out": 15, "rf_read_in": 15, "wakeupselect": 15, "wakeup": [15, 25], "firstli": 15, "get_readi": 15, "binari": 15, "where": [15, 20, 24, 25, 27], "th": [15, 27], "posit": [15, 24, 25], "row": [15, 19], "taken": 15, "take_row": 15, "get_ready_list_out": 15, "take_out": 15, "push": 15, "down": 15, "resultannounc": 16, "mark": [16, 19, 20, 27], "get_result": [16, 17, 18, 27], "serial": [16, 27], "than": [16, 20], "manytooneconnecttran": [16, 27], "rob_mark_don": 16, "rs_write_v": 16, "rf_write_v": 16, "end": [16, 20], "rob_id": 16, "reg_id": 16, "reg_val": 16, "funcblocksunifi": 16, "extra_methods_requir": 16, "get_extra_method": 16, "item": [16, 18], "rob_peek": 16, "rob_retir": 16, "r_rat_commit": 16, "free_rf_put": 16, "rf_free": 16, "exception_cause_get": 16, "rsfuncblock": 16, "With": 16, "csrblockcompon": 17, "csrlistkei": 17, "listkei": 17, "csrregist": 17, "behaviour": 17, "csrunit": 17, "csr_val": 17, "effect": [17, 20, 24, 25, 27], "_fu_read": 17, "_fu_writ": 17, "simultan": [17, 27], "ignor": 17, "prioriti": [17, 18, 27], "csr_number": 17, "ro_bit": 17, "mask": [17, 27], "those": [17, 20], "upper": 17, "0b11": 17, "discard": 17, "regitst": 17, "unitl": 17, "place": [17, 20, 24, 27], "put": [17, 24, 27], "receiv": [17, 27], "fetch_continu": 17, "resum": 17, "privilegelevel": 17, "csr_access_privileg": 17, "csr_addr": 17, "csraddress": 17, "3072": 17, "cycleh": 17, "3200": 17, "instret": 17, "3074": 17, "instreth": 17, "3202": 17, "mcaus": 17, "834": 17, "3073": 17, "timeh": 17, "3201": 17, "doublecountercsr": 17, "group": 17, "At": 17, "overflow": [17, 27], "low_addr": 17, "high_addr": 17, "repres": [17, 27], "lower": [17, 18], "higher": 17, "synthetis": 17, "exceptioncauseregist": 17, "rob_get_indic": 17, "should_update_priorii": 17, "current_caus": 17, "new_caus": 17, "frat": 17, "rrat": 17, "registerfil": 17, "reorderbuff": 17, "ready_for": 17, "auto_debug_sign": 18, "union": [18, 27], "view": [18, 27], "signalbundl": [18, 27], "map": [18, 19, 20, 27], "arrai": 18, "basicfifo": 18, "empti": [18, 27], "reiniti": 18, "init": 18, "shape": [18, 27], "shapecast": [18, 27], "rang": [18, 27], "layoutlik": [18, 27], "paramt": 18, "semaphor": 18, "max_count": 18, "assigntyp": 18, "rh": 18, "moduleconnector": 18, "anonym": 18, "onehotswitch": 18, "modulelik": [18, 27], "switch": [18, 20, 24, 27], "style": 18, "similar": [18, 20, 27], "benefit": 18, "represent": 18, "sig": 18, "onehotcas": 18, "0b01": 18, "0b10": 18, "onehotswitchdynam": 18, "liter": [18, 27], "variabl": [18, 27], "signifi": 18, "align_to_power_of_two": 18, "num": 18, "up": [18, 19, 25], "lh": 18, "assignarg": 18, "assignfield": 18, "lhs_strict": 18, "rhs_strict": 18, "safe": [18, 20], "structlayout": 18, "mismatch": 18, "accord": 18, "explicitli": 18, "castabl": 18, "determin": [18, 20], "subrecord": 18, "valueerror": 18, "bits_from_int": 18, "count_leading_zero": 18, "count_trailing_zero": 18, "flatten_sign": 18, "flatten": 18, "popcount": 18, "silence_mustus": 18, "introduct": 19, "assumpt": [19, 20], "made": [19, 20], "develop": 19, "environ": 19, "script": [19, 26], "run_test": 19, "py": [19, 26], "lint": 19, "sh": 19, "core_graph": 19, "build_doc": 19, "framework": [19, 24], "usag": [19, 27], "advanc": 19, "concept": 19, "nest": [19, 27], "schema": 19, "proposit": [19, 20], "slot": 19, "tabl": 19, "substitut": 19, "clean": 19, "problem": [19, 20], "checklist": 19, "benchmark": 19, "summari": 19, "paper": 19, "about": 19, "old": 19, "softwar": 19, "tlb": 19, "analysi": 19, "strategi": 19, "igpu": 19, "specul": 19, "gpu": 19, "effici": 19, "transactron": 19, "journal": 20, "articl": 20, "look": 20, "choic": 20, "primari": 20, "relat": [20, 27], "procedur": 20, "chosen": 20, "basi": 20, "improv": 20, "pretti": 20, "1993": 20, "2001": 20, "much": 20, "research": 20, "cpu": 20, "solv": 20, "due": [20, 27], "characterist": 20, "our": [20, 23], "what": 20, "peopl": 20, "probabl": 20, "lot": 20, "worth": 20, "walker": 20, "cragon": 20, "concurr": [20, 27], "ieee": 20, "vol": 20, "june": 20, "1995": 20, "moudgil": 20, "vassiliadi": 20, "micro": 20, "pp": 20, "58": 20, "67": 20, "februari": 20, "1996": 20, "survei": 20, "topic": 20, "cdc": 20, "6600": 20, "done": [20, 27], "jump": 20, "handler": 20, "ibm360": 20, "stop": [20, 27], "crai": 20, "here": [20, 24], "bigger": 20, "torng": 20, "martin": 20, "dai": 20, "probe": 20, "author": 20, "window": 20, "iw": 20, "dispatch": [20, 23, 24, 25], "didn": 20, "context": [20, 27], "copi": [20, 27], "restor": 20, "restart": 20, "few": 20, "encod": 20, "big": 20, "overhead": 20, "origin": [20, 27], "unfeas": 20, "job": 20, "addition": 20, "But": 20, "cooper": 20, "smaller": 20, "interest": 20, "propos": 20, "nrp": 20, "No": [20, 27], "itself": 20, "wast": 20, "how": [20, 24, 26], "mani": [20, 26, 27], "element": [20, 27], "left": [20, 27], "middl": [20, 23], "aamer": 20, "jaleel": 20, "bruce": 20, "jacob": 20, "cours": 20, "penalti": 20, "alpha": 20, "mip": 20, "concentr": 20, "properti": [20, 27], "short": 20, "inlin": 20, "observ": 20, "enough": 20, "live": 20, "known": 20, "fly": 20, "swap": 20, "nop": 20, "reexecut": 20, "indic": [20, 25, 27], "privileg": 20, "correct": [20, 24, 25], "contrast": 20, "tendenc": 20, "longer": 20, "hard": 20, "risk": 20, "linux": [20, 26], "purpos": [20, 27], "addit": 20, "hw": 20, "bore": 20, "treat": [20, 23], "mansur": 20, "samadzadeh": 20, "loai": 20, "garalnabi": 20, "checkpoint": 20, "repair": 20, "histori": 20, "futur": [20, 23, 24], "jaikrishnan": 20, "menon": 20, "marc": 20, "de": 20, "kruijf": 20, "karthikeyan": 20, "sankaralingam": 20, "2012": 20, "To": [20, 26], "low": 20, "boundari": 20, "rewritten": 20, "recompil": 20, "runtim": 20, "region": 20, "subregion": 20, "begin": 20, "small": 20, "overrid": 20, "barrier": 20, "warp": 20, "wrong": 20, "split": [20, 23, 27], "prevent": 20, "ivan": 20, "tanas": 20, "isaac": 20, "gelado": 20, "jorda": 20, "eduard": 20, "ayguad": 20, "nacho": 20, "navarro": 20, "2017": 20, "analys": 20, "problemat": 20, "successfulli": 20, "kill": 20, "modif": 20, "fail": 20, "repli": 20, "modifi": [20, 27], "claim": 20, "operand": [20, 24, 25], "replai": 20, "marker": 20, "jerom": 20, "hampton": 20, "2008": 20, "mention": 20, "alli": 20, "bailei": 20, "ab04": 20, "ag": 20, "younger": 20, "repeat": 20, "canon": 20, "eventu": 20, "aren": 20, "Its": 23, "task": [23, 27], "rss": 23, "phase": 23, "choos": 23, "potenti": 23, "merg": 23, "optim": 23, "todo": 23, "want": [24, 27], "feel": 24, "anyth": 24, "id_out": [24, 25], "id_rob": [24, 25], "id_rs1": [24, 25], "val_rs1": [24, 25], "id_rs2": [24, 25], "val_rs2": [24, 25], "fill": 24, "id_rsx": 24, "val_rsx": 24, "releas": 24, "comparison": 24, "null": [24, 25], "woken": 25, "invalid": 25, "src1": [25, 27], "src2": [25, 27], "inst_readi": 25, "synthes": 26, "circuit": 26, "consum": 26, "grow": 26, "yosi": 26, "prjtrelli": 26, "nextpnr": 26, "ecp5": 26, "manual": 26, "git": 26, "repositori": 26, "docker": 26, "imag": 26, "vuush": 26, "synth": 26, "amaranthsynthecp5": 26, "dockerfil": 26, "command": 26, "amd64": 26, "parse_benchmark_info": 26, "pars": 26, "extract": [26, 27], "frequenc": 26, "cell": 26, "ram": 26, "dff": 26, "dedic": 26, "subpag": 26, "transactionbas": 27, "serv": 27, "simultena": 27, "transactionmanag": 27, "rest": 27, "must": 27, "exclus": 27, "combination": 27, "data_out": 27, "data_in": 27, "nonexclus": 27, "single_cal": 27, "situat": 27, "happen": 27, "cannot": 27, "thrown": 27, "const": 27, "d1": 27, "d0": 27, "guard": 27, "av_comb": 27, "top_comb": 27, "combinationi": 27, "my_sum_method": 27, "arg1": 27, "arg2": 27, "sum": 27, "static": 27, "construct": 27, "blueprint": 27, "freshli": 27, "proxi": 27, "priorit": 27, "undefin": 27, "avoidedif": 27, "amount": 27, "useless": 27, "multplex": 27, "unguard": 27, "path": 27, "synchron": 27, "cond": 27, "pattern": 27, "elif": 27, "fsm": 27, "noreturn": 27, "regularli": 27, "met": 27, "explicit": 27, "implicit": 27, "add_conflict": 27, "aris": 27, "pair": 27, "omit": 27, "transactioncontext": 27, "stack": 27, "care": 27, "never": 27, "cc_schedul": 27, "callabl": 27, "methodmap": 27, "dsl": 27, "eager_deterministic_cc_schedul": 27, "add_transact": 27, "visual_graph": 27, "fragment": 27, "transactionmodul": 27, "wrapper": 27, "definit": 27, "wrap": 27, "transaction_context": 27, "decor": 27, "eleg": 27, "dictionari": 27, "whose": 27, "method_map": 27, "gr": 27, "cc": 27, "porder": 27, "eager": 27, "subsystem": 27, "isn": 27, "fair": 27, "lowest": 27, "highest": 27, "arbitr": 27, "agent": 27, "transactiongraph": 27, "vertic": 27, "edg": 27, "priorityord": 27, "linear": 27, "consist": 27, "constraint": 27, "trivial_roundrobin_cc_schedul": 27, "mainli": 27, "IN": 27, "inout": 27, "own": 27, "owner": 27, "ownershipgraph": 27, "root": 27, "dump": 27, "dump_dot": 27, "indent": 27, "dump_elk": 27, "dump_mermaid": 27, "get_hier_nam": 27, "obj": 27, "hierarch": 27, "yet": 27, "get_nam": 27, "insert_edg": 27, "fr": 27, "insert_nod": 27, "mermaid_direct": 27, "subgraph": 27, "remember_field": 27, "owner_id": 27, "adapterbas": 27, "mock": 27, "en": 27, "ifac": 27, "cattran": 27, "concaten": 27, "third": 27, "dst": 27, "clickin": 27, "click": 27, "interact": 27, "fpga": 27, "button": 27, "rise": 27, "btn": 27, "dat": 27, "retriev": 27, "clickout": 27, "led": 27, "ident": 27, "target": 27, "method_list": 27, "mechan": 27, "move": 27, "flow": 27, "revers": 27, "possibli": 27, "rev_layout": 27, "connectandtransformtran": 27, "transform": 27, "behav": 27, "equival": 27, "methodtransform": 27, "method1": 27, "method2": 27, "i_fun": 27, "recorddict": 27, "o_fun": 27, "vice": 27, "versa": 27, "compat": 27, "respect": 27, "fulfil": 27, "_rec": 27, "fifo_typ": 27, "syncfifo": 27, "fifotyp": 27, "conform": 27, "further": 27, "put_result": 27, "memorybank": 27, "read_req": 27, "read_resp": 27, "elem_count": 27, "safe_writ": 27, "optimis": 27, "increas": 27, "throughput": 27, "eg": 27, "x": 27, "later": 27, "methodfilt": 27, "filter": 27, "caveat": 27, "methodproduct": 27, "arbitrari": 27, "i_transform": 27, "o_transform": 27, "tri": 27, "succeed": 27, "client": 27, "somethig": 27, "server": 27, "deseri": 27, "proper": 27, "serialize_in": 27, "serialized_req_method": 27, "serialize_out": 27, "serialized_resp_method": 27, "port_count": 27, "len": 27, "resist": 27, "nonblock": 27, "overlap": 27, "catch": 27, "reason": 27, "mutual": 27, "influenc": 27, "cond1": 27, "cond2": 27, "tracingenabl": 27, "tracingfrag": 27, "lose": 27, "too": 27, "difficult": 27, "exact": 27, "copyright": 27, "subfrag": 27, "ir": 27, "tracingfragmenttransform": 27, "fragmenttransform": 27, "on_frag": 27, "tracinginst": 27}, "objects": {"": [[9, 0, 0, "-", "coreblocks"], [27, 0, 0, "-", "transactron"]], "coreblocks": [[9, 0, 0, "-", "core"], [10, 0, 0, "-", "frontend"], [11, 0, 0, "-", "fu"], [13, 0, 0, "-", "params"], [14, 0, 0, "-", "peripherals"], [15, 0, 0, "-", "scheduler"], [16, 0, 0, "-", "stages"], [17, 0, 0, "-", "structs_common"], [18, 0, 0, "-", "utils"]], "coreblocks.core": [[9, 1, 1, "", "Core"]], "coreblocks.core.Core": [[9, 2, 1, "", "__init__"]], "coreblocks.frontend": [[10, 0, 0, "-", "decode"], [10, 0, 0, "-", "decoder"], [10, 0, 0, "-", "fetch"], [10, 0, 0, "-", "icache"], [10, 0, 0, "-", "rvc"]], "coreblocks.frontend.decode": [[10, 1, 1, "", "Decode"]], "coreblocks.frontend.decode.Decode": [[10, 2, 1, "", "__init__"]], "coreblocks.frontend.decoder": [[10, 1, 1, "", "InstrDecoder"]], "coreblocks.frontend.decoder.InstrDecoder": [[10, 2, 1, "", "__init__"]], "coreblocks.frontend.fetch": [[10, 1, 1, "", "Fetch"], [10, 1, 1, "", "UnalignedFetch"]], "coreblocks.frontend.fetch.Fetch": [[10, 2, 1, "", "__init__"]], "coreblocks.frontend.fetch.UnalignedFetch": [[10, 2, 1, "", "__init__"]], "coreblocks.frontend.icache": [[10, 1, 1, "", "ICache"], [10, 1, 1, "", "ICacheBypass"], [10, 1, 1, "", "ICacheInterface"], [10, 1, 1, "", "SimpleWBCacheRefiller"]], "coreblocks.frontend.icache.ICache": [[10, 2, 1, "", "__init__"], [10, 2, 1, "", "deserialize_addr"], [10, 2, 1, "", "serialize_addr"]], "coreblocks.frontend.icache.ICacheBypass": [[10, 2, 1, "", "__init__"]], "coreblocks.frontend.icache.ICacheInterface": [[10, 2, 1, "", "__init__"], [10, 3, 1, "", "accept_res"], [10, 3, 1, "", "flush"], [10, 3, 1, "", "issue_req"]], "coreblocks.frontend.icache.SimpleWBCacheRefiller": [[10, 2, 1, "", "__init__"]], "coreblocks.frontend.rvc": [[10, 1, 1, "", "InstrDecompress"], [10, 4, 1, "", "is_instr_compressed"]], "coreblocks.frontend.rvc.InstrDecompress": [[10, 2, 1, "", "__init__"], [10, 2, 1, "", "decompr_reg"], [10, 2, 1, "", "instr_mux"]], "coreblocks.fu": [[11, 0, 0, "-", "alu"], [11, 0, 0, "-", "div_unit"], [11, 0, 0, "-", "exception"], [11, 0, 0, "-", "fu_decoder"], [11, 0, 0, "-", "jumpbranch"], [11, 0, 0, "-", "mul_unit"], [11, 0, 0, "-", "shift_unit"], [12, 0, 0, "-", "unsigned_multiplication"], [11, 0, 0, "-", "zbc"], [11, 0, 0, "-", "zbs"]], "coreblocks.fu.alu": [[11, 1, 1, "", "ALUComponent"], [11, 1, 1, "", "AluFuncUnit"]], "coreblocks.fu.alu.ALUComponent": [[11, 2, 1, "", "__init__"], [11, 2, 1, "", "get_module"], [11, 2, 1, "", "get_optypes"]], "coreblocks.fu.alu.AluFuncUnit": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.div_unit": [[11, 1, 1, "", "DivComponent"], [11, 1, 1, "", "DivFn"], [11, 1, 1, "", "DivUnit"], [11, 4, 1, "", "get_input"]], "coreblocks.fu.div_unit.DivComponent": [[11, 2, 1, "", "__init__"], [11, 3, 1, "", "div_fn"], [11, 2, 1, "", "get_module"], [11, 2, 1, "", "get_optypes"], [11, 3, 1, "", "ipc"]], "coreblocks.fu.div_unit.DivFn": [[11, 1, 1, "", "Fn"], [11, 2, 1, "", "get_instructions"]], "coreblocks.fu.div_unit.DivFn.Fn": [[11, 3, 1, "", "DIV"], [11, 3, 1, "", "DIVU"], [11, 3, 1, "", "REM"], [11, 3, 1, "", "REMU"]], "coreblocks.fu.div_unit.DivUnit": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.exception": [[11, 1, 1, "", "ExceptionFuncUnit"], [11, 1, 1, "", "ExceptionUnitComponent"]], "coreblocks.fu.exception.ExceptionFuncUnit": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.exception.ExceptionUnitComponent": [[11, 2, 1, "", "__init__"], [11, 2, 1, "", "get_module"], [11, 2, 1, "", "get_optypes"]], "coreblocks.fu.fu_decoder": [[11, 1, 1, "", "Decoder"], [11, 1, 1, "", "DecoderManager"]], "coreblocks.fu.fu_decoder.Decoder": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.fu_decoder.DecoderManager": [[11, 3, 1, "", "Fn"], [11, 2, 1, "", "get_decoder"], [11, 2, 1, "", "get_function"], [11, 2, 1, "", "get_instructions"], [11, 2, 1, "", "get_op_types"]], "coreblocks.fu.jumpbranch": [[11, 1, 1, "", "JumpBranchFuncUnit"], [11, 1, 1, "", "JumpComponent"]], "coreblocks.fu.jumpbranch.JumpBranchFuncUnit": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.jumpbranch.JumpComponent": [[11, 2, 1, "", "__init__"], [11, 2, 1, "", "get_module"], [11, 2, 1, "", "get_optypes"]], "coreblocks.fu.mul_unit": [[11, 1, 1, "", "MulComponent"], [11, 1, 1, "", "MulFn"], [11, 1, 1, "", "MulType"], [11, 1, 1, "", "MulUnit"]], "coreblocks.fu.mul_unit.MulComponent": [[11, 2, 1, "", "__init__"], [11, 3, 1, "", "dsp_width"], [11, 2, 1, "", "get_module"], [11, 2, 1, "", "get_optypes"], [11, 3, 1, "", "mul_fn"], [11, 3, 1, "", "mul_unit_type"]], "coreblocks.fu.mul_unit.MulFn": [[11, 1, 1, "", "Fn"], [11, 2, 1, "", "get_instructions"]], "coreblocks.fu.mul_unit.MulFn.Fn": [[11, 3, 1, "", "MUL"], [11, 3, 1, "", "MULH"], [11, 3, 1, "", "MULHSU"], [11, 3, 1, "", "MULHU"]], "coreblocks.fu.mul_unit.MulType": [[11, 3, 1, "", "RECURSIVE_MUL"], [11, 3, 1, "", "SEQUENCE_MUL"], [11, 3, 1, "", "SHIFT_MUL"]], "coreblocks.fu.mul_unit.MulUnit": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.shift_unit": [[11, 1, 1, "", "ShiftFuncUnit"], [11, 1, 1, "", "ShiftUnitComponent"]], "coreblocks.fu.shift_unit.ShiftFuncUnit": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.shift_unit.ShiftUnitComponent": [[11, 2, 1, "", "__init__"], [11, 2, 1, "", "get_module"], [11, 2, 1, "", "get_optypes"]], "coreblocks.fu.unsigned_multiplication": [[12, 0, 0, "-", "common"], [12, 0, 0, "-", "fast_recursive"], [12, 0, 0, "-", "sequence"], [12, 0, 0, "-", "shift"]], "coreblocks.fu.unsigned_multiplication.common": [[12, 1, 1, "", "DSPMulUnit"], [12, 1, 1, "", "MulBaseUnsigned"]], "coreblocks.fu.unsigned_multiplication.common.DSPMulUnit": [[12, 2, 1, "", "__init__"]], "coreblocks.fu.unsigned_multiplication.common.MulBaseUnsigned": [[12, 2, 1, "", "__init__"]], "coreblocks.fu.unsigned_multiplication.fast_recursive": [[12, 1, 1, "", "RecursiveUnsignedMul"]], "coreblocks.fu.unsigned_multiplication.fast_recursive.RecursiveUnsignedMul": [[12, 2, 1, "", "__init__"]], "coreblocks.fu.unsigned_multiplication.sequence": [[12, 1, 1, "", "SequentialUnsignedMul"]], "coreblocks.fu.unsigned_multiplication.sequence.SequentialUnsignedMul": [[12, 2, 1, "", "__init__"]], "coreblocks.fu.unsigned_multiplication.shift": [[12, 1, 1, "", "ShiftUnsignedMul"]], "coreblocks.fu.unsigned_multiplication.shift.ShiftUnsignedMul": [[12, 2, 1, "", "__init__"]], "coreblocks.fu.zbc": [[11, 1, 1, "", "ClMultiplier"], [11, 1, 1, "", "ZbcComponent"], [11, 1, 1, "", "ZbcFn"], [11, 1, 1, "", "ZbcUnit"]], "coreblocks.fu.zbc.ClMultiplier": [[11, 2, 1, "", "__init__"], [11, 2, 1, "", "iterative_module"], [11, 2, 1, "", "recursive_module"]], "coreblocks.fu.zbc.ZbcComponent": [[11, 2, 1, "", "__init__"], [11, 2, 1, "", "get_module"], [11, 2, 1, "", "get_optypes"], [11, 3, 1, "", "recursion_depth"], [11, 3, 1, "", "zbc_fn"]], "coreblocks.fu.zbc.ZbcFn": [[11, 1, 1, "", "Fn"], [11, 2, 1, "", "get_instructions"]], "coreblocks.fu.zbc.ZbcFn.Fn": [[11, 3, 1, "", "CLMUL"], [11, 3, 1, "", "CLMULH"], [11, 3, 1, "", "CLMULR"]], "coreblocks.fu.zbc.ZbcUnit": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.zbs": [[11, 1, 1, "", "Zbs"], [11, 1, 1, "", "ZbsComponent"], [11, 1, 1, "", "ZbsFunction"], [11, 1, 1, "", "ZbsUnit"]], "coreblocks.fu.zbs.Zbs": [[11, 2, 1, "", "__init__"]], "coreblocks.fu.zbs.ZbsComponent": [[11, 2, 1, "", "__init__"], [11, 2, 1, "", "get_module"], [11, 2, 1, "", "get_optypes"]], "coreblocks.fu.zbs.ZbsFunction": [[11, 1, 1, "", "Fn"], [11, 2, 1, "", "get_instructions"]], "coreblocks.fu.zbs.ZbsFunction.Fn": [[11, 3, 1, "", "BCLR"], [11, 3, 1, "", "BEXT"], [11, 3, 1, "", "BINV"], [11, 3, 1, "", "BSET"]], "coreblocks.fu.zbs.ZbsUnit": [[11, 2, 1, "", "__init__"]], "coreblocks.params": [[13, 0, 0, "-", "configurations"], [13, 0, 0, "-", "dependencies"], [13, 0, 0, "-", "fu_params"], [13, 0, 0, "-", "genparams"], [13, 0, 0, "-", "icache_params"], [13, 0, 0, "-", "instr"], [13, 0, 0, "-", "isa"], [13, 0, 0, "-", "keys"], [13, 0, 0, "-", "layouts"], [13, 0, 0, "-", "optypes"]], "coreblocks.params.configurations": [[13, 1, 1, "", "CoreConfiguration"]], "coreblocks.params.configurations.CoreConfiguration": [[13, 2, 1, "", "__init__"], [13, 3, 1, "", "allow_partial_extensions"], [13, 3, 1, "", "compressed"], [13, 3, 1, "", "embedded"], [13, 3, 1, "", "func_units_config"], [13, 3, 1, "", "icache_block_size_bits"], [13, 3, 1, "", "icache_enable"], [13, 3, 1, "", "icache_sets_bits"], [13, 3, 1, "", "icache_ways"], [13, 3, 1, "", "phys_regs_bits"], [13, 2, 1, "", "replace"], [13, 3, 1, "", "rob_entries_bits"], [13, 3, 1, "", "start_pc"], [13, 3, 1, "", "xlen"]], "coreblocks.params.dependencies": [[13, 1, 1, "", "DependencyKey"], [13, 1, 1, "", "DependencyManager"]], "coreblocks.params.dependencies.DependencyKey": [[13, 2, 1, "", "combine"], [13, 3, 1, "", "empty_valid"], [13, 3, 1, "", "lock_on_get"]], "coreblocks.params.dependencies.DependencyManager": [[13, 2, 1, "", "__init__"], [13, 2, 1, "", "add_dependency"], [13, 2, 1, "", "get_dependency"]], "coreblocks.params.fu_params": [[13, 1, 1, "", "BlockComponentParams"], [13, 1, 1, "", "FunctionalComponentParams"], [13, 4, 1, "", "optypes_supported"]], "coreblocks.params.fu_params.BlockComponentParams": [[13, 2, 1, "", "get_module"], [13, 2, 1, "", "get_optypes"], [13, 2, 1, "", "get_rs_entry_count"]], "coreblocks.params.fu_params.FunctionalComponentParams": [[13, 2, 1, "", "get_module"], [13, 2, 1, "", "get_optypes"]], "coreblocks.params.genparams": [[13, 1, 1, "", "GenParams"]], "coreblocks.params.genparams.GenParams": [[13, 2, 1, "", "__init__"]], "coreblocks.params.icache_params": [[13, 1, 1, "", "ICacheParameters"]], "coreblocks.params.icache_params.ICacheParameters": [[13, 2, 1, "", "__init__"]], "coreblocks.params.instr": [[13, 1, 1, "", "BTypeInstr"], [13, 1, 1, "", "EBreakInstr"], [13, 1, 1, "", "ITypeInstr"], [13, 1, 1, "", "IllegalInstr"], [13, 1, 1, "", "JTypeInstr"], [13, 1, 1, "", "RTypeInstr"], [13, 1, 1, "", "STypeInstr"], [13, 1, 1, "", "UTypeInstr"]], "coreblocks.params.instr.BTypeInstr": [[13, 2, 1, "", "__init__"], [13, 2, 1, "", "pack"]], "coreblocks.params.instr.EBreakInstr": [[13, 2, 1, "", "__init__"]], "coreblocks.params.instr.ITypeInstr": [[13, 2, 1, "", "__init__"], [13, 2, 1, "", "pack"]], "coreblocks.params.instr.IllegalInstr": [[13, 2, 1, "", "__init__"], [13, 2, 1, "", "pack"]], "coreblocks.params.instr.JTypeInstr": [[13, 2, 1, "", "__init__"], [13, 2, 1, "", "pack"]], "coreblocks.params.instr.RTypeInstr": [[13, 2, 1, "", "__init__"], [13, 2, 1, "", "pack"]], "coreblocks.params.instr.STypeInstr": [[13, 2, 1, "", "__init__"], [13, 2, 1, "", "pack"]], "coreblocks.params.instr.UTypeInstr": [[13, 2, 1, "", "__init__"], [13, 2, 1, "", "pack"]], "coreblocks.params.isa": [[13, 1, 1, "", "ExceptionCause"], [13, 1, 1, "", "Extension"], [13, 1, 1, "", "FenceFm"], [13, 1, 1, "", "FenceTarget"], [13, 1, 1, "", "Funct12"], [13, 1, 1, "", "Funct3"], [13, 1, 1, "", "Funct7"], [13, 1, 1, "", "ISA"], [13, 1, 1, "", "InstrType"], [13, 1, 1, "", "Opcode"], [13, 1, 1, "", "Registers"]], "coreblocks.params.isa.ExceptionCause": [[13, 3, 1, "", "BREAKPOINT"], [13, 3, 1, "", "ENVIRONMENT_CALL_FROM_M"], [13, 3, 1, "", "ENVIRONMENT_CALL_FROM_S"], [13, 3, 1, "", "ENVIRONMENT_CALL_FROM_U"], [13, 3, 1, "", "ILLEGAL_INSTRUCTION"], [13, 3, 1, "", "INSTRUCTION_ACCESS_FAULT"], [13, 3, 1, "", "INSTRUCTION_ADDRESS_MISALIGNED"], [13, 3, 1, "", "INSTRUCTION_PAGE_FAULT"], [13, 3, 1, "", "LOAD_ACCESS_FAULT"], [13, 3, 1, "", "LOAD_ADDRESS_MISALIGNED"], [13, 3, 1, "", "LOAD_PAGE_FAULT"], [13, 3, 1, "", "STORE_ACCESS_FAULT"], [13, 3, 1, "", "STORE_ADDRESS_MISALIGNED"], [13, 3, 1, "", "STORE_PAGE_FAULT"]], "coreblocks.params.isa.Extension": [[13, 3, 1, "", "A"], [13, 3, 1, "", "B"], [13, 3, 1, "", "C"], [13, 3, 1, "", "D"], [13, 3, 1, "", "E"], [13, 3, 1, "", "F"], [13, 3, 1, "", "G"], [13, 3, 1, "", "I"], [13, 3, 1, "", "J"], [13, 3, 1, "", "L"], [13, 3, 1, "", "M"], [13, 3, 1, "", "N"], [13, 3, 1, "", "P"], [13, 3, 1, "", "Q"], [13, 3, 1, "", "T"], [13, 3, 1, "", "V"], [13, 3, 1, "", "XINTMACHINEMODE"], [13, 3, 1, "", "XINTSUPERVISOR"], [13, 3, 1, "", "ZAM"], [13, 3, 1, "", "ZBA"], [13, 3, 1, "", "ZBB"], [13, 3, 1, "", "ZBC"], [13, 3, 1, "", "ZBS"], [13, 3, 1, "", "ZDINX"], [13, 3, 1, "", "ZFH"], [13, 3, 1, "", "ZFHMIN"], [13, 3, 1, "", "ZFINX"], [13, 3, 1, "", "ZHINX"], [13, 3, 1, "", "ZICNTR"], [13, 3, 1, "", "ZICSR"], [13, 3, 1, "", "ZIFENCEI"], [13, 3, 1, "", "ZIHINTNTL"], [13, 3, 1, "", "ZIHINTPAUSE"], [13, 3, 1, "", "ZIHPM"], [13, 3, 1, "", "ZMMUL"], [13, 3, 1, "", "ZTSO"]], "coreblocks.params.isa.FenceFm": [[13, 3, 1, "", "NONE"], [13, 3, 1, "", "TSO"]], "coreblocks.params.isa.FenceTarget": [[13, 3, 1, "", "DEV_I"], [13, 3, 1, "", "DEV_O"], [13, 3, 1, "", "MEM_R"], [13, 3, 1, "", "MEM_W"]], "coreblocks.params.isa.Funct12": [[13, 3, 1, "", "CLZ"], [13, 3, 1, "", "CPOP"], [13, 3, 1, "", "CTZ"], [13, 3, 1, "", "EBREAK"], [13, 3, 1, "", "ECALL"], [13, 3, 1, "", "MRET"], [13, 3, 1, "", "ORCB"], [13, 3, 1, "", "REV8_32"], [13, 3, 1, "", "REV8_64"], [13, 3, 1, "", "SEXTB"], [13, 3, 1, "", "SEXTH"], [13, 3, 1, "", "SRET"], [13, 3, 1, "", "WFI"], [13, 3, 1, "", "ZEXTH"]], "coreblocks.params.isa.Funct3": [[13, 3, 1, "", "ADD"], [13, 3, 1, "", "AND"], [13, 3, 1, "", "ANDN"], [13, 3, 1, "", "B"], [13, 3, 1, "", "BCLR"], [13, 3, 1, "", "BEQ"], [13, 3, 1, "", "BEXT"], [13, 3, 1, "", "BGE"], [13, 3, 1, "", "BGEU"], [13, 3, 1, "", "BINV"], [13, 3, 1, "", "BLT"], [13, 3, 1, "", "BLTU"], [13, 3, 1, "", "BNE"], [13, 3, 1, "", "BSET"], [13, 3, 1, "", "BU"], [13, 3, 1, "", "CLMUL"], [13, 3, 1, "", "CLMULH"], [13, 3, 1, "", "CLMULR"], [13, 3, 1, "", "CLZ"], [13, 3, 1, "", "CPOP"], [13, 3, 1, "", "CSRRC"], [13, 3, 1, "", "CSRRCI"], [13, 3, 1, "", "CSRRS"], [13, 3, 1, "", "CSRRSI"], [13, 3, 1, "", "CSRRW"], [13, 3, 1, "", "CSRRWI"], [13, 3, 1, "", "CTZ"], [13, 3, 1, "", "D"], [13, 3, 1, "", "DIV"], [13, 3, 1, "", "DIVU"], [13, 3, 1, "", "DIVUW"], [13, 3, 1, "", "DIVW"], [13, 3, 1, "", "FENCE"], [13, 3, 1, "", "FENCEI"], [13, 3, 1, "", "H"], [13, 3, 1, "", "HU"], [13, 3, 1, "", "JALR"], [13, 3, 1, "", "MAX"], [13, 3, 1, "", "MAXU"], [13, 3, 1, "", "MIN"], [13, 3, 1, "", "MINU"], [13, 3, 1, "", "MUL"], [13, 3, 1, "", "MULH"], [13, 3, 1, "", "MULHSU"], [13, 3, 1, "", "MULHU"], [13, 3, 1, "", "MULW"], [13, 3, 1, "", "OR"], [13, 3, 1, "", "ORCB"], [13, 3, 1, "", "ORN"], [13, 3, 1, "", "PRIV"], [13, 3, 1, "", "REM"], [13, 3, 1, "", "REMU"], [13, 3, 1, "", "REMUW"], [13, 3, 1, "", "REMW"], [13, 3, 1, "", "REV8"], [13, 3, 1, "", "ROL"], [13, 3, 1, "", "ROR"], [13, 3, 1, "", "SEXTB"], [13, 3, 1, "", "SEXTH"], [13, 3, 1, "", "SH1ADD"], [13, 3, 1, "", "SH2ADD"], [13, 3, 1, "", "SH3ADD"], [13, 3, 1, "", "SLL"], [13, 3, 1, "", "SLT"], [13, 3, 1, "", "SLTU"], [13, 3, 1, "", "SR"], [13, 3, 1, "", "SUB"], [13, 3, 1, "", "W"], [13, 3, 1, "", "XNOR"], [13, 3, 1, "", "XOR"], [13, 3, 1, "", "ZEXTH"]], "coreblocks.params.isa.Funct7": [[13, 3, 1, "", "ADD"], [13, 3, 1, "", "AND"], [13, 3, 1, "", "ANDN"], [13, 3, 1, "", "BCLR"], [13, 3, 1, "", "BEXT"], [13, 3, 1, "", "BINV"], [13, 3, 1, "", "BSET"], [13, 3, 1, "", "CLMUL"], [13, 3, 1, "", "CLZ"], [13, 3, 1, "", "CPOP"], [13, 3, 1, "", "CTZ"], [13, 3, 1, "", "MAX"], [13, 3, 1, "", "MIN"], [13, 3, 1, "", "MULDIV"], [13, 3, 1, "", "OR"], [13, 3, 1, "", "ORCB"], [13, 3, 1, "", "ORN"], [13, 3, 1, "", "REV8"], [13, 3, 1, "", "ROL"], [13, 3, 1, "", "ROR"], [13, 3, 1, "", "SA"], [13, 3, 1, "", "SEXTB"], [13, 3, 1, "", "SEXTH"], [13, 3, 1, "", "SFENCEVMA"], [13, 3, 1, "", "SH1ADD"], [13, 3, 1, "", "SH2ADD"], [13, 3, 1, "", "SH3ADD"], [13, 3, 1, "", "SL"], [13, 3, 1, "", "SLT"], [13, 3, 1, "", "SUB"], [13, 3, 1, "", "XNOR"], [13, 3, 1, "", "XOR"], [13, 3, 1, "", "ZEXTH"]], "coreblocks.params.isa.ISA": [[13, 2, 1, "", "__init__"]], "coreblocks.params.isa.InstrType": [[13, 3, 1, "", "B"], [13, 3, 1, "", "I"], [13, 3, 1, "", "J"], [13, 3, 1, "", "R"], [13, 3, 1, "", "S"], [13, 3, 1, "", "U"]], "coreblocks.params.isa.Opcode": [[13, 3, 1, "", "AUIPC"], [13, 3, 1, "", "BRANCH"], [13, 3, 1, "", "JAL"], [13, 3, 1, "", "JALR"], [13, 3, 1, "", "LOAD"], [13, 3, 1, "", "LOAD_FP"], [13, 3, 1, "", "LUI"], [13, 3, 1, "", "MISC_MEM"], [13, 3, 1, "", "OP"], [13, 3, 1, "", "OP32"], [13, 3, 1, "", "OP_IMM"], [13, 3, 1, "", "OP_IMM_32"], [13, 3, 1, "", "STORE"], [13, 3, 1, "", "STORE_FP"], [13, 3, 1, "", "SYSTEM"]], "coreblocks.params.isa.Registers": [[13, 3, 1, "", "A0"], [13, 3, 1, "", "A1"], [13, 3, 1, "", "A2"], [13, 3, 1, "", "A3"], [13, 3, 1, "", "A4"], [13, 3, 1, "", "A5"], [13, 3, 1, "", "A6"], [13, 3, 1, "", "A7"], [13, 3, 1, "", "FP"], [13, 3, 1, "", "GP"], [13, 3, 1, "", "RA"], [13, 3, 1, "", "S0"], [13, 3, 1, "", "S1"], [13, 3, 1, "", "S10"], [13, 3, 1, "", "S11"], [13, 3, 1, "", "S2"], [13, 3, 1, "", "S3"], [13, 3, 1, "", "S4"], [13, 3, 1, "", "S5"], [13, 3, 1, "", "S6"], [13, 3, 1, "", "S7"], [13, 3, 1, "", "S8"], [13, 3, 1, "", "S9"], [13, 3, 1, "", "SP"], [13, 3, 1, "", "T0"], [13, 3, 1, "", "T1"], [13, 3, 1, "", "T2"], [13, 3, 1, "", "T3"], [13, 3, 1, "", "T4"], [13, 3, 1, "", "T5"], [13, 3, 1, "", "T6"], [13, 3, 1, "", "TP"], [13, 3, 1, "", "X0"], [13, 3, 1, "", "X1"], [13, 3, 1, "", "X10"], [13, 3, 1, "", "X11"], [13, 3, 1, "", "X12"], [13, 3, 1, "", "X13"], [13, 3, 1, "", "X14"], [13, 3, 1, "", "X15"], [13, 3, 1, "", "X16"], [13, 3, 1, "", "X17"], [13, 3, 1, "", "X18"], [13, 3, 1, "", "X19"], [13, 3, 1, "", "X2"], [13, 3, 1, "", "X20"], [13, 3, 1, "", "X21"], [13, 3, 1, "", "X22"], [13, 3, 1, "", "X23"], [13, 3, 1, "", "X24"], [13, 3, 1, "", "X25"], [13, 3, 1, "", "X26"], [13, 3, 1, "", "X27"], [13, 3, 1, "", "X28"], [13, 3, 1, "", "X29"], [13, 3, 1, "", "X3"], [13, 3, 1, "", "X30"], [13, 3, 1, "", "X31"], [13, 3, 1, "", "X4"], [13, 3, 1, "", "X5"], [13, 3, 1, "", "X6"], [13, 3, 1, "", "X7"], [13, 3, 1, "", "X8"], [13, 3, 1, "", "X9"], [13, 3, 1, "", "ZERO"]], "coreblocks.params.keys": [[13, 1, 1, "", "BranchResolvedKey"], [13, 1, 1, "", "ExceptionReportKey"], [13, 1, 1, "", "GenericCSRRegistersKey"], [13, 1, 1, "", "InstructionPrecommitKey"], [13, 1, 1, "", "WishboneDataKey"]], "coreblocks.params.keys.BranchResolvedKey": [[13, 2, 1, "", "__init__"], [13, 3, 1, "", "unifier"]], "coreblocks.params.keys.ExceptionReportKey": [[13, 2, 1, "", "__init__"]], "coreblocks.params.keys.GenericCSRRegistersKey": [[13, 2, 1, "", "__init__"]], "coreblocks.params.keys.InstructionPrecommitKey": [[13, 2, 1, "", "__init__"], [13, 3, 1, "", "unifier"]], "coreblocks.params.keys.WishboneDataKey": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts": [[13, 1, 1, "", "CSRLayouts"], [13, 1, 1, "", "CommonLayouts"], [13, 1, 1, "", "DecodeLayouts"], [13, 1, 1, "", "FetchLayouts"], [13, 1, 1, "", "FuncUnitLayouts"], [13, 1, 1, "", "ICacheLayouts"], [13, 1, 1, "", "LSULayouts"], [13, 1, 1, "", "RATLayouts"], [13, 1, 1, "", "RFLayouts"], [13, 1, 1, "", "ROBLayouts"], [13, 1, 1, "", "RSInterfaceLayouts"], [13, 1, 1, "", "RSLayouts"], [13, 1, 1, "", "SchedulerLayouts"], [13, 1, 1, "", "UnsignedMulUnitLayouts"]], "coreblocks.params.layouts.CSRLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.CommonLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.DecodeLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.FetchLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.FuncUnitLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.ICacheLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.LSULayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.RATLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.RFLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.ROBLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.RSInterfaceLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.RSLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.SchedulerLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.layouts.UnsignedMulUnitLayouts": [[13, 2, 1, "", "__init__"]], "coreblocks.params.optypes": [[13, 1, 1, "", "OpType"], [13, 4, 1, "", "optypes_required_by_extensions"]], "coreblocks.params.optypes.OpType": [[13, 3, 1, "", "ADDRESS_GENERATION"], [13, 3, 1, "", "ARITHMETIC"], [13, 3, 1, "", "AUIPC"], [13, 3, 1, "", "BIT_MANIPULATION"], [13, 3, 1, "", "BRANCH"], [13, 3, 1, "", "CLMUL"], [13, 3, 1, "", "COMPARE"], [13, 3, 1, "", "CSR_IMM"], [13, 3, 1, "", "CSR_REG"], [13, 3, 1, "", "DIV_REM"], [13, 3, 1, "", "EBREAK"], [13, 3, 1, "", "ECALL"], [13, 3, 1, "", "EXCEPTION"], [13, 3, 1, "", "FENCE"], [13, 3, 1, "", "FENCEI"], [13, 3, 1, "", "JAL"], [13, 3, 1, "", "JALR"], [13, 3, 1, "", "LOAD"], [13, 3, 1, "", "LOGIC"], [13, 3, 1, "", "MRET"], [13, 3, 1, "", "MUL"], [13, 3, 1, "", "SFENCEVMA"], [13, 3, 1, "", "SHIFT"], [13, 3, 1, "", "SINGLE_BIT_MANIPULATION"], [13, 3, 1, "", "SRET"], [13, 3, 1, "", "STORE"], [13, 3, 1, "", "UNARY_BIT_MANIPULATION_1"], [13, 3, 1, "", "UNARY_BIT_MANIPULATION_2"], [13, 3, 1, "", "UNARY_BIT_MANIPULATION_3"], [13, 3, 1, "", "UNARY_BIT_MANIPULATION_4"], [13, 3, 1, "", "UNARY_BIT_MANIPULATION_5"], [13, 3, 1, "", "UNKNOWN"], [13, 3, 1, "", "WFI"]], "coreblocks.peripherals": [[14, 0, 0, "-", "wishbone"]], "coreblocks.peripherals.wishbone": [[14, 1, 1, "", "PipelinedWishboneMaster"], [14, 1, 1, "", "WishboneArbiter"], [14, 1, 1, "", "WishboneBus"], [14, 1, 1, "", "WishboneLayout"], [14, 1, 1, "", "WishboneMaster"], [14, 1, 1, "", "WishboneMemorySlave"], [14, 1, 1, "", "WishboneMuxer"], [14, 1, 1, "", "WishboneParameters"]], "coreblocks.peripherals.wishbone.PipelinedWishboneMaster": [[14, 2, 1, "", "__init__"], [14, 2, 1, "", "generate_method_layouts"]], "coreblocks.peripherals.wishbone.WishboneArbiter": [[14, 2, 1, "", "__init__"]], "coreblocks.peripherals.wishbone.WishboneBus": [[14, 2, 1, "", "__init__"]], "coreblocks.peripherals.wishbone.WishboneLayout": [[14, 2, 1, "", "__init__"]], "coreblocks.peripherals.wishbone.WishboneMaster": [[14, 2, 1, "", "__init__"], [14, 2, 1, "", "generate_layouts"]], "coreblocks.peripherals.wishbone.WishboneMemorySlave": [[14, 2, 1, "", "__init__"]], "coreblocks.peripherals.wishbone.WishboneMuxer": [[14, 2, 1, "", "__init__"]], "coreblocks.peripherals.wishbone.WishboneParameters": [[14, 2, 1, "", "__init__"]], "coreblocks.scheduler": [[15, 0, 0, "-", "scheduler"], [15, 0, 0, "-", "wakeup_select"]], "coreblocks.scheduler.scheduler": [[15, 1, 1, "", "Scheduler"]], "coreblocks.scheduler.scheduler.Scheduler": [[15, 2, 1, "", "__init__"]], "coreblocks.scheduler.wakeup_select": [[15, 1, 1, "", "WakeupSelect"]], "coreblocks.scheduler.wakeup_select.WakeupSelect": [[15, 2, 1, "", "__init__"]], "coreblocks.stages": [[16, 0, 0, "-", "backend"], [16, 0, 0, "-", "func_blocks_unifier"], [16, 0, 0, "-", "retirement"], [16, 0, 0, "-", "rs_func_block"]], "coreblocks.stages.backend": [[16, 1, 1, "", "ResultAnnouncement"]], "coreblocks.stages.backend.ResultAnnouncement": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "debug_signals"]], "coreblocks.stages.func_blocks_unifier": [[16, 1, 1, "", "FuncBlocksUnifier"]], "coreblocks.stages.func_blocks_unifier.FuncBlocksUnifier": [[16, 2, 1, "", "__init__"], [16, 2, 1, "", "get_extra_method"]], "coreblocks.stages.retirement": [[16, 1, 1, "", "Retirement"]], "coreblocks.stages.retirement.Retirement": [[16, 2, 1, "", "__init__"]], "coreblocks.stages.rs_func_block": [[16, 1, 1, "", "RSBlockComponent"], [16, 1, 1, "", "RSFuncBlock"]], "coreblocks.stages.rs_func_block.RSBlockComponent": [[16, 2, 1, "", "__init__"], [16, 3, 1, "", "func_units"], [16, 2, 1, "", "get_module"], [16, 2, 1, "", "get_optypes"], [16, 2, 1, "", "get_rs_entry_count"], [16, 3, 1, "", "rs_entries"]], "coreblocks.stages.rs_func_block.RSFuncBlock": [[16, 2, 1, "", "__init__"]], "coreblocks.structs_common": [[17, 0, 0, "-", "csr"], [17, 0, 0, "-", "csr_generic"], [17, 0, 0, "-", "exception"], [17, 0, 0, "-", "rat"], [17, 0, 0, "-", "rf"], [17, 0, 0, "-", "rob"], [17, 0, 0, "-", "rs"]], "coreblocks.structs_common.csr": [[17, 1, 1, "", "CSRBlockComponent"], [17, 1, 1, "", "CSRListKey"], [17, 1, 1, "", "CSRRegister"], [17, 1, 1, "", "CSRUnit"], [17, 1, 1, "", "PrivilegeLevel"], [17, 4, 1, "", "csr_access_privilege"]], "coreblocks.structs_common.csr.CSRBlockComponent": [[17, 2, 1, "", "get_module"], [17, 2, 1, "", "get_optypes"], [17, 2, 1, "", "get_rs_entry_count"]], "coreblocks.structs_common.csr.CSRListKey": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.csr.CSRRegister": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.csr.CSRUnit": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.csr.PrivilegeLevel": [[17, 3, 1, "", "MACHINE"], [17, 3, 1, "", "SUPERVISOR"], [17, 3, 1, "", "USER"]], "coreblocks.structs_common.csr_generic": [[17, 1, 1, "", "CSRAddress"], [17, 1, 1, "", "DoubleCounterCSR"], [17, 1, 1, "", "GenericCSRRegisters"]], "coreblocks.structs_common.csr_generic.CSRAddress": [[17, 3, 1, "", "CYCLE"], [17, 3, 1, "", "CYCLEH"], [17, 3, 1, "", "INSTRET"], [17, 3, 1, "", "INSTRETH"], [17, 3, 1, "", "MCAUSE"], [17, 3, 1, "", "TIME"], [17, 3, 1, "", "TIMEH"]], "coreblocks.structs_common.csr_generic.DoubleCounterCSR": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.csr_generic.GenericCSRRegisters": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.exception": [[17, 1, 1, "", "ExceptionCauseRegister"], [17, 4, 1, "", "should_update_prioriy"]], "coreblocks.structs_common.exception.ExceptionCauseRegister": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.rat": [[17, 1, 1, "", "FRAT"], [17, 1, 1, "", "RRAT"]], "coreblocks.structs_common.rat.FRAT": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.rat.RRAT": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.rf": [[17, 1, 1, "", "RegisterFile"]], "coreblocks.structs_common.rf.RegisterFile": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.rob": [[17, 1, 1, "", "ReorderBuffer"]], "coreblocks.structs_common.rob.ReorderBuffer": [[17, 2, 1, "", "__init__"]], "coreblocks.structs_common.rs": [[17, 1, 1, "", "RS"]], "coreblocks.structs_common.rs.RS": [[17, 2, 1, "", "__init__"]], "coreblocks.utils": [[18, 0, 0, "-", "debug_signals"], [18, 0, 0, "-", "fifo"], [18, 0, 0, "-", "protocols"], [18, 0, 0, "-", "utils"]], "coreblocks.utils.debug_signals": [[18, 4, 1, "", "auto_debug_signals"]], "coreblocks.utils.fifo": [[18, 1, 1, "", "BasicFifo"], [18, 1, 1, "", "Semaphore"]], "coreblocks.utils.fifo.BasicFifo": [[18, 2, 1, "", "__init__"]], "coreblocks.utils.fifo.Semaphore": [[18, 2, 1, "", "__init__"]], "coreblocks.utils.protocols": [[18, 1, 1, "", "FuncBlock"], [18, 1, 1, "", "FuncUnit"], [18, 1, 1, "", "Unifier"]], "coreblocks.utils.protocols.FuncBlock": [[18, 2, 1, "", "__init__"], [18, 3, 1, "", "get_result"], [18, 3, 1, "", "insert"], [18, 3, 1, "", "select"], [18, 3, 1, "", "update"]], "coreblocks.utils.protocols.FuncUnit": [[18, 2, 1, "", "__init__"], [18, 3, 1, "", "accept"], [18, 3, 1, "", "issue"]], "coreblocks.utils.protocols.Unifier": [[18, 2, 1, "", "__init__"], [18, 3, 1, "", "method"]], "coreblocks.utils.utils": [[18, 1, 1, "", "AssignType"], [18, 1, 1, "", "ModuleConnector"], [18, 4, 1, "", "OneHotSwitch"], [18, 4, 1, "", "OneHotSwitchDynamic"], [18, 4, 1, "", "align_to_power_of_two"], [18, 4, 1, "", "assign"], [18, 4, 1, "", "bits_from_int"], [18, 4, 1, "", "count_leading_zeros"], [18, 4, 1, "", "count_trailing_zeros"], [18, 4, 1, "", "flatten_signals"], [18, 4, 1, "", "popcount"], [18, 4, 1, "", "silence_mustuse"]], "coreblocks.utils.utils.AssignType": [[18, 3, 1, "", "ALL"], [18, 3, 1, "", "COMMON"], [18, 3, 1, "", "RHS"]], "coreblocks.utils.utils.ModuleConnector": [[18, 2, 1, "", "__init__"]], "transactron": [[27, 1, 1, "", "Method"], [27, 1, 1, "", "TModule"], [27, 1, 1, "", "Transaction"], [27, 1, 1, "", "TransactionContext"], [27, 1, 1, "", "TransactionManager"], [27, 1, 1, "", "TransactionModule"], [27, 0, 0, "-", "core"], [27, 4, 1, "", "def_method"], [27, 0, 0, "-", "graph"], [27, 0, 0, "-", "lib"], [27, 0, 0, "-", "tracing"]], "transactron.Method": [[27, 2, 1, "", "__init__"], [27, 2, 1, "", "body"], [27, 2, 1, "", "debug_signals"], [27, 2, 1, "", "like"], [27, 2, 1, "", "proxy"]], "transactron.TModule": [[27, 2, 1, "", "AvoidedIf"], [27, 2, 1, "", "Case"], [27, 2, 1, "", "Default"], [27, 2, 1, "", "Elif"], [27, 2, 1, "", "Else"], [27, 2, 1, "", "FSM"], [27, 2, 1, "", "If"], [27, 2, 1, "", "State"], [27, 2, 1, "", "Switch"], [27, 2, 1, "", "__init__"], [27, 5, 1, "", "next"]], "transactron.Transaction": [[27, 2, 1, "", "__init__"], [27, 2, 1, "", "body"], [27, 2, 1, "", "debug_signals"]], "transactron.TransactionContext": [[27, 2, 1, "", "__init__"], [27, 2, 1, "", "get"], [27, 3, 1, "", "stack"]], "transactron.TransactionManager": [[27, 2, 1, "", "__init__"], [27, 2, 1, "", "add_transaction"], [27, 2, 1, "", "debug_signals"], [27, 2, 1, "", "visual_graph"]], "transactron.TransactionModule": [[27, 2, 1, "", "__init__"], [27, 2, 1, "", "transaction_context"]], "transactron.core": [[27, 1, 1, "", "Method"], [27, 1, 1, "", "Priority"], [27, 1, 1, "", "TModule"], [27, 1, 1, "", "Transaction"], [27, 1, 1, "", "TransactionContext"], [27, 1, 1, "", "TransactionManager"], [27, 1, 1, "", "TransactionModule"], [27, 4, 1, "", "def_method"], [27, 4, 1, "", "eager_deterministic_cc_scheduler"], [27, 4, 1, "", "trivial_roundrobin_cc_scheduler"]], "transactron.core.Method": [[27, 2, 1, "", "__init__"], [27, 2, 1, "", "body"], [27, 2, 1, "", "debug_signals"], [27, 2, 1, "", "like"], [27, 2, 1, "", "proxy"]], "transactron.core.Priority": [[27, 3, 1, "", "LEFT"], [27, 3, 1, "", "RIGHT"], [27, 3, 1, "", "UNDEFINED"]], "transactron.core.TModule": [[27, 2, 1, "", "AvoidedIf"], [27, 2, 1, "", "Case"], [27, 2, 1, "", "Default"], [27, 2, 1, "", "Elif"], [27, 2, 1, "", "Else"], [27, 2, 1, "", "FSM"], [27, 2, 1, "", "If"], [27, 2, 1, "", "State"], [27, 2, 1, "", "Switch"], [27, 2, 1, "", "__init__"], [27, 5, 1, "", "next"]], "transactron.core.Transaction": [[27, 2, 1, "", "__init__"], [27, 2, 1, "", "body"], [27, 2, 1, "", "debug_signals"]], "transactron.core.TransactionContext": [[27, 2, 1, "", "__init__"], [27, 2, 1, "", "get"], [27, 3, 1, "", "stack"]], "transactron.core.TransactionManager": [[27, 2, 1, "", "__init__"], [27, 2, 1, "", "add_transaction"], [27, 2, 1, "", "debug_signals"], [27, 2, 1, "", "visual_graph"]], "transactron.core.TransactionModule": [[27, 2, 1, "", "__init__"], [27, 2, 1, "", "transaction_context"]], "transactron.graph": [[27, 1, 1, "", "Direction"], [27, 1, 1, "", "Owned"], [27, 1, 1, "", "OwnershipGraph"]], "transactron.graph.Direction": [[27, 3, 1, "", "IN"], [27, 3, 1, "", "INOUT"], [27, 3, 1, "", "NONE"], [27, 3, 1, "", "OUT"]], "transactron.graph.Owned": [[27, 3, 1, "", "name"], [27, 3, 1, "", "owner"]], "transactron.graph.OwnershipGraph": [[27, 2, 1, "", "__init__"], [27, 2, 1, "", "dump"], [27, 2, 1, "", "dump_dot"], [27, 2, 1, "", "dump_elk"], [27, 2, 1, "", "dump_mermaid"], [27, 2, 1, "", "get_hier_name"], [27, 2, 1, "", "get_name"], [27, 2, 1, "", "insert_edge"], [27, 2, 1, "", "insert_node"], [27, 3, 1, "", "mermaid_direction"], [27, 2, 1, "", "prune"], [27, 2, 1, "", "remember"], [27, 2, 1, "", "remember_field"]], "transactron.lib": [[27, 1, 1, "", "Adapter"], [27, 1, 1, "", "AdapterTrans"], [27, 1, 1, "", "CatTrans"], [27, 1, 1, "", "ClickIn"], [27, 1, 1, "", "ClickOut"], [27, 1, 1, "", "Collector"], [27, 1, 1, "", "Connect"], [27, 1, 1, "", "ConnectAndTransformTrans"], [27, 1, 1, "", "ConnectTrans"], [27, 1, 1, "", "FIFO"], [27, 1, 1, "", "Forwarder"], [27, 1, 1, "", "ManyToOneConnectTrans"], [27, 1, 1, "", "MemoryBank"], [27, 1, 1, "", "MethodFilter"], [27, 1, 1, "", "MethodProduct"], [27, 1, 1, "", "MethodTransformer"], [27, 1, 1, "", "MethodTryProduct"], [27, 1, 1, "", "Serializer"], [27, 4, 1, "", "condition"]], "transactron.lib.Adapter": [[27, 2, 1, "", "__init__"]], "transactron.lib.AdapterTrans": [[27, 2, 1, "", "__init__"]], "transactron.lib.CatTrans": [[27, 2, 1, "", "__init__"]], "transactron.lib.ClickIn": [[27, 2, 1, "", "__init__"]], "transactron.lib.ClickOut": [[27, 2, 1, "", "__init__"]], "transactron.lib.Collector": [[27, 2, 1, "", "__init__"]], "transactron.lib.Connect": [[27, 2, 1, "", "__init__"]], "transactron.lib.ConnectAndTransformTrans": [[27, 2, 1, "", "__init__"]], "transactron.lib.ConnectTrans": [[27, 2, 1, "", "__init__"]], "transactron.lib.FIFO": [[27, 2, 1, "", "__init__"]], "transactron.lib.Forwarder": [[27, 2, 1, "", "__init__"]], "transactron.lib.ManyToOneConnectTrans": [[27, 2, 1, "", "__init__"]], "transactron.lib.MemoryBank": [[27, 2, 1, "", "__init__"]], "transactron.lib.MethodFilter": [[27, 2, 1, "", "__init__"]], "transactron.lib.MethodProduct": [[27, 2, 1, "", "__init__"]], "transactron.lib.MethodTransformer": [[27, 2, 1, "", "__init__"]], "transactron.lib.MethodTryProduct": [[27, 2, 1, "", "__init__"]], "transactron.lib.Serializer": [[27, 2, 1, "", "__init__"]], "transactron.tracing": [[27, 1, 1, "", "TracingEnabler"], [27, 1, 1, "", "TracingFragment"], [27, 1, 1, "", "TracingFragmentTransformer"], [27, 1, 1, "", "TracingInstance"]], "transactron.tracing.TracingFragment": [[27, 2, 1, "", "get"], [27, 2, 1, "", "prepare"], [27, 3, 1, "", "subfragments"]], "transactron.tracing.TracingFragmentTransformer": [[27, 2, 1, "", "on_fragment"]], "transactron.tracing.TracingInstance": [[27, 2, 1, "", "get"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:attribute", "4": "py:function", "5": "py:property"}, "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", "property", "Python property"]}, "titleterms": {"list": 0, "assumpt": [0, 8], "made": 0, "dure": 0, "develop": [0, 2], "full": 1, "transact": [1, 5], "method": [1, 5, 24, 25], "graph": [1, 27], "environ": 2, "set": 2, "up": 2, "us": [2, 24, 25], "script": 2, "run_test": 2, "py": 2, "lint": 2, "sh": 2, "core_graph": 2, "build_doc": 2, "introduct": [3, 5, 20], "document": [3, 5, 26], "problem": 4, "checklist": 4, "coreblock": [5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21], "framework": 5, "basic": 5, "usag": [5, 26], "implement": [5, 24], "The": 5, "librari": 5, "advanc": 5, "concept": 5, "nest": 5, "api": 6, "transactron": [6, 22, 27], "instruct": [8, 25], "cach": 8, "interfac": [8, 24, 25], "address": 8, "map": 8, "exampl": 8, "packag": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 27], "subpackag": [9, 11], "submodul": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 27], "core": [9, 27], "modul": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 27], "content": [9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 27], "frontend": 10, "decod": 10, "fetch": 10, "icach": 10, "rvc": 10, "fu": [11, 12], "alu": 11, "div_unit": 11, "except": [11, 17, 20], "fu_decod": 11, "jumpbranch": 11, "mul_unit": 11, "shift_unit": 11, "zbc": 11, "zb": 11, "unsigned_multipl": 12, "common": 12, "fast_recurs": 12, "sequenc": 12, "shift": 12, "param": 13, "configur": 13, "depend": 13, "fu_param": 13, "genparam": 13, "icache_param": 13, "instr": 13, "isa": 13, "kei": 13, "layout": 13, "optyp": 13, "peripher": 14, "wishbon": 14, "schedul": [15, 23], "wakeup_select": 15, "stage": 16, "backend": 16, "func_blocks_unifi": 16, "retir": 16, "rs_func_block": 16, "structs_common": 17, "csr": 17, "csr_gener": 17, "rat": 17, "rf": 17, "rob": 17, "r": 17, "util": 18, "debug_sign": 18, "fifo": 18, "protocol": 18, "summari": 20, "paper": 20, "about": 20, "interrupt": 20, "handl": 20, "old": 20, "pc": 20, "out": 20, "order": 20, "execut": 20, "processor": 20, "In": 20, "line": 20, "softwar": 20, "manag": 20, "tlb": 20, "hardwar": 20, "cost": 20, "analysi": 20, "process": 20, "strategi": 20, "igpu": 20, "support": 20, "specul": 20, "gpu": 20, "effici": 20, "other": 20, "overview": [23, 25], "descript": 23, "schema": 23, "structur": 23, "more": 23, "detail": 23, "each": 23, "block": 23, "proposit": 24, "reserv": [24, 25], "station": [24, 25], "intern": 24, "data": 24, "actual": 24, "slot": [24, 25], "tabl": 24, "compar": [24, 25], "substitut": [24, 25], "read": [24, 25], "row": [24, 25], "clean": [24, 25], "get": [24, 25], "free": 24, "mark": [24, 25], "extern": [24, 25], "all": [24, 25], "reset": 25, "initi": 25, "state": 25, "insert": 25, "new": 25, "readi": 25, "vector": 25, "signal": 25, "synthesi": 26, "requir": 26, "benchmark": 26, "lib": 27, "trace": 27}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.todo": 2, "sphinx": 56}}) \ No newline at end of file diff --git a/shared_structs/Implementation/RS_impl.html b/shared_structs/Implementation/RS_impl.html index 5dadd3ef2..bae223875 100644 --- a/shared_structs/Implementation/RS_impl.html +++ b/shared_structs/Implementation/RS_impl.html @@ -252,7 +252,7 @@

    Read and clean row

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/shared_structs/RS.html b/shared_structs/RS.html index 2435c02df..f0740c96b 100644 --- a/shared_structs/RS.html +++ b/shared_structs/RS.html @@ -222,7 +222,7 @@

    External interface signals

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/synthesis/Synthesis.html b/synthesis/Synthesis.html index c5ee4cf00..41c46f342 100644 --- a/synthesis/Synthesis.html +++ b/synthesis/Synthesis.html @@ -151,7 +151,7 @@

    Benchmarks

    © Copyright Kuźnia Rdzeni, 2023. - Last updated on 09:14 2023-10-06. + Last updated on 10:23 2023-10-07.

    diff --git a/transactron.html b/transactron.html new file mode 100644 index 000000000..06f1e8d4c --- /dev/null +++ b/transactron.html @@ -0,0 +1,1985 @@ + + + + + + transactron package — Coreblocks documentation + + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +

    transactron package

    +
    +

    Submodules

    +
    +
    +

    transactron.core module

    +
    +
    +class transactron.core.Method
    +

    Bases: TransactionBase

    +

    Transactional method.

    +

    A Method serves to interface a module with external Transactions +or Methods. It can be called by at most once in a given clock cycle. +When a given Method is required by multiple Transactions +(either directly, or indirectly via another Method) simultenaously, +at most one of them is granted by the TransactionManager, and the rest +of them must wait. (Non-exclusive methods are an exception to this +behavior.) Calling a Method always takes a single clock cycle.

    +

    Data is combinationally transferred between to and from Methods +using Amaranth Records. The transfer can take place in both directions +at the same time: from the called Method to the caller (data_out) +and from the caller to the called Method (data_in).

    +

    A module which defines a Method should use body or def_method +to describe the method’s effect on the module state.

    +
    +
    Attributes
    +
    +
    name: str

    Name of this Method.

    +
    +
    ready: Signal, in

    Signals that the method is ready to run in the current cycle. +Typically defined by calling body.

    +
    +
    run: Signal, out

    Signals that the method is called in the current cycle by some +Transaction. Defined by the TransactionManager.

    +
    +
    data_in: Record, out

    Contains the data passed to the Method by the caller +(a Transaction or another Method).

    +
    +
    data_out: Record, in

    Contains the data passed from the Method to the caller +(a Transaction or another Method). Typically defined by +calling body.

    +
    +
    +
    +
    +
    +
    +__init__(*, name: Optional[str] = None, i: Union[Layout, Sequence[Union[Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike]], Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike], Direction]]]] = (), o: Union[Layout, Sequence[Union[Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike]], Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike], Direction]]]] = (), nonexclusive: bool = False, single_caller: bool = False)
    +
    +
    Parameters
    +
    +
    name: str or None

    Name hint for this Method. If None (default) the name is +inferred from the variable name this Method is assigned to.

    +
    +
    i: record layout

    The format of data_in. +An int corresponds to a Record with a single data field.

    +
    +
    o: record layout

    The format of data_in. +An int corresponds to a Record with a single data field.

    +
    +
    nonexclusive: bool

    If true, the method is non-exclusive: it can be called by multiple +transactions in the same clock cycle. If such a situation happens, +the method still is executed only once, and each of the callers +receive its output. Nonexclusive methods cannot have inputs.

    +
    +
    single_caller: bool

    If true, this method is intended to be called from a single +transaction. An error will be thrown if called from multiple +transactions.

    +
    +
    +
    +
    +
    + +
    +
    +body(m: ~transactron.core.TModule, *, ready: amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable = (const 1'd1), out: amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable = (const 0'd0)) Iterator[Record]
    +

    Define method body

    +

    The body context manager can be used to define the actions +performed by a Method when it’s run. Each assignment added to +a domain under body is guarded by the run signal. +Combinational assignments which do not need to be guarded by run +can be added to m.d.av_comb or m.d.top_comb instead of m.d.comb. +Method calls can be performed under body.

    +
    +
    Parameters
    +
    +
    mTModule

    Module in which operations on signals should be executed, +body uses the combinational domain only.

    +
    +
    readySignal, in

    Signal to indicate if the method is ready to be run. By +default it is Const(1), so the method is always ready. +Assigned combinationially to the ready attribute.

    +
    +
    outRecord, in

    Data generated by the Method, which will be passed to +the caller (a Transaction or another Method). Assigned +combinationally to the data_out attribute.

    +
    +
    +
    +
    Returns
    +
    +
    data_inRecord, out

    Data passed from the caller (a Transaction or another +Method) to this Method.

    +
    +
    +
    +
    +

    Examples

    +
    m = Module()
    +my_sum_method = Method(i = Layout([("arg1",8),("arg2",8)]))
    +sum = Signal(16)
    +with my_sum_method.body(m, out = sum) as data_in:
    +    m.d.comb += sum.eq(data_in.arg1 + data_in.arg2)
    +
    +
    +
    + +
    +
    +debug_signals() Union[Signal, Record, View, Iterable[Union[Signal, Record, View, Iterable[SignalBundle], Mapping[str, SignalBundle]]], Mapping[str, Union[Signal, Record, View, Iterable[SignalBundle], Mapping[str, SignalBundle]]]]
    +
    + +
    +
    +static like(other: Method, *, name: Optional[str] = None) Method
    +

    Constructs a new Method based on another.

    +

    The returned Method has the same input/output data layouts as the +other Method.

    +
    +
    Parameters
    +
    +
    otherMethod

    The Method which serves as a blueprint for the new Method.

    +
    +
    namestr, optional

    Name of the new Method.

    +
    +
    +
    +
    Returns
    +
    +
    Method

    The freshly constructed Method.

    +
    +
    +
    +
    +
    + +
    +
    +proxy(m: TModule, method: Method)
    +

    Define as a proxy for another method.

    +

    The calls to this method will be forwarded to method.

    +
    +
    Parameters
    +
    +
    mTModule

    Module in which operations on signals should be executed, +proxy uses the combinational domain only.

    +
    +
    methodMethod

    Method for which this method is a proxy for.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.core.Priority
    +

    Bases: Enum

    +

    An enumeration.

    +
    +
    +LEFT = 2
    +

    Left transaction/method is prioritized over the right one.

    +
    + +
    +
    +RIGHT = 3
    +

    Right transaction/method is prioritized over the left one.

    +
    + +
    +
    +UNDEFINED = 1
    +

    Conflicting transactions/methods don’t have a priority order.

    +
    + +
    + +
    +
    +class transactron.core.TModule
    +

    Bases: ModuleLike, Elaboratable

    +

    Extended Amaranth module for use with transactions.

    +

    It includes three different combinational domains:

    +
      +
    • comb domain, works like the comb domain in plain Amaranth modules. +Statements in comb are guarded by every condition, including +AvoidedIf. This means they are guarded by transaction and method +bodies: they don’t execute if the given transaction/method is not run.

    • +
    • av_comb is guarded by all conditions except AvoidedIf. This means +they are not guarded by transaction and method bodies. This allows to +reduce the amount of useless multplexers due to transaction use, while +still allowing the use of conditions in transaction/method bodies.

    • +
    • top_comb is unguarded: statements added to this domain always +execute. It can be used to reduce combinational path length due to +multplexers while keeping related combinational and synchronous +statements together.

    • +
    +
    +
    +AvoidedIf(cond: amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable)
    +
    + +
    +
    +Case(*patterns: str | int | enum.Enum)
    +
    + +
    +
    +Default()
    +
    + +
    +
    +Elif(cond)
    +
    + +
    +
    +Else()
    +
    + +
    +
    +FSM(reset: Optional[str] = None, domain: str = 'sync', name: str = 'fsm')
    +
    + +
    +
    +If(cond: amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable)
    +
    + +
    +
    +State(name: str)
    +
    + +
    +
    +Switch(test: amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable)
    +
    + +
    +
    +__init__()
    +
    + +
    +
    +property next: NoReturn
    +
    + +
    + +
    +
    +class transactron.core.Transaction
    +

    Bases: TransactionBase

    +

    Transaction.

    +

    A Transaction represents a task which needs to be regularly done. +Execution of a Transaction always lasts a single clock cycle. +A Transaction signals readiness for execution by setting the +request signal. If the conditions for its execution are met, it +can be granted by the TransactionManager.

    +

    A Transaction can, as part of its execution, call a number of +Methods. A Transaction can be granted only if every Method +it runs is ready.

    +

    A Transaction cannot execute concurrently with another, conflicting +Transaction. Conflicts between Transactions are either explicit +or implicit. An explicit conflict is added using the add_conflict +method. Implicit conflicts arise between pairs of Transactions +which use the same Method.

    +

    A module which defines a Transaction should use body to +describe used methods and the transaction’s effect on the module state. +The used methods should be called inside the body’s +with block.

    +
    +
    Attributes
    +
    +
    name: str

    Name of this Transaction.

    +
    +
    request: Signal, in

    Signals that the transaction wants to run. If omitted, the transaction +is always ready. Defined in the constructor.

    +
    +
    grant: Signal, out

    Signals that the transaction is granted by the TransactionManager, +and all used methods are called.

    +
    +
    +
    +
    +
    +
    +__init__(*, name: Optional[str] = None, manager: Optional[TransactionManager] = None)
    +
    +
    Parameters
    +
    +
    name: str or None

    Name hint for this Transaction. If None (default) the name is +inferred from the variable name this Transaction is assigned to. +If the Transaction was not assigned, the name is inferred from +the class name where the Transaction was constructed.

    +
    +
    manager: TransactionManager

    The TransactionManager controlling this Transaction. +If omitted, the manager is received from TransactionContext.

    +
    +
    +
    +
    +
    + +
    +
    +body(m: ~transactron.core.TModule, *, request: amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable = (const 1'd1)) Iterator[Transaction]
    +

    Defines the Transaction body.

    +

    This context manager allows to conveniently define the actions +performed by a Transaction when it’s granted. Each assignment +added to a domain under body is guarded by the grant signal. +Combinational assignments which do not need to be guarded by +grant can be added to m.d.top_comb or m.d.av_comb instead of +m.d.comb. Method calls can be performed under body.

    +
    +
    Parameters
    +
    +
    m: TModule

    The module where the Transaction is defined.

    +
    +
    request: Signal

    Indicates that the Transaction wants to be executed. By +default it is Const(1), so it wants to be executed in +every clock cycle.

    +
    +
    +
    +
    +
    + +
    +
    +debug_signals() Union[Signal, Record, View, Iterable[Union[Signal, Record, View, Iterable[SignalBundle], Mapping[str, SignalBundle]]], Mapping[str, Union[Signal, Record, View, Iterable[SignalBundle], Mapping[str, SignalBundle]]]]
    +
    + +
    + +
    +
    +class transactron.core.TransactionContext
    +

    Bases: object

    +
    +
    +__init__(manager: TransactionManager)
    +
    + +
    +
    +classmethod get() TransactionManager
    +
    + +
    +
    +stack: list[transactron.core.TransactionManager] = []
    +
    + +
    + +
    +
    +class transactron.core.TransactionManager
    +

    Bases: Elaboratable

    +

    Transaction manager

    +

    This module is responsible for granting Transactions and running +Methods. It takes care that two conflicting Transactions +are never granted in the same clock cycle.

    +
    +
    +__init__(cc_scheduler: ~collections.abc.Callable[[MethodMap, dict['Transaction', set['Transaction']], set['Transaction'], dict['Transaction', int]], ~amaranth.hdl.dsl.Module] = <function eager_deterministic_cc_scheduler>)
    +
    + +
    +
    +add_transaction(transaction: Transaction)
    +
    + +
    +
    +debug_signals() Union[Signal, Record, View, Iterable[Union[Signal, Record, View, Iterable[SignalBundle], Mapping[str, SignalBundle]]], Mapping[str, Union[Signal, Record, View, Iterable[SignalBundle], Mapping[str, SignalBundle]]]]
    +
    + +
    +
    +visual_graph(fragment)
    +
    + +
    + +
    +
    +class transactron.core.TransactionModule
    +

    Bases: Elaboratable

    +

    TransactionModule is used as wrapper on Elaboratable classes, +which adds support for transactions. It creates a +TransactionManager which will handle transaction scheduling +and can be used in definition of Methods and Transactions.

    +
    +
    +__init__(elaboratable: HasElaborate, manager: Optional[TransactionManager] = None)
    +
    +
    Parameters
    +
    +
    elaboratable: HasElaborate

    The Elaboratable which should be wrapped to add support for +transactions and methods.

    +
    +
    +
    +
    +
    + +
    +
    +transaction_context() TransactionContext
    +
    + +
    + +
    +
    +transactron.core.def_method(m: ~transactron.core.TModule, method: ~transactron.core.Method, ready: amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable = (const 1'd1))
    +

    Define a method.

    +

    This decorator allows to define transactional methods in an +elegant way using Python’s def syntax. Internally, def_method +uses Method.body.

    +

    The decorated function should take keyword arguments corresponding to the +fields of the method’s input layout. The **kwargs syntax is supported. +Alternatively, it can take one argument named arg, which will be a +record with input signals.

    +

    The returned value can be either a record with the method’s output layout +or a dictionary of outputs.

    +
    +
    Parameters
    +
    +
    m: TModule

    Module in which operations on signals should be executed.

    +
    +
    method: Method

    The method whose body is going to be defined.

    +
    +
    ready: Signal

    Signal to indicate if the method is ready to be run. By +default it is Const(1), so the method is always ready. +Assigned combinationally to the ready attribute.

    +
    +
    +
    +
    +

    Examples

    +
    m = Module()
    +my_sum_method = Method(i=[("arg1",8),("arg2",8)], o=[("res",8)])
    +@def_method(m, my_sum_method)
    +def _(arg1, arg2):
    +    return arg1 + arg2
    +
    +
    +

    Alternative syntax (keyword args in dictionary):

    +
    @def_method(m, my_sum_method)
    +def _(**args):
    +    return args["arg1"] + args["arg2"]
    +
    +
    +

    Alternative syntax (arg record):

    +
    @def_method(m, my_sum_method)
    +def _(arg):
    +    return {"res": arg.arg1 + arg.arg2}
    +
    +
    +
    + +
    +
    +transactron.core.eager_deterministic_cc_scheduler(method_map: MethodMap, gr: dict['Transaction', set['Transaction']], cc: set['Transaction'], porder: dict['Transaction', int]) Module
    +

    This function generates an eager scheduler for the transaction +subsystem. It isn’t fair, because it starts transactions using +transaction index in cc as a priority. Transaction with the lowest +index has the highest priority.

    +

    If there are two different transactions which have no conflicts then +they will be started concurrently.

    +
    +
    Parameters
    +
    +
    managerTransactionManager

    TransactionManager which uses this instance of scheduler for +arbitrating which agent should get a grant signal.

    +
    +
    grTransactionGraph

    Graph of conflicts between transactions, where vertices are transactions and edges are conflicts.

    +
    +
    ccSet[Transaction]

    Connected components of the graph gr for which scheduler +should be generated.

    +
    +
    porderPriorityOrder

    Linear ordering of transactions which is consistent with priority constraints.

    +
    +
    +
    +
    +
    + +
    +
    +transactron.core.trivial_roundrobin_cc_scheduler(method_map: MethodMap, gr: dict['Transaction', set['Transaction']], cc: set['Transaction'], porder: dict['Transaction', int]) Module
    +

    This function generates a simple round-robin scheduler for the transaction +subsystem. In a one cycle there will be at most one transaction granted +(in a given connected component of the conflict graph), even if there is +another ready, non-conflicting, transaction. It is mainly for testing +purposes.

    +
    +
    Parameters
    +
    +
    managerTransactionManager

    TransactionManager which uses this instance of scheduler for +arbitrating which agent should get grant signal.

    +
    +
    grTransactionGraph

    Graph of conflicts between transactions, where vertices are transactions and edges are conflicts.

    +
    +
    ccSet[Transaction]

    Connected components of the graph gr for which scheduler +should be generated.

    +
    +
    porderPriorityOrder

    Linear ordering of transactions which is consistent with priority constraints.

    +
    +
    +
    +
    +
    + +
    +
    +

    transactron.graph module

    +

    Utilities for extracting dependency graphs from Amaranth designs.

    +
    +
    +class transactron.graph.Direction
    +

    Bases: IntFlag

    +

    An enumeration.

    +
    +
    +IN = 1
    +
    + +
    +
    +INOUT = 3
    +
    + +
    +
    +NONE = 0
    +
    + +
    +
    +OUT = 2
    +
    + +
    + +
    +
    +class transactron.graph.Owned
    +

    Bases: ABC

    +
    +
    +name: str
    +
    + +
    +
    +owner: Optional[Elaboratable]
    +
    + +
    + +
    +
    +class transactron.graph.OwnershipGraph
    +

    Bases: object

    +
    +
    +__init__(root)
    +
    + +
    +
    +dump(fp, format: Literal['dot', 'elk', 'mermaid'])
    +
    + +
    +
    +dump_dot(fp, owner: Optional[int] = None, indent: str = '')
    +
    + +
    +
    +dump_elk(fp, owner: Optional[int] = None, indent: str = '')
    +
    + +
    +
    +dump_mermaid(fp, owner: Optional[int] = None, indent: str = '')
    +
    + +
    +
    +get_hier_name(obj: Owned) str
    +

    Get hierarchical name. +Might raise KeyError if not yet hierarchized.

    +
    + +
    +
    +get_name(obj: Owned) str
    +
    + +
    +
    +insert_edge(fr: Owned, to: Owned, direction: Direction = Direction.OUT)
    +
    + +
    +
    +insert_node(obj: Owned)
    +
    + +
    +
    +mermaid_direction = ['---', '-->', '<--', '<-->']
    +
    + +
    +
    +prune(owner: Optional[int] = None)
    +

    Mark all empty subgraphs.

    +
    + +
    +
    +remember(owner: Elaboratable) int
    +
    + +
    +
    +remember_field(owner_id: int, field: str, obj: Elaboratable)
    +
    + +
    + +
    +
    +

    transactron.lib module

    +
    +
    +class transactron.lib.Adapter
    +

    Bases: AdapterBase

    +

    Adapter method.

    +

    Creates a method controlled by plain Amaranth signals. One of the +possible uses is to mock a method in a testbench.

    +
    +
    Attributes
    +
    +
    en: Signal, in

    Activates the method (sets the ready signal).

    +
    +
    done: Signal, out

    Signals that the method is called (returns the run signal).

    +
    +
    data_in: Record, in

    Data returned from the defined method.

    +
    +
    data_out: Record, out

    Data passed as argument to the defined method.

    +
    +
    +
    +
    +
    +
    +__init__(*, name: Optional[str] = None, i: Union[Layout, Sequence[Union[Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike]], Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike], Direction]]]] = (), o: Union[Layout, Sequence[Union[Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike]], Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike], Direction]]]] = ())
    +
    +
    Parameters
    +
    +
    i: record layout

    The input layout of the defined method.

    +
    +
    o: record layout

    The output layout of the defined method.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.lib.AdapterTrans
    +

    Bases: AdapterBase

    +

    Adapter transaction.

    +

    Creates a transaction controlled by plain Amaranth signals. Allows to +expose a method to plain Amaranth code, including testbenches.

    +
    +
    Attributes
    +
    +
    en: Signal, in

    Activates the transaction (sets the request signal).

    +
    +
    done: Signal, out

    Signals that the transaction is performed (returns the grant +signal).

    +
    +
    data_in: Record, in

    Data passed to the iface method.

    +
    +
    data_out: Record, out

    Data returned from the iface method.

    +
    +
    +
    +
    +
    +
    +__init__(iface: Method)
    +
    +
    Parameters
    +
    +
    iface: Method

    The method to be called by the transaction.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.lib.CatTrans
    +

    Bases: Elaboratable

    +

    Concatenating transaction.

    +

    Concatenates the results of two methods and passes the result to the +third method.

    +
    +
    +__init__(src1: Method, src2: Method, dst: Method)
    +
    +
    Parameters
    +
    +
    src1: Method

    First input method.

    +
    +
    src2: Method

    Second input method.

    +
    +
    dst: Method

    The method which receives the concatenation of the results of input +methods.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.lib.ClickIn
    +

    Bases: Elaboratable

    +

    Clicked input.

    +

    Useful for interactive simulations or FPGA button/switch interfaces. +On a rising edge (tested synchronously) of btn, the get method +is enabled, which returns the data present on dat at the time. +Inputs are synchronized.

    +
    +
    Attributes
    +
    +
    get: Method

    The method for retrieving data from the input. Accepts an empty +argument, returns a Record.

    +
    +
    btn: Signal, in

    The button input.

    +
    +
    dat: Record, in

    The data input.

    +
    +
    +
    +
    +
    +
    +__init__(layout: Union[Layout, Sequence[Union[Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike]], Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike], Direction]]]])
    +
    +
    Parameters
    +
    +
    layout: record layout

    The data format for the input.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.lib.ClickOut
    +

    Bases: Elaboratable

    +

    Clicked output.

    +

    Useful for interactive simulations or FPGA button/LED interfaces. +On a rising edge (tested synchronously) of btn, the put method +is enabled, which, when called, changes the value of the dat signal.

    +
    +
    Attributes
    +
    +
    put: Method

    The method for retrieving data from the input. Accepts a Record, +returns empty result.

    +
    +
    btn: Signal, in

    The button input.

    +
    +
    dat: Record, out

    The data output.

    +
    +
    +
    +
    +
    +
    +__init__(layout: Union[Layout, Sequence[Union[Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike]], Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike], Direction]]]])
    +
    +
    Parameters
    +
    +
    layout: record layout

    The data format for the output.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.lib.Collector
    +

    Bases: Elaboratable

    +

    Single result collector.

    +

    Creates method that collects results of many methods with identical +layouts. Each call of this method will return a single result of one +of the provided methods.

    +
    +
    Attributes
    +
    +
    method: Method

    Method which returns single result of provided methods.

    +
    +
    +
    +
    +
    +
    +__init__(targets: list[transactron.core.Method])
    +
    +
    Parameters
    +
    +
    method_list: list[Method]

    List of methods from which results will be collected.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.lib.Connect
    +

    Bases: Elaboratable

    +

    Forwarding by transaction simultaneity

    +

    Provides a means to connect two transactions with forwarding +by means of the transaction simultaneity mechanism. It provides +two methods: read, and write, which always execute simultaneously. +Typical use case is for moving data from write to read, but +data flow in the reverse direction is also possible.

    +
    +
    Attributes
    +
    +
    read: Method

    The read method. Accepts a (possibly empty) Record, returns +a Record.

    +
    +
    write: Method

    The write method. Accepts a Record, returns a (possibly empty) +Record.

    +
    +
    +
    +
    +
    +
    +__init__(layout: Union[Layout, Sequence[Union[Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike]], Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike], Direction]]]] = (), rev_layout: Union[Layout, Sequence[Union[Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike]], Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike], Direction]]]] = ())
    +
    +
    Parameters
    +
    +
    layout: record layout

    The format of records forwarded.

    +
    +
    rev_layout: record layout

    The format of records forwarded in the reverse direction.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.lib.ConnectAndTransformTrans
    +

    Bases: Elaboratable

    +

    Connecting transaction with transformations.

    +

    Behaves like ConnectTrans, but modifies the transferred data using +functions or Method`s. Equivalent to a combination of +`ConnectTrans and MethodTransformer. The transformation +functions take two parameters, a Module and the Record being +transformed.

    +
    +
    +__init__(method1: Method, method2: Method, *, i_fun: Optional[Callable[[TModule, Record], amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable | collections.abc.Mapping[str, RecordDict]]] = None, o_fun: Optional[Callable[[TModule, Record], amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable | collections.abc.Mapping[str, RecordDict]]] = None)
    +
    +
    Parameters
    +
    +
    method1: Method

    First method.

    +
    +
    method2: Method

    Second method, and the method being transformed.

    +
    +
    i_fun: function or Method, optional

    Input transformation (method1 to method2).

    +
    +
    o_fun: function or Method, optional

    Output transformation (method2 to method1).

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.lib.ConnectTrans
    +

    Bases: Elaboratable

    +

    Simple connecting transaction.

    +

    Takes two methods and creates a transaction which calls both of them. +Result of the first method is connected to the argument of the second, +and vice versa. Allows easily connecting methods with compatible +layouts.

    +
    +
    +__init__(method1: Method, method2: Method)
    +
    +
    Parameters
    +
    +
    method1: Method

    First method.

    +
    +
    method2: Method

    Second method.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.lib.FIFO
    +

    Bases: Elaboratable

    +

    FIFO module.

    +

    Provides a transactional interface to Amaranth FIFOs. Exposes two methods: +read, and write. Both methods are ready only when they can +be executed – i.e. the queue is respectively not empty / not full. +It is possible to simultaneously read and write in a single clock cycle, +but only if both readiness conditions are fulfilled.

    +
    +
    Attributes
    +
    +
    read: Method

    The read method. Accepts an empty argument, returns a Record.

    +
    +
    write: Method

    The write method. Accepts a Record, returns empty result.

    +
    +
    +
    +
    +
    +
    +__init__(layout: ~typing.Union[~amaranth.hdl._rec.Layout, ~typing.Sequence[~typing.Union[~typing.Tuple[str, ~typing.Union[~amaranth.hdl.ast.Shape, ~amaranth.hdl.ast.ShapeCastable, int, range, ~typing.Type[~enum.Enum], LayoutLike]], ~typing.Tuple[str, ~typing.Union[~amaranth.hdl.ast.Shape, ~amaranth.hdl.ast.ShapeCastable, int, range, ~typing.Type[~enum.Enum], LayoutLike], ~amaranth.hdl._rec.Direction]]]], depth: int, fifo_type=<class 'amaranth.lib.fifo.SyncFIFO'>)
    +
    +
    Parameters
    +
    +
    layout: record layout

    The format of records stored in the FIFO.

    +
    +
    depth: int

    Size of the FIFO.

    +
    +
    fifoType: Elaboratable

    FIFO module conforming to Amaranth library FIFO interface. Defaults +to SyncFIFO.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.lib.Forwarder
    +

    Bases: Elaboratable

    +

    Forwarding with overflow buffering

    +

    Provides a means to connect two transactions with forwarding. Exposes +two methods: read, and write. When both of these methods are +executed simultaneously, data is forwarded between them. If write +is executed, but read is not, the value cannot be forwarded, +but is stored into an overflow buffer. No further writes are +possible until the overflow buffer is cleared by read.

    +

    The write method is scheduled before read.

    +
    +
    Attributes
    +
    +
    read: Method

    The read method. Accepts an empty argument, returns a Record.

    +
    +
    write: Method

    The write method. Accepts a Record, returns empty result.

    +
    +
    +
    +
    +
    +
    +__init__(layout: Union[Layout, Sequence[Union[Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike]], Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike], Direction]]]])
    +
    +
    Parameters
    +
    +
    layout: record layout

    The format of records forwarded.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.lib.ManyToOneConnectTrans
    +

    Bases: Elaboratable

    +

    Many-to-one method connection.

    +

    Connects each of a set of methods to another method using separate +transactions. Equivalent to a set of ConnectTrans.

    +
    +
    +__init__(*, get_results: list[transactron.core.Method], put_result: Method)
    +
    +
    Parameters
    +
    +
    get_results: list[Method]

    Methods to be connected to the put_result method.

    +
    +
    put_result: Method

    Common method for each of the connections created.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.lib.MemoryBank
    +

    Bases: Elaboratable

    +

    MemoryBank module.

    +

    Provides a transactional interface to synchronous Amaranth Memory with one +read and one write port. It supports optionally writing with given granularity.

    +
    +
    Attributes
    +
    +
    read_req: Method

    The read request method. Accepts an addr from which data should be read. +Only ready if there is there is a place to buffer response.

    +
    +
    read_resp: Method

    The read response method. Return data_layout Record which was saved on addr given by last +read_req method call. Only ready after read_req call.

    +
    +
    write: Method

    The write method. Accepts addr where data should be saved, data in form of data_layout +and optionally mask if granularity is not None. 1 in mask means that appropriate part should be written.

    +
    +
    +
    +
    +
    +
    +__init__(*, data_layout: Union[Layout, Sequence[Union[Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike]], Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike], Direction]]]], elem_count: int, granularity: Optional[int] = None, safe_writes: bool = True)
    +
    +
    Parameters
    +
    +
    data_layout: record layout

    The format of records stored in the Memory.

    +
    +
    elem_count: int

    Number of elements stored in Memory.

    +
    +
    granularity: Optional[int]

    Granularity of write, forwarded to Amaranth. If None the whole record is always saved at once. +If not, the width of data_layout is split into granularity parts, which can be saved independently.

    +
    +
    safe_writes: bool

    Set to False if an optimisation can be done to increase throughput of writes. This will cause that +writes will be reordered with respect to reads eg. in sequence “read A, write A X”, read can return +“X” even when write was called later. By default True, which disable optimisation.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.lib.MethodFilter
    +

    Bases: Elaboratable

    +

    Method filter.

    +

    Takes a target method and creates a method which calls the target method +only when some condition is true. The condition function takes two +parameters, a module and the input Record of the method. Non-zero +return value is interpreted as true. Alternatively to using a function, +a Method can be passed as a condition.

    +

    Caveat: because of the limitations of transaction scheduling, the target +method is locked for usage even if it is not called.

    +
    +
    Attributes
    +
    +
    method: Method

    The transformed method.

    +
    +
    +
    +
    +
    +
    +__init__(target: Method, condition: Callable[[TModule, Record], amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable], default: Optional[Union[Value, int, Enum, ValueCastable, Mapping[str, RecordDict]]] = None)
    +
    +
    Parameters
    +
    +
    target: Method

    The target method.

    +
    +
    condition: function or Method

    The condition which, when true, allows the call to target. When +false, default is returned.

    +
    +
    default: Value or dict, optional

    The default value returned from the filtered method when the condition +is false. If omitted, zero is returned.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.lib.MethodProduct
    +

    Bases: Elaboratable

    +
    +
    +__init__(targets: list[transactron.core.Method], combiner: Optional[Tuple[Union[Layout, Sequence[Union[Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike]], Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike], Direction]]]], Callable[[TModule, list[amaranth.hdl._rec.Record]], amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable | collections.abc.Mapping[str, RecordDict]]]] = None)
    +

    Method product.

    +

    Takes arbitrary, non-zero number of target methods, and constructs +a method which calls all of the target methods using the same +argument. The return value of the resulting method is, by default, +the return value of the first of the target methods. A combiner +function can be passed, which can compute the return value from +the results of every target method.

    +
    +
    Parameters
    +
    +
    targets: list[Method]

    A list of methods to be called.

    +
    +
    combiner: (int or method layout, function), optional

    A pair of the output layout and the combiner function. The +combiner function takes two parameters: a Module and +a list of outputs of the target methods.

    +
    +
    +
    +
    Attributes
    +
    +
    method: Method

    The product method.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.lib.MethodTransformer
    +

    Bases: Elaboratable

    +

    Method transformer.

    +

    Takes a target method and creates a transformed method which calls the +original target method, transforming the input and output values. +The transformation functions take two parameters, a Module and the +Record being transformed. Alternatively, a Method can be +passed.

    +
    +
    Attributes
    +
    +
    method: Method

    The transformed method.

    +
    +
    +
    +
    +
    +
    +__init__(target: Method, *, i_transform: Optional[Tuple[Union[Layout, Sequence[Union[Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike]], Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike], Direction]]]], Callable[[TModule, Record], amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable | collections.abc.Mapping[str, RecordDict]]]] = None, o_transform: Optional[Tuple[Union[Layout, Sequence[Union[Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike]], Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike], Direction]]]], Callable[[TModule, Record], amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable | collections.abc.Mapping[str, RecordDict]]]] = None)
    +
    +
    Parameters
    +
    +
    target: Method

    The target method.

    +
    +
    i_transform: (record layout, function or Method), optional

    Input transformation. If specified, it should be a pair of a +function and a input layout for the transformed method. +If not present, input is not transformed.

    +
    +
    o_transform: (record layout, function or Method), optional

    Output transformation. If specified, it should be a pair of a +function and a output layout for the transformed method. +If not present, output is not transformed.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.lib.MethodTryProduct
    +

    Bases: Elaboratable

    +
    +
    +__init__(targets: list[transactron.core.Method], combiner: Mapping[str, 'RecordDict']]]] = None)
    +

    Method product with optional calling.

    +

    Takes arbitrary, non-zero number of target methods, and constructs +a method which tries to call all of the target methods using the same +argument. The methods which are not ready are not called. The return +value of the resulting method is, by default, empty. A combiner +function can be passed, which can compute the return value from the +results of every target method.

    +
    +
    Parameters
    +
    +
    targets: list[Method]

    A list of methods to be called.

    +
    +
    combiner: (int or method layout, function), optional

    A pair of the output layout and the combiner function. The +combiner function takes two parameters: a Module and +a list of pairs. Each pair contains a bit which signals +that a given call succeeded, and the result of the call.

    +
    +
    +
    +
    Attributes
    +
    +
    method: Method

    The product method.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.lib.Serializer
    +

    Bases: Elaboratable

    +

    Module to serialize request-response methods.

    +

    Provides a transactional interface to connect many client Modules (which request somethig using method call) +with a server Module which provides method to request operation and method to get response.

    +

    Requests are being serialized from many clients and forwarded to a server which can process only one request +at the time. Responses from server are deserialized and passed to proper client. Serializer assumes, that +responses from the server are in-order, so the order of responses is the same as order of requests.

    +
    +
    Attributes
    +
    +
    serialize_in: list[Method]

    List of request methods. Data layouts are the same as for serialized_req_method.

    +
    +
    serialize_out: list[Method]

    List of response methods. Data layouts are the same as for serialized_resp_method. +i-th response method provides responses for requests from i-th serialize_in method.

    +
    +
    +
    +
    +
    +
    +__init__(*, port_count: int, serialized_req_method: Method, serialized_resp_method: Method, depth: int = 4)
    +
    +
    Parameters
    +
    +
    port_count: int

    Number of ports, which should be generated. len(serialize_in)=len(serialize_out)=port_count

    +
    +
    serialized_req_method: Method

    Request method provided by server’s Module.

    +
    +
    serialized_resp_method: Method

    Response method provided by server’s Module.

    +
    +
    depth: int

    Number of requests which can be forwarded to server, before server provides first response. Describe +the resistance of Serializer to latency of server in case when server is fully pipelined.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +transactron.lib.condition(m: TModule, *, nonblocking: bool = False, priority: bool = True)
    +

    Conditions using simultaneous transactions.

    +

    This context manager allows to easily define conditions utilizing +nested transactions and the simultaneous transactions mechanism. +It is similar to Amaranth’s If, but allows to call different and +possibly overlapping method sets in each branch. Each of the branches is +defined using a separate nested transaction.

    +

    Inside the condition body, branches can be added, which are guarded +by Boolean conditions. A branch is considered for execution if its +condition is true and the called methods can be run. A catch-all, +default branch can be added, which can be executed only if none of +the other branches execute. Note that the default branch can run +even if some of the conditions are true, but their branches can’t +execute for other reasons.

    +
    +
    Parameters
    +
    +
    mTModule

    A module where the condition is defined.

    +
    +
    nonblockingbool

    States that the condition should not block the containing method +or transaction from running, even when every branch cannot run. +If nonblocking is false and every branch cannot run (because of +a false condition or disabled called methods), the whole method +or transaction will be stopped from running.

    +
    +
    prioritybool

    States that the conditions are not mutually exclusive and should +be tested in order. This influences the scheduling order of generated +transactions.

    +
    +
    +
    +
    +

    Examples

    +
    with condition(m) as branch:
    +    with branch(cond1):
    +        ...
    +    with branch(cond2):
    +        ...
    +    with branch():  # default, optional
    +        ...
    +
    +
    +
    + +
    +
    +

    transactron.tracing module

    +

    Utilities for extracting dependencies from Amaranth.

    +
    +
    +class transactron.tracing.TracingEnabler
    +

    Bases: object

    +
    + +
    +
    +class transactron.tracing.TracingFragment
    +

    Bases: Fragment

    +
    +
    +static get(obj: HasElaborate, platform) TracingFragment
    +

    This function code is based on Amaranth, which originally loses all information. +It was too difficult to hook into, so this has to be a near-exact copy.

    +

    Relevant copyrights apply.

    +
    + +
    +
    +prepare(*args, **kwargs) TracingFragment
    +
    + +
    +
    +subfragments: list[tuple[amaranth.hdl.ir.Elaboratable, str]]
    +
    + +
    + +
    +
    +class transactron.tracing.TracingFragmentTransformer
    +

    Bases: FragmentTransformer

    +
    +
    +on_fragment(fragment)
    +
    + +
    + +
    +
    +class transactron.tracing.TracingInstance
    +

    Bases: Instance, TracingFragment

    +
    +
    +get(platform) TracingFragment
    +

    This function code is based on Amaranth, which originally loses all information. +It was too difficult to hook into, so this has to be a near-exact copy.

    +

    Relevant copyrights apply.

    +
    + +
    + +
    +
    +

    Module contents

    +
    +
    +class transactron.Method
    +

    Bases: TransactionBase

    +

    Transactional method.

    +

    A Method serves to interface a module with external Transactions +or Methods. It can be called by at most once in a given clock cycle. +When a given Method is required by multiple Transactions +(either directly, or indirectly via another Method) simultenaously, +at most one of them is granted by the TransactionManager, and the rest +of them must wait. (Non-exclusive methods are an exception to this +behavior.) Calling a Method always takes a single clock cycle.

    +

    Data is combinationally transferred between to and from Methods +using Amaranth Records. The transfer can take place in both directions +at the same time: from the called Method to the caller (data_out) +and from the caller to the called Method (data_in).

    +

    A module which defines a Method should use body or def_method +to describe the method’s effect on the module state.

    +
    +
    Attributes
    +
    +
    name: str

    Name of this Method.

    +
    +
    ready: Signal, in

    Signals that the method is ready to run in the current cycle. +Typically defined by calling body.

    +
    +
    run: Signal, out

    Signals that the method is called in the current cycle by some +Transaction. Defined by the TransactionManager.

    +
    +
    data_in: Record, out

    Contains the data passed to the Method by the caller +(a Transaction or another Method).

    +
    +
    data_out: Record, in

    Contains the data passed from the Method to the caller +(a Transaction or another Method). Typically defined by +calling body.

    +
    +
    +
    +
    +
    +
    +__init__(*, name: Optional[str] = None, i: Union[Layout, Sequence[Union[Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike]], Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike], Direction]]]] = (), o: Union[Layout, Sequence[Union[Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike]], Tuple[str, Union[Shape, ShapeCastable, int, range, Type[Enum], LayoutLike], Direction]]]] = (), nonexclusive: bool = False, single_caller: bool = False)
    +
    +
    Parameters
    +
    +
    name: str or None

    Name hint for this Method. If None (default) the name is +inferred from the variable name this Method is assigned to.

    +
    +
    i: record layout

    The format of data_in. +An int corresponds to a Record with a single data field.

    +
    +
    o: record layout

    The format of data_in. +An int corresponds to a Record with a single data field.

    +
    +
    nonexclusive: bool

    If true, the method is non-exclusive: it can be called by multiple +transactions in the same clock cycle. If such a situation happens, +the method still is executed only once, and each of the callers +receive its output. Nonexclusive methods cannot have inputs.

    +
    +
    single_caller: bool

    If true, this method is intended to be called from a single +transaction. An error will be thrown if called from multiple +transactions.

    +
    +
    +
    +
    +
    + +
    +
    +body(m: ~transactron.core.TModule, *, ready: amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable = (const 1'd1), out: amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable = (const 0'd0)) Iterator[Record]
    +

    Define method body

    +

    The body context manager can be used to define the actions +performed by a Method when it’s run. Each assignment added to +a domain under body is guarded by the run signal. +Combinational assignments which do not need to be guarded by run +can be added to m.d.av_comb or m.d.top_comb instead of m.d.comb. +Method calls can be performed under body.

    +
    +
    Parameters
    +
    +
    mTModule

    Module in which operations on signals should be executed, +body uses the combinational domain only.

    +
    +
    readySignal, in

    Signal to indicate if the method is ready to be run. By +default it is Const(1), so the method is always ready. +Assigned combinationially to the ready attribute.

    +
    +
    outRecord, in

    Data generated by the Method, which will be passed to +the caller (a Transaction or another Method). Assigned +combinationally to the data_out attribute.

    +
    +
    +
    +
    Returns
    +
    +
    data_inRecord, out

    Data passed from the caller (a Transaction or another +Method) to this Method.

    +
    +
    +
    +
    +

    Examples

    +
    m = Module()
    +my_sum_method = Method(i = Layout([("arg1",8),("arg2",8)]))
    +sum = Signal(16)
    +with my_sum_method.body(m, out = sum) as data_in:
    +    m.d.comb += sum.eq(data_in.arg1 + data_in.arg2)
    +
    +
    +
    + +
    +
    +debug_signals() Union[Signal, Record, View, Iterable[Union[Signal, Record, View, Iterable[SignalBundle], Mapping[str, SignalBundle]]], Mapping[str, Union[Signal, Record, View, Iterable[SignalBundle], Mapping[str, SignalBundle]]]]
    +
    + +
    +
    +static like(other: Method, *, name: Optional[str] = None) Method
    +

    Constructs a new Method based on another.

    +

    The returned Method has the same input/output data layouts as the +other Method.

    +
    +
    Parameters
    +
    +
    otherMethod

    The Method which serves as a blueprint for the new Method.

    +
    +
    namestr, optional

    Name of the new Method.

    +
    +
    +
    +
    Returns
    +
    +
    Method

    The freshly constructed Method.

    +
    +
    +
    +
    +
    + +
    +
    +proxy(m: TModule, method: Method)
    +

    Define as a proxy for another method.

    +

    The calls to this method will be forwarded to method.

    +
    +
    Parameters
    +
    +
    mTModule

    Module in which operations on signals should be executed, +proxy uses the combinational domain only.

    +
    +
    methodMethod

    Method for which this method is a proxy for.

    +
    +
    +
    +
    +
    + +
    + +
    +
    +class transactron.TModule
    +

    Bases: ModuleLike, Elaboratable

    +

    Extended Amaranth module for use with transactions.

    +

    It includes three different combinational domains:

    +
      +
    • comb domain, works like the comb domain in plain Amaranth modules. +Statements in comb are guarded by every condition, including +AvoidedIf. This means they are guarded by transaction and method +bodies: they don’t execute if the given transaction/method is not run.

    • +
    • av_comb is guarded by all conditions except AvoidedIf. This means +they are not guarded by transaction and method bodies. This allows to +reduce the amount of useless multplexers due to transaction use, while +still allowing the use of conditions in transaction/method bodies.

    • +
    • top_comb is unguarded: statements added to this domain always +execute. It can be used to reduce combinational path length due to +multplexers while keeping related combinational and synchronous +statements together.

    • +
    +
    +
    +AvoidedIf(cond: amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable)
    +
    + +
    +
    +Case(*patterns: str | int | enum.Enum)
    +
    + +
    +
    +Default()
    +
    + +
    +
    +Elif(cond)
    +
    + +
    +
    +Else()
    +
    + +
    +
    +FSM(reset: Optional[str] = None, domain: str = 'sync', name: str = 'fsm')
    +
    + +
    +
    +If(cond: amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable)
    +
    + +
    +
    +State(name: str)
    +
    + +
    +
    +Switch(test: amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable)
    +
    + +
    +
    +__init__()
    +
    + +
    +
    +property next: NoReturn
    +
    + +
    + +
    +
    +class transactron.Transaction
    +

    Bases: TransactionBase

    +

    Transaction.

    +

    A Transaction represents a task which needs to be regularly done. +Execution of a Transaction always lasts a single clock cycle. +A Transaction signals readiness for execution by setting the +request signal. If the conditions for its execution are met, it +can be granted by the TransactionManager.

    +

    A Transaction can, as part of its execution, call a number of +Methods. A Transaction can be granted only if every Method +it runs is ready.

    +

    A Transaction cannot execute concurrently with another, conflicting +Transaction. Conflicts between Transactions are either explicit +or implicit. An explicit conflict is added using the add_conflict +method. Implicit conflicts arise between pairs of Transactions +which use the same Method.

    +

    A module which defines a Transaction should use body to +describe used methods and the transaction’s effect on the module state. +The used methods should be called inside the body’s +with block.

    +
    +
    Attributes
    +
    +
    name: str

    Name of this Transaction.

    +
    +
    request: Signal, in

    Signals that the transaction wants to run. If omitted, the transaction +is always ready. Defined in the constructor.

    +
    +
    grant: Signal, out

    Signals that the transaction is granted by the TransactionManager, +and all used methods are called.

    +
    +
    +
    +
    +
    +
    +__init__(*, name: Optional[str] = None, manager: Optional[TransactionManager] = None)
    +
    +
    Parameters
    +
    +
    name: str or None

    Name hint for this Transaction. If None (default) the name is +inferred from the variable name this Transaction is assigned to. +If the Transaction was not assigned, the name is inferred from +the class name where the Transaction was constructed.

    +
    +
    manager: TransactionManager

    The TransactionManager controlling this Transaction. +If omitted, the manager is received from TransactionContext.

    +
    +
    +
    +
    +
    + +
    +
    +body(m: ~transactron.core.TModule, *, request: amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable = (const 1'd1)) Iterator[Transaction]
    +

    Defines the Transaction body.

    +

    This context manager allows to conveniently define the actions +performed by a Transaction when it’s granted. Each assignment +added to a domain under body is guarded by the grant signal. +Combinational assignments which do not need to be guarded by +grant can be added to m.d.top_comb or m.d.av_comb instead of +m.d.comb. Method calls can be performed under body.

    +
    +
    Parameters
    +
    +
    m: TModule

    The module where the Transaction is defined.

    +
    +
    request: Signal

    Indicates that the Transaction wants to be executed. By +default it is Const(1), so it wants to be executed in +every clock cycle.

    +
    +
    +
    +
    +
    + +
    +
    +debug_signals() Union[Signal, Record, View, Iterable[Union[Signal, Record, View, Iterable[SignalBundle], Mapping[str, SignalBundle]]], Mapping[str, Union[Signal, Record, View, Iterable[SignalBundle], Mapping[str, SignalBundle]]]]
    +
    + +
    + +
    +
    +class transactron.TransactionContext
    +

    Bases: object

    +
    +
    +__init__(manager: TransactionManager)
    +
    + +
    +
    +classmethod get() TransactionManager
    +
    + +
    +
    +stack: list[transactron.core.TransactionManager] = []
    +
    + +
    + +
    +
    +class transactron.TransactionManager
    +

    Bases: Elaboratable

    +

    Transaction manager

    +

    This module is responsible for granting Transactions and running +Methods. It takes care that two conflicting Transactions +are never granted in the same clock cycle.

    +
    +
    +__init__(cc_scheduler: ~collections.abc.Callable[[MethodMap, dict['Transaction', set['Transaction']], set['Transaction'], dict['Transaction', int]], ~amaranth.hdl.dsl.Module] = <function eager_deterministic_cc_scheduler>)
    +
    + +
    +
    +add_transaction(transaction: Transaction)
    +
    + +
    +
    +debug_signals() Union[Signal, Record, View, Iterable[Union[Signal, Record, View, Iterable[SignalBundle], Mapping[str, SignalBundle]]], Mapping[str, Union[Signal, Record, View, Iterable[SignalBundle], Mapping[str, SignalBundle]]]]
    +
    + +
    +
    +visual_graph(fragment)
    +
    + +
    + +
    +
    +class transactron.TransactionModule
    +

    Bases: Elaboratable

    +

    TransactionModule is used as wrapper on Elaboratable classes, +which adds support for transactions. It creates a +TransactionManager which will handle transaction scheduling +and can be used in definition of Methods and Transactions.

    +
    +
    +__init__(elaboratable: HasElaborate, manager: Optional[TransactionManager] = None)
    +
    +
    Parameters
    +
    +
    elaboratable: HasElaborate

    The Elaboratable which should be wrapped to add support for +transactions and methods.

    +
    +
    +
    +
    +
    + +
    +
    +transaction_context() TransactionContext
    +
    + +
    + +
    +
    +transactron.def_method(m: ~transactron.core.TModule, method: ~transactron.core.Method, ready: amaranth.hdl.ast.Value | int | enum.Enum | amaranth.hdl.ast.ValueCastable = (const 1'd1))
    +

    Define a method.

    +

    This decorator allows to define transactional methods in an +elegant way using Python’s def syntax. Internally, def_method +uses Method.body.

    +

    The decorated function should take keyword arguments corresponding to the +fields of the method’s input layout. The **kwargs syntax is supported. +Alternatively, it can take one argument named arg, which will be a +record with input signals.

    +

    The returned value can be either a record with the method’s output layout +or a dictionary of outputs.

    +
    +
    Parameters
    +
    +
    m: TModule

    Module in which operations on signals should be executed.

    +
    +
    method: Method

    The method whose body is going to be defined.

    +
    +
    ready: Signal

    Signal to indicate if the method is ready to be run. By +default it is Const(1), so the method is always ready. +Assigned combinationally to the ready attribute.

    +
    +
    +
    +
    +

    Examples

    +
    m = Module()
    +my_sum_method = Method(i=[("arg1",8),("arg2",8)], o=[("res",8)])
    +@def_method(m, my_sum_method)
    +def _(arg1, arg2):
    +    return arg1 + arg2
    +
    +
    +

    Alternative syntax (keyword args in dictionary):

    +
    @def_method(m, my_sum_method)
    +def _(**args):
    +    return args["arg1"] + args["arg2"]
    +
    +
    +

    Alternative syntax (arg record):

    +
    @def_method(m, my_sum_method)
    +def _(arg):
    +    return {"res": arg.arg1 + arg.arg2}
    +
    +
    +
    + +
    +
    + + +
    +
    +
    + +
    + +
    +

    © Copyright Kuźnia Rdzeni, 2023. + Last updated on 10:23 2023-10-07. +

    +
    + + + +
    +
    +
    +
    +
    + + + + \ No newline at end of file