Skip to content

Commit f13f95a

Browse files
projects/adrv9009zu11eg: Corundum Integration
- Corundum support is ONLY available for the ADRV9009ZU11EG/ADRV2CRR_FMC variant of the project - Created a new constraints file, alongside with a new top file, for routing the QSFP signals - Added a separate bd.tcl script, to handle the necessary exports, configurations and connections for Corundum features - Added a new build mode for Corundum, by using the new parameter called CORUNDUM (make CORUNDUM=1) - All the Corundum dependecies are contraint by this variable; if the variable it's not specied when using make, the default variant of the project will be built - IMPORTANT: this implementaion of the Corundum IP, bypasses the Corundum Reset Generator (as seen in the other implementations), connects the Corundum Hierarchy reset and clock directly to the PS Signed-off-by: Cristian Mihai Popa <[email protected]>
1 parent 0de293b commit f13f95a

File tree

7 files changed

+815
-4
lines changed

7 files changed

+815
-4
lines changed

projects/adrv9009zu11eg/adrv2crr_fmc/Makefile

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,33 @@ LIB_DEPS += xilinx/axi_adxcvr
3232
LIB_DEPS += xilinx/axi_dacfifo
3333
LIB_DEPS += xilinx/util_adxcvr
3434

35+
CORUNDUM ?= 0
36+
37+
ifeq ($(CORUNDUM), 1)
38+
export BOARD := ADRV9009ZU11EG
39+
export CPU := ZynqMP
40+
41+
M_DEPS += system_constr_corundum.xdc
42+
M_DEPS += system_bd_corundum.tcl
43+
44+
M_DEPS += ../../../library/corundum/scripts/corundum_adrv9009zu11eg_cfg.tcl
45+
M_DEPS += ../../../library/corundum/scripts/corundum.tcl
46+
M_DEPS += ../../../library/corundum/scripts/sync_reset.tcl
47+
48+
EXTERNAL_DEPS += ../../../../corundum/fpga/common/syn/vivado/eth_xcvr_phy_10g_gty_wrapper.tcl
49+
EXTERNAL_DEPS += ../../../../corundum/fpga/common/syn/vivado/rb_drp.tcl
50+
EXTERNAL_DEPS += ../../../../corundum/fpga/common/syn/vivado/mqnic_rb_clk_info.tcl
51+
EXTERNAL_DEPS += ../../../../corundum/fpga/common/syn/vivado/mqnic_ptp_clock.tcl
52+
EXTERNAL_DEPS += ../../../../corundum/fpga/common/syn/vivado/mqnic_port.tcl
53+
EXTERNAL_DEPS += ../../../../corundum/fpga/lib/eth/syn/vivado/ptp_clock_cdc.tcl
54+
EXTERNAL_DEPS += ../../../../corundum/fpga/lib/eth/syn/vivado/ptp_td_leaf.tcl
55+
EXTERNAL_DEPS += ../../../../corundum/fpga/lib/eth/syn/vivado/ptp_td_rel2tod.tcl
56+
EXTERNAL_DEPS += ../../../../corundum/fpga/lib/eth/lib/axis/syn/vivado/sync_reset.tcl
57+
EXTERNAL_DEPS += ../../../../corundum/fpga/lib/eth/lib/axis/syn/vivado/axis_async_fifo.tcl
58+
EXTERNAL_DEPS += ../../../../corundum/fpga/common/syn/vivado/tdma_ber_ch.tcl
59+
60+
LIB_DEPS += corundum/corundum_core
61+
LIB_DEPS += corundum/ethernet/adrv9009zu11eg
62+
endif
63+
3564
include ../../scripts/project-xilinx.mk

projects/adrv9009zu11eg/adrv2crr_fmc/system_bd.tcl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ source ../common/adrv9009zu11eg_bd.tcl
77
source ../common/adrv2crr_fmc_bd.tcl
88
source $ad_hdl_dir/projects/scripts/adi_pd.tcl
99

10+
if {$ad_project_params(CORUNDUM) == "1"} {
11+
source $ad_hdl_dir/library/corundum/scripts/corundum_adrv9009zu11eg_cfg.tcl
12+
source $ad_hdl_dir/library/corundum/scripts/corundum.tcl
13+
source system_bd_corundum.tcl
14+
}
15+
1016
ad_ip_parameter axi_sysid_0 CONFIG.ROM_ADDR_BITS 9
1117
ad_ip_parameter rom_sys_0 CONFIG.PATH_TO_FILE "$mem_init_sys_file_path/mem_init_sys.txt"
1218
ad_ip_parameter rom_sys_0 CONFIG.ROM_ADDR_BITS 9
@@ -19,7 +25,8 @@ L=$ad_project_params(TX_JESD_L)\
1925
S=$ad_project_params(TX_JESD_S)\
2026
RX_OS:M=$ad_project_params(RX_OS_JESD_M)\
2127
L=$ad_project_params(RX_OS_JESD_L)\
22-
S=$ad_project_params(RX_OS_JESD_S)"
28+
S=$ad_project_params(RX_OS_JESD_S)\
29+
CORUNDUM=$ad_project_params(CORUNDUM)"
2330

2431
sysid_gen_sys_init_file $sys_cstring
2532

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
###############################################################################
2+
## Copyright (C) 2025 Analog Devices, Inc. All rights reserved.
3+
### SPDX short identifier: ADIBSD
4+
###############################################################################
5+
6+
# Corundum NIC
7+
create_bd_intf_port -mode Master -vlnv analog.com:interface:if_qsfp_rtl:1.0 qsfp
8+
9+
create_bd_port -dir O -from 0 -to 0 -type rst qsfp_rst
10+
create_bd_port -dir I qsfp_mgt_refclk_p
11+
create_bd_port -dir I qsfp_mgt_refclk_n
12+
13+
create_bd_port -dir O -from 3 -to 0 qsfp_led
14+
15+
# collect build information
16+
set build_date [clock seconds]
17+
set git_hash 00000000
18+
catch {
19+
set git_hash [exec git rev-parse --short=8 HEAD]
20+
}
21+
set tag_ver 0.0.0
22+
23+
# FW and board IDs
24+
set fpga_id [expr 0x4738093]
25+
set fw_id [expr 0x00000000]
26+
set fw_ver $tag_ver
27+
set board_vendor_id [expr 0x10ee]
28+
set board_device_id [expr 0x9066]
29+
set board_ver 1.0
30+
set release_info [expr 0x00000000]
31+
32+
# General variables
33+
set IRQ_SIZE 8
34+
35+
# Extra configurations for Corundum functionality
36+
ad_ip_parameter sys_ps8 CONFIG.PSU__NUM_FABRIC_RESETS {2}
37+
38+
# Corundum connections
39+
connect_bd_net [get_bd_ports qsfp_led] [get_bd_pins corundum_hierarchy/ethernet_core/qsfp_led]
40+
41+
ad_connect corundum_hierarchy/clk_corundum sys_ps8/pl_clk1
42+
43+
# Use Utility Logic Vector IP which takes sys_ps8/pl_resetn1 and negates it and connects
44+
# it to corundum_hierarchy/rst_corundum, but first it's must be disconnected
45+
# from the Corundum Reset Generator
46+
47+
delete_bd_objs [get_bd_nets rst_corundum_1]
48+
49+
ad_ip_instance util_vector_logic util_vector_logic_0
50+
ad_ip_parameter util_vector_logic_0 CONFIG.C_OPERATION {not}
51+
ad_ip_parameter util_vector_logic_0 CONFIG.C_SIZE 1
52+
53+
ad_connect sys_ps8/pl_resetn1 util_vector_logic_0/Op1
54+
ad_connect corundum_hierarchy/rst_corundum util_vector_logic_0/Res
55+
56+
ad_connect corundum_hierarchy/qsfp qsfp
57+
ad_connect corundum_hierarchy/qsfp_rst qsfp_rst
58+
ad_connect corundum_hierarchy/qsfp_mgt_refclk_p qsfp_mgt_refclk_p
59+
ad_connect corundum_hierarchy/qsfp_mgt_refclk_n qsfp_mgt_refclk_n
60+
61+
ad_ip_instance axi_interconnect smartconnect_corundum
62+
ad_ip_parameter smartconnect_corundum CONFIG.NUM_MI 2
63+
ad_ip_parameter smartconnect_corundum CONFIG.NUM_SI 1
64+
65+
ad_connect smartconnect_corundum/ARESETN sys_ps8/pl_resetn1
66+
ad_connect smartconnect_corundum/S00_ARESETN sys_ps8/pl_resetn1
67+
ad_connect smartconnect_corundum/M00_ARESETN sys_ps8/pl_resetn1
68+
ad_connect smartconnect_corundum/M01_ARESETN sys_ps8/pl_resetn1
69+
70+
ad_connect smartconnect_corundum/ACLK sys_ps8/pl_clk1
71+
ad_connect smartconnect_corundum/S00_ACLK sys_ps8/pl_clk1
72+
ad_connect smartconnect_corundum/M00_ACLK sys_ps8/pl_clk1
73+
ad_connect smartconnect_corundum/M01_ACLK sys_ps8/pl_clk1
74+
75+
ad_connect smartconnect_corundum/M00_AXI corundum_hierarchy/s_axil_corundum
76+
77+
ad_ip_parameter sys_ps8 CONFIG.PSU__USE__M_AXI_GP0 1
78+
ad_ip_parameter sys_ps8 CONFIG.PSU__MAXIGP0__DATA_WIDTH 32
79+
ad_connect smartconnect_corundum/S00_AXI sys_ps8/M_AXI_HPM0_FPD
80+
ad_connect sys_ps8/maxihpm0_fpd_aclk sys_200m_clk
81+
82+
ad_connect corundum_rstgen/slowest_sync_clk sys_200m_clk
83+
ad_connect corundum_rstgen/ext_reset_in sys_ps8/pl_resetn0
84+
ad_connect corundum_rstgen/peripheral_aresetn corundum_rstn
85+
86+
ad_ip_parameter sys_ps8 CONFIG.PSU__USE__S_AXI_GP5 1
87+
ad_connect sys_200m_clk sys_ps8/saxihp3_fpd_aclk
88+
89+
assign_bd_address -offset 0xA000_0000 [get_bd_addr_segs \
90+
corundum_hierarchy/corundum_core/s_axil_ctrl/Reg
91+
] -target_address_space sys_ps8/Data
92+
93+
ad_ip_instance util_reduced_logic util_reduced_logic_0
94+
ad_ip_parameter util_reduced_logic_0 CONFIG.C_OPERATION {or}
95+
ad_ip_parameter util_reduced_logic_0 CONFIG.C_SIZE $IRQ_SIZE
96+
97+
ad_connect util_reduced_logic_0/Op1 corundum_hierarchy/irq
98+
99+
ad_cpu_interrupt ps-4 mb-4 util_reduced_logic_0/Res
100+
101+
ad_mem_hpc0_interconnect sys_200m_clk corundum_hierarchy/m_axi
102+
103+
assign_bd_address [get_bd_addr_segs { \
104+
sys_ps8/SAXIGP0/HPC0_LPS_OCM \
105+
sys_ps8/SAXIGP0/HPC0_QSPI \
106+
sys_ps8/SAXIGP0/HPC0_DDR_LOW \
107+
sys_ps8/SAXIGP0/HPC0_DDR_HIGH \
108+
}]
109+
110+
create_bd_intf_port -mode Master -vlnv xilinx.com:interface:iic_rtl:1.0 iic_port
111+
112+
ad_ip_instance axi_iic axi_iic
113+
ad_connect iic_port axi_iic/iic
114+
115+
ad_cpu_interconnect 0x43000000 axi_iic
116+
117+
ad_cpu_interrupt ps-5 mb-14 axi_iic/iic2intc_irpt
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
###############################################################################
2+
## Copyright (C) 2025 Analog Devices, Inc. All rights reserved.
3+
### SPDX short identifier: ADIBSD
4+
###############################################################################
5+
6+
set_property -dict {PACKAGE_PIN AU11 IOSTANDARD LVCMOS18 } [get_ports qsfp_resetl ] ;
7+
set_property -dict {PACKAGE_PIN AL12 IOSTANDARD LVCMOS18 PULLUP true } [get_ports qsfp_modprsl ] ;
8+
set_property -dict {PACKAGE_PIN AW14 IOSTANDARD LVCMOS18 PULLUP true } [get_ports qsfp_intl ] ;
9+
set_property -dict {PACKAGE_PIN AV11 IOSTANDARD LVCMOS18 } [get_ports qsfp_lpmode ] ;
10+
11+
12+
set_property PACKAGE_PIN AD2 [get_ports qsfp_rx_p[0] ] ;
13+
set_property PACKAGE_PIN AD1 [get_ports qsfp_rx_n[0] ] ;
14+
15+
set_property PACKAGE_PIN AC4 [get_ports qsfp_rx_p[1] ] ;
16+
set_property PACKAGE_PIN AC3 [get_ports qsfp_rx_n[1] ] ;
17+
18+
set_property PACKAGE_PIN AB2 [get_ports qsfp_rx_p[2] ] ;
19+
set_property PACKAGE_PIN AB1 [get_ports qsfp_rx_n[2] ] ;
20+
21+
set_property PACKAGE_PIN AA4 [get_ports qsfp_rx_p[3] ] ;
22+
set_property PACKAGE_PIN AA3 [get_ports qsfp_rx_n[3] ] ;
23+
24+
set_property PACKAGE_PIN AD6 [get_ports qsfp_tx_p[0] ] ;
25+
set_property PACKAGE_PIN AD5 [get_ports qsfp_tx_n[0] ] ;
26+
27+
set_property PACKAGE_PIN AC8 [get_ports qsfp_tx_p[1] ] ;
28+
set_property PACKAGE_PIN AC7 [get_ports qsfp_tx_n[1] ] ;
29+
30+
set_property PACKAGE_PIN AB6 [get_ports qsfp_tx_p[2] ] ;
31+
set_property PACKAGE_PIN AB5 [get_ports qsfp_tx_n[2] ] ;
32+
33+
set_property PACKAGE_PIN AA8 [get_ports qsfp_tx_p[3] ] ;
34+
set_property PACKAGE_PIN AA7 [get_ports qsfp_tx_n[3] ] ;
35+
36+
set_property PACKAGE_PIN AD10 [get_ports qsfp_mgt_refclk_p ] ;
37+
set_property PACKAGE_PIN AD9 [get_ports qsfp_mgt_refclk_n ] ;
38+
39+
40+
# 156.25 MHz MGT reference clock
41+
create_clock -period 6.400 -name gt_ref_clk [get_ports qsfp_mgt_refclk_p]

projects/adrv9009zu11eg/adrv2crr_fmc/system_project.tcl

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,35 @@ adi_project_create adrv9009zu11eg 0 [list \
3434
RX_OS_JESD_M [get_env_param RX_OS_JESD_M 4] \
3535
RX_OS_JESD_L [get_env_param RX_OS_JESD_L 4] \
3636
RX_OS_JESD_S [get_env_param RX_OS_JESD_S 1] \
37+
CORUNDUM [get_env_param CORUNDUM 1] \
3738
] "xczu11eg-ffvf1517-2-i"
3839

3940
adi_project_files adrv9009zu11eg [list \
40-
"system_top.v" \
4141
"../common/adrv9009zu11eg_spi.v" \
4242
"../common/adrv9009zu11eg_constr.xdc" \
4343
"../common/adrv2crr_fmc_constr.xdc" \
4444
"$ad_hdl_dir/library/common/ad_iobuf.v" ]
4545

46+
if {[get_env_param CORUNDUM 0] == 1} {
47+
adi_project_files adrv9009zu11eg [list \
48+
"system_constr_corundum.xdc" \
49+
"system_top_corundum.v" \
50+
"$ad_hdl_dir/../corundum/fpga/common/syn/vivado/eth_xcvr_phy_10g_gty_wrapper.tcl" \
51+
"$ad_hdl_dir/../corundum/fpga/common/syn/vivado/rb_drp.tcl" \
52+
"$ad_hdl_dir/../corundum/fpga/common/syn/vivado/mqnic_rb_clk_info.tcl" \
53+
"$ad_hdl_dir/../corundum/fpga/common/syn/vivado/mqnic_ptp_clock.tcl" \
54+
"$ad_hdl_dir/../corundum/fpga/common/syn/vivado/mqnic_port.tcl" \
55+
"$ad_hdl_dir/../corundum/fpga/lib/eth/syn/vivado/ptp_clock_cdc.tcl" \
56+
"$ad_hdl_dir/../corundum/fpga/lib/eth/syn/vivado/ptp_td_leaf.tcl" \
57+
"$ad_hdl_dir/../corundum/fpga/lib/eth/syn/vivado/ptp_td_rel2tod.tcl" \
58+
"$ad_hdl_dir/../corundum/fpga/lib/eth/lib/axis/syn/vivado/sync_reset.tcl" \
59+
"$ad_hdl_dir/../corundum/fpga/lib/eth/lib/axis/syn/vivado/axis_async_fifo.tcl" \
60+
"$ad_hdl_dir/../corundum/fpga/common/syn/vivado/tdma_ber_ch.tcl"
61+
]
62+
} else {
63+
adi_project_files adrv9009zu11eg [list \
64+
"system_top.v" \
65+
]
66+
}
67+
4668
adi_project_run adrv9009zu11eg

0 commit comments

Comments
 (0)