Skip to content

Add extended technology mapping from mockturtle to rmp #9097

Open
m-torhan wants to merge 101 commits into
The-OpenROAD-Project:masterfrom
antmicro:mockturtle-extended-technology-mapping
Open

Add extended technology mapping from mockturtle to rmp #9097
m-torhan wants to merge 101 commits into
The-OpenROAD-Project:masterfrom
antmicro:mockturtle-extended-technology-mapping

Conversation

@m-torhan
Copy link
Copy Markdown

This PR adds extended technology mapping from mockturtle to rmp tool as resynth_emap command. It adds possibility to map multioutput cells such as adders.

It also adds support for exporting/importing design between OpenROAD and mockturtle, using mockturtle tech library in logic cut from cut as it was required for this work.

In the further steps, there will also be added possibility to read liberty into mockturtle tech library, as currently it reads it from genlib format and may cause issues if those are not compatible.

The mockturtle is currently supported only for CMake builds as it does not have configurations for Bazel. This will also be handled in the future.

Opening this as draft to get early feedback.

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @m-torhan, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a significant enhancement to OpenROAD's logic synthesis capabilities by integrating the mockturtle library. It provides a new resynth_emap command that performs extended technology mapping, specifically designed to handle multi-output cells more effectively. The underlying logic extraction mechanism has been made more flexible to support different logic synthesis backends, paving the way for more advanced optimizations and broader compatibility with various cell libraries.

Highlights

  • Mockturtle Integration: The mockturtle logic network library has been integrated as a third-party submodule, enabling advanced logic synthesis capabilities within OpenROAD.
  • Extended Technology Mapping Command: A new resynth_emap command has been added to the rmp tool, leveraging mockturtle for extended technology mapping. This command supports mapping of multi-output cells, such as adders.
  • Generic Logic Extraction: The logic extraction framework (cut module) has been refactored to be library-agnostic, allowing it to build logic cuts for both ABC and mockturtle technology libraries. This includes templating the search predicate and cut building functions.
  • OpenROAD to Mockturtle Design Flow: New functionality allows for exporting a logic design from OpenROAD to a mockturtle AIG network, performing technology mapping with emap, and then importing the mapped network back into OpenROAD, replacing the original logic.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a significant new feature, enabling extended technology mapping using the mockturtle library. The changes are extensive, adding mockturtle as a submodule and integrating it with the cut and rmp components. The core logic involves extracting a logic cone into a mockturtle AIG, performing technology mapping, and then re-inserting the result into the OpenROAD database. While this is a great addition, I've identified several critical issues, including potential crashes from null pointer dereferences and the use of C++20 features in a C++17 codebase. I've also noted some medium-severity concerns regarding code style, potential limitations, and API usage. Given the draft status of this PR, addressing these points will be crucial for hardening the implementation.

Comment thread src/cut/include/cut/logic_cut.h
Comment on lines +221 to +229
if (sta_pin == nullptr) {
logger->error(utl::CUT,
53,
"Cannot find pin {} on instance {}.",
p.name,
network->name(driver_inst));
}

sta::Net* fanin_net = network->net(sta_pin);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

Similar to the issue above, if network->findPin returns nullptr, an error is logged, but execution continues. The subsequent line sta::Net* fanin_net = network->net(sta_pin); will then dereference a null pointer, causing a crash. The function should terminate gracefully by throwing an exception.

Suggested change
if (sta_pin == nullptr) {
logger->error(utl::CUT,
53,
"Cannot find pin {} on instance {}.",
p.name,
network->name(driver_inst));
}
sta::Net* fanin_net = network->net(sta_pin);
if (sta_pin == nullptr) {
logger->error(utl::CUT,
53,
"Cannot find pin {} on instance {}.",
p.name,
network->name(driver_inst));
throw std::runtime_error("Pin not found on instance");
}
sta::Net* fanin_net = network->net(sta_pin);

Comment thread src/rmp/src/extended_technology_mapping.cpp Outdated
Comment on lines +182 to +188
if (drivers->size() != 1) {
logger->error(utl::CUT,
51,
"Net {} has {} drivers; CUT expects exactly one.",
network->name(net),
drivers->size());
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

If a net has multiple drivers, an error is logged, but execution continues by using the first driver found (*drivers->begin()). This could lead to incorrect logic being generated for the AIG network, as it silently ignores other drivers. This is a correctness issue. The function should abort more forcefully, for instance by throwing an exception, to prevent generating a potentially incorrect circuit, especially since a net with multiple drivers is a significant issue in a synthesized netlist.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Error throws an exception so the control flow ends

// want to add vertices from these cells. We really just
// want the ones in the fan-in set who are filtered by STA
// for one reason or another.
if (endpoint_set.contains(vertex)) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Using contains is a C++20 feature. The project seems to be using C++17. This might cause compilation issues with some compilers. The C++17-compatible way to check for existence is endpoint_set.find(vertex) != endpoint_set.end(). This also applies to line 317.

Suggested change
if (endpoint_set.contains(vertex)) {
if (endpoint_set.find(vertex) != endpoint_set.end()) {

Comment on lines +174 to +176
for (const sta::Instance* instance : cut.cut_instances()) {
sta->getDbNetwork()->deleteInstance(const_cast<sta::Instance*>(instance));
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The use of const_cast here is necessary because cut.cut_instances() returns a const reference to the instance set, and iterating over it yields const sta::Instance*, while deleteInstance requires a non-const sta::Instance*. While this works, it's a code smell.

For future refactoring, consider adding a non-const overload for cut_instances() in the cut::LogicCut class to provide non-const access to the underlying set, which would eliminate the need for const_cast.

// In cut::LogicCut
sta::InstanceSet& cut_instances() { return cut_instances_; }

With such a change, this loop could be written more cleanly. Since this change is outside the diff, no code suggestion is provided here.

Comment on lines +178 to +180
for (const sta::Net* net : nets_to_be_deleted) {
sta->getDbNetwork()->deleteNet(const_cast<sta::Net*>(net));
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The use of const_cast here can be avoided. The nets_to_be_deleted set contains sta::Net* pointers. By declaring the loop variable as sta::Net* instead of const sta::Net*, you can pass it directly to deleteNet without casting away constness.

Suggested change
for (const sta::Net* net : nets_to_be_deleted) {
sta->getDbNetwork()->deleteNet(const_cast<sta::Net*>(net));
}
for (sta::Net* net : nets_to_be_deleted) {
sta->getDbNetwork()->deleteNet(net);
}

}
}

mockturtle::tech_library<9u> tech_lib(gates);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The mockturtle::tech_library is instantiated with a hardcoded maximum number of inputs 9u. This could be a limitation if the provided genlib file contains cells with more than 9 inputs. Consider making this value more flexible, for example, by using a larger constant or making it configurable, to support a wider range of technology libraries.


import_mockturtle_mapped_network(sta, mapped_ntk, libs, cut, logger);

db->triggerPostReadDb();
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The function db->triggerPostReadDb() is called after modifying the database. As its name suggests, this trigger is intended to be used after reading a database (e.g., from a DEF or LEF file), not after in-memory modifications. While it might have the desired side effect of updating some data structures, it's not clear if this is the correct and safe API to use here. Please verify if this is the intended usage or if there's a more appropriate way to signal that the database has been modified.

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

clang-tidy made some suggestions

There were too many comments to post at once. Showing the first 25 out of 26. Check the log or trigger a new build to see more.

#include "mockturtle/networks/aig.hpp"
#include "mockturtle/algorithms/cleanup.hpp"
#include "mockturtle/utils/tech_library.hpp"
#include "mockturtle/views/names_view.hpp"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: included header tech_library.hpp is not used directly [misc-include-cleaner]

Suggested change
#include "mockturtle/views/names_view.hpp"
#include "mockturtle/views/names_view.hpp"

Comment thread src/cut/include/cut/logic_cut.h Outdated
@@ -60,4 +71,192 @@ class LogicCut
std::vector<sta::Net*> primary_outputs_;
sta::InstanceSet cut_instances_;
};

namespace {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: do not use unnamed namespaces in header files [google-build-namespaces]

namespace {
^

Comment thread src/cut/include/cut/logic_cut.h Outdated

mockturtle::signal<mockturtle::aig_network> tt_to_aig(
mockturtle::names_view<mockturtle::aig_network>& ntk,
const kitty::dynamic_truth_table& tt,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: no header providing "kitty::dynamic_truth_table" is directly included [misc-include-cleaner]

src/cut/include/cut/logic_cut.h:11:

- #include "mockturtle/networks/aig.hpp"
+ #include "kitty/dynamic_truth_table.hpp"
+ #include "mockturtle/networks/aig.hpp"

{
using aig_ntk = mockturtle::names_view<mockturtle::aig_network>;
using signal = mockturtle::signal<aig_ntk>;
using gate = mockturtle::gate;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: no header providing "mockturtle::gate" is directly included [misc-include-cleaner]

src/cut/include/cut/logic_cut.h:11:

- #include "mockturtle/networks/aig.hpp"
+ #include "mockturtle/io/genlib_reader.hpp"
+ #include "mockturtle/networks/aig.hpp"

#include <unordered_set>
#include <vector>

#include "cut/abc_library_factory.h"
#include "cut/logic_cut.h"
#include "db_sta/dbSta.hh"
#include "mockturtle/utils/tech_library.hpp"
#include "sta/Bfs.hh"
#include "sta/Graph.hh"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: included header Bfs.hh is not used directly [misc-include-cleaner]

Suggested change
#include "sta/Graph.hh"
#include "sta/Graph.hh"

std::vector<std::vector<odb::dbNet*>> node_out_nets(num_nodes);

// Const nets (for constant fanins)
odb::dbNet* const0_net = nullptr;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: no header providing "odb::dbNet" is directly included [misc-include-cleaner]

  odb::dbNet* const0_net = nullptr;
       ^

}

std::string inst_name = std::format("n_{}", idx);
odb::dbInst* inst = odb::dbInst::create(block, master, inst_name.c_str());
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: no header providing "odb::dbInst" is directly included [misc-include-cleaner]

    odb::dbInst* inst = odb::dbInst::create(block, master, inst_name.c_str());
         ^

}

auto out_mterms = getSignalOutputs(master);
const uint32_t num_cell_outputs = static_cast<uint32_t>(out_mterms.size());
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: no header providing "uint32_t" is directly included [misc-include-cleaner]

src/rmp/src/extended_technology_mapping.cpp:9:

- #include "map/mio/mio.h"
+ #include <cstdint>
+ #include "map/mio/mio.h"

odb::dbMTerm* o_mterm = out_mterms[out_pin_idx];
const std::string pin_name = o_mterm->getName();

odb::dbITerm* o_iterm = inst->findITerm(pin_name.c_str());
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: no header providing "odb::dbITerm" is directly included [misc-include-cleaner]

      odb::dbITerm* o_iterm = inst->findITerm(pin_name.c_str());
           ^

auto code = lorina::read_genlib(std::string(genlib_file_name),
mockturtle::genlib_reader(gates));

if (code != lorina::return_code::success) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: no header providing "lorina::return_code" is directly included [misc-include-cleaner]

src/rmp/src/extended_technology_mapping.cpp:9:

- #include "map/mio/mio.h"
+ #include "lorina/common.hpp"
+ #include "map/mio/mio.h"

Comment thread .gitmodules Outdated
@@ -4,3 +4,6 @@
[submodule "src/abc"]
path = third-party/abc
url = ../../The-OpenROAD-Project/abc.git
[submodule "third-party/mockturtle"]
path = third-party/mockturtle
url = https://github.com/antmicro/mockturtle
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What are the changes in antmicro's fork vs upstream?

@maliberty
Copy link
Copy Markdown
Member

Given that mockturtle is not under active development, should we just copy over the relevant subset rather than taking a full dependency?

@maliberty
Copy link
Copy Markdown
Member

It adds possibility to map multioutput cells such as adders.

Will this PR add that feature or is that future work?. What is actually enabled here? Are there any results to share?

@QuantamHD
Copy link
Copy Markdown
Collaborator

@maliberty could you trigger the CI again

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

clang-tidy made some suggestions

Comment thread src/cut/include/cut/logic_cut.h Outdated

mockturtle::signal<mockturtle::aig_network> tt_to_aig(
mockturtle::names_view<mockturtle::aig_network>& ntk,
const kitty::dynamic_truth_table& tt,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: no header providing "kitty::dynamic_truth_table" is directly included [misc-include-cleaner]

src/cut/include/cut/logic_cut.h:11:

- #include "mockturtle/algorithms/cleanup.hpp"
+ #include "kitty/dynamic_truth_table.hpp"
+ #include "mockturtle/algorithms/cleanup.hpp"

{
using aig_ntk = mockturtle::names_view<mockturtle::aig_network>;
using signal = mockturtle::signal<aig_ntk>;
using gate = mockturtle::gate;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: no header providing "mockturtle::gate" is directly included [misc-include-cleaner]

src/cut/include/cut/logic_cut.h:12:

- #include "mockturtle/networks/aig.hpp"
+ #include "mockturtle/io/genlib_reader.hpp"
+ #include "mockturtle/networks/aig.hpp"

Comment thread src/cut/include/cut/logic_cut.h Outdated

sta::PinSet* drivers = network->drivers(net);
// Net driven from outside the cut handled by logic_extractor
assert(drivers && !drivers->empty());
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: no header providing "assert" is directly included [misc-include-cleaner]

src/cut/include/cut/logic_cut.h:5:

- #include <utility>
+ #include <cassert>
+ #include <utility>

return nullptr;
}
// Okay if the cell we're looking for is actually a const cell add it.
sta::LibertyCell* liberty_cell = network->libertyCell(instance);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: no header providing "sta::LibertyCell" is directly included [misc-include-cleaner]

src/cut/include/cut/logic_extractor.h:15:

- #include "sta/NetworkClass.hh"
+ #include "sta/Liberty.hh"
+ #include "sta/NetworkClass.hh"

#include "utl/Logger.h"

namespace abc {
Vec_Str_t* Abc_SclProduceGenlibStrSimple(SC_Lib* p);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: function 'Abc_SclProduceGenlibStrSimple' can be made static or moved into an anonymous namespace to enforce internal linkage [misc-use-internal-linkage]

Suggested change
Vec_Str_t* Abc_SclProduceGenlibStrSimple(SC_Lib* p);
static Vec_Str_t* Abc_SclProduceGenlibStrSimple(SC_Lib* p);

auto genlib_str = Vec_StrArray(genlib_vec);
std::istringstream genlib(genlib_str);

class diagnostic_consumer : public lorina::diagnostic_consumer
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: no header providing "lorina::diagnostic_consumer" is directly included [misc-include-cleaner]

src/rmp/src/extended_technology_mapping.cpp:10:

- #include "map/mio/mio.h"
+ #include "lorina/diagnostics.hpp"
+ #include "map/mio/mio.h"

public:
diagnostic_consumer(utl::Logger* logger) : logger_(logger) {}

void handle_diagnostic(lorina::diagnostic_level level,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: no header providing "lorina::diagnostic_level" is directly included [misc-include-cleaner]

      void handle_diagnostic(lorina::diagnostic_level level,
                                     ^

};

diagnostic_consumer diag_consumer(logger);
lorina::diagnostic_engine diag_engine(&diag_consumer);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: no header providing "lorina::diagnostic_engine" is directly included [misc-include-cleaner]

    lorina::diagnostic_engine diag_engine(&diag_consumer);
            ^

auto code = lorina::read_genlib(
genlib, mockturtle::genlib_reader(gates), &diag_engine);

if (code != lorina::return_code::success) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: no header providing "lorina::return_code" is directly included [misc-include-cleaner]

src/rmp/src/extended_technology_mapping.cpp:10:

- #include "map/mio/mio.h"
+ #include "lorina/common.hpp"
+ #include "map/mio/mio.h"

namespace rmp {

void extended_technology_mapping(sta::dbSta* sta,
odb::dbDatabase *db,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

warning: no header providing "odb::dbDatabase" is directly included [misc-include-cleaner]

src/rmp/src/extended_technology_mapping.h:4:

- #include "rsz/Resizer.hh"
+ #include "odb/db.h"
+ #include "rsz/Resizer.hh"

@kbieganski
Copy link
Copy Markdown
Contributor

Given that mockturtle is not under active development, should we just copy over the relevant subset rather than taking a full dependency?

I'm open to that, it would make development easier. @QuantamHD thoughts?

Will this PR add that feature or is that future work?. What is actually enabled here? Are there any results to share?

It's supposed to be in this PR. What's enabled is mockturtle's emap techmapper which at least claims to be able to techmap multibit output gates. Working on test cases to showcase that.

@QuantamHD
Copy link
Copy Markdown
Collaborator

I'm fine with just pulling over emap + the deps if they're reasonable in size.

@m-torhan m-torhan force-pushed the mockturtle-extended-technology-mapping branch 6 times, most recently from b56ae22 to b32fa17 Compare February 6, 2026 15:51
@m-torhan m-torhan force-pushed the mockturtle-extended-technology-mapping branch from 2fbf0d1 to 6bbf135 Compare February 12, 2026 17:57
m-torhan and others added 13 commits February 13, 2026 14:48
Signed-off-by: Maciej Torhan <mtorhan@antmicro.com>
Signed-off-by: Maciej Torhan <mtorhan@antmicro.com>
Signed-off-by: Maciej Torhan <mtorhan@antmicro.com>
Signed-off-by: Krzysztof Bieganski <kbieganski@antmicro.com>
Signed-off-by: Krzysztof Bieganski <kbieganski@antmicro.com>
Signed-off-by: Krzysztof Bieganski <kbieganski@antmicro.com>
Signed-off-by: Krzysztof Bieganski <kbieganski@antmicro.com>
Signed-off-by: Krzysztof Bieganski <kbieganski@antmicro.com>
Signed-off-by: Krzysztof Bieganski <kbieganski@antmicro.com>
Signed-off-by: Krzysztof Bieganski <kbieganski@antmicro.com>
Signed-off-by: Maciej Torhan <mtorhan@antmicro.com>
Signed-off-by: Maciej Torhan <mtorhan@antmicro.com>
Signed-off-by: Maciej Torhan <mtorhan@antmicro.com>
jmichalski-ant and others added 7 commits May 11, 2026 11:42
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
* removing emap_sub_aes as it was minimized version of AES
* adding cell type reports before and after repair design

Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
@b-chmiel b-chmiel force-pushed the mockturtle-extended-technology-mapping branch from 021bae8 to 90717c2 Compare May 11, 2026 15:20
b-chmiel added 6 commits May 12, 2026 10:19
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
@b-chmiel b-chmiel requested review from a team as code owners May 14, 2026 09:30
@b-chmiel b-chmiel requested review from gudeh, joaomai, maliberty and povik May 14, 2026 09:30
b-chmiel added 7 commits May 14, 2026 11:32
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
Signed-off-by: Bartłomiej Chmiel <bchmiel@antmicro.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants