Skip to content

Commit bf1b577

Browse files
liambeguingastmaier
authored andcommitted
adi_board: add support for other AXI master interfaces
Rework ad_cpu_interconnect to support other master axi interfaces. Add create_bd_addr_seg logs. Signed-off-by: Liam Beguin <liambeguin@gmail.com>
1 parent f89a2da commit bf1b577

File tree

1 file changed

+59
-34
lines changed

1 file changed

+59
-34
lines changed

projects/scripts/adi_board.tcl

Lines changed: 59 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ package require math
77

88
## Global variables for interconnect interface indexing
99
#
10-
set sys_cpu_interconnect_index 0
1110
set sys_hpc0_interconnect_index -1
1211
set sys_hpc1_interconnect_index -1
1312
set sys_hp0_interconnect_index -1
@@ -954,55 +953,65 @@ proc ad_mem_hpx_interconnect {p_sel p_clk p_name} {
954953
## Create an AXI4 Lite memory mapped interface connection for register maps,
955954
# instantiates an interconnect and reconfigure it at every process call.
956955
#
956+
# \param[p_sel] - name of the high speed interface
957+
# valid values are HPM0_FPD, HPM1_FPD, HPM0_LPD
957958
# \param[p_address] - address offset of the IP register map
958959
# \param[p_name] - name of the IP
959960
# \param[p_intf_name] - name of the AXI MM Slave interface (optional)
960961
#
961-
proc ad_cpu_interconnect {p_address p_name {p_intf_name {}}} {
962+
proc ad_hpmx_interconnect {p_sel p_address p_name {p_intf_name {}}} {
962963

963964
global sys_zynq
964-
global sys_cpu_interconnect_index
965965
global use_smartconnect
966966

967-
set i_str "M$sys_cpu_interconnect_index"
968-
if {$sys_cpu_interconnect_index < 10} {
969-
set i_str "M0$sys_cpu_interconnect_index"
967+
set interconnect_name [format "axi_%s_interconnect" [string tolower $p_sel]]
968+
969+
if {[catch {
970+
set interconnect_index [get_property CONFIG.NUM_MI [get_bd_cells $interconnect_name]]
971+
} err]} {
972+
set interconnect_index 0
970973
}
974+
set i_str [format "M%02d" $interconnect_index]
971975

972-
if {$sys_cpu_interconnect_index == 0} {
976+
if {$i_str eq "M00"} {
973977

974978
if {$use_smartconnect == 1} {
975-
ad_ip_instance smartconnect axi_cpu_interconnect [ list \
979+
ad_ip_instance smartconnect $interconnect_name [ list \
976980
NUM_MI 1 \
977981
NUM_SI 1 \
978982
]
979-
ad_connect sys_cpu_clk axi_cpu_interconnect/aclk
980-
ad_connect sys_cpu_resetn axi_cpu_interconnect/aresetn
983+
ad_connect sys_cpu_clk $interconnect_name/aclk
984+
ad_connect sys_cpu_resetn $interconnect_name/aresetn
981985
} else {
982-
ad_ip_instance axi_interconnect axi_cpu_interconnect
983-
ad_connect sys_cpu_clk axi_cpu_interconnect/ACLK
984-
ad_connect sys_cpu_clk axi_cpu_interconnect/S00_ACLK
985-
ad_connect sys_cpu_resetn axi_cpu_interconnect/ARESETN
986-
ad_connect sys_cpu_resetn axi_cpu_interconnect/S00_ARESETN
986+
ad_ip_instance axi_interconnect $interconnect_name
987+
ad_connect sys_cpu_clk $interconnect_name/ACLK
988+
ad_connect sys_cpu_clk $interconnect_name/S00_ACLK
989+
ad_connect sys_cpu_resetn $interconnect_name/ARESETN
990+
ad_connect sys_cpu_resetn $interconnect_name/S00_ARESETN
987991
}
988992

989993
if {$sys_zynq == 3} {
990994
ad_connect sys_cpu_clk sys_cips/m_axi_fpd_aclk
991-
ad_connect axi_cpu_interconnect/S00_AXI sys_cips/M_AXI_FPD
992-
}
993-
if {$sys_zynq == 2} {
995+
ad_connect $interconnect_name/S00_AXI sys_cips/M_AXI_FPD
996+
} elseif {($p_sel eq "HPM0_FPD") && ($sys_zynq == 2)} {
997+
ad_connect sys_cpu_clk sys_ps8/maxihpm0_fpd_aclk
998+
ad_connect $interconnect_name/S00_AXI sys_ps8/M_AXI_HPM0_FPD
999+
} elseif {($p_sel eq "HPM1_FPD") && ($sys_zynq == 2)} {
1000+
ad_connect sys_cpu_clk sys_ps8/maxihpm1_fpd_aclk
1001+
ad_connect $interconnect_name/S00_AXI sys_ps8/M_AXI_HPM1_FPD
1002+
} elseif {($p_sel eq "HPM0_LPD") && ($sys_zynq == 2)} {
9941003
ad_connect sys_cpu_clk sys_ps8/maxihpm0_lpd_aclk
995-
ad_connect axi_cpu_interconnect/S00_AXI sys_ps8/M_AXI_HPM0_LPD
996-
}
997-
if {$sys_zynq == 1} {
1004+
ad_connect $interconnect_name/S00_AXI sys_ps8/M_AXI_HPM0_LPD
1005+
} elseif {($p_sel eq "GP0") && ($sys_zynq == 1)} {
9981006
ad_connect sys_cpu_clk sys_ps7/M_AXI_GP0_ACLK
999-
ad_connect axi_cpu_interconnect/S00_AXI sys_ps7/M_AXI_GP0
1000-
}
1001-
if {$sys_zynq == 0} {
1002-
ad_connect axi_cpu_interconnect/S00_AXI sys_mb/M_AXI_DP
1003-
}
1004-
if {$sys_zynq == -1} {
1005-
ad_connect axi_cpu_interconnect/S00_AXI mng_axi_vip/M_AXI
1007+
ad_connect $interconnect_name/S00_AXI sys_ps7/M_AXI_GP0
1008+
} elseif {($p_sel eq "GP1") && ($sys_zynq == 1)} {
1009+
ad_connect sys_cpu_clk sys_ps7/M_AXI_GP1_ACLK
1010+
ad_connect $interconnect_name/S00_AXI sys_ps7/M_AXI_GP1
1011+
} elseif {$sys_zynq == 0} {
1012+
ad_connect $interconnect_name/S00_AXI sys_mb/M_AXI_DP
1013+
} elseif {$sys_zynq == -1} {
1014+
ad_connect $interconnect_name/S00_AXI mng_axi_vip/M_AXI
10061015
}
10071016
}
10081017

@@ -1022,8 +1031,7 @@ proc ad_cpu_interconnect {p_address p_name {p_intf_name {}}} {
10221031
set sys_addr_cntrl_space [get_bd_addr_spaces mng_axi_vip/Master_AXI]
10231032
}
10241033

1025-
set sys_cpu_interconnect_index [expr $sys_cpu_interconnect_index + 1]
1026-
1034+
set interconnect_index [expr $interconnect_index + 1]
10271035

10281036
set p_cell [get_bd_cells $p_name]
10291037
set p_intf [get_bd_intf_pins -filter \
@@ -1105,19 +1113,19 @@ proc ad_cpu_interconnect {p_address p_name {p_intf_name {}}} {
11051113
}
11061114
}
11071115

1108-
set_property CONFIG.NUM_MI $sys_cpu_interconnect_index [get_bd_cells axi_cpu_interconnect]
1116+
set_property CONFIG.NUM_MI $interconnect_index [get_bd_cells $interconnect_name]
11091117

11101118
if {$use_smartconnect == 0} {
1111-
ad_connect sys_cpu_clk axi_cpu_interconnect/${i_str}_ACLK
1112-
ad_connect sys_cpu_resetn axi_cpu_interconnect/${i_str}_ARESETN
1119+
ad_connect sys_cpu_clk $interconnect_name/${i_str}_ACLK
1120+
ad_connect sys_cpu_resetn $interconnect_name/${i_str}_ARESETN
11131121
}
11141122
if {$p_intf_clock ne ""} {
11151123
ad_connect sys_cpu_clk ${p_intf_clock}
11161124
}
11171125
if {$p_intf_reset ne ""} {
11181126
ad_connect sys_cpu_resetn ${p_intf_reset}
11191127
}
1120-
ad_connect axi_cpu_interconnect/${i_str}_AXI ${p_intf}
1128+
ad_connect $interconnect_name/${i_str}_AXI ${p_intf}
11211129

11221130
set p_seg [get_bd_addr_segs -of [get_bd_addr_spaces -of [get_bd_intf_pins -filter "NAME=~ *${p_intf_name}*" -of $p_hier_cell]]]
11231131
set p_index 0
@@ -1147,6 +1155,7 @@ proc ad_cpu_interconnect {p_address p_name {p_intf_name {}}} {
11471155
set p_address [expr ($p_address + 0x20000000)]
11481156
}
11491157
}
1158+
puts "create_bd_addr_seg -range $p_seg_range -offset $p_address $sys_addr_cntrl_space $p_seg_name SEG_data_$p_name"
11501159
create_bd_addr_seg -range $p_seg_range \
11511160
-offset $p_address $sys_addr_cntrl_space \
11521161
$p_seg_name "SEG_data_${p_name}"
@@ -1157,6 +1166,22 @@ proc ad_cpu_interconnect {p_address p_name {p_intf_name {}}} {
11571166
}
11581167
}
11591168

1169+
## Create an AXI4 Lite memory mapped interface connection for register maps,
1170+
# instantiates an interconnect and reconfigure it at every process call.
1171+
#
1172+
# \param[p_address] - address offset of the IP register map
1173+
# \param[p_name] - name of the IP
1174+
# \param[p_intf_name] - name of the AXI MM Slave interface (optional)
1175+
#
1176+
proc ad_cpu_interconnect {p_address p_name {p_intf_name {}}} {
1177+
1178+
if {$sys_zynq == -1} {ad_hpmx_interconnect "AXI" $p_address $p_name $p_intf_name}
1179+
elseif {$sys_zynq == 0} {ad_hpmx_interconnect "DP" $p_address $p_name $p_intf_name}
1180+
elseif {$sys_zynq == 1} {ad_hpmx_interconnect "GP0" $p_address $p_name $p_intf_name}
1181+
elseif {$sys_zynq == 2} {ad_hpmx_interconnect "HPM0_LPD" $p_address $p_name $p_intf_name}
1182+
elseif {$sys_zynq == 3} {ad_hpmx_interconnect "FPD" $p_address $p_name $p_intf_name}
1183+
}
1184+
11601185
## Connects an IP interrupt port to the system's interrupt controller interface.
11611186
#
11621187
# \param[p_ps_index] - interrupt index used in PSx based architecture

0 commit comments

Comments
 (0)