This is an old revision of the document!


ACT Configuration Files

There are a number of language features as well as tools that require some combination of technology-independent and technology-dependent information. ACT provides a unified configuration file format that can be used to specify this information. This file is automatically read in when the library is initialized through a call to Act::Init(). The call should be the first one before any ACT library functions are invoked, and looks like this:

   Act::Init(&argc, &argv);

where argc and argv are the usual command-line option parameters to main(). This invocation reads in the ACT configuration file as well. Technology-specific information can be specified using the -T command-line option.

We separate out the technology-specific and technology-independent information, because often technology-specific information requires complex legal arrangements, non-disclosure agreements, etc. and cannot be freely distributed.

Configuration file format

The configuration file is a simple line-based text file. An example (global.conf) can be found in the act/ directory.

int    <var> value
string <var> value
real   <var> value

Specifies that the variable is assigned the specified value.

int_table <var> values
real_table <var> values
string_table <var> values

Here the variable is an array (a.k.a. table) that corresponds to the space-separated list of values.

begin name

Appends name. to all names that follow.

end

Drops the last prefix

Finally, a # in the first column can be used for comments (upto the end of line).

Technology-independent configuration

Generic

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
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.

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.

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

Technology-specific configuration