ESPRESSO – A QUICK REFERENCE


The purpose of this document is to give a quick introduction to ESPRESSO to use it for logic minimization. This document is not meant to be taken as a complete reference. More detailed documents will be put up on the course web page. These documents explain the input format as well as all the available options in detail. Interested students are strongly encouraged to refer to these documents.

 

What is ESPRESSO?

ESPRESSO is a 2-level minimization tool, comes as a part of the SIS package and is available as open source at UC Berkeley CAD page. Espresso takes as input a two-level representation of a two-valued (or multiple-valued) Boolean function, and produces a minimal equivalent representation.

Espresso reads the file provided (or standard input if no files are specified), performs the minimization, and writes the minimized result to standard output.  Espresso automatically verifies that the minimized function is equivalent to the original function. Options allow for using an exact minimization algorithm, for choosing an optimal phase assignment for the output functions, and for choosing an optimal assignment of the inputs to input decoders.

 

How does one specify the input file?

Espresso accepts as input a two-level description of a Boolean function. The input file is described as a PLA. Comments are allowed within the input by placing a pound sign  (#) as the first character on a line. Comments and unrecognized keywords are passed directly from the input file to standard output. Any white-space(blanks, tabs, etc.), except when used as a delimiter in an embedded command, is ignored.  It is generally assumed that the PLA is specified such that each row of the PLA fits on a single line in the input file. The easiest way to understand the format is through an example.

Consider a single bit adder that has three inputs: a, b and cin. It produces 2 outputs z and cout. The espresso pla file looks like this:

 

 

# This is a comment line

# PLA file for a full-adder

# There are three inputs and 2 outputs

.i 3

.o 2

# Now, we describe the function. The first 3 columns describe the inputs, followed by

# blank spaces. Then the 2 outputs z and cout are given

000      00

001      10

010      10

011      01

100      10

101            01

110            01

111            11

.e

 

A don’t care at the output is specified as a ‘-‘. A detailed explanation of all key words can be found in the references on the course web page.

 

How do I run Espresso on my machine in ICAEN?

Login to login-pa.engineering.uiowa.edu

For running Espresso do the following at your login prompt:

1) setenv OCTTOOLS /usr/local/opt/octtools5.2

    set path=($path $OCTTOOLS/bin)

2)      Then espresso -h will list the commands if everything  is okay

You can start running espresso with: espresso [options] [filename].

 

What are the available options in Espresso?

The standard package is available with several options. Here, we list a few commonly used options

Heuristic mode:

The default option in Espresso and so requires no options specification. Uses standard espresso heuristics

Exact mode:

Does an exact 2-level minimization. Use –Dexact. Run-time for exact minimization of a logic function is exponential in the size of the input. Hence, if you use this option, it is quite possible that the program runs forever for large files.

-s:

Gives the statistics after running espresso like run-time, literal count etc.

-t:

Will show a trace of the execution of the program.

Now, for example if you are given a PLA file describing a single bit adder called adder.pla and you are asked to minimize the file using exact minimization and report the literal count and run-times, you may type the following command:

“espresso –Dexact –s adder.pla”

 

That explains espresso in brief. Please feel free to contact me in case you have any doubts or have problems in setting espresso up.

Original documentation: Ganesh Venkataraman