.. raw:: html

   <!---
   # SPDX-FileCopyrightText: 2020 Efabless Corporation
   #
   # Licensed under the Apache License, Version 2.0 (the "License");
   # you may not use this file except in compliance with the License.
   # You may obtain a copy of the License at
   #
   #      http://www.apache.org/licenses/LICENSE-2.0
   #
   # Unless required by applicable law or agreed to in writing, software
   # distributed under the License is distributed on an "AS IS" BASIS,
   # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   # See the License for the specific language governing permissions and
   # limitations under the License.
   #
   # SPDX-License-Identifier: Apache-2.0
   -->
   
Quick start for caravel_user_project
====================================

1. To start the project you need to first create an empty Git project on Github and make sure your repo is public and includes a README

2. Open your Terminal. Create an empty folder to use as your Caravel workspace, and navigate to it.

.. code:: bash
	
	# Create a directory and call it anything you want
	mkdir -p caravel_tutorial
	
	# navigate into the directory
	cd caravel_tutorial
	
3. Clone caravel_user_project and setup the git environment as follows

.. code:: bash
	
	# Make sure that ``caravel_example`` matches the empty github repo name in step 1
	git clone -b mpw-5b https://github.com/efabless/caravel_user_project caravel_example
	cd caravel_example
	git remote rename origin upstream
	
	# You need to put your empty github repo URL from step 1
	git remote add origin <your github repo URL>
	
	# Create a new branch, you can name it anything 
	git checkout -b <my_branch>
	git push -u origin <my_branch>
	
4. Now that your git environment is setup, it's time to setup your local environment. (NOTE: docker is a prerequisite to setting up your environment)

.. code:: bash
	
	# to install caravel-lite into your caravel_user_project
	# you can install full caravel (not recommended) use ``export CARAVEL_LITE=0``
	make install
	
	# To install the management core for simulation
	make install_mcw
	
	# Install openlane for hardening your project
	# make sure to change <directory_name> with the directory you created in step 2 (In this case it's caravel_tutorial)
	# in this case it is caravel_tutorial
	export OPENLANE_ROOT=~/<directory_name>/openlane # you need to export this whenever you start a new shell
	make openlane
	
	# Build the pdk
	# make sure to change <directory_name> with the directory you created in step 1
	# in this case it is caravel_tutorial

	export PDK_ROOT=~/<directory_name>/pdks # you need to export this whenever you start a new shell
	make pdk
	
5. Now you can start hardening your design, for example

.. code:: bash

	make user_proj_example
	make user_project_wrapper
	
6. To run simulation on your design

.. code:: bash

	make simenv
	# you can run RTL/GL simulations by using
	export SIM=RTL
	# OR
	export SIM=GL
	
	# you can then run the simulations using
	make verify-<testbench-name>
	
	# for example
	make verify-io_ports
	
7. To run the precheck locally 

.. code:: bash
	
	make precheck
	make run-precheck
	
17. You are done! now go to www.efabless.com to submit your project!
   
   
.. |License| image:: https://img.shields.io/badge/License-Apache%202.0-blue.svg
   :target: https://opensource.org/licenses/Apache-2.0
.. |User CI| image:: https://github.com/efabless/caravel_project_example/actions/workflows/user_project_ci.yml/badge.svg
   :target: https://github.com/efabless/caravel_project_example/actions/workflows/user_project_ci.yml
.. |Caravel Build| image:: https://github.com/efabless/caravel_project_example/actions/workflows/caravel_build.yml/badge.svg
   :target: https://github.com/efabless/caravel_project_example/actions/workflows/caravel_build.yml
