|
| 1 | +# Copyright 2022, The Regents of the University of California. |
| 2 | +# All rights reserved. |
| 3 | +# |
| 4 | +# Redistribution and use in source and binary forms, with or without |
| 5 | +# modification, are permitted provided that the following conditions are met: |
| 6 | +# |
| 7 | +# 1. Redistributions of source code must retain the above copyright notice, |
| 8 | +# this list of conditions and the following disclaimer. |
| 9 | +# |
| 10 | +# 2. Redistributions in binary form must reproduce the above copyright notice, |
| 11 | +# this list of conditions and the following disclaimer in the documentation |
| 12 | +# and/or other materials provided with the distribution. |
| 13 | +# |
| 14 | +# THIS SOFTWARE IS PROVIDED BY THE REGENTS OF THE UNIVERSITY OF CALIFORNIA ''AS |
| 15 | +# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| 16 | +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| 17 | +# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF CALIFORNIA OR |
| 18 | +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| 19 | +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT |
| 20 | +# OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| 21 | +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| 22 | +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING |
| 23 | +# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY |
| 24 | +# OF SUCH DAMAGE. |
| 25 | +# |
| 26 | +# The views and conclusions contained in the software and documentation are those |
| 27 | +# of the authors and should not be interpreted as representing official policies, |
| 28 | +# either expressed or implied, of The Regents of the University of California. |
| 29 | + |
| 30 | +# create block design |
| 31 | +create_bd_design "zynq_ps" |
| 32 | + |
| 33 | +# Create blocks |
| 34 | + |
| 35 | +# Zynq PS |
| 36 | +set zynq_ultra_ps [ create_bd_cell -type ip -vlnv xilinx.com:ip:zynq_ultra_ps_e zynq_ultra_ps ] |
| 37 | +set_property -dict [list \ |
| 38 | + CONFIG.PSU_BANK_0_IO_STANDARD {LVCMOS18} \ |
| 39 | + CONFIG.PSU_BANK_1_IO_STANDARD {LVCMOS18} \ |
| 40 | + CONFIG.PSU_BANK_2_IO_STANDARD {LVCMOS18} \ |
| 41 | + CONFIG.PSU_BANK_3_IO_STANDARD {LVCMOS33} \ |
| 42 | + CONFIG.PSU_DYNAMIC_DDR_CONFIG_EN 1 \ |
| 43 | + CONFIG.PSU__DDRC__COMPONENTS {UDIMM} \ |
| 44 | + CONFIG.PSU__DDRC__DEVICE_CAPACITY {4096 MBits} \ |
| 45 | + CONFIG.PSU__DDRC__SPEED_BIN {DDR4_2133P} \ |
| 46 | + CONFIG.PSU__DDRC__ROW_ADDR_COUNT {15} \ |
| 47 | + CONFIG.PSU__DDRC__T_RC {46.5} \ |
| 48 | + CONFIG.PSU__DDRC__T_FAW {21.0} \ |
| 49 | + CONFIG.PSU__DDRC__DDR4_ADDR_MAPPING {0} \ |
| 50 | + CONFIG.PSU__DDRC__FREQ_MHZ {1067} \ |
| 51 | + CONFIG.PSU__PMU__PERIPHERAL__ENABLE {1} \ |
| 52 | + CONFIG.PSU__PMU__GPI0__ENABLE {1} \ |
| 53 | + CONFIG.PSU__PMU__GPI1__ENABLE {0} \ |
| 54 | + CONFIG.PSU__PMU__GPI2__ENABLE {0} \ |
| 55 | + CONFIG.PSU__PMU__GPI3__ENABLE {0} \ |
| 56 | + CONFIG.PSU__PMU__GPI4__ENABLE {0} \ |
| 57 | + CONFIG.PSU__PMU__GPI5__ENABLE {0} \ |
| 58 | + CONFIG.PSU__QSPI__PERIPHERAL__ENABLE {1} \ |
| 59 | + CONFIG.PSU__QSPI__PERIPHERAL__MODE {Dual Parallel} \ |
| 60 | + CONFIG.PSU__QSPI__GRP_FBCLK__ENABLE {1} \ |
| 61 | + CONFIG.PSU__CAN1__PERIPHERAL__ENABLE {1} \ |
| 62 | + CONFIG.PSU__CAN1__PERIPHERAL__IO {MIO 24 .. 25} \ |
| 63 | + CONFIG.PSU__GPIO0_MIO__PERIPHERAL__ENABLE {1} \ |
| 64 | + CONFIG.PSU__GPIO1_MIO__PERIPHERAL__ENABLE {1} \ |
| 65 | + CONFIG.PSU__I2C0__PERIPHERAL__ENABLE {1} \ |
| 66 | + CONFIG.PSU__I2C0__PERIPHERAL__IO {MIO 14 .. 15} \ |
| 67 | + CONFIG.PSU__I2C1__PERIPHERAL__ENABLE {1} \ |
| 68 | + CONFIG.PSU__I2C1__PERIPHERAL__IO {MIO 16 .. 17} \ |
| 69 | + CONFIG.PSU__UART0__PERIPHERAL__ENABLE {1} \ |
| 70 | + CONFIG.PSU__UART0__PERIPHERAL__IO {MIO 18 .. 19} \ |
| 71 | + CONFIG.PSU__UART1__PERIPHERAL__ENABLE {1} \ |
| 72 | + CONFIG.PSU__UART1__PERIPHERAL__IO {MIO 20 .. 21} \ |
| 73 | + CONFIG.PSU__SD1__PERIPHERAL__ENABLE {1} \ |
| 74 | + CONFIG.PSU__SD1__GRP_CD__ENABLE {1} \ |
| 75 | + CONFIG.PSU__SD1__GRP_WP__ENABLE {1} \ |
| 76 | + CONFIG.PSU__ENET3__PERIPHERAL__ENABLE {1} \ |
| 77 | + CONFIG.PSU__ENET3__GRP_MDIO__ENABLE {1} \ |
| 78 | + CONFIG.PSU__USB0__PERIPHERAL__ENABLE {1} \ |
| 79 | + CONFIG.PSU__USB0__REF_CLK_SEL {Ref Clk2} \ |
| 80 | + CONFIG.PSU__USB3_0__PERIPHERAL__ENABLE {1} \ |
| 81 | + CONFIG.PSU__USB3_0__PERIPHERAL__IO {GT Lane2} \ |
| 82 | + CONFIG.PSU__DISPLAYPORT__PERIPHERAL__ENABLE {1} \ |
| 83 | + CONFIG.PSU__DPAUX__PERIPHERAL__IO {MIO 27 .. 30} \ |
| 84 | + CONFIG.PSU__DP__REF_CLK_SEL {Ref Clk3} \ |
| 85 | + CONFIG.PSU__DP__LANE_SEL {Single Lower} \ |
| 86 | + CONFIG.PSU__SATA__PERIPHERAL__ENABLE {1} \ |
| 87 | + CONFIG.PSU__SATA__LANE1__IO {GT Lane3} \ |
| 88 | + CONFIG.PSU__PCIE__PERIPHERAL__ENABLE {1} \ |
| 89 | + CONFIG.PSU__PCIE__PERIPHERAL__ROOTPORT_IO {MIO 31} \ |
| 90 | + CONFIG.PSU__PCIE__DEVICE_PORT_TYPE {Root Port} \ |
| 91 | + CONFIG.PSU__PCIE__BAR0_ENABLE {0} \ |
| 92 | + CONFIG.PSU__PCIE__CLASS_CODE_BASE {0x06} \ |
| 93 | + CONFIG.PSU__PCIE__CLASS_CODE_SUB {0x04} \ |
| 94 | + CONFIG.PSU__SWDT0__PERIPHERAL__ENABLE {1} \ |
| 95 | + CONFIG.PSU__SWDT1__PERIPHERAL__ENABLE {1} \ |
| 96 | + CONFIG.PSU__TTC0__PERIPHERAL__ENABLE {1} \ |
| 97 | + CONFIG.PSU__TTC1__PERIPHERAL__ENABLE {1} \ |
| 98 | + CONFIG.PSU__TTC2__PERIPHERAL__ENABLE {1} \ |
| 99 | + CONFIG.PSU__TTC3__PERIPHERAL__ENABLE {1} \ |
| 100 | + CONFIG.PSU__USE__M_AXI_GP0 {1} \ |
| 101 | + CONFIG.PSU__MAXIGP0__DATA_WIDTH {32} \ |
| 102 | + CONFIG.PSU__USE__M_AXI_GP1 {0} \ |
| 103 | + CONFIG.PSU__USE__M_AXI_GP2 {0} \ |
| 104 | + CONFIG.PSU__USE__S_AXI_GP0 {1} \ |
| 105 | + CONFIG.PSU__USE__IRQ0 {1} \ |
| 106 | + CONFIG.PSU__CRF_APB__ACPU_CTRL__SRCSEL {APLL} \ |
| 107 | + CONFIG.PSU__CRF_APB__DDR_CTRL__SRCSEL {DPLL} \ |
| 108 | + CONFIG.PSU__CRF_APB__DP_VIDEO_REF_CTRL__SRCSEL {VPLL} \ |
| 109 | + CONFIG.PSU__CRF_APB__DP_AUDIO_REF_CTRL__SRCSEL {RPLL} \ |
| 110 | + CONFIG.PSU__CRF_APB__DP_STC_REF_CTRL__SRCSEL {RPLL} \ |
| 111 | + CONFIG.PSU__CRF_APB__DPDMA_REF_CTRL__FREQMHZ {667} \ |
| 112 | + CONFIG.PSU__CRF_APB__DPDMA_REF_CTRL__SRCSEL {APLL} \ |
| 113 | + CONFIG.PSU__CRF_APB__GDMA_REF_CTRL__FREQMHZ {667} \ |
| 114 | + CONFIG.PSU__CRF_APB__GDMA_REF_CTRL__SRCSEL {APLL} \ |
| 115 | + CONFIG.PSU__CRF_APB__GPU_REF_CTRL__SRCSEL {DPLL} \ |
| 116 | + CONFIG.PSU__CRF_APB__TOPSW_MAIN_CTRL__SRCSEL {DPLL} \ |
| 117 | + CONFIG.PSU__CRF_APB__TOPSW_LSBUS_CTRL__SRCSEL {IOPLL} \ |
| 118 | + CONFIG.PSU__CRL_APB__ADMA_REF_CTRL__SRCSEL {DPLL} \ |
| 119 | + CONFIG.PSU__CRL_APB__CPU_R5_CTRL__SRCSEL {DPLL} \ |
| 120 | + CONFIG.PSU__CRL_APB__IOU_SWITCH_CTRL__SRCSEL {DPLL} \ |
| 121 | + CONFIG.PSU__CRL_APB__LPD_LSBUS_CTRL__SRCSEL {IOPLL} \ |
| 122 | + CONFIG.PSU__CRL_APB__LPD_SWITCH_CTRL__SRCSEL {DPLL} \ |
| 123 | + CONFIG.PSU__CRL_APB__PCAP_CTRL__SRCSEL {IOPLL} \ |
| 124 | + CONFIG.PSU__CRL_APB__PL0_REF_CTRL__FREQMHZ {300} \ |
| 125 | + CONFIG.PSU__CRL_APB__PL0_REF_CTRL__SRCSEL {IOPLL} \ |
| 126 | + CONFIG.PSU__CRL_APB__SDIO1_REF_CTRL__SRCSEL {IOPLL} \ |
| 127 | +] $zynq_ultra_ps |
| 128 | + |
| 129 | +# control AXI interconnect |
| 130 | +set axi_interconnect_ctrl [ create_bd_cell -type ip -vlnv xilinx.com:ip:axi_interconnect axi_interconnect_ctrl ] |
| 131 | + |
| 132 | +# reset |
| 133 | +set proc_sys_reset [ create_bd_cell -type ip -vlnv xilinx.com:ip:proc_sys_reset proc_sys_reset ] |
| 134 | + |
| 135 | +# Create connections |
| 136 | + |
| 137 | +# Clock |
| 138 | +set pl_clk0 [get_bd_pins $zynq_ultra_ps/pl_clk0] |
| 139 | +make_bd_pins_external $pl_clk0 |
| 140 | +set_property name pl_clk0 [get_bd_ports -of_objects [get_bd_nets -of_objects $pl_clk0]] |
| 141 | +set pl_clk0_port [get_bd_ports -of_objects [get_bd_nets -of_objects $pl_clk0]] |
| 142 | + |
| 143 | +connect_bd_net $pl_clk0 [get_bd_pins $zynq_ultra_ps/maxihpm0_fpd_aclk] |
| 144 | +connect_bd_net $pl_clk0 [get_bd_pins $zynq_ultra_ps/saxihpc0_fpd_aclk] |
| 145 | +connect_bd_net $pl_clk0 [get_bd_pins $proc_sys_reset/slowest_sync_clk] |
| 146 | +connect_bd_net $pl_clk0 [get_bd_pins $axi_interconnect_ctrl/ACLK] |
| 147 | +connect_bd_net $pl_clk0 [get_bd_pins $axi_interconnect_ctrl/S00_ACLK] |
| 148 | +connect_bd_net $pl_clk0 [get_bd_pins $axi_interconnect_ctrl/M00_ACLK] |
| 149 | +connect_bd_net $pl_clk0 [get_bd_pins $axi_interconnect_ctrl/M01_ACLK] |
| 150 | + |
| 151 | +set pl_clk0_busif [list] |
| 152 | + |
| 153 | +# Reset |
| 154 | +set pl_resetn0 [get_bd_pins $zynq_ultra_ps/pl_resetn0] |
| 155 | +connect_bd_net $pl_resetn0 [get_bd_pins $proc_sys_reset/ext_reset_in] |
| 156 | + |
| 157 | +set pl_reset [get_bd_pins $proc_sys_reset/peripheral_reset] |
| 158 | +make_bd_pins_external $pl_reset |
| 159 | +set_property name pl_reset [get_bd_ports -of_objects [get_bd_nets -of_objects $pl_reset]] |
| 160 | + |
| 161 | +set interconnect_aresetn [get_bd_pins $proc_sys_reset/interconnect_aresetn] |
| 162 | +connect_bd_net $interconnect_aresetn [get_bd_pins $axi_interconnect_ctrl/ARESETN] |
| 163 | +connect_bd_net $interconnect_aresetn [get_bd_pins $axi_interconnect_ctrl/S00_ARESETN] |
| 164 | +connect_bd_net $interconnect_aresetn [get_bd_pins $axi_interconnect_ctrl/M00_ARESETN] |
| 165 | +connect_bd_net $interconnect_aresetn [get_bd_pins $axi_interconnect_ctrl/M01_ARESETN] |
| 166 | + |
| 167 | +# MMIO |
| 168 | +connect_bd_intf_net [get_bd_intf_pins $zynq_ultra_ps/M_AXI_HPM0_FPD] [get_bd_intf_pins $axi_interconnect_ctrl/S00_AXI] |
| 169 | + |
| 170 | +# Control interface |
| 171 | +set m_axil_ctrl_pin [get_bd_intf_pins $axi_interconnect_ctrl/M00_AXI] |
| 172 | +make_bd_intf_pins_external $m_axil_ctrl_pin |
| 173 | +set_property name m_axil_ctrl [get_bd_intf_ports -of_objects [get_bd_intf_nets -of_objects $m_axil_ctrl_pin]] |
| 174 | +set m_axil_ctrl_port [get_bd_intf_ports -of_objects [get_bd_intf_nets -of_objects $m_axil_ctrl_pin]] |
| 175 | +set_property -dict [list \ |
| 176 | + CONFIG.PROTOCOL AXI4LITE \ |
| 177 | + CONFIG.DATA_WIDTH 32 \ |
| 178 | + CONFIG.ADDR_WIDTH 24 \ |
| 179 | +] $m_axil_ctrl_port |
| 180 | +lappend pl_clk0_busif $m_axil_ctrl_port |
| 181 | + |
| 182 | +# Application control interface |
| 183 | +set m_axil_app_ctrl_pin [get_bd_intf_pins $axi_interconnect_ctrl/M01_AXI] |
| 184 | +make_bd_intf_pins_external $m_axil_app_ctrl_pin |
| 185 | +set_property name m_axil_app_ctrl [get_bd_intf_ports -of_objects [get_bd_intf_nets -of_objects $m_axil_app_ctrl_pin]] |
| 186 | +set m_axil_app_ctrl_port [get_bd_intf_ports -of_objects [get_bd_intf_nets -of_objects $m_axil_app_ctrl_pin]] |
| 187 | +set_property -dict [list \ |
| 188 | + CONFIG.PROTOCOL AXI4LITE \ |
| 189 | + CONFIG.DATA_WIDTH 32 \ |
| 190 | + CONFIG.ADDR_WIDTH 24 \ |
| 191 | +] $m_axil_app_ctrl_port |
| 192 | +lappend pl_clk0_busif $m_axil_app_ctrl_port |
| 193 | + |
| 194 | +# DMA interface |
| 195 | +set s_axi_dma_pin [get_bd_intf_pins $zynq_ultra_ps/S_AXI_HPC0_FPD] |
| 196 | +make_bd_intf_pins_external $s_axi_dma_pin |
| 197 | +set_property name s_axi_dma [get_bd_intf_ports -of_objects [get_bd_intf_nets -of_objects $s_axi_dma_pin]] |
| 198 | +set s_axi_dma_port [get_bd_intf_ports -of_objects [get_bd_intf_nets -of_objects $s_axi_dma_pin]] |
| 199 | +lappend pl_clk0_busif $s_axi_dma_port |
| 200 | + |
| 201 | +# IRQ |
| 202 | +set pl_ps_irq0 [get_bd_pins $zynq_ultra_ps/pl_ps_irq0] |
| 203 | +make_bd_pins_external $pl_ps_irq0 |
| 204 | +set_property name pl_ps_irq0 [get_bd_ports -of_objects [get_bd_nets -of_objects $pl_ps_irq0]] |
| 205 | +set pl_ps_irq0_port [get_bd_ports -of_objects [get_bd_nets -of_objects $pl_ps_irq0]] |
| 206 | +set_property -dict [list \ |
| 207 | + CONFIG.PortWidth 8 \ |
| 208 | +] $pl_ps_irq0_port |
| 209 | + |
| 210 | +# Port clock associations |
| 211 | +set lst [list] |
| 212 | +foreach port $pl_clk0_busif { |
| 213 | + lappend lst [get_property name $port] |
| 214 | +} |
| 215 | +set_property CONFIG.ASSOCIATED_BUSIF [join $lst ":"] $pl_clk0_port |
| 216 | + |
| 217 | +# Assign addresses |
| 218 | +assign_bd_address -target_address_space /s_axi_dma [get_bd_addr_segs $zynq_ultra_ps/SAXIGP0/HPC0_DDR_HIGH] -force |
| 219 | +assign_bd_address -target_address_space /s_axi_dma [get_bd_addr_segs $zynq_ultra_ps/SAXIGP0/HPC0_QSPI] -force |
| 220 | +assign_bd_address -target_address_space /s_axi_dma [get_bd_addr_segs $zynq_ultra_ps/SAXIGP0/HPC0_DDR_LOW] -force |
| 221 | +assign_bd_address -target_address_space /s_axi_dma [get_bd_addr_segs $zynq_ultra_ps/SAXIGP0/HPC0_LPS_OCM] -force |
| 222 | + |
| 223 | +assign_bd_address -offset 0xA000_0000 -range 16M -target_address_space $zynq_ultra_ps/Data [get_bd_addr_segs $m_axil_ctrl_port/Reg] -force |
| 224 | +assign_bd_address -offset 0xA800_0000 -range 16M -target_address_space $zynq_ultra_ps/Data [get_bd_addr_segs $m_axil_app_ctrl_port/Reg] -force |
| 225 | + |
| 226 | +validate_bd_design |
| 227 | + |
| 228 | +# Save block design |
| 229 | +save_bd_design [current_bd_design] |
| 230 | +close_bd_design [current_bd_design] |
0 commit comments