1313 lines
66 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="pdoc 0.9.2" />
<title>ariths_gen.wire_components.wires API documentation</title>
<meta name="description" content="" />
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;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:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 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 .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#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-weight:bold;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 .5em;margin-bottom:1em}.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}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.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/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
</head>
<body>
<main>
<article id="content">
<header>
<h1 class="title">Module <code>ariths_gen.wire_components.wires</code></h1>
</header>
<section id="section-intro">
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class Wire():
&#34;&#34;&#34;Class representing basic wire used to interconnect components.
Description of the __init__ method.
Args:
name (str): Name of the wire.
prefix (str, optional): Prefix of the wire. Defaultly the same as its name. Defaults to &#34;&#34;.
value (int, optional): Value the wire carries (0,1). Defaults to 0.
index (int, optional): Index position of wire (mainly used for indexing within a bus). Defaults to 0.
parent_bus (object, optional): Bus object of which a Wire is a part of (used mainly for proper generation of wire names). Defaults to None.
&#34;&#34;&#34;
def __init__(self, name: str, prefix: str = &#34;&#34;, value: int = 0, index: int = 0, parent_bus: object = None):
self.name = name
self.value = value
self.index = index
self.prefix = name if prefix == &#34;&#34; else prefix
self.parent_bus = parent_bus
@staticmethod
def is_const():
&#34;&#34;&#34;Information whether wire carries constant value.
Returns:
bool: False, because basic wire doesn&#39;t represent a wire with constant value.
&#34;&#34;&#34;
return False
&#34;&#34;&#34; C CODE GENERATION &#34;&#34;&#34;
def get_declaration_c(self):
&#34;&#34;&#34;Wire declaration in C code.
Returns:
str: Empty string if C code wire is carrying constant value (constant value is used in situ) or returns C code for declaration and initialization of wire&#39;s name.
&#34;&#34;&#34;
if self.is_const():
return &#34;&#34;
else:
return f&#34; uint8_t {self.name} = {self.value};\n&#34;
def get_wire_value_c_flat(self):
&#34;&#34;&#34;Accesses desired bit value from wire represented in C code variable used for flat generation.
Returns:
str: C code bitwise shift to get desired bit value from this wire or wire variable&#39;s constant bit value 0/1.
&#34;&#34;&#34;
if self.is_const():
return f&#34;({self.c_const})&#34;
else:
# If wire is part of an input bus (where wire names are concatenated from bus prefix and their index position inside the bus in square brackets)
# then the wire value is obtained from bitwise shifting the required wire from the parent bus (&#39;parent_bus.prefix&#39; is the same value as &#39;self.prefix&#39;)
if self.name.endswith(&#34;[&#34;+str(self.index)+&#34;]&#34;) and self.parent_bus is not None:
return f&#34;(({self.prefix} &gt;&gt; {self.index}) &amp; 0x01)&#34;
else:
return f&#34;(({self.name} &gt;&gt; 0) &amp; 0x01)&#34;
def get_wire_value_c_hier(self):
&#34;&#34;&#34;Accesses desired bit value from wire represented in C code variable used for hierarchical generation.
Returns:
str: C code bitwise shift to get desired bit value position from this wire or wire variable&#39;s constant bit value 0/1.
&#34;&#34;&#34;
if self.is_const():
return f&#34;({self.c_const})&#34;
else:
return f&#34;(({self.prefix} &gt;&gt; {self.index}) &amp; 0x01)&#34;
def return_wire_value_c_flat(self, offset: int = 0):
&#34;&#34;&#34;Retrieves desired bit value from wire represented in C code variable and bitwise shifts it to desired position for storing it within a bus for flat generation.
Args:
offset (int, optional): Used to shift wire value in order to be stored in proper location inside a bus. Defaults to 0.
Returns:
str: C code bitwise shift for storing (constant/variable) wire value at desired offset position.
&#34;&#34;&#34;
if self.is_const():
return f&#34;({self.c_const}) &lt;&lt; {offset};\n&#34;
else:
return f&#34;(({self.name} &gt;&gt; 0) &amp; 0x01) &lt;&lt; {offset};\n&#34;
def return_wire_value_c_hier(self, offset: int = 0):
&#34;&#34;&#34;Retrieves desired bit value from wire represented in C code variable and bitwise shifts it to desired position for storing it within a bus for hierarchical generation.
Args:
offset (int, optional): Used to shift wire value in order to be stored in proper location inside a bus. Defaults to 0.
Returns:
str: C code bitwise shift for storing (constant/variable) wire value at desired offset position.
&#34;&#34;&#34;
if self.is_const():
return f&#34;({self.c_const}) &lt;&lt; {offset};\n&#34;
else:
return f&#34;(({self.prefix} &gt;&gt; {self.index}) &amp; 0x01) &lt;&lt; {offset};\n&#34;
&#34;&#34;&#34; VERILOG CODE GENERATION &#34;&#34;&#34;
def get_declaration_v_flat(self):
&#34;&#34;&#34;Wire declaration for flat Verilog code.
Returns:
str: Empty string if Verilog code wire is carrying constant value (constant value is used in situ) or returns Verilog code for declaration and initialization of wire&#39;s name.
&#34;&#34;&#34;
if self.is_const():
return &#34;&#34;
else:
return f&#34; wire {self.name};\n&#34;
def get_declaration_v_hier(self):
&#34;&#34;&#34;Wire declaration for hierarchical Verilog code.
Returns:
str: Empty string if Verilog code wire is carrying constant value (constant value is used in situ) or returns Verilog code for declaration and initialization of wire&#39;s name.
&#34;&#34;&#34;
if self.is_const():
return &#34;&#34;
else:
return f&#34; wire [0:0] {self.name};\n&#34;
def get_wire_value_v_flat(self):
&#34;&#34;&#34;Accesses bit value from wire represented in Verilog code variable used for flat generation.
Returns:
str: Verilog code to get bit value from this wire or to get constant wire&#39;s bit value 0/1.
&#34;&#34;&#34;
if self.is_const():
return self.v_const
else:
return self.name
def get_wire_value_v_hier(self):
&#34;&#34;&#34;Accesses bit value from wire represented in Verilog code variable used for hierarchical generation.
Returns:
str: Verilog code to get bit value from this wire or to get constant wire&#39;s bit value 0/1.
&#34;&#34;&#34;
if self.is_const():
return self.v_const
else:
return f&#34;{self.prefix}[{self.index}]&#34;
def return_wire_value_v_flat(self):
&#34;&#34;&#34;Retrieves bit value from wire represented in Verilog code variable for storing it within a bus for flat generation.
Returns:
str: Verilog code for retrieving (constant/variable) wire value (and assign it at desired bus offset position).
&#34;&#34;&#34;
if self.is_const():
return f&#34;{self.v_const};\n&#34;
else:
return f&#34;{self.name};\n&#34;
def return_wire_value_v_hier(self):
&#34;&#34;&#34;Retrieves bit value from bus&#39;s wires and stores them in bus&#39;s corresponding Verilog variable at proper offset bit position in the bus for hierarchical generation.
Returns:
str: Verilog code for retrieving (constant/variable) wire value used for assigning it into bus represented in Verilog code variable.
&#34;&#34;&#34;
if self.is_const():
return f&#34;{self.v_const};\n&#34;
else:
return f&#34;{self.prefix}[{self.index}];\n&#34;
&#34;&#34;&#34; BLIF CODE GENERATION &#34;&#34;&#34;
def get_declaration_blif(self, prefix: str = &#34;&#34;, offset: int = 0, array: bool = False):
&#34;&#34;&#34;Wire declaration in Blif code.
Declares basic wire name if wire is not part of a bus
or declares wire by an offset of its position within the bus.
Args:
prefix (str, optional): Bus prefix of which this wire is a part off. Defaults to &#34;&#34;.
offset (int, optional): Offset wire location within a bus. Defaults to 0.
array (bool, optional): Tells whether a basic wire or a wire from within a bus is to be declared. Defaults to False.
Returns:
str: Blif code for declaration of a wire.
&#34;&#34;&#34;
if array is True:
return f&#34;{prefix}[{offset}]&#34;
else:
return f&#34;{self.name}&#34;
def get_assign_blif(self, prefix: str, output: bool = False):
&#34;&#34;&#34;Assignment of wire value to another desired wire in Blif code.
This wire&#39;s value is either assigned to desired output bus wire (represented by `prefix` name) when `output`=True.
Otherwise the wire value at desired bus position (represented by `prefix` name) is assigned to this wire when `output`=False.
Args:
prefix (str): Name of the source/destination bus wire to be assigned from/to.
output (bool, optional): Whether `prefix` represents the destination or the source wire in the assignment. Defaultly it symbolizes the source. Defaults to False.
Returns:
str: Blif code for assignment of one wire to another.
&#34;&#34;&#34;
if output is True:
if self.is_const():
return f&#34;.names {self.blif_const} {prefix}\n&#34; + \
f&#34;1 1\n&#34;
else:
return f&#34;.names {self.name} {prefix}\n&#34; + \
f&#34;1 1\n&#34;
else:
if self.is_const():
return &#34;\n&#34;
else:
return f&#34;.names {prefix} {self.name}\n&#34; + \
f&#34;1 1\n&#34;
def get_wire_value_blif(self):
&#34;&#34;&#34;Accesses bit value from wire represented in Blif code.
Used for assignment of specific one bit circuit/gate values to their respective parameters
in hierarchical Blif subcomponents generation.
Returns:
str: Blif code to get bit value from this wire or to get constant wire&#39;s bit value 0/1.
&#34;&#34;&#34;
if self.is_const():
return self.blif_const
elif self.parent_bus is not None and self.parent_bus.N &gt; 1:
return self.name
else:
return self.prefix
# Wires with constant values #
class ConstantWireValue0(Wire):
&#34;&#34;&#34;Class representing wire carrying constant value 0 used to interconnect components.
Description of the __init__ method.
Method fills in desired constant wire&#39;s attributes regarding its values for individual representations.
Args:
name (str, optional): Custom constant wire name and prefix (used for generation of circuits that use constants as inputs). Defaults to &#34;&#34;.
&#34;&#34;&#34;
def __init__(self, name: str = &#34;&#34;):
self.name = &#34;constant_value_0&#34; if name == &#34;&#34; else name
self.prefix = &#34;constant_value_0&#34; if name == &#34;&#34; else name
self.index = 0
self.value = 0
self.parent_bus = None
self.c_const = &#34;0x00&#34;
self.v_const = &#34;1&#39;b0&#34;
self.blif_const = &#34;gnd&#34;
# Constant wire id for CGP generation
self.cgp_const = 0
@staticmethod
def is_const():
&#34;&#34;&#34;Information whether wire carries constant value.
Returns:
bool: True, because constant wire carries a constant value 0.
&#34;&#34;&#34;
return True
class ConstantWireValue1(Wire):
&#34;&#34;&#34;Class representing wire carrying constant value 1 used to interconnect components.
Description of the __init__ method.
Method fills in desired constant wire&#39;s attributes regarding its values for individual representations.
Args:
name (str, optional): Custom constant wire name and prefix (used for generation of circuits that use constants as inputs). Defaults to &#34;&#34;.
&#34;&#34;&#34;
def __init__(self, name: str = &#34;&#34;):
self.name = &#34;constant_value_1&#34; if name == &#34;&#34; else name
self.prefix = &#34;constant_value_1&#34; if name == &#34;&#34; else name
self.index = 0
self.value = 1
self.parent_bus = None
self.c_const = &#34;0x01&#34;
self.v_const = &#34;1&#39;b1&#34;
self.blif_const = &#34;vdd&#34;
# Constant wire id for CGP generation
self.cgp_const = 1
@staticmethod
def is_const():
&#34;&#34;&#34;Information whether wire carries constant value.
Returns:
bool: True, because constant wire carries a constant value 1.
&#34;&#34;&#34;
return True</code></pre>
</details>
</section>
<section>
</section>
<section>
</section>
<section>
</section>
<section>
<h2 class="section-title" id="header-classes">Classes</h2>
<dl>
<dt id="ariths_gen.wire_components.wires.ConstantWireValue0"><code class="flex name class">
<span>class <span class="ident">ConstantWireValue0</span></span>
<span>(</span><span>name: str = '')</span>
</code></dt>
<dd>
<div class="desc"><p>Class representing wire carrying constant value 0 used to interconnect components.</p>
<p>Description of the <strong>init</strong> method.</p>
<p>Method fills in desired constant wire's attributes regarding its values for individual representations.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>name</code></strong> :&ensp;<code>str</code>, optional</dt>
<dd>Custom constant wire name and prefix (used for generation of circuits that use constants as inputs). Defaults to "".</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class ConstantWireValue0(Wire):
&#34;&#34;&#34;Class representing wire carrying constant value 0 used to interconnect components.
Description of the __init__ method.
Method fills in desired constant wire&#39;s attributes regarding its values for individual representations.
Args:
name (str, optional): Custom constant wire name and prefix (used for generation of circuits that use constants as inputs). Defaults to &#34;&#34;.
&#34;&#34;&#34;
def __init__(self, name: str = &#34;&#34;):
self.name = &#34;constant_value_0&#34; if name == &#34;&#34; else name
self.prefix = &#34;constant_value_0&#34; if name == &#34;&#34; else name
self.index = 0
self.value = 0
self.parent_bus = None
self.c_const = &#34;0x00&#34;
self.v_const = &#34;1&#39;b0&#34;
self.blif_const = &#34;gnd&#34;
# Constant wire id for CGP generation
self.cgp_const = 0
@staticmethod
def is_const():
&#34;&#34;&#34;Information whether wire carries constant value.
Returns:
bool: True, because constant wire carries a constant value 0.
&#34;&#34;&#34;
return True</code></pre>
</details>
<h3>Ancestors</h3>
<ul class="hlist">
<li><a title="ariths_gen.wire_components.wires.Wire" href="#ariths_gen.wire_components.wires.Wire">Wire</a></li>
</ul>
<h3>Static methods</h3>
<dl>
<dt id="ariths_gen.wire_components.wires.ConstantWireValue0.is_const"><code class="name flex">
<span>def <span class="ident">is_const</span></span>(<span>)</span>
</code></dt>
<dd>
<div class="desc"><p>Information whether wire carries constant value.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>bool</code></dt>
<dd>True, because constant wire carries a constant value 0.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def is_const():
&#34;&#34;&#34;Information whether wire carries constant value.
Returns:
bool: True, because constant wire carries a constant value 0.
&#34;&#34;&#34;
return True</code></pre>
</details>
</dd>
</dl>
<h3>Inherited members</h3>
<ul class="hlist">
<li><code><b><a title="ariths_gen.wire_components.wires.Wire" href="#ariths_gen.wire_components.wires.Wire">Wire</a></b></code>:
<ul class="hlist">
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_assign_blif" href="#ariths_gen.wire_components.wires.Wire.get_assign_blif">get_assign_blif</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_declaration_blif" href="#ariths_gen.wire_components.wires.Wire.get_declaration_blif">get_declaration_blif</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_declaration_c" href="#ariths_gen.wire_components.wires.Wire.get_declaration_c">get_declaration_c</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_declaration_v_flat" href="#ariths_gen.wire_components.wires.Wire.get_declaration_v_flat">get_declaration_v_flat</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_declaration_v_hier" href="#ariths_gen.wire_components.wires.Wire.get_declaration_v_hier">get_declaration_v_hier</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_wire_value_blif" href="#ariths_gen.wire_components.wires.Wire.get_wire_value_blif">get_wire_value_blif</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_wire_value_c_flat" href="#ariths_gen.wire_components.wires.Wire.get_wire_value_c_flat">get_wire_value_c_flat</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_wire_value_c_hier" href="#ariths_gen.wire_components.wires.Wire.get_wire_value_c_hier">get_wire_value_c_hier</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_wire_value_v_flat" href="#ariths_gen.wire_components.wires.Wire.get_wire_value_v_flat">get_wire_value_v_flat</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_wire_value_v_hier" href="#ariths_gen.wire_components.wires.Wire.get_wire_value_v_hier">get_wire_value_v_hier</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.return_wire_value_c_flat" href="#ariths_gen.wire_components.wires.Wire.return_wire_value_c_flat">return_wire_value_c_flat</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.return_wire_value_c_hier" href="#ariths_gen.wire_components.wires.Wire.return_wire_value_c_hier">return_wire_value_c_hier</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.return_wire_value_v_flat" href="#ariths_gen.wire_components.wires.Wire.return_wire_value_v_flat">return_wire_value_v_flat</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.return_wire_value_v_hier" href="#ariths_gen.wire_components.wires.Wire.return_wire_value_v_hier">return_wire_value_v_hier</a></code></li>
</ul>
</li>
</ul>
</dd>
<dt id="ariths_gen.wire_components.wires.ConstantWireValue1"><code class="flex name class">
<span>class <span class="ident">ConstantWireValue1</span></span>
<span>(</span><span>name: str = '')</span>
</code></dt>
<dd>
<div class="desc"><p>Class representing wire carrying constant value 1 used to interconnect components.</p>
<p>Description of the <strong>init</strong> method.</p>
<p>Method fills in desired constant wire's attributes regarding its values for individual representations.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>name</code></strong> :&ensp;<code>str</code>, optional</dt>
<dd>Custom constant wire name and prefix (used for generation of circuits that use constants as inputs). Defaults to "".</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class ConstantWireValue1(Wire):
&#34;&#34;&#34;Class representing wire carrying constant value 1 used to interconnect components.
Description of the __init__ method.
Method fills in desired constant wire&#39;s attributes regarding its values for individual representations.
Args:
name (str, optional): Custom constant wire name and prefix (used for generation of circuits that use constants as inputs). Defaults to &#34;&#34;.
&#34;&#34;&#34;
def __init__(self, name: str = &#34;&#34;):
self.name = &#34;constant_value_1&#34; if name == &#34;&#34; else name
self.prefix = &#34;constant_value_1&#34; if name == &#34;&#34; else name
self.index = 0
self.value = 1
self.parent_bus = None
self.c_const = &#34;0x01&#34;
self.v_const = &#34;1&#39;b1&#34;
self.blif_const = &#34;vdd&#34;
# Constant wire id for CGP generation
self.cgp_const = 1
@staticmethod
def is_const():
&#34;&#34;&#34;Information whether wire carries constant value.
Returns:
bool: True, because constant wire carries a constant value 1.
&#34;&#34;&#34;
return True</code></pre>
</details>
<h3>Ancestors</h3>
<ul class="hlist">
<li><a title="ariths_gen.wire_components.wires.Wire" href="#ariths_gen.wire_components.wires.Wire">Wire</a></li>
</ul>
<h3>Static methods</h3>
<dl>
<dt id="ariths_gen.wire_components.wires.ConstantWireValue1.is_const"><code class="name flex">
<span>def <span class="ident">is_const</span></span>(<span>)</span>
</code></dt>
<dd>
<div class="desc"><p>Information whether wire carries constant value.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>bool</code></dt>
<dd>True, because constant wire carries a constant value 1.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def is_const():
&#34;&#34;&#34;Information whether wire carries constant value.
Returns:
bool: True, because constant wire carries a constant value 1.
&#34;&#34;&#34;
return True</code></pre>
</details>
</dd>
</dl>
<h3>Inherited members</h3>
<ul class="hlist">
<li><code><b><a title="ariths_gen.wire_components.wires.Wire" href="#ariths_gen.wire_components.wires.Wire">Wire</a></b></code>:
<ul class="hlist">
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_assign_blif" href="#ariths_gen.wire_components.wires.Wire.get_assign_blif">get_assign_blif</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_declaration_blif" href="#ariths_gen.wire_components.wires.Wire.get_declaration_blif">get_declaration_blif</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_declaration_c" href="#ariths_gen.wire_components.wires.Wire.get_declaration_c">get_declaration_c</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_declaration_v_flat" href="#ariths_gen.wire_components.wires.Wire.get_declaration_v_flat">get_declaration_v_flat</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_declaration_v_hier" href="#ariths_gen.wire_components.wires.Wire.get_declaration_v_hier">get_declaration_v_hier</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_wire_value_blif" href="#ariths_gen.wire_components.wires.Wire.get_wire_value_blif">get_wire_value_blif</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_wire_value_c_flat" href="#ariths_gen.wire_components.wires.Wire.get_wire_value_c_flat">get_wire_value_c_flat</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_wire_value_c_hier" href="#ariths_gen.wire_components.wires.Wire.get_wire_value_c_hier">get_wire_value_c_hier</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_wire_value_v_flat" href="#ariths_gen.wire_components.wires.Wire.get_wire_value_v_flat">get_wire_value_v_flat</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_wire_value_v_hier" href="#ariths_gen.wire_components.wires.Wire.get_wire_value_v_hier">get_wire_value_v_hier</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.return_wire_value_c_flat" href="#ariths_gen.wire_components.wires.Wire.return_wire_value_c_flat">return_wire_value_c_flat</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.return_wire_value_c_hier" href="#ariths_gen.wire_components.wires.Wire.return_wire_value_c_hier">return_wire_value_c_hier</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.return_wire_value_v_flat" href="#ariths_gen.wire_components.wires.Wire.return_wire_value_v_flat">return_wire_value_v_flat</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.return_wire_value_v_hier" href="#ariths_gen.wire_components.wires.Wire.return_wire_value_v_hier">return_wire_value_v_hier</a></code></li>
</ul>
</li>
</ul>
</dd>
<dt id="ariths_gen.wire_components.wires.Wire"><code class="flex name class">
<span>class <span class="ident">Wire</span></span>
<span>(</span><span>name: str, prefix: str = '', value: int = 0, index: int = 0, parent_bus: object = None)</span>
</code></dt>
<dd>
<div class="desc"><p>Class representing basic wire used to interconnect components.</p>
<p>Description of the <strong>init</strong> method.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>name</code></strong> :&ensp;<code>str</code></dt>
<dd>Name of the wire.</dd>
<dt><strong><code>prefix</code></strong> :&ensp;<code>str</code>, optional</dt>
<dd>Prefix of the wire. Defaultly the same as its name. Defaults to "".</dd>
<dt><strong><code>value</code></strong> :&ensp;<code>int</code>, optional</dt>
<dd>Value the wire carries (0,1). Defaults to 0.</dd>
<dt><strong><code>index</code></strong> :&ensp;<code>int</code>, optional</dt>
<dd>Index position of wire (mainly used for indexing within a bus). Defaults to 0.</dd>
<dt><strong><code>parent_bus</code></strong> :&ensp;<code>object</code>, optional</dt>
<dd>Bus object of which a Wire is a part of (used mainly for proper generation of wire names). Defaults to None.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">class Wire():
&#34;&#34;&#34;Class representing basic wire used to interconnect components.
Description of the __init__ method.
Args:
name (str): Name of the wire.
prefix (str, optional): Prefix of the wire. Defaultly the same as its name. Defaults to &#34;&#34;.
value (int, optional): Value the wire carries (0,1). Defaults to 0.
index (int, optional): Index position of wire (mainly used for indexing within a bus). Defaults to 0.
parent_bus (object, optional): Bus object of which a Wire is a part of (used mainly for proper generation of wire names). Defaults to None.
&#34;&#34;&#34;
def __init__(self, name: str, prefix: str = &#34;&#34;, value: int = 0, index: int = 0, parent_bus: object = None):
self.name = name
self.value = value
self.index = index
self.prefix = name if prefix == &#34;&#34; else prefix
self.parent_bus = parent_bus
@staticmethod
def is_const():
&#34;&#34;&#34;Information whether wire carries constant value.
Returns:
bool: False, because basic wire doesn&#39;t represent a wire with constant value.
&#34;&#34;&#34;
return False
&#34;&#34;&#34; C CODE GENERATION &#34;&#34;&#34;
def get_declaration_c(self):
&#34;&#34;&#34;Wire declaration in C code.
Returns:
str: Empty string if C code wire is carrying constant value (constant value is used in situ) or returns C code for declaration and initialization of wire&#39;s name.
&#34;&#34;&#34;
if self.is_const():
return &#34;&#34;
else:
return f&#34; uint8_t {self.name} = {self.value};\n&#34;
def get_wire_value_c_flat(self):
&#34;&#34;&#34;Accesses desired bit value from wire represented in C code variable used for flat generation.
Returns:
str: C code bitwise shift to get desired bit value from this wire or wire variable&#39;s constant bit value 0/1.
&#34;&#34;&#34;
if self.is_const():
return f&#34;({self.c_const})&#34;
else:
# If wire is part of an input bus (where wire names are concatenated from bus prefix and their index position inside the bus in square brackets)
# then the wire value is obtained from bitwise shifting the required wire from the parent bus (&#39;parent_bus.prefix&#39; is the same value as &#39;self.prefix&#39;)
if self.name.endswith(&#34;[&#34;+str(self.index)+&#34;]&#34;) and self.parent_bus is not None:
return f&#34;(({self.prefix} &gt;&gt; {self.index}) &amp; 0x01)&#34;
else:
return f&#34;(({self.name} &gt;&gt; 0) &amp; 0x01)&#34;
def get_wire_value_c_hier(self):
&#34;&#34;&#34;Accesses desired bit value from wire represented in C code variable used for hierarchical generation.
Returns:
str: C code bitwise shift to get desired bit value position from this wire or wire variable&#39;s constant bit value 0/1.
&#34;&#34;&#34;
if self.is_const():
return f&#34;({self.c_const})&#34;
else:
return f&#34;(({self.prefix} &gt;&gt; {self.index}) &amp; 0x01)&#34;
def return_wire_value_c_flat(self, offset: int = 0):
&#34;&#34;&#34;Retrieves desired bit value from wire represented in C code variable and bitwise shifts it to desired position for storing it within a bus for flat generation.
Args:
offset (int, optional): Used to shift wire value in order to be stored in proper location inside a bus. Defaults to 0.
Returns:
str: C code bitwise shift for storing (constant/variable) wire value at desired offset position.
&#34;&#34;&#34;
if self.is_const():
return f&#34;({self.c_const}) &lt;&lt; {offset};\n&#34;
else:
return f&#34;(({self.name} &gt;&gt; 0) &amp; 0x01) &lt;&lt; {offset};\n&#34;
def return_wire_value_c_hier(self, offset: int = 0):
&#34;&#34;&#34;Retrieves desired bit value from wire represented in C code variable and bitwise shifts it to desired position for storing it within a bus for hierarchical generation.
Args:
offset (int, optional): Used to shift wire value in order to be stored in proper location inside a bus. Defaults to 0.
Returns:
str: C code bitwise shift for storing (constant/variable) wire value at desired offset position.
&#34;&#34;&#34;
if self.is_const():
return f&#34;({self.c_const}) &lt;&lt; {offset};\n&#34;
else:
return f&#34;(({self.prefix} &gt;&gt; {self.index}) &amp; 0x01) &lt;&lt; {offset};\n&#34;
&#34;&#34;&#34; VERILOG CODE GENERATION &#34;&#34;&#34;
def get_declaration_v_flat(self):
&#34;&#34;&#34;Wire declaration for flat Verilog code.
Returns:
str: Empty string if Verilog code wire is carrying constant value (constant value is used in situ) or returns Verilog code for declaration and initialization of wire&#39;s name.
&#34;&#34;&#34;
if self.is_const():
return &#34;&#34;
else:
return f&#34; wire {self.name};\n&#34;
def get_declaration_v_hier(self):
&#34;&#34;&#34;Wire declaration for hierarchical Verilog code.
Returns:
str: Empty string if Verilog code wire is carrying constant value (constant value is used in situ) or returns Verilog code for declaration and initialization of wire&#39;s name.
&#34;&#34;&#34;
if self.is_const():
return &#34;&#34;
else:
return f&#34; wire [0:0] {self.name};\n&#34;
def get_wire_value_v_flat(self):
&#34;&#34;&#34;Accesses bit value from wire represented in Verilog code variable used for flat generation.
Returns:
str: Verilog code to get bit value from this wire or to get constant wire&#39;s bit value 0/1.
&#34;&#34;&#34;
if self.is_const():
return self.v_const
else:
return self.name
def get_wire_value_v_hier(self):
&#34;&#34;&#34;Accesses bit value from wire represented in Verilog code variable used for hierarchical generation.
Returns:
str: Verilog code to get bit value from this wire or to get constant wire&#39;s bit value 0/1.
&#34;&#34;&#34;
if self.is_const():
return self.v_const
else:
return f&#34;{self.prefix}[{self.index}]&#34;
def return_wire_value_v_flat(self):
&#34;&#34;&#34;Retrieves bit value from wire represented in Verilog code variable for storing it within a bus for flat generation.
Returns:
str: Verilog code for retrieving (constant/variable) wire value (and assign it at desired bus offset position).
&#34;&#34;&#34;
if self.is_const():
return f&#34;{self.v_const};\n&#34;
else:
return f&#34;{self.name};\n&#34;
def return_wire_value_v_hier(self):
&#34;&#34;&#34;Retrieves bit value from bus&#39;s wires and stores them in bus&#39;s corresponding Verilog variable at proper offset bit position in the bus for hierarchical generation.
Returns:
str: Verilog code for retrieving (constant/variable) wire value used for assigning it into bus represented in Verilog code variable.
&#34;&#34;&#34;
if self.is_const():
return f&#34;{self.v_const};\n&#34;
else:
return f&#34;{self.prefix}[{self.index}];\n&#34;
&#34;&#34;&#34; BLIF CODE GENERATION &#34;&#34;&#34;
def get_declaration_blif(self, prefix: str = &#34;&#34;, offset: int = 0, array: bool = False):
&#34;&#34;&#34;Wire declaration in Blif code.
Declares basic wire name if wire is not part of a bus
or declares wire by an offset of its position within the bus.
Args:
prefix (str, optional): Bus prefix of which this wire is a part off. Defaults to &#34;&#34;.
offset (int, optional): Offset wire location within a bus. Defaults to 0.
array (bool, optional): Tells whether a basic wire or a wire from within a bus is to be declared. Defaults to False.
Returns:
str: Blif code for declaration of a wire.
&#34;&#34;&#34;
if array is True:
return f&#34;{prefix}[{offset}]&#34;
else:
return f&#34;{self.name}&#34;
def get_assign_blif(self, prefix: str, output: bool = False):
&#34;&#34;&#34;Assignment of wire value to another desired wire in Blif code.
This wire&#39;s value is either assigned to desired output bus wire (represented by `prefix` name) when `output`=True.
Otherwise the wire value at desired bus position (represented by `prefix` name) is assigned to this wire when `output`=False.
Args:
prefix (str): Name of the source/destination bus wire to be assigned from/to.
output (bool, optional): Whether `prefix` represents the destination or the source wire in the assignment. Defaultly it symbolizes the source. Defaults to False.
Returns:
str: Blif code for assignment of one wire to another.
&#34;&#34;&#34;
if output is True:
if self.is_const():
return f&#34;.names {self.blif_const} {prefix}\n&#34; + \
f&#34;1 1\n&#34;
else:
return f&#34;.names {self.name} {prefix}\n&#34; + \
f&#34;1 1\n&#34;
else:
if self.is_const():
return &#34;\n&#34;
else:
return f&#34;.names {prefix} {self.name}\n&#34; + \
f&#34;1 1\n&#34;
def get_wire_value_blif(self):
&#34;&#34;&#34;Accesses bit value from wire represented in Blif code.
Used for assignment of specific one bit circuit/gate values to their respective parameters
in hierarchical Blif subcomponents generation.
Returns:
str: Blif code to get bit value from this wire or to get constant wire&#39;s bit value 0/1.
&#34;&#34;&#34;
if self.is_const():
return self.blif_const
elif self.parent_bus is not None and self.parent_bus.N &gt; 1:
return self.name
else:
return self.prefix</code></pre>
</details>
<h3>Subclasses</h3>
<ul class="hlist">
<li><a title="ariths_gen.wire_components.wires.ConstantWireValue0" href="#ariths_gen.wire_components.wires.ConstantWireValue0">ConstantWireValue0</a></li>
<li><a title="ariths_gen.wire_components.wires.ConstantWireValue1" href="#ariths_gen.wire_components.wires.ConstantWireValue1">ConstantWireValue1</a></li>
</ul>
<h3>Static methods</h3>
<dl>
<dt id="ariths_gen.wire_components.wires.Wire.is_const"><code class="name flex">
<span>def <span class="ident">is_const</span></span>(<span>)</span>
</code></dt>
<dd>
<div class="desc"><p>Information whether wire carries constant value.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>bool</code></dt>
<dd>False, because basic wire doesn't represent a wire with constant value.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">@staticmethod
def is_const():
&#34;&#34;&#34;Information whether wire carries constant value.
Returns:
bool: False, because basic wire doesn&#39;t represent a wire with constant value.
&#34;&#34;&#34;
return False</code></pre>
</details>
</dd>
</dl>
<h3>Methods</h3>
<dl>
<dt id="ariths_gen.wire_components.wires.Wire.get_assign_blif"><code class="name flex">
<span>def <span class="ident">get_assign_blif</span></span>(<span>self, prefix: str, output: bool = False)</span>
</code></dt>
<dd>
<div class="desc"><p>Assignment of wire value to another desired wire in Blif code.</p>
<p>This wire's value is either assigned to desired output bus wire (represented by <code>prefix</code> name) when <code>output</code>=True.
Otherwise the wire value at desired bus position (represented by <code>prefix</code> name) is assigned to this wire when <code>output</code>=False.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>prefix</code></strong> :&ensp;<code>str</code></dt>
<dd>Name of the source/destination bus wire to be assigned from/to.</dd>
<dt><strong><code>output</code></strong> :&ensp;<code>bool</code>, optional</dt>
<dd>Whether <code>prefix</code> represents the destination or the source wire in the assignment. Defaultly it symbolizes the source. Defaults to False.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>Blif code for assignment of one wire to another.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def get_assign_blif(self, prefix: str, output: bool = False):
&#34;&#34;&#34;Assignment of wire value to another desired wire in Blif code.
This wire&#39;s value is either assigned to desired output bus wire (represented by `prefix` name) when `output`=True.
Otherwise the wire value at desired bus position (represented by `prefix` name) is assigned to this wire when `output`=False.
Args:
prefix (str): Name of the source/destination bus wire to be assigned from/to.
output (bool, optional): Whether `prefix` represents the destination or the source wire in the assignment. Defaultly it symbolizes the source. Defaults to False.
Returns:
str: Blif code for assignment of one wire to another.
&#34;&#34;&#34;
if output is True:
if self.is_const():
return f&#34;.names {self.blif_const} {prefix}\n&#34; + \
f&#34;1 1\n&#34;
else:
return f&#34;.names {self.name} {prefix}\n&#34; + \
f&#34;1 1\n&#34;
else:
if self.is_const():
return &#34;\n&#34;
else:
return f&#34;.names {prefix} {self.name}\n&#34; + \
f&#34;1 1\n&#34;</code></pre>
</details>
</dd>
<dt id="ariths_gen.wire_components.wires.Wire.get_declaration_blif"><code class="name flex">
<span>def <span class="ident">get_declaration_blif</span></span>(<span>self, prefix: str = '', offset: int = 0, array: bool = False)</span>
</code></dt>
<dd>
<div class="desc"><p>Wire declaration in Blif code.</p>
<p>Declares basic wire name if wire is not part of a bus
or declares wire by an offset of its position within the bus.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>prefix</code></strong> :&ensp;<code>str</code>, optional</dt>
<dd>Bus prefix of which this wire is a part off. Defaults to "".</dd>
<dt><strong><code>offset</code></strong> :&ensp;<code>int</code>, optional</dt>
<dd>Offset wire location within a bus. Defaults to 0.</dd>
<dt><strong><code>array</code></strong> :&ensp;<code>bool</code>, optional</dt>
<dd>Tells whether a basic wire or a wire from within a bus is to be declared. Defaults to False.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>Blif code for declaration of a wire.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def get_declaration_blif(self, prefix: str = &#34;&#34;, offset: int = 0, array: bool = False):
&#34;&#34;&#34;Wire declaration in Blif code.
Declares basic wire name if wire is not part of a bus
or declares wire by an offset of its position within the bus.
Args:
prefix (str, optional): Bus prefix of which this wire is a part off. Defaults to &#34;&#34;.
offset (int, optional): Offset wire location within a bus. Defaults to 0.
array (bool, optional): Tells whether a basic wire or a wire from within a bus is to be declared. Defaults to False.
Returns:
str: Blif code for declaration of a wire.
&#34;&#34;&#34;
if array is True:
return f&#34;{prefix}[{offset}]&#34;
else:
return f&#34;{self.name}&#34;</code></pre>
</details>
</dd>
<dt id="ariths_gen.wire_components.wires.Wire.get_declaration_c"><code class="name flex">
<span>def <span class="ident">get_declaration_c</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"><p>Wire declaration in C code.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>Empty string if C code wire is carrying constant value (constant value is used in situ) or returns C code for declaration and initialization of wire's name.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def get_declaration_c(self):
&#34;&#34;&#34;Wire declaration in C code.
Returns:
str: Empty string if C code wire is carrying constant value (constant value is used in situ) or returns C code for declaration and initialization of wire&#39;s name.
&#34;&#34;&#34;
if self.is_const():
return &#34;&#34;
else:
return f&#34; uint8_t {self.name} = {self.value};\n&#34;</code></pre>
</details>
</dd>
<dt id="ariths_gen.wire_components.wires.Wire.get_declaration_v_flat"><code class="name flex">
<span>def <span class="ident">get_declaration_v_flat</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"><p>Wire declaration for flat Verilog code.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>Empty string if Verilog code wire is carrying constant value (constant value is used in situ) or returns Verilog code for declaration and initialization of wire's name.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def get_declaration_v_flat(self):
&#34;&#34;&#34;Wire declaration for flat Verilog code.
Returns:
str: Empty string if Verilog code wire is carrying constant value (constant value is used in situ) or returns Verilog code for declaration and initialization of wire&#39;s name.
&#34;&#34;&#34;
if self.is_const():
return &#34;&#34;
else:
return f&#34; wire {self.name};\n&#34;</code></pre>
</details>
</dd>
<dt id="ariths_gen.wire_components.wires.Wire.get_declaration_v_hier"><code class="name flex">
<span>def <span class="ident">get_declaration_v_hier</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"><p>Wire declaration for hierarchical Verilog code.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>Empty string if Verilog code wire is carrying constant value (constant value is used in situ) or returns Verilog code for declaration and initialization of wire's name.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def get_declaration_v_hier(self):
&#34;&#34;&#34;Wire declaration for hierarchical Verilog code.
Returns:
str: Empty string if Verilog code wire is carrying constant value (constant value is used in situ) or returns Verilog code for declaration and initialization of wire&#39;s name.
&#34;&#34;&#34;
if self.is_const():
return &#34;&#34;
else:
return f&#34; wire [0:0] {self.name};\n&#34;</code></pre>
</details>
</dd>
<dt id="ariths_gen.wire_components.wires.Wire.get_wire_value_blif"><code class="name flex">
<span>def <span class="ident">get_wire_value_blif</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"><p>Accesses bit value from wire represented in Blif code.</p>
<p>Used for assignment of specific one bit circuit/gate values to their respective parameters
in hierarchical Blif subcomponents generation.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>Blif code to get bit value from this wire or to get constant wire's bit value 0/1.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def get_wire_value_blif(self):
&#34;&#34;&#34;Accesses bit value from wire represented in Blif code.
Used for assignment of specific one bit circuit/gate values to their respective parameters
in hierarchical Blif subcomponents generation.
Returns:
str: Blif code to get bit value from this wire or to get constant wire&#39;s bit value 0/1.
&#34;&#34;&#34;
if self.is_const():
return self.blif_const
elif self.parent_bus is not None and self.parent_bus.N &gt; 1:
return self.name
else:
return self.prefix</code></pre>
</details>
</dd>
<dt id="ariths_gen.wire_components.wires.Wire.get_wire_value_c_flat"><code class="name flex">
<span>def <span class="ident">get_wire_value_c_flat</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"><p>Accesses desired bit value from wire represented in C code variable used for flat generation.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>C code bitwise shift to get desired bit value from this wire or wire variable's constant bit value 0/1.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def get_wire_value_c_flat(self):
&#34;&#34;&#34;Accesses desired bit value from wire represented in C code variable used for flat generation.
Returns:
str: C code bitwise shift to get desired bit value from this wire or wire variable&#39;s constant bit value 0/1.
&#34;&#34;&#34;
if self.is_const():
return f&#34;({self.c_const})&#34;
else:
# If wire is part of an input bus (where wire names are concatenated from bus prefix and their index position inside the bus in square brackets)
# then the wire value is obtained from bitwise shifting the required wire from the parent bus (&#39;parent_bus.prefix&#39; is the same value as &#39;self.prefix&#39;)
if self.name.endswith(&#34;[&#34;+str(self.index)+&#34;]&#34;) and self.parent_bus is not None:
return f&#34;(({self.prefix} &gt;&gt; {self.index}) &amp; 0x01)&#34;
else:
return f&#34;(({self.name} &gt;&gt; 0) &amp; 0x01)&#34;</code></pre>
</details>
</dd>
<dt id="ariths_gen.wire_components.wires.Wire.get_wire_value_c_hier"><code class="name flex">
<span>def <span class="ident">get_wire_value_c_hier</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"><p>Accesses desired bit value from wire represented in C code variable used for hierarchical generation.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>C code bitwise shift to get desired bit value position from this wire or wire variable's constant bit value 0/1.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def get_wire_value_c_hier(self):
&#34;&#34;&#34;Accesses desired bit value from wire represented in C code variable used for hierarchical generation.
Returns:
str: C code bitwise shift to get desired bit value position from this wire or wire variable&#39;s constant bit value 0/1.
&#34;&#34;&#34;
if self.is_const():
return f&#34;({self.c_const})&#34;
else:
return f&#34;(({self.prefix} &gt;&gt; {self.index}) &amp; 0x01)&#34;</code></pre>
</details>
</dd>
<dt id="ariths_gen.wire_components.wires.Wire.get_wire_value_v_flat"><code class="name flex">
<span>def <span class="ident">get_wire_value_v_flat</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"><p>Accesses bit value from wire represented in Verilog code variable used for flat generation.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>Verilog code to get bit value from this wire or to get constant wire's bit value 0/1.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def get_wire_value_v_flat(self):
&#34;&#34;&#34;Accesses bit value from wire represented in Verilog code variable used for flat generation.
Returns:
str: Verilog code to get bit value from this wire or to get constant wire&#39;s bit value 0/1.
&#34;&#34;&#34;
if self.is_const():
return self.v_const
else:
return self.name</code></pre>
</details>
</dd>
<dt id="ariths_gen.wire_components.wires.Wire.get_wire_value_v_hier"><code class="name flex">
<span>def <span class="ident">get_wire_value_v_hier</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"><p>Accesses bit value from wire represented in Verilog code variable used for hierarchical generation.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>Verilog code to get bit value from this wire or to get constant wire's bit value 0/1.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def get_wire_value_v_hier(self):
&#34;&#34;&#34;Accesses bit value from wire represented in Verilog code variable used for hierarchical generation.
Returns:
str: Verilog code to get bit value from this wire or to get constant wire&#39;s bit value 0/1.
&#34;&#34;&#34;
if self.is_const():
return self.v_const
else:
return f&#34;{self.prefix}[{self.index}]&#34;</code></pre>
</details>
</dd>
<dt id="ariths_gen.wire_components.wires.Wire.return_wire_value_c_flat"><code class="name flex">
<span>def <span class="ident">return_wire_value_c_flat</span></span>(<span>self, offset: int = 0)</span>
</code></dt>
<dd>
<div class="desc"><p>Retrieves desired bit value from wire represented in C code variable and bitwise shifts it to desired position for storing it within a bus for flat generation.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>offset</code></strong> :&ensp;<code>int</code>, optional</dt>
<dd>Used to shift wire value in order to be stored in proper location inside a bus. Defaults to 0.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>C code bitwise shift for storing (constant/variable) wire value at desired offset position.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def return_wire_value_c_flat(self, offset: int = 0):
&#34;&#34;&#34;Retrieves desired bit value from wire represented in C code variable and bitwise shifts it to desired position for storing it within a bus for flat generation.
Args:
offset (int, optional): Used to shift wire value in order to be stored in proper location inside a bus. Defaults to 0.
Returns:
str: C code bitwise shift for storing (constant/variable) wire value at desired offset position.
&#34;&#34;&#34;
if self.is_const():
return f&#34;({self.c_const}) &lt;&lt; {offset};\n&#34;
else:
return f&#34;(({self.name} &gt;&gt; 0) &amp; 0x01) &lt;&lt; {offset};\n&#34;</code></pre>
</details>
</dd>
<dt id="ariths_gen.wire_components.wires.Wire.return_wire_value_c_hier"><code class="name flex">
<span>def <span class="ident">return_wire_value_c_hier</span></span>(<span>self, offset: int = 0)</span>
</code></dt>
<dd>
<div class="desc"><p>Retrieves desired bit value from wire represented in C code variable and bitwise shifts it to desired position for storing it within a bus for hierarchical generation.</p>
<h2 id="args">Args</h2>
<dl>
<dt><strong><code>offset</code></strong> :&ensp;<code>int</code>, optional</dt>
<dd>Used to shift wire value in order to be stored in proper location inside a bus. Defaults to 0.</dd>
</dl>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>C code bitwise shift for storing (constant/variable) wire value at desired offset position.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def return_wire_value_c_hier(self, offset: int = 0):
&#34;&#34;&#34;Retrieves desired bit value from wire represented in C code variable and bitwise shifts it to desired position for storing it within a bus for hierarchical generation.
Args:
offset (int, optional): Used to shift wire value in order to be stored in proper location inside a bus. Defaults to 0.
Returns:
str: C code bitwise shift for storing (constant/variable) wire value at desired offset position.
&#34;&#34;&#34;
if self.is_const():
return f&#34;({self.c_const}) &lt;&lt; {offset};\n&#34;
else:
return f&#34;(({self.prefix} &gt;&gt; {self.index}) &amp; 0x01) &lt;&lt; {offset};\n&#34;</code></pre>
</details>
</dd>
<dt id="ariths_gen.wire_components.wires.Wire.return_wire_value_v_flat"><code class="name flex">
<span>def <span class="ident">return_wire_value_v_flat</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"><p>Retrieves bit value from wire represented in Verilog code variable for storing it within a bus for flat generation.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>Verilog code for retrieving (constant/variable) wire value (and assign it at desired bus offset position).</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def return_wire_value_v_flat(self):
&#34;&#34;&#34;Retrieves bit value from wire represented in Verilog code variable for storing it within a bus for flat generation.
Returns:
str: Verilog code for retrieving (constant/variable) wire value (and assign it at desired bus offset position).
&#34;&#34;&#34;
if self.is_const():
return f&#34;{self.v_const};\n&#34;
else:
return f&#34;{self.name};\n&#34;</code></pre>
</details>
</dd>
<dt id="ariths_gen.wire_components.wires.Wire.return_wire_value_v_hier"><code class="name flex">
<span>def <span class="ident">return_wire_value_v_hier</span></span>(<span>self)</span>
</code></dt>
<dd>
<div class="desc"><p>Retrieves bit value from bus's wires and stores them in bus's corresponding Verilog variable at proper offset bit position in the bus for hierarchical generation.</p>
<h2 id="returns">Returns</h2>
<dl>
<dt><code>str</code></dt>
<dd>Verilog code for retrieving (constant/variable) wire value used for assigning it into bus represented in Verilog code variable.</dd>
</dl></div>
<details class="source">
<summary>
<span>Expand source code</span>
</summary>
<pre><code class="python">def return_wire_value_v_hier(self):
&#34;&#34;&#34;Retrieves bit value from bus&#39;s wires and stores them in bus&#39;s corresponding Verilog variable at proper offset bit position in the bus for hierarchical generation.
Returns:
str: Verilog code for retrieving (constant/variable) wire value used for assigning it into bus represented in Verilog code variable.
&#34;&#34;&#34;
if self.is_const():
return f&#34;{self.v_const};\n&#34;
else:
return f&#34;{self.prefix}[{self.index}];\n&#34;</code></pre>
</details>
</dd>
</dl>
</dd>
</dl>
</section>
</article>
<nav id="sidebar">
<h1>Index</h1>
<div class="toc">
<ul></ul>
</div>
<ul id="index">
<li><h3>Super-module</h3>
<ul>
<li><code><a title="ariths_gen.wire_components" href="index.html">ariths_gen.wire_components</a></code></li>
</ul>
</li>
<li><h3><a href="#header-classes">Classes</a></h3>
<ul>
<li>
<h4><code><a title="ariths_gen.wire_components.wires.ConstantWireValue0" href="#ariths_gen.wire_components.wires.ConstantWireValue0">ConstantWireValue0</a></code></h4>
<ul class="">
<li><code><a title="ariths_gen.wire_components.wires.ConstantWireValue0.is_const" href="#ariths_gen.wire_components.wires.ConstantWireValue0.is_const">is_const</a></code></li>
</ul>
</li>
<li>
<h4><code><a title="ariths_gen.wire_components.wires.ConstantWireValue1" href="#ariths_gen.wire_components.wires.ConstantWireValue1">ConstantWireValue1</a></code></h4>
<ul class="">
<li><code><a title="ariths_gen.wire_components.wires.ConstantWireValue1.is_const" href="#ariths_gen.wire_components.wires.ConstantWireValue1.is_const">is_const</a></code></li>
</ul>
</li>
<li>
<h4><code><a title="ariths_gen.wire_components.wires.Wire" href="#ariths_gen.wire_components.wires.Wire">Wire</a></code></h4>
<ul class="">
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_assign_blif" href="#ariths_gen.wire_components.wires.Wire.get_assign_blif">get_assign_blif</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_declaration_blif" href="#ariths_gen.wire_components.wires.Wire.get_declaration_blif">get_declaration_blif</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_declaration_c" href="#ariths_gen.wire_components.wires.Wire.get_declaration_c">get_declaration_c</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_declaration_v_flat" href="#ariths_gen.wire_components.wires.Wire.get_declaration_v_flat">get_declaration_v_flat</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_declaration_v_hier" href="#ariths_gen.wire_components.wires.Wire.get_declaration_v_hier">get_declaration_v_hier</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_wire_value_blif" href="#ariths_gen.wire_components.wires.Wire.get_wire_value_blif">get_wire_value_blif</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_wire_value_c_flat" href="#ariths_gen.wire_components.wires.Wire.get_wire_value_c_flat">get_wire_value_c_flat</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_wire_value_c_hier" href="#ariths_gen.wire_components.wires.Wire.get_wire_value_c_hier">get_wire_value_c_hier</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_wire_value_v_flat" href="#ariths_gen.wire_components.wires.Wire.get_wire_value_v_flat">get_wire_value_v_flat</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.get_wire_value_v_hier" href="#ariths_gen.wire_components.wires.Wire.get_wire_value_v_hier">get_wire_value_v_hier</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.is_const" href="#ariths_gen.wire_components.wires.Wire.is_const">is_const</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.return_wire_value_c_flat" href="#ariths_gen.wire_components.wires.Wire.return_wire_value_c_flat">return_wire_value_c_flat</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.return_wire_value_c_hier" href="#ariths_gen.wire_components.wires.Wire.return_wire_value_c_hier">return_wire_value_c_hier</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.return_wire_value_v_flat" href="#ariths_gen.wire_components.wires.Wire.return_wire_value_v_flat">return_wire_value_v_flat</a></code></li>
<li><code><a title="ariths_gen.wire_components.wires.Wire.return_wire_value_v_hier" href="#ariths_gen.wire_components.wires.Wire.return_wire_value_v_hier">return_wire_value_v_hier</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</main>
<footer id="footer">
<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
</footer>
</body>
</html>