mirror of
https://github.com/EttusResearch/uhd.git
synced 2026-10-25 17:36:10 +00:00
fpga: Upgrade to Vivado 2025.2: Repair all FPGA compiles
This commit is contained in:
parent
f3d6cd6c01
commit
0df07dcde8
@ -65,7 +65,7 @@ module axi_packet_gate #(
|
||||
ram_2port #(
|
||||
.DWIDTH (WIDTH+1), .AWIDTH(SIZE),
|
||||
.RW_MODE("NO-CHANGE"), .OUT_REG(0),
|
||||
.RAM_TYPE(SIZE <= LUTRAM_THRESH ? "LUTRAM" : "AUTOMATIC")
|
||||
.RAM_TYPE(SIZE <= LUTRAM_THRESH ? "LUTRAM" : "BRAM")
|
||||
) ram_i (
|
||||
.clka (clk), .ena(1'b1), .wea(wr_en),
|
||||
.addra(wr_addr), .dia(wr_data), .doa(),
|
||||
|
||||
@ -504,7 +504,7 @@ module x4xx_qsfp_wrapper #(
|
||||
axi_hp_dma[lane].bready = 1'b0;
|
||||
axi_hp_dma[lane].rready = 1'b0;
|
||||
|
||||
mgt_pause_req = 0'b0;
|
||||
mgt_pause_req = 1'b0;
|
||||
|
||||
eth_rx_irq[lane] = 1'b0;
|
||||
eth_tx_irq[lane] = 1'b0;
|
||||
|
||||
@ -133,7 +133,7 @@ module eth_ipv4_chdr_adapter_wrapper #(
|
||||
// Interface
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
AxiStreamIf #(.DATA_WIDTH(ENET_W), .USER_WIDTH(ENET_USER_W), .TKEEP(0))
|
||||
AxiStreamIf #(.DATA_WIDTH(ENET_W), .USER_WIDTH(ENET_USER_W), .TKEEP(1))
|
||||
eth_tx (eth_clk, eth_rst);
|
||||
AxiStreamIf #(.DATA_WIDTH(ENET_W), .USER_WIDTH(ENET_USER_W), .TKEEP(0))
|
||||
eth_rx (eth_clk, eth_rst);
|
||||
|
||||
@ -292,7 +292,7 @@ module eth_ipv4_internal #(
|
||||
localparam CPU_USER_W = $clog2(CPU_W/8)+1; // SOF + trailing bytes
|
||||
|
||||
// Host DMA interfaces
|
||||
AxiStreamIf #(.DATA_WIDTH(CPU_W), .USER_WIDTH(CPU_USER_W), .TUSER(1), .TKEEP(0))
|
||||
AxiStreamIf #(.DATA_WIDTH(CPU_W), .USER_WIDTH(CPU_USER_W), .TUSER(1), .TKEEP(1))
|
||||
e2h_chdr(bus_clk, bus_rst);
|
||||
AxiStreamIf #(.DATA_WIDTH(CPU_W), .USER_WIDTH(CPU_USER_W), .TUSER(1), .TKEEP(0))
|
||||
h2e_chdr(bus_clk, bus_rst);
|
||||
|
||||
@ -28,7 +28,7 @@ dict set e3xx_strategy "post_place_phys_opt_design.directive" "Default"
|
||||
dict set e3xx_strategy "route_design.directive" "Default"
|
||||
dict set e3xx_strategy "route_design.more_options" "-tns_cleanup"
|
||||
dict set e3xx_strategy "post_route_phys_opt_design.is_enabled" 1
|
||||
dict set e3xx_strategy "post_route_phys_opt_design.directive" "Default"
|
||||
dict set e3xx_strategy "post_route_phys_opt_design.directive" "ExploreWithAggressiveHoldFix"
|
||||
vivado_strategies::implement_design $e3xx_strategy
|
||||
|
||||
# STEP#4: Generate reports
|
||||
|
||||
@ -21,14 +21,14 @@ dict set n3xx_strategy "implementation.incremental" 0
|
||||
dict set n3xx_strategy "opt_design.is_enabled" 1
|
||||
dict set n3xx_strategy "opt_design.directive" "NoBramPowerOpt"
|
||||
dict set n3xx_strategy "post_opt_power_opt_design.is_enabled" 0
|
||||
dict set n3xx_strategy "place_design.directive" "ExtraNetDelay_high"
|
||||
dict set n3xx_strategy "place_design.directive" "Explore"
|
||||
dict set n3xx_strategy "post_place_power_opt_design.is_enabled" 0
|
||||
dict set n3xx_strategy "post_place_phys_opt_design.is_enabled" 1
|
||||
dict set n3xx_strategy "post_place_phys_opt_design.directive" "AggressiveExplore"
|
||||
dict set n3xx_strategy "route_design.directive" "Explore"
|
||||
dict set n3xx_strategy "route_design.more_options" "-tns_cleanup"
|
||||
dict set n3xx_strategy "post_route_phys_opt_design.is_enabled" 1
|
||||
dict set n3xx_strategy "post_route_phys_opt_design.directive" "Explore"
|
||||
dict set n3xx_strategy "post_route_phys_opt_design.directive" "ExploreWithAggressiveHoldFix"
|
||||
vivado_strategies::implement_design $n3xx_strategy
|
||||
|
||||
# STEP#4: Generate reports
|
||||
|
||||
@ -16,6 +16,8 @@ module ten_gige_phy_clk_gen
|
||||
wire clk156_buf;
|
||||
wire dclk_buf;
|
||||
wire clkfbout;
|
||||
wire clkfb;
|
||||
wire refclk_buf;
|
||||
|
||||
IBUFDS_GTE2 ibufds_inst (
|
||||
.O (refclk),
|
||||
@ -25,21 +27,50 @@ module ten_gige_phy_clk_gen
|
||||
.IB (refclk_n)
|
||||
);
|
||||
|
||||
BUFG clk156_bufg_inst (
|
||||
// required buffer to get differential refclock from clock region without PLL instance to another
|
||||
// one
|
||||
BUFG refclk_bufg_inst (
|
||||
.I (refclk),
|
||||
.O (refclk_buf)
|
||||
);
|
||||
|
||||
// Clock cleanup required with Vivado 2025.2 to remove hold timing violations downstream
|
||||
PLLE2_BASE #(
|
||||
.BANDWIDTH("HIGH"),
|
||||
.CLKFBOUT_MULT(10),
|
||||
.CLKFBOUT_PHASE(0.0),
|
||||
.CLKIN1_PERIOD(6.4),
|
||||
.CLKOUT0_DIVIDE(10),
|
||||
.CLKOUT1_DIVIDE(20),
|
||||
.DIVCLK_DIVIDE(1),
|
||||
.REF_JITTER1(0.010),
|
||||
.STARTUP_WAIT("FALSE")
|
||||
) pll_clk156_inst (
|
||||
.CLKOUT0(clk156_buf),
|
||||
.CLKOUT1(dclk_buf),
|
||||
.CLKOUT2(),
|
||||
.CLKOUT3(),
|
||||
.CLKOUT4(),
|
||||
.CLKOUT5(),
|
||||
.CLKFBOUT(clkfbout),
|
||||
.LOCKED(),
|
||||
.CLKIN1(refclk_buf),
|
||||
.PWRDWN(1'b0),
|
||||
.RST(areset),
|
||||
.CLKFBIN(clkfb)
|
||||
);
|
||||
|
||||
// PLL feedback clock buffer
|
||||
BUFG clkfb_bufg_inst (
|
||||
.I (clkfbout),
|
||||
.O (clkfb)
|
||||
);
|
||||
|
||||
// buffer for generated clocks
|
||||
BUFG clk156_bufg_inst (
|
||||
.I (clk156_buf),
|
||||
.O (clk156)
|
||||
);
|
||||
|
||||
// Divding independent clock by 2 as source for DRP clock
|
||||
BUFR # (
|
||||
.BUFR_DIVIDE ("2")
|
||||
) dclk_divide_by_2_buf (
|
||||
.I (clk156),
|
||||
.O (dclk_buf),
|
||||
.CE (1'b1),
|
||||
.CLR (1'b0)
|
||||
);
|
||||
|
||||
BUFG dclk_bufg_i (
|
||||
.I (dclk_buf),
|
||||
.O (dclk)
|
||||
|
||||
@ -10,10 +10,10 @@ set_property PACKAGE_PIN R7 [get_ports XG_CLK_n]
|
||||
|
||||
create_clock -name XG_CLK -period 6.400 -waveform {0.000 3.200} [get_ports XG_CLK_p]
|
||||
|
||||
set_clock_groups -asynchronous -group [get_clocks bus_clk] -group [get_clocks XG_CLK]
|
||||
set_clock_groups -asynchronous -group [get_clocks bus_clk_div2] -group [get_clocks XG_CLK]
|
||||
set_clock_groups -asynchronous -group [get_clocks -filter {NAME =~ *sfpp_io_*/ten_gige_phy_i/ten_gig_eth_pcs_pma_i/*/gtxe2_i/RXOUTCLK}] -group [get_clocks XG_CLK]
|
||||
set_clock_groups -asynchronous -group [get_clocks -filter {NAME =~ *sfpp_io_*/ten_gige_phy_i/ten_gig_eth_pcs_pma_i/*/gtxe2_i/TXOUTCLK}] -group [get_clocks XG_CLK]
|
||||
set_clock_groups -asynchronous -group [get_clocks bus_clk] -group [get_clocks XG_CLK -include_generated_clocks]
|
||||
set_clock_groups -asynchronous -group [get_clocks bus_clk_div2] -group [get_clocks XG_CLK -include_generated_clocks]
|
||||
set_clock_groups -asynchronous -group [get_clocks -filter {NAME =~ *sfpp_io_*/ten_gige_phy_i/ten_gig_eth_pcs_pma_i/*/gtxe2_i/RXOUTCLK}] -group [get_clocks XG_CLK -include_generated_clocks]
|
||||
set_clock_groups -asynchronous -group [get_clocks -filter {NAME =~ *sfpp_io_*/ten_gige_phy_i/ten_gig_eth_pcs_pma_i/*/gtxe2_i/TXOUTCLK}] -group [get_clocks XG_CLK -include_generated_clocks]
|
||||
|
||||
set_false_path -to [get_pins -of_objects [get_cells -hier -filter {NAME =~ *sfpp_io_*/ten_gige_phy_i/*sync1_r_reg*}] -filter {NAME =~ *PRE}]
|
||||
set_false_path -to [get_pins -of_objects [get_cells -hier -filter {NAME =~ *sfpp_io_*/ten_gige_phy_i/*sync1_r_reg*}] -filter {NAME =~ *CLR}]
|
||||
|
||||
@ -145,7 +145,7 @@ X420_IP: ##Build X420 IP only. Use the -j option to build multiple IP block
|
||||
+$(call vivado_ip,X420,$(DEFS) X420=1)
|
||||
|
||||
X440_IP: ##Build X440 IP only. Use the -j option to build multiple IP blocks simultaneously.
|
||||
+$(call vivado_ip,X440,$(DEFS) X440=1)
|
||||
+$(call vivado_ip,X440,$(DEFS) X440=1) BUILD_ALL_X440_RFDC=1
|
||||
|
||||
$(BUILD_DIR)/x410-version-info.dtsi: regmap/x410/versioning_regs_regmap_utils.vh
|
||||
tools/parse_versions_for_dts.py \
|
||||
|
||||
@ -20,9 +20,6 @@ BASE_DIR = $(abspath ..)
|
||||
IP_DIR = $(abspath ./ip)
|
||||
include $(BASE_DIR)/../tools/make/viv_design_builder.mak
|
||||
|
||||
# Include IP directory
|
||||
include $(IP_DIR)/Makefile.inc
|
||||
|
||||
# Include any LIB dependencies
|
||||
include coregen_dsp/Makefile.srcs
|
||||
include $(LIB_DIR)/control/Makefile.srcs
|
||||
@ -51,6 +48,9 @@ ifdef BUILD_DIR
|
||||
include $(BUILD_DIR)/Makefile.inc
|
||||
endif
|
||||
|
||||
# Include IP directory
|
||||
include $(IP_DIR)/Makefile.inc
|
||||
|
||||
##################################################
|
||||
# Sources
|
||||
##################################################
|
||||
|
||||
@ -10,10 +10,6 @@ source $::env(VIV_TOOLS_DIR)/scripts/viv_strategies.tcl
|
||||
# STEP#1: Create project, add sources, refresh IP
|
||||
vivado_utils::initialize_project
|
||||
|
||||
# STEP#1.5: Modify block diagram if needed
|
||||
set script_dir [file dirname [info script]]
|
||||
source [file join $script_dir x4xx_bd_modification.tcl]
|
||||
|
||||
# STEP#2: Run synthesis
|
||||
vivado_utils::synthesize_design
|
||||
vivado_utils::generate_post_synth_reports
|
||||
@ -23,12 +19,8 @@ vivado_utils::exit_if_synth_only
|
||||
set strategy [vivado_strategies::get_impl_preset "Performance_ExplorePostRoutePhysOpt"]
|
||||
# Enable incremental build
|
||||
dict set strategy "implementation.incremental" $::env(VIV_INCR_BUILD)
|
||||
# Turn up uncertainty on 100Gb clocks(-quiet so if it fails because the clocks don't exist, it won't error)
|
||||
set_clock_uncertainty 0.5 -quiet -setup [get_clocks txoutclk_out*]
|
||||
# Vivado has been underestimating routing delays.
|
||||
dict set strategy "place_design.directive" "ExtraNetDelay_high"
|
||||
# Turn down uncertainty on 100Gb clocks
|
||||
dict set strategy "route_design.pre_hook" {set_clock_uncertainty 0.0 -quiet -setup [get_clocks txoutclk_out*]}
|
||||
vivado_strategies::implement_design $strategy
|
||||
|
||||
# STEP#4: Generate reports
|
||||
|
||||
@ -43,12 +43,12 @@ include $(IP_DIR)/adc_100m_bd/Makefile.inc
|
||||
include $(IP_DIR)/dac_100m_bd/Makefile.inc
|
||||
include $(IP_DIR)/ddr4_64bits_x440/Makefile.inc
|
||||
include $(IP_DIR)/x4xx_ps_rfdc_bd/x440_ps_rfdc_bd/Makefile.inc
|
||||
include $(IP_DIR)/x4xx_ps_rfdc_bd/x440_2spc_ps_rfdc_bd/Makefile.inc
|
||||
include $(IP_DIR)/fir_dec3_2spc/Makefile.inc
|
||||
include $(IP_DIR)/fir_inp3_1spc/Makefile.inc
|
||||
endif
|
||||
|
||||
BD_SRCS = \
|
||||
$(IP_X4XX_PS_RFDC_BD_SRCS) \
|
||||
$(IP_X4XX_PS_RFDC_HDL_SRCS) \
|
||||
$(IP_AXI_INTERCONNECT_APP_BD_SRCS) \
|
||||
$(IP_AXI_INTERCONNECT_ETH_BD_SRCS) \
|
||||
@ -81,11 +81,25 @@ $(IP_DAC_400M_HDL_SRCS)
|
||||
endif
|
||||
|
||||
ifdef X440
|
||||
# Both X440 RFDC block-diagram Makefiles assign the same source and output
|
||||
# variables. For a binary target, select only the RFDC variant required by
|
||||
# the image core so the shared variables identify the correct sources. For
|
||||
# the IP target, BUILD_ALL_X440_RFDC selects both variants so all generated
|
||||
# IP is available.
|
||||
ifeq ($(BUILD_ALL_X440_RFDC),1)
|
||||
BD_SRCS += $(IP_X4XX_PS_RFDC_BD_SRCS) $(IP_X4XX_2SPC_PS_RFDC_BD_SRCS)
|
||||
else ifneq (,$(findstring X440_2SPC_PS_RFDC_BD=1,$(RFNOC_IMAGE_CORE_DEFS)))
|
||||
BD_SRCS += $(IP_X4XX_2SPC_PS_RFDC_BD_SRCS)
|
||||
else
|
||||
BD_SRCS += $(IP_X4XX_PS_RFDC_BD_SRCS)
|
||||
endif
|
||||
BD_SRCS += \
|
||||
$(IP_ADC_100M_BD_SRCS) \
|
||||
$(IP_ADC_100M_HDL_SRCS) \
|
||||
$(IP_DAC_100M_BD_SRCS) \
|
||||
$(IP_DAC_100M_HDL_SRCS)
|
||||
else # default case for non-X440 devices
|
||||
BD_SRCS += $(IP_X4XX_PS_RFDC_BD_SRCS)
|
||||
endif
|
||||
|
||||
IP_XCI_SRCS = \
|
||||
@ -114,7 +128,6 @@ $(IP_FIR_INP3_1SPC_SRCS)
|
||||
endif
|
||||
|
||||
BD_OUTPUTS = \
|
||||
$(BD_X4XX_PS_RFDC_BD_OUTS) \
|
||||
$(BD_AXI_INTERCONNECT_APP_BD_OUTS) \
|
||||
$(BD_AXI_INTERCONNECT_ETH_BD_OUTS) \
|
||||
$(BD_AXI_INTERCONNECT_DMA_BD_OUTS) \
|
||||
@ -129,6 +142,15 @@ $(BD_AXI_INTER_2X512_512_BD_OUTS) \
|
||||
$(BD_100G_BD_OUTS) \
|
||||
$(BD_AXI_ETH_DMA_BD_OUTS)
|
||||
|
||||
# See the X440 BD_SRCS selection above for why these RFDC outputs are selected.
|
||||
ifeq ($(BUILD_ALL_X440_RFDC),1)
|
||||
BD_OUTPUTS += $(BD_X4XX_PS_RFDC_BD_OUTS) $(BD_X4XX_2SPC_PS_RFDC_BD_OUTS)
|
||||
else ifneq (,$(findstring X440_2SPC_PS_RFDC_BD=1,$(RFNOC_IMAGE_CORE_DEFS)))
|
||||
BD_OUTPUTS += $(BD_X4XX_2SPC_PS_RFDC_BD_OUTS)
|
||||
else
|
||||
BD_OUTPUTS += $(BD_X4XX_PS_RFDC_BD_OUTS)
|
||||
endif
|
||||
|
||||
ifdef X410
|
||||
BD_OUTPUTS += \
|
||||
$(BD_ADC_100M_BD_OUTS) \
|
||||
|
||||
@ -0,0 +1,37 @@
|
||||
#
|
||||
# Copyright 2026 Ettus Research, a National Instruments Brand
|
||||
#
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
#
|
||||
|
||||
IP_X4XX_2SPC_PS_RFDC_ORIG_SRCS = \
|
||||
$(IP_BUILD_DIR)/x440_2spc_ps_rfdc_bd_base/x440_2spc_ps_rfdc_bd_base.tcl \
|
||||
$(IP_DIR)/x4xx_ps_rfdc_bd/x440_2spc_ps_rfdc_bd/x440_2spc_ps_rfdc_bd.tcl
|
||||
|
||||
IP_X4XX_2SPC_PS_RFDC_BDTCL_SRCS = $(addprefix $(IP_BUILD_DIR)/x440_2spc_ps_rfdc_bd/, \
|
||||
x440_2spc_ps_rfdc_bd.tcl \
|
||||
)
|
||||
|
||||
IP_X4XX_2SPC_PS_RFDC_BD_SRCS = $(addprefix $(IP_BUILD_DIR)/x440_2spc_ps_rfdc_bd/, \
|
||||
x440_2spc_ps_rfdc_bd/x440_2spc_ps_rfdc_bd.bd \
|
||||
)
|
||||
|
||||
BD_X4XX_2SPC_PS_RFDC_BD_OUTS = $(addprefix $(IP_BUILD_DIR)/x440_2spc_ps_rfdc_bd/, \
|
||||
x440_2spc_ps_rfdc_bd.bd.out \
|
||||
x440_2spc_ps_rfdc_bd/x440_2spc_ps_rfdc_bd_ooc.xdc \
|
||||
x440_2spc_ps_rfdc_bd/synth/x440_2spc_ps_rfdc_bd.v \
|
||||
)
|
||||
|
||||
.INTERMEDIATE: IP_X4XX_2SPC_PS_RFDC_BD_TRGT
|
||||
$(IP_X4XX_2SPC_PS_RFDC_BD_SRCS) $(BD_X4XX_2SPC_PS_RFDC_BD_OUTS) $(IP_X4XX_2SPC_PS_RFDC_BDTCL_SRCS): IP_X4XX_2SPC_PS_RFDC_BD_TRGT
|
||||
@:
|
||||
|
||||
IP_X4XX_2SPC_PS_RFDC_BD_TRGT: $(IP_X4XX_2SPC_PS_RFDC_ORIG_SRCS)
|
||||
$(call BUILD_VIVADO_BDTCL,x440_2spc_ps_rfdc_bd,$(ARCH),$(PART_ID),$(IP_DIR)/x4xx_ps_rfdc_bd,$(IP_BUILD_DIR),$(LIB_DIR)/vivado_ipi,$(IP_X4XX_PS_RFDC_HDL_SRCS))
|
||||
|
||||
# derive the base diagram by adding "2spc" to all strings
|
||||
# This ensures that generated clock domain naming like "x440_2spc_ps_rfdc_bd_pll_ref_clk_in" still
|
||||
# works fine after renaming.
|
||||
$(IP_BUILD_DIR)/x440_2spc_ps_rfdc_bd_base/x440_2spc_ps_rfdc_bd_base.tcl: $(IP_DIR)/x4xx_ps_rfdc_bd/x440_ps_rfdc_bd/x440_ps_rfdc_bd.tcl
|
||||
mkdir -p $(dir $@)
|
||||
sed 's/x440_ps_rfdc_bd/x440_2spc_ps_rfdc_bd/g' $< > $@
|
||||
@ -0,0 +1,76 @@
|
||||
#
|
||||
# Copyright 2026 Ettus Research, a National Instruments Brand
|
||||
#
|
||||
# SPDX-License-Identifier: LGPL-3.0-or-later
|
||||
#
|
||||
# Module: x440_2spc_ps_rfdc_bd
|
||||
#
|
||||
# Description:
|
||||
#
|
||||
# Manual X440 RFDC block-design wrapper for the 2-samples-per-cycle
|
||||
# configuration. The base block-design Tcl is generated from the original
|
||||
# X440 design with its design and clock-domain names adapted for this
|
||||
# variant. This script applies the RFDC data-width and interface-width
|
||||
# changes required by the 2-SPC datapath, then validates and saves the
|
||||
# resulting block design.
|
||||
#
|
||||
|
||||
# Reuse the original x440 block diagram after renaming.
|
||||
source ../x440_2spc_ps_rfdc_bd_base/x440_2spc_ps_rfdc_bd_base.tcl
|
||||
|
||||
# Change the RFDC data path to 2 samples / cycle.
|
||||
# This requires the decimation and interpolation modes to be set to 8.
|
||||
# As the original configuration is 8 samples / cycle at using 2 times
|
||||
# resampling the clock rates stay the same.
|
||||
set_property -dict [list \
|
||||
CONFIG.ADC0_Multi_Tile_Sync {true} \
|
||||
CONFIG.ADC_Decimation_Mode00 {8} \
|
||||
CONFIG.ADC_Data_Width00 {2} \
|
||||
CONFIG.ADC_Decimation_Mode01 {8} \
|
||||
CONFIG.ADC_Data_Width01 {2} \
|
||||
CONFIG.ADC_Data_Width02 {2} \
|
||||
CONFIG.ADC_Data_Width03 {2} \
|
||||
CONFIG.ADC1_Multi_Tile_Sync {true} \
|
||||
CONFIG.ADC_Data_Width10 {2} \
|
||||
CONFIG.ADC_Data_Width11 {2} \
|
||||
CONFIG.ADC_Data_Width12 {2} \
|
||||
CONFIG.ADC_Data_Width13 {2} \
|
||||
CONFIG.ADC2_Multi_Tile_Sync {true} \
|
||||
CONFIG.ADC_Data_Width20 {2} \
|
||||
CONFIG.ADC_Data_Width21 {2} \
|
||||
CONFIG.ADC_Data_Width22 {2} \
|
||||
CONFIG.ADC_Data_Width23 {2} \
|
||||
CONFIG.ADC3_Multi_Tile_Sync {true} \
|
||||
CONFIG.ADC_Data_Width30 {2} \
|
||||
CONFIG.ADC_Data_Width31 {2} \
|
||||
CONFIG.ADC_Data_Width32 {2} \
|
||||
CONFIG.ADC_Data_Width33 {2} \
|
||||
CONFIG.DAC0_Multi_Tile_Sync {true} \
|
||||
CONFIG.DAC_Data_Width00 {4} \
|
||||
CONFIG.DAC_Data_Width01 {4} \
|
||||
CONFIG.DAC_Data_Width02 {4} \
|
||||
CONFIG.DAC_Data_Width03 {4} \
|
||||
CONFIG.DAC1_Multi_Tile_Sync {true} \
|
||||
CONFIG.DAC_Data_Width10 {4} \
|
||||
CONFIG.DAC_Data_Width11 {4} \
|
||||
CONFIG.DAC_Data_Width12 {4} \
|
||||
CONFIG.DAC_Data_Width13 {4} \
|
||||
] [get_bd_cells rfdc/rf_data_converter]
|
||||
|
||||
|
||||
# The changed RFDC interfaces have to be reflected in the upstream AXI
|
||||
# interfaces. A change to 2 samples/cycle is required for the calibration
|
||||
# muxes.
|
||||
set_property -dict [list CONFIG.kAxiWidth {64}] [get_bd_cells rfdc/calibration_muxes/gpio_to_axis_mux_0]
|
||||
set_property -dict [list CONFIG.TDATA_NUM_BYTES {8}] [get_bd_intf_ports dac_tile228_ch0_din]
|
||||
set_property -dict [list CONFIG.TDATA_NUM_BYTES {8}] [get_bd_intf_ports dac_tile228_ch1_din]
|
||||
set_property -dict [list CONFIG.TDATA_NUM_BYTES {8}] [get_bd_intf_ports dac_tile228_ch2_din]
|
||||
set_property -dict [list CONFIG.TDATA_NUM_BYTES {8}] [get_bd_intf_ports dac_tile228_ch3_din]
|
||||
set_property -dict [list CONFIG.TDATA_NUM_BYTES {8}] [get_bd_intf_ports dac_tile229_ch0_din]
|
||||
set_property -dict [list CONFIG.TDATA_NUM_BYTES {8}] [get_bd_intf_ports dac_tile229_ch1_din]
|
||||
set_property -dict [list CONFIG.TDATA_NUM_BYTES {8}] [get_bd_intf_ports dac_tile229_ch2_din]
|
||||
set_property -dict [list CONFIG.TDATA_NUM_BYTES {8}] [get_bd_intf_ports dac_tile229_ch3_din]
|
||||
|
||||
# revalidate and save the block design
|
||||
validate_bd_design
|
||||
save_bd_design
|
||||
@ -1886,7 +1886,11 @@ module x4xx (
|
||||
.clk_adc0 ()
|
||||
);
|
||||
`elsif X440
|
||||
`ifdef X440_2SPC_PS_RFDC_BD
|
||||
x440_2spc_ps_rfdc_bd x440_ps_rfdc_bd_i (
|
||||
`else
|
||||
x440_ps_rfdc_bd x440_ps_rfdc_bd_i (
|
||||
`endif
|
||||
.adc_enable_data_r0clk (adc_enable_data_rclk[0]),
|
||||
.adc_enable_data_r1clk (adc_enable_data_rclk[1]),
|
||||
.adc_reset_pulse_r0clk (adc_reset_pulse[0]),
|
||||
|
||||
@ -1,83 +0,0 @@
|
||||
|
||||
# Extract the Verilog defines from the environment (optional variable)
|
||||
set viv_defs ""
|
||||
if { [info exists ::env(VIV_VERILOG_DEFS)] } {
|
||||
set viv_defs $::env(VIV_VERILOG_DEFS)
|
||||
}
|
||||
|
||||
# Only apply these modifications for X440 with 200M RF bandwidth image
|
||||
if {[regexp {X440=1} $viv_defs] && [regexp {RF_BW=200} $viv_defs] && [regexp {USE_FABRIC_RESAMPLERS=1} $viv_defs]} {
|
||||
|
||||
# print a message to indicate that the modifications are being applied
|
||||
puts "Applying X440 200M RF modifications to block design"
|
||||
|
||||
# Load the custom HDL sources required by the block design IP before opening it.
|
||||
set script_dir [file dirname [file normalize [info script]]]
|
||||
source [file join $script_dir ip x4xx_ps_rfdc_bd x440_ps_rfdc_bd hdl_sources.tcl]
|
||||
|
||||
# open the existing block design
|
||||
open_bd_design [get_files x440_ps_rfdc_bd.bd]
|
||||
|
||||
# Change the RFDC data path to 2 samples / cycle.
|
||||
# This requires the decimation and interpolation modes to be set to 8.
|
||||
# As the original configuration is 8 samples / cycle at using 2 times
|
||||
# resampling the clock rates stay the same.
|
||||
set_property -dict [list \
|
||||
CONFIG.ADC0_Multi_Tile_Sync {true} \
|
||||
CONFIG.ADC_Decimation_Mode00 {8} \
|
||||
CONFIG.ADC_Data_Width00 {2} \
|
||||
CONFIG.ADC_Decimation_Mode01 {8} \
|
||||
CONFIG.ADC_Data_Width01 {2} \
|
||||
CONFIG.ADC_Data_Width02 {2} \
|
||||
CONFIG.ADC_Data_Width03 {2} \
|
||||
CONFIG.ADC1_Multi_Tile_Sync {true} \
|
||||
CONFIG.ADC_Data_Width10 {2} \
|
||||
CONFIG.ADC_Data_Width11 {2} \
|
||||
CONFIG.ADC_Data_Width12 {2} \
|
||||
CONFIG.ADC_Data_Width13 {2} \
|
||||
CONFIG.ADC2_Multi_Tile_Sync {true} \
|
||||
CONFIG.ADC_Data_Width20 {2} \
|
||||
CONFIG.ADC_Data_Width21 {2} \
|
||||
CONFIG.ADC_Data_Width22 {2} \
|
||||
CONFIG.ADC_Data_Width23 {2} \
|
||||
CONFIG.ADC3_Multi_Tile_Sync {true} \
|
||||
CONFIG.ADC_Data_Width30 {2} \
|
||||
CONFIG.ADC_Data_Width31 {2} \
|
||||
CONFIG.ADC_Data_Width32 {2} \
|
||||
CONFIG.ADC_Data_Width33 {2} \
|
||||
CONFIG.DAC0_Multi_Tile_Sync {true} \
|
||||
CONFIG.DAC_Data_Width00 {4} \
|
||||
CONFIG.DAC_Data_Width01 {4} \
|
||||
CONFIG.DAC_Data_Width02 {4} \
|
||||
CONFIG.DAC_Data_Width03 {4} \
|
||||
CONFIG.DAC1_Multi_Tile_Sync {true} \
|
||||
CONFIG.DAC_Data_Width10 {4} \
|
||||
CONFIG.DAC_Data_Width11 {4} \
|
||||
CONFIG.DAC_Data_Width12 {4} \
|
||||
CONFIG.DAC_Data_Width13 {4} \
|
||||
] [get_bd_cells rfdc/rf_data_converter]
|
||||
|
||||
|
||||
# The changed RFDC interfaces have to be reflected in the upstream AXI
|
||||
# interfaces. A change to 2 samples/cycle is required for the calibration
|
||||
# muxes.
|
||||
set_property -dict [list CONFIG.kAxiWidth {64}] [get_bd_cells rfdc/calibration_muxes/gpio_to_axis_mux_0]
|
||||
set_property -dict [list CONFIG.TDATA_NUM_BYTES {8}] [get_bd_intf_ports dac_tile228_ch0_din]
|
||||
set_property -dict [list CONFIG.TDATA_NUM_BYTES {8}] [get_bd_intf_ports dac_tile228_ch1_din]
|
||||
set_property -dict [list CONFIG.TDATA_NUM_BYTES {8}] [get_bd_intf_ports dac_tile228_ch2_din]
|
||||
set_property -dict [list CONFIG.TDATA_NUM_BYTES {8}] [get_bd_intf_ports dac_tile228_ch3_din]
|
||||
set_property -dict [list CONFIG.TDATA_NUM_BYTES {8}] [get_bd_intf_ports dac_tile229_ch0_din]
|
||||
set_property -dict [list CONFIG.TDATA_NUM_BYTES {8}] [get_bd_intf_ports dac_tile229_ch1_din]
|
||||
set_property -dict [list CONFIG.TDATA_NUM_BYTES {8}] [get_bd_intf_ports dac_tile229_ch2_din]
|
||||
set_property -dict [list CONFIG.TDATA_NUM_BYTES {8}] [get_bd_intf_ports dac_tile229_ch3_din]
|
||||
|
||||
# revalidate and save the block design
|
||||
validate_bd_design
|
||||
save_bd_design
|
||||
|
||||
# regenerate the output products to avoid any stale intermediate files
|
||||
generate_target all [get_files x440_ps_rfdc_bd.bd]
|
||||
|
||||
# close the block design after applying all changes
|
||||
close_bd_design [current_bd_design]
|
||||
}
|
||||
@ -74,7 +74,7 @@ make_defs:
|
||||
- DRAM_BANKS=${0 if not parameters['ENABLE_DRAM'] else parameters['NUM_DRAM_BANKS']}
|
||||
- DRAM_CH=${0 if not parameters['ENABLE_DRAM'] else parameters['NUM_DRAM_CHANS']}
|
||||
- DRAM_W=${parameters['DRAM_WIDTH']}
|
||||
- USE_FABRIC_RESAMPLERS=${1 if parameters['USE_FABRIC_RESAMPLERS'] else 0}
|
||||
- ${"X440_2SPC_PS_RFDC_BD=1" if parameters['USE_FABRIC_RESAMPLERS'] else ""}
|
||||
- DISABLE_TX=${1 if parameters['DISABLE_TX'] else 0}
|
||||
- ENABLE_CLOCK_WD=${1 if parameters['ENABLE_CLOCK_WD'] else 0}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user