<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://avlsi.csl.yale.edu/act/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://avlsi.csl.yale.edu/act/feed.php">
        <title>The ACT VLSI design tools - intro_example</title>
        <description></description>
        <link>https://avlsi.csl.yale.edu/act/</link>
        <image rdf:resource="https://avlsi.csl.yale.edu/act/lib/exe/fetch.php?media=wiki:logo.png" />
       <dc:date>2026-05-15T08:17:37+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:alu&amp;rev=1745279344&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:assertions&amp;rev=1747483664&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:basicprs&amp;rev=1653920175&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:cadence_import&amp;rev=1710337830&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:chp_fifo&amp;rev=1746113771&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:chp_fifo2&amp;rev=1746096470&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:connection_info&amp;rev=1747580557&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:dependencies&amp;rev=1606888820&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:files&amp;rev=1747908610&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:gates&amp;rev=1652447930&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:inverter&amp;rev=1746106369&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:loops&amp;rev=1756054096&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:namespace&amp;rev=1747482705&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:name_mangling&amp;rev=1747743525&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:netlist&amp;rev=1652448130&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:operators&amp;rev=1746642845&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:pure_struct&amp;rev=1747580851&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:sizing&amp;rev=1652448106&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:standard_sim&amp;rev=1747248051&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:start&amp;rev=1756053997&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:templates&amp;rev=1652448076&amp;do=diff"/>
                <rdf:li rdf:resource="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:template_deps&amp;rev=1746642380&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://avlsi.csl.yale.edu/act/lib/exe/fetch.php?media=wiki:logo.png">
        <title>The ACT VLSI design tools</title>
        <link>https://avlsi.csl.yale.edu/act/</link>
        <url>https://avlsi.csl.yale.edu/act/lib/exe/fetch.php?media=wiki:logo.png</url>
    </image>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:alu&amp;rev=1745279344&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-04-21T23:49:04+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>alu</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:alu&amp;rev=1745279344&amp;do=diff</link>
        <description>ALU

Let&#039;s say we want to design an ALU that takes two data inputs, and one control input. The output should be the sum of the two data inputs if the control is zero, the difference if the control is one, the logical AND if the control is two, and the logical OR if the control is three.</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:assertions&amp;rev=1747483664&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-05-17T12:07:44+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>assertions</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:assertions&amp;rev=1747483664&amp;do=diff</link>
        <description>Assertions

Sometimes parameterized components are only valid for certain parameter ranges. ACT includes
assertions that are checked at expansion time that can be used to validate the assumptions made.

As a simple example, suppose we want to define an N-place buffer.</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:basicprs&amp;rev=1653920175&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-05-30T14:16:15+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>basicprs</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:basicprs&amp;rev=1653920175&amp;do=diff</link>
        <description>Basic gate-level simulation

Gates in the ACT language are specified using production rules, which can specify the Boolean logic for the pull-up and pull-down switching networks for a gate.
Since production rules are general enough to 
specify arbitrary pull-up and pull-down networks, ACT can be used to describe both synchronous and asynchronous circuits. The ACT language contains many constructs that can be used to create design hierarchy, simplifying the description of the circuit. Components …</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:cadence_import&amp;rev=1710337830&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-03-13T13:50:30+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>cadence_import</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:cadence_import&amp;rev=1710337830&amp;do=diff</link>
        <description>Introduction

This guide is intended to explain how to export asynchronous circuits designed in ACT and import them in Cadence Virtuoso to simulate their functioning.  Some steps are needed to get the Verilog netlist and some editing to let the netlist be valid and more readable. These steps are shown referring to one of the most basic circuits starting from its behavioral description.</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:chp_fifo&amp;rev=1746113771&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-05-01T15:36:11+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>chp_fifo</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:chp_fifo&amp;rev=1746113771&amp;do=diff</link>
        <description>First-in first-out buffer in CHP

(It is a bit unfortunate that the computer science community uses the term buffer to refer to a fifo, while the circuits community uses the term buffer to refer to an electrical circuit that introduces gain to improve signal drive strength.)</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:chp_fifo2&amp;rev=1746096470&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-05-01T10:47:50+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>chp_fifo2</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:chp_fifo2&amp;rev=1746096470&amp;do=diff</link>
        <description>Alternate Buffer

We start with the earlier example of a templated buffer:


template&lt;pint N&gt;
defproc buffer (chan?(int) L; chan!(int) R)
{
   one_place_buffer b[N];
   (i : N-1 : b[i].R = b[i+1].L;)
   b[0].L = L;
   b[N-1].R = R;
}


In this version, we used the</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:connection_info&amp;rev=1747580557&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-05-18T15:02:37+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>connection_info</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:connection_info&amp;rev=1747580557&amp;do=diff</link>
        <description>Connections

There are two categories of variables in ACT: parameter variables (e.g. pint, pbool, etc.) that are used
during expansion/elaboration time to build a circuit, and circuit component/wire variables. While parameter 
variables are more like normal variables in a programming language with the caveat that in some contexts they are</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:dependencies&amp;rev=1606888820&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2020-12-02T06:00:20+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>dependencies</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:dependencies&amp;rev=1606888820&amp;do=diff</link>
        <description>Dependencies

Any complex design will involve a large number of ACT files and namespaces. 
For a hierarchical design with many imported libraries, it is useful to be able to determine dependency information and see if all the libraries are present in the directories where ACT can find them. The command</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:files&amp;rev=1747908610&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-05-22T10:10:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>files</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:files&amp;rev=1747908610&amp;do=diff</link>
        <description>Organizing files in a project

There are different ways to organize the files in a complex design project. Normally one has a number
of different .act files that are combined using import directives to form the design. When an import directive is encountered, the ACT tools search for the</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:gates&amp;rev=1652447930&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-05-13T13:18:50+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>gates</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:gates&amp;rev=1652447930&amp;do=diff</link>
        <description>Simple combinational gates

The following specifies a number of combinational gates, where the process names correspond to the commonly used names for the gates.


defproc inverter (bool? i; bool! o)
{
  prs {
    i =&gt; o-
  }
}

defproc nand2 (bool? a, b; bool! c)
{
  prs {
    a &amp; b =&gt; c-
  }
}

defproc nor2 (bool? a, b; bool! c)
{
  prs {
    a | b =&gt; c-
  }
}</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:inverter&amp;rev=1746106369&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-05-01T13:32:49+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>inverter</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:inverter&amp;rev=1746106369&amp;do=diff</link>
        <description>A simple inverter

ACT is used to describe a hierarchical collection of processes that together implement a circuit. Each process is an independent entity, and operates concurrently with all the other processes in the system. Circuits are also processes, and the physical implementation of two circuits operate concurrently.</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:loops&amp;rev=1756054096&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-08-24T16:48:16+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>loops</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:loops&amp;rev=1756054096&amp;do=diff</link>
        <description>Array, loops and selection

Complex datapath designs are often designed with array of simpler cells. The following example show how to create array of simple cells and connect them using loop constructs in ACT.


import &quot;adder.act&quot;;

defproc  adder8b ( bool? a[8],b[8],ci; bool! s[8],co)
{
  bool c[9];
  fulladder fa[8];
  
  c[0] = ci;
  co = c[8];
  ( i : 8 : fa[i](a[i], b[i], c[i], s[i], c[i+1]);)  
}</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:namespace&amp;rev=1747482705&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-05-17T11:51:45+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>namespace</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:namespace&amp;rev=1747482705&amp;do=diff</link>
        <description>Creating a library of building blocks

A library can be created using pre-designed building blocks and use them in hierarchical designs. This can be achieved using keyword import. In this case, ACT file begins with a sequence of “import” statements. The</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:name_mangling&amp;rev=1747743525&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-05-20T12:18:45+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>name_mangling</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:name_mangling&amp;rev=1747743525&amp;do=diff</link>
        <description>Expanded names and name mangling

Two useful concepts to keep in mind when using the ACT tools are expanded names and mangled names.

Expanded names

Expanded names are the names generated internally by ACT when expanding a design (or elaborating a design).
This is a concept one should be familiar with, especially when debugging and/or understanding error messages.
This is best illustrated with an example. Consider the following templated process definition:</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:netlist&amp;rev=1652448130&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-05-13T13:22:10+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>netlist</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:netlist&amp;rev=1652448130&amp;do=diff</link>
        <description>Generating spice netlist and simulation with Xyce

Files required:

	*  [Simple BSIM3 model file] from a (very old) MOSIS SCMOS_SUBM 0.6um run, from a time when everything was publicly posted. Save this to model.sp. 

(1) Input file with gate sizing

The following inv.act file will be used as a test case for SPICE simulation.</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:operators&amp;rev=1746642845&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-05-07T18:34:05+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>operators</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:operators&amp;rev=1746642845&amp;do=diff</link>
        <description>Operators

A special case of pure structures are those that are used to hold arithmetic types. For example, an example pure structure corresponding to a sign-magnitude integer is:


template&lt;pint N&gt;
deftype signed_int(bool neg; int&lt;N&gt; val) { }


It is convenient to be able to define arithmetic on</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:pure_struct&amp;rev=1747580851&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-05-18T15:07:31+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>pure_struct</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:pure_struct&amp;rev=1747580851&amp;do=diff</link>
        <description>Using pure structures

A pure structure is a user-defined data type that contains only int/bool or other pure structures. Pure structures are analogous to C/C++ structs, and can be used to organize data and 
make CHP more human-readable. An example of a pure structure is:</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:sizing&amp;rev=1652448106&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-05-13T13:21:46+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>sizing</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:sizing&amp;rev=1652448106&amp;do=diff</link>
        <description>Specifying gate sizes

The gate sizing can be specified using prs sub-language but using the newly introduced sizing sub-language is recommended. This tutorial will show how to specify gate sizes using the new sizing sub-language.

Before writing a prs for inverter, let’s assume that we have the following specification included in the configuration file. Here,</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:standard_sim&amp;rev=1747248051&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-05-14T18:40:51+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>standard_sim</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:standard_sim&amp;rev=1747248051&amp;do=diff</link>
        <description>Using standard  environments

Simulating CHP programs often requires creating an environment to inject data into the circuit being tested, and an environment that reads the outputs of the circuit to check their values. actsim comes with a simulation library that has some common functionality that can be used for this purpose.</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:start&amp;rev=1756053997&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-08-24T16:46:37+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>start</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:start&amp;rev=1756053997&amp;do=diff</link>
        <description>ACT By Example

ACT is a hardware description language that has been influenced more by programming languages developed for software rather than hardware. The key difference between ACT and normal software programming languages is that when “variables</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:templates&amp;rev=1652448076&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-05-13T13:21:16+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>templates</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:templates&amp;rev=1652448076&amp;do=diff</link>
        <description>Parameterized design using templates

Template provides a good way to create a parameterized design framework which can be used to get customized design from a generic design based on user input. ACT supports templates to create parameterized types, channel, and processes.</description>
    </item>
    <item rdf:about="https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:template_deps&amp;rev=1746642380&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-05-07T18:26:20+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>template_deps</title>
        <link>https://avlsi.csl.yale.edu/act/doku.php?id=intro_example:template_deps&amp;rev=1746642380&amp;do=diff</link>
        <description>Dependent templates

We&#039;ve already seen how template parameters can be used to construct parameterized circuits, as well as change the size of arrays in the process port list.  In addition, they can also be used to specify parameters used in the template itself.


template&lt;pint N; pint data[N]&gt;
defproc test(chan!(int) out)
{
    chp {
       (; i : N : out!data[i])
     }
}</description>
    </item>
</rdf:RDF>
