This is a branch of the post-7.0 VTR code base to add support for silicon interposers.

For new developers, please do the tutorial in tutorial/NewDeveloperTutorial.txt.  You
will be directed back here once you ramp up.

Our work in VTR follows a classic source control workflow.  The trunk is supposed to be the 
most current stable version of the project.  Developers checkout a local copy of the code from the 
trunk at the start of development then do regular commits to keep in sync 
with the trunk.  When a developer has a tested, working change to put back into 
the trunk, he/she performs a commit operation.  Unstable code should
remain in the developer's local copy.

IMPORTANT:  Outside of special circumstance, a broken build must be fixed at top priority.  
You break the build if your commit breaks any of the automated regression tests.



##############################################################################
# Contributors (Please keep this up-to-date so that we can copy-paste into other locations)
##############################################################################

Professors: Kenneth Kent, Peter Jamieson, Jason Anderson, Vaughn Betz, Jonathan Rose

Graduate Students: Jason Luu, Jeffrey Goeders, Chi Wai Yu, Andrew Somerville, 
Ian Kuon, Alexander Marquardt, Andy Ye, Wei Mark Fang, Tim Liu, Charles Chiasson

Summer Students: Opal Densmore, Ted Campbell, Cong Wang, Peter Milankov, Scott Whitty, Michael Wainberg,
Suya Liu, Miad Nasr, Nooruddin Ahmed, Thien Yu, Long Yu Wang

Companies: Altera Corporation, Texas Instruments


