typedef enum {OPEN, CLOSED} door; typedef enum {UNHEATED, HEATING, HEATED} coil; typedef enum {NOTSTARTED, STARTED} start; typedef enum {NOERROR, ERROR} error; //********************************************** module main(clk); input clk; door reg oven_door; coil reg oven_coil; start reg oven_start; error reg oven_error; wire random; wire random1; wire delay; wire delay2; initial begin oven_door = OPEN; oven_coil = UNHEATED; oven_start = NOTSTARTED; oven_error = NOERROR; end assign random = $ND(0, 1); assign delay = $ND(0, 1); assign random1 = $ND(0, 1); assign delay2 = $ND(0, 1); always@(posedge clk) begin if(random) oven_door = OPEN; else oven_door = CLOSED; if(oven_error == ERROR && oven_door == CLOSED && delay) begin oven_error = NOERROR; oven_start = NOTSTARTED; oven_coil = UNHEATED; end else begin oven_start = STARTED; if(oven_door == OPEN) oven_error = ERROR; else oven_coil = HEATING; end end always@(posedge clk) begin if(random1) oven_door = OPEN; else oven_door = CLOSED; if(oven_door == OPEN && oven_coil == HEATING) begin oven_start = NOTSTARTED; oven_coil = UNHEATED; end else begin if(delay2) oven_coil = HEATED; end end endmodule