diff --git a/library/xilinx/util_adxcvr/util_adxcvr_ip.tcl b/library/xilinx/util_adxcvr/util_adxcvr_ip.tcl index 0d64da7f3..b7f5c03f2 100644 --- a/library/xilinx/util_adxcvr/util_adxcvr_ip.tcl +++ b/library/xilinx/util_adxcvr/util_adxcvr_ip.tcl @@ -131,17 +131,19 @@ set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 0) or \ (spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 0)} \ - [ipx::get_ports cpll_ref_clk_0 -of_objects [ipx::current_core]] + [ipx::get_ports cpll_ref_clk_0 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_cpll_rst_0 -of_objects [ipx::current_core]] set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 0) or \ (spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 0)} \ - [ipx::get_ports qpll_ref_clk_0 -of_objects [ipx::current_core]] + [ipx::get_ports qpll_ref_clk_0 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_qpll_rst_0 -of_objects [ipx::current_core]] set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 0) or \ (spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 0)} \ - [ipx::get_bus_interfaces up_cm_0 -of_objects [ipx::current_core]] + [ipx::get_bus_interfaces up_cm_0 -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 1} \ [ipx::get_bus_interfaces up_es_1 -of_objects [ipx::current_core]] @@ -167,7 +169,8 @@ set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 1) or \ (spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 1)} \ - [ipx::get_ports cpll_ref_clk_1 -of_objects [ipx::current_core]] + [ipx::get_ports cpll_ref_clk_1 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_cpll_rst_1 -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 2} \ [ipx::get_bus_interfaces up_es_2 -of_objects [ipx::current_core]] @@ -193,7 +196,8 @@ set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 2) or \ (spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 2)} \ - [ipx::get_ports cpll_ref_clk_2 -of_objects [ipx::current_core]] + [ipx::get_ports cpll_ref_clk_2 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_cpll_rst_2 -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 3} \ [ipx::get_bus_interfaces up_es_3 -of_objects [ipx::current_core]] @@ -219,7 +223,8 @@ set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 3) or \ (spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 3)} \ - [ipx::get_ports cpll_ref_clk_3 -of_objects [ipx::current_core]] + [ipx::get_ports cpll_ref_clk_3 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_cpll_rst_3 -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 4} \ [ipx::get_bus_interfaces up_es_4 -of_objects [ipx::current_core]] @@ -245,17 +250,19 @@ set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 4) or \ (spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 4)} \ - [ipx::get_ports cpll_ref_clk_4 -of_objects [ipx::current_core]] + [ipx::get_ports cpll_ref_clk_4 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_cpll_rst_4 -of_objects [ipx::current_core]] set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 4) or \ (spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 4)} \ - [ipx::get_ports qpll_ref_clk_4 -of_objects [ipx::current_core]] + [ipx::get_ports qpll_ref_clk_4 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_qpll_rst_4 -of_objects [ipx::current_core]] set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 4) or \ (spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 4)} \ - [ipx::get_bus_interfaces up_cm_4 -of_objects [ipx::current_core]] + [ipx::get_bus_interfaces up_cm_4 -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 5} \ [ipx::get_bus_interfaces up_es_5 -of_objects [ipx::current_core]] @@ -281,7 +288,8 @@ set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 5) or \ (spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 5)} \ - [ipx::get_ports cpll_ref_clk_5 -of_objects [ipx::current_core]] + [ipx::get_ports cpll_ref_clk_5 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_cpll_rst_5 -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 6} \ [ipx::get_bus_interfaces up_es_6 -of_objects [ipx::current_core]] @@ -307,7 +315,8 @@ set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 6) or \ (spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 6)} \ - [ipx::get_ports cpll_ref_clk_6 -of_objects [ipx::current_core]] + [ipx::get_ports cpll_ref_clk_6 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_cpll_rst_6 -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 7} \ [ipx::get_bus_interfaces up_es_7 -of_objects [ipx::current_core]] @@ -333,7 +342,8 @@ set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 7) or \ (spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 7)} \ - [ipx::get_ports cpll_ref_clk_7 -of_objects [ipx::current_core]] + [ipx::get_ports cpll_ref_clk_7 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_cpll_rst_7 -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 8} \ [ipx::get_bus_interfaces up_es_8 -of_objects [ipx::current_core]] @@ -359,17 +369,19 @@ set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 8) or \ (spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 8)} \ - [ipx::get_ports cpll_ref_clk_8 -of_objects [ipx::current_core]] + [ipx::get_ports cpll_ref_clk_8 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_cpll_rst_8 -of_objects [ipx::current_core]] set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 8) or \ (spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 8)} \ - [ipx::get_ports qpll_ref_clk_8 -of_objects [ipx::current_core]] + [ipx::get_ports qpll_ref_clk_8 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_qpll_rst_8 -of_objects [ipx::current_core]] set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 8) or \ (spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 8)} \ - [ipx::get_bus_interfaces up_cm_8 -of_objects [ipx::current_core]] + [ipx::get_bus_interfaces up_cm_8 -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 9} \ [ipx::get_bus_interfaces up_es_9 -of_objects [ipx::current_core]] @@ -395,7 +407,8 @@ set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 9) or \ (spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 9)} \ - [ipx::get_ports cpll_ref_clk_9 -of_objects [ipx::current_core]] + [ipx::get_ports cpll_ref_clk_9 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_cpll_rst_9 -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 10} \ [ipx::get_bus_interfaces up_es_10 -of_objects [ipx::current_core]] @@ -421,7 +434,8 @@ set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 10) or \ (spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 10)} \ - [ipx::get_ports cpll_ref_clk_10 -of_objects [ipx::current_core]] + [ipx::get_ports cpll_ref_clk_10 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_cpll_rst_10 -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 11} \ [ipx::get_bus_interfaces up_es_11 -of_objects [ipx::current_core]] @@ -447,7 +461,8 @@ set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 11) or \ (spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 11)} \ - [ipx::get_ports cpll_ref_clk_11 -of_objects [ipx::current_core]] + [ipx::get_ports cpll_ref_clk_11 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_cpll_rst_11 -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 12} \ [ipx::get_bus_interfaces up_es_12 -of_objects [ipx::current_core]] @@ -473,17 +488,19 @@ set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 12) or \ (spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 12)} \ - [ipx::get_ports cpll_ref_clk_12 -of_objects [ipx::current_core]] + [ipx::get_ports cpll_ref_clk_12 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_cpll_rst_12 -of_objects [ipx::current_core]] set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 12) or \ (spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 12)} \ - [ipx::get_ports qpll_ref_clk_12 -of_objects [ipx::current_core]] + [ipx::get_ports qpll_ref_clk_12 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_qpll_rst_12 -of_objects [ipx::current_core]] set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 12) or \ (spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 12)} \ - [ipx::get_bus_interfaces up_cm_12 -of_objects [ipx::current_core]] + [ipx::get_bus_interfaces up_cm_12 -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 13} \ [ipx::get_bus_interfaces up_es_13 -of_objects [ipx::current_core]] @@ -509,7 +526,8 @@ set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 13) or \ (spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 13)} \ - [ipx::get_ports cpll_ref_clk_13 -of_objects [ipx::current_core]] + [ipx::get_ports cpll_ref_clk_13 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_cpll_rst_13 -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 14} \ [ipx::get_bus_interfaces up_es_14 -of_objects [ipx::current_core]] @@ -535,7 +553,8 @@ set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 14) or \ (spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 14)} \ - [ipx::get_ports cpll_ref_clk_14 -of_objects [ipx::current_core]] + [ipx::get_ports cpll_ref_clk_14 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_cpll_rst_14 -of_objects [ipx::current_core]] set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 15} \ [ipx::get_bus_interfaces up_es_15 -of_objects [ipx::current_core]] @@ -561,7 +580,8 @@ set_property enablement_dependency {spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF set_property enablement_dependency \ {(spirit:decode(id('MODELPARAM_VALUE.TX_NUM_OF_LANES')) > 15) or \ (spirit:decode(id('MODELPARAM_VALUE.RX_NUM_OF_LANES')) > 15)} \ - [ipx::get_ports cpll_ref_clk_15 -of_objects [ipx::current_core]] + [ipx::get_ports cpll_ref_clk_15 -of_objects [ipx::current_core]] \ + [ipx::get_ports up_cpll_rst_15 -of_objects [ipx::current_core]] ipx::save_core [ipx::current_core] diff --git a/projects/fmcadc4/common/fmcadc4_bd.tcl b/projects/fmcadc4/common/fmcadc4_bd.tcl index 0e7ac1c88..8397df8d0 100644 --- a/projects/fmcadc4/common/fmcadc4_bd.tcl +++ b/projects/fmcadc4/common/fmcadc4_bd.tcl @@ -39,12 +39,20 @@ set_property -dict [list CONFIG.NUM_OF_CHANNELS {4}] $axi_ad9680_cpack set util_fmcadc4_xcvr [create_bd_cell -type ip -vlnv analog.com:user:util_adxcvr:1.0 util_fmcadc4_xcvr] set_property -dict [list CONFIG.RX_NUM_OF_LANES {8}] $util_fmcadc4_xcvr set_property -dict [list CONFIG.TX_NUM_OF_LANES {0}] $util_fmcadc4_xcvr -set_property -dict [list CONFIG.CPLL_TX_OR_RX_N {1}] $util_fmcadc4_xcvr create_bd_cell -type ip -vlnv analog.com:user:util_bsplit:1.0 util_bsplit_rx_data set_property -dict [list CONFIG.CHANNEL_DATA_WIDTH {128}] [get_bd_cells util_bsplit_rx_data] set_property -dict [list CONFIG.NUM_OF_CHANNELS {2}] [get_bd_cells util_bsplit_rx_data] +# reference clocks & resets + +create_bd_port -dir I rx_ref_clk_0 + +ad_xcvrpll rx_ref_clk_0 util_fmcadc4_xcvr/qpll_ref_clk_* +ad_xcvrpll rx_ref_clk_0 util_fmcadc4_xcvr/cpll_ref_clk_* +ad_xcvrpll axi_ad9680_xcvr/up_pll_rst util_fmcadc4_xcvr/up_qpll_rst_* +ad_xcvrpll axi_ad9680_xcvr/up_pll_rst util_fmcadc4_xcvr/up_cpll_rst_* + # connections (gt) ad_xcvrcon util_fmcadc4_xcvr axi_ad9680_xcvr axi_ad9680_jesd diff --git a/projects/scripts/adi_board.tcl b/projects/scripts/adi_board.tcl index d7d025033..09c11fb5a 100644 --- a/projects/scripts/adi_board.tcl +++ b/projects/scripts/adi_board.tcl @@ -100,6 +100,43 @@ proc ad_connect {p_name_1 p_name_2} { } } +proc ad_disconnect {p_name_1 p_name_2} { + + set m_name_1 [ad_connect_type $p_name_1] + set m_name_2 [ad_connect_type $p_name_2] + + if {[get_property CLASS $m_name_1] eq "bd_net"} { + disconnect_bd_net $m_name_1 $m_name_2 + return + } + +} + +proc ad_reconct {p_name_1 p_name_2} { + + set m_name_1 [ad_connect_type $p_name_1] + set m_name_2 [ad_connect_type $p_name_2] + + if {[get_property CLASS $m_name_1] eq "bd_pin"} { + delete_bd_objs -quiet [get_bd_nets -quiet -of_objects \ + [find_bd_objs -relation connected_to $m_name_1]] + delete_bd_objs -quiet [get_bd_nets -quiet -of_objects \ + [find_bd_objs -relation connected_to $m_name_2]] + } + + if {[get_property CLASS $m_name_1] eq "bd_intf_pin"} { + delete_bd_objs -quiet [get_bd_intf_nets -quiet -of_objects \ + [find_bd_objs -relation connected_to $m_name_1]] + delete_bd_objs -quiet [get_bd_intf_nets -quiet -of_objects \ + [find_bd_objs -relation connected_to $m_name_2]] + } + + ad_connect $p_name_1 $p_name_2 +} + +################################################################################################### +################################################################################################### + proc ad_xcvrcon {u_xcvr a_xcvr a_jesd} { global xcvr_tx_index @@ -166,38 +203,11 @@ proc ad_xcvrcon {u_xcvr a_xcvr a_jesd} { } } -proc ad_disconnect {p_name_1 p_name_2} { +proc ad_xcvrpll {m_src m_dst} { - set m_name_1 [ad_connect_type $p_name_1] - set m_name_2 [ad_connect_type $p_name_2] - - if {[get_property CLASS $m_name_1] eq "bd_net"} { - disconnect_bd_net $m_name_1 $m_name_2 - return + foreach p_dst [get_bd_pins -quiet $m_dst] { + connect_bd_net [ad_connect_type $m_src] $p_dst } - -} - -proc ad_reconct {p_name_1 p_name_2} { - - set m_name_1 [ad_connect_type $p_name_1] - set m_name_2 [ad_connect_type $p_name_2] - - if {[get_property CLASS $m_name_1] eq "bd_pin"} { - delete_bd_objs -quiet [get_bd_nets -quiet -of_objects \ - [find_bd_objs -relation connected_to $m_name_1]] - delete_bd_objs -quiet [get_bd_nets -quiet -of_objects \ - [find_bd_objs -relation connected_to $m_name_2]] - } - - if {[get_property CLASS $m_name_1] eq "bd_intf_pin"} { - delete_bd_objs -quiet [get_bd_intf_nets -quiet -of_objects \ - [find_bd_objs -relation connected_to $m_name_1]] - delete_bd_objs -quiet [get_bd_intf_nets -quiet -of_objects \ - [find_bd_objs -relation connected_to $m_name_2]] - } - - ad_connect $p_name_1 $p_name_2 } ###################################################################################################