Skip to content

GTX support, Preliminary Virtex7 support, SERDES/HDMI fixes, and many more

Choose a tag to compare

@hansfbaier hansfbaier released this 27 Jul 19:23

nextpnr-xilinx 0.9.0

68 non-merge commits since 0.8.2 (net +2366/−648 lines across 27 files).


GTX Transceiver

Full GTX transceiver support for Kintex-7, including PCIe over GTX.

  • GTXE2_COMMON + GTXE2_CHANNEL implementation
  • GTX channel driven by IBUFDS (CPLL mode)
  • PCIe verified working on Kintex-7
  • QPLL_COARSE_FREQ_OVRD bitwidth fix
  • gtx_common default magic values
  • GTX channel clock port error messages improved
  • Submodules bumped to latest openXC7

SerDes / HDMI

  • Cascaded OSERDESE2 master/slave support, demonstrated for HDMI
  • TMDS_33: IN_ONLY + IN_TERM.NONE for HDMI on Spartan-7 / Zynq-7
  • ISERDESE2: disconnect hardwired CLKDIVP + D/SHIFTIN1/2 ports when DDLY used (match Vivado behavior)
  • DDR data widths 10 and 14 in prjxray-db

Preliminary Virtex-7 Support

Initial Virtex-7 (xc7v) device family support, merged from the virtex7-support branch.

  • BUFR cell packer + site-type meta bump
  • HP-bank glue + phantom-BUFGCTRL filter + LIOB18 placement
  • RAM128/256X1S distributed-RAM packing + INT-tile constant-net bridge
  • Atomic CARRY4 packer preserving Vivado-compatible names
  • Global-buffer placement: layer-BFS + deterministic tie-break
  • BUFGCTRL default I-mux assignments for unused slots
  • IBUFDS_GTE2 X-coordinate from chipdb (was hardcoded to X0)
  • Numeric-aware site-name sort to fix IBUF wire-index swap
  • Guard tileStatus[dst.tile] in PIP_CONST_DRIVER branch

I/O & Packing

  • BUFGMUX support added
  • IODELAY_GROUP fix: attributes are strings, not numbers
  • SHIFTIN checks fixed for constant-net connections
  • IDDR / ODDR pack port bug fixed
  • OSERDESE pack bug fixed
  • I/OSERDESE2 constid tidy-up

DSP / PCIe

  • DSP: disconnect MULTSIGNIN + CARRYCASCIN tied to GND
  • PCIE_2_1 support + GTP CHANNEL/COMMON configuration updates

Cell Primitives

  • LDCE / LDPE flip-flop support for Artix-7
  • BRAM36 odd port width feature emission for RAMB36E1
  • RAM32M / RAM64M INIT interleaving fix + INIT_{A,B,C,D} parameter support

Build & Portability

  • Boost 1.90+ and C++17 build compatibility
  • Python 3.13 / 3.14 support
  • GCC 14 fix (const on max_elems_)
  • cmake_minimum_required set to 3.10
  • boost::filesystem::basename replaced for future Boost compatibility
  • path.normalize()path.lexically_normal() (C++17)
  • json11 missing <cstdint> header fix
  • Eigen3 CMake requirement fix
  • Nix flake devshell for reproducible cross-distribution builds

Frontend

  • Ignore $scopeinfo in Yosys output
  • Preserve net merge history for imported nets

Miscellaneous Fixes

  • XDC file parsing quality-of-life update
  • prjxray-db submodule switched to OpenXC7
  • Default router option fix
  • PLL/MMCM compensation error message made user-readable
  • BBA compiler warnings fixed
  • DSP cascade output missing port → downgraded to warning
  • XADC pins used as regular IO → proper error message
  • Unsupported LUTRAM → log error instead of crash
  • RAM256X1D on XC7 → error instead of silent failure
  • GUI disabled by default (not fully working)
  • Python regex SyntaxWarning fix
  • Typo fixes, code cosmetics, flake.nix improvements

What's Changed

  • gui/quadtree.h: drop const on max_elems_ by @hansemro in #31
  • xilinx/pack_dram: log error when packing RAM256X1D on XC7 by @hansemro in #30
  • Fix RAM32M/RAM64M initialization with INIT_{A,B,C,D} parameters by @hansemro in #29
  • xilinx/pack_dram: log error on unsupported LUTRAM by @hansemro in #32
  • fix iddr and oddr pack port bug by @AdamLee7 in #45
  • boost::filesystem::basename no longer exists by @yufrice in #47
  • Artix PCIE_2_1 support by @regymm in #61
  • Added IN_ONLY and IN_TERM.NONE for TMDS_33, enabling HDMI, tested on Spartan 7 and Zynq 7 by @regymm in #72
  • Support for cascaded OSERDESE2 by @regymm in #80
  • frontend: Ignore $scopeinfo by @trabucayre in #82
  • Added BUFGMUX support by @regymm in #81
  • frontend: keep net merge history for imported nets by @RCoeurjoly in #83
  • Fix build with recent GNU/Linux & compiler by @trabucayre in #85
  • Fix build with Boost 1.90+ and C++17 by @drewbabel in #84
  • fix: python SyntaxWarning with unescaped regex by @parker-research in #86
  • GTX channel driven by IBUFDS (CPLL mode) support, with PCIe working on Kintex 7 by @regymm in #88
  • XDC file parsing QoL update by @regymm in #89
  • DSP: disconnect MULTSIGNIN and CARRYCASCIN tied to GND by @regymm in #90
  • feat: add LDCE/LDPE support for Artix 7 based FPGAs by @IAmMarcelJung in #93
  • xilinx: emit BRAM36 width features for RAMB36E1 odd port widths by @drewbabel in #95

New Contributors

Full Changelog: 0.8.2...0.9.0