mirror of
https://github.com/YosysHQ/yosys
synced 2025-11-24 14:41:31 +00:00
The existing read port assignment algorithm uses Cartesian product expansion, which has O(options^N) complexity. For memories with many read ports (e.g., 64 parallel reads), this causes exponential memory usage (60GB+) and timeouts. This commit adds a beam search algorithm that activates for >8 read ports. It maintains only the top K (default 16) configurations at each step, reducing complexity to O(N * options * K). Tested with: - 64 read ports: completes in ~1s vs OOM - 32 read ports: completes in ~1s vs timeout - Maintains existing behavior for ≤8 ports 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| .gitignore | ||
| generate.py | ||
| memlib_9b1B.txt | ||
| memlib_9b1B.v | ||
| memlib_beam_search.v | ||
| memlib_beam_search.ys | ||
| memlib_block_sdp.txt | ||
| memlib_block_sdp.v | ||
| memlib_block_sdp_1clk.txt | ||
| memlib_block_sdp_1clk.v | ||
| memlib_block_sp.txt | ||
| memlib_block_sp.v | ||
| memlib_block_sp_full.txt | ||
| memlib_block_sp_full.v | ||
| memlib_block_tdp.txt | ||
| memlib_block_tdp.v | ||
| memlib_clock_sdp.txt | ||
| memlib_clock_sdp.v | ||
| memlib_lut.txt | ||
| memlib_lut.v | ||
| memlib_multilut.txt | ||
| memlib_multilut.v | ||
| memlib_wide_read.txt | ||
| memlib_wide_read.v | ||
| memlib_wide_sdp.txt | ||
| memlib_wide_sdp.v | ||
| memlib_wide_sp.txt | ||
| memlib_wide_sp.v | ||
| memlib_wide_write.txt | ||
| memlib_wide_write.v | ||
| memlib_wren.txt | ||
| memlib_wren.v | ||
| run-test.sh | ||