###############################################################
# 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, git, 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 git to clone a copy of VTR from 
 https://github.com/verilog-to-routing/vtr-verilog-to-routing

  2.  Build the project

  3.  Run "./run_quick_test.pl" to check that the build worked

  4.  Follow the Basic Design Flow Tutorial found in the Tutorials
  section of the documentation (https://vtr.readthedocs.io/en/latest).
  This tutorial will allow you 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://vtr.readthedocs.io/en/latest/
  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 the VPR section of the online documentation.

Task #6 - Submitting Changes and Regression Testing

  1.  Read README.developers.md 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 change to git by modifying README.txt and pushing 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!

