###############################################################
# New Developer Tutorial
#
# By Jason Luu
# May 8, 2013
###############################################################

Welcome to the Verilog-to-Routing (VTR) Project.  This project is an 
open-source, international, collaboration towards a comprehensive FPGA 
architecture exploration system that includes CAD tools, benchmarks, 
transistor-optimized architecture files, and documentation, along with support 
to make this all fit together and work.  The purpose of this tutorial is to 
equip you, the new developer, with the tools and understanding that you need to 
begin making a useful contribution to this project.

While you are going through this tutorial, please record down things that should 
be changed.  Whether it is the tutorial itself, documentation, or other parts of 
the VTR project.  Your thoughts are valuable and welcome because fresh eyes help 
evaluate whether or not our work is clearly presented.

Task #1 - Environment Setup

  1.  Log into your workstation/personal computer.  Check your account for 
  general features such as internet, printing, svn, etc.  If there are problems 
  at this stage, talk to your advisor to get this setup.

  2.  If you are not familiar with development on Linux, this is the time to get 
  up to speed.  Look up online tutorials on general commands, basic development 
  using Makefiles, etc.

Task #2 - Background Reading

  1.  Read the first two chapters of "Architecture and CAD for deep-submicron 
  FPGAs" by Vaughn Betz, et al.  This is a great introduction to the topic of 
  FPGA CAD and architecture.  Note though that this book is old so it only 
  covers a small core of what the VTR project is currently capable of.  

  2.  Read chapters 1 to 5 of "FPGA Architecture: Survey and Challenges" by Ian 
  Kuon et al.

  3.  Review material learned with fellow colleagues.

Task #3 - Setup VTR

  1.  Use svn to grab a trunk copy of VTR from 
  https://code.google.com/p/vtr-verilog-to-routing/

  2.  Build the project

  3.  Run "./run_quick_test.pl" to check that the build worked

  4.  Read the README.release.txt file.  Follow the instructions in that file to 
run a circuit through the entire flow and read the statistics gathered from that 
run.

Task #4 - Use VTR

  1.  Create your own custom Verilog file.  Create your own custom architecture 
  file using one of the existing architecture files as a template.  Use VTR to 
  map that circuit that you created to that architecture that you created. The VTR
  documentation, to be found at https://code.google.com/p/vtr-verilog-to-routing/
  will prove useful. You may also wish to look at the following links for descriptions
  of the language used inside the architecture files:
  - http://www.eecg.utoronto.ca/~jluu/publications/luu_vpr_fpga2011.pdf
  - http://www.eecg.utoronto.ca/vpr/utfal_ex1.html

  2.  Perform a simple architecture experiment.  Run an experiment that varies 
  Fc_in from 0.01 to 1.00 on the benchmarks ch_intrinsics, or1200, and sha.  Use 
  tasks/timing as your template.  Graph the geometric average of minimum channel 
  width and critical path delay for these three benchmarks across your different 
  values of Fc_in.  Review the results with your colleagues and/or advisor.

Task #5 - Open the Black Box

  At this stage, you have gotten a taste of how an FPGA architect would go about 
  using VTR.  As a developer though, you need a much deeper understanding of how 
  this tool works.  The purpose of this section is to have you to learn the 
  details of the VTR CAD flow by having you manually do what the scripts do.

  1.  Using the custom Verilog circuit and architecture created in Task #4, 
  directly run Odin II on it to generate a blif netlist.  You may need to skim the Odin II
  readme file and the vtr_flow/scripts/run_vtr_flow.pl.

  2.  Using the output netlist of Odin II, run ABC to generate a technology-mapped blif file.
  You may need to skim vtr_flow/scripts/run_vtr_flow.pl.

  3.  Using the output of ABC, run VPR to complete the mapping of a user circuit 
  to a target architecture.  You may need to consult the VPR User Manual and skim
  You may need to skim vtr_flow/scripts/run_vtr_flow.pl.

  4.  Read vpr/VPR_User_Manual.doc


Task #6 - Submitting Changes and Regression Testing

  1.  Read README.txt in the base directory of VTR.  Code changes rapidly so please help keep
  this up to date if you see something that is out of date.

  2.  Make your first commit to svn by modifying README.txt and committing it.  I recommend 
  adding your name to the list of contributors.  If you have
  nothing to modify, just add/remove a line of whitespace at the bottom of the file.


Now that you have completed the tutorial, you should have a general sense of what 
the VTR project is about and how the different parts work together.  It's time
to talk to your advisor to get your first assignment.


Good luck!
