diff --git a/Changes b/Changes index 2bd36896b..ca1ed45ed 100644 --- a/Changes +++ b/Changes @@ -16,7 +16,14 @@ Verilator 5.001 devel * This is a major new release, currently only in alpha testing. -Verilator 4.221 devel +Verilator 4.223 devel +========================== + +**Minor:** + + + +Verilator 4.222 2022-05-02 ========================== **Minor:** @@ -25,14 +32,19 @@ Verilator 4.221 devel * Deprecate 'vluint64_t' and similar types (#3255). * Raise error on assignment to const in initial blocks. [Geza Lore, Shunyao CAD] * Issue INITIALDLY/COMBDLY/BLKSEQ warnings consistent with Verilator execution. [Geza Lore, Shunyao CAD] +* Support LoongArch ISA multithreading (#3353) (#3354). [Xi Zhang] * Fix MSVC localtime_s (#3124). * Fix Bison 3.8.2 error (#3366). [elike-ypq] * Fix rare bug in -Oz (V3Localize) (#3286). [Geza Lore, Shunyao CAD] * Fix tracing interfaces inside interfaces (#3309). [Kevin Millis] * Fix filenames with dots overwriting debug .vpp files (#3373). -* Fix including VK_USER_OBJS in make library (#3370). [Julien Margetts] +* Fix including VK_USER_OBJS in make library (#3370) (#3382). [Julien Margetts] +* Fix hang in generate symbol references (#3391) (#3398). [Yoda Lee] +* Fix missing #include (#3392). [Aliaksei Chapyzhenka] * Fix crash in recursive module inlining (#3393). [david-sawatzke] * Fix --protect-ids mangling names of library methods. [Geza Lore, Shunyao CAD] +* Fix foreach segmentation fault (#3400). [Kamil Rakoczy] + Verilator 4.220 2022-03-12 ========================== diff --git a/docs/guide/contributors.rst b/docs/guide/contributors.rst index 54e5400e2..68b17d671 100644 --- a/docs/guide/contributors.rst +++ b/docs/guide/contributors.rst @@ -23,14 +23,14 @@ Contributors Many people have provided ideas and other assistance with Verilator. Verilator is receiving major development support from the `CHIPS Alliance -`_. +`_ and `Shunyao CAD `_. Previous major corporate sponsors of Verilator, by providing significant contributions of time or funds included include: Atmel Corporation, Cavium Inc., Compaq Corporation, Digital Equipment Corporation, Embecosm Ltd., Hicamp Systems, Intel Corporation, Mindspeed Technologies Inc., MicroTune Inc., picoChip Designs Ltd., Sun Microsystems Inc., Nauticus Networks Inc., -and SiCortex Inc. +SiCortex Inc, and Shunyao CAD. The people who have contributed major functionality are: Byron Bradley, Jeremy Bennett, Lane Brooks, John Coiner, Duane Galbi, Geza Lore, Todd diff --git a/src/V3Graph.cpp b/src/V3Graph.cpp index d47b786a6..1b5bc1ae4 100644 --- a/src/V3Graph.cpp +++ b/src/V3Graph.cpp @@ -23,6 +23,8 @@ #include #include +#include +#include #include int V3Graph::s_debug = 0; @@ -325,11 +327,19 @@ void V3Graph::dumpDotFile(const string& filename, bool colorAsSubgraph) const { *logp << "\t\t rankdir=" << dotRankDir() << "];\n"; // List of all possible subgraphs + // Collections of explicit ranks + std::unordered_set ranks; + std::unordered_multimap rankSets; std::multimap subgraphs; for (V3GraphVertex* vertexp = verticesBeginp(); vertexp; vertexp = vertexp->verticesNextp()) { const string vertexSubgraph = (colorAsSubgraph && vertexp->color()) ? cvtToStr(vertexp->color()) : ""; subgraphs.emplace(vertexSubgraph, vertexp); + const string& dotRank = vertexp->dotRank(); + if (!dotRank.empty()) { + ranks.emplace(dotRank); + rankSets.emplace(dotRank, vertexp); + } } // We use a map here, as we don't want to corrupt anything (userp) in the graph, @@ -346,7 +356,10 @@ void V3Graph::dumpDotFile(const string& filename, bool colorAsSubgraph) const { if (subgr != vertexSubgraph) { if (subgr != "") *logp << "\t};\n"; subgr = vertexSubgraph; - if (subgr != "") *logp << "\tsubgraph cluster_" << subgr << " {\n"; + if (subgr != "") { + *logp << "\tsubgraph cluster_" << subgr << " {\n"; + *logp << "\tlabel=\"" << subgr << "\"\n"; + } } if (subgr != "") *logp << "\t"; *logp << "\tn" << vertexp->dotName() << (n++) << "\t[fontsize=8 " @@ -382,6 +395,24 @@ void V3Graph::dumpDotFile(const string& filename, bool colorAsSubgraph) const { } } } + + // Print ranks + for (auto dotRank : ranks) { + *logp << "\t{ rank="; + if (dotRank != "sink" && dotRank != "source" && dotRank != "min" && dotRank != "max") { + *logp << "same"; + } else { + *logp << dotRank; + } + *logp << "; "; + auto bounds = rankSets.equal_range(dotRank); + for (auto it{bounds.first}; it != bounds.second; ++it) { + if (it != bounds.first) *logp << ", "; + *logp << 'n' << numMap[it->second] << ""; + } + *logp << " }\n"; + } + // Vertex::m_user end, now unused // Trailer diff --git a/src/V3Graph.h b/src/V3Graph.h index c8319f5a8..ae59fe4a4 100644 --- a/src/V3Graph.h +++ b/src/V3Graph.h @@ -218,6 +218,7 @@ public: virtual string dotShape() const { return ""; } virtual string dotStyle() const { return ""; } virtual string dotName() const { return ""; } + virtual string dotRank() const { return ""; } virtual uint32_t rankAdder() const { return 1; } virtual FileLine* fileline() const { return nullptr; } // nullptr for unknown virtual int sortCmp(const V3GraphVertex* rhsp) const {