mirror of
https://github.com/verilator/verilator.git
synced 2026-10-06 01:54:01 +02:00
Improve V3EmitV for interfaces (#5796)
This commit is contained in:
@@ -196,6 +196,11 @@ string AstNode::prettyName(const string& namein) VL_PURE {
|
||||
pos += 7;
|
||||
continue;
|
||||
}
|
||||
if (0 == std::strncmp(pos, "__Viftop", 8)) {
|
||||
pretty += "";
|
||||
pos += 8;
|
||||
continue;
|
||||
}
|
||||
if (pos[0] == '_' && pos[1] == '_' && pos[2] == '0' && std::isxdigit(pos[3])
|
||||
&& std::isxdigit(pos[4])) {
|
||||
char value = 0;
|
||||
|
||||
@@ -1252,6 +1252,7 @@ public:
|
||||
, m_name{name} {
|
||||
this->addVarsp(varsp);
|
||||
}
|
||||
string verilogKwd() const override { return "modport"; }
|
||||
string name() const override VL_MT_STABLE { return m_name; }
|
||||
bool maybePointedTo() const override VL_MT_SAFE { return true; }
|
||||
ASTGEN_MEMBERS_AstModport;
|
||||
|
||||
+38
-1
@@ -726,6 +726,19 @@ class EmitVBaseVisitorConst VL_NOT_FINAL : public EmitCBaseVisitorConst {
|
||||
iterateConst(nodep->subDTypep()); // For post's key
|
||||
}
|
||||
}
|
||||
void visit(AstIfaceRefDType* nodep) override {
|
||||
if (m_arrayPost) {
|
||||
puts(" (");
|
||||
if (nodep->cellp()) {
|
||||
iterateConst(nodep->cellp());
|
||||
} else {
|
||||
puts("????");
|
||||
}
|
||||
puts(")");
|
||||
return;
|
||||
}
|
||||
puts(nodep->ifaceName());
|
||||
}
|
||||
void visit(AstRefDType* nodep) override {
|
||||
if (nodep->subDTypep()) {
|
||||
iterateConst(nodep->skipRefp());
|
||||
@@ -733,6 +746,30 @@ class EmitVBaseVisitorConst VL_NOT_FINAL : public EmitCBaseVisitorConst {
|
||||
puts("\n???? // "s + nodep->prettyTypeName() + " -> UNLINKED\n");
|
||||
}
|
||||
}
|
||||
void visit(AstModport* nodep) override {
|
||||
puts(nodep->verilogKwd());
|
||||
puts(" ");
|
||||
puts(nodep->prettyName());
|
||||
puts(" (\n");
|
||||
if (nodep->varsp()) {
|
||||
iterateConst(nodep->varsp());
|
||||
} else {
|
||||
puts("????");
|
||||
}
|
||||
puts(");\n");
|
||||
}
|
||||
void visit(AstModportVarRef* nodep) override {
|
||||
puts(nodep->direction().verilogKwd());
|
||||
puts(" ");
|
||||
if (nodep->varp()) {
|
||||
VL_RESTORER(m_suppressVarSemi);
|
||||
m_suppressVarSemi = true;
|
||||
iterateConst(nodep->varp());
|
||||
} else {
|
||||
puts(nodep->prettyName());
|
||||
}
|
||||
if (nodep->nextp()) puts(", ");
|
||||
}
|
||||
void visit(AstNodeUOrStructDType* nodep) override {
|
||||
if (m_arrayPost) return;
|
||||
puts(nodep->verilogKwd() + " ");
|
||||
@@ -815,7 +852,7 @@ class EmitVBaseVisitorConst VL_NOT_FINAL : public EmitCBaseVisitorConst {
|
||||
}
|
||||
}
|
||||
void visit(AstVarXRef* nodep) override {
|
||||
putfs(nodep, nodep->dotted());
|
||||
putfs(nodep, nodep->prettyName(nodep->dotted()));
|
||||
puts(".");
|
||||
if (nodep->varp()) {
|
||||
puts(nodep->varp()->prettyName());
|
||||
|
||||
Reference in New Issue
Block a user