The "circle in its parts" message is complaining about unclocked feedback. Chips like "Bit" need feedback to store their state, but that feedback is controlled through a DFF, so the circuit doesn't run wild.
An example of unclocked feedback would be this chip
CHIP Foo {
INPUT in;
OUTPUT out;
PARTS:
And (a=in, b=fb, out=aout, out=out);
Not (in=aout, out=fb);
}
Built with real parts, this circuit would oscillate between 0 and 1 output as fast as possible, whenever in is 1.
To make this a legal circuit for the Hardware Simulator, there needs to be a clocked delay somewhere. For instance
DFF (in=fb, out=dffout);
And (a=in, fb=dffout, ...
In the CPU, the most common unclocked feedback is ALU output somehow getting back to ALU x or y.
If you want to, feel free to email me your CPU and I'll let you know what I see.
--Mark