Consider:
firrtl.circuit "Top" {
hw.hierpath private @nla [@Parent::@inst, @Child::@w]
firrtl.module @Child() attributes {annotations = [{class = "firrtl.passes.InlineAnnotation"}]} {
// Single wire with two annotations referencing the same NLA!
%w = firrtl.wire sym @w {annotations = [
{circt.nonlocal = @nla, class = "anno1"},
{circt.nonlocal = @nla, class = "anno2"}
]} : !firrtl.uint<1>
}
firrtl.module @Parent() {
// This instance has a symbol conflict that will force renaming
%existing = firrtl.wire sym @w : !firrtl.uint<1>
firrtl.instance inst sym @inst @Child()
}
firrtl.module @Top() {
firrtl.instance p @Parent()
}
}
Two different annotations on same wire run into assertion failure if they share the same hierpath and the operation needs a new symbol ("renaming").
I believe making setInnerSym idempotent is the way to resolve this, check for and ignore redundant requests.
Consider:
Two different annotations on same wire run into assertion failure if they share the same hierpath and the operation needs a new symbol ("renaming").
I believe making
setInnerSymidempotent is the way to resolve this, check for and ignore redundant requests.