It is quite straightforward to write ring oscillator in Verilog. It is also known that in reality regardless of initial state it will work reliably in real hardware, both in FPGA and ASIC form (if it's not optimized away).
But Verilog model without reset circuit (which is not needed in real implementation) will not work, as it will be plagued by undefined states.
Is it possible to suppress undefined states and make it work reliably in Verilog without making more complicated physical implementation (i.e. without adding reset)? I am simulating in Icarus Verilog, and silicon implementation is openlane.
Here I am trying to use SystemVerilog bit type and presetting initial value - but it all does not work. I still have rotating X states in simulation. Shifter[] has 1's - to make sure it's not optimized away.
wire bit c1_1 = 0;
wire bit c1_2 = 0;
wire bit c1_3 = 0;
assign #10 c1_1 = c1_3 ^ shifter[0];
assign #11 c1_2 = c1_1 ^ shifter[1];
assign #12 c1_3 = c1_2 ^ shifter[2];