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 location
Configuration files are located in the $ACT_HOME/conf
directory. The default configuration is installed in the generic/
directory. Technology-specific configuration files should be placed in $ACT_HOME/conf/techname
, and can be selected by using -Ttechname
as the first command-line option. If an absolute path name is specified for the technology, then that path is used as the directory for configuration files. Configuration files located in the current directory will take precedence over those in the default configuration location.
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
In addition, strings in a configuration file can use environment variables. The syntax for this is shown below:
string my_test_path "test/${ENV_VAR}/foo"
The environment variable ENV_VAR
is substituted for ${ENV_VAR}
. If the environment variable doesn't exist, then the string ${ENV_VAR}
remains as-is.
Finally, a #
in the first column can be used for comments (upto the end of line).
Technology-independent configuration
Technology-independent configuration is stored in global.conf
. This file contains information that doesn't depend on 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. The standard flavors we tend to use are:
svt
: standard threshold voltage, the default transistor flavorlvt
: low threshold voltagehvt
: high threshold voltage
Other common names are:
od25
: I/O device for 2.5Vod18
: I/O device for 1.8V
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.
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
Technology-specific configuration
The bulk of the configuration options are technology-specific. These are used to convert a technology-independent ACT description into a technology-specific output (e.g. a SPICE netlist). The standard set of configuration files we expect are:
prs2net.conf
: netlist generation configuration file, used to translate gate-level descriptions with abstract sizing into a transistor-level netlist.layout.conf
: Layout generation from netlist.lint.conf
: linting configuration for analyzing SPICE simulation traces.models.sp
: In the standard technology configuration directory, the filemodels.sp
should exist if mixed-signal and analog modeling is to be used. This particular file should include the SPICE commands necessary to include all the device models needed for simulation. This is typically a single line of the form.lib “<path-to-models>” TT