// Parameterized Ring Oscillator
`timescale 1ns/1ns

module RingOsc();
	reg enable;			// When 1, stop; when 0, start
	parameter N = 9; 		// This is the number of stages and must be odd
	parameter notDELAY = 10;
	parameter norDELAY = 15;
	wire [N:1] Waveform;

// Generate the oscillator
   	genvar i;
    	generate
		for (i = 1; i < N; i = i + 1)
			begin : notGates
            			not #notDELAY notGate(Waveform[i+1], Waveform[i]);
        		end
		nor #norDELAY norGate(Waveform[1], Waveform[N], enable);
	endgenerate

	initial begin
		enable <= 1; #initDELAYExpression;    // Run long enough to initialize all waveforms
		enable <= 0;		              // Start the oscillation
	end
endmodule