Skip to content

Comments

fix: Break combinational loop in desc64 speculation FIFO#91

Draft
DanielKellerM wants to merge 4 commits intomasterfrom
test/issue-71-comb-loop
Draft

fix: Break combinational loop in desc64 speculation FIFO#91
DanielKellerM wants to merge 4 commits intomasterfrom
test/issue-71-comb-loop

Conversation

@DanielKellerM
Copy link
Collaborator

@DanielKellerM DanielKellerM commented Feb 20, 2026

Summary

Fixes #71.

  • Disable fall-through (FALL_THROUGH=0) on i_speculation_fifo in idma_desc64_ar_gen_prefetch to break a combinational loop through the speculation check path
  • The loop path is: staging_addr_valid_speculationspeculation_valid (fall-through) → speculation_check_addr mux → speculation_correctflushstaging_addr_valid_speculation
  • Under specific conditions (descriptor next-pointer skipping forward within a sequential layout), this reduces to flush = !flush — a combinational oscillator
  • The fix adds 1 cycle of latency to speculation checking; actual prefetch performance is unaffected since ARs are already in-flight

Test plan

  • tb_idma_desc64_top (558 descriptors, 0 errors)
  • tb_idma_desc64_bench (1000 descriptors, 0 errors)
  • CI (Questa + VCS)

Disable fall-through on i_speculation_fifo to break a combinational
loop: flush -> staging_addr_valid_speculation -> speculation_valid ->
speculation_correct -> flush. Under specific conditions this reduces
to flush = !flush, a combinational oscillator.
Base automatically changed from devel to master February 20, 2026 16:23
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.

1 participant