diff --git a/lib/Dialect/FIRRTL/FIRRTLOpInterfaces.cpp b/lib/Dialect/FIRRTL/FIRRTLOpInterfaces.cpp index 03eea5aa04ba..5ec2c2cd2fe2 100644 --- a/lib/Dialect/FIRRTL/FIRRTLOpInterfaces.cpp +++ b/lib/Dialect/FIRRTL/FIRRTLOpInterfaces.cpp @@ -130,7 +130,7 @@ LogicalResult circt::firrtl::verifyModuleLikeOpInterface(FModuleLike module) { if (failed(verifyNoInputProbes(module))) return failure(); - // Enforce public module requirements. + // Enforce public and ext module requirements. if (module.isPublic() || isa(module)) { for (auto [idx, type] : llvm::enumerate( module.getPortTypesAttr().getAsValueRange())) { @@ -138,9 +138,11 @@ LogicalResult circt::firrtl::verifyModuleLikeOpInterface(FModuleLike module) { if (ftype.hasUninferredWidth()) return emitError(module.getPortLocation(idx), "public or ext module port must have known width"); - if (ftype.hasUninferredReset()) + // Presently abstract reset on extmodule is not explicitly disallowed in + // the FIRRTL spec. + if (ftype.hasUninferredReset() && !isa(module)) return emitError(module.getPortLocation(idx), - "public or ext module port must have concrete reset type"); + "public module port must have concrete reset type"); } } }