; SPDX-License-Identifier: Apache-2.0 circuit ChirrtlMems : module ChirrtlMems : input clock : Clock input reset : UInt<1> cmem ram : UInt<32>[16] node newClock = clock wire wen : UInt<1> wen <= not(reset) ; Don't const prop me! reg raddr : UInt<4>, clock with : (reset => (reset, UInt(0))) raddr <= add(raddr, UInt(1)) infer mport r = ram[raddr], newClock reg waddr : UInt<4>, clock with : (reset => (reset, UInt(0))) waddr <= add(waddr, UInt(1)) when wen : node newerClock = clock infer mport w = ram[waddr], newerClock w <= waddr when eq(waddr, UInt(0)) : raddr <= UInt(0) when not(reset) : when gt(waddr, UInt(1)) : when neq(r, raddr) : printf(clock, UInt(1), "Assertion failed! r =/= raddr\n") stop(clock, UInt(1), 1) ; Failure! when eq(raddr, UInt(15)) : stop(clock, UInt(1), 0) ; Success!