TODO explain how the demo hardware design was modified to support our additional hardware needs
Hardware Design setup step Vivado Project Setup Hardware Design Process IP Core documentation and reference
# Vivado Project Setup
## 0. Project Clone from GIT
- Download the project repo from git (if you run into xpfm path not found issue in Vitis, please see //TODO)
## 1. Open Vivado
- This project is made using Vivado 2020.1, please open this project from Vivado 2020.1 or later. If you are using a newer version, you might need to update the IP.
## 2. Open Hardware Project
- Go to File - Project - Open Project 
- Navigate to the full firmware build folder under the project root folder
- Open the full_firmware_build.xpr file 
## 3. Project Layout
- After the project initialization, go to the design sourse window 
- Doule click on the design_1_wrapper(vhdl wrapper), then double click the design_1_i: design_1 file(block desgin) 
- Now the project is loaded and ready to go.
# Hardware Design Process
## 1. Validate design
- After editing any IP, click the Validate design button(located on the top bar of the block diagram) or press F6
- If you are load a brand new project or just generated new output products, there is going to be a sub-module run before you can continue (if you run into Submodule run failed problem, please see Xilinx support center for any related patch such as patch y2k22 for VPSS)
The design process has three parts: Sythesis, Implementation, Generate Bitstream in this order. For convience, you can just click generate Bitstream, and the two process will run automaticly if they are out-of-date.(make sure you have validated the design before doing this, many AXI bus IP auto-adjust their bitwith during that process)
- After the Generate Bitstream process is finished, close the pop up window
- Hardware Manager can be very helpful for hw/sw debug, but you need to setup ILA to probe wires 
## 6. Export Hardware
- Go to File - Export - Export Hardware, in the pop up window, select Fixed, then click next. select Include bitstream, then click next. You shouldn't need to change the name of the xsa file, but if you do make sure to update that in your Vitis platform project or linux boot drive. Finally, click finish. 
- the xsa file contains everything you have done in the hardware design, and that is how the FPGA reads the hardware configuration.
# IP Core documentation and reference
## Processor core
### Zynq-7000 Processing System IP
- Processing System 7 v5.5 Product Guide (PG082): https://docs.xilinx.com/v/u/en-US/pg082-processing-system7
- Designing High-Performance Video Systems with the Zynq-7000 All Programmable SoC Using IP Integrator: https://docs.xilinx.com/v/u/en-US/xapp1205-high-performance-video-zynq