in the section about combinational loops, it doesn't forbid combinational loops like so:
FIRRTL version 4.0.0
circuit Foo:
module Foo:
input d: UInt<1>
input clk: Clock
input do_reset: UInt<1>
output y: UInt<1>
wire rst: AsyncReset
connect rst, asAsyncReset(UInt<1>(0))
regreset r: UInt<1>, clk, rst, UInt<1>(0)
when do_reset:
connect rst, asAsyncReset(not(r)) ; not forbidden since the loop went through a register
connect r, d
connect y, r
Is this an oversight or expected?