Truss provides a functionality layer and static timing engine for OpenAccess, similar in concept to those in OpenAccess Gear, except faster and simpler. The goal is to both be user-friendly and scale to industrial size designs. This white paper describes some of the problems with OA Gear that are fixed in Truss.
Truss also provides a few Tcl bindings, which are useful for quickly trying out some optimizations with the static timer.
set timer [truss::create_timer -design $top -sdc { set_input_delay -rise .10 [all_inputs] set_input_delay -min -fall .15 G0 }] foreachOA term [oa::getTerms $occ] { puts [$timer getArr -obj $term] }
Most dependencies should already be satisfied in a recent Linux system, and you probably already have OpenAccess if you've stumbled upon this page. I have not tested against the "debug" version of the OpenAccess libraries, because they are enormous and I don't plan on fixing bugs in OpenAccess.
FYI, I run Debian stable: if your toolchain is older than mine and you do not have root access on your machine, I pity you.
For the functionality layer, you need to first annotate the OpenAccess design library using the following Tcl code:
lappend auto_path $trusslibdir package require truss truss::annotate_lib -lib $lib -view abstract -liberty $liberty
OpenAccess (and OpenAccess Gear) use a kludge called "equivalent nets" to support Verilog assign statements. There isn't a clean way to support them in Truss, because they can be modified without Truss seeing the change. Therefore, equivalences are completely ignored in Truss, and you may want to merge equivalent nets as follows:
truss::mergeEquivs $top
Download: truss-0.1.tar.gz