Adding proper support for YPCB-00338-1P1 and DU-PCB-001-003 (YZCA variant)#624
Merged
trabucayre merged 1 commit intotrabucayre:masterfrom Feb 16, 2026
Merged
Adding proper support for YPCB-00338-1P1 and DU-PCB-001-003 (YZCA variant)#624trabucayre merged 1 commit intotrabucayre:masterfrom
trabucayre merged 1 commit intotrabucayre:masterfrom
Conversation
Owner
|
Great works! |
Owner
|
Hi. |
Owner
|
Applied. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This adds BPI flash programming support to openFPGALoader for the YPCB-00338-1P1 Kintex-7 accelerator card (MT28GU512AAA, 512Mbit)
A new JTAG bridge core (
bpiOverJtag_core.v) drives the BPI control signals from JTAG USER1 shifts, same approach as the existing spiOverJtag bridges. The bridge implements single-word read, single-word write, and burst write commands.BPIFlashhandles Intel CFI flash operations: device detection, block erase, buffered programming (0xE9 command sequence), status polling, and read-back verification. The data path applies the same bit-reversal and byte-swap transformations that Vivado'swrite_cfgmemuses for BPIx16 configuration.Board integration hooks into the existing Xilinx flow. When
-b ypcb003381p1is specified with-f, it loads the BPI bridge bitstream instead of an SPI bridge, instantiatesBPIFlash, and routes throughprogram_bpi()instead ofprogram_spi().The first attempt of one USB round-trip per 16-bit word takes about 26 minutes for an 18.7MB bitstream so tthere is a burst write mode that accepts a word count followed by N data words in a single DR shift, with the address auto-incrementing between words. The 21 padding bits after each data word provide the clock cycles the flash needs for its write timing (20 execution cycles plus one for the state transition back). This brings the whole 512-word buffered program operation down to a single USB round-trip.
New files:
bpiOverJtag/bpiOverJtag_core.v-- JTAG-to-BPI bridge FSMbpiOverJtag/xilinx_bpiOverJtag.v-- top-level wrapper instantiating BSCANE2 primitivesbpiOverJtag/constr_xc7k480t_bpi_ffg1156.xdc-- pin constraints for the xc7k480tbpiOverJtag/build_bpi_xc7k480t.tcl-- Vivado tcl scriptbpiOverJtag/bpiOverJtag_xc7k480tffg1156.bit.gz-- pre-built bridge bitstreamsrc/bpiFlash.hpp/src/bpiFlash.cpp-- BPI flash driverdoc/boards.yml,src/board.hppsrc/xilinx.cpp/src/xilinx.hpp