Skip to content

vcu118: fix synthesis port tie-offs, modern Vivado flash tool check, and 4-byte SPI boot - #125

Merged
adambagley merged 4 commits into
mainfrom
vcu118-upstream-fixes
Oct 30, 2026
Merged

adambagley merged 4 commits into
mainfrom
vcu118-upstream-fixes

Conversation

@goodacre-manchester

Copy link
Copy Markdown
Collaborator

Summary

This PR addresses three post-merge issues on the VCU118 evaluation board target following PR #124, adds build wall-time reporting, and documents the hardware Master SPI mode switch.


Key Changes

  1. Fix duplicate NIC port connections in board top (boards/vcu118/vcu118_frost.sv)

    • Problem: When PR Add VCU118 Ethernet and flash boot #124 merged, the former no-Ethernet stub tie-offs (.i_nic_tx_clk(1'b0), etc.) remained in place on u_frost_subsystem alongside the newly added active NIC wiring (.i_nic_tx_clk(nic_tx_clk)).
    • Fix: Remove the redundant constant tie-offs. Resolves Vivado synthesis failure [Synth 8-344] connection to input port 'i_nic_tx_clk' is duplicated.
  2. Deduplicate flash parts in fpga/flash/program_flash.tcl

    • Problem: In Vivado 2024.x/2025.x, get_cfgmem_parts mt25qu01g-spi-x1_x2_x4 returns a list with duplicate entries (length 10). The script strictly asserted [llength $part] == 1 and threw an error.
    • Fix: Filter with [lsort -unique [get_cfgmem_parts ...]] prior to the length check so modern Vivado releases successfully select the part.
  3. Enable 4-byte SPI addressing in boards/vcu118/constr/vcu118.xdc

    • Problem: The uncompressed VCU118 bitstream exceeds 16 MiB (~39 MiB). Standard 3-byte addressing wraps at 16 MiB during autonomous flash configuration.
    • Fix: Add CONFIG_MODE SPIx4 and BITSTREAM.CONFIG.SPI_32BIT_ADDR Yes to match the Alveo X3 board configuration constraints, allowing the FPGA to boot autonomously from the 128 MiB MT25QU01G flash.
  4. Build wall-time reporting and documentation

    • Tooling: Print total elapsed wall time (Build wall time: Xh Ym Zs) upon completion in fpga/build/build.py.
    • Documentation: Document the SW16 DIP switch setting for Master SPI configuration (ON / OFF / OFF / ON, M[2:0] = 001), pin readback via REGISTER.CONFIG_STATUS.SLR0.*, and SSH public key installation in boards/vcu118/README.md.

Verification

  • Test Suite: Passed pytest tests/test_vcu118_flash.py tests/test_uboot_drivers.py tests/test_fpga_build.py (420/420 passed).
  • Synthesis / Lint: Verified clean port list on vcu118_frost.sv with zero duplicate pin connection warnings.
  • Diff Footprint: 5 files changed, 24 insertions(+), 15 deletions(-).

The upstream merge of the Ethernet PR left the former no-Ethernet stub
tie-offs on u_frost_subsystem in place alongside the active NIC wiring.
Remove the redundant constant tie-offs to resolve Synth 8-344 errors.
get_cfgmem_parts returns multiple duplicate entries for the MT25QU01G part
in Vivado 2024.x/2025.x releases. Deduplicate results before verifying that a
single unique flash part is selected.
The VCU118 bitstream exceeds 16 MiB, requiring 4-byte SPI addressing to
read from the 128 MiB onboard flash. Enable SPIx4 configuration mode and
SPI_32BIT_ADDR so the FPGA successfully boots autonomously from flash.
Print elapsed wall time upon build completion in fpga/build/build.py.
Document the SW16 DIP switch configuration for Master SPI flash boot
(M[2:0] = 001, ON/OFF/OFF/ON) and SSH public key installation in the
VCU118 test initramfs.
@adambagley
adambagley merged commit 8b82dd3 into main Oct 30, 2026
28 of 90 checks passed
@adambagley
adambagley deleted the vcu118-upstream-fixes branch October 30, 2026 01:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants