mirror of https://github.com/YosysHQ/yosys.git
subcircuit library: implied allExtern for mining
This commit is contained in:
parent
84cdfa55fc
commit
8689f5d339
|
@ -333,10 +333,6 @@ at most maxNodes nodes that occurs at least minMatches times:
|
||||||
std::vector<SubCircuit::Solver::MineResult> results;
|
std::vector<SubCircuit::Solver::MineResult> results;
|
||||||
mySolver.mine(results, minNodes, maxNodes, minMatches);
|
mySolver.mine(results, minNodes, maxNodes, minMatches);
|
||||||
|
|
||||||
The miner works by finding frequent pairs of nodes and then combining them
|
|
||||||
to larger subcircuits. Because of this incremental strategy the miner only
|
|
||||||
works as expected on graphs with markAllExtern() set.
|
|
||||||
|
|
||||||
The mine() method has an optional fifth parameter that limits the number
|
The mine() method has an optional fifth parameter that limits the number
|
||||||
of matches counted in one graph. This can be useful when mining for circuits
|
of matches counted in one graph. This can be useful when mining for circuits
|
||||||
that are found in at least a number of graphs. E.g. the following call
|
that are found in at least a number of graphs. E.g. the following call
|
||||||
|
|
|
@ -1155,7 +1155,6 @@ class SubCircuit::SolverWorker
|
||||||
for (auto &it : graphData)
|
for (auto &it : graphData)
|
||||||
{
|
{
|
||||||
GraphData &haystack = it.second;
|
GraphData &haystack = it.second;
|
||||||
assert(haystack.graph.allExtern);
|
|
||||||
|
|
||||||
std::vector<std::set<int>> enumerationMatrix;
|
std::vector<std::set<int>> enumerationMatrix;
|
||||||
std::map<std::string, std::set<std::string>> initialMappings;
|
std::map<std::string, std::set<std::string>> initialMappings;
|
||||||
|
@ -1176,6 +1175,7 @@ class SubCircuit::SolverWorker
|
||||||
for (int nodeIdx : testSet.nodes)
|
for (int nodeIdx : testSet.nodes)
|
||||||
needle_nodes.push_back(graph.nodes[nodeIdx].nodeId);
|
needle_nodes.push_back(graph.nodes[nodeIdx].nodeId);
|
||||||
needle.graph = Graph(graph, needle_nodes);
|
needle.graph = Graph(graph, needle_nodes);
|
||||||
|
needle.graph.markAllExtern();
|
||||||
diCache.add(needle.graph, needle.adjMatrix, graphId, userSolver);
|
diCache.add(needle.graph, needle.adjMatrix, graphId, userSolver);
|
||||||
|
|
||||||
std::vector<Solver::Result> ullmannResults;
|
std::vector<Solver::Result> ullmannResults;
|
||||||
|
|
|
@ -7,7 +7,9 @@ graph macc22
|
||||||
node add_1 add A 32 B 32 Y 32
|
node add_1 add A 32 B 32 Y 32
|
||||||
connect mul_1 Y add_1 A
|
connect mul_1 Y add_1 A
|
||||||
connect mul_2 Y add_1 B
|
connect mul_2 Y add_1 B
|
||||||
allextern
|
extern mul_1 A B
|
||||||
|
extern mul_2 A B
|
||||||
|
extern add_1 Y
|
||||||
endgraph
|
endgraph
|
||||||
|
|
||||||
graph macc4x2
|
graph macc4x2
|
||||||
|
@ -24,7 +26,11 @@ graph macc4x2
|
||||||
connect mul_4 Y add_2 B
|
connect mul_4 Y add_2 B
|
||||||
connect add_1 Y add_3 A
|
connect add_1 Y add_3 A
|
||||||
connect add_2 Y add_3 B
|
connect add_2 Y add_3 B
|
||||||
allextern
|
extern mul_1 A B
|
||||||
|
extern mul_2 A B
|
||||||
|
extern mul_3 A B
|
||||||
|
extern mul_4 A B
|
||||||
|
extern add_3 Y
|
||||||
endgraph
|
endgraph
|
||||||
|
|
||||||
swapgroup mul A B
|
swapgroup mul A B
|
||||||
|
|
Loading…
Reference in New Issue