General technology configuration

General technology configuration information is stored in global.conf. This file contains information that doesn't depend on most of the details of the technology provided by the foundry. The only item here that could be viewed as technology-specific corresponds to the transistor flavors supported (i.e. different thresholds, I/O transistors, etc). We normally use a fixed set of names for these transistor flavors in the ACT file, independent of technology.

Generic configuration settings

These settings have to do with various options that can impact ACT circuit construction and output generation.

Circuit construction complexity

begin act

int max_recurse_depth 1000
int max_loop_iterations 1000

end

These two parameters control the expansion/elaboration phase of ACT. ACT language constructs include while loops, as well as recursive circuit constructions. To ensure that the ACT expansion phase will always terminate (albeit with an error), these two parameters control the maximum depth of recursive expansions as well as the maximum number of iterations of a while loop.

begin act
int subconnection_limit 16384
end

This specifies a limit on array sizes that also have internal sub-connections (i.e. arrays that are not just simple memories, for example). The limit should be increased as needed, but can have a performance impact if you have a very large array with internal sub-connections.

Warnings

The following warnings can be turned on/off using an ACT configuration setting. They can also be adjusted via the standard act command-line options. These are integer ACT configuration variables that should be set to either zero (turn off warning) or one (turn on warning).

  • act.warn.empty_select: warn if all the guards in a selection statement in ACT (the core language, not the CHP/HSE sub-language) are false.
  • act.warn.double_expand: warn if an ACT tool attempts to expand an already expanded ACT object.
  • act.warn.no_local_driver: warn if a local variable doesn't have a driver if detected during some of the ACT analysis passes.
  • act.warn.dup_pass: warn if an ACT tool registers a duplicate pass.
  • act.warn.lang_subst: warn if an ACT tool uses a different language body within a process than the default choice.

Output generation and name mangling

begin act
string mangle_chars ".:()<>[],{}""
end

Sometimes it is useful to export files from the ACT format to other formats to interact with external tools. Examples of such formats include Verilog and SPICE. Since these are different languages, they use different syntax for identifiers. (Different commercial SPICE simulators use different identifier syntax too.) ACT identifiers and names include characters including [, ], ., <, > (among others). The ACT library provides a generic name mangling feature that can be used to convert them into identifiers that only use alphanumeric characters (i.e. basic C-style identifiers). The mangle_chars string specifies which characters should be mangled. Up to 36 characters can be mangled. By default, the _ character is used to mangle characters.

begin act
string mangle_letter "_"
end

If the mangle character needs to be changed, then a different character can be set by modifying the mangle_letter setting. To learn more, take a look at some examples.

begin act
  int output_window_width 72
end

For tools that use pretty-printing, this sets the output window width for a line break.

Devices

In most technologies, circuits can be implemented with devices of different types. In CMOS, n-type and p-type transistors come in a number of flavors. Common flavors include standard threshold voltage, low threshold voltage, and high threshold voltage for core circuits. Special transistors can also exist that support higher voltages (typically used for I/O devices). Instead of building in these concepts into the library implementation, ACT permits flavor annotations in the circuit description. For example, an inverter with a low threshold voltage transistor implementation would be:

prs {
   in <10,lvt> -> out-
  ~in <20,lvt> -> out+
}

Here lvt is the transistor flavor. The list of valid flavors are specified in the ACT library:

begin act
string_table dev_flavors "svt" "lvt" "hvt"
end 

The first flavor in the list (svt in the example) is the default value if the flavor is unspecified. This means that

prs {
   in <10,lvt> -> out-
  ~in <20> -> out+
}

would use lvt for the in input to the pull-down network, but svt for the other devices needed. The standard flavors we tend to use are:

  • svt : standard threshold voltage, the default transistor flavor
  • lvt : low threshold voltage
  • hvt : high threshold voltage

Other common names are:

  • od25: I/O device for 2.5V
  • od18: I/O device for 1.8V

ACT also has support for generic two-terminal devices. The standard configuration option uses this to support capacitors.

begin act
string_table prs_device "cap"
end

This permits you to write: The first flavor in the list (svt in the example) is the default value if the flavor is unspecified. This means that

prs {
   cap (in,GND)
   cap<5,2> (out,GND)
}

These are capacitors, the first one being a unit capacitor while the second is 10 units (5 x 2) in size.

Specification directives

The spec language body can contain a list of directives associated with Booleans. The list of these directives is contained in the ACT configuration file:

begin act
string_table spec_types "exclhi" "excllo" "mk_exclhi" "mk_excllo"
end

These directives can be added as new tools that developed that might want additional information from the design. An example of using a directive is shown below:

bool a, b;
bool x[10];
spec {
   exclhi(a,b)
   excllo(x)   // this is excllo(x[0],x[1],...,x[9])
}

Attributes

ACT supports attributes on both instances and production rules. An ACT instance can be assigned an attribute in the following way:

bool v @ [attr=0];
bool w;
w @ [attr=5];

In these two examples, the signal v has an attribute called attr with value 0, and signal w has attribute attr with value 5. These attributes can be inspected by tools. Instead of having a hard-coded set of instance attributes, an ACT configuration file can specify the list of supported attributes.

begin act
string_table instance_attr "i:s:autokeeper" "i:s:iscomb" "i:s:sigtype"
end

This specifies three instance attributes: autokeeper, iscomb, and sigtype. In general, an attribute is specified as a string of the form x:y:name

  • The first component x can be either i for an integer attribute, b for a Boolean attribute, or r for a real attribute.
  • The second component y specifies how to unify two attributes (which can happen if two instances with different attributes are connected). Supported methods are
    • s : for strict; the two attributes must be equal, otherwise an error is reported.
    • + : sum, so the attributes are summed
    • M : max, so the maximum value is used
    • m : min, so the minimum value is used
    • | : or, so a logical OR is used
    • &: and, so a logical AND is used

A second set of attributes can be specified per-production rule.

string_table prs_attr "i:s:after" "i:s:keeper" "i:s:iskeeper"

The syntax for these is the same, except the attributes are applied per production rule. These attributes are interpreted by the simulator as well as netlist generator.

Verilog global signal prefix

Since ACT can refer to global signals, this functionality may be needed when converting ACT files into Verilog netlists. Different systems may have different ways that a user can access signals starting from the top-level in Verilog.

begin act
  string global_signal_prefix "top."
end

This specifies that a global signal foo can be accessed from Verilog using top.foo.