Skip to content

OpenFPGA Update #3066

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 257 commits into from
May 21, 2025
Merged

OpenFPGA Update #3066

merged 257 commits into from
May 21, 2025

Conversation

amin1377
Copy link
Contributor

Update OpenFPGA branch w/ recent changes from master branch.

ueqri and others added 30 commits March 31, 2025 10:01
Added a partial abstract class for ConnectionRouter, derived from the
pure abstract ConnectionRouterInterface.

The SerialConnectionRouter and ParallelConnectionRouter classes are now
derived from the ConnectionRouter class, utilizing the common class
members and helper functions to reduce code duplication.
Added Doxygen-style code comments and documentation for connection
routers, including the ConnectionRouter abstract class, the Parallel-
ConnectionRouter concrete class, and the SerialConnectionRouter concrete
class.

Updated the helper messages for command-line options added for parallel
connection router.
Fixed the interface issues of ConnectionRouter in NestedNetlistRouter.

Fixed code formats.

Fixed typo in read_options.cpp.
Updated the command-line usage for parallel connection router in both
Read the Docs and read_options.cpp.
Added regression tests for parallel connection router by appending extra
sets of configurations to those VTR flow regression tests previously
selected by Fahri for testing coarse-grained parallel router.

Removed VPR connection router test (vpr/test/test_connection_router.cpp),
since it has been out-dated for a very long time and has caused lots of
trouble for running VPR C++ tests locally.
Fixed a weird code formatting issue in libs/librtlnumber/src/include/
internal_bits.hpp. GitHub CI said the file failed dev/check-format.sh,
however, the same script runs perfectly in my local environment. Double
checked the version of clang-format, which seemed to be the same as CI.

Directly copied the file from the GitHub repo to resolve this issue.
The `No source in route tree` bug in ParallelConnectionRouter (since
commit 875b98e) has been fixed. It turns out that putting another member
variable `MultiQueueDAryHeap<HeapImplementation::arg_D> heap_` in the
derived class ParallelConnectionRouter together with the existing
`HeapImplementation heap_` in the base class ConnectionRouter causes the
issue. The solution is to keep `heap_` only in the base class and use
`ConnectionRouter<MultiQueueDAryHeap<HeapImplementation::arg_D>>` rather
than `ConnectionRouter<HeapImplementation>` for deriving the parallel
connection router.

Please note that ParallelConnectionRouter still has some bugs (i.e.,
getting stuck in the MultiQueue pop). This commit is not fully working.
Please do not use it for any experiments.

Updated the previously incorrect command-line options for the parallel
connection router in the regression tests.
Found that the mass legalizer was not spreading out the blocks well
enough according to the mass.

Revistied the spatial partitioning in the mass legalizer. Before, we
just cut the window in half in the larger dimension. This was fine,
however it may create an inbalanced cut which can cause things to not
spread well. Instead, we now search for the best partition by trying
different partition lines and computing how balanced the partition is.
Although this is more expensive than before, by creating more balanced
partitions, it should allow the mass legalizer to converge faster. Time
in the mass legalizer is also dominated by partitioning the blocks, so
increasing the time to choose the partition line should not have that
large of an effect anyways.

Found an oversight with how blocks were partitioned when one of the
partitions become overfilled. Fixed this issue.
enum class e_rr_type
a few remaining t_rr_type vals
CHANY ---> t_rr_type::CHANY
CHANX ---> t_rr_type::CHANX
OPIN ---> t_rr_type::OPIN
IPIN ---> t_rr_type::IPIN
SINK ---> t_rr_type::SINK
SOURCE ---> t_rr_type::SOURCE
Fixed the weird bug in parallel connection router as mentioned in commit
f73212c. The bug occurred because two function parameters 'num_threads'
and 'num_queues' have been misplaced when instantiating the MQ_IO. This
took two weeks to figure out exactly.

The VTR benchmark (`vtr_reg_qor_chain` task) has been tested/passed for
different cases (1) 'serial mode' 1T+2Q (1 thread, 2 queues), (2) 2T+4Q,
and (3) 4T+2Q.

The determinism has also been verified for the VTR benchmark.
Added more explanation to the command-line options messages and code
comments.

Cleaned up ParallelConnectionRouter-related codebase.
amin1377 and others added 7 commits May 20, 2025 10:54
Continued the header file cleanup effort in the route folder.

Some of these files may need to be revisited in more detail, but got
some of the major header include issues.

Found that some definitions were in the wrong place, so moved them to
the correct implementation file.
Moved to pragma once symantics and cleaned up some less than ideal
code.
[Infra] Cleaned Up Header Files in Route Folder
@amin1377 amin1377 changed the base branch from master to openfpga May 20, 2025 19:42
@github-actions github-actions bot added VPR VPR FPGA Placement & Routing Tool Odin Odin II Logic Synthesis Tool: Unsorted item libarchfpga Library for handling FPGA Architecture descriptions docs Documentation lang-cpp C/C++ code infra Project Infrastructure build Build system scripts Utility & Infrastructure scripts lang-make CMake/Make code lang-hdl Hardware Description Language (Verilog/VHDL) lang-shell Shell scripts (bash etc.) libvtrutil external_libs lang-netlist Parmys labels May 20, 2025
@amin1377
Copy link
Contributor Author

@tangxifan: The issues from the previous PR have been addressed. Please feel free to merge this PR when you get a chance. Thanks!

@tangxifan tangxifan merged commit e71ef45 into openfpga May 21, 2025
36 of 37 checks passed
@tangxifan tangxifan deleted the openfpga_update branch May 21, 2025 16:29
@tangxifan tangxifan restored the openfpga_update branch May 21, 2025 16:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
build Build system docs Documentation external_libs infra Project Infrastructure lang-cpp C/C++ code lang-hdl Hardware Description Language (Verilog/VHDL) lang-make CMake/Make code lang-netlist lang-shell Shell scripts (bash etc.) libarchfpga Library for handling FPGA Architecture descriptions libvtrutil Odin Odin II Logic Synthesis Tool: Unsorted item Parmys scripts Utility & Infrastructure scripts VPR VPR FPGA Placement & Routing Tool
Projects
None yet
Development

Successfully merging this pull request may close these issues.