Skip to content

Release Candidate v2.73.0#1441

Open
ruck314 wants to merge 102 commits into
mainfrom
pre-release
Open

Release Candidate v2.73.0#1441
ruck314 wants to merge 102 commits into
mainfrom
pre-release

Conversation

burbschat and others added 30 commits May 2, 2026 12:42
Add a generic to allow for disabling of the safe buffering scheme. This
reduces the number of buffers from three to one, saving on resources.
However, it becomes possible to write to/read from the same buffer at
the same time, possibly corrupting the data.
This option may be used if the user knows that write/read never happens
at the same time and would like to save on resources.
Supported in newer VHDL standards but not the one used for vivado build
it seems.
The non-oneshot one would drop triggers it seems (on hardware).
Not sure if this is really due to the synchronizer or some more
intricate timing issue that just happens to be resolved from switching
to the oneshot synchronizer...
Implement handshake between clock domains to make sure no signals are
missed. Allow trigger signal synchronous to either data or axil clock.
Does not test async clock case. Would be harder to validate and not sure
if necessary.
They will be mentioned in PR thread.
Returning from wait to idle state before rdMoveDoneSync is de-asserted
leads to the FSM immediately moving back to wait and thus jumping
between wait and idle until rdMoveDoneSync returns to 0.
Now the FSM waits until rdMoveDoneSync returns to 0, then moves back to
idle.
…dRxReg

The 0x24 address decode had its read and write actions swapped: the
write branch drove rdata from r.rxPowerDown while the read branch
loaded v.rxPowerDown from wdata. Swap them so AXI-Lite writes set
rxPowerDown and reads return its current value.
…eadback

The read decode never cleared v.axilReadSlave.rdata before the address
case, so bits left over from a previous read of a wider register could
leak into the readback of a narrower field. Zero rdata at the start of
every read transaction, matching the JesdRxReg decode.
… multiframe

Per JESD204B section 8.2 (Figure 50) and 8.3 (Tables 20/21), the second
ILAS multiframe must carry /Q/ (K28.4) at octet 1 followed by 14
link-configuration octets including the FCHK checksum. JesdIlasGen
previously emitted only the /R/ and /A/ frame delimiters.

- JesdIlasGen: add mfCnt/wordCnt counters and emit /Q/ plus the 14
  config octets during the second multiframe (mfCnt=1) in GT byte
  order. FCHK is the mod-256 sum of config octets 0-12.
- Add Q_CHAR_C (K28.4, 0x9C) to Jesd204bPkg.
- Thread the ILAS link-config generics (DID_G, BID_G, M_G, N_G,
  NPRIME_G, CS_G, S_G, HD_G, CF_G) through JesdTxLane and Jesd204bTx,
  and drive per-lane LID via a new lid_i port. All generics and the
  lid_i port are defaulted so existing instantiations compile
  unchanged.

The SURF RX ILA state counts multiframes and does not parse config
octets, so the added content cannot break SURF-to-SURF links.
…mments

- Jesd204bPkg: drop the unused jesdScrambler procedure (no references
  anywhere in the library; the per-lane scrambling lives in
  JesdScrCmb/descrambler logic).
- JesdSyncFsmRx: correct the comma-detect comment (the AND chain spans
  four consecutive cycles, not three) and remove the stale readBuff
  TODO note.
- Jesd204bTx: replace the 'scrambling not tested' header warning now
  that TX scrambling is exercised end-to-end by the cocotb loopback
  bench.
…s plumbing

Add a cocotb-based regression suite for the JESD204B library under
tests/protocols/jesd204b:

- jesd204b_test_utils.py: golden models (LFSR scrambler, LMFC, ILAS
  timeline builders) and shared testbench helpers
- Unit benches: JesdLmfcGen, JesdScramblerWrapper, Jesd16bTo32b,
  Jesd32bTo16b, JesdSyncFsmTx, JesdIlasGen, JesdTxLane, JesdSyncFsmRx,
  JesdAlignFrRepCh, JesdRxLane
- Register benches: JesdTxReg and JesdRxReg full map walks
- test_Jesd204bLoopback: end-to-end TX-to-RX loopback across parameter
  cases with golden scrambler cross-checks
- README with the coverage model and bench-to-module map

Add cocotb-facing wrappers under protocols/jesd204b/wrappers that
flatten record ports and expose AXI-Lite/GT interfaces for simulation
(JesdTxLaneWrapper, JesdRxLaneWrapper, JesdScramblerWrapper,
Jesd204bTxWrapper, Jesd204bRxWrapper, Jesd204bLoopbackWrapper), and
load them from ruckus.tcl.
@codecov-commenter

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

❌ Patch coverage is 23.23350% with 2640 lines in your changes missing coverage. Please review.
⚠️ Please upload report for BASE (main@0ca723d). Learn more about missing BASE report.

Files with missing lines Patch % Lines
tests/protocols/jesd204b/test_Jesd204bLoopback.py 14.75% 387 Missing ⚠️
tests/protocols/jesd204b/test_JesdRxLane.py 18.63% 275 Missing ⚠️
tests/protocols/jesd204b/test_JesdTxLane.py 14.09% 262 Missing ⚠️
tests/protocols/jesd204b/test_JesdTxReg.py 13.01% 254 Missing ⚠️
tests/protocols/jesd204b/test_JesdRxReg.py 12.74% 219 Missing ⚠️
tests/protocols/jesd204b/test_JesdSyncFsmRx.py 9.52% 190 Missing ⚠️
tests/protocols/jesd204b/test_JesdIlasGen.py 13.63% 152 Missing ⚠️
tests/protocols/jesd204b/test_JesdAlignFrRepCh.py 14.81% 138 Missing ⚠️
tests/protocols/jesd204b/test_JesdLmfcGen.py 16.12% 130 Missing ⚠️
tests/protocols/jesd204b/test_Jesd32bTo16b.py 16.08% 120 Missing ⚠️
... and 7 more
❗ Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@           Coverage Diff           @@
##             main    #1441   +/-   ##
=======================================
  Coverage        ?   24.93%           
=======================================
  Files           ?      273           
  Lines           ?    23856           
  Branches        ?        0           
=======================================
  Hits            ?     5949           
  Misses          ?    17907           
  Partials        ?        0           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

burbschat and others added 22 commits July 6, 2026 13:50
Enforce RAM_ADDR_WIDTH_G <= 32 so that axilR.rdFinalAddr fits a 32 bit
register (32 bit wide should be enough in practice). Move the remaining
registers to make space.
Test case had to be adjusted to now test for the new softTrig register.
RoCEv2: AXI-Stream RDMA datapath, engine refactor, DCQCN + line-rate RDMA-SEND
PR #1418 was merged from a fork that never ran CI. Its test module
imported numpy, which is not listed in pip_requirements.txt, so the CI
runner failed at pytest collection time with ModuleNotFoundError and
returned a non-zero exit code despite all other tests passing.

numpy was used only for the pi and e constants that set the asynchronous
clock ratios. Replace them with the stdlib math module (identical values)
so the test no longer needs numpy, matching the rest of the suite.
fix(axi-stream): drop numpy dependency from AxiStreamFrameBuffer test
Upgrade third-party actions to their latest release and pin each to the
full commit SHA (tag recorded in the trailing comment), per the slaclab
SHA-pinning policy. First-party slaclab/ruckus reusable workflows are left
on @main.
Repo hygiene: pin/upgrade Actions to SHAs
The outbound DHCP Discover/Request built the SECS/FLAGS word as x"00080000",
which places 0x08 in the flags-high byte on the wire (AXI lane 0 = first wire
byte), yielding flags=0x0800. The RFC 2131 4.1 broadcast flag is bit 15
(0x8000), so the intended value is x"00800000".

With the broadcast flag clear, a spec-compliant server unicasts its Offer/ACK
to the not-yet-leased yiaddr. On some networks that reply is never delivered to
the client (it does not yet own the IP), so the client never receives the Offer
and loops on Discover, never acquiring an address. Setting the broadcast flag
makes the server broadcast the reply, which the client reliably receives.

The bug is present in every release since v1.0.0. Add a regression test:
extract_dhcp_bootp_flags() plus assertions in the DHCP offer/ack sequence test
that the Discover and Request advertise the broadcast flag. The test fails on
the unpatched RTL (flags=0x0800) and passes with the fix.
RFC 2131 (figure 2) marks the 15 non-broadcast bits of the BOOTP flags field
as MUST-BE-ZERO. The bitmask assertion (flags & 0x8000) would still pass if a
future change set stray bits (e.g. 0x8800). Assert exact equality to 0x8000
instead — strictly stronger, and the RTL already emits exactly that value.
Test-only change; no RTL touched.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
…er, retransmit)

Add four cocotb tests to test_UdpEngineDhcp.py that all pass on the current
RTL, locking in RFC 2131 client-side behavior beyond the happy-path DORA
sequence:

- Mismatched-XID offer is discarded; the engine re-discovers (RFC 2131 4.4.1).
- Mismatched-CHADDR offer is discarded even when the XID matches.
- Full offer/request/ack completes with a scrambled TLV option block (leading
  pad, subnet mask, 17-byte domain name, lease time, server identifier,
  interleaved pads, message-type last), exercising the byte-serial option
  parser's ordering and unknown-option handling.
- With no server reply, the discover is retransmitted after the communication
  timeout.

build_dhcp_reply_payload gains a keyword-only raw_options escape hatch so tests
can supply an arbitrary option block without duplicating the fixed-header
construction; the default path is unchanged. Adds DHCP_OPT_PAD/SUBNET_MASK/
DOMAIN_NAME option-code constants.
The IDLE_S state incremented the transaction ID on every transmission,
including the SELECTING-state DHCP Request that VERIFY_S triggers immediately
after accepting an Offer (it forces commCnt := 0, re-entering the IDLE_S
transmit path). RFC 2131 4.4.1 / Table 5 requires that Request to carry the
same XID as the Discover/Offer exchange, so the previous behavior sent a
Request with discover_xid + 1.

Guard the XID increment: bump it only for a new Discover (dhcpReq = '0') or a
lease renewal (leaseCnt /= 0). The SELECTING Request (dhcpReq = '1', leaseCnt
= 0) now reuses the existing XID; renewal transactions still take a fresh one.

Fail-first evidence: adding the request_xid == discover_xid assertion to
udp_engine_dhcp_offer_ack_sequence_test fails on the pre-fix RTL with
"Request XID 0x00000002 does not match Discover XID 0x00000001"; with the RTL
guard applied the full module passes (5/5 cocotb tests), and the wider
tests/ethernet regression passes (68/68).
The regression job collected tests/axi, tests/base, tests/dsp, tests/protocols,
and tests/ethernet/RoCEv2, but not tests/ethernet/UdpEngine, so the UdpEngine
cocotb suite (including the DHCP corner-case coverage) never executed in CI. Add
tests/ethernet/UdpEngine to the pytest invocation so these tests run on every
push.
Fix DHCP BOOTP broadcast flag and XID continuity in UdpEngineDhcp (RFC 2131)
@ruck314
ruck314 marked this pull request as ready for review July 13, 2026 18:56
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.

4 participants