Adam Taylor
Published © GPL3+

AC701 Image Processing

How to implement a image processing solution on the AC701 using a MIPI Camera and FMC Interface Card.

IntermediateWork in progress3 hours2,271
AC701 Image Processing

Things used in this project

Hardware components

ac701
×1
Digilent PCam 5C
×1
Digilent FMC PCam Adapter
×1

Software apps and online services

Vivado Design Suite
AMD Vivado Design Suite
Vitis Unified Software Platform
AMD Vitis Unified Software Platform

Story

Read more

Code

Vivado project

Tcl
################################################################
# This is a generated script based on design: design_1
#
# Though there are limitations about the generated script,
# the main purpose of this utility is to make learning
# IP Integrator Tcl commands easier.
################################################################

namespace eval _tcl {
proc get_script_folder {} {
   set script_path [file normalize [info script]]
   set script_folder [file dirname $script_path]
   return $script_folder
}
}
variable script_folder
set script_folder [_tcl::get_script_folder]

################################################################
# Check if script is running in correct Vivado version.
################################################################
set scripts_vivado_version 2021.1
set current_vivado_version [version -short]

if { [string first $scripts_vivado_version $current_vivado_version] == -1 } {
   puts ""
   catch {common::send_gid_msg -ssname BD::TCL -id 2041 -severity "ERROR" "This script was generated using Vivado <$scripts_vivado_version> and is being run in <$current_vivado_version> of Vivado. Please run the script in Vivado <$scripts_vivado_version> then open the design in Vivado <$current_vivado_version>. Upgrade the design by running \"Tools => Report => Report IP Status...\", then run write_bd_tcl to create an updated script."}

   return 1
}

################################################################
# START
################################################################

# To test this script, run the following commands from Vivado Tcl console:
# source design_1_script.tcl

# If there is no project opened, this script will create a
# project, but make sure you do not have an existing project
# <./myproj/project_1.xpr> in the current working folder.

set list_projs [get_projects -quiet]
if { $list_projs eq "" } {
   create_project project_1 myproj -part xc7a200tfbg676-2
   set_property BOARD_PART xilinx.com:ac701:part0:1.4 [current_project]
}


# CHANGE DESIGN NAME HERE
variable design_name
set design_name design_1

# If you do not already have an existing IP Integrator design open,
# you can create a design using the following command:
#    create_bd_design $design_name

# Creating design if needed
set errMsg ""
set nRet 0

set cur_design [current_bd_design -quiet]
set list_cells [get_bd_cells -quiet]

if { ${design_name} eq "" } {
   # USE CASES:
   #    1) Design_name not set

   set errMsg "Please set the variable <design_name> to a non-empty value."
   set nRet 1

} elseif { ${cur_design} ne "" && ${list_cells} eq "" } {
   # USE CASES:
   #    2): Current design opened AND is empty AND names same.
   #    3): Current design opened AND is empty AND names diff; design_name NOT in project.
   #    4): Current design opened AND is empty AND names diff; design_name exists in project.

   if { $cur_design ne $design_name } {
      common::send_gid_msg -ssname BD::TCL -id 2001 -severity "INFO" "Changing value of <design_name> from <$design_name> to <$cur_design> since current design is empty."
      set design_name [get_property NAME $cur_design]
   }
   common::send_gid_msg -ssname BD::TCL -id 2002 -severity "INFO" "Constructing design in IPI design <$cur_design>..."

} elseif { ${cur_design} ne "" && $list_cells ne "" && $cur_design eq $design_name } {
   # USE CASES:
   #    5) Current design opened AND has components AND same names.

   set errMsg "Design <$design_name> already exists in your project, please set the variable <design_name> to another value."
   set nRet 1
} elseif { [get_files -quiet ${design_name}.bd] ne "" } {
   # USE CASES: 
   #    6) Current opened design, has components, but diff names, design_name exists in project.
   #    7) No opened design, design_name exists in project.

   set errMsg "Design <$design_name> already exists in your project, please set the variable <design_name> to another value."
   set nRet 2

} else {
   # USE CASES:
   #    8) No opened design, design_name not in project.
   #    9) Current opened design, has components, but diff names, design_name not in project.

   common::send_gid_msg -ssname BD::TCL -id 2003 -severity "INFO" "Currently there is no design <$design_name> in project, so creating one..."

   create_bd_design $design_name

   common::send_gid_msg -ssname BD::TCL -id 2004 -severity "INFO" "Making design <$design_name> as current_bd_design."
   current_bd_design $design_name

}

common::send_gid_msg -ssname BD::TCL -id 2005 -severity "INFO" "Currently the variable <design_name> is equal to \"$design_name\"."

if { $nRet != 0 } {
   catch {common::send_gid_msg -ssname BD::TCL -id 2006 -severity "ERROR" $errMsg}
   return $nRet
}

set bCheckIPsPassed 1
##################################################################
# CHECK IPs
##################################################################
set bCheckIPs 1
if { $bCheckIPs == 1 } {
   set list_check_ips "\ 
xilinx.com:ip:axi_iic:2.1\
xilinx.com:ip:axi_intc:4.1\
xilinx.com:ip:smartconnect:1.0\
xilinx.com:ip:axi_uartlite:2.0\
xilinx.com:ip:clk_wiz:6.0\
xilinx.com:ip:ila:6.2\
xilinx.com:ip:mdm:3.2\
xilinx.com:ip:microblaze:11.0\
xilinx.com:ip:mig_7series:4.2\
xilinx.com:ip:mipi_csi2_rx_subsystem:5.1\
xilinx.com:ip:oddr:1.0\
xilinx.com:ip:proc_sys_reset:5.0\
xilinx.com:ip:system_ila:1.1\
xilinx.com:ip:util_ds_buf:2.2\
xilinx.com:ip:v_axi4s_vid_out:4.0\
xilinx.com:ip:v_demosaic:1.1\
xilinx.com:ip:v_frmbuf_rd:2.2\
xilinx.com:ip:v_frmbuf_wr:2.2\
xilinx.com:ip:v_proc_ss:2.3\
xilinx.com:ip:v_tc:6.2\
xilinx.com:ip:xlconcat:2.1\
xilinx.com:ip:xlconstant:1.1\
xilinx.com:ip:xlslice:1.0\
xilinx.com:ip:lmb_bram_if_cntlr:4.0\
xilinx.com:ip:lmb_v10:3.0\
xilinx.com:ip:blk_mem_gen:8.4\
"

   set list_ips_missing ""
   common::send_gid_msg -ssname BD::TCL -id 2011 -severity "INFO" "Checking if the following IPs exist in the project's IP catalog: $list_check_ips ."

   foreach ip_vlnv $list_check_ips {
      set ip_obj [get_ipdefs -all $ip_vlnv]
      if { $ip_obj eq "" } {
         lappend list_ips_missing $ip_vlnv
      }
   }

   if { $list_ips_missing ne "" } {
      catch {common::send_gid_msg -ssname BD::TCL -id 2012 -severity "ERROR" "The following IPs are not found in the IP Catalog:\n  $list_ips_missing\n\nResolution: Please add the repository containing the IP(s) to the project." }
      set bCheckIPsPassed 0
   }

}

if { $bCheckIPsPassed != 1 } {
  common::send_gid_msg -ssname BD::TCL -id 2023 -severity "WARNING" "Will not continue with creation of design due to the error(s) above."
  return 3
}


##################################################################
# MIG PRJ FILE TCL PROCs
##################################################################

proc write_mig_file_design_1_mig_7series_0_1 { str_mig_prj_filepath } {

   file mkdir [ file dirname "$str_mig_prj_filepath" ]
   set mig_prj_file [open $str_mig_prj_filepath  w+]

   puts $mig_prj_file {<?xml version="1.0" encoding="UTF-8" standalone="no" ?>}
   puts $mig_prj_file {<Project NoOfControllers="1">}
   puts $mig_prj_file {  }
   puts $mig_prj_file {<!-- IMPORTANT: This is an internal file that has been generated by the MIG software. Any direct editing or changes made to this file may result in unpredictable behavior or data corruption. It is strongly advised that users do not edit the contents of this file. Re-run the MIG GUI with the required settings if any of the options provided below need to be altered. -->}
   puts $mig_prj_file {  <ModuleName>design_1_mig_7series_0_1</ModuleName>}
   puts $mig_prj_file {  <dci_inouts_inputs>1</dci_inouts_inputs>}
   puts $mig_prj_file {  <dci_inputs>1</dci_inputs>}
   puts $mig_prj_file {  <Debug_En>OFF</Debug_En>}
   puts $mig_prj_file {  <DataDepth_En>1024</DataDepth_En>}
   puts $mig_prj_file {  <LowPower_En>ON</LowPower_En>}
   puts $mig_prj_file {  <XADC_En>Enabled</XADC_En>}
   puts $mig_prj_file {  <TargetFPGA>xc7a200t-fbg676/-2</TargetFPGA>}
   puts $mig_prj_file {  <Version>4.2</Version>}
   puts $mig_prj_file {  <SystemClock>No Buffer</SystemClock>}
   puts $mig_prj_file {  <ReferenceClock>Use System Clock</ReferenceClock>}
   puts $mig_prj_file {  <SysResetPolarity>ACTIVE HIGH</SysResetPolarity>}
   puts $mig_prj_file {  <BankSelectionFlag>FALSE</BankSelectionFlag>}
   puts $mig_prj_file {  <InternalVref>0</InternalVref>}
   puts $mig_prj_file {  <dci_hr_inouts_inputs>50 Ohms</dci_hr_inouts_inputs>}
   puts $mig_prj_file {  <dci_cascade>0</dci_cascade>}
   puts $mig_prj_file {  <Controller number="0">}
   puts $mig_prj_file {    <MemoryDevice>DDR3_SDRAM/SODIMMs/MT8JTF12864HZ-1G6</MemoryDevice>}
   puts $mig_prj_file {    <TimePeriod>2500</TimePeriod>}
   puts $mig_prj_file {    <VccAuxIO>1.8V</VccAuxIO>}
   puts $mig_prj_file {    <PHYRatio>4:1</PHYRatio>}
   puts $mig_prj_file {    <InputClkFreq>200</InputClkFreq>}
   puts $mig_prj_file {    <UIExtraClocks>1</UIExtraClocks>}
   puts $mig_prj_file {    <MMCM_VCO>800</MMCM_VCO>}
   puts $mig_prj_file {    <MMCMClkOut0> 8.000</MMCMClkOut0>}
   puts $mig_prj_file {    <MMCMClkOut1>1</MMCMClkOut1>}
   puts $mig_prj_file {    <MMCMClkOut2>1</MMCMClkOut2>}
   puts $mig_prj_file {    <MMCMClkOut3>1</MMCMClkOut3>}
   puts $mig_prj_file {    <MMCMClkOut4>1</MMCMClkOut4>}
   puts $mig_prj_file {    <DataWidth>64</DataWidth>}
   puts $mig_prj_file {    <DeepMemory>1</DeepMemory>}
   puts $mig_prj_file {    <DataMask>1</DataMask>}
   puts $mig_prj_file {    <ECC>Disabled</ECC>}
   puts $mig_prj_file {    <Ordering>Normal</Ordering>}
   puts $mig_prj_file {    <BankMachineCnt>4</BankMachineCnt>}
   puts $mig_prj_file {    <CustomPart>FALSE</CustomPart>}
   puts $mig_prj_file {    <NewPartName/>}
   puts $mig_prj_file {    <RowAddress>14</RowAddress>}
   puts $mig_prj_file {    <ColAddress>10</ColAddress>}
   puts $mig_prj_file {    <BankAddress>3</BankAddress>}
   puts $mig_prj_file {    <MemoryVoltage>1.5V</MemoryVoltage>}
   puts $mig_prj_file {    <C0_MEM_SIZE>1073741824</C0_MEM_SIZE>}
   puts $mig_prj_file {    <UserMemoryAddressMap>BANK_ROW_COLUMN</UserMemoryAddressMap>}
   puts $mig_prj_file {    <PinSelection>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="M4" SLEW="" VCCAUX_IO="" name="ddr3_addr[0]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="N7" SLEW="" VCCAUX_IO="" name="ddr3_addr[10]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="L5" SLEW="" VCCAUX_IO="" name="ddr3_addr[11]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="L7" SLEW="" VCCAUX_IO="" name="ddr3_addr[12]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="N6" SLEW="" VCCAUX_IO="" name="ddr3_addr[13]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="J3" SLEW="" VCCAUX_IO="" name="ddr3_addr[1]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="J1" SLEW="" VCCAUX_IO="" name="ddr3_addr[2]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="L4" SLEW="" VCCAUX_IO="" name="ddr3_addr[3]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="K5" SLEW="" VCCAUX_IO="" name="ddr3_addr[4]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="M7" SLEW="" VCCAUX_IO="" name="ddr3_addr[5]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="K1" SLEW="" VCCAUX_IO="" name="ddr3_addr[6]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="M6" SLEW="" VCCAUX_IO="" name="ddr3_addr[7]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="H1" SLEW="" VCCAUX_IO="" name="ddr3_addr[8]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="K3" SLEW="" VCCAUX_IO="" name="ddr3_addr[9]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="N1" SLEW="" VCCAUX_IO="" name="ddr3_ba[0]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="M1" SLEW="" VCCAUX_IO="" name="ddr3_ba[1]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="H2" SLEW="" VCCAUX_IO="" name="ddr3_ba[2]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="T4" SLEW="" VCCAUX_IO="" name="ddr3_cas_n"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="L2" SLEW="" VCCAUX_IO="" name="ddr3_ck_n[0]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="M2" SLEW="" VCCAUX_IO="" name="ddr3_ck_p[0]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="P4" SLEW="" VCCAUX_IO="" name="ddr3_cke[0]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="T3" SLEW="" VCCAUX_IO="" name="ddr3_cs_n[0]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AC6" SLEW="" VCCAUX_IO="" name="ddr3_dm[0]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AC4" SLEW="" VCCAUX_IO="" name="ddr3_dm[1]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AA3" SLEW="" VCCAUX_IO="" name="ddr3_dm[2]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="U7" SLEW="" VCCAUX_IO="" name="ddr3_dm[3]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="G1" SLEW="" VCCAUX_IO="" name="ddr3_dm[4]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="F3" SLEW="" VCCAUX_IO="" name="ddr3_dm[5]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="G5" SLEW="" VCCAUX_IO="" name="ddr3_dm[6]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="H9" SLEW="" VCCAUX_IO="" name="ddr3_dm[7]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AB6" SLEW="" VCCAUX_IO="" name="ddr3_dq[0]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AF3" SLEW="" VCCAUX_IO="" name="ddr3_dq[10]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AE3" SLEW="" VCCAUX_IO="" name="ddr3_dq[11]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AD3" SLEW="" VCCAUX_IO="" name="ddr3_dq[12]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AC3" SLEW="" VCCAUX_IO="" name="ddr3_dq[13]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AB4" SLEW="" VCCAUX_IO="" name="ddr3_dq[14]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AA4" SLEW="" VCCAUX_IO="" name="ddr3_dq[15]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AC2" SLEW="" VCCAUX_IO="" name="ddr3_dq[16]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AB2" SLEW="" VCCAUX_IO="" name="ddr3_dq[17]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AF2" SLEW="" VCCAUX_IO="" name="ddr3_dq[18]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AE2" SLEW="" VCCAUX_IO="" name="ddr3_dq[19]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AA8" SLEW="" VCCAUX_IO="" name="ddr3_dq[1]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="Y1" SLEW="" VCCAUX_IO="" name="ddr3_dq[20]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="Y2" SLEW="" VCCAUX_IO="" name="ddr3_dq[21]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AC1" SLEW="" VCCAUX_IO="" name="ddr3_dq[22]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AB1" SLEW="" VCCAUX_IO="" name="ddr3_dq[23]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="Y3" SLEW="" VCCAUX_IO="" name="ddr3_dq[24]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="W3" SLEW="" VCCAUX_IO="" name="ddr3_dq[25]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="W6" SLEW="" VCCAUX_IO="" name="ddr3_dq[26]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="V6" SLEW="" VCCAUX_IO="" name="ddr3_dq[27]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="W4" SLEW="" VCCAUX_IO="" name="ddr3_dq[28]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="W5" SLEW="" VCCAUX_IO="" name="ddr3_dq[29]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="Y8" SLEW="" VCCAUX_IO="" name="ddr3_dq[2]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="W1" SLEW="" VCCAUX_IO="" name="ddr3_dq[30]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="V1" SLEW="" VCCAUX_IO="" name="ddr3_dq[31]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="G2" SLEW="" VCCAUX_IO="" name="ddr3_dq[32]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="D1" SLEW="" VCCAUX_IO="" name="ddr3_dq[33]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="E1" SLEW="" VCCAUX_IO="" name="ddr3_dq[34]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="E2" SLEW="" VCCAUX_IO="" name="ddr3_dq[35]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="F2" SLEW="" VCCAUX_IO="" name="ddr3_dq[36]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="A2" SLEW="" VCCAUX_IO="" name="ddr3_dq[37]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="A3" SLEW="" VCCAUX_IO="" name="ddr3_dq[38]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="C2" SLEW="" VCCAUX_IO="" name="ddr3_dq[39]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AB5" SLEW="" VCCAUX_IO="" name="ddr3_dq[3]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="C3" SLEW="" VCCAUX_IO="" name="ddr3_dq[40]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="D3" SLEW="" VCCAUX_IO="" name="ddr3_dq[41]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="A4" SLEW="" VCCAUX_IO="" name="ddr3_dq[42]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="B4" SLEW="" VCCAUX_IO="" name="ddr3_dq[43]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="C4" SLEW="" VCCAUX_IO="" name="ddr3_dq[44]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="D4" SLEW="" VCCAUX_IO="" name="ddr3_dq[45]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="D5" SLEW="" VCCAUX_IO="" name="ddr3_dq[46]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="E5" SLEW="" VCCAUX_IO="" name="ddr3_dq[47]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="F4" SLEW="" VCCAUX_IO="" name="ddr3_dq[48]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="G4" SLEW="" VCCAUX_IO="" name="ddr3_dq[49]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AA5" SLEW="" VCCAUX_IO="" name="ddr3_dq[4]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="K6" SLEW="" VCCAUX_IO="" name="ddr3_dq[50]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="K7" SLEW="" VCCAUX_IO="" name="ddr3_dq[51]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="K8" SLEW="" VCCAUX_IO="" name="ddr3_dq[52]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="L8" SLEW="" VCCAUX_IO="" name="ddr3_dq[53]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="J5" SLEW="" VCCAUX_IO="" name="ddr3_dq[54]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="J6" SLEW="" VCCAUX_IO="" name="ddr3_dq[55]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="G6" SLEW="" VCCAUX_IO="" name="ddr3_dq[56]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="H6" SLEW="" VCCAUX_IO="" name="ddr3_dq[57]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="F7" SLEW="" VCCAUX_IO="" name="ddr3_dq[58]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="F8" SLEW="" VCCAUX_IO="" name="ddr3_dq[59]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="Y5" SLEW="" VCCAUX_IO="" name="ddr3_dq[5]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="G8" SLEW="" VCCAUX_IO="" name="ddr3_dq[60]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="H8" SLEW="" VCCAUX_IO="" name="ddr3_dq[61]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="D6" SLEW="" VCCAUX_IO="" name="ddr3_dq[62]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="E6" SLEW="" VCCAUX_IO="" name="ddr3_dq[63]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="Y6" SLEW="" VCCAUX_IO="" name="ddr3_dq[6]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="Y7" SLEW="" VCCAUX_IO="" name="ddr3_dq[7]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AF4" SLEW="" VCCAUX_IO="" name="ddr3_dq[8]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="AF5" SLEW="" VCCAUX_IO="" name="ddr3_dq[9]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="W8" SLEW="" VCCAUX_IO="" name="ddr3_dqs_n[0]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="AE5" SLEW="" VCCAUX_IO="" name="ddr3_dqs_n[1]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="AE1" SLEW="" VCCAUX_IO="" name="ddr3_dqs_n[2]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="V2" SLEW="" VCCAUX_IO="" name="ddr3_dqs_n[3]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="B1" SLEW="" VCCAUX_IO="" name="ddr3_dqs_n[4]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="A5" SLEW="" VCCAUX_IO="" name="ddr3_dqs_n[5]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="H4" SLEW="" VCCAUX_IO="" name="ddr3_dqs_n[6]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="G7" SLEW="" VCCAUX_IO="" name="ddr3_dqs_n[7]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="V8" SLEW="" VCCAUX_IO="" name="ddr3_dqs_p[0]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="AD5" SLEW="" VCCAUX_IO="" name="ddr3_dqs_p[1]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="AD1" SLEW="" VCCAUX_IO="" name="ddr3_dqs_p[2]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="V3" SLEW="" VCCAUX_IO="" name="ddr3_dqs_p[3]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="C1" SLEW="" VCCAUX_IO="" name="ddr3_dqs_p[4]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="B5" SLEW="" VCCAUX_IO="" name="ddr3_dqs_p[5]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="J4" SLEW="" VCCAUX_IO="" name="ddr3_dqs_p[6]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="DIFF_SSTL15" PADName="H7" SLEW="" VCCAUX_IO="" name="ddr3_dqs_p[7]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="R2" SLEW="" VCCAUX_IO="" name="ddr3_odt[0]"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="P1" SLEW="" VCCAUX_IO="" name="ddr3_ras_n"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="LVCMOS15" PADName="N8" SLEW="" VCCAUX_IO="" name="ddr3_reset_n"/>}
   puts $mig_prj_file {      <Pin IN_TERM="" IOSTANDARD="SSTL15" PADName="R1" SLEW="" VCCAUX_IO="" name="ddr3_we_n"/>}
   puts $mig_prj_file {    </PinSelection>}
   puts $mig_prj_file {    <System_Control>}
   puts $mig_prj_file {      <Pin Bank="Select Bank" PADName="No connect" name="sys_rst"/>}
   puts $mig_prj_file {      <Pin Bank="14" PADName="M26" name="init_calib_complete"/>}
   puts $mig_prj_file {      <Pin Bank="14" PADName="T24" name="tg_compare_error"/>}
   puts $mig_prj_file {    </System_Control>}
   puts $mig_prj_file {    <TimingParameters>}
   puts $mig_prj_file {      <Parameters tcke="5" tfaw="30" tras="35" trcd="13.75" trefi="7.8" trfc="110" trp="13.75" trrd="6" trtp="7.5" twtr="7.5"/>}
   puts $mig_prj_file {    </TimingParameters>}
   puts $mig_prj_file {    <mrBurstLength name="Burst Length">8 - Fixed</mrBurstLength>}
   puts $mig_prj_file {    <mrBurstType name="Read Burst Type and Length">Sequential</mrBurstType>}
   puts $mig_prj_file {    <mrCasLatency name="CAS Latency">6</mrCasLatency>}
   puts $mig_prj_file {    <mrMode name="Mode">Normal</mrMode>}
   puts $mig_prj_file {    <mrDllReset name="DLL Reset">No</mrDllReset>}
   puts $mig_prj_file {    <mrPdMode name="DLL control for precharge PD">Slow Exit</mrPdMode>}
   puts $mig_prj_file {    <emrDllEnable name="DLL Enable">Enable</emrDllEnable>}
   puts $mig_prj_file {    <emrOutputDriveStrength name="Output Driver Impedance Control">RZQ/7</emrOutputDriveStrength>}
   puts $mig_prj_file {    <emrMirrorSelection name="Address Mirroring">Disable</emrMirrorSelection>}
   puts $mig_prj_file {    <emrCSSelection name="Controller Chip Select Pin">Enable</emrCSSelection>}
   puts $mig_prj_file {    <emrRTT name="RTT (nominal) - On Die Termination (ODT)">RZQ/4</emrRTT>}
   puts $mig_prj_file {    <emrPosted name="Additive Latency (AL)">0</emrPosted>}
   puts $mig_prj_file {    <emrOCD name="Write Leveling Enable">Disabled</emrOCD>}
   puts $mig_prj_file {    <emrDQS name="TDQS enable">Enabled</emrDQS>}
   puts $mig_prj_file {    <emrRDQS name="Qoff">Output Buffer Enabled</emrRDQS>}
   puts $mig_prj_file {    <mr2PartialArraySelfRefresh name="Partial-Array Self Refresh">Full Array</mr2PartialArraySelfRefresh>}
   puts $mig_prj_file {    <mr2CasWriteLatency name="CAS write latency">5</mr2CasWriteLatency>}
   puts $mig_prj_file {    <mr2AutoSelfRefresh name="Auto Self Refresh">Enabled</mr2AutoSelfRefresh>}
   puts $mig_prj_file {    <mr2SelfRefreshTempRange name="High Temparature Self Refresh Rate">Normal</mr2SelfRefreshTempRange>}
   puts $mig_prj_file {    <mr2RTTWR name="RTT_WR - Dynamic On Die Termination (ODT)">Dynamic ODT off</mr2RTTWR>}
   puts $mig_prj_file {    <PortInterface>AXI</PortInterface>}
   puts $mig_prj_file {    <AXIParameters>}
   puts $mig_prj_file {      <C0_C_RD_WR_ARB_ALGORITHM>RD_PRI_REG</C0_C_RD_WR_ARB_ALGORITHM>}
   puts $mig_prj_file {      <C0_S_AXI_ADDR_WIDTH>30</C0_S_AXI_ADDR_WIDTH>}
   puts $mig_prj_file {      <C0_S_AXI_DATA_WIDTH>512</C0_S_AXI_DATA_WIDTH>}
   puts $mig_prj_file {      <C0_S_AXI_ID_WIDTH>1</C0_S_AXI_ID_WIDTH>}
   puts $mig_prj_file {      <C0_S_AXI_SUPPORTS_NARROW_BURST>0</C0_S_AXI_SUPPORTS_NARROW_BURST>}
   puts $mig_prj_file {    </AXIParameters>}
   puts $mig_prj_file {  </Controller>}
   puts $mig_prj_file {</Project>}

   close $mig_prj_file
}
# End of write_mig_file_design_1_mig_7series_0_1()



##################################################################
# DESIGN PROCs
##################################################################


# Hierarchical cell: microblaze_0_local_memory
proc create_hier_cell_microblaze_0_local_memory { parentCell nameHier } {

  variable script_folder

  if { $parentCell eq "" || $nameHier eq "" } {
     catch {common::send_gid_msg -ssname BD::TCL -id 2092 -severity "ERROR" "create_hier_cell_microblaze_0_local_memory() - Empty argument(s)!"}
     return
  }

  # Get object for parentCell
  set parentObj [get_bd_cells $parentCell]
  if { $parentObj == "" } {
     catch {common::send_gid_msg -ssname BD::TCL -id 2090 -severity "ERROR" "Unable to find parent cell <$parentCell>!"}
     return
  }

  # Make sure parentObj is hier blk
  set parentType [get_property TYPE $parentObj]
  if { $parentType ne "hier" } {
     catch {common::send_gid_msg -ssname BD::TCL -id 2091 -severity "ERROR" "Parent <$parentObj> has TYPE = <$parentType>. Expected to be <hier>."}
     return
  }

  # Save current instance; Restore later
  set oldCurInst [current_bd_instance .]

  # Set parent object as current
  current_bd_instance $parentObj

  # Create cell and set as current instance
  set hier_obj [create_bd_cell -type hier $nameHier]
  current_bd_instance $hier_obj

  # Create interface pins
  create_bd_intf_pin -mode MirroredMaster -vlnv xilinx.com:interface:lmb_rtl:1.0 DLMB

  create_bd_intf_pin -mode MirroredMaster -vlnv xilinx.com:interface:lmb_rtl:1.0 ILMB


  # Create pins
  create_bd_pin -dir I -type clk LMB_Clk
  create_bd_pin -dir I -type rst SYS_Rst

  # Create instance: dlmb_bram_if_cntlr, and set properties
  set dlmb_bram_if_cntlr [ create_bd_cell -type ip -vlnv xilinx.com:ip:lmb_bram_if_cntlr:4.0 dlmb_bram_if_cntlr ]
  set_property -dict [ list \
   CONFIG.C_ECC {0} \
 ] $dlmb_bram_if_cntlr

  # Create instance: dlmb_v10, and set properties
  set dlmb_v10 [ create_bd_cell -type ip -vlnv xilinx.com:ip:lmb_v10:3.0 dlmb_v10 ]

  # Create instance: ilmb_bram_if_cntlr, and set properties
  set ilmb_bram_if_cntlr [ create_bd_cell -type ip -vlnv xilinx.com:ip:lmb_bram_if_cntlr:4.0 ilmb_bram_if_cntlr ]
  set_property -dict [ list \
   CONFIG.C_ECC {0} \
 ] $ilmb_bram_if_cntlr

  # Create instance: ilmb_v10, and set properties
  set ilmb_v10 [ create_bd_cell -type ip -vlnv xilinx.com:ip:lmb_v10:3.0 ilmb_v10 ]

  # Create instance: lmb_bram, and set properties
  set lmb_bram [ create_bd_cell -type ip -vlnv xilinx.com:ip:blk_mem_gen:8.4 lmb_bram ]
  set_property -dict [ list \
   CONFIG.Memory_Type {True_Dual_Port_RAM} \
   CONFIG.use_bram_block {BRAM_Controller} \
 ] $lmb_bram

  # Create interface connections
  connect_bd_intf_net -intf_net microblaze_0_dlmb [get_bd_intf_pins DLMB] [get_bd_intf_pins dlmb_v10/LMB_M]
  connect_bd_intf_net -intf_net microblaze_0_dlmb_bus [get_bd_intf_pins dlmb_bram_if_cntlr/SLMB] [get_bd_intf_pins dlmb_v10/LMB_Sl_0]
  connect_bd_intf_net -intf_net microblaze_0_dlmb_cntlr [get_bd_intf_pins dlmb_bram_if_cntlr/BRAM_PORT] [get_bd_intf_pins lmb_bram/BRAM_PORTA]
  connect_bd_intf_net -intf_net microblaze_0_ilmb [get_bd_intf_pins ILMB] [get_bd_intf_pins ilmb_v10/LMB_M]
  connect_bd_intf_net -intf_net microblaze_0_ilmb_bus [get_bd_intf_pins ilmb_bram_if_cntlr/SLMB] [get_bd_intf_pins ilmb_v10/LMB_Sl_0]
  connect_bd_intf_net -intf_net microblaze_0_ilmb_cntlr [get_bd_intf_pins ilmb_bram_if_cntlr/BRAM_PORT] [get_bd_intf_pins lmb_bram/BRAM_PORTB]

  # Create port connections
  connect_bd_net -net SYS_Rst_1 [get_bd_pins SYS_Rst] [get_bd_pins dlmb_bram_if_cntlr/LMB_Rst] [get_bd_pins dlmb_v10/SYS_Rst] [get_bd_pins ilmb_bram_if_cntlr/LMB_Rst] [get_bd_pins ilmb_v10/SYS_Rst]
  connect_bd_net -net microblaze_0_Clk [get_bd_pins LMB_Clk] [get_bd_pins dlmb_bram_if_cntlr/LMB_Clk] [get_bd_pins dlmb_v10/LMB_Clk] [get_bd_pins ilmb_bram_if_cntlr/LMB_Clk] [get_bd_pins ilmb_v10/LMB_Clk]

  # Restore current instance
  current_bd_instance $oldCurInst
}


# Procedure to create entire design; Provide argument to make
# procedure reusable. If parentCell is "", will use root.
proc create_root_design { parentCell } {

  variable script_folder
  variable design_name

  if { $parentCell eq "" } {
     set parentCell [get_bd_cells /]
  }

  # Get object for parentCell
  set parentObj [get_bd_cells $parentCell]
  if { $parentObj == "" } {
     catch {common::send_gid_msg -ssname BD::TCL -id 2090 -severity "ERROR" "Unable to find parent cell <$parentCell>!"}
     return
  }

  # Make sure parentObj is hier blk
  set parentType [get_property TYPE $parentObj]
  if { $parentType ne "hier" } {
     catch {common::send_gid_msg -ssname BD::TCL -id 2091 -severity "ERROR" "Parent <$parentObj> has TYPE = <$parentType>. Expected to be <hier>."}
     return
  }

  # Save current instance; Restore later
  set oldCurInst [current_bd_instance .]

  # Set parent object as current
  current_bd_instance $parentObj


  # Create interface ports
  set IIC_MAIN [ create_bd_intf_port -mode Master -vlnv xilinx.com:interface:iic_rtl:1.0 IIC_MAIN ]

  set ddr3_sdram [ create_bd_intf_port -mode Master -vlnv xilinx.com:interface:ddrx_rtl:1.0 ddr3_sdram ]

  set mipi_phy_if_0 [ create_bd_intf_port -mode Slave -vlnv xilinx.com:interface:mipi_phy_rtl:1.0 mipi_phy_if_0 ]

  set rs232_uart [ create_bd_intf_port -mode Master -vlnv xilinx.com:interface:uart_rtl:1.0 rs232_uart ]

  set sys_diff_clock [ create_bd_intf_port -mode Slave -vlnv xilinx.com:interface:diff_clock_rtl:1.0 sys_diff_clock ]
  set_property -dict [ list \
   CONFIG.FREQ_HZ {200000000} \
   ] $sys_diff_clock


  # Create ports
  set HDMI_B_D [ create_bd_port -dir O -from 7 -to 0 HDMI_B_D ]
  set HDMI_G_D [ create_bd_port -dir O -from 7 -to 0 HDMI_G_D ]
  set HDMI_R_CLK [ create_bd_port -dir O -type clk HDMI_R_CLK ]
  set HDMI_R_D [ create_bd_port -dir O -from 7 -to 0 HDMI_R_D ]
  set HDMI_R_DE [ create_bd_port -dir O HDMI_R_DE ]
  set HDMI_R_HSYNC [ create_bd_port -dir O HDMI_R_HSYNC ]
  set HDMI_R_VSYNC [ create_bd_port -dir O HDMI_R_VSYNC ]
  set cam_pwr_up [ create_bd_port -dir O -from 0 -to 0 cam_pwr_up ]
  set reset [ create_bd_port -dir I -type rst reset ]
  set_property -dict [ list \
   CONFIG.POLARITY {ACTIVE_HIGH} \
 ] $reset

  # Create instance: axi_iic_0, and set properties
  set axi_iic_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_iic:2.1 axi_iic_0 ]

  # Create instance: axi_intc_0, and set properties
  set axi_intc_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_intc:4.1 axi_intc_0 ]

  # Create instance: axi_smc, and set properties
  set axi_smc [ create_bd_cell -type ip -vlnv xilinx.com:ip:smartconnect:1.0 axi_smc ]
  set_property -dict [ list \
   CONFIG.NUM_CLKS {2} \
   CONFIG.NUM_MI {10} \
   CONFIG.NUM_SI {4} \
 ] $axi_smc

  # Create instance: axi_uartlite_0, and set properties
  set axi_uartlite_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_uartlite:2.0 axi_uartlite_0 ]
  set_property -dict [ list \
   CONFIG.UARTLITE_BOARD_INTERFACE {rs232_uart} \
   CONFIG.USE_BOARD_FLOW {true} \
 ] $axi_uartlite_0

  # Create instance: clk_wiz_0, and set properties
  set clk_wiz_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:clk_wiz:6.0 clk_wiz_0 ]
  set_property -dict [ list \
   CONFIG.CLKOUT1_JITTER {96.237} \
   CONFIG.CLKOUT1_PHASE_ERROR {87.375} \
   CONFIG.CLKOUT1_REQUESTED_OUT_FREQ {200.000} \
   CONFIG.CLKOUT2_JITTER {101.763} \
   CONFIG.CLKOUT2_PHASE_ERROR {87.375} \
   CONFIG.CLKOUT2_REQUESTED_OUT_FREQ {150.000} \
   CONFIG.CLKOUT2_USED {true} \
   CONFIG.CLK_IN1_BOARD_INTERFACE {Custom} \
   CONFIG.MMCM_CLKFBOUT_MULT_F {5.250} \
   CONFIG.MMCM_CLKOUT0_DIVIDE_F {5.250} \
   CONFIG.MMCM_CLKOUT1_DIVIDE {7} \
   CONFIG.NUM_OUT_CLKS {2} \
   CONFIG.PRIM_SOURCE {No_buffer} \
   CONFIG.RESET_BOARD_INTERFACE {reset} \
   CONFIG.USE_BOARD_FLOW {true} \
 ] $clk_wiz_0

  # Create instance: ila_0, and set properties
  set ila_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:ila:6.2 ila_0 ]
  set_property -dict [ list \
   CONFIG.C_ENABLE_ILA_AXI_MON {false} \
   CONFIG.C_MONITOR_TYPE {Native} \
   CONFIG.C_NUM_OF_PROBES {6} \
 ] $ila_0

  # Create instance: ila_1, and set properties
  set ila_1 [ create_bd_cell -type ip -vlnv xilinx.com:ip:ila:6.2 ila_1 ]
  set_property -dict [ list \
   CONFIG.C_ENABLE_ILA_AXI_MON {false} \
   CONFIG.C_MONITOR_TYPE {Native} \
   CONFIG.C_NUM_OF_PROBES {4} \
   CONFIG.C_PROBE0_WIDTH {8} \
 ] $ila_1

  # Create instance: mdm_1, and set properties
  set mdm_1 [ create_bd_cell -type ip -vlnv xilinx.com:ip:mdm:3.2 mdm_1 ]

  # Create instance: microblaze_0, and set properties
  set microblaze_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:microblaze:11.0 microblaze_0 ]
  set_property -dict [ list \
   CONFIG.C_DEBUG_ENABLED {1} \
   CONFIG.C_D_AXI {1} \
   CONFIG.C_D_LMB {1} \
   CONFIG.C_I_AXI {1} \
   CONFIG.C_I_LMB {1} \
 ] $microblaze_0

  # Create instance: microblaze_0_local_memory
  create_hier_cell_microblaze_0_local_memory [current_bd_instance .] microblaze_0_local_memory

  # Create instance: mig_7series_0, and set properties
  set mig_7series_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:mig_7series:4.2 mig_7series_0 ]

  # Generate the PRJ File for MIG
  set str_mig_folder [get_property IP_DIR [ get_ips [ get_property CONFIG.Component_Name $mig_7series_0 ] ] ]
  set str_mig_file_name mig_a.prj
  set str_mig_file_path ${str_mig_folder}/${str_mig_file_name}

  write_mig_file_design_1_mig_7series_0_1 $str_mig_file_path

  set_property -dict [ list \
   CONFIG.BOARD_MIG_PARAM {ddr3_sdram} \
   CONFIG.MIG_DONT_TOUCH_PARAM {Custom} \
   CONFIG.RESET_BOARD_INTERFACE {Custom} \
   CONFIG.XML_INPUT_FILE {mig_a.prj} \
 ] $mig_7series_0

  # Create instance: mipi_csi2_rx_subsyst_0, and set properties
  set mipi_csi2_rx_subsyst_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:mipi_csi2_rx_subsystem:5.1 mipi_csi2_rx_subsyst_0 ]
  set_property -dict [ list \
   CONFIG.CMN_NUM_LANES {2} \
   CONFIG.CMN_PXL_FORMAT {RAW10} \
   CONFIG.C_CAL_MODE {FIXED} \
   CONFIG.C_DPHY_LANES {2} \
   CONFIG.C_EN_7S_LINERATE_CHECK {true} \
   CONFIG.C_HS_LINE_RATE {900} \
   CONFIG.C_HS_SETTLE_NS {146} \
   CONFIG.C_IDLY_TAP {10} \
   CONFIG.C_SHARE_IDLYCTRL {true} \
   CONFIG.DPY_EN_REG_IF {true} \
   CONFIG.DPY_LINE_RATE {900} \
 ] $mipi_csi2_rx_subsyst_0

  # Create instance: oddr_0, and set properties
  set oddr_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:oddr:1.0 oddr_0 ]

  # Create instance: rst_clk_wiz_0_150M, and set properties
  set rst_clk_wiz_0_150M [ create_bd_cell -type ip -vlnv xilinx.com:ip:proc_sys_reset:5.0 rst_clk_wiz_0_150M ]

  # Create instance: rst_mig_7series_0_100M, and set properties
  set rst_mig_7series_0_100M [ create_bd_cell -type ip -vlnv xilinx.com:ip:proc_sys_reset:5.0 rst_mig_7series_0_100M ]

  # Create instance: system_ila_0, and set properties
  set system_ila_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:system_ila:1.1 system_ila_0 ]
  set_property -dict [ list \
   CONFIG.C_BRAM_CNT {6} \
   CONFIG.C_SLOT_0_INTF_TYPE {xilinx.com:interface:axis_rtl:1.0} \
 ] $system_ila_0

  # Create instance: system_ila_1, and set properties
  set system_ila_1 [ create_bd_cell -type ip -vlnv xilinx.com:ip:system_ila:1.1 system_ila_1 ]
  set_property -dict [ list \
   CONFIG.C_BRAM_CNT {6} \
   CONFIG.C_SLOT_0_INTF_TYPE {xilinx.com:interface:axis_rtl:1.0} \
 ] $system_ila_1

  # Create instance: util_ds_buf_0, and set properties
  set util_ds_buf_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:util_ds_buf:2.2 util_ds_buf_0 ]
  set_property -dict [ list \
   CONFIG.DIFF_CLK_IN_BOARD_INTERFACE {sys_diff_clock} \
 ] $util_ds_buf_0

  # Create instance: util_ds_buf_1, and set properties
  set util_ds_buf_1 [ create_bd_cell -type ip -vlnv xilinx.com:ip:util_ds_buf:2.2 util_ds_buf_1 ]
  set_property -dict [ list \
   CONFIG.C_BUF_TYPE {BUFG} \
 ] $util_ds_buf_1

  # Create instance: v_axi4s_vid_out_0, and set properties
  set v_axi4s_vid_out_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:v_axi4s_vid_out:4.0 v_axi4s_vid_out_0 ]
  set_property -dict [ list \
   CONFIG.C_HAS_ASYNC_CLK {1} \
 ] $v_axi4s_vid_out_0

  # Create instance: v_demosaic_0, and set properties
  set v_demosaic_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:v_demosaic:1.1 v_demosaic_0 ]
  set_property -dict [ list \
   CONFIG.MAX_COLS {2048} \
   CONFIG.MAX_ROWS {1080} \
 ] $v_demosaic_0

  # Create instance: v_frmbuf_rd_0, and set properties
  set v_frmbuf_rd_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:v_frmbuf_rd:2.2 v_frmbuf_rd_0 ]
  set_property -dict [ list \
   CONFIG.AXIMM_DATA_WIDTH {64} \
   CONFIG.C_M_AXI_MM_VIDEO_DATA_WIDTH {64} \
   CONFIG.MAX_COLS {2048} \
   CONFIG.MAX_ROWS {1080} \
   CONFIG.SAMPLES_PER_CLOCK {1} \
 ] $v_frmbuf_rd_0

  # Create instance: v_frmbuf_wr_0, and set properties
  set v_frmbuf_wr_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:v_frmbuf_wr:2.2 v_frmbuf_wr_0 ]
  set_property -dict [ list \
   CONFIG.AXIMM_DATA_WIDTH {64} \
   CONFIG.C_M_AXI_MM_VIDEO_DATA_WIDTH {64} \
   CONFIG.MAX_COLS {2048} \
   CONFIG.MAX_ROWS {1080} \
   CONFIG.SAMPLES_PER_CLOCK {1} \
 ] $v_frmbuf_wr_0

  # Create instance: v_proc_ss_0, and set properties
  set v_proc_ss_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:v_proc_ss:2.3 v_proc_ss_0 ]
  set_property -dict [ list \
   CONFIG.C_AXIMM_DATA_WIDTH {64} \
   CONFIG.C_COLORSPACE_SUPPORT {2} \
   CONFIG.C_MAX_COLS {2048} \
   CONFIG.C_MAX_DATA_WIDTH {8} \
   CONFIG.C_MAX_ROWS {1080} \
   CONFIG.C_SAMPLES_PER_CLK {1} \
   CONFIG.C_TOPOLOGY {3} \
 ] $v_proc_ss_0

  # Create instance: v_tc_0, and set properties
  set v_tc_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:v_tc:6.2 v_tc_0 ]
  set_property -dict [ list \
   CONFIG.enable_detection {false} \
 ] $v_tc_0

  # Create instance: xlconcat_0, and set properties
  set xlconcat_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:xlconcat:2.1 xlconcat_0 ]
  set_property -dict [ list \
   CONFIG.NUM_PORTS {1} \
 ] $xlconcat_0

  # Create instance: xlconstant_0, and set properties
  set xlconstant_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:xlconstant:1.1 xlconstant_0 ]

  # Create instance: xlslice_0, and set properties
  set xlslice_0 [ create_bd_cell -type ip -vlnv xilinx.com:ip:xlslice:1.0 xlslice_0 ]
  set_property -dict [ list \
   CONFIG.DIN_FROM {23} \
   CONFIG.DIN_TO {16} \
   CONFIG.DIN_WIDTH {24} \
   CONFIG.DOUT_WIDTH {8} \
 ] $xlslice_0

  # Create instance: xlslice_1, and set properties
  set xlslice_1 [ create_bd_cell -type ip -vlnv xilinx.com:ip:xlslice:1.0 xlslice_1 ]
  set_property -dict [ list \
   CONFIG.DIN_FROM {7} \
   CONFIG.DIN_TO {0} \
   CONFIG.DIN_WIDTH {24} \
   CONFIG.DOUT_WIDTH {8} \
 ] $xlslice_1

  # Create instance: xlslice_2, and set properties
  set xlslice_2 [ create_bd_cell -type ip -vlnv xilinx.com:ip:xlslice:1.0 xlslice_2 ]
  set_property -dict [ list \
   CONFIG.DIN_FROM {15} \
   CONFIG.DIN_TO {8} \
   CONFIG.DIN_WIDTH {24} \
   CONFIG.DOUT_WIDTH {8} \
 ] $xlslice_2

  # Create instance: xlslice_3, and set properties
  set xlslice_3 [ create_bd_cell -type ip -vlnv xilinx.com:ip:xlslice:1.0 xlslice_3 ]
  set_property -dict [ list \
   CONFIG.DIN_FROM {9} \
   CONFIG.DIN_TO {2} \
   CONFIG.DIN_WIDTH {16} \
   CONFIG.DOUT_WIDTH {8} \
 ] $xlslice_3

  # Create interface connections
  connect_bd_intf_net -intf_net axi_iic_0_IIC [get_bd_intf_ports IIC_MAIN] [get_bd_intf_pins axi_iic_0/IIC]
  connect_bd_intf_net -intf_net axi_intc_0_interrupt [get_bd_intf_pins axi_intc_0/interrupt] [get_bd_intf_pins microblaze_0/INTERRUPT]
  connect_bd_intf_net -intf_net axi_smc_M00_AXI [get_bd_intf_pins axi_smc/M00_AXI] [get_bd_intf_pins mig_7series_0/S_AXI]
  connect_bd_intf_net -intf_net axi_smc_M01_AXI [get_bd_intf_pins axi_smc/M01_AXI] [get_bd_intf_pins axi_uartlite_0/S_AXI]
  connect_bd_intf_net -intf_net axi_smc_M02_AXI [get_bd_intf_pins axi_iic_0/S_AXI] [get_bd_intf_pins axi_smc/M02_AXI]
  connect_bd_intf_net -intf_net axi_smc_M03_AXI [get_bd_intf_pins axi_smc/M03_AXI] [get_bd_intf_pins v_tc_0/ctrl]
  connect_bd_intf_net -intf_net axi_smc_M04_AXI [get_bd_intf_pins axi_smc/M04_AXI] [get_bd_intf_pins v_frmbuf_rd_0/s_axi_CTRL]
  connect_bd_intf_net -intf_net axi_smc_M05_AXI [get_bd_intf_pins axi_smc/M05_AXI] [get_bd_intf_pins v_proc_ss_0/s_axi_ctrl]
  connect_bd_intf_net -intf_net axi_smc_M06_AXI [get_bd_intf_pins axi_smc/M06_AXI] [get_bd_intf_pins mipi_csi2_rx_subsyst_0/csirxss_s_axi]
  connect_bd_intf_net -intf_net axi_smc_M07_AXI [get_bd_intf_pins axi_smc/M07_AXI] [get_bd_intf_pins v_frmbuf_wr_0/s_axi_CTRL]
  connect_bd_intf_net -intf_net axi_smc_M08_AXI [get_bd_intf_pins axi_smc/M08_AXI] [get_bd_intf_pins v_demosaic_0/s_axi_CTRL]
  connect_bd_intf_net -intf_net axi_smc_M09_AXI [get_bd_intf_pins axi_intc_0/s_axi] [get_bd_intf_pins axi_smc/M09_AXI]
  connect_bd_intf_net -intf_net axi_uartlite_0_UART [get_bd_intf_ports rs232_uart] [get_bd_intf_pins axi_uartlite_0/UART]
  connect_bd_intf_net -intf_net microblaze_0_M_AXI_DP [get_bd_intf_pins axi_smc/S00_AXI] [get_bd_intf_pins microblaze_0/M_AXI_DP]
  connect_bd_intf_net -intf_net microblaze_0_M_AXI_IP [get_bd_intf_pins axi_smc/S01_AXI] [get_bd_intf_pins microblaze_0/M_AXI_IP]
  connect_bd_intf_net -intf_net microblaze_0_debug [get_bd_intf_pins mdm_1/MBDEBUG_0] [get_bd_intf_pins microblaze_0/DEBUG]
  connect_bd_intf_net -intf_net microblaze_0_dlmb_1 [get_bd_intf_pins microblaze_0/DLMB] [get_bd_intf_pins microblaze_0_local_memory/DLMB]
  connect_bd_intf_net -intf_net microblaze_0_ilmb_1 [get_bd_intf_pins microblaze_0/ILMB] [get_bd_intf_pins microblaze_0_local_memory/ILMB]
  connect_bd_intf_net -intf_net mig_7series_0_DDR3 [get_bd_intf_ports ddr3_sdram] [get_bd_intf_pins mig_7series_0/DDR3]
  connect_bd_intf_net -intf_net mipi_phy_if_0_1 [get_bd_intf_ports mipi_phy_if_0] [get_bd_intf_pins mipi_csi2_rx_subsyst_0/mipi_phy_if]
  connect_bd_intf_net -intf_net sys_diff_clock_1 [get_bd_intf_ports sys_diff_clock] [get_bd_intf_pins util_ds_buf_0/CLK_IN_D]
  connect_bd_intf_net -intf_net v_demosaic_0_m_axis_video [get_bd_intf_pins v_demosaic_0/m_axis_video] [get_bd_intf_pins v_frmbuf_wr_0/s_axis_video]
connect_bd_intf_net -intf_net [get_bd_intf_nets v_demosaic_0_m_axis_video] [get_bd_intf_pins system_ila_1/SLOT_0_AXIS] [get_bd_intf_pins v_demosaic_0/m_axis_video]
  connect_bd_intf_net -intf_net v_frmbuf_rd_0_m_axi_mm_video [get_bd_intf_pins axi_smc/S02_AXI] [get_bd_intf_pins v_frmbuf_rd_0/m_axi_mm_video]
  connect_bd_intf_net -intf_net v_frmbuf_wr_0_m_axi_mm_video [get_bd_intf_pins axi_smc/S03_AXI] [get_bd_intf_pins v_frmbuf_wr_0/m_axi_mm_video]
  connect_bd_intf_net -intf_net v_proc_ss_0_m_axis [get_bd_intf_pins v_axi4s_vid_out_0/video_in] [get_bd_intf_pins v_proc_ss_0/m_axis]
  connect_bd_intf_net -intf_net v_tc_0_vtiming_out [get_bd_intf_pins v_axi4s_vid_out_0/vtiming_in] [get_bd_intf_pins v_tc_0/vtiming_out]
  connect_bd_intf_net -intf_net v_tpg_0_m_axis_video [get_bd_intf_pins v_frmbuf_rd_0/m_axis_video] [get_bd_intf_pins v_proc_ss_0/s_axis]
connect_bd_intf_net -intf_net [get_bd_intf_nets v_tpg_0_m_axis_video] [get_bd_intf_pins system_ila_0/SLOT_0_AXIS] [get_bd_intf_pins v_frmbuf_rd_0/m_axis_video]

  # Create port connections
  connect_bd_net -net axi_iic_0_iic2intc_irpt [get_bd_pins axi_iic_0/iic2intc_irpt] [get_bd_pins xlconcat_0/In0]
  connect_bd_net -net clk_wiz_0_clk_out1 [get_bd_pins clk_wiz_0/clk_out1] [get_bd_pins mig_7series_0/sys_clk_i] [get_bd_pins mipi_csi2_rx_subsyst_0/dphy_clk_200M]
  connect_bd_net -net clk_wiz_0_clk_out2 [get_bd_pins axi_smc/aclk1] [get_bd_pins clk_wiz_0/clk_out2] [get_bd_pins ila_0/clk] [get_bd_pins ila_1/clk] [get_bd_pins mipi_csi2_rx_subsyst_0/video_aclk] [get_bd_pins oddr_0/clk_in] [get_bd_pins rst_clk_wiz_0_150M/slowest_sync_clk] [get_bd_pins system_ila_0/clk] [get_bd_pins system_ila_1/clk] [get_bd_pins v_axi4s_vid_out_0/aclk] [get_bd_pins v_axi4s_vid_out_0/vid_io_out_clk] [get_bd_pins v_demosaic_0/ap_clk] [get_bd_pins v_frmbuf_rd_0/ap_clk] [get_bd_pins v_frmbuf_wr_0/ap_clk] [get_bd_pins v_proc_ss_0/aclk] [get_bd_pins v_tc_0/clk]
  connect_bd_net -net clk_wiz_0_locked [get_bd_pins clk_wiz_0/locked] [get_bd_pins rst_clk_wiz_0_150M/dcm_locked]
  connect_bd_net -net mdm_1_debug_sys_rst [get_bd_pins mdm_1/Debug_SYS_Rst] [get_bd_pins rst_mig_7series_0_100M/mb_debug_sys_rst]
  connect_bd_net -net microblaze_0_Clk [get_bd_pins axi_iic_0/s_axi_aclk] [get_bd_pins axi_intc_0/s_axi_aclk] [get_bd_pins axi_smc/aclk] [get_bd_pins axi_uartlite_0/s_axi_aclk] [get_bd_pins microblaze_0/Clk] [get_bd_pins microblaze_0_local_memory/LMB_Clk] [get_bd_pins mig_7series_0/ui_clk] [get_bd_pins mipi_csi2_rx_subsyst_0/lite_aclk] [get_bd_pins rst_mig_7series_0_100M/slowest_sync_clk] [get_bd_pins v_tc_0/s_axi_aclk]
  connect_bd_net -net mig_7series_0_mmcm_locked [get_bd_pins mig_7series_0/mmcm_locked] [get_bd_pins rst_mig_7series_0_100M/dcm_locked]
  connect_bd_net -net mig_7series_0_ui_clk_sync_rst [get_bd_pins mig_7series_0/ui_clk_sync_rst] [get_bd_pins rst_mig_7series_0_100M/ext_reset_in]
  connect_bd_net -net mipi_csi2_rx_subsyst_0_video_out_tdata [get_bd_pins mipi_csi2_rx_subsyst_0/video_out_tdata] [get_bd_pins xlslice_3/Din]
  connect_bd_net -net mipi_csi2_rx_subsyst_0_video_out_tdest [get_bd_pins mipi_csi2_rx_subsyst_0/video_out_tdest] [get_bd_pins v_demosaic_0/s_axis_video_TDEST]
  connect_bd_net -net mipi_csi2_rx_subsyst_0_video_out_tlast [get_bd_pins ila_1/probe1] [get_bd_pins mipi_csi2_rx_subsyst_0/video_out_tlast] [get_bd_pins v_demosaic_0/s_axis_video_TLAST]
  connect_bd_net -net mipi_csi2_rx_subsyst_0_video_out_tuser [get_bd_pins ila_1/probe3] [get_bd_pins mipi_csi2_rx_subsyst_0/video_out_tuser] [get_bd_pins v_demosaic_0/s_axis_video_TUSER]
  connect_bd_net -net mipi_csi2_rx_subsyst_0_video_out_tvalid [get_bd_pins mipi_csi2_rx_subsyst_0/video_out_tvalid] [get_bd_pins v_demosaic_0/s_axis_video_TVALID]
  connect_bd_net -net oddr_0_clk_out [get_bd_ports HDMI_R_CLK] [get_bd_pins oddr_0/clk_out]
  connect_bd_net -net reset_1 [get_bd_ports reset] [get_bd_pins clk_wiz_0/reset] [get_bd_pins mig_7series_0/sys_rst] [get_bd_pins rst_clk_wiz_0_150M/ext_reset_in]
  connect_bd_net -net rst_clk_wiz_0_150M_peripheral_aresetn [get_bd_pins mipi_csi2_rx_subsyst_0/video_aresetn] [get_bd_pins rst_clk_wiz_0_150M/peripheral_aresetn] [get_bd_pins system_ila_0/resetn] [get_bd_pins system_ila_1/resetn] [get_bd_pins v_demosaic_0/ap_rst_n] [get_bd_pins v_frmbuf_rd_0/ap_rst_n] [get_bd_pins v_frmbuf_wr_0/ap_rst_n] [get_bd_pins v_proc_ss_0/aresetn] [get_bd_pins v_tc_0/resetn]
  connect_bd_net -net rst_clk_wiz_0_150M_peripheral_reset [get_bd_pins rst_clk_wiz_0_150M/peripheral_reset] [get_bd_pins v_axi4s_vid_out_0/vid_io_out_reset]
  connect_bd_net -net rst_mig_7series_0_100M_bus_struct_reset [get_bd_pins microblaze_0_local_memory/SYS_Rst] [get_bd_pins rst_mig_7series_0_100M/bus_struct_reset]
  connect_bd_net -net rst_mig_7series_0_100M_mb_reset [get_bd_pins microblaze_0/Reset] [get_bd_pins rst_mig_7series_0_100M/mb_reset]
  connect_bd_net -net rst_mig_7series_0_100M_peripheral_aresetn [get_bd_pins axi_iic_0/s_axi_aresetn] [get_bd_pins axi_intc_0/s_axi_aresetn] [get_bd_pins axi_smc/aresetn] [get_bd_pins axi_uartlite_0/s_axi_aresetn] [get_bd_pins mig_7series_0/aresetn] [get_bd_pins mipi_csi2_rx_subsyst_0/lite_aresetn] [get_bd_pins rst_mig_7series_0_100M/peripheral_aresetn] [get_bd_pins v_tc_0/s_axi_aresetn]
  connect_bd_net -net util_ds_buf_0_IBUF_OUT [get_bd_pins util_ds_buf_0/IBUF_OUT] [get_bd_pins util_ds_buf_1/BUFG_I]
  connect_bd_net -net util_ds_buf_1_BUFG_O [get_bd_pins clk_wiz_0/clk_in1] [get_bd_pins util_ds_buf_1/BUFG_O]
  connect_bd_net -net v_axi4s_vid_out_0_locked [get_bd_pins ila_0/probe0] [get_bd_pins v_axi4s_vid_out_0/locked]
  connect_bd_net -net v_axi4s_vid_out_0_overflow [get_bd_pins ila_0/probe1] [get_bd_pins v_axi4s_vid_out_0/overflow]
  connect_bd_net -net v_axi4s_vid_out_0_sof_state_out [get_bd_pins v_axi4s_vid_out_0/sof_state_out] [get_bd_pins v_tc_0/sof_state]
  connect_bd_net -net v_axi4s_vid_out_0_underflow [get_bd_pins ila_0/probe2] [get_bd_pins v_axi4s_vid_out_0/underflow]
  connect_bd_net -net v_axi4s_vid_out_0_vid_active_video [get_bd_ports HDMI_R_DE] [get_bd_pins ila_0/probe3] [get_bd_pins v_axi4s_vid_out_0/vid_active_video]
  connect_bd_net -net v_axi4s_vid_out_0_vid_data [get_bd_pins v_axi4s_vid_out_0/vid_data] [get_bd_pins xlslice_0/Din] [get_bd_pins xlslice_1/Din] [get_bd_pins xlslice_2/Din]
  connect_bd_net -net v_axi4s_vid_out_0_vid_hsync [get_bd_ports HDMI_R_HSYNC] [get_bd_pins ila_0/probe4] [get_bd_pins v_axi4s_vid_out_0/vid_hsync]
  connect_bd_net -net v_axi4s_vid_out_0_vid_vsync [get_bd_ports HDMI_R_VSYNC] [get_bd_pins ila_0/probe5] [get_bd_pins v_axi4s_vid_out_0/vid_vsync]
  connect_bd_net -net v_axi4s_vid_out_0_vtg_ce [get_bd_pins v_axi4s_vid_out_0/vtg_ce] [get_bd_pins v_tc_0/gen_clken]
  connect_bd_net -net v_demosaic_0_s_axis_video_TREADY [get_bd_pins ila_1/probe2] [get_bd_pins mipi_csi2_rx_subsyst_0/video_out_tready] [get_bd_pins v_demosaic_0/s_axis_video_TREADY]
  connect_bd_net -net xlconcat_0_dout [get_bd_pins axi_intc_0/intr] [get_bd_pins xlconcat_0/dout]
  connect_bd_net -net xlconstant_0_dout [get_bd_ports cam_pwr_up] [get_bd_pins xlconstant_0/dout]
  connect_bd_net -net xlslice_0_Dout [get_bd_ports HDMI_R_D] [get_bd_pins xlslice_0/Dout]
  connect_bd_net -net xlslice_1_Dout [get_bd_ports HDMI_G_D] [get_bd_pins xlslice_1/Dout]
  connect_bd_net -net xlslice_2_Dout [get_bd_ports HDMI_B_D] [get_bd_pins xlslice_2/Dout]
  connect_bd_net -net xlslice_3_Dout [get_bd_pins ila_1/probe0] [get_bd_pins v_demosaic_0/s_axis_video_TDATA] [get_bd_pins xlslice_3/Dout]

  # Create address segments
  assign_bd_address -offset 0x40800000 -range 0x00010000 -target_address_space [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs axi_iic_0/S_AXI/Reg] -force
  assign_bd_address -offset 0x40800000 -range 0x00010000 -target_address_space [get_bd_addr_spaces microblaze_0/Instruction] [get_bd_addr_segs axi_iic_0/S_AXI/Reg] -force
  assign_bd_address -offset 0x41200000 -range 0x00010000 -target_address_space [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs axi_intc_0/S_AXI/Reg] -force
  assign_bd_address -offset 0x41200000 -range 0x00010000 -target_address_space [get_bd_addr_spaces microblaze_0/Instruction] [get_bd_addr_segs axi_intc_0/S_AXI/Reg] -force
  assign_bd_address -offset 0x40600000 -range 0x00010000 -target_address_space [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs axi_uartlite_0/S_AXI/Reg] -force
  assign_bd_address -offset 0x40600000 -range 0x00010000 -target_address_space [get_bd_addr_spaces microblaze_0/Instruction] [get_bd_addr_segs axi_uartlite_0/S_AXI/Reg] -force
  assign_bd_address -offset 0x00000000 -range 0x00008000 -target_address_space [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs microblaze_0_local_memory/dlmb_bram_if_cntlr/SLMB/Mem] -force
  assign_bd_address -offset 0x00000000 -range 0x00008000 -target_address_space [get_bd_addr_spaces microblaze_0/Instruction] [get_bd_addr_segs microblaze_0_local_memory/ilmb_bram_if_cntlr/SLMB/Mem] -force
  assign_bd_address -offset 0x80000000 -range 0x40000000 -target_address_space [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs mig_7series_0/memmap/memaddr] -force
  assign_bd_address -offset 0x80000000 -range 0x40000000 -target_address_space [get_bd_addr_spaces microblaze_0/Instruction] [get_bd_addr_segs mig_7series_0/memmap/memaddr] -force
  assign_bd_address -offset 0x44A10000 -range 0x00002000 -target_address_space [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs mipi_csi2_rx_subsyst_0/csirxss_s_axi/Reg] -force
  assign_bd_address -offset 0x44A10000 -range 0x00002000 -target_address_space [get_bd_addr_spaces microblaze_0/Instruction] [get_bd_addr_segs mipi_csi2_rx_subsyst_0/csirxss_s_axi/Reg] -force
  assign_bd_address -offset 0x44A30000 -range 0x00010000 -target_address_space [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs v_demosaic_0/s_axi_CTRL/Reg] -force
  assign_bd_address -offset 0x44A30000 -range 0x00010000 -target_address_space [get_bd_addr_spaces microblaze_0/Instruction] [get_bd_addr_segs v_demosaic_0/s_axi_CTRL/Reg] -force
  assign_bd_address -offset 0x44A40000 -range 0x00010000 -target_address_space [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs v_frmbuf_rd_0/s_axi_CTRL/Reg] -force
  assign_bd_address -offset 0x44A40000 -range 0x00010000 -target_address_space [get_bd_addr_spaces microblaze_0/Instruction] [get_bd_addr_segs v_frmbuf_rd_0/s_axi_CTRL/Reg] -force
  assign_bd_address -offset 0x44A50000 -range 0x00010000 -target_address_space [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs v_frmbuf_wr_0/s_axi_CTRL/Reg] -force
  assign_bd_address -offset 0x44A50000 -range 0x00010000 -target_address_space [get_bd_addr_spaces microblaze_0/Instruction] [get_bd_addr_segs v_frmbuf_wr_0/s_axi_CTRL/Reg] -force
  assign_bd_address -offset 0x44A20000 -range 0x00010000 -target_address_space [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs v_proc_ss_0/s_axi_ctrl/Reg] -force
  assign_bd_address -offset 0x44A20000 -range 0x00010000 -target_address_space [get_bd_addr_spaces microblaze_0/Instruction] [get_bd_addr_segs v_proc_ss_0/s_axi_ctrl/Reg] -force
  assign_bd_address -offset 0x44A00000 -range 0x00010000 -target_address_space [get_bd_addr_spaces microblaze_0/Data] [get_bd_addr_segs v_tc_0/ctrl/Reg] -force
  assign_bd_address -offset 0x44A00000 -range 0x00010000 -target_address_space [get_bd_addr_spaces microblaze_0/Instruction] [get_bd_addr_segs v_tc_0/ctrl/Reg] -force
  assign_bd_address -offset 0x80000000 -range 0x40000000 -target_address_space [get_bd_addr_spaces v_frmbuf_rd_0/Data_m_axi_mm_video] [get_bd_addr_segs mig_7series_0/memmap/memaddr] -force
  assign_bd_address -offset 0x80000000 -range 0x40000000 -target_address_space [get_bd_addr_spaces v_frmbuf_wr_0/Data_m_axi_mm_video] [get_bd_addr_segs mig_7series_0/memmap/memaddr] -force

  # Exclude Address Segments
  exclude_bd_addr_seg -offset 0x40800000 -range 0x00010000 -target_address_space [get_bd_addr_spaces v_frmbuf_rd_0/Data_m_axi_mm_video] [get_bd_addr_segs axi_iic_0/S_AXI/Reg]
  exclude_bd_addr_seg -offset 0x41200000 -range 0x00010000 -target_address_space [get_bd_addr_spaces v_frmbuf_rd_0/Data_m_axi_mm_video] [get_bd_addr_segs axi_intc_0/S_AXI/Reg]
  exclude_bd_addr_seg -offset 0x40600000 -range 0x00010000 -target_address_space [get_bd_addr_spaces v_frmbuf_rd_0/Data_m_axi_mm_video] [get_bd_addr_segs axi_uartlite_0/S_AXI/Reg]
  exclude_bd_addr_seg -offset 0x44A10000 -range 0x00002000 -target_address_space [get_bd_addr_spaces v_frmbuf_rd_0/Data_m_axi_mm_video] [get_bd_addr_segs mipi_csi2_rx_subsyst_0/csirxss_s_axi/Reg]
  exclude_bd_addr_seg -offset 0x44A30000 -range 0x00010000 -target_address_space [get_bd_addr_spaces v_frmbuf_rd_0/Data_m_axi_mm_video] [get_bd_addr_segs v_demosaic_0/s_axi_CTRL/Reg]
  exclude_bd_addr_seg -offset 0x44A40000 -range 0x00010000 -target_address_space [get_bd_addr_spaces v_frmbuf_rd_0/Data_m_axi_mm_video] [get_bd_addr_segs v_frmbuf_rd_0/s_axi_CTRL/Reg]
  exclude_bd_addr_seg -offset 0x44A50000 -range 0x00010000 -target_address_space [get_bd_addr_spaces v_frmbuf_rd_0/Data_m_axi_mm_video] [get_bd_addr_segs v_frmbuf_wr_0/s_axi_CTRL/Reg]
  exclude_bd_addr_seg -offset 0x44A20000 -range 0x00010000 -target_address_space [get_bd_addr_spaces v_frmbuf_rd_0/Data_m_axi_mm_video] [get_bd_addr_segs v_proc_ss_0/s_axi_ctrl/Reg]
  exclude_bd_addr_seg -offset 0x44A00000 -range 0x00010000 -target_address_space [get_bd_addr_spaces v_frmbuf_rd_0/Data_m_axi_mm_video] [get_bd_addr_segs v_tc_0/ctrl/Reg]
  exclude_bd_addr_seg -offset 0x40800000 -range 0x00010000 -target_address_space [get_bd_addr_spaces v_frmbuf_wr_0/Data_m_axi_mm_video] [get_bd_addr_segs axi_iic_0/S_AXI/Reg]
  exclude_bd_addr_seg -offset 0x41200000 -range 0x00010000 -target_address_space [get_bd_addr_spaces v_frmbuf_wr_0/Data_m_axi_mm_video] [get_bd_addr_segs axi_intc_0/S_AXI/Reg]
  exclude_bd_addr_seg -offset 0x40600000 -range 0x00010000 -target_address_space [get_bd_addr_spaces v_frmbuf_wr_0/Data_m_axi_mm_video] [get_bd_addr_segs axi_uartlite_0/S_AXI/Reg]
  exclude_bd_addr_seg -offset 0x44A10000 -range 0x00002000 -target_address_space [get_bd_addr_spaces v_frmbuf_wr_0/Data_m_axi_mm_video] [get_bd_addr_segs mipi_csi2_rx_subsyst_0/csirxss_s_axi/Reg]
  exclude_bd_addr_seg -offset 0x44A30000 -range 0x00010000 -target_address_space [get_bd_addr_spaces v_frmbuf_wr_0/Data_m_axi_mm_video] [get_bd_addr_segs v_demosaic_0/s_axi_CTRL/Reg]
  exclude_bd_addr_seg -offset 0x44A40000 -range 0x00010000 -target_address_space [get_bd_addr_spaces v_frmbuf_wr_0/Data_m_axi_mm_video] [get_bd_addr_segs v_frmbuf_rd_0/s_axi_CTRL/Reg]
  exclude_bd_addr_seg -offset 0x44A50000 -range 0x00010000 -target_address_space [get_bd_addr_spaces v_frmbuf_wr_0/Data_m_axi_mm_video] [get_bd_addr_segs v_frmbuf_wr_0/s_axi_CTRL/Reg]
  exclude_bd_addr_seg -offset 0x44A20000 -range 0x00010000 -target_address_space [get_bd_addr_spaces v_frmbuf_wr_0/Data_m_axi_mm_video] [get_bd_addr_segs v_proc_ss_0/s_axi_ctrl/Reg]
  exclude_bd_addr_seg -offset 0x44A00000 -range 0x00010000 -target_address_space [get_bd_addr_spaces v_frmbuf_wr_0/Data_m_axi_mm_video] [get_bd_addr_segs v_tc_0/ctrl/Reg]


  # Restore current instance
  current_bd_instance $oldCurInst

  save_bd_design
}
# End of create_root_design()


##################################################################
# MAIN FLOW
##################################################################

create_root_design ""


common::send_gid_msg -ssname BD::TCL -id 2053 -severity "WARNING" "This Tcl script was generated from a block design that has not been validated. It is possible that design <$design_name> may result in errors during validation."

Constraints

VHDL
set_property PACKAGE_PIN V22 [get_ports {HDMI_R_D[7]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_R_D[7]}]
set_property PACKAGE_PIN Y23 [get_ports {HDMI_R_D[6]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_R_D[6]}]
set_property PACKAGE_PIN Y22 [get_ports {HDMI_R_D[5]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_R_D[5]}]
set_property PACKAGE_PIN AB24 [get_ports {HDMI_R_D[4]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_R_D[4]}]
set_property PACKAGE_PIN AC24 [get_ports {HDMI_R_D[3]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_R_D[3]}]
set_property PACKAGE_PIN AB25 [get_ports {HDMI_R_D[2]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_R_D[2]}]
set_property PACKAGE_PIN AA25 [get_ports {HDMI_R_D[1]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_R_D[1]}]
set_property PACKAGE_PIN AA23 [get_ports {HDMI_R_D[0]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_R_D[0]}]


set_property PACKAGE_PIN V23 [get_ports {HDMI_G_D[7]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_G_D[7]}]
set_property PACKAGE_PIN Y20 [get_ports {HDMI_G_D[6]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_G_D[6]}]
set_property PACKAGE_PIN U24 [get_ports {HDMI_G_D[5]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_G_D[5]}]
set_property PACKAGE_PIN W20 [get_ports {HDMI_G_D[4]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_G_D[4]}]
set_property PACKAGE_PIN W23 [get_ports {HDMI_G_D[3]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_G_D[3]}]
set_property PACKAGE_PIN U20 [get_ports {HDMI_G_D[2]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_G_D[2]}]
set_property PACKAGE_PIN V24 [get_ports {HDMI_G_D[1]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_G_D[1]}]
set_property PACKAGE_PIN U25 [get_ports {HDMI_G_D[0]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_G_D[0]}]



set_property PACKAGE_PIN U26 [get_ports {HDMI_B_D[7]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_B_D[7]}]
set_property PACKAGE_PIN W24 [get_ports {HDMI_B_D[6]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_B_D[6]}]
set_property PACKAGE_PIN W25 [get_ports {HDMI_B_D[5]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_B_D[5]}]
set_property PACKAGE_PIN W26 [get_ports {HDMI_B_D[4]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_B_D[4]}]
set_property PACKAGE_PIN V26 [get_ports {HDMI_B_D[3]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_B_D[3]}]
set_property PACKAGE_PIN Y26 [get_ports {HDMI_B_D[2]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_B_D[2]}]
set_property PACKAGE_PIN Y25 [get_ports {HDMI_B_D[1]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_B_D[1]}]
set_property PACKAGE_PIN AA24 [get_ports {HDMI_B_D[0]}]
set_property IOSTANDARD LVCMOS18 [get_ports {HDMI_B_D[0]}]


set_property PACKAGE_PIN AB26 [get_ports HDMI_R_DE]
set_property IOSTANDARD LVCMOS18 [get_ports HDMI_R_DE]

set_property PACKAGE_PIN AC26 [get_ports HDMI_R_VSYNC]
set_property IOSTANDARD LVCMOS18 [get_ports HDMI_R_VSYNC]

set_property PACKAGE_PIN V21 [get_ports HDMI_R_CLK]
set_property IOSTANDARD LVCMOS18 [get_ports HDMI_R_CLK]

set_property PACKAGE_PIN AA22 [get_ports HDMI_R_HSYNC]
set_property IOSTANDARD LVCMOS18 [get_ports HDMI_R_HSYNC]

set_property PACKAGE_PIN N18 [get_ports IIC_MAIN_scl_io]
set_property IOSTANDARD LVCMOS33 [get_ports IIC_MAIN_scl_io]
set_property PACKAGE_PIN K25 [get_ports IIC_MAIN_sda_io]
set_property IOSTANDARD LVCMOS33 [get_ports IIC_MAIN_sda_io]

set_property IOSTANDARD LVDS_25 [get_ports mipi_phy_if_0_clk_hs_p]
set_property IOSTANDARD LVCMOS25 [get_ports mipi_phy_if_0_clk_lp_n]
set_property IOSTANDARD LVCMOS25 [get_ports mipi_phy_if_0_clk_lp_p]
set_property IOSTANDARD LVCMOS25 [get_ports {mipi_phy_if_0_data_lp_n[1]}]
set_property IOSTANDARD LVCMOS25 [get_ports {mipi_phy_if_0_data_lp_n[0]}]
set_property IOSTANDARD LVCMOS25 [get_ports {mipi_phy_if_0_data_lp_p[1]}]
set_property IOSTANDARD LVCMOS25 [get_ports {mipi_phy_if_0_data_lp_p[0]}]
set_property IOSTANDARD LVDS_25 [get_ports {mipi_phy_if_0_data_hs_p[1]}]
set_property IOSTANDARD LVDS_25 [get_ports {mipi_phy_if_0_data_hs_p[0]}]
set_property PACKAGE_PIN E17 [get_ports mipi_phy_if_0_clk_hs_p]
set_property PACKAGE_PIN G19 [get_ports {mipi_phy_if_0_data_hs_p[1]}]
set_property PACKAGE_PIN A17 [get_ports {mipi_phy_if_0_data_hs_p[0]}]
set_property PACKAGE_PIN C17 [get_ports mipi_phy_if_0_clk_lp_p]
set_property PACKAGE_PIN B17 [get_ports mipi_phy_if_0_clk_lp_n]
set_property PACKAGE_PIN D20 [get_ports {mipi_phy_if_0_data_lp_n[1]}]
set_property PACKAGE_PIN F17 [get_ports {mipi_phy_if_0_data_lp_n[0]}]
set_property PACKAGE_PIN G17 [get_ports {mipi_phy_if_0_data_lp_p[0]}]
set_property PACKAGE_PIN E20 [get_ports {mipi_phy_if_0_data_lp_p[1]}]

set_property DIFF_TERM TRUE [get_ports mipi_phy_if_0_clk_hs_p]
set_property DIFF_TERM TRUE [get_ports mipi_phy_if_0_clk_hs_n]
set_property DIFF_TERM TRUE [get_ports {mipi_phy_if_0_data_hs_n[1]}]
set_property DIFF_TERM TRUE [get_ports {mipi_phy_if_0_data_hs_n[0]}]
set_property DIFF_TERM TRUE [get_ports {mipi_phy_if_0_data_hs_p[1]}]
set_property DIFF_TERM TRUE [get_ports {mipi_phy_if_0_data_hs_p[0]}]


set_property IOSTANDARD LVCMOS25 [get_ports {cam_pwr_up[0]}]
set_property PACKAGE_PIN H16 [get_ports {cam_pwr_up[0]}]

set_property C_CLK_INPUT_FREQ_HZ 300000000 [get_debug_cores dbg_hub]
set_property C_ENABLE_CLK_DIVIDER false [get_debug_cores dbg_hub]
set_property C_USER_SCAN_CHAIN 1 [get_debug_cores dbg_hub]
connect_debug_port dbg_hub/clk [get_nets clk]

Source code

C/C++
/******************************************************************************
*
* Copyright (C) 2009 - 2014 Xilinx, Inc.  All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* Use of the Software is limited solely to applications:
* (a) running on a Xilinx device, or
* (b) that interact with a Xilinx device through a bus or interconnect.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* XILINX  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Except as contained in this notice, the name of the Xilinx shall not be used
* in advertising or otherwise to promote the sale, use or other dealings in
* this Software without prior written authorization from Xilinx.
*
******************************************************************************/

/*
 * helloworld.c: simple test application
 *
 * This application configures UART 16550 to baud rate 9600.
 * PS7 UART (Zynq) is not initialized by this application, since
 * bootrom/bsp configures it to baud rate 115200
 *
 * ------------------------------------------------
 * | UART TYPE   BAUD RATE                        |
 * ------------------------------------------------
 *   uartns550   9600
 *   uartlite    Configurable only in HW design
 *   ps7_uart    115200 (configured by bootrom/bsp)
 */

#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xstatus.h"
#include "sleep.h"
#include "xiic_l.h"
#include "xil_io.h"
#include "xil_types.h"
#include "xvtc.h"
#include "function_prototype.h"
#include "pcam_5C_cfgs.h"
//#include "xv_tpg.h"
#include "xvidc.h"
#include "vga.h"
#include "xvprocss.h"
#include "xv_demosaic.h"


#define PAGE_SIZE   16

#include "xv_frmbufwr.h"
#include "xv_frmbufrd.h"
#define DDR_BASEADDR XPAR_MIG7SERIES_0_BASEADDR
#define XVFRMBUFWR_BUFFER_BASEADDR (DDR_BASEADDR + (0x1000000))

XV_frmbufwr     frmbufwr;
XV_frmbufwr_Config frmbufwr_cfg;

XV_frmbufrd frmbufrd;
XV_frmbufrd_Config frmbufrd_cfg;

#define IIC_BASE_ADDRESS	XPAR_IIC_0_BASEADDR

#define EEPROM_TEST_START_ADDRESS	0x80

#define IIC_SWITCH_ADDRESS 0x74
#define IIC_ADV7511_ADDRESS 0x39

XV_demosaic InstancePtr;
XV_demosaic_Config  *demosaic_Config;

XVtc	VtcInst;
XVtc_Config *vtc_config ;
//XV_tpg tpg;
//XV_tpg_Config *tpg_config;
XVprocSs scaler_new_inst;
XVprocSs csc_new_inst;
VideoMode video;


typedef u8 AddressType;

typedef struct {
	u8 addr;
	u8 data;
	u8 init;
} HDMI_REG;

#define NUMBER_OF_HDMI_REGS  16
HDMI_REG hdmi_iic[NUMBER_OF_HDMI_REGS] = {
	{0x41, 0x00, 0x10},
	{0x98, 0x00, 0x03},
	{0x9A, 0x00, 0xE0},
	{0x9C, 0x00, 0x30},
	{0x9D, 0x00, 0x61},
	{0xA2, 0x00, 0xA4},
	{0xA3, 0x00, 0xA4},
	{0xE0, 0x00, 0xD0},
	{0xF9, 0x00, 0x00},
	{0x18, 0x00, 0xE7},
    {0x55, 0x00, 0x00},
    {0x56, 0x00, 0x28},
    {0xD6, 0x00, 0xC0},
    {0xAF, 0x00, 0x4},
	{0xF9, 0x00, 0x00}
};

extern XIic  IicAdapter;
u8 EepromIicAddr;		/* Variable for storing Eeprom IIC address */

int IicLowLevelDynEeprom();

u8 EepromReadByte(AddressType Address, u8 *BufferPtr, u8 ByteCount);
u8 EepromWriteByte(AddressType Address, u8 *BufferPtr, u8 ByteCount);


//HDMI IIC
int IicLowLevelDynEeprom()
{
  u8 BytesRead;
  u32 StatusReg;
  u8 Index;
  int Status;
  u32 i;
  u8 channel[1] = {0x20};

  u8 PCAM_FMC_addr = 0x70;
  u8 PCAM_FMC_ch = 0x01;

  Status = XIic_DynInit(IIC_BASE_ADDRESS);
  if (Status != XST_SUCCESS) {
	return XST_FAILURE;
  }
  xil_printf("\r\nAfter XIic_DynInit\r\n");
  while (((StatusReg = XIic_ReadReg(IIC_BASE_ADDRESS,
				XIIC_SR_REG_OFFSET)) &
				(XIIC_SR_RX_FIFO_EMPTY_MASK |
				XIIC_SR_TX_FIFO_EMPTY_MASK |
				XIIC_SR_BUS_BUSY_MASK)) !=
				(XIIC_SR_RX_FIFO_EMPTY_MASK |
				XIIC_SR_TX_FIFO_EMPTY_MASK)) {

  }

  EepromIicAddr = IIC_SWITCH_ADDRESS;
  XIic_DynSend(IIC_BASE_ADDRESS, EepromIicAddr,
		  	  	  channel, sizeof(channel), XIIC_STOP);


  EepromIicAddr = IIC_ADV7511_ADDRESS;
  for ( Index = 0; Index < NUMBER_OF_HDMI_REGS; Index++)
  {
    EepromWriteByte(hdmi_iic[Index].addr, &hdmi_iic[Index].init, 1);
  }

  for ( Index = 0; Index < NUMBER_OF_HDMI_REGS; Index++)
  {
    BytesRead = EepromReadByte(hdmi_iic[Index].addr, &hdmi_iic[Index].data, 1);
    for(i=0;i<1000;i++) {};	// IIC delay
	if (BytesRead != 1) {
      return XST_FAILURE;
	}
  }

  channel[0] = 0x02;

  EepromIicAddr = IIC_SWITCH_ADDRESS;
  XIic_DynSend(IIC_BASE_ADDRESS, EepromIicAddr,
		  	  	  channel, sizeof(channel), XIIC_STOP);

  channel[0] = PCAM_FMC_ch;

  EepromIicAddr = PCAM_FMC_addr;
  XIic_DynSend(IIC_BASE_ADDRESS, EepromIicAddr,
		  channel, sizeof(channel), XIIC_STOP);





  return XST_SUCCESS;

}


u8 EepromReadByte(AddressType Address, u8 *BufferPtr, u8 ByteCount)
{
  u8 ReceivedByteCount;
  u8 SentByteCount;
  u16 StatusReg;

  /*
   * Position the Read pointer to specific location in the EEPROM.
   */
  do {
	StatusReg = XIic_ReadReg(IIC_BASE_ADDRESS, XIIC_SR_REG_OFFSET);
    if (!(StatusReg & XIIC_SR_BUS_BUSY_MASK)) {
	  SentByteCount = XIic_DynSend(IIC_BASE_ADDRESS, EepromIicAddr,
					  (u8 *) &Address, sizeof(Address), XIIC_REPEATED_START);
    }

  } while (SentByteCount != sizeof(Address));
  /*
   * Receive the data.
   */
  ReceivedByteCount = XIic_DynRecv(IIC_BASE_ADDRESS, EepromIicAddr,
		                                          BufferPtr, ByteCount);

  /*
   * Return the number of bytes received from the EEPROM.
   */

  return ReceivedByteCount;

}


u8 EepromWriteByte(AddressType Address, u8 *BufferPtr, u8 ByteCount)
{
  u8 SentByteCount;
  u8 WriteBuffer[sizeof(Address) + PAGE_SIZE];
  u8 Index;

  /*
   * A temporary write buffer must be used which contains both the address
   * and the data to be written, put the address in first based upon the
   * size of the address for the EEPROM
   */
  if (sizeof(AddressType) == 2) {
	WriteBuffer[0] = (u8) (Address >> 8);
	WriteBuffer[1] = (u8) (Address);
  } else if (sizeof(AddressType) == 1) {
	WriteBuffer[0] = (u8) (Address);
	EepromIicAddr |= (EEPROM_TEST_START_ADDRESS >> 8) & 0x7;
  }

  /*
   * Put the data in the write buffer following the address.
   */
  for (Index = 0; Index < ByteCount; Index++) {
	WriteBuffer[sizeof(Address) + Index] = BufferPtr[Index];
  }

  /*
   * Write a page of data at the specified address to the EEPROM.
   */
  SentByteCount = XIic_DynSend(IIC_BASE_ADDRESS, EepromIicAddr,
				WriteBuffer, sizeof(Address) + ByteCount,
				XIIC_STOP);

  /*
   * Return the number of bytes written to the EEPROM.
   */
  return SentByteCount - sizeof(Address);

}


void InitVprocSs_CSC() {
  XVprocSs_Config* p_vpss_cfg1;
  int status, Status;
  int widthIn, heightIn, widthOut, heightOut;

  widthOut = 1920;
  heightOut = 1080;

  // Local variables
  XVidC_VideoMode resIdIn, resIdOut;
  XVidC_VideoStream StreamIn, StreamOut;

  widthIn = 1920;
  heightIn = 1080;
  StreamIn.FrameRate = 60; //rao


    p_vpss_cfg1 = XVprocSs_LookupConfig(XPAR_XVPROCSS_0_DEVICE_ID);
	if (p_vpss_cfg1 == NULL) {
	  xil_printf("ERROR! Failed to find VPSS-based scaler.\n\r");
	  return;
	}

	status = XVprocSs_CfgInitialize(&csc_new_inst, p_vpss_cfg1,
				p_vpss_cfg1->BaseAddress);
	if (status != XST_SUCCESS) {
	  xil_printf("ERROR! Failed to initialize VPSS-based scaler.\n\r");
	  return;
	}

  XVprocSs_Stop(&csc_new_inst);

  //Initialize FMC, Adapter and Sensor IIC
    Status = InitIIC();
    if (Status != XST_SUCCESS) {
  	xil_printf("\n\r IIC initialization Failed \n\r");
  	return XST_FAILURE;
    }
    xil_printf("IIC Initializtion Done \n\r");




  // Get resolution ID from frame size
  resIdIn = XVidC_GetVideoModeId(widthIn, heightIn, StreamIn.FrameRate,
			FALSE);

  // Setup Video Processing Subsystem
  StreamIn.VmId = resIdIn;
  StreamIn.Timing.HActive = widthIn;
  StreamIn.Timing.VActive = heightIn;
  StreamIn.ColorFormatId = XVIDC_CSF_RGB;
  StreamIn.ColorDepth = csc_new_inst.Config.ColorDepth;
  StreamIn.PixPerClk = csc_new_inst.Config.PixPerClock;
  StreamIn.IsInterlaced = 0;

  status = XVprocSs_SetVidStreamIn(&csc_new_inst, &StreamIn);
  if (status != XST_SUCCESS) {
	xil_printf("Unable to set input video stream parameters correctly\r\n");
	return;
  }

  // Get resolution ID from frame size
  resIdOut = XVidC_GetVideoModeId(widthOut, heightOut, 60, FALSE);

  if (resIdOut != XVIDC_VM_1920x1080_60_P) {
	xil_printf("resIdOut %d doesn't match XVIDC_VM_1920x1080_60_P\r\n",
				resIdOut);
  }


  StreamOut.VmId = resIdOut;
  StreamOut.Timing.HActive = widthOut;
  StreamOut.Timing.VActive = heightOut;
  StreamOut.ColorFormatId = XVIDC_CSF_YCRCB_444;
  StreamOut.ColorDepth = csc_new_inst.Config.ColorDepth;
  StreamOut.PixPerClk = csc_new_inst.Config.PixPerClock;
  StreamOut.FrameRate = 60;
  StreamOut.IsInterlaced = 0;

  XVprocSs_SetVidStreamOut(&csc_new_inst, &StreamOut);
  if (status != XST_SUCCESS) {
	xil_printf("Unable to set output video stream parameters correctly\r\n");
	return;
  }

  status = XVprocSs_SetSubsystemConfig(&csc_new_inst);
  if (status != XST_SUCCESS) {
    xil_printf("xvprocss_SetSubsystemConfig failed %d\r\n", status);
    return;
  }

  //XVprocSs_ReportSubsystemConfig(&scaler_new_inst);
  XVprocSs_Start(&scaler_new_inst);



}


int main()
{

	XVtc_Timing vtcTiming;
	int Status;
	XVtc_SourceSelect SourceSelect;
    init_platform();
    int pcam5c_mode = 1;

    print("Hello World\n\r");
    print("Successfully ran Hello World application");

    Status = IicLowLevelDynEeprom();
    if (Status != XST_SUCCESS) {
    	xil_printf("ADV7511 IIC programming FAILED\r\n");
    	return XST_FAILURE;
      }
    xil_printf("ADV7511 IIC programming PASSED\r\n");


    vtc_config = XVtc_LookupConfig(XPAR_VTC_0_DEVICE_ID);
    XVtc_CfgInitialize(&VtcInst, vtc_config, vtc_config->BaseAddress);

    video = VMODE_1920x1080 ;
	vtcTiming.HActiveVideo = video.width;	/**< Horizontal Active Video Size */
	vtcTiming.HFrontPorch = video.hps - video.width;	/**< Horizontal Front Porch Size */
	vtcTiming.HSyncWidth = video.hpe - video.hps;		/**< Horizontal Sync Width */
	vtcTiming.HBackPorch = video.hmax - video.hpe + 1;		/**< Horizontal Back Porch Size */
	vtcTiming.HSyncPolarity = video.hpol;	/**< Horizontal Sync Polarity */
	vtcTiming.VActiveVideo = video.height;	/**< Vertical Active Video Size */
	vtcTiming.V0FrontPorch = video.vps - video.height;	/**< Vertical Front Porch Size */
	vtcTiming.V0SyncWidth = video.vpe - video.vps;	/**< Vertical Sync Width */
	vtcTiming.V0BackPorch = video.vmax - video.vpe + 1;;	/**< Horizontal Back Porch Size */
	vtcTiming.V1FrontPorch = video.vps - video.height;	/**< Vertical Front Porch Size */
	vtcTiming.V1SyncWidth = video.vpe - video.vps;	/**< Vertical Sync Width */
	vtcTiming.V1BackPorch = video.vmax - video.vpe + 1;;	/**< Horizontal Back Porch Size */
	vtcTiming.VSyncPolarity = video.vpol;	/**< Vertical Sync Polarity */
	vtcTiming.Interlaced = 0;

    memset((void *)&SourceSelect, 0, sizeof(SourceSelect));
	SourceSelect.VBlankPolSrc = 1;
	SourceSelect.VSyncPolSrc = 1;
	SourceSelect.HBlankPolSrc = 1;
	SourceSelect.HSyncPolSrc = 1;
	SourceSelect.ActiveVideoPolSrc = 1;
	SourceSelect.ActiveChromaPolSrc= 1;
	SourceSelect.VChromaSrc = 1;
	SourceSelect.VActiveSrc = 1;
	SourceSelect.VBackPorchSrc = 1;
	SourceSelect.VSyncSrc = 1;
	SourceSelect.VFrontPorchSrc = 1;
	SourceSelect.VTotalSrc = 1;
	SourceSelect.HActiveSrc = 1;
	SourceSelect.HBackPorchSrc = 1;
	SourceSelect.HSyncSrc = 1;
	SourceSelect.HFrontPorchSrc = 1;
	SourceSelect.HTotalSrc = 1;
	XVtc_RegUpdateEnable(&VtcInst);
	XVtc_SetGeneratorTiming(&VtcInst, &vtcTiming);
	XVtc_SetSource(&VtcInst, &SourceSelect);
	XVtc_EnableGenerator(&VtcInst);

	XVtc_Enable(&VtcInst);

    u32 height,width,status;

	InitVprocSs_CSC();

	//Initialize Adapter Interrupt System
	Status = SetupAdapterInterruptSystem(&IicAdapter);
	if (Status != XST_SUCCESS) {
	xil_printf("\n\rInterrupt System Initialization Failed \n\r");
	return XST_FAILURE;
	}
	xil_printf("Adapter Interrupt System Initialization Done \n\r");

	//Set up IIC Interrupt Handlers
	SetupIICIntrHandlers();
	xil_printf("IIC Interrupt Handlers Setup Done \n\r");

	//Set Address of Adapter IIC
	Status =  SetAdapterIICAddress();
	if (Status != XST_SUCCESS) {
	xil_printf("\n\rAdapter IIC Address Setup Failed \n\r");
	return XST_FAILURE;
	}
	xil_printf("Adapter IIC Address Set\n\r");

	Status = InitializeCsiRxSs();
	if (Status != XST_SUCCESS) {
	xil_printf("CSI Rx Ss Init failed status = %x.\r\n", Status);
	return XST_FAILURE;
	}

	//Preconfigure Sensor
	Status = SensorPreConfig(pcam5c_mode);
	if (Status != XST_SUCCESS) {
	xil_printf("\n\rSensor PreConfiguration Failed \n\r");
			return XST_FAILURE;
	}
	xil_printf("\n\rSensor is PreConfigured\n\r");

	demosaic_Config = XV_demosaic_LookupConfig(XPAR_V_DEMOSAIC_0_DEVICE_ID);
	XV_demosaic_CfgInitialize(&InstancePtr, demosaic_Config,
								   demosaic_Config->BaseAddress);
	XV_demosaic_Set_HwReg_width(&InstancePtr, 1920);
	XV_demosaic_Set_HwReg_height(&InstancePtr, 1080);
	XV_demosaic_Set_HwReg_bayer_phase(&InstancePtr, 0x3);
	XV_demosaic_EnableAutoRestart(&InstancePtr);
	XV_demosaic_Start(&InstancePtr);

	//Enables the sensors.
	WritetoReg(0x30, 0x08, 0x02);

	XV_frmbufwr_Initialize(&frmbufwr,  XPAR_V_FRMBUF_WR_0_DEVICE_ID);
	XV_frmbufwr_Set_HwReg_width(&frmbufwr, 1920);
	XV_frmbufwr_Set_HwReg_height(&frmbufwr, 1080);
	XV_frmbufwr_Set_HwReg_stride(&frmbufwr, 4*1920);
	XV_frmbufwr_Set_HwReg_video_format(&frmbufwr, XVIDC_CSF_MEM_RGB8);
	XV_frmbufwr_Set_HwReg_frm_buffer_V(&frmbufwr, XVFRMBUFWR_BUFFER_BASEADDR);
	XV_frmbufwr_EnableAutoRestart(&frmbufwr);
	XV_frmbufwr_Start(&frmbufwr);

	XV_frmbufrd_Initialize(&frmbufrd, XPAR_V_FRMBUF_RD_0_DEVICE_ID);
	XV_frmbufrd_Set_HwReg_width(&frmbufrd, 1920);
	XV_frmbufrd_Set_HwReg_height(&frmbufrd, 1080);
	XV_frmbufrd_Set_HwReg_stride(&frmbufrd, 4*1920);
	XV_frmbufrd_Set_HwReg_video_format(&frmbufrd, XVIDC_CSF_MEM_RGB8);
	XV_frmbufrd_Set_HwReg_frm_buffer_V(&frmbufrd, XVFRMBUFWR_BUFFER_BASEADDR);
	XV_frmbufrd_EnableAutoRestart(&frmbufrd);
	XV_frmbufrd_Start(&frmbufrd);


	while(1){

	}


    cleanup_platform();
    return 0;
}

function_prototype.c

C/C++
/******************************************************************************
* Copyright (C) 2018 - 2020 Xilinx, Inc.  All rights reserved.
* SPDX-License-Identifier: MIT
*******************************************************************************/

/*****************************************************************************/
/**
*
* @file function_prototype.c
*
* <pre>
* MODIFICATION HISTORY:
*
* Ver   Who    Date     Changes
* ----- ------ -------- --------------------------------------------------
* X.XX  XX     YY/MM/DD
* 1.00  RHe    19/09/20 Initial release.
* </pre>
*
******************************************************************************/

/***************************** Include Files *******************************/

#include "xparameters.h"
#include "xiic.h"
#include "xil_exception.h"
#include "function_prototype.h"
#include "pcam_5C_cfgs.h"
#include "xstatus.h"

#include "xil_printf.h"
#include "xil_types.h"
#include "xcsiss.h"
#include "xintc.h"
#include "sleep.h"
#include "xbasic_types.h"
//END




/************************** Constant Definitions *****************************/





#define IIC_FMC_DEVICE_ID	XPAR_IIC_0_DEVICE_ID
#define IIC_ADAPTER_DEVICE_ID	XPAR_IIC_1_DEVICE_ID

#define IIC_FMC_DEVICE_ID	XPAR_IIC_0_DEVICE_ID
#define IIC_ADAPTER_DEVICE_ID	XPAR_IIC_1_DEVICE_ID
#ifdef XPAR_INTC_0_DEVICE_ID
  #define INTC_DEVICE_ID		XPAR_INTC_0_DEVICE_ID
  #define IIC_FMC_INTR_ID	XPAR_INTC_0_IIC_0_VEC_ID
  #define IIC_ADAPTER_INTR_ID	XPAR_INTC_0_IIC_0_VEC_ID
  #define INTC			XIntc
  #define INTC_HANDLER		XIntc_InterruptHandler
#else
  #define INTC_DEVICE_ID		XPAR_SCUGIC_SINGLE_DEVICE_ID
  #define IIC_FMC_INTR_ID	XPAR_FABRIC_IIC_0_VEC_ID
  #define IIC_ADAPTER_INTR_ID	XPAR_FABRIC_IIC_0_VEC_ID
  #define INTC			XScuGic
  #define INTC_HANDLER		XScuGic_InterruptHandler
#endif



#define FMC_ADDRESS 		0x3C
#define ADAPTER_ADDRESS 	0x3C
#define SENSOR_ADDRESS 		0x3C

#define IIC_MUX_ADDRESS 	0x74
#define IIC_FMC_CHANNEL		0x07

#define IIC_MUX_ENABLE		0
#define PAGE_SIZE   16



#define XCSIRXSS_DEVICE_ID      XPAR_CSISS_0_DEVICE_ID

/******************* Function Prototypes ************************************/




/**************************** Type Definitions *******************************/

typedef u8 AddressType;
u8 FmcIicAddr;		/* Variable for storing FMC IIC address */
u8 AdapterIicAddr;	/* Variable for storing Adapter IIC address */
u8 SensorIicAddr;	/* Variable for storing Sensor IIC address */
XIic  IicAdapter;
XIic  *IicAdapterInstPtr;/* The instance of the IIC device. */
XCsiSs CsiRxSs;
INTC IntcFmc, IntcAdapter ;
/*
 * Write buffer for writing a page.
 */
u8 WriteBuffer[sizeof(AddressType) + PAGE_SIZE];

u8 ReadBuffer[PAGE_SIZE];	/* Read buffer for reading a page. */

volatile u8 TransmitComplete;	/* Flag to check completion of Transmission */
volatile u8 ReceiveComplete;	/* Flag to check completion of Reception */

u8 SensorIicAddr;	/* Variable for storing Sensor IIC address */


/***************************************************************************/
/**
 * This function programs MIPI CSI SS with the required timing paramters.
 *
 * @return      None.
 *
 * @note        None.
 *
 ***************************************************************************/

u32 InitializeCsiRxSs(void)
{
  u32 Status = 0;
  XCsiSs_Config *CsiRxSsCfgPtr = NULL;

  CsiRxSsCfgPtr = XCsiSs_LookupConfig(XCSIRXSS_DEVICE_ID);
  if (!CsiRxSsCfgPtr) {
    xil_printf("CSI2RxSs LookupCfg failed\r\n");
    return XST_FAILURE;
  }

  Status = XCsiSs_CfgInitialize(&CsiRxSs, CsiRxSsCfgPtr,
		                               CsiRxSsCfgPtr->BaseAddr);

  if (Status != XST_SUCCESS) {
    xil_printf("CsiRxSs Cfg init failed - %x\r\n", Status);
    return Status;
  }


  return XST_SUCCESS;

}

/***************************************************************************/
/**
 *  * This function enables MIPI CSI IP
 *   *
 *    * @return      None.
 *     *
 *      * @note        None.
 *       *
****************************************************************************/

void EnableCSI(void)
{
  XCsiSs_Activate(&CsiRxSs, XCSI_ENABLE);
}

/***************************************************************************/
/**
* This function writes, reads, and verifies the data to the IIC EEPROM. It
* does the write as a single page write, performs a buffered read.
*
* @param	None.
*
* @return	XST_SUCCESS if successful else XST_FAILURE.
*
* @note		None.
*
****************************************************************************/
extern int InitIIC()
{
  int Status;
  XIic_Config *ConfigPtr ;	/* Pointer to configuration data */

  AdapterIicAddr = ADAPTER_ADDRESS;


  /*
   * Initialize the Adapter IIC so that it is ready to use.
   */
  ConfigPtr = XIic_LookupConfig(XPAR_IIC_0_DEVICE_ID);
  if (ConfigPtr == NULL) {
    return XST_FAILURE;
  }

  Status = XIic_CfgInitialize(&IicAdapter, ConfigPtr,
			ConfigPtr->BaseAddress);
  if (Status != XST_SUCCESS) {
    return XST_FAILURE;
  }

  return XST_SUCCESS;

}


/**************************************************************************/
/**************************************************************************/

extern int SetupAdapterInterruptSystem(XIic *IicAdapterInstPtr)
{
  int Status;

#ifdef XPAR_INTC_0_DEVICE_ID

  /*
   * Initialize the interrupt controller driver so that it's ready to use.
   */
  Status = XIntc_Initialize(&IntcAdapter, INTC_DEVICE_ID);

  if (Status != XST_SUCCESS) {
	return XST_FAILURE;
  }

  /*
   * Connect the device driver handler that will be called when an
   * interrupt for the device occurs, the handler defined above performs
   * the specific interrupt processing for the device.
   */
  Status = XIntc_Connect(&IntcAdapter, IIC_ADAPTER_INTR_ID,
				   (XInterruptHandler) XIic_InterruptHandler,
				   IicAdapterInstPtr);
  if (Status != XST_SUCCESS) {
	return XST_FAILURE;
  }

  /*
   *
   *
   * Start the interrupt controller so interrupts are enabled for all
   * devices that cause interrupts.
   */
  Status = XIntc_Start(&IntcAdapter, XIN_REAL_MODE);
  if (Status != XST_SUCCESS) {
	return XST_FAILURE;
  }


  /*
   * Enable the interrupts for the IIC device.
   */
  XIntc_Enable(&IntcAdapter, IIC_ADAPTER_INTR_ID);

#else

  XScuGic_Config *IntcConfig;

  /*
   * Initialize the interrupt controller driver so that it is ready to
   * use.
   */
  IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);
  if (NULL == IntcConfig) {
	return XST_FAILURE;
  }

  Status = XScuGic_CfgInitialize(&IntcAdapter, IntcConfig,
						IntcConfig->CpuBaseAddress);
  if (Status != XST_SUCCESS) {
	return XST_FAILURE;
  }
  XScuGic_SetPriorityTriggerType(&IntcAdapter, IIC_ADAPTER_INTR_ID,
					0xA0, 0x3);
  /*
   * Connect the interrupt handler that will be called when an
   * interrupt occurs for the device.
   */
  Status = XScuGic_Connect(&IntcAdapter, IIC_ADAPTER_INTR_ID,
				 (Xil_InterruptHandler)XIic_InterruptHandler,
				 IicAdapterInstPtr);

  if (Status != XST_SUCCESS) {
	return Status;
  }

  /*
   * Enable the interrupt for the IIC device.
   */
  XScuGic_Enable(&IntcAdapter, IIC_ADAPTER_INTR_ID);

#endif

  /*
   * Initialize the exception table and register the interrupt
   * controller handler with the exception table
   */
  Xil_ExceptionInit();

  Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,
			 (Xil_ExceptionHandler)INTC_HANDLER, &IntcAdapter);

  /* Enable non-critical exceptions */
  Xil_ExceptionEnable();

  return XST_SUCCESS;

}


/***************************************************************************/
extern void SetupIICIntrHandlers() {
  /*
   * Set the Handlers for transmit and reception.
   */
//  XIic_SetSendHandler(&IicFmc, &IicFmc, (XIic_Handler) SendHandler);
//  XIic_SetRecvHandler(&IicFmc, &IicFmc, (XIic_Handler) ReceiveHandler);
//  XIic_SetStatusHandler(&IicFmc, &IicFmc,
	//	                           (XIic_StatusHandler) StatusHandler);

  XIic_SetSendHandler(&IicAdapter, &IicAdapter, (XIic_Handler) SendHandler);
  XIic_SetRecvHandler(&IicAdapter, &IicAdapter,
		                                (XIic_Handler) ReceiveHandler);
  XIic_SetStatusHandler(&IicAdapter, &IicAdapter,
                                 (XIic_StatusHandler) StatusHandler);
}
/***************************************************************************/
/**
* This Send handler is called asynchronously from an interrupt
* context and indicates that data in the specified buffer has been sent.
*
* @param	InstancePtr is not used, but contains a pointer to the IIC
*		device driver instance which the handler is being called for.
*
* @return	None.
*
* @note		None.
*
****************************************************************************/
extern void SendHandler(XIic *InstancePtr)
{
  TransmitComplete = 0;
}

/***************************************************************************/
/**
* This Receive handler is called asynchronously from an interrupt
* context and indicates that data in the specified buffer has been Received.
*
* @param	InstancePtr is not used, but contains a pointer to the IIC
*		device driver instance which the handler is being called for.
*
* @return	None.
*
* @note		None.
*
****************************************************************************/
extern void ReceiveHandler(XIic *InstancePtr)
{
  ReceiveComplete = 0;
}

/***************************************************************************/
/**
* This Status handler is called asynchronously from an interrupt
* context and indicates the events that have occurred.
*
* @param	InstancePtr is a pointer to the IIC driver instance for which
*		the handler is being called for.
* @param	Event indicates the condition that has occurred.
*
* @return	None.
*
* @note		None.
*
****************************************************************************/
extern void StatusHandler(XIic *InstancePtr, int Event)
{

}




/****************************************************************************/

extern int SetAdapterIICAddress() {

  int Status;
  AdapterIicAddr = ADAPTER_ADDRESS;
  /*
   * Set Address for Adapter IIC
   */
  Status = XIic_SetAddress(&IicAdapter, XII_ADDR_TO_SEND_TYPE,
				 AdapterIicAddr);
  if (Status != XST_SUCCESS) {
	return XST_FAILURE;
  }


  return XST_SUCCESS;

}



/*************************************************************************/
/**
* This function writes a buffer of data to the Adapter IIC
* @param	ByteCount contains the number of bytes in the buffer to be
*		written.
*
* @return	XST_SUCCESS if successful else XST_FAILURE.
*
* @note		The Byte count should not exceed the page size of the EEPROM as
*		noted by the constant PAGE_SIZE.
*
**************************************************************************/
extern int AdapterWriteData(u16 ByteCount)
{
  int Status;

  u8 count = 0;

  /*
   * Set the defaults.
   */
  TransmitComplete = 1;
  IicAdapter.Stats.TxErrors = 0;

  /*
   * Start the IIC device.
   */
  Status = XIic_Start(&IicAdapter);
  if (Status != XST_SUCCESS) {
	return XST_FAILURE;
  }

  /*
   * Send the Data.
   */
  Status = XIic_MasterSend(&IicAdapter, WriteBuffer, ByteCount);
  if (Status != XST_SUCCESS) {
	return XST_FAILURE;
  }

  /*
   * Wait till the transmission is completed.
   */
  while ((TransmitComplete) || (XIic_IsIicBusy(&IicAdapter) == TRUE)) {

	if(count == 200) TransmitComplete = 0;

	/*
	 * This condition is required to be checked in the case where we
	 * are writing two consecutive buffers of data to the EEPROM.
	 * The EEPROM takes about 2 milliseconds time to update the data
	 * internally after a STOP has been sent on the bus.
	 * A NACK will be generated in the case of a second write before
	 * the EEPROM updates the data internally resulting in a
	 * Transmission Error.
	 */
	if (IicAdapter.Stats.TxErrors != 0) {


	  /*
	   * Enable the IIC device.
	   */
	  Status = XIic_Start(&IicAdapter);
	  if (Status != XST_SUCCESS) {
		return XST_FAILURE;
	  }


	  if (!XIic_IsIicBusy(&IicAdapter)) {
		/*
		 * Send the Data.
		 */
	    Status = XIic_MasterSend(&IicAdapter, WriteBuffer,
							 ByteCount);
		if (Status == XST_SUCCESS) {
		  IicAdapter.Stats.TxErrors = 0;
		}
		else {

		}
	  }
	}
  }

  /*
   * Stop the IIC device.
   */
  Status = XIic_Stop(&IicAdapter);
  if (Status != XST_SUCCESS) {
	return XST_FAILURE;
  }

  return XST_SUCCESS;

}


//1ms delay; processor clk = 100 MHz
void Sensor_Delay()
{
  int cnt;
  for(cnt = 0; cnt < 100; cnt++) {

  }
}



int WritetoReg(u8 buf1, u8 buf2, u8 buf3){

  WriteBuffer[0] = buf1;
  WriteBuffer[1] = buf2;
  WriteBuffer[2] = buf3;

  for (int Index = 0; Index < PAGE_SIZE; Index++) {
	WriteBuffer[3 + Index] = 0xFF;
	ReadBuffer[Index] = 0;
  }

  AdapterWriteData(3);

  return XST_SUCCESS;

}


/***************************************************************************/
/***************************************************************************/
/***************************************************************************/

extern int SensorPreConfig(int pcam5c_mode) {


  u32 Index, MaxIndex, MaxIndex1, MaxIndex2;
  int Status;
  SensorIicAddr = SENSOR_ADDRESS;
  Status = XIic_SetAddress(&IicAdapter, XII_ADDR_TO_SEND_TYPE, SensorIicAddr);
  if (Status != XST_SUCCESS) {
	return XST_FAILURE;
  }


  WritetoReg(0x31, 0x03, 0x11);
  WritetoReg(0x30, 0x08, 0x82);

  Sensor_Delay();


  MaxIndex = length_sensor_pre;
  for(Index = 0; Index < (MaxIndex - 0); Index++)
  {
    WriteBuffer[0] = sensor_pre[Index].Address >> 8;
	WriteBuffer[1] = sensor_pre[Index].Address;
	WriteBuffer[2] = sensor_pre[Index].Data;

    Sensor_Delay();

	Status = AdapterWriteData(3);
	if (Status != XST_SUCCESS) {
	  return XST_FAILURE;
	}
  }


  WritetoReg(0x30, 0x08, 0x42);


  MaxIndex1 = length_pcam5c_mode1;

  for(Index = 0; Index < (MaxIndex1 - 0); Index++)
  {
    WriteBuffer[0] = pcam5c_mode1[Index].Address >> 8;
	WriteBuffer[1] = pcam5c_mode1[Index].Address;
	WriteBuffer[2] = pcam5c_mode1[Index].Data;

    Sensor_Delay();

	Status = AdapterWriteData(3);
	if (Status != XST_SUCCESS) {
	  return XST_FAILURE;
	}
  }


  WritetoReg(0x30, 0x08, 0x02);
  Sensor_Delay();
  WritetoReg(0x30, 0x08, 0x42);


  MaxIndex2 = length_sensor_list;

  for(Index = 0; Index < (MaxIndex2 - 0); Index++)
  {
    WriteBuffer[0] = sensor_list[Index].Address >> 8;
	WriteBuffer[1] = sensor_list[Index].Address;
	WriteBuffer[2] = sensor_list[Index].Data;

    Sensor_Delay();

	Status = AdapterWriteData(3);
	  if (Status != XST_SUCCESS) {
		return XST_FAILURE;
	  }
  }


  if(Status != XST_SUCCESS) {
    xil_printf("Error: in Writing entry status = %x \r\n", Status);
    return XST_FAILURE;
  }

  return XST_SUCCESS;

}

function_prototype.h

C/C++
/******************************************************************************
* Copyright (C) 2018 - 2020 Xilinx, Inc.  All rights reserved.
* SPDX-License-Identifier: MIT
*******************************************************************************/

/*****************************************************************************/
/**
*
* @file function_prototype.h
*
* <pre>
* MODIFICATION HISTORY:
*
* Ver   Who    Date     Changes
* ----- ------ -------- --------------------------------------------------
* X.XX  XX     YY/MM/DD
* 1.00  RHe    19/09/20 Initial release.
* </pre>
*
******************************************************************************/
/***************************** Include Files *********************************/

#include "xparameters.h"
#include "xiic.h"
#include "xil_exception.h"



/*****************************************************************************/

extern int InitIIC();

extern int AdapterWriteData(u16 ByteCount);

extern void SetupIICIntrHandlers();

extern int SetupFmcInterruptSystem(XIic *IicFmcInstPtr);

extern int SetupAdapterInterruptSystem(XIic *IicAdapterInstPtr);

extern void SendHandler(XIic *InstancePtr);

extern void ReceiveHandler(XIic *InstancePtr);

extern void StatusHandler(XIic *InstancePtr, int Event);

extern int SetFmcIICAddress();

extern int SetAdapterIICAddress();

extern void Sensor_Delay();
extern void resetIp();
extern void resetVIP();
extern void HaltVDMA();
extern int RunVDMA();

extern int SensorPreConfig(int pcam5c_mode);


extern void GPIOSelect(int);
extern int vdma_dsi();
extern int vdma_hdmi();
extern int vtpg_hdmi();
extern int getchar();
extern void DisableDSI();
extern void DisableCSI();
extern void EnableCSI();
extern void InitDSI();

extern u32 SetupDSI(void);
extern u32 InitializeCsiRxSs(void);

extern int InitIIC(void);
extern void SetupIICIntrHandlers(void);

extern int WritetoReg(u8 buf1, u8 buf2, u8 buf3);
extern int demosaic();
extern void CamReset(void);


extern void DisableCSI(void);
extern void DisableDSI(void);
extern void InitDSI(void);
extern void InitVprocSs_Scaler(int count);
extern void EnableCSI(void);

pcam_5C_cfgs.c

C/C++
/******************************************************************************
* Copyright (C) 2018 - 2020 Xilinx, Inc.  All rights reserved.
* SPDX-License-Identifier: MIT
*******************************************************************************/

/*****************************************************************************/
/**
*
* @file pcam_5C_cfgs.c
*
* <pre>
* MODIFICATION HISTORY:
*
* Ver   Who    Date     Changes
* ----- ------ -------- --------------------------------------------------
* X.XX  XX     YY/MM/DD
* 1.00  RHe    19/09/20 Initial release.
* </pre>
*
******************************************************************************/

/***************************** Include Files *********************************/

#include "xparameters.h"
#include "xiic.h"
#include "xil_exception.h"
#include "function_prototype.h"
#include "pcam_5C_cfgs.h"




/**************************** Type Definitions *******************************/

/*
*The AddressType for ML300/ML310/ML410/ML510 boards should be u16 as the address
* pointer in the on board EEPROM is 2 bytes.
* The AddressType for ML403/ML501/ML505/ML507/ML605/SP601/SP605/KC705/ZC702
* /ZC706 boards should be u8 as the address pointer in the on board EEPROM is
* 1 bytes.
 */
/*
*/
/************************** Function Prototypes ******************************/

int pcam5c_mode = 1;

//init_zybo
struct regval_list sensor_pre[] = {
  //[7]=0 Software reset; [6]=1 Software power down; Default=0x02
  {0x3008, 0x42},
  //[1]=1 System input clock from PLL; Default read = 0x11
  {0x3103, 0x03},
  //[3:0]=0000 MD2P,MD2N,MCP,MCN input; Default=0x00
  {0x3017, 0x00},
  //[7:2]=000000 MD1P,MD1N, D3:0 input; Default=0x00
  {0x3018, 0x00},
  //[6:4]=001 PLL charge pump, [3:0]=1000 MIPI 8-bit mode
  {0x3034, 0x18},


  //PLL1 configuration
  {0x3035, 0x11},
  {0x3036, 0x38},
  {0x3037, 0x11},
  {0x3108, 0x01},
  //PLL2 configuration
  {0x303D, 0x10},
  {0x303B, 0x19},

  {0x3630, 0x2e},
  {0x3631, 0x0e},
  {0x3632, 0xe2},
  {0x3633, 0x23},
  {0x3621, 0xe0},
  {0x3704, 0xa0},
  {0x3703, 0x5a},
  {0x3715, 0x78},
  {0x3717, 0x01},
  {0x370b, 0x60},
  {0x3705, 0x1a},
  {0x3905, 0x02},
  {0x3906, 0x10},
  {0x3901, 0x0a},
  {0x3731, 0x02},
  //VCM debug mode
  {0x3600, 0x37},
  {0x3601, 0x33},
  //System control register changing not recommended
  {0x302d, 0x60},
  //??
  {0x3620, 0x52},
  {0x371b, 0x20},
  //?? DVP
  {0x471c, 0x50},

  {0x3a13, 0x43},
  {0x3a18, 0x00},
  {0x3a19, 0xf8},
  {0x3635, 0x13},
  {0x3636, 0x06},
  {0x3634, 0x44},
  {0x3622, 0x01},
  {0x3c01, 0x34},
  {0x3c04, 0x28},
  {0x3c05, 0x98},
  {0x3c06, 0x00},
  {0x3c07, 0x08},
  {0x3c08, 0x00},
  {0x3c09, 0x1c},
  {0x3c0a, 0x9c},
  {0x3c0b, 0x40},

  //[7]=1 color bar enable, [3:2]=00 eight color bar
  {0x503d, 0x00},
  //[2]=1 ISP vflip, [1]=1 sensor vflip
  {0x3820, 0x46},

  {0x300e, 0x45},
  //{0x300e, 0x25},
  {0x4800, 0x14},
  {0x302e, 0x08},
  //[7:4]=0x3 YUV422, [3:0]=0x0 YUYV
  //{0x4300, 0x30},
  //[7:4]=0x6 RGB565, [3:0]=0x0 {b[4:0],g[5:3],g[2:0],r[4:0]}
  {0x4300, 0x6f},
  {0x501f, 0x01},

  {0x4713, 0x03},
  {0x4407, 0x04},
  {0x440e, 0x00},
  {0x460b, 0x35},
  //[1]=0 DVP PCLK divider manual control by 0x3824[4:0]
  {0x460c, 0x20},
  //[4:0]=1 SCALE_DIV=INT(3824[4:0]/2)
  {0x3824, 0x01},

  //MIPI timing
  //		{0x4805, 0x10}, //LPX global timing select=auto
  //		{0x4818, 0x00}, //hs_prepare + hs_zero_min ns
  //		{0x4819, 0x96},
  //		{0x482A, 0x00}, //hs_prepare + hs_zero_min UI
  //
  //		{0x4824, 0x00}, //lpx_p_min ns
  //		{0x4825, 0x32},
  //		{0x4830, 0x00}, //lpx_p_min UI
  //
  //		{0x4826, 0x00}, //hs_prepare_min ns
  //		{0x4827, 0x32},
  //		{0x4831, 0x00}, //hs_prepare_min UI

  {0x5000, 0x07},
  {0x5001, 0x03}

};


//pcam_iic_1080p_
struct regval_list pcam5c_mode1[] =
{//1920 x 1080 @ 30fps, RAW10, MIPISCLK=420, SCLK=84MHz, PCLK=84M
		//PLL1 configuration
  {0x3035, 0x21}, // 30fps setting
  //[7:0]=105 PLL multiplier
  {0x3036, 0x69},//96,B0,A2,C8=800,E0=900
  //[4]=0 PLL root divider /1, [3:0]=5 PLL pre-divider /1.5
  {0x3037, 0x05},
  {0x3108, 0x11},

  //[6:4]=001 PLL charge pump, [3:0]=1010 MIPI 10-bit mode
  {0x3034, 0x1A},

  //[3:0]=0 X address start high byte
  {0x3800, (336 >> 8) & 0x0F},
  //[7:0]=0 X address start low byte
  {0x3801, 336 & 0xFF},
  //[2:0]=0 Y address start high byte
  {0x3802, (426 >> 8) & 0x07},
  //[7:0]=0 Y address start low byte
  {0x3803, 426 & 0xFF},

  //[3:0] X address end high byte
  {0x3804, (2287 >> 8) & 0x0F},
  //[7:0] X address end low byte
  {0x3805, 2287 & 0xFF},
  //[2:0] Y address end high byte
  {0x3806, (1529 >> 8) & 0x07},
  //[7:0] Y address end low byte
  {0x3807, 1529 & 0xFF},

  //[3:0]=0 timing hoffset high byte
  {0x3810, (16 >> 8) & 0x0F},
  //[7:0]=0 timing hoffset low byte
  {0x3811, 16 & 0xFF},
  //[2:0]=0 timing voffset high byte
  {0x3812, (12 >> 8) & 0x07},
  //[7:0]=0 timing voffset low byte
  {0x3813, 12 & 0xFF},

  //[3:0] Output horizontal width high byte
  {0x3808, (1920 >> 8) & 0x0F},
  //[7:0] Output horizontal width low byte
  {0x3809, 1920 & 0xFF},
  //[2:0] Output vertical height high byte
  {0x380a, (1080 >> 8) & 0x7F},
  //[7:0] Output vertical height low byte
  {0x380b, 1080 & 0xFF},

  //HTS line exposure time in # of pixels Tline=HTS/sclk
  {0x380c, (2500 >> 8) & 0x1F},
  {0x380d, 2500 & 0xFF},
  //VTS frame exposure time in # lines
  {0x380e, (1120 >> 8) & 0xFF},
  {0x380f, 1120 & 0xFF},

  {0x3814, 0x11},
  {0x3815, 0x11},

  //[2]=0 ISP mirror, [1]=0 sensor mirror, [0]=0 no horizontal binning
  {0x3821, 0x00},

  {0x4837, 24}, // 1/84M*2 17,15,16,13,12

  //Undocumented anti-green settings
  {0x3618, 0x00}, // Removes vertical lines appearing under bright light
  {0x3612, 0x59},
  {0x3708, 0x64},
  {0x3709, 0x52},
  {0x370c, 0x03},

  //[7:4]=0x0 Formatter RAW, [3:0]=0x0 BGBG/GRGR
  {0x4300, 0x00},
  //[2:0]=0x3 Format select ISP RAW (DPC)
  {0x501f, 0x03}

};



//Default sensor values: Mode1 //advanced_awb
struct regval_list sensor_list[] = {
  // Enable Advanced AWB
  {0x3406 ,0x00},
  {0x5192 ,0x04},
  {0x5191 ,0xf8},
  {0x518d ,0x26},
  {0x518f ,0x42},
  {0x518e ,0x2b},
  {0x5190 ,0x42},
  {0x518b ,0xd0},
  {0x518c ,0xbd},
  {0x5187 ,0x18},
  {0x5188 ,0x18},
  {0x5189 ,0x56},
  {0x518a ,0x5c},
  {0x5186 ,0x1c},
  {0x5181 ,0x50},
  {0x5184 ,0x20},
  {0x5182 ,0x11},
  {0x5183 ,0x00},
  {0x5001 ,0x03}

};


/****************************************************************************/

const int length_sensor_pre = sizeof(sensor_pre) / sizeof(sensor_pre[0]);
const int size_sensor_pre = sizeof(sensor_pre);

const int length_pcam5c_mode1 = sizeof(pcam5c_mode1) / sizeof(pcam5c_mode1[0]);
const int size_length_pcam5c_mode1 = sizeof(length_pcam5c_mode1);

const int length_sensor_list= sizeof(sensor_list) / sizeof(sensor_list[0]);
const int size_sensor_list= sizeof(sensor_list);

pcam_5C_cfgs.h

C/C++
/******************************************************************************
* Copyright (C) 2018 - 2020 Xilinx, Inc.  All rights reserved.
* SPDX-License-Identifier: MIT
*******************************************************************************/

/*****************************************************************************/
/**
*
* @file pcam_5C_cfgs.h
*
* <pre>
* MODIFICATION HISTORY:
*
* Ver   Who    Date     Changes
* ----- ------ -------- --------------------------------------------------
* X.XX  XX     YY/MM/DD
* 1.00  RHe    19/09/20 Initial release.
* </pre>
*
******************************************************************************/

extern struct regval_list {
  u16 Address;
  u16  Data;
} regval_list;

extern struct regval_list sensor_pre[];
extern const int length_sensor_pre;

extern struct regval_list pcam5c_mode1[];
extern const int length_pcam5c_mode1;

extern struct regval_list seq_shrt[];
extern const int length_seq_shrt;

extern struct regval_list sensor_list[];
extern const int length_sensor_list;
extern const int size_sensor_list;

extern struct regval_list seq[];
extern const int length_seq;

vga.h

C/C++
/************************************************************************/
/*																		*/
/*	vga_modes.h	--	VideoMode definitions		 						*/
/*																		*/
/************************************************************************/
/*	Author: Sam Bobrowicz												*/
/*	Copyright 2014, Digilent Inc.										*/
/************************************************************************/
/*  Module Description: 												*/
/*																		*/
/*		This file contains the definition of the VideoMode type, and	*/
/*		also defines several common video modes							*/
/*																		*/
/************************************************************************/
/*  Revision History:													*/
/* 																		*/
/*		2/17/2014(SamB): Created										*/
/*																		*/
/************************************************************************/

#ifndef VGA_MODES_H_
#define VGA_MODES_H_

typedef struct {
	char label[64]; /* Label describing the resolution */
	u32 width; /*Width of the active video frame*/
	u32 height; /*Height of the active video frame*/
	u32 hps; /*Start time of Horizontal sync pulse, in pixel clocks (active width + H. front porch)*/
	u32 hpe; /*End time of Horizontal sync pulse, in pixel clocks (active width + H. front porch + H. sync width)*/
	u32 hmax; /*Total number of pixel clocks per line (active width + H. front porch + H. sync width + H. back porch) */
	u32 hpol; /*hsync pulse polarity*/
	u32 vps; /*Start time of Vertical sync pulse, in lines (active height + V. front porch)*/
	u32 vpe; /*End time of Vertical sync pulse, in lines (active height + V. front porch + V. sync width)*/
	u32 vmax; /*Total number of lines per frame (active height + V. front porch + V. sync width + V. back porch) */
	u32 vpol; /*vsync pulse polarity*/
	double freq; /*Pixel Clock frequency*/
} VideoMode;

static const VideoMode VMODE_640x480 = {
	.label = "640x480@60Hz",
	.width = 640,
	.height = 480,
	.hps = 656,
	.hpe = 752,
	.hmax = 799,
	.hpol = 0,
	.vps = 490,
	.vpe = 492,
	.vmax = 524,
	.vpol = 0,
	.freq = 25.0
};

static const VideoMode VMODE_800x600 = {
	.label = "800x600@60Hz",
	.width = 800,
	.height = 600,
	.hps = 840,
	.hpe = 968,
	.hmax = 1055,
	.hpol = 1,
	.vps = 601,
	.vpe = 605,
	.vmax = 627,
	.vpol = 1,
	.freq = 40.0
};

static const VideoMode VMODE_1280x1024 = {
	.label = "1280x1024@60Hz",
	.width = 1280,
	.height = 1024,
	.hps = 1328,
	.hpe = 1440,
	.hmax = 1687,
	.hpol = 1,
	.vps = 1025,
	.vpe = 1028,
	.vmax = 1065,
	.vpol = 1,
	.freq = 108.0
};

static const VideoMode VMODE_1280x720 = {
	.label = "1280x720@60Hz",
	.width = 1280,
	.height = 720,
	.hps = 1390,
	.hpe = 1430,
	.hmax = 1649,
	.hpol = 1,
	.vps = 725,
	.vpe = 730,
	.vmax = 749,
	.vpol = 1,
	.freq = 74.25, //74.2424 is close enough
};

static const VideoMode VMODE_1600x900 = {
        .label = "1600x900@60Hz",
        .width = 1600,
        .height = 900,
        .hps = 1648,
        .hpe = 1680,
        .hmax = 1759,
        .hpol = 1,
        .vps = 903,
        .vpe = 908,
        .vmax = 925,
        .vpol = 0,
        .freq = 97.75
};

static const VideoMode VMODE_1920x1080 = {
	.label = "1920x1080@60Hz",
	.width = 1920,
	.height = 1080,
	.hps = 2008,
	.hpe = 2052,
	.hmax = 2199,
	.hpol = 1,
	.vps = 1084,
	.vpe = 1089,
	.vmax = 1124,
	.vpol = 1,
	.freq = 148.5 //148.57 is close enough
};


#endif /* VGA_MODES_H_ */

Credits

Adam Taylor

Adam Taylor

122 projects • 2114 followers
Adam Taylor is an expert in design and development of embedded systems and FPGA’s for several end applications (Space, Defense, Automotive)

Comments