ariths-gen/multi_bit_circuits/adders/conditional_sum_adder.html

784 lines
78 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
<meta name="generator" content="pdoc3 0.11.4">
<title>ariths_gen.multi_bit_circuits.adders.conditional_sum_adder API documentation</title>
<meta name="description" content="">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/13.0.0/sanitize.min.css" integrity="sha512-y1dtMcuvtTMJc1yPgEqF0ZjQbhnc/bFhyvIyVNb9Zk5mIGtqVaAB1Ttl28su8AvFMOY0EwRbAe+HCLqj6W7/KA==" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/13.0.0/typography.min.css" integrity="sha512-Y1DYSb995BAfxobCkKepB1BqJJTPrOp3zPL74AWFugHHmmdcvO+C48WLrUOlhGMc0QG7AE3f7gmvvcrmX2fDoA==" crossorigin>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/default.min.css" crossorigin>
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:1.5em;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:2em 0 .50em 0}h3{font-size:1.4em;margin:1.6em 0 .7em 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .2s ease-in-out}a:visited{color:#503}a:hover{color:#b62}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900;font-weight:bold}pre code{font-size:.8em;line-height:1.4em;padding:1em;display:block}code{background:#f3f3f3;font-family:"DejaVu Sans Mono",monospace;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em 1em;margin:1em 0}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul ul{padding-left:1em}.toc > ul > li{margin-top:.5em}}</style>
<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js" integrity="sha512-D9gUyxqja7hBtkWpPWGt9wfbfaMGVt9gnyCvYa+jojwwPHLCzUm5i8rpk7vD7wNee9bA35eYIjobYPaQuKS1MQ==" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => {
hljs.configure({languages: ['bash', 'css', 'diff', 'graphql', 'ini', 'javascript', 'json', 'plaintext', 'python', 'python-repl', 'rust', 'shell', 'sql', 'typescript', 'xml', 'yaml']});
hljs.highlightAll();
})</script>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>ariths_gen.multi_bit_circuits.adders.conditional_sum_adder</code></h1>
</header>
<section id="section-intro">
</section>
<section>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-classes">Classes</h2>
<dl>
<dt id="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.SignedConditionalSumAdder"><code class="flex name class">
<span>class <span class="ident">SignedConditionalSumAdder</span></span>
<span>(</span><span>a: <a title="ariths_gen.wire_components.buses.Bus" href="../../wire_components/buses.html#ariths_gen.wire_components.buses.Bus">Bus</a>,<br>b: <a title="ariths_gen.wire_components.buses.Bus" href="../../wire_components/buses.html#ariths_gen.wire_components.buses.Bus">Bus</a>,<br>prefix: str = '',<br>name: str = 's_cosa',<br>**kwargs)</span>
</code></dt>
<dd>
<div class="desc"><p>Class representing signed conditional sum adder.</p>
<p>Conditional sum adder performs carry-select addition starting with
groups of 1 bit and recursively doubling to N/2 bits.</p>
<p>The individual input bit pairs are first added in a carry-select fashion (cin of 0 and 1) with block size of 1.
Then in the subsequent two rows multiplexer pairs are used to properly select the sum and carry-out
of the upper bit of each block of size 2 (higher bit of the previous 2-bits from the previous level).
The next two rows follow the principle for blocks of size 4 and so on.
At last XOR gates are used to ensure proper sign extension.</p>
<p>The conditional sum adder shares the same structural characteristics as Sklansky tree adder.
Because of using many multiplexers, the number of gates is significant when compared to other architectures.</p>
<p>Another way on how to look at (and determine the number of) the multiplexers in the subsequent stages
can be done by converting the input bit index (counting from 0) into its binary form. Each bit position with value 1
signifies the stage position that contains multiplexers
(which ones and how many of them depends on other input bit index characteristics deducible from the code below).</p>
<pre><code>```
B3A3 B2A2 B1A1 B0A0
││ ││ ││ ││
C4┌▼▼┐ C3┌▼▼┐ C2┌▼▼┐ C1┌▼▼┐
┌┤FA│◄─0 ┌──┤FA│◄─0 ┌┤FA│◄─0 ┌──┤FA│◄─Cin
│└┬─┘ │ └┬─┘ │└┬─┘ │ └┬─┘
│ │S3 │ │S2 │ │S1 │ │
│ └───────┐ │ └───────┐ │ └───────┐ │ │
└────────┐│ │ │ └────────┐│ │ │
B3A3 ││ │ B2A2 │ B1A1 ││ │ │
││ ││ │ ││ │ ││ ││ │ │
C4┌▼▼┐ ││ │C3┌▼▼┐ │ C2┌▼▼┐ ││ │ │
┌┤FA│◄─1 ││ │┌─┤FA│◄─1 │ ┌┤FA│◄─1 ││ │ │
│└┬─┘ ││ ││ └┬─┘ │ │└┬─┘ ││ │ │
│ │S3 ││ ││ │S2 │ │ │S1 ││ │ │
┌┼─┴┐ ┌───┤│ ││ │ │ │ └┐ ┌───┘│ │ │
│├─┐│ │┌──┼┤ ││ │ ┌───┘ └─┐│ │┌───┘ │ │
││ ││ ││ ││ ││ │ │ ││ ││ │ │
││┌▼▼─▼▼┐ ││ ││ │ │ ┌▼▼─▼▼┐ │ │
│││ 2:1 │ ││SEL││ │ │ │ 2:1 │ SEL│ │
</code></pre>
<p>Stage 0:
│││MUXes│◄┼┼───┘│
│MUXes│◄─────┘
│││ CS
│ ││
│ CS
││└┬───┬┘ ││
└┬───┬┘
││ │C4 │S3││
│C2 │
││ └───┼──┼┼────┼┐ │
││
└──┼┼────┼┼┐│
└┼──┐ ┌───┘│
││││
└─┐│ │┌───┘
││││
││ ││
││││
┌▼▼─▼▼┐
││││
│ 2:1 │
SEL ││││
Stage 0:
│MUXes│◄──────┘│││
│ CS
│││
└┬───┬┘
│││
│C4 │S3
│││
│┌──┘
│││
││ ┌──────────┘││
││ │┌──────────┘│
││ ││
┌───┼───┼───────────┤
┌▼▼─▼▼┐
┌▼───▼┐
│ 2:1 │
SEL│
│ 2:1 │
SEL
Stage 1:
│MUXes│◄─────┘
│MUXes│◄─────────┘
│ CS
│ S
└┬───┬┘
└────┬┘
│C4 │
┌───▼──┐│
│ SIGN ││
│Extend││
└───┬──┘│
Cout S3
S2
S1
S0
```</p>
<p>Description of the <strong>init</strong> method.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>a</code></strong> :&ensp;<code>Bus</code></dt>
<dd>First input bus.</dd>
<dt><strong><code>b</code></strong> :&ensp;<code>Bus</code></dt>
<dd>Second input bus.</dd>
<dt><strong><code>prefix</code></strong> :&ensp;<code>str</code>, optional</dt>
<dd>Prefix name of signed cosa. Defaults to "".</dd>
<dt><strong><code>name</code></strong> :&ensp;<code>str</code>, optional</dt>
<dd>Name of signed cosa. Defaults to "s_cosa".</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class SignedConditionalSumAdder(UnsignedConditionalSumAdder, GeneralCircuit):
&#34;&#34;&#34;Class representing signed conditional sum adder.
Conditional sum adder performs carry-select addition starting with
groups of 1 bit and recursively doubling to N/2 bits.
The individual input bit pairs are first added in a carry-select fashion (cin of 0 and 1) with block size of 1.
Then in the subsequent two rows multiplexer pairs are used to properly select the sum and carry-out
of the upper bit of each block of size 2 (higher bit of the previous 2-bits from the previous level).
The next two rows follow the principle for blocks of size 4 and so on.
At last XOR gates are used to ensure proper sign extension.
The conditional sum adder shares the same structural characteristics as Sklansky tree adder.
Because of using many multiplexers, the number of gates is significant when compared to other architectures.
Another way on how to look at (and determine the number of) the multiplexers in the subsequent stages
can be done by converting the input bit index (counting from 0) into its binary form. Each bit position with value 1
signifies the stage position that contains multiplexers
(which ones and how many of them depends on other input bit index characteristics deducible from the code below).
```
B3A3 B2A2 B1A1 B0A0
││ ││ ││ ││
C4┌▼▼┐ C3┌▼▼┐ C2┌▼▼┐ C1┌▼▼┐
┌┤FA│◄─0 ┌──┤FA│◄─0 ┌┤FA│◄─0 ┌──┤FA│◄─Cin
│└┬─┘ │ └┬─┘ │└┬─┘ │ └┬─┘
│ │S3 │ │S2 │ │S1 │ │
│ └───────┐ │ └───────┐ │ └───────┐ │ │
└────────┐│ │ │ └────────┐│ │ │
B3A3 ││ │ B2A2 │ B1A1 ││ │ │
││ ││ │ ││ │ ││ ││ │ │
C4┌▼▼┐ ││ │C3┌▼▼┐ │ C2┌▼▼┐ ││ │ │
┌┤FA│◄─1 ││ │┌─┤FA│◄─1 │ ┌┤FA│◄─1 ││ │ │
│└┬─┘ ││ ││ └┬─┘ │ │└┬─┘ ││ │ │
│ │S3 ││ ││ │S2 │ │ │S1 ││ │ │
┌┼─┴┐ ┌───┤│ ││ │ │ │ └┐ ┌───┘│ │ │
│├─┐│ │┌──┼┤ ││ │ ┌───┘ └─┐│ │┌───┘ │ │
││ ││ ││ ││ ││ │ │ ││ ││ │ │
││┌▼▼─▼▼┐ ││ ││ │ │ ┌▼▼─▼▼┐ │ │
│││ 2:1 │ ││SEL││ │ │ │ 2:1 │ SEL│ │
Stage 0: │││MUXes│◄┼┼───┘│ │ │ │MUXes│◄─────┘ │
│││ CS │ ││ │ │ │ │ CS │ │
││└┬───┬┘ ││ │ │ │ └┬───┬┘ │
││ │C4 │S3││ │ │ │ │C2 │ │
││ └───┼──┼┼────┼┐ │ │ │ │ │
││ └──┼┼────┼┼┐│ │ │ │ │
└┼──┐ ┌───┘│ ││││ │ │ │ │
└─┐│ │┌───┘ ││││ │ │ │ │
││ ││ ││││ │ │ │ │
┌▼▼─▼▼┐ ││││ │ │ │ │
│ 2:1 │ SEL ││││ │ │ │ │
Stage 0: │MUXes│◄──────┘│││ │ │ │ │
│ CS │ │││ │ │ │ │
└┬───┬┘ │││ │ │ │ │
│C4 │S3 │││ │ │ │ │
│┌──┘ │││ │ │ │ │
││ ┌──────────┘││ │ │ │ │
││ │┌──────────┘│ │ │ │ │
││ ││ ┌───┼───┼───────────┤ │ │
┌▼▼─▼▼┐ │ ┌▼───▼┐ │ │ │
│ 2:1 │ SEL│ │ 2:1 │ SEL │ │ │
Stage 1: │MUXes│◄─────┘ │MUXes│◄─────────┘ │ │
│ CS │ │ S │ │ │
└┬───┬┘ └────┬┘ │ │
│C4 │ │ │ │
┌───▼──┐│ │ │ │
│ SIGN ││ │ │ │
│Extend││ │ │ │
└───┬──┘│ │ │ │
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
Cout S3 S2 S1 S0
```
Description of the __init__ method.
Args:
a (Bus): First input bus.
b (Bus): Second input bus.
prefix (str, optional): Prefix name of signed cosa. Defaults to &#34;&#34;.
name (str, optional): Name of signed cosa. Defaults to &#34;s_cosa&#34;.
&#34;&#34;&#34;
def __init__(self, a: Bus, b: Bus, prefix: str = &#34;&#34;, name: str = &#34;s_cosa&#34;, **kwargs):
super().__init__(a=a, b=b, prefix=prefix, name=name, signed=True, **kwargs)
# Additional XOR gates to ensure correct sign extension in case of sign addition
self.add_component(XorGate(self.a.get_wire(self.N-1), self.b.get_wire(self.N-1), prefix=self.prefix+&#34;_xor&#34;+str(self.get_instance_num(cls=XorGate, count_disabled_gates=False)), parent_component=self))
self.add_component(XorGate(self.get_previous_component().out, self.out.get_wire(-1), prefix=self.prefix+&#34;_xor&#34;+str(self.get_instance_num(cls=XorGate, count_disabled_gates=False)), parent_component=self))
self.out.connect(self.N, self.get_previous_component().out)</code></pre>
</details>
<h3>Ancestors</h3>
<ul class="hlist">
<li><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder" href="#ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder">UnsignedConditionalSumAdder</a></li>
<li><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit">GeneralCircuit</a></li>
</ul>
<h3>Inherited members</h3>
<ul class="hlist">
<li><code><b><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder" href="#ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder">UnsignedConditionalSumAdder</a></b></code>:
<ul class="hlist">
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.add_component" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.add_component">add_component</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_blif_code_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_blif_code_flat">get_blif_code_flat</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_blif_code_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_blif_code_hier">get_blif_code_hier</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_c_code_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_c_code_flat">get_c_code_flat</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_c_code_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_c_code_hier">get_c_code_hier</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_cgp_code_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_cgp_code_flat">get_cgp_code_flat</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_circuit_blif" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_blif">get_circuit_blif</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_circuit_c" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_c">get_circuit_c</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_circuit_def" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_def">get_circuit_def</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_circuit_gates" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_gates">get_circuit_gates</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_circuit_v" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_v">get_circuit_v</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_circuit_wire_index" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_wire_index">get_circuit_wire_index</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_circuit_wires" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_wires">get_circuit_wires</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_component_types" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_component_types">get_component_types</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_declaration_blif" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declaration_blif">get_declaration_blif</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_declaration_c_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declaration_c_flat">get_declaration_c_flat</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_declaration_c_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declaration_c_hier">get_declaration_c_hier</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_declaration_v_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declaration_v_flat">get_declaration_v_flat</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_declaration_v_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declaration_v_hier">get_declaration_v_hier</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_declarations_c_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declarations_c_hier">get_declarations_c_hier</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_declarations_v_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declarations_v_hier">get_declarations_v_hier</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_function_blif_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_blif_flat">get_function_blif_flat</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_function_block_blif" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_block_blif">get_function_block_blif</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_function_block_c" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_block_c">get_function_block_c</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_function_block_v" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_block_v">get_function_block_v</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_function_blocks_blif" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_blocks_blif">get_function_blocks_blif</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_function_blocks_c" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_blocks_c">get_function_blocks_c</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_function_blocks_v" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_blocks_v">get_function_blocks_v</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_function_out_blif" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_blif">get_function_out_blif</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_function_out_c_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_c_flat">get_function_out_c_flat</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_function_out_c_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_c_hier">get_function_out_c_hier</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_function_out_python_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_python_flat">get_function_out_python_flat</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_function_out_v_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_v_flat">get_function_out_v_flat</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_function_out_v_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_v_hier">get_function_out_v_hier</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_hier_subcomponent_def" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_hier_subcomponent_def">get_hier_subcomponent_def</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_includes_c" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_includes_c">get_includes_c</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_init_c_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_init_c_flat">get_init_c_flat</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_init_c_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_init_c_hier">get_init_c_hier</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_init_python_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_init_python_flat">get_init_python_flat</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_init_v_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_init_v_flat">get_init_v_flat</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_init_v_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_init_v_hier">get_init_v_hier</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_instance_num" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_instance_num">get_instance_num</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_invocation_blif_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_invocation_blif_hier">get_invocation_blif_hier</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_invocations_blif_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_invocations_blif_hier">get_invocations_blif_hier</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_multi_bit_components" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_multi_bit_components">get_multi_bit_components</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_one_bit_components" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_one_bit_components">get_one_bit_components</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_out_invocation_c" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_out_invocation_c">get_out_invocation_c</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_out_invocation_v" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_out_invocation_v">get_out_invocation_v</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_outputs_cgp" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_outputs_cgp">get_outputs_cgp</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_parameters_cgp" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_parameters_cgp">get_parameters_cgp</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_previous_component" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_previous_component">get_previous_component</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_prototype_blif" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_prototype_blif">get_prototype_blif</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_prototype_c" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_prototype_c">get_prototype_c</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_prototype_python" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_prototype_python">get_prototype_python</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_prototype_v" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_prototype_v">get_prototype_v</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_python_code_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_python_code_flat">get_python_code_flat</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_triplets_cgp" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_triplets_cgp">get_triplets_cgp</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_unique_types" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_unique_types">get_unique_types</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_v_code_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_v_code_flat">get_v_code_flat</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.get_v_code_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_v_code_hier">get_v_code_hier</a></code></li>
<li><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder.save_wire_id" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.save_wire_id">save_wire_id</a></code></li>
</ul>
</li>
</ul>
</dd>
<dt id="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder"><code class="flex name class">
<span>class <span class="ident">UnsignedConditionalSumAdder</span></span>
<span>(</span><span>a: <a title="ariths_gen.wire_components.buses.Bus" href="../../wire_components/buses.html#ariths_gen.wire_components.buses.Bus">Bus</a>,<br>b: <a title="ariths_gen.wire_components.buses.Bus" href="../../wire_components/buses.html#ariths_gen.wire_components.buses.Bus">Bus</a>,<br>prefix: str = '',<br>name: str = 'u_cosa',<br>**kwargs)</span>
</code></dt>
<dd>
<div class="desc"><p>Class representing unsigned conditional sum adder.</p>
<p>Conditional sum adder performs carry-select addition starting with
groups of 1 bit and recursively doubling to N/2 bits.</p>
<p>The individual input bit pairs are first added in a carry-select fashion (cin of 0 and 1) with block size of 1.
Then in the subsequent two rows multiplexer pairs are used to properly select the sum and carry-out
of the upper bit of each block of size 2 (higher bit of the previous 2-bits from the previous level).
The next two rows follow the principle for blocks of size 4 and so on.</p>
<p>The conditional sum adder shares the same structural characteristics as Sklansky tree adder.
Because of using many multiplexers, the number of gates is significant when compared to other architectures.</p>
<p>Another way on how to look at (and determine the number of) the multiplexers in the subsequent stages
can be done by converting the input bit index (counting from 0) into its binary form. Each bit position with value 1
signifies the stage position that contains multiplexers
(which ones and how many of them depends on other input bit index characteristics deducible from the code below).</p>
<pre><code> B3A3 B2A2 B1A1 B0A0
││ ││ ││ ││
C4┌▼▼┐ C3┌▼▼┐ C2┌▼▼┐ C1┌▼▼┐
┌┤FA│◄─0 ┌──┤FA│◄─0 ┌┤FA│◄─0 ┌──┤FA│◄─Cin
│└┬─┘ │ └┬─┘ │└┬─┘ │ └┬─┘
│ │S3 │ │S2 │ │S1 │ │
│ └───────┐ │ └───────┐ │ └───────┐ │ │
└────────┐│ │ │ └────────┐│ │ │
B3A3 ││ │ B2A2 │ B1A1 ││ │ │
││ ││ │ ││ │ ││ ││ │ │
C4┌▼▼┐ ││ │C3┌▼▼┐ │ C2┌▼▼┐ ││ │ │
┌┤FA│◄─1 ││ │┌─┤FA│◄─1 │ ┌┤FA│◄─1 ││ │ │
│└┬─┘ ││ ││ └┬─┘ │ │└┬─┘ ││ │ │
│ │S3 ││ ││ │S2 │ │ │S1 ││ │ │
┌┼─┴┐ ┌───┤│ ││ │ │ │ └┐ ┌───┘│ │ │
│├─┐│ │┌──┼┤ ││ │ ┌───┘ └─┐│ │┌───┘ │ │
││ ││ ││ ││ ││ │ │ ││ ││ │ │
││┌▼▼─▼▼┐ ││ ││ │ │ ┌▼▼─▼▼┐ │ │
│││ 2:1 │ ││SEL││ │ │ │ 2:1 │ SEL│ │
Stage 0: │││MUXes│◄┼┼───┘│ │ │ │MUXes│◄─────┘ │
│││ CS │ ││ │ │ │ │ CS │ │
││└┬───┬┘ ││ │ │ │ └┬───┬┘ │
││ │C4 │S3││ │ │ │ │C2 │ │
││ └───┼──┼┼────┼┐ │ │ │ │ │
││ └──┼┼────┼┼┐│ │ │ │ │
└┼──┐ ┌───┘│ ││││ │ │ │ │
└─┐│ │┌───┘ ││││ │ │ │ │
││ ││ ││││ │ │ │ │
┌▼▼─▼▼┐ ││││ │ │ │ │
│ 2:1 │ SEL ││││ │ │ │ │
Stage 0: │MUXes│◄──────┘│││ │ │ │ │
│ CS │ │││ │ │ │ │
└┬───┬┘ │││ │ │ │ │
│C4 │S3 │││ │ │ │ │
│┌──┘ │││ │ │ │ │
││ ┌──────────┘││ │ │ │ │
││ │┌──────────┘│ │ │ │ │
││ ││ ┌───┼───┼───────────┤ │ │
┌▼▼─▼▼┐ │ ┌▼───▼┐ │ │ │
│ 2:1 │ SEL│ │ 2:1 │ SEL │ │ │
Stage 1: │MUXes│◄─────┘ │MUXes│◄─────────┘ │ │
│ CS │ │ S │ │ │
└┬───┬┘ └────┬┘ │ │
│C4 │ │ │ │
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
Cout S3 S2 S1 S0
</code></pre>
<p>Description of the <strong>init</strong> method.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>a</code></strong> :&ensp;<code>Bus</code></dt>
<dd>First input bus.</dd>
<dt><strong><code>b</code></strong> :&ensp;<code>Bus</code></dt>
<dd>Second input bus.</dd>
<dt><strong><code>prefix</code></strong> :&ensp;<code>str</code>, optional</dt>
<dd>Prefix name of unsigned cosa. Defaults to "".</dd>
<dt><strong><code>name</code></strong> :&ensp;<code>str</code>, optional</dt>
<dd>Name of unsigned cosa. Defaults to "u_cosa".</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class UnsignedConditionalSumAdder(GeneralCircuit):
&#34;&#34;&#34;Class representing unsigned conditional sum adder.
Conditional sum adder performs carry-select addition starting with
groups of 1 bit and recursively doubling to N/2 bits.
The individual input bit pairs are first added in a carry-select fashion (cin of 0 and 1) with block size of 1.
Then in the subsequent two rows multiplexer pairs are used to properly select the sum and carry-out
of the upper bit of each block of size 2 (higher bit of the previous 2-bits from the previous level).
The next two rows follow the principle for blocks of size 4 and so on.
The conditional sum adder shares the same structural characteristics as Sklansky tree adder.
Because of using many multiplexers, the number of gates is significant when compared to other architectures.
Another way on how to look at (and determine the number of) the multiplexers in the subsequent stages
can be done by converting the input bit index (counting from 0) into its binary form. Each bit position with value 1
signifies the stage position that contains multiplexers
(which ones and how many of them depends on other input bit index characteristics deducible from the code below).
```
B3A3 B2A2 B1A1 B0A0
││ ││ ││ ││
C4┌▼▼┐ C3┌▼▼┐ C2┌▼▼┐ C1┌▼▼┐
┌┤FA│◄─0 ┌──┤FA│◄─0 ┌┤FA│◄─0 ┌──┤FA│◄─Cin
│└┬─┘ │ └┬─┘ │└┬─┘ │ └┬─┘
│ │S3 │ │S2 │ │S1 │ │
│ └───────┐ │ └───────┐ │ └───────┐ │ │
└────────┐│ │ │ └────────┐│ │ │
B3A3 ││ │ B2A2 │ B1A1 ││ │ │
││ ││ │ ││ │ ││ ││ │ │
C4┌▼▼┐ ││ │C3┌▼▼┐ │ C2┌▼▼┐ ││ │ │
┌┤FA│◄─1 ││ │┌─┤FA│◄─1 │ ┌┤FA│◄─1 ││ │ │
│└┬─┘ ││ ││ └┬─┘ │ │└┬─┘ ││ │ │
│ │S3 ││ ││ │S2 │ │ │S1 ││ │ │
┌┼─┴┐ ┌───┤│ ││ │ │ │ └┐ ┌───┘│ │ │
│├─┐│ │┌──┼┤ ││ │ ┌───┘ └─┐│ │┌───┘ │ │
││ ││ ││ ││ ││ │ │ ││ ││ │ │
││┌▼▼─▼▼┐ ││ ││ │ │ ┌▼▼─▼▼┐ │ │
│││ 2:1 │ ││SEL││ │ │ │ 2:1 │ SEL│ │
Stage 0: │││MUXes│◄┼┼───┘│ │ │ │MUXes│◄─────┘ │
│││ CS │ ││ │ │ │ │ CS │ │
││└┬───┬┘ ││ │ │ │ └┬───┬┘ │
││ │C4 │S3││ │ │ │ │C2 │ │
││ └───┼──┼┼────┼┐ │ │ │ │ │
││ └──┼┼────┼┼┐│ │ │ │ │
└┼──┐ ┌───┘│ ││││ │ │ │ │
└─┐│ │┌───┘ ││││ │ │ │ │
││ ││ ││││ │ │ │ │
┌▼▼─▼▼┐ ││││ │ │ │ │
│ 2:1 │ SEL ││││ │ │ │ │
Stage 0: │MUXes│◄──────┘│││ │ │ │ │
│ CS │ │││ │ │ │ │
└┬───┬┘ │││ │ │ │ │
│C4 │S3 │││ │ │ │ │
│┌──┘ │││ │ │ │ │
││ ┌──────────┘││ │ │ │ │
││ │┌──────────┘│ │ │ │ │
││ ││ ┌───┼───┼───────────┤ │ │
┌▼▼─▼▼┐ │ ┌▼───▼┐ │ │ │
│ 2:1 │ SEL│ │ 2:1 │ SEL │ │ │
Stage 1: │MUXes│◄─────┘ │MUXes│◄─────────┘ │ │
│ CS │ │ S │ │ │
└┬───┬┘ └────┬┘ │ │
│C4 │ │ │ │
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
Cout S3 S2 S1 S0
```
Description of the __init__ method.
Args:
a (Bus): First input bus.
b (Bus): Second input bus.
prefix (str, optional): Prefix name of unsigned cosa. Defaults to &#34;&#34;.
name (str, optional): Name of unsigned cosa. Defaults to &#34;u_cosa&#34;.
&#34;&#34;&#34;
def __init__(self, a: Bus, b: Bus, prefix: str = &#34;&#34;, name: str = &#34;u_cosa&#34;, **kwargs):
self.N = max(a.N, b.N)
super().__init__(inputs=[a, b], prefix=prefix, name=name, out_N=self.N+1, **kwargs)
# Bus sign extension in case buses have different lengths
self.a.bus_extend(N=self.N, prefix=a.prefix)
self.b.bus_extend(N=self.N, prefix=b.prefix)
cin = ConstantWireValue0()
# Lists of lists containing all sum/carry wires
self.sum_sig = [([], []) for i in range(self.N)]
self.carry_sig = [([], []) for i in range(self.N+1)] # +1 because of cin
self.carry_sig[0][0].append(cin)
for i_wire in range(self.N):
if i_wire == 0:
self.add_component(FullAdder(a=self.a.get_wire(i_wire), b=self.b.get_wire(i_wire), c=cin, prefix=self.prefix+&#34;_fa&#34;+str(self.get_instance_num(cls=FullAdder))))
self.sum_sig[i_wire][0].append(self.get_previous_component().get_sum_wire())
self.carry_sig[i_wire+1][0].append(self.get_previous_component().get_carry_wire())
self.out.connect(i_wire, self.get_previous_component().get_sum_wire())
else:
# Create FA with cin set to ConstantValue0 (and ConstantValue1 respectively) and save the generated sum and carry wires to the appropriate positions within the sum_sig and carry_sig lists to allow easier access when doing interconnections between muxes
self.add_component(FullAdder(a=self.a.get_wire(i_wire), b=self.b.get_wire(i_wire), c=ConstantWireValue0(), prefix=self.prefix+&#34;_fa&#34;+str(self.get_instance_num(cls=FullAdder))))
self.sum_sig[i_wire][0].append(self.get_previous_component().get_sum_wire())
self.carry_sig[i_wire+1][0].append(self.get_previous_component().get_carry_wire())
self.add_component(FullAdder(a=self.a.get_wire(i_wire), b=self.b.get_wire(i_wire), c=ConstantWireValue1(), prefix=self.prefix+&#34;_fa&#34;+str(self.get_instance_num(cls=FullAdder))))
self.sum_sig[i_wire][1].append(self.get_previous_component().get_sum_wire())
self.carry_sig[i_wire+1][1].append(self.get_previous_component().get_carry_wire())
# Determine the number of 2:1 muxes stages to choose which of the fa sum and carry bit to propagate further
binary_form = bin(i_wire)[2:][::-1]
index_stages = len(binary_form)
prev_stage_int_value = 0
# Create approprite structure of muxes and interconnect wires according to the bit index and stage
for stage, value in enumerate(binary_form):
if value == &#39;1&#39;:
# Both sum and carry muxes in stages
if i_wire % 2 != 0 or i_wire == self.N-1: # Odd-numbered bit indexes
if stage == index_stages-1 and (math.log(i_wire+1, 2).is_integer() or i_wire == self.N-1): # Stage with only one pair of sum and carry multiplexers
# Sum
self.add_component(TwoOneMultiplexer(a=self.sum_sig[i_wire][0][-1], b=self.sum_sig[i_wire][1][-1], c=self.carry_sig[i_wire-prev_stage_int_value][0][-1], prefix=self.prefix+&#34;_mux2to1_&#34;+str(self.get_instance_num(cls=TwoOneMultiplexer))))
self.sum_sig[i_wire][0].append(self.get_previous_component().out.get_wire())
# Carry
self.add_component(TwoOneMultiplexer(a=self.carry_sig[i_wire+1][0][-1], b=self.carry_sig[i_wire+1][1][-1], c=self.carry_sig[i_wire-prev_stage_int_value][0][-1], prefix=self.prefix+&#34;_mux2to1_&#34;+str(self.get_instance_num(cls=TwoOneMultiplexer))))
self.carry_sig[i_wire+1][0].append(self.get_previous_component().out.get_wire())
self.out.connect(i_wire, self.sum_sig[i_wire][0][-1])
elif stage == index_stages-1: # Stage with only one sum multiplexer
self.add_component(TwoOneMultiplexer(a=self.sum_sig[i_wire][0][-1], b=self.sum_sig[i_wire][1][-1], c=self.carry_sig[i_wire-prev_stage_int_value][0][-1], prefix=self.prefix+&#34;_mux2to1_&#34;+str(self.get_instance_num(cls=TwoOneMultiplexer))))
self.sum_sig[i_wire][0].append(self.get_previous_component().out.get_wire())
self.out.connect(i_wire, self.sum_sig[i_wire][0][-1])
else: # Stage with two pairs of sum and carry multiplexers
# Sum
self.add_component(TwoOneMultiplexer(a=self.sum_sig[i_wire][0][-1], b=self.sum_sig[i_wire][1][-1], c=self.carry_sig[i_wire-prev_stage_int_value][0][-1], prefix=self.prefix+&#34;_mux2to1_&#34;+str(self.get_instance_num(cls=TwoOneMultiplexer))))
self.add_component(TwoOneMultiplexer(a=self.sum_sig[i_wire][0][-1], b=self.sum_sig[i_wire][1][-1], c=self.carry_sig[i_wire-prev_stage_int_value][1][-1], prefix=self.prefix+&#34;_mux2to1_&#34;+str(self.get_instance_num(cls=TwoOneMultiplexer))))
self.sum_sig[i_wire][0].append(self.get_previous_component(2).out.get_wire())
self.sum_sig[i_wire][1].append(self.get_previous_component().out.get_wire())
# Carry
self.add_component(TwoOneMultiplexer(a=self.carry_sig[i_wire+1][0][-1], b=self.carry_sig[i_wire+1][1][-1], c=self.carry_sig[i_wire-prev_stage_int_value][0][-1], prefix=self.prefix+&#34;_mux2to1_&#34;+str(self.get_instance_num(cls=TwoOneMultiplexer))))
self.add_component(TwoOneMultiplexer(a=self.carry_sig[i_wire+1][0][-1], b=self.carry_sig[i_wire+1][1][-1], c=self.carry_sig[i_wire-prev_stage_int_value][1][-1], prefix=self.prefix+&#34;_mux2to1_&#34;+str(self.get_instance_num(cls=TwoOneMultiplexer))))
self.carry_sig[i_wire+1][0].append(self.get_previous_component(2).out.get_wire())
self.carry_sig[i_wire+1][1].append(self.get_previous_component().out.get_wire())
# Only sum muxes in all stages
else: # Even-numbered bit indexes
if stage == index_stages-1: # Stage with only one sum multiplexer
self.add_component(TwoOneMultiplexer(a=self.sum_sig[i_wire][0][-1], b=self.sum_sig[i_wire][1][-1], c=self.carry_sig[i_wire-prev_stage_int_value][0][-1], prefix=self.prefix+&#34;_mux2to1_&#34;+str(self.get_instance_num(cls=TwoOneMultiplexer))))
self.sum_sig[i_wire][0].append(self.get_previous_component().out.get_wire())
self.out.connect(i_wire, self.sum_sig[i_wire][0][-1])
else: # Stage with two sum multiplexers
self.add_component(TwoOneMultiplexer(a=self.sum_sig[i_wire][0][-1], b=self.sum_sig[i_wire][1][-1], c=self.carry_sig[i_wire-prev_stage_int_value][0][stage], prefix=self.prefix+&#34;_mux2to1_&#34;+str(self.get_instance_num(cls=TwoOneMultiplexer))))
self.sum_sig[i_wire][0].append(self.get_previous_component().out.get_wire())
self.add_component(TwoOneMultiplexer(a=self.sum_sig[i_wire][0][-1], b=self.sum_sig[i_wire][1][-1], c=self.carry_sig[i_wire-prev_stage_int_value][1][stage], prefix=self.prefix+&#34;_mux2to1_&#34;+str(self.get_instance_num(cls=TwoOneMultiplexer))))
self.sum_sig[i_wire][1].append(self.get_previous_component().out.get_wire())
prev_stage_int_value += 2**stage
if i_wire == self.N-1:
self.out.connect(self.N, self.carry_sig[i_wire+1][0][-1])</code></pre>
</details>
<h3>Ancestors</h3>
<ul class="hlist">
<li><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit">GeneralCircuit</a></li>
</ul>
<h3>Subclasses</h3>
<ul class="hlist">
<li><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.SignedConditionalSumAdder" href="#ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.SignedConditionalSumAdder">SignedConditionalSumAdder</a></li>
</ul>
<h3>Inherited members</h3>
<ul class="hlist">
<li><code><b><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit">GeneralCircuit</a></b></code>:
<ul class="hlist">
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.add_component" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.add_component">add_component</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_blif_code_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_blif_code_flat">get_blif_code_flat</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_blif_code_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_blif_code_hier">get_blif_code_hier</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_c_code_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_c_code_flat">get_c_code_flat</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_c_code_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_c_code_hier">get_c_code_hier</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_cgp_code_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_cgp_code_flat">get_cgp_code_flat</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_blif" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_blif">get_circuit_blif</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_c" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_c">get_circuit_c</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_def" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_def">get_circuit_def</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_gates" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_gates">get_circuit_gates</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_v" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_v">get_circuit_v</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_wire_index" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_wire_index">get_circuit_wire_index</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_wires" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_circuit_wires">get_circuit_wires</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_component_types" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_component_types">get_component_types</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declaration_blif" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declaration_blif">get_declaration_blif</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declaration_c_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declaration_c_flat">get_declaration_c_flat</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declaration_c_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declaration_c_hier">get_declaration_c_hier</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declaration_v_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declaration_v_flat">get_declaration_v_flat</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declaration_v_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declaration_v_hier">get_declaration_v_hier</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declarations_c_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declarations_c_hier">get_declarations_c_hier</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declarations_v_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_declarations_v_hier">get_declarations_v_hier</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_blif_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_blif_flat">get_function_blif_flat</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_block_blif" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_block_blif">get_function_block_blif</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_block_c" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_block_c">get_function_block_c</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_block_v" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_block_v">get_function_block_v</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_blocks_blif" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_blocks_blif">get_function_blocks_blif</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_blocks_c" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_blocks_c">get_function_blocks_c</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_blocks_v" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_blocks_v">get_function_blocks_v</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_blif" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_blif">get_function_out_blif</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_c_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_c_flat">get_function_out_c_flat</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_c_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_c_hier">get_function_out_c_hier</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_python_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_python_flat">get_function_out_python_flat</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_v_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_v_flat">get_function_out_v_flat</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_v_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_function_out_v_hier">get_function_out_v_hier</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_hier_subcomponent_def" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_hier_subcomponent_def">get_hier_subcomponent_def</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_includes_c" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_includes_c">get_includes_c</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_init_c_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_init_c_flat">get_init_c_flat</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_init_c_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_init_c_hier">get_init_c_hier</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_init_python_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_init_python_flat">get_init_python_flat</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_init_v_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_init_v_flat">get_init_v_flat</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_init_v_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_init_v_hier">get_init_v_hier</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_instance_num" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_instance_num">get_instance_num</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_invocation_blif_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_invocation_blif_hier">get_invocation_blif_hier</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_invocations_blif_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_invocations_blif_hier">get_invocations_blif_hier</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_multi_bit_components" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_multi_bit_components">get_multi_bit_components</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_one_bit_components" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_one_bit_components">get_one_bit_components</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_out_invocation_c" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_out_invocation_c">get_out_invocation_c</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_out_invocation_v" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_out_invocation_v">get_out_invocation_v</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_outputs_cgp" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_outputs_cgp">get_outputs_cgp</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_parameters_cgp" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_parameters_cgp">get_parameters_cgp</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_previous_component" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_previous_component">get_previous_component</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_prototype_blif" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_prototype_blif">get_prototype_blif</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_prototype_c" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_prototype_c">get_prototype_c</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_prototype_python" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_prototype_python">get_prototype_python</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_prototype_v" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_prototype_v">get_prototype_v</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_python_code_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_python_code_flat">get_python_code_flat</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_triplets_cgp" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_triplets_cgp">get_triplets_cgp</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_unique_types" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_unique_types">get_unique_types</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_v_code_flat" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_v_code_flat">get_v_code_flat</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_v_code_hier" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.get_v_code_hier">get_v_code_hier</a></code></li>
<li><code><a title="ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.save_wire_id" href="../../core/arithmetic_circuits/general_circuit.html#ariths_gen.core.arithmetic_circuits.general_circuit.GeneralCircuit.save_wire_id">save_wire_id</a></code></li>
</ul>
</li>
</ul>
</dd>
</dl>
</section>
</article>
<nav id="sidebar">
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3>Super-module</h3>
<ul>
<li><code><a title="ariths_gen.multi_bit_circuits.adders" href="index.html">ariths_gen.multi_bit_circuits.adders</a></code></li>
</ul>
</li>
<li><h3><a href="#header-classes">Classes</a></h3>
<ul>
<li>
<h4><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.SignedConditionalSumAdder" href="#ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.SignedConditionalSumAdder">SignedConditionalSumAdder</a></code></h4>
</li>
<li>
<h4><code><a title="ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder" href="#ariths_gen.multi_bit_circuits.adders.conditional_sum_adder.UnsignedConditionalSumAdder">UnsignedConditionalSumAdder</a></code></h4>
</li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.11.4</a>.</p>
</footer>
</body>
</html>