@@ -7,7 +7,6 @@ package require math
7
7
8
8
# # Global variables for interconnect interface indexing
9
9
#
10
- set sys_cpu_interconnect_index 0
11
10
set sys_hpc0_interconnect_index -1
12
11
set sys_hpc1_interconnect_index -1
13
12
set sys_hp0_interconnect_index -1
@@ -954,55 +953,65 @@ proc ad_mem_hpx_interconnect {p_sel p_clk p_name} {
954
953
# # Create an AXI4 Lite memory mapped interface connection for register maps,
955
954
# instantiates an interconnect and reconfigure it at every process call.
956
955
#
956
+ # \param[p_sel] - name of the high speed interface
957
+ # valid values are HPM0_FPD, HPM1_FPD, HPM0_LPD
957
958
# \param[p_address] - address offset of the IP register map
958
959
# \param[p_name] - name of the IP
959
960
# \param[p_intf_name] - name of the AXI MM Slave interface (optional)
960
961
#
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 {}}} {
962
963
963
964
global sys_zynq
964
- global sys_cpu_interconnect_index
965
965
global use_smartconnect
966
966
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
970
973
}
974
+ set i_str [format " M%02d" $interconnect_index ]
971
975
972
- if {$sys_cpu_interconnect_index == 0 } {
976
+ if {$i_str eq " M00 " } {
973
977
974
978
if {$use_smartconnect == 1} {
975
- ad_ip_instance smartconnect axi_cpu_interconnect [ list \
979
+ ad_ip_instance smartconnect $interconnect_name [ list \
976
980
NUM_MI 1 \
977
981
NUM_SI 1 \
978
982
]
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
981
985
} 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
987
991
}
988
992
989
993
if {$sys_zynq == 3} {
990
994
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)} {
994
1003
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)} {
998
1006
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
1006
1015
}
1007
1016
}
1008
1017
@@ -1022,8 +1031,7 @@ proc ad_cpu_interconnect {p_address p_name {p_intf_name {}}} {
1022
1031
set sys_addr_cntrl_space [get_bd_addr_spaces mng_axi_vip/Master_AXI]
1023
1032
}
1024
1033
1025
- set sys_cpu_interconnect_index [expr $sys_cpu_interconnect_index + 1]
1026
-
1034
+ set interconnect_index [expr $interconnect_index + 1]
1027
1035
1028
1036
set p_cell [get_bd_cells $p_name ]
1029
1037
set p_intf [get_bd_intf_pins -filter \
@@ -1105,19 +1113,19 @@ proc ad_cpu_interconnect {p_address p_name {p_intf_name {}}} {
1105
1113
}
1106
1114
}
1107
1115
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 ]
1109
1117
1110
1118
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
1113
1121
}
1114
1122
if {$p_intf_clock ne " " } {
1115
1123
ad_connect sys_cpu_clk ${p_intf_clock}
1116
1124
}
1117
1125
if {$p_intf_reset ne " " } {
1118
1126
ad_connect sys_cpu_resetn ${p_intf_reset}
1119
1127
}
1120
- ad_connect axi_cpu_interconnect /${i_str} _AXI ${p_intf}
1128
+ ad_connect $interconnect_name /${i_str} _AXI ${p_intf}
1121
1129
1122
1130
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 ]]]
1123
1131
set p_index 0
@@ -1147,6 +1155,7 @@ proc ad_cpu_interconnect {p_address p_name {p_intf_name {}}} {
1147
1155
set p_address [expr ($p_address + 0x20000000)]
1148
1156
}
1149
1157
}
1158
+ puts " create_bd_addr_seg -range $p_seg_range -offset $p_address $sys_addr_cntrl_space $p_seg_name SEG_data_$p_name "
1150
1159
create_bd_addr_seg -range $p_seg_range \
1151
1160
-offset $p_address $sys_addr_cntrl_space \
1152
1161
$p_seg_name " SEG_data_${p_name} "
@@ -1157,6 +1166,22 @@ proc ad_cpu_interconnect {p_address p_name {p_intf_name {}}} {
1157
1166
}
1158
1167
}
1159
1168
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
+
1160
1185
# # Connects an IP interrupt port to the system's interrupt controller interface.
1161
1186
#
1162
1187
# \param[p_ps_index] - interrupt index used in PSx based architecture
0 commit comments