Skip to content

Commit 751d72c

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 <cristianmihai.popa@analog.com>
1 parent c514f77 commit 751d72c

File tree

7 files changed

+827
-5
lines changed

7 files changed

+827
-5
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 += $(ADI_HDL_DIR)/library/corundum/scripts/corundum_adrv9009zu11eg_cfg.tcl
45+
M_DEPS += $(ADI_HDL_DIR)/library/corundum/scripts/corundum.tcl
46+
M_DEPS += $(ADI_HDL_DIR)/library/corundum/scripts/sync_reset.tcl
47+
48+
EXTERNAL_DEPS += $(ADI_HDL_DIR)/../corundum/fpga/common/syn/vivado/eth_xcvr_phy_10g_gty_wrapper.tcl
49+
EXTERNAL_DEPS += $(ADI_HDL_DIR)/../corundum/fpga/common/syn/vivado/rb_drp.tcl
50+
EXTERNAL_DEPS += $(ADI_HDL_DIR)/../corundum/fpga/common/syn/vivado/mqnic_rb_clk_info.tcl
51+
EXTERNAL_DEPS += $(ADI_HDL_DIR)/../corundum/fpga/common/syn/vivado/mqnic_ptp_clock.tcl
52+
EXTERNAL_DEPS += $(ADI_HDL_DIR)/../corundum/fpga/common/syn/vivado/mqnic_port.tcl
53+
EXTERNAL_DEPS += $(ADI_HDL_DIR)/../corundum/fpga/lib/eth/syn/vivado/ptp_clock_cdc.tcl
54+
EXTERNAL_DEPS += $(ADI_HDL_DIR)/../corundum/fpga/lib/eth/syn/vivado/ptp_td_leaf.tcl
55+
EXTERNAL_DEPS += $(ADI_HDL_DIR)/../corundum/fpga/lib/eth/syn/vivado/ptp_td_rel2tod.tcl
56+
EXTERNAL_DEPS += $(ADI_HDL_DIR)/../corundum/fpga/lib/eth/lib/axis/syn/vivado/sync_reset.tcl
57+
EXTERNAL_DEPS += $(ADI_HDL_DIR)/../corundum/fpga/lib/eth/lib/axis/syn/vivado/axis_async_fifo.tcl
58+
EXTERNAL_DEPS += $(ADI_HDL_DIR)/../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: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ source ../common/adrv9009zu11eg_bd.tcl
77
source ../common/adrv2crr_fmc_bd.tcl
88
source $ad_hdl_dir/projects/scripts/adi_pd.tcl
99

10+
11+
if {[get_env_param CORUNDUM 0] == 1} {
12+
source $ad_hdl_dir/library/corundum/scripts/corundum_adrv9009zu11eg_cfg.tcl
13+
source $ad_hdl_dir/library/corundum/scripts/corundum.tcl
14+
source system_bd_corundum.tcl
15+
}
16+
1017
ad_ip_parameter axi_sysid_0 CONFIG.ROM_ADDR_BITS 9
1118
ad_ip_parameter rom_sys_0 CONFIG.PATH_TO_FILE "$mem_init_sys_file_path/mem_init_sys.txt"
1219
ad_ip_parameter rom_sys_0 CONFIG.ROM_ADDR_BITS 9
@@ -19,7 +26,8 @@ L=$ad_project_params(TX_JESD_L)\
1926
S=$ad_project_params(TX_JESD_S)\
2027
RX_OS:M=$ad_project_params(RX_OS_JESD_M)\
2128
L=$ad_project_params(RX_OS_JESD_L)\
22-
S=$ad_project_params(RX_OS_JESD_S)"
29+
S=$ad_project_params(RX_OS_JESD_S)\
30+
CORUNDUM=$ad_project_params(CORUNDUM)"
2331

2432
sysid_gen_sys_init_file $sys_cstring
2533

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
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+
set PORTS_PER_IF "1"
35+
set TX_QUEUE_INDEX_WIDTH "11"
36+
set RX_QUEUE_INDEX_WIDTH "8"
37+
set CQN_WIDTH [expr max($TX_QUEUE_INDEX_WIDTH, $RX_QUEUE_INDEX_WIDTH) + 1]
38+
set TX_QUEUE_PIPELINE [expr 3 + max($TX_QUEUE_INDEX_WIDTH - 12, 0)]
39+
set RX_QUEUE_PIPELINE [expr 3 + max($RX_QUEUE_INDEX_WIDTH - 12, 0)]
40+
set TX_DESC_TABLE_SIZE "32"
41+
set RX_DESC_TABLE_SIZE "32"
42+
set TX_RAM_SIZE "32768"
43+
set RX_RAM_SIZE "32768"
44+
45+
# Extra configurations for Corundum functionality
46+
ad_ip_parameter sys_ps8 CONFIG.PSU__NUM_FABRIC_RESETS {2}
47+
48+
# Corundum connections
49+
connect_bd_net [get_bd_ports qsfp_led] [get_bd_pins corundum_hierarchy/ethernet_core/qsfp_led]
50+
51+
ad_connect corundum_hierarchy/clk_corundum sys_ps8/pl_clk1
52+
53+
# Use Utility Logic Vector IP which takes sys_ps8/pl_resetn1 and negates it and connects
54+
# it to corundum_hierarchy/rst_corundum, but first it's must be disconnected
55+
# from the Corundum Reset Generator
56+
57+
delete_bd_objs [get_bd_nets rst_corundum_1]
58+
59+
ad_ip_instance util_vector_logic util_vector_logic_0
60+
ad_ip_parameter util_vector_logic_0 CONFIG.C_OPERATION {not}
61+
ad_ip_parameter util_vector_logic_0 CONFIG.C_SIZE 1
62+
63+
ad_connect sys_ps8/pl_resetn1 util_vector_logic_0/Op1
64+
ad_connect corundum_hierarchy/rst_corundum util_vector_logic_0/Res
65+
66+
ad_connect corundum_hierarchy/qsfp qsfp
67+
ad_connect corundum_hierarchy/qsfp_rst qsfp_rst
68+
ad_connect corundum_hierarchy/qsfp_mgt_refclk_p qsfp_mgt_refclk_p
69+
ad_connect corundum_hierarchy/qsfp_mgt_refclk_n qsfp_mgt_refclk_n
70+
71+
ad_ip_instance axi_interconnect smartconnect_corundum
72+
ad_ip_parameter smartconnect_corundum CONFIG.NUM_MI 2
73+
ad_ip_parameter smartconnect_corundum CONFIG.NUM_SI 1
74+
75+
ad_connect smartconnect_corundum/ARESETN sys_ps8/pl_resetn1
76+
ad_connect smartconnect_corundum/S00_ARESETN sys_ps8/pl_resetn1
77+
ad_connect smartconnect_corundum/M00_ARESETN sys_ps8/pl_resetn1
78+
ad_connect smartconnect_corundum/M01_ARESETN sys_ps8/pl_resetn1
79+
80+
ad_connect smartconnect_corundum/ACLK sys_ps8/pl_clk1
81+
ad_connect smartconnect_corundum/S00_ACLK sys_ps8/pl_clk1
82+
ad_connect smartconnect_corundum/M00_ACLK sys_ps8/pl_clk1
83+
ad_connect smartconnect_corundum/M01_ACLK sys_ps8/pl_clk1
84+
85+
ad_connect smartconnect_corundum/M00_AXI corundum_hierarchy/s_axil_corundum
86+
87+
ad_ip_parameter sys_ps8 CONFIG.PSU__USE__M_AXI_GP0 1
88+
ad_ip_parameter sys_ps8 CONFIG.PSU__MAXIGP0__DATA_WIDTH 32
89+
ad_connect smartconnect_corundum/S00_AXI sys_ps8/M_AXI_HPM0_FPD
90+
ad_connect sys_ps8/maxihpm0_fpd_aclk sys_200m_clk
91+
92+
ad_connect corundum_rstgen/slowest_sync_clk sys_200m_clk
93+
ad_connect corundum_rstgen/ext_reset_in sys_ps8/pl_resetn0
94+
ad_connect corundum_rstgen/peripheral_aresetn corundum_rstn
95+
96+
ad_ip_parameter sys_ps8 CONFIG.PSU__USE__S_AXI_GP5 1
97+
ad_connect sys_200m_clk sys_ps8/saxihp3_fpd_aclk
98+
99+
assign_bd_address -offset 0xA000_0000 [get_bd_addr_segs \
100+
corundum_hierarchy/corundum_core/s_axil_ctrl/Reg
101+
] -target_address_space sys_ps8/Data
102+
103+
ad_ip_instance util_reduced_logic util_reduced_logic_0
104+
ad_ip_parameter util_reduced_logic_0 CONFIG.C_OPERATION {or}
105+
ad_ip_parameter util_reduced_logic_0 CONFIG.C_SIZE $IRQ_SIZE
106+
107+
ad_connect util_reduced_logic_0/Op1 corundum_hierarchy/irq
108+
109+
ad_cpu_interrupt ps-4 mb-4 util_reduced_logic_0/Res
110+
111+
ad_mem_hpc0_interconnect sys_200m_clk corundum_hierarchy/m_axi
112+
113+
assign_bd_address [get_bd_addr_segs { \
114+
sys_ps8/SAXIGP0/HPC0_LPS_OCM \
115+
sys_ps8/SAXIGP0/HPC0_QSPI \
116+
sys_ps8/SAXIGP0/HPC0_DDR_LOW \
117+
sys_ps8/SAXIGP0/HPC0_DDR_HIGH \
118+
}]
119+
120+
create_bd_intf_port -mode Master -vlnv xilinx.com:interface:iic_rtl:1.0 iic_port
121+
122+
ad_ip_instance axi_iic axi_iic
123+
ad_connect iic_port axi_iic/iic
124+
125+
ad_cpu_interconnect 0x43000000 axi_iic
126+
127+
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)