Build base image for 4x2

I’m having trouble building the base overlay for the 4x2. I’m running on Windows, and tried to follow the steps that the makefile would take in linux.

I’d like to rebuild the base image for the 4x2, to serve as a starting point for future development, following the instruction here:

RFSoC-PYNQ/docs/rfsoc_4x2_base_overlay.md at master · Xilinx/RFSoC-PYNQ · GitHub

  1. The documentation says to use vivado 2020.1, but the base.tcl file complains that it was made with version 2022.1 because this is line 25 of base.tcl:

set scripts_vivado_version 2022.1

  1. To test with 2022.1, I copied the board files from GitHub - RealDigitalOrg/RFSoC4x2-BSP to /mnt/c/Xilinx/Vivado/2022.1/data/xhub/boards/XilinxBoardStore/boards/Xilinx

The tcl command get_board_parts seems to work:

get_board_parts 4x2
realdigital.org:rfsoc4x2:part0:1.0

  1. I installed the cmac license

  2. source build.tcl makes the design

  3. source build_bitstream.tcl runs a while, but ends with these lines:

WARNING: [Vivado 12-8222] Failed run(s) : ‘base_auto_us_df_0_synth_1’, ‘base_auto_cc_1_synth_1’, ‘base_util_vector_logic_0_synth_1’, ‘base_tx_fifo_0_synth_1’, ‘base_address_remap_0_0_synth_1’, ‘base_xbar_1_synth_1’, ‘base_auto_cc_0_synth_1’, ‘base_rx_fifo_0_synth_1’, ‘base_auto_pc_1_synth_1’, ‘base_auto_pc_0_synth_1’, ‘base_axi_smc_cmac_0_synth_1’, ‘base_cmac_0_synth_1’, ‘base_auto_ds_1_synth_1’, ‘base_m06_regslice_2_synth_1’, ‘base_m03_regslice_2_synth_1’, ‘base_m01_regslice_2_synth_1’, ‘base_m04_regslice_2_synth_1’, ‘base_m02_regslice_2_synth_1’, ‘base_m05_regslice_2_synth_1’, ‘base_m07_regslice_2_synth_1’, ‘base_auto_pc_9_synth_1’, ‘base_auto_pc_8_synth_1’, ‘base_auto_ds_2_synth_1’, ‘base_xbar_3_synth_1’, ‘base_axi_intc_0_0_synth_1’, ‘base_xbar_0_synth_1’, ‘base_auto_ds_0_synth_1’, ‘base_axi_dma_0_synth_1’, ‘base_m01_regslice_3_synth_1’, ‘base_s00_regslice_3_synth_1’, ‘base_m02_regslice_3_synth_1’, ‘base_m03_regslice_3_synth_1’, ‘base_xbar_6_synth_1’, ‘base_m04_regslice_3_synth_1’, ‘base_m05_regslice_3_synth_1’, ‘base_m00_regslice_3_synth_1’, ‘base_lmb_bram_if_cntlr_0_synth_1’, ‘base_mb_bram_ctrl_0_synth_1’, ‘base_mb_0_synth_1’, ‘base_xbar_5_synth_1’, ‘base_lmb_bram_0_synth_1’, ‘base_s00_regslice_2_synth_1’, ‘base_m00_regslice_2_synth_1’, ‘base_btns_gpio_0_synth_1’, ‘base_auto_us_1_synth_1’, ‘base_auto_pc_10_synth_1’, ‘base_auto_us_2_synth_1’, ‘base_xbar_4_synth_1’, ‘base_auto_us_0_synth_1’, ‘base_binary_latch_counter_0_0_synth_1’, ‘base_ila_0_0_synth_1’, ‘base_dff_en_reset_vector_0_0_synth_1’, ‘base_c_clk_mmcm_200_locked_0_synth_1’, ‘base_ddr4_0_sys_reset_0_synth_1’, ‘base_clk_mmcm_reset_0_synth_1’, ‘base_ddr4_0_0_synth_1’, ‘base_c_clk_mmcm_200_0_synth_1’, ‘base_clk_wiz_0_0_synth_1’, ‘base_intc_0_synth_1’, ‘base_intr_0_synth_1’, ‘base_dlmb_v10_0_synth_1’, ‘base_iic_0_synth_1’, ‘base_gpio_0_synth_1’, ‘base_ilmb_v10_0_synth_1’, ‘base_io_switch_0_synth_1’, ‘base_dlmb_v10_1_synth_1’, ‘base_mb_bram_ctrl_1_synth_1’, ‘base_rst_clk_wiz_1_100M_0_synth_1’, ‘base_timer_0_synth_1’, ‘base_intr_1_synth_1’, ‘base_iic_1_synth_1’, ‘base_intc_1_synth_1’, ‘base_io_switch_1_synth_1’, ‘base_gpio_1_synth_1’, ‘base_ilmb_v10_1_synth_1’, ‘base_lmb_bram_if_cntlr_1_synth_1’, ‘base_mb_1_synth_1’, ‘base_dff_en_reset_vector_0_1_synth_1’, ‘base_spi_0_synth_1’, ‘base_lmb_bram_1_synth_1’, ‘base_auto_pc_3_synth_1’, ‘base_xbar_2_synth_1’, ‘base_auto_pc_2_synth_1’, ‘base_auto_pc_4_synth_1’, ‘base_auto_pc_6_synth_1’, ‘base_auto_pc_7_synth_1’, ‘base_auto_pc_5_synth_1’, ‘base_rst_clk_wiz_1_100M_1_synth_1’, ‘base_timer_1_synth_1’, ‘base_pmod0_buf_0_synth_1’, ‘base_mdm_0_0_synth_1’, ‘base_pmod1_buf_0_synth_1’, ‘base_m07_regslice_3_synth_1’, ‘base_proc_sys_reset_0_0_synth_1’, ‘base_proc_sys_reset_1_0_synth_1’, ‘base_proc_sys_reset_2_0_synth_1’, ‘base_spi_1_synth_1’, ‘base_m06_regslice_3_synth_1’, ‘base_leds_gpio_0_synth_1’, ‘base_auto_cc_4_synth_1’, ‘base_xbar_11_synth_1’, ‘base_s01_data_fifo_3_synth_1’, ‘base_s00_mmu_0_synth_1’, ‘base_axi_dma_real_1_synth_1’, ‘base_xbar_12_synth_1’, ‘base_packet_generator_0_synth_1’, ‘base_auto_cc_5_synth_1’, ‘base_auto_cc_6_synth_1’, ‘base_s00_data_fifo_5_synth_1’, ‘base_axi_dma_imag_1_synth_1’, ‘base_axis_clock_converter_im_0_synth_1’, ‘base_axis_clock_converter_re_0_synth_1’, ‘base_s01_mmu_0_synth_1’, ‘base_xbar_7_synth_1’, ‘base_auto_pc_11_synth_1’, ‘base_auto_pc_13_synth_1’, ‘base_auto_ds_4_synth_1’, ‘base_auto_pc_12_synth_1’, ‘base_auto_ds_3_synth_1’, ‘base_auto_ds_5_synth_1’, ‘base_xbar_9_synth_1’, ‘base_axi_dma_imag_0_synth_1’, ‘base_axi_dma_real_0_synth_1’, ‘base_auto_cc_2_synth_1’, ‘base_xbar_8_synth_1’, ‘base_auto_cc_3_synth_1’, ‘base_xbar_10_synth_1’, ‘base_s01_data_fifo_4_synth_1’, ‘base_xbar_15_synth_1’, ‘base_packet_generator_1_synth_1’, ‘base_xbar_14_synth_1’, ‘base_auto_cc_8_synth_1’, ‘base_axis_clock_converter_re_1_synth_1’, ‘base_auto_cc_9_synth_1’, ‘base_s01_mmu_2_synth_1’, ‘base_axis_clock_converter_re_2_synth_1’, ‘base_axi_dma_imag_2_synth_1’, ‘base_s01_mmu_1_synth_1’, ‘base_packet_generator_2_synth_1’, ‘base_axi_dma_imag_3_synth_1’, ‘base_auto_cc_7_synth_1’, ‘base_xbar_17_synth_1’, ‘base_s00_data_fifo_6_synth_1’, ‘base_axi_dma_real_2_synth_1’, ‘base_s00_mmu_2_synth_1’, ‘base_auto_cc_11_synth_1’, ‘base_axis_clock_converter_im_1_synth_1’, ‘base_xbar_13_synth_1’, ‘base_s00_mmu_1_synth_1’, ‘base_auto_cc_10_synth_1’, ‘base_axis_clock_converter_im_2_synth_1’, ‘base_axi_dma_real_3_synth_1’, ‘base_xbar_16_synth_1’, ‘base_amplitude_controller_0_synth_1’, ‘base_axis_clock_converter_re_3_synth_1’, ‘base_zynq_ultra_ps_e_0_0_synth_1’, ‘base_axis_clock_converter_im_3_synth_1’, ‘base_proc_sys_reset_adc0_0_synth_1’, ‘base_util_ds_buf_0_0_synth_1’, ‘base_s00_mmu_3_synth_1’, ‘base_rfdc_0_synth_1’, ‘base_s01_data_fifo_5_synth_1’, ‘base_s00_data_fifo_7_synth_1’, ‘base_amplitude_controller_1_synth_1’, ‘base_packet_generator_3_synth_1’, ‘base_proc_sys_reset_adc2_0_synth_1’, ‘base_shutdown_lpd_0_synth_1’, ‘base_proc_sys_reset_dac2_0_synth_1’, ‘base_rgbleds_gpio_0_synth_1’, ‘base_sws_gpio_0_synth_1’, ‘base_system_management_wiz_0_0_synth_1’, ‘base_syzygy_std0_0_synth_1’, ‘base_xbar_18_synth_1’, ‘base_s01_mmu_3_synth_1’, ‘base_proc_sys_reset_dac0_0_synth_1’, ‘base_util_ds_buf_1_0_synth_1’
wait_on_runs: Time (s): cpu = 00:02:32 ; elapsed = 00:22:45 . Memory (MB): peak = 5559.840 ; gain = 60.648
# write_hw_platform -force -include_bit ./${overlay_name}.xsa
INFO: [Project 1-1937] No bit file available for ‘-include_bit’. To use this feature, run implementation through write_bitstream and then re-run write_hw_platform with ‘-include_bit’
INFO: [Project 1-1918] Creating Hardware Platform: c:/GQuEST/2024-03-10-4x2-base/RFSoC-PYNQ/boards/RFSoC4x2/base/base.xsa …
INFO: [Project 1-1906] Skipping semantic label enumeration.
WARNING: [BD 41-2589] Platform should have atleast one axi memory mapped master interface. Enable a master AXI interface as platform AXI_PORT.
INFO: [Project 1-1042] Successfully generated hpfm file
write_project_tcl: Time (s): cpu = 00:01:08 ; elapsed = 00:08:22 . Memory (MB): peak = 5867.129 ; gain = 0.000
INFO: [Hsi 55-2053] elapsed time for repository (C:/Xilinx/Vivado/2022.1/data/embeddedsw) loading 0 seconds
ERROR: [Common 17-69] Command failed: Need an implemented design open to write bitstream. Aborting write_hw_platform…

Hi @Chris_Stoughton,

How much memory do you have in your system? If you open the Vivado project, has the implementation finish?

Mario

The laptop has 32 GB of memory.

This file was created: ./boards/RFSoC4x2/base/base/base.gen/sources_1/bd/base/hw_handoff/base.hwh

but I do not see any *.bit file.

Opening vivdao, “run implementation” says there is no netlist available. I launched “run synthesis” and see many errors similar to this one:

  • Synthesis
  • Out-of-Context Module Runs
  • base
  • base_s00_mmu_3_synth_1
    [Coretcl 2-155] Invalid project file name ‘Vivado’. File must have a valid Vivado project extension (.xpr/.ppr).

Are there any errors in the message board?

By any chance, is there a space in the full path of the project?

Yes, I use a “short” path name so I don’t run into that problem.

It seems this was a license issue. I had one that worked for some projects, but not for this one. I am using a different (more inclusive, evidently) and the build is running now without complaining.

The issue with the version number in the documentation not matching the version actually used is still there. Could that be fixed in the documentation?

Also, there is an issue with the certificate for the wget command, so I added “–no-check-certificate” to the wget command in the makefile.

Can you please point where this is mentioned?

I see that the README.md file from https://github.com/Xilinx/RFSoC-PYNQ.git correctly says to use Vivado 2022.1 (I should have noticed that after cloning.)

However, this online page could be updated to reflect the change.
https://www.rfsoc-pynq.io/rfsoc_4x2_base_overlay.html

says Vivado 2020.1

Fixed Fix links and Vivado version by mariodruiz · Pull Request #29 · Xilinx/RFSoC-PYNQ · GitHub