xilinx: fix SRLC32E Q31 cascade and add WE consistency check - #98
Open
nkapreTT wants to merge 1 commit into
Open
xilinx: fix SRLC32E Q31 cascade and add WE consistency check#98nkapreTT wants to merge 1 commit into
nkapreTT wants to merge 1 commit into
Conversation
Two cascaded SRLC32E primitives currently fail routing in nextpnr-xilinx because the packer never xforms the source-cell Q31 port to its bel-level cascade pin MC31. The chipdb already exposes MC31 on SLICE_LUTX and the corresponding DOUTMUX:MC31 site pip, so the gap was purely on the packer side. This patch wires Q31 -> MC31 into pack_srls() so Yosys-emitted SRLC32E chains route cleanly under both router1 and router2. While here, also add a WE net consistency check in xc7_logic_tile_valid()'s half-tile loop. The WEMUX driving the SRL/DRAM WE pin is shared across the bottom half of a SLICEM, so two SRLs from independent write-enable domains cannot legally share a half-SLICE. Today the placer happily places them together and the router then fails on SITEWIRE/SLICE_*/WEMUX_OUT. Mirror the existing wclk check by storing the WE net on lutInfo in assignCellInfo() and asserting agreement inside the half-tile loop. A minimal two-SRL repro (one SRLC32E driving another via Q31->D) now routes under both routers; previously it errored out with "No wire found for port Q31 on source cell".
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.
Two cascaded SRLC32E primitives currently fail routing in
nextpnr-xilinx because the packer never xforms the source-cell
Q31 port to its bel-level cascade pin MC31. The chipdb already
exposes MC31 on SLICE_LUTX and the corresponding DOUTMUX:MC31 site
pip, so the gap was purely on the packer side. This patch wires
Q31 -> MC31 into pack_srls() so Yosys-emitted SRLC32E chains route
cleanly under both router1 and router2.
While here, also add a WE net consistency check in
xc7_logic_tile_valid()'s half-tile loop. The WEMUX driving the
SRL/DRAM WE pin is shared across the bottom half of a SLICEM, so
two SRLs from independent write-enable domains cannot legally share
a half-SLICE. Today the placer happily places them together and
the router then fails on SITEWIRE/SLICE_*/WEMUX_OUT. Mirror the
existing wclk check by storing the WE net on lutInfo in
assignCellInfo() and asserting agreement inside the half-tile loop.
A minimal two-SRL repro (one SRLC32E driving another via Q31->D)
now routes under both routers; previously it errored out with
"No wire found for port Q31 on source cell".