You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
FIRRTL version 4.0.0circuitFoo: %[[
{"class":"sifive.enterprise.firrtl.FullAsyncResetAnnotation", "target":"~Foo|Foo>r"}
]]
public moduleFoo:
inputp : UInt<1>inputr : AsyncResetinputc : Clockinst bar of Bar
connect bar.r, asAsyncReset(UInt<1>(0))
connect bar.c, c
module Bar:
input c : Clock
input r : AsyncReset
reg reg : UInt<8>, c
When compiled with firtool with no additional options, we see InferResets uses the port Bar.r as the reset domain for the internals of Bar.
I would expect a new port to be added to Bar and it to be connected to Foo.r. This mistake happens because the logic in InferResetsPass::determineImpl tries to reuse existing reset ports in submodules, which it does by matching on the type and port name, which is not nearly enough. If we change the name of the port Bar.r to something other than r, then it will not reuse the port and will drive the correct reset signal to its target.
The text was updated successfully, but these errors were encountered:
Given this FIRRTL:
When compiled with
firtool
with no additional options, we see InferResets uses the portBar.r
as the reset domain for the internals ofBar
.I would expect a new port to be added to
Bar
and it to be connected toFoo.r
. This mistake happens because the logic inInferResetsPass::determineImpl
tries to reuse existing reset ports in submodules, which it does by matching on the type and port name, which is not nearly enough. If we change the name of the portBar.r
to something other thanr
, then it will not reuse the port and will drive the correct reset signal to its target.The text was updated successfully, but these errors were encountered: