import "primitives/std.lib"; component main(@go go: 1, @clk clk: 1, @reset reset: 1) -> (@done done: 1) { cells { a = std_reg(2); b = std_reg(2); c = std_reg(2); @generated fsm = std_reg(2); } wires { group A { a.in = 2'd0; a.write_en = 1'd1; A[done] = a.done; } group B { b.in = 2'd1; b.write_en = 1'd1; B[done] = b.done; } group C { c.in = 2'd2; c.write_en = 1'd1; C[done] = c.done; } group seq { A[go] = fsm.out == 2'd0 & !A[done] ? 1'd1; fsm.in = fsm.out == 2'd0 & A[done] ? 2'd1; fsm.write_en = fsm.out == 2'd0 & A[done] ? 1'd1; B[go] = fsm.out == 2'd1 & !B[done] ? 1'd1; fsm.in = fsm.out == 2'd1 & B[done] ? 2'd2; fsm.write_en = fsm.out == 2'd1 & B[done] ? 1'd1; C[go] = fsm.out == 2'd2 & !C[done] ? 1'd1; fsm.in = fsm.out == 2'd2 & C[done] ? 2'd3; fsm.write_en = fsm.out == 2'd2 & C[done] ? 1'd1; seq[done] = fsm.out == 2'd3 ? 1'd1; } fsm.in = fsm.out == 2'd3 ? 2'd0; fsm.write_en = fsm.out == 2'd3 ? 1'd1; } control { seq; } }